[gnome-color-manager] trivial: Move the calibration specific code out of gcm-prefs and into GcmCalibration
- From: Richard Hughes <rhughes src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-color-manager] trivial: Move the calibration specific code out of gcm-prefs and into GcmCalibration
- Date: Fri, 12 Feb 2010 13:30:33 +0000 (UTC)
commit a953da4f4415544c881bf4395f66ef7a2f5eb8bb
Author: Richard Hughes <richard hughsie com>
Date: Fri Feb 12 13:23:35 2010 +0000
trivial: Move the calibration specific code out of gcm-prefs and into GcmCalibration
src/gcm-calibrate-argyll.c | 55 +++---
src/gcm-calibrate-argyll.h | 16 --
src/gcm-calibrate.c | 431 ++++++++++++++++++++++++++++++++++++++++++++
src/gcm-calibrate.h | 14 ++
src/gcm-prefs.c | 423 +-------------------------------------------
src/gcm-utils.h | 4 +
6 files changed, 476 insertions(+), 467 deletions(-)
---
diff --git a/src/gcm-calibrate-argyll.c b/src/gcm-calibrate-argyll.c
index 6fa1e5f..3bfb99d 100644
--- a/src/gcm-calibrate-argyll.c
+++ b/src/gcm-calibrate-argyll.c
@@ -90,7 +90,6 @@ struct _GcmCalibrateArgyllPrivate
GPtrArray *cached_dialogs;
gboolean already_on_window;
GcmCalibrateArgyllState state;
- GcmCalibrateArgyllReferenceKind reference_kind;
};
enum {
@@ -126,10 +125,16 @@ static const gchar *
gcm_calibrate_argyll_get_quality_arg (GcmCalibrateArgyll *calibrate_argyll)
{
GcmCalibrateArgyllPrivate *priv = calibrate_argyll->priv;
+ GcmCalibrateReferenceKind reference_kind;
+
+ /* get kind */
+ g_object_get (calibrate_argyll,
+ "reference-kind", &reference_kind,
+ NULL);
/* these have such low patch count, we only can do low quality */
- if (priv->reference_kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER ||
- priv->reference_kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_QPCARD_201)
+ if (reference_kind == GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER ||
+ reference_kind == GCM_CALIBRATE_REFERENCE_KIND_QPCARD_201)
return "-ql";
/* get the default precision */
@@ -727,42 +732,32 @@ out:
* gcm_calibrate_argyll_reference_kind_to_filename:
**/
static const gchar *
-gcm_calibrate_argyll_reference_kind_to_filename (GcmCalibrateArgyllReferenceKind kind)
+gcm_calibrate_argyll_reference_kind_to_filename (GcmCalibrateReferenceKind kind)
{
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_CMP_DIGITAL_TARGET_3)
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_CMP_DIGITAL_TARGET_3)
return "CMP_Digital_Target-3.cht";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_CMP_DT_003)
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_CMP_DT_003)
return "CMP_DT_003.cht";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER)
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER)
return "ColorChecker.cht";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER_DC)
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER_DC)
return "ColorCheckerDC.cht";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER_SG)
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER_SG)
return "ColorCheckerSG.cht";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_HUTCHCOLOR)
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_HUTCHCOLOR)
return "Hutchcolor.cht";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_I1_RGB_SCAN_1_4)
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_I1_RGB_SCAN_1_4)
return "i1_RGB_Scan_1.4.cht";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_IT8)
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_IT8)
return "it8.cht";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_LASER_SOFT_DC_PRO)
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_LASER_SOFT_DC_PRO)
return "LaserSoftDCPro.cht";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_QPCARD_201)
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_QPCARD_201)
return "QPcard_201.cht";
return NULL;
}
/**
- * gcm_calibrate_argyll_set_reference_kind:
- **/
-void
-gcm_calibrate_argyll_set_reference_kind (GcmCalibrateArgyll *calibrate_argyll,
- GcmCalibrateArgyllReferenceKind reference_kind)
-{
- calibrate_argyll->priv->reference_kind = reference_kind;
-}
-
-/**
* gcm_calibrate_argyll_device_copy:
**/
static gboolean
@@ -780,11 +775,12 @@ gcm_calibrate_argyll_device_copy (GcmCalibrateArgyll *calibrate_argyll, GError *
const gchar *title;
const gchar *message;
const gchar *filename_tmp;
- GcmCalibrateArgyllPrivate *priv = calibrate_argyll->priv;
+ GcmCalibrateReferenceKind reference_kind;
/* get shared data */
g_object_get (calibrate_argyll,
"basename", &basename,
+ "reference-kind", &reference_kind,
"filename-source", &filename_source,
"filename-reference", &filename_reference,
NULL);
@@ -804,7 +800,7 @@ gcm_calibrate_argyll_device_copy (GcmCalibrateArgyll *calibrate_argyll, GError *
dest_ref = g_build_filename (GCM_CALIBRATE_ARGYLL_TEMP_DIR, "scanin-ref.txt", NULL);
/* copy all files to /tmp as argyllcms doesn't cope well with paths */
- filename_tmp = gcm_calibrate_argyll_reference_kind_to_filename (priv->reference_kind);
+ filename_tmp = gcm_calibrate_argyll_reference_kind_to_filename (reference_kind);
filename_cht = g_build_filename ("/usr/share/color/argyll/ref", filename_tmp, NULL);
ret = gcm_utils_mkdir_and_copy (filename_cht, dest_cht, error);
if (!ret)
@@ -925,10 +921,12 @@ gcm_calibrate_argyll_device_generate_profile (GcmCalibrateArgyll *calibrate_argy
gchar *device = NULL;
const gchar *title;
const gchar *message;
+ GcmCalibrateReferenceKind reference_kind;
/* get shared data */
g_object_get (calibrate_argyll,
"basename", &basename,
+ "reference-kind", &reference_kind,
"device", &device,
NULL);
@@ -974,8 +972,8 @@ gcm_calibrate_argyll_device_generate_profile (GcmCalibrateArgyll *calibrate_argy
g_ptr_array_add (array, g_strdup (gcm_calibrate_argyll_get_quality_arg (calibrate_argyll)));
/* check whether the target is a low patch count target and generate low quality single shaper profile */
- if (priv->reference_kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER ||
- priv->reference_kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_QPCARD_201)
+ if (reference_kind == GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER ||
+ reference_kind == GCM_CALIBRATE_REFERENCE_KIND_QPCARD_201)
g_ptr_array_add (array, g_strdup ("-aS"));
g_ptr_array_add (array, g_strdup (basename));
@@ -1510,7 +1508,6 @@ gcm_calibrate_argyll_init (GcmCalibrateArgyll *calibrate_argyll)
calibrate_argyll->priv->cached_dialogs = g_ptr_array_new_with_free_func ((GDestroyNotify)gcm_calibrate_argyll_dialog_free);
calibrate_argyll->priv->already_on_window = FALSE;
calibrate_argyll->priv->state = GCM_CALIBRATE_ARGYLL_STATE_IDLE;
- calibrate_argyll->priv->reference_kind = GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_UNKNOWN;
/* get UI */
calibrate_argyll->priv->builder = gtk_builder_new ();
diff --git a/src/gcm-calibrate-argyll.h b/src/gcm-calibrate-argyll.h
index 1c20c9f..7145e87 100644
--- a/src/gcm-calibrate-argyll.h
+++ b/src/gcm-calibrate-argyll.h
@@ -57,24 +57,8 @@ struct _GcmCalibrateArgyllClass
void (*_gcm_reserved5) (void);
};
-typedef enum {
- GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_CMP_DIGITAL_TARGET_3,
- GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_CMP_DT_003,
- GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER,
- GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER_DC,
- GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER_SG,
- GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_HUTCHCOLOR,
- GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_I1_RGB_SCAN_1_4,
- GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_IT8,
- GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_LASER_SOFT_DC_PRO,
- GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_QPCARD_201,
- GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_UNKNOWN
-} GcmCalibrateArgyllReferenceKind;
-
GType gcm_calibrate_argyll_get_type (void);
GcmCalibrateArgyll *gcm_calibrate_argyll_new (void);
-void gcm_calibrate_argyll_set_reference_kind (GcmCalibrateArgyll *calibrate_argyll,
- GcmCalibrateArgyllReferenceKind reference_kind);
G_END_DECLS
diff --git a/src/gcm-calibrate.c b/src/gcm-calibrate.c
index 38c8ff1..39f6d90 100644
--- a/src/gcm-calibrate.c
+++ b/src/gcm-calibrate.c
@@ -52,6 +52,7 @@ static void gcm_calibrate_finalize (GObject *object);
struct _GcmCalibratePrivate
{
GcmColorDevice *color_device;
+ GcmCalibrateReferenceKind reference_kind;
gboolean is_lcd;
gboolean is_crt;
gchar *output_name;
@@ -76,6 +77,7 @@ enum {
PROP_MANUFACTURER,
PROP_IS_LCD,
PROP_IS_CRT,
+ PROP_REFERENCE_KIND,
PROP_OUTPUT_NAME,
PROP_FILENAME_SOURCE,
PROP_FILENAME_REFERENCE,
@@ -464,6 +466,301 @@ out:
return ret;
}
+
+/**
+ * gcm_calibrate_device_get_reference_image:
+ **/
+static gchar *
+gcm_calibrate_device_get_reference_image (const gchar *directory, GtkWindow *window)
+{
+ gchar *filename = NULL;
+ GtkWidget *dialog;
+ GtkFileFilter *filter;
+
+ /* TRANSLATORS: dialog for file->open dialog */
+ dialog = gtk_file_chooser_dialog_new (_("Select reference image"), window,
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), GCM_STOCK_ICON);
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog), directory);
+ gtk_file_chooser_set_create_folders (GTK_FILE_CHOOSER(dialog), FALSE);
+
+ /* setup the filter */
+ filter = gtk_file_filter_new ();
+ gtk_file_filter_add_mime_type (filter, "image/tiff");
+ /* TRANSLATORS: filter name on the file->open dialog */
+ gtk_file_filter_set_name (filter, _("Supported images files"));
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter);
+// g_object_unref (filter);
+
+ /* did user choose file */
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+ filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog));
+
+ /* we're done */
+ gtk_widget_destroy (dialog);
+
+ /* or NULL for missing */
+ return filename;
+}
+
+/**
+ * gcm_calibrate_device_get_reference_data:
+ **/
+static gchar *
+gcm_calibrate_device_get_reference_data (const gchar *directory, GtkWindow *window)
+{
+ gchar *filename = NULL;
+ GtkWidget *dialog;
+ GtkFileFilter *filter;
+
+ /* TRANSLATORS: dialog for file->open dialog */
+ dialog = gtk_file_chooser_dialog_new (_("Select CIE reference values file"), window,
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), GCM_STOCK_ICON);
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog), directory);
+ gtk_file_chooser_set_create_folders (GTK_FILE_CHOOSER(dialog), FALSE);
+
+ /* setup the filter */
+ filter = gtk_file_filter_new ();
+ gtk_file_filter_add_mime_type (filter, "application/x-it87");
+
+ /* we can remove this when we depend on a new shared-mime-info */
+ gtk_file_filter_add_pattern (filter, "*.txt");
+ gtk_file_filter_add_pattern (filter, "*.TXT");
+ gtk_file_filter_add_pattern (filter, "*.it8");
+ gtk_file_filter_add_pattern (filter, "*.IT8");
+
+ /* TRANSLATORS: filter name on the file->open dialog */
+ gtk_file_filter_set_name (filter, _("CIE values"));
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter);
+// g_object_unref (filter);
+
+ /* did user choose file */
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+ filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog));
+
+ /* we're done */
+ gtk_widget_destroy (dialog);
+
+ /* or NULL for missing */
+ return filename;
+}
+
+/**
+ * gcm_calibrate_get_device_for_it8_file:
+ **/
+static gchar *
+gcm_calibrate_get_device_for_it8_file (const gchar *filename)
+{
+ gchar *contents = NULL;
+ gchar **lines = NULL;
+ gchar *device = NULL;
+ gboolean ret;
+ GError *error = NULL;
+ guint i;
+
+ /* get contents */
+ ret = g_file_get_contents (filename, &contents, NULL, &error);
+ if (!ret) {
+ egg_warning ("failed to get contents: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ /* split */
+ lines = g_strsplit (contents, "\n", 15);
+ for (i=0; lines[i] != NULL; i++) {
+ if (!g_str_has_prefix (lines[i], "ORIGINATOR"))
+ continue;
+
+ /* copy, without the header or double quotes */
+ device = g_strdup (lines[i]+12);
+ g_strdelimit (device, "\"", '\0');
+ break;
+ }
+out:
+ g_free (contents);
+ g_strfreev (lines);
+ return device;
+}
+
+/**
+ * gcm_calibrate_reference_kind_to_localised_string:
+ **/
+static const gchar *
+gcm_calibrate_reference_kind_to_localised_string (GcmCalibrateReferenceKind kind)
+{
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_CMP_DIGITAL_TARGET_3) {
+ /* TRANSLATORS: this is probably a brand name */
+ return _("CMP Digital Target 3");
+ }
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_CMP_DT_003) {
+ /* TRANSLATORS: this is probably a brand name */
+ return _("CMP DT 003");
+ }
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER) {
+ /* TRANSLATORS: this is probably a brand name */
+ return _("Color Checker");
+ }
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER_DC) {
+ /* TRANSLATORS: this is probably a brand name */
+ return _("Color Checker DC");
+ }
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER_SG) {
+ /* TRANSLATORS: this is probably a brand name */
+ return _("Color Checker SG");
+ }
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_HUTCHCOLOR) {
+ /* TRANSLATORS: this is probably a brand name */
+ return _("Hutchcolor");
+ }
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_I1_RGB_SCAN_1_4) {
+ /* TRANSLATORS: this is probably a brand name */
+ return _("i1 RGB Scan 1.4");
+ }
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_IT8) {
+ /* TRANSLATORS: this is probably a brand name */
+ return _("IT8.7/2");
+ }
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_LASER_SOFT_DC_PRO) {
+ /* TRANSLATORS: this is probably a brand name */
+ return _("Laser Soft DC Pro");
+ }
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_QPCARD_201) {
+ /* TRANSLATORS: this is probably a brand name */
+ return _("QPcard 201");
+ }
+ return NULL;
+}
+
+/**
+ * gcm_calibrate_reference_kind_to_thumbnail_image_filename:
+ **/
+static const gchar *
+gcm_calibrate_reference_kind_to_thumbnail_image_filename (GcmCalibrateReferenceKind kind)
+{
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_CMP_DIGITAL_TARGET_3)
+ return "CMP-DigitalTarget3.png";
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_CMP_DT_003)
+ return NULL;
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER)
+ return "ColorChecker24.png";
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER_DC)
+ return "ColorCheckerDC.png";
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER_SG)
+ return "ColorCheckerSG.png";
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_HUTCHCOLOR)
+ return NULL;
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_I1_RGB_SCAN_1_4)
+ return "i1_RGB_Scan_14.png";
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_IT8)
+ return "IT872.png";
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_LASER_SOFT_DC_PRO)
+ return NULL;
+ if (kind == GCM_CALIBRATE_REFERENCE_KIND_QPCARD_201)
+ return "QPcard_201.png";
+ return NULL;
+}
+
+/**
+ * gcm_calibrate_reference_kind_combobox_cb:
+ **/
+static void
+gcm_calibrate_reference_kind_combobox_cb (GtkComboBox *combo_box, GtkImage *image)
+{
+ GcmCalibrateReferenceKind reference_kind;
+ const gchar *filename;
+ gchar *path;
+
+ /* not sorted so we can just use the index */
+ reference_kind = gtk_combo_box_get_active (GTK_COMBO_BOX (combo_box));
+ filename = gcm_calibrate_reference_kind_to_thumbnail_image_filename (reference_kind);
+
+ /* fallback */
+ if (filename == NULL)
+ filename = "unknown.png";
+
+ path = g_build_filename (GCM_DATA, "targets", filename, NULL);
+ gtk_image_set_from_file (GTK_IMAGE (image), path);
+ g_free (path);
+}
+
+/**
+ * gcm_calibrate_get_reference_kind:
+ **/
+static GcmCalibrateReferenceKind
+gcm_calibrate_get_reference_kind (GtkWindow *window)
+{
+ GtkResponseType response;
+ GtkWidget *dialog;
+ GtkWidget *vbox;
+ GtkWidget *combo_box;
+ GtkWidget *image;
+ const gchar *title;
+ const gchar *message;
+ guint i;
+ GcmCalibrateReferenceKind reference_kind = GCM_CALIBRATE_REFERENCE_KIND_UNKNOWN;
+
+ /* TRANSLATORS: this is the window title for when the user selects the chart type.
+ A chart is a type of reference image the user has purchased. */
+ title = _("Please select chart type");
+
+ /* TRANSLATORS: this is the message body for the chart selection */
+ message = _("Please select the chart type which corresponds to your reference file.");
+
+ dialog = gtk_message_dialog_new (window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_CANCEL, "%s", title);
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", message);
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), GCM_STOCK_ICON);
+ /* TRANSLATORS: button, confirm the chart type */
+ gtk_dialog_add_button (GTK_DIALOG (dialog), _("Use this type"), GTK_RESPONSE_YES);
+
+ /* use image to display a picture of the target */
+ image = gtk_image_new ();
+ gtk_widget_set_size_request (image, 200, 140);
+
+ /* create the combobox */
+ combo_box = gtk_combo_box_new_text ();
+ g_signal_connect (combo_box, "changed", G_CALLBACK (gcm_calibrate_reference_kind_combobox_cb), image);
+
+ /* add the list of charts */
+ for (i = 0; i < GCM_CALIBRATE_REFERENCE_KIND_UNKNOWN; i++) {
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box),
+ gcm_calibrate_reference_kind_to_localised_string (i));
+ }
+
+ /* use IT8 by default */
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), GCM_CALIBRATE_REFERENCE_KIND_IT8);
+
+ /* pack it */
+ vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+
+ gtk_box_pack_start (GTK_BOX(vbox), image, TRUE, TRUE, 6);
+ gtk_box_pack_start (GTK_BOX(vbox), combo_box, TRUE, TRUE, 6);
+ gtk_widget_show (combo_box);
+ gtk_widget_show (image);
+
+ /* run the dialog */
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ /* not sorted so we can just use the index */
+ reference_kind = gtk_combo_box_get_active (GTK_COMBO_BOX (combo_box));
+
+ /* nuke the UI */
+ gtk_widget_destroy (dialog);
+ if (response != GTK_RESPONSE_YES) {
+ reference_kind = GCM_CALIBRATE_REFERENCE_KIND_UNKNOWN;
+ goto out;
+ }
+out:
+ return reference_kind;
+}
+
/**
* gcm_calibrate_device:
**/
@@ -471,8 +768,126 @@ gboolean
gcm_calibrate_device (GcmCalibrate *calibrate, GtkWindow *window, GError **error)
{
gboolean ret = FALSE;
+ gboolean has_shared_targets;
+ gchar *scanned_image = NULL;
+ gchar *reference_data = NULL;
+ gchar *device = NULL;
+ const gchar *directory;
+ GString *string;
+ GtkResponseType response;
+ GtkWidget *dialog;
+ const gchar *title;
+ GcmCalibratePrivate *priv = calibrate->priv;
GcmCalibrateClass *klass = GCM_CALIBRATE_GET_CLASS (calibrate);
+ string = g_string_new ("");
+
+ /* install shared-color-targets package */
+ has_shared_targets = g_file_test ("/usr/share/shared-color-targets", G_FILE_TEST_IS_DIR);
+ if (!has_shared_targets) {
+#ifdef GCM_USE_PACKAGEKIT
+ /* ask the user to confirm */
+ dialog = gtk_message_dialog_new (window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
+ /* TRANSLATORS: title, usually we can tell based on the EDID data or output name */
+ _("Install missing files?"));
+
+ /* TRANSLATORS: dialog message saying the color targets are not installed */
+ g_string_append_printf (string, "%s ", _("Common color target files are not installed on this computer."));
+ /* TRANSLATORS: dialog message saying the color targets are not installed */
+ g_string_append_printf (string, "%s\n\n", _("Color target files are needed to convert the image to a color profile."));
+ /* TRANSLATORS: dialog message, asking if it's okay to install them */
+ g_string_append_printf (string, "%s\n\n", _("Do you want them to be automatically installed?"));
+ /* TRANSLATORS: dialog message, if the user has the target file on a CDROM then there's no need for this package */
+ g_string_append_printf (string, "%s", _("If you have already have the correct file then you can skip this step."));
+
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", string->str);
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), GCM_STOCK_ICON);
+ /* TRANSLATORS: button, install a package */
+ gtk_dialog_add_button (GTK_DIALOG (dialog), _("Install"), GTK_RESPONSE_YES);
+ /* TRANSLATORS: button, skip installing a package */
+ gtk_dialog_add_button (GTK_DIALOG (dialog), _("Do not install"), GTK_RESPONSE_CANCEL);
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+
+ /* only install if the user wanted to */
+ if (response == GTK_RESPONSE_YES)
+ has_shared_targets = gcm_utils_install_package (GCM_PREFS_PACKAGE_NAME_SHARED_COLOR_TARGETS, window);
+#else
+ egg_warning ("cannot install: this package was not compiled with --enable-packagekit");
+#endif
+ }
+
+ /* TRANSLATORS: title, we're setting up the device ready for calibration */
+ title = _("Setting up device");
+ g_string_set_size (string, 0);
+
+ /* TRANSLATORS: dialog message, preface */
+ g_string_append_printf (string, "%s\n", _("Before calibrating the device, you have to manually acquire a reference image and save it as a TIFF image file."));
+
+ /* TRANSLATORS: dialog message, preface */
+ g_string_append_printf (string, "%s\n", _("Ensure that the contrast and brightness is not changed and color correction profiles are not applied."));
+
+ /* TRANSLATORS: dialog message, suffix */
+ g_string_append_printf (string, "%s\n", _("The device sensor should have been cleaned prior to scanning and the output file resolution should be at least 200dpi."));
+
+ /* TRANSLATORS: dialog message, suffix */
+ g_string_append_printf (string, "\n%s\n", _("For best results, the reference image should also be less than two years old."));
+
+ /* TRANSLATORS: dialog question */
+ g_string_append_printf (string, "\n%s", _("Do you have a scanned TIFF file of the reference image?"));
+
+ /* ask the user to confirm */
+ dialog = gtk_message_dialog_new (window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_CANCEL, "%s", title);
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", string->str);
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), GCM_STOCK_ICON);
+ /* TRANSLATORS: button, confirm the user has a file */
+ gtk_dialog_add_button (GTK_DIALOG (dialog), _("I have already scanned in a file"), GTK_RESPONSE_YES);
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+ if (response != GTK_RESPONSE_YES) {
+ g_set_error_literal (error, 1, 0, "user has not scanned in file");
+ ret = FALSE;
+ goto out;
+ }
+
+ /* set the reference kind */
+ priv->reference_kind = gcm_calibrate_get_reference_kind (window);
+ if (priv->reference_kind == GCM_CALIBRATE_REFERENCE_KIND_UNKNOWN) {
+ g_set_error_literal (error, 1, 0, "could not get reference kind");
+ ret = FALSE;
+ goto out;
+ }
+
+ /* get scanned image */
+ directory = g_get_home_dir ();
+ scanned_image = gcm_calibrate_device_get_reference_image (directory, window);
+ if (scanned_image == NULL) {
+ g_set_error_literal (error, 1, 0, "could not get reference image");
+ ret = FALSE;
+ goto out;
+ }
+
+ /* get reference data */
+ directory = has_shared_targets ? "/usr/share/color/targets" : "/media";
+ reference_data = gcm_calibrate_device_get_reference_data (directory, window);
+ if (reference_data == NULL) {
+ g_set_error_literal (error, 1, 0, "could not get reference target");
+ ret = FALSE;
+ goto out;
+ }
+
+ /* use the ORIGINATOR in the it8 file */
+ device = gcm_calibrate_get_device_for_it8_file (reference_data);
+ if (device == NULL)
+ device = g_strdup ("IT8.7");
+
+ /* set the calibration parameters */
+ g_object_set (calibrate,
+ "filename-source", scanned_image,
+ "filename-reference", reference_data,
+ "device", device,
+ NULL);
+
/* coldplug source */
if (klass->calibrate_device == NULL) {
g_set_error_literal (error, 1, 0, "no support");
@@ -482,6 +897,11 @@ gcm_calibrate_device (GcmCalibrate *calibrate, GtkWindow *window, GError **error
/* proxy */
ret = klass->calibrate_device (calibrate, window, error);
out:
+ if (string != NULL)
+ g_string_free (string, TRUE);
+ g_free (device);
+ g_free (scanned_image);
+ g_free (reference_data);
return ret;
}
@@ -501,6 +921,9 @@ gcm_calibrate_get_property (GObject *object, guint prop_id, GValue *value, GPara
case PROP_IS_CRT:
g_value_set_boolean (value, priv->is_crt);
break;
+ case PROP_REFERENCE_KIND:
+ g_value_set_boolean (value, priv->reference_kind);
+ break;
case PROP_OUTPUT_NAME:
g_value_set_string (value, priv->output_name);
break;
@@ -650,6 +1073,14 @@ gcm_calibrate_class_init (GcmCalibrateClass *klass)
g_object_class_install_property (object_class, PROP_IS_CRT, pspec);
/**
+ * GcmCalibrate:reference-kind:
+ */
+ pspec = g_param_spec_uint ("reference-kind", NULL, NULL,
+ 0, G_MAXUINT, 0,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_REFERENCE_KIND, pspec);
+
+ /**
* GcmCalibrate:output-name:
*/
pspec = g_param_spec_string ("output-name", NULL, NULL,
diff --git a/src/gcm-calibrate.h b/src/gcm-calibrate.h
index d83b95e..04fca80 100644
--- a/src/gcm-calibrate.h
+++ b/src/gcm-calibrate.h
@@ -63,6 +63,20 @@ struct _GcmCalibrateClass
void (*_gcm_reserved5) (void);
};
+typedef enum {
+ GCM_CALIBRATE_REFERENCE_KIND_CMP_DIGITAL_TARGET_3,
+ GCM_CALIBRATE_REFERENCE_KIND_CMP_DT_003,
+ GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER,
+ GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER_DC,
+ GCM_CALIBRATE_REFERENCE_KIND_COLOR_CHECKER_SG,
+ GCM_CALIBRATE_REFERENCE_KIND_HUTCHCOLOR,
+ GCM_CALIBRATE_REFERENCE_KIND_I1_RGB_SCAN_1_4,
+ GCM_CALIBRATE_REFERENCE_KIND_IT8,
+ GCM_CALIBRATE_REFERENCE_KIND_LASER_SOFT_DC_PRO,
+ GCM_CALIBRATE_REFERENCE_KIND_QPCARD_201,
+ GCM_CALIBRATE_REFERENCE_KIND_UNKNOWN
+} GcmCalibrateReferenceKind;
+
GType gcm_calibrate_get_type (void);
GcmCalibrate *gcm_calibrate_new (void);
gboolean gcm_calibrate_display (GcmCalibrate *calibrate,
diff --git a/src/gcm-prefs.c b/src/gcm-prefs.c
index ba54008..c990b5e 100644
--- a/src/gcm-prefs.c
+++ b/src/gcm-prefs.c
@@ -44,10 +44,6 @@
#include "gcm-utils.h"
#include "gcm-xyz.h"
-/* DISTROS: you will have to patch if you have changed the name of these packages */
-#define GCM_PREFS_PACKAGE_NAME_SHARED_COLOR_TARGETS "shared-color-targets"
-#define GCM_PREFS_PACKAGE_NAME_ARGYLLCMS "argyllcms"
-
static GtkBuilder *builder = NULL;
static GtkListStore *list_store_devices = NULL;
static GtkListStore *list_store_profiles = NULL;
@@ -275,427 +271,14 @@ out:
}
/**
- * gcm_prefs_calibrate_device_get_reference_image:
- **/
-static gchar *
-gcm_prefs_calibrate_device_get_reference_image (const gchar *directory)
-{
- gchar *filename = NULL;
- GtkWindow *window;
- GtkWidget *dialog;
- GtkFileFilter *filter;
-
- /* create new dialog */
- window = GTK_WINDOW(gtk_builder_get_object (builder, "dialog_prefs"));
- /* TRANSLATORS: dialog for file->open dialog */
- dialog = gtk_file_chooser_dialog_new (_("Select reference image"), window,
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
- NULL);
- gtk_window_set_icon_name (GTK_WINDOW (dialog), GCM_STOCK_ICON);
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog), directory);
- gtk_file_chooser_set_create_folders (GTK_FILE_CHOOSER(dialog), FALSE);
-
- /* setup the filter */
- filter = gtk_file_filter_new ();
- gtk_file_filter_add_mime_type (filter, "image/tiff");
- /* TRANSLATORS: filter name on the file->open dialog */
- gtk_file_filter_set_name (filter, _("Supported images files"));
- gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter);
-// g_object_unref (filter);
-
- /* did user choose file */
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog));
-
- /* we're done */
- gtk_widget_destroy (dialog);
-
- /* or NULL for missing */
- return filename;
-}
-
-/**
- * gcm_prefs_calibrate_device_get_reference_data:
- **/
-static gchar *
-gcm_prefs_calibrate_device_get_reference_data (const gchar *directory)
-{
- gchar *filename = NULL;
- GtkWindow *window;
- GtkWidget *dialog;
- GtkFileFilter *filter;
-
- /* create new dialog */
- window = GTK_WINDOW(gtk_builder_get_object (builder, "dialog_prefs"));
- /* TRANSLATORS: dialog for file->open dialog */
- dialog = gtk_file_chooser_dialog_new (_("Select CIE reference values file"), window,
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
- NULL);
- gtk_window_set_icon_name (GTK_WINDOW (dialog), GCM_STOCK_ICON);
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog), directory);
- gtk_file_chooser_set_create_folders (GTK_FILE_CHOOSER(dialog), FALSE);
-
- /* setup the filter */
- filter = gtk_file_filter_new ();
- gtk_file_filter_add_mime_type (filter, "application/x-it87");
-
- /* we can remove this when we depend on a new shared-mime-info */
- gtk_file_filter_add_pattern (filter, "*.txt");
- gtk_file_filter_add_pattern (filter, "*.TXT");
- gtk_file_filter_add_pattern (filter, "*.it8");
- gtk_file_filter_add_pattern (filter, "*.IT8");
-
- /* TRANSLATORS: filter name on the file->open dialog */
- gtk_file_filter_set_name (filter, _("CIE values"));
- gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter);
-// g_object_unref (filter);
-
- /* did user choose file */
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog));
-
- /* we're done */
- gtk_widget_destroy (dialog);
-
- /* or NULL for missing */
- return filename;
-}
-
-/**
- * gcm_prefs_get_device_for_it8_file:
- **/
-static gchar *
-gcm_prefs_get_device_for_it8_file (const gchar *filename)
-{
- gchar *contents = NULL;
- gchar **lines = NULL;
- gchar *device = NULL;
- gboolean ret;
- GError *error = NULL;
- guint i;
-
- /* get contents */
- ret = g_file_get_contents (filename, &contents, NULL, &error);
- if (!ret) {
- egg_warning ("failed to get contents: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- /* split */
- lines = g_strsplit (contents, "\n", 15);
- for (i=0; lines[i] != NULL; i++) {
- if (!g_str_has_prefix (lines[i], "ORIGINATOR"))
- continue;
-
- /* copy, without the header or double quotes */
- device = g_strdup (lines[i]+12);
- g_strdelimit (device, "\"", '\0');
- break;
- }
-out:
- g_free (contents);
- g_strfreev (lines);
- return device;
-}
-
-/**
- * gcm_prefs_reference_kind_to_localised_string:
- **/
-static const gchar *
-gcm_prefs_reference_kind_to_localised_string (GcmCalibrateArgyllReferenceKind kind)
-{
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_CMP_DIGITAL_TARGET_3) {
- /* TRANSLATORS: this is probably a brand name */
- return _("CMP Digital Target 3");
- }
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_CMP_DT_003) {
- /* TRANSLATORS: this is probably a brand name */
- return _("CMP DT 003");
- }
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER) {
- /* TRANSLATORS: this is probably a brand name */
- return _("Color Checker");
- }
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER_DC) {
- /* TRANSLATORS: this is probably a brand name */
- return _("Color Checker DC");
- }
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER_SG) {
- /* TRANSLATORS: this is probably a brand name */
- return _("Color Checker SG");
- }
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_HUTCHCOLOR) {
- /* TRANSLATORS: this is probably a brand name */
- return _("Hutchcolor");
- }
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_I1_RGB_SCAN_1_4) {
- /* TRANSLATORS: this is probably a brand name */
- return _("i1 RGB Scan 1.4");
- }
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_IT8) {
- /* TRANSLATORS: this is probably a brand name */
- return _("IT8.7/2");
- }
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_LASER_SOFT_DC_PRO) {
- /* TRANSLATORS: this is probably a brand name */
- return _("Laser Soft DC Pro");
- }
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_QPCARD_201) {
- /* TRANSLATORS: this is probably a brand name */
- return _("QPcard 201");
- }
- return NULL;
-}
-
-/**
- * gcm_prefs_reference_kind_to_image_filename:
- **/
-static const gchar *
-gcm_prefs_reference_kind_to_image_filename (GcmCalibrateArgyllReferenceKind kind)
-{
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_CMP_DIGITAL_TARGET_3)
- return "CMP-DigitalTarget3.png";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_CMP_DT_003)
- return NULL;
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER)
- return "ColorChecker24.png";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER_DC)
- return "ColorCheckerDC.png";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER_SG)
- return "ColorCheckerSG.png";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_HUTCHCOLOR)
- return NULL;
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_I1_RGB_SCAN_1_4)
- return "i1_RGB_Scan_14.png";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_IT8)
- return "IT872.png";
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_LASER_SOFT_DC_PRO)
- return NULL;
- if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_QPCARD_201)
- return "QPcard_201.png";
- return NULL;
-}
-
-/**
- * gcm_prefs_reference_kind_combobox_cb:
- **/
-static void
-gcm_prefs_reference_kind_combobox_cb (GtkComboBox *combo_box, GtkImage *image)
-{
- GcmCalibrateArgyllReferenceKind reference_kind;
- const gchar *filename;
- gchar *path;
-
- /* not sorted so we can just use the index */
- reference_kind = gtk_combo_box_get_active (GTK_COMBO_BOX (combo_box));
- filename = gcm_prefs_reference_kind_to_image_filename (reference_kind);
-
- /* fallback */
- if (filename == NULL)
- filename = "unknown.png";
-
- path = g_build_filename (GCM_DATA, "targets", filename, NULL);
- gtk_image_set_from_file (GTK_IMAGE (image), path);
- g_free (path);
-}
-
-/**
- * gcm_prefs_get_reference_kind:
- **/
-static GcmCalibrateArgyllReferenceKind
-gcm_prefs_get_reference_kind ()
-{
- GtkWindow *window;
- GtkResponseType response;
- GtkWidget *dialog;
- GtkWidget *vbox;
- GtkWidget *combo_box;
- GtkWidget *image;
- const gchar *title;
- const gchar *message;
- guint i;
- GcmCalibrateArgyllReferenceKind reference_kind = GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_UNKNOWN;
-
- window = GTK_WINDOW(gtk_builder_get_object (builder, "dialog_prefs"));
-
- /* TRANSLATORS: this is the window title for when the user selects the chart type. A chart is a type of reference image the user has purchased. */
- title = _("Please select chart type");
-
- /* TRANSLATORS: this is the message body for the chart selection */
- message = _("Please select the chart type which corresponds to your reference file.");
-
- dialog = gtk_message_dialog_new (window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_CANCEL, "%s", title);
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", message);
- gtk_window_set_icon_name (GTK_WINDOW (dialog), GCM_STOCK_ICON);
- /* TRANSLATORS: button, confirm the chart type */
- gtk_dialog_add_button (GTK_DIALOG (dialog), _("Use this type"), GTK_RESPONSE_YES);
-
- /* use image to display a picture of the target */
- image = gtk_image_new ();
- gtk_widget_set_size_request (image, 200, 140);
-
- /* create the combobox */
- combo_box = gtk_combo_box_new_text ();
- g_signal_connect (combo_box, "changed", G_CALLBACK (gcm_prefs_reference_kind_combobox_cb), image);
-
- /* add the list of charts */
- for (i = 0; i < GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_UNKNOWN; i++) {
- gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box),
- gcm_prefs_reference_kind_to_localised_string (i));
- }
-
- /* use IT8 by default */
- gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_IT8);
-
- /* pack it */
- vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
-
- gtk_box_pack_start (GTK_BOX(vbox), image, TRUE, TRUE, 6);
- gtk_box_pack_start (GTK_BOX(vbox), combo_box, TRUE, TRUE, 6);
- gtk_widget_show (combo_box);
- gtk_widget_show (image);
-
- /* run the dialog */
- response = gtk_dialog_run (GTK_DIALOG (dialog));
-
- /* not sorted so we can just use the index */
- reference_kind = gtk_combo_box_get_active (GTK_COMBO_BOX (combo_box));
-
- /* nuke the UI */
- gtk_widget_destroy (dialog);
- if (response != GTK_RESPONSE_YES) {
- reference_kind = GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_UNKNOWN;
- goto out;
- }
-out:
- return reference_kind;
-}
-
-/**
* gcm_prefs_calibrate_device:
**/
static gboolean
gcm_prefs_calibrate_device (GcmCalibrate *calibrate)
{
gboolean ret = FALSE;
- gboolean has_shared_targets;
GError *error = NULL;
- gchar *scanned_image = NULL;
- gchar *reference_data = NULL;
- gchar *device = NULL;
- const gchar *directory;
GtkWindow *window;
- GString *string;
- GtkResponseType response;
- GtkWidget *dialog;
- const gchar *title;
- GcmCalibrateArgyllReferenceKind reference_kind;
-
- window = GTK_WINDOW(gtk_builder_get_object (builder, "dialog_prefs"));
- string = g_string_new ("");
-
- /* install shared-color-targets package */
- has_shared_targets = g_file_test ("/usr/share/shared-color-targets", G_FILE_TEST_IS_DIR);
- if (!has_shared_targets) {
-#ifdef GCM_USE_PACKAGEKIT
- /* ask the user to confirm */
- dialog = gtk_message_dialog_new (window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
- /* TRANSLATORS: title, usually we can tell based on the EDID data or output name */
- _("Install missing files?"));
-
- /* TRANSLATORS: dialog message saying the color targets are not installed */
- g_string_append_printf (string, "%s ", _("Common color target files are not installed on this computer."));
- /* TRANSLATORS: dialog message saying the color targets are not installed */
- g_string_append_printf (string, "%s\n\n", _("Color target files are needed to convert the image to a color profile."));
- /* TRANSLATORS: dialog message, asking if it's okay to install them */
- g_string_append_printf (string, "%s\n\n", _("Do you want them to be automatically installed?"));
- /* TRANSLATORS: dialog message, if the user has the target file on a CDROM then there's no need for this package */
- g_string_append_printf (string, "%s", _("If you have already have the correct file then you can skip this step."));
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", string->str);
- gtk_window_set_icon_name (GTK_WINDOW (dialog), GCM_STOCK_ICON);
- /* TRANSLATORS: button, install a package */
- gtk_dialog_add_button (GTK_DIALOG (dialog), _("Install"), GTK_RESPONSE_YES);
- /* TRANSLATORS: button, skip installing a package */
- gtk_dialog_add_button (GTK_DIALOG (dialog), _("Do not install"), GTK_RESPONSE_CANCEL);
- response = gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-
- /* only install if the user wanted to */
- if (response == GTK_RESPONSE_YES)
- has_shared_targets = gcm_utils_install_package (GCM_PREFS_PACKAGE_NAME_SHARED_COLOR_TARGETS, window);
-#else
- egg_warning ("cannot install: this package was not compiled with --enable-packagekit");
-#endif
- }
-
- /* TRANSLATORS: title, we're setting up the device ready for calibration */
- title = _("Setting up device");
- g_string_set_size (string, 0);
-
- /* TRANSLATORS: dialog message, preface */
- g_string_append_printf (string, "%s\n", _("Before calibrating the device, you have to manually acquire a reference image and save it as a TIFF image file."));
-
- /* TRANSLATORS: dialog message, preface */
- g_string_append_printf (string, "%s\n", _("Ensure that the contrast and brightness is not changed and color correction profiles are not applied."));
-
- /* TRANSLATORS: dialog message, suffix */
- g_string_append_printf (string, "%s\n", _("The device sensor should have been cleaned prior to scanning and the output file resolution should be at least 200dpi."));
-
- /* TRANSLATORS: dialog message, suffix */
- g_string_append_printf (string, "\n%s\n", _("For best results, the reference image should also be less than two years old."));
-
- /* TRANSLATORS: dialog question */
- g_string_append_printf (string, "\n%s", _("Do you have a scanned TIFF file of the reference image?"));
-
- /* ask the user to confirm */
- window = GTK_WINDOW(gtk_builder_get_object (builder, "dialog_prefs"));
- dialog = gtk_message_dialog_new (window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_CANCEL, "%s", title);
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", string->str);
- gtk_window_set_icon_name (GTK_WINDOW (dialog), GCM_STOCK_ICON);
- /* TRANSLATORS: button, confirm the user has a file */
- gtk_dialog_add_button (GTK_DIALOG (dialog), _("I have already scanned in a file"), GTK_RESPONSE_YES);
- response = gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
- if (response != GTK_RESPONSE_YES)
- goto out;
-
- /* set the reference kind */
- reference_kind = gcm_prefs_get_reference_kind ();
- if (reference_kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_UNKNOWN) {
- ret = FALSE;
- goto out;
- }
- gcm_calibrate_argyll_set_reference_kind (GCM_CALIBRATE_ARGYLL (calibrate), reference_kind);
-
- /* get scanned image */
- directory = g_get_home_dir ();
- scanned_image = gcm_prefs_calibrate_device_get_reference_image (directory);
- if (scanned_image == NULL)
- goto out;
-
- /* get reference data */
- directory = has_shared_targets ? "/usr/share/color/targets" : "/media";
- reference_data = gcm_prefs_calibrate_device_get_reference_data (directory);
- if (reference_data == NULL)
- goto out;
-
- /* use the ORIGINATOR in the it8 file */
- device = gcm_prefs_get_device_for_it8_file (reference_data);
- if (device == NULL)
- device = g_strdup ("IT8.7");
-
- /* set the calibration parameters */
- g_object_set (calibrate,
- "filename-source", scanned_image,
- "filename-reference", reference_data,
- "device", device,
- NULL);
/* set defaults from device */
ret = gcm_calibrate_set_from_device (calibrate, current_device, &error);
@@ -706,6 +289,7 @@ gcm_prefs_calibrate_device (GcmCalibrate *calibrate)
}
/* do each step */
+ window = GTK_WINDOW(gtk_builder_get_object (builder, "dialog_prefs"));
ret = gcm_calibrate_device (calibrate, window, &error);
if (!ret) {
egg_warning ("failed to calibrate: %s", error->message);
@@ -713,11 +297,6 @@ gcm_prefs_calibrate_device (GcmCalibrate *calibrate)
goto out;
}
out:
- if (string != NULL)
- g_string_free (string, TRUE);
- g_free (device);
- g_free (scanned_image);
- g_free (reference_data);
return ret;
}
diff --git a/src/gcm-utils.h b/src/gcm-utils.h
index 9526075..8110276 100644
--- a/src/gcm-utils.h
+++ b/src/gcm-utils.h
@@ -44,6 +44,10 @@
#define GCM_SETTINGS_CALIBRATION_LENGTH "/apps/gnome-color-manager/calibration_length"
#define GCM_SETTINGS_SHOW_FINE_TUNING "/apps/gnome-color-manager/show_fine_tuning"
+/* DISTROS: you will have to patch if you have changed the name of these packages */
+#define GCM_PREFS_PACKAGE_NAME_SHARED_COLOR_TARGETS "shared-color-targets"
+#define GCM_PREFS_PACKAGE_NAME_ARGYLLCMS "argyllcms"
+
gboolean gcm_utils_mkdir_for_filename (const gchar *filename,
GError **error);
gboolean gcm_utils_mkdir_and_copy (const gchar *source,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]