[gnome-color-manager] trivial: Move the calibration specific code out of gcm-prefs and into GcmCalibration



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]