[gnome-color-manager] Support other types of reference file other than IT8



commit 32dc38e1cc108843ba875d5843af32c299a4405f
Author: Richard Hughes <richard hughsie com>
Date:   Sun Feb 7 20:20:19 2010 +0000

    Support other types of reference file other than IT8

 src/gcm-calibrate-argyll.c |   63 ++++++++++++++++++++---
 src/gcm-calibrate-argyll.h |   20 ++++++-
 src/gcm-prefs.c            |  123 +++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 195 insertions(+), 11 deletions(-)
---
diff --git a/src/gcm-calibrate-argyll.c b/src/gcm-calibrate-argyll.c
index 21d0579..7616859 100644
--- a/src/gcm-calibrate-argyll.c
+++ b/src/gcm-calibrate-argyll.c
@@ -90,6 +90,7 @@ struct _GcmCalibrateArgyllPrivate
 	GPtrArray			*cached_dialogs;
 	gboolean			 already_on_window;
 	GcmCalibrateArgyllState		 state;
+	GcmCalibrateArgyllReferenceKind	 reference_kind;
 };
 
 enum {
@@ -716,6 +717,45 @@ out:
 }
 
 /**
+ * gcm_calibrate_argyll_reference_kind_to_filename:
+ **/
+static const gchar *
+gcm_calibrate_argyll_reference_kind_to_filename (GcmCalibrateArgyllReferenceKind kind)
+{
+	if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_CMP_DIGITAL_TARGET_3)
+		return "CMP_Digital_Target-3.cht";
+	if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_CMP_DT_003)
+		return "CMP_DT_003.cht";
+	if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER)
+		return "ColorChecker.cht";
+	if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER_DC)
+		return "ColorCheckerDC.cht";
+	if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_COLOR_CHECKER_SG)
+		return "ColorCheckerSG.cht";
+	if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_HUTCHCOLOR)
+		return "Hutchcolor.cht";
+	if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_I1_RGB_SCAN_1_4)
+		return "i1_RGB_Scan_1.4.cht";
+	if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_IT8)
+		return "it8.cht";
+	if (kind == GCM_CALIBRATE_ARGYLL_REFERENCE_KIND_LASER_SOFT_DC_PRO)
+		return "LaserSoftDCPro.cht";
+	if (kind == GCM_CALIBRATE_ARGYLL_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
@@ -723,14 +763,17 @@ gcm_calibrate_argyll_device_copy (GcmCalibrateArgyll *calibrate_argyll, GError *
 {
 	gboolean ret;
 	gchar *device = NULL;
-	gchar *it8cht = NULL;
-	gchar *it8ref = NULL;
+	gchar *dest_cht = NULL;
+	gchar *dest_ref = NULL;
 	gchar *filename = NULL;
+	gchar *filename_cht = NULL;
 	gchar *basename = NULL;
 	gchar *filename_source = NULL;
 	gchar *filename_reference = NULL;
 	const gchar *title;
 	const gchar *message;
+	const gchar *filename_tmp;
+	GcmCalibrateArgyllPrivate *priv = calibrate_argyll->priv;
 
 	/* get shared data */
 	g_object_get (calibrate_argyll,
@@ -750,27 +793,30 @@ gcm_calibrate_argyll_device_copy (GcmCalibrateArgyll *calibrate_argyll, GError *
 	/* build filenames */
 	filename = g_strdup_printf ("%s.tif", basename);
 	device = g_build_filename (GCM_CALIBRATE_ARGYLL_TEMP_DIR, filename, NULL);
-	it8cht = g_build_filename (GCM_CALIBRATE_ARGYLL_TEMP_DIR, "scanin.cht", NULL);
-	it8ref = g_build_filename (GCM_CALIBRATE_ARGYLL_TEMP_DIR, "scanin-ref.txt", NULL);
+	dest_cht = g_build_filename (GCM_CALIBRATE_ARGYLL_TEMP_DIR, "scanin.cht", NULL);
+	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 */
-	ret = gcm_utils_mkdir_and_copy ("/usr/share/color/argyll/ref/it8.cht", it8cht, error);
+	filename_tmp = gcm_calibrate_argyll_reference_kind_to_filename (priv->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)
 		goto out;
 	ret = gcm_utils_mkdir_and_copy (filename_source, device, error);
 	if (!ret)
 		goto out;
-	ret = gcm_utils_mkdir_and_copy (filename_reference, it8ref, error);
+	ret = gcm_utils_mkdir_and_copy (filename_reference, dest_ref, error);
 	if (!ret)
 		goto out;
 out:
 	g_free (basename);
 	g_free (filename);
+	g_free (filename_cht);
 	g_free (filename_source);
 	g_free (filename_reference);
 	g_free (device);
-	g_free (it8cht);
-	g_free (it8ref);
+	g_free (dest_cht);
+	g_free (dest_ref);
 	return ret;
 }
 
@@ -1446,6 +1492,7 @@ 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 74da5b5..1c20c9f 100644
--- a/src/gcm-calibrate-argyll.h
+++ b/src/gcm-calibrate-argyll.h
@@ -57,8 +57,24 @@ struct _GcmCalibrateArgyllClass
 	void (*_gcm_reserved5) (void);
 };
 
-GType		 	 gcm_calibrate_argyll_get_type		(void);
-GcmCalibrateArgyll	*gcm_calibrate_argyll_new		(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-prefs.c b/src/gcm-prefs.c
index 11793dc..5c5e5df 100644
--- a/src/gcm-prefs.c
+++ b/src/gcm-prefs.c
@@ -530,6 +530,118 @@ out:
 }
 
 /**
+ * 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");
+	}
+	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_get_reference_kind:
+ **/
+static GcmCalibrateArgyllReferenceKind
+gcm_prefs_get_reference_kind ()
+{
+	GtkWindow *window;
+	GtkResponseType response;
+	GtkWidget *dialog;
+	GtkWidget *vbox;
+	GtkWidget *combo_box;
+	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);
+
+	/* create the combobox */
+	combo_box = gtk_combo_box_new_text ();
+
+	/* 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_end (GTK_BOX(vbox), combo_box, TRUE, TRUE, 12);
+	gtk_widget_show (combo_box);
+
+	/* 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
@@ -551,6 +663,7 @@ gcm_prefs_calibrate_device (GcmCalibrate *calibrate)
 	GtkResponseType response;
 	GtkWidget *dialog;
 	const gchar *title;
+	GcmCalibrateArgyllReferenceKind reference_kind;
 
 	window = GTK_WINDOW(gtk_builder_get_object (builder, "dialog_prefs"));
 	string = g_string_new ("");
@@ -607,7 +720,7 @@ gcm_prefs_calibrate_device (GcmCalibrate *calibrate)
 	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 a IT8.7/2 reference image?"));
+	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"));
@@ -640,6 +753,14 @@ gcm_prefs_calibrate_device (GcmCalibrate *calibrate)
 	if (reference_data == NULL)
 		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);
+
 	/* ensure we have data */
 	basename = gcm_prefs_calibrate_get_basename (current_device);
 	if (manufacturer == NULL)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]