[gnome-color-manager] Support other types of reference file other than IT8
- From: Richard Hughes <rhughes src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-color-manager] Support other types of reference file other than IT8
- Date: Mon, 8 Feb 2010 09:18:07 +0000 (UTC)
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]