Author: abrander
Date: 2009-12-31 02:39:27 +0100 (Thu, 31 Dec 2009)
New Revision: 2939

Added:
   branches/rawstudio-ng-color/librawstudio/rs-profile-selector.c
   branches/rawstudio-ng-color/librawstudio/rs-profile-selector.h
Modified:
   branches/rawstudio-ng-color/librawstudio/rawstudio.h
Log:
Added RSProfileSelector.

Modified: branches/rawstudio-ng-color/librawstudio/rawstudio.h
===================================================================
--- branches/rawstudio-ng-color/librawstudio/rawstudio.h        2009-12-31 
01:38:03 UTC (rev 2938)
+++ branches/rawstudio-ng-color/librawstudio/rawstudio.h        2009-12-31 
01:39:27 UTC (rev 2939)
@@ -65,6 +65,7 @@
 #include "rs-huesat-map.h"
 #include "rs-dcp-file.h"
 #include "rs-dcp-factory.h"
+#include "rs-profile-selector.h"
 
 #include "x86-cpu.h"
 

Added: branches/rawstudio-ng-color/librawstudio/rs-profile-selector.c
===================================================================
--- branches/rawstudio-ng-color/librawstudio/rs-profile-selector.c              
                (rev 0)
+++ branches/rawstudio-ng-color/librawstudio/rs-profile-selector.c      
2009-12-31 01:39:27 UTC (rev 2939)
@@ -0,0 +1,144 @@
+#include "rs-profile-selector.h"
+
+G_DEFINE_TYPE(RSProfileSelector, rs_profile_selector, GTK_TYPE_COMBO_BOX)
+
+enum {
+    DCP_SELECTED_SIGNAL,
+       ICC_SELECTED_SIGNAL,
+    LAST_SIGNAL
+};
+static guint signals[LAST_SIGNAL] = {0};
+
+enum {
+       COLUMN_NAME,
+       COLUMN_POINTER,
+       COLUMN_TYPE,
+       NUM_COLUMNS
+};
+
+static void
+rs_profile_selector_dispose(GObject *object)
+{
+       G_OBJECT_CLASS(rs_profile_selector_parent_class)->dispose(object);
+}
+
+static void
+rs_profile_selector_finalize(GObject *object)
+{
+       G_OBJECT_CLASS(rs_profile_selector_parent_class)->finalize(object);
+}
+
+static void
+rs_profile_selector_class_init(RSProfileSelectorClass *klass)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS(klass);
+
+       signals[DCP_SELECTED_SIGNAL] = g_signal_new("dcp-selected",
+               G_TYPE_FROM_CLASS(klass),
+           G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+               0,
+               NULL,
+               NULL,
+        g_cclosure_marshal_VOID__OBJECT,
+        G_TYPE_NONE, 1, RS_TYPE_DCP_FILE);
+
+       signals[ICC_SELECTED_SIGNAL] = g_signal_new("icc-selected",
+               G_TYPE_FROM_CLASS(klass),
+           G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+               0,
+               NULL,
+               NULL,
+        g_cclosure_marshal_VOID__OBJECT,
+        G_TYPE_NONE, 1, RS_TYPE_ICC_PROFILE);
+
+       object_class->dispose = rs_profile_selector_dispose;
+       object_class->finalize = rs_profile_selector_finalize;
+}
+
+static void
+changed(GtkComboBox *combo, gpointer data)
+{
+       GtkTreeIter iter;
+       GType type;
+       gpointer profile;
+       GtkTreeModel *model;
+
+       if (gtk_combo_box_get_active_iter(combo, &iter))
+       {
+               model = gtk_combo_box_get_model(combo);
+
+               gtk_tree_model_get(model, &iter,
+                       COLUMN_POINTER, &profile,
+                       COLUMN_TYPE, &type,
+                       -1);
+
+               if (type == RS_TYPE_DCP_FILE)
+                       g_signal_emit(RS_PROFILE_SELECTOR(combo), 
signals[DCP_SELECTED_SIGNAL], 0, profile);
+               else if (type == RS_TYPE_ICC_PROFILE)
+                       g_signal_emit(RS_PROFILE_SELECTOR(combo), 
signals[ICC_SELECTED_SIGNAL], 0, profile);
+       }
+}
+
+static void
+rs_profile_selector_init(RSProfileSelector *selector)
+{
+       GtkComboBox *combo = GTK_COMBO_BOX(selector);
+
+       selector->store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_STRING, 
G_TYPE_POINTER, G_TYPE_GTYPE);
+
+       g_signal_connect(combo, "changed", G_CALLBACK(changed), NULL);
+
+       gtk_combo_box_set_model(combo, GTK_TREE_MODEL(selector->store));
+
+       GtkCellRenderer *cell = gtk_cell_renderer_text_new();
+       gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), cell, TRUE );
+       gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), cell,
+               "text", 0,
+               NULL);
+}
+
+RSProfileSelector *
+rs_profile_selector_new(void)
+{
+       return g_object_new(RS_TYPE_PROFILE_SELECTOR, NULL);
+}
+
+void
+rs_profile_selector_set_dcp_profile(RSProfileSelector *selector, RSDcpFile 
*dcp)
+{
+       GtkTreeIter iter;
+
+       g_assert(RS_IS_PROFILE_SELECTOR(selector));
+       g_assert(RS_IS_DCP_FILE(dcp));
+
+       gtk_list_store_append(selector->store, &iter);
+       gtk_list_store_set(selector->store, &iter,
+               COLUMN_NAME, rs_dcp_file_get_name(dcp),
+               COLUMN_POINTER, dcp,
+               COLUMN_TYPE, RS_TYPE_DCP_FILE,
+               -1);
+}
+
+void
+rs_profile_selector_set_profiles(RSProfileSelector *selector, GList *profiles)
+{
+       GList *node;
+       g_assert(RS_IS_PROFILE_SELECTOR(selector));
+
+       gtk_list_store_clear(selector->store);
+
+       for (node=g_list_first(profiles) ; node!=NULL ; node = 
g_list_next(node))
+       {
+               if (RS_IS_DCP_FILE(node->data))
+                       rs_profile_selector_set_dcp_profile(selector, 
node->data);
+               /* FIXME: Add support for ICC profiles */
+       }
+}
+
+void
+rs_profile_selector_set_profiles_steal(RSProfileSelector *selector, GList 
*profiles)
+{
+       rs_profile_selector_set_profiles(selector, profiles);
+
+       g_list_free(profiles);
+}

Added: branches/rawstudio-ng-color/librawstudio/rs-profile-selector.h
===================================================================
--- branches/rawstudio-ng-color/librawstudio/rs-profile-selector.h              
                (rev 0)
+++ branches/rawstudio-ng-color/librawstudio/rs-profile-selector.h      
2009-12-31 01:39:27 UTC (rev 2939)
@@ -0,0 +1,40 @@
+#ifndef RS_PROFILE_SELECTOR_H
+#define RS_PROFILE_SELECTOR_H
+
+#include <rs-dcp-file.h>
+#include <gtk/gtk.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define RS_TYPE_PROFILE_SELECTOR rs_profile_selector_get_type()
+#define RS_PROFILE_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
RS_TYPE_PROFILE_SELECTOR, RSProfileSelector))
+#define RS_PROFILE_SELECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), 
RS_TYPE_PROFILE_SELECTOR, RSProfileSelectorClass))
+#define RS_IS_PROFILE_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
RS_TYPE_PROFILE_SELECTOR))
+#define RS_IS_PROFILE_SELECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), 
RS_TYPE_PROFILE_SELECTOR))
+#define RS_PROFILE_SELECTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), 
RS_TYPE_PROFILE_SELECTOR, RSProfileSelectorClass))
+
+typedef struct {
+       GtkComboBox parent;
+
+       GtkListStore *store;
+} RSProfileSelector;
+
+typedef struct {
+       GtkComboBoxClass parent_class;
+} RSProfileSelectorClass;
+
+GType rs_profile_selector_get_type(void);
+
+RSProfileSelector *
+rs_profile_selector_new(void);
+
+void
+rs_profile_selector_set_profiles(RSProfileSelector *selector, GList *profiles);
+
+void
+rs_profile_selector_set_profiles_steal(RSProfileSelector *selector, GList 
*profiles);
+
+G_END_DECLS
+
+#endif /* RS_PROFILE_SELECTOR_H */


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to