Author: abrander
Date: 2010-01-27 15:58:47 +0100 (Wed, 27 Jan 2010)
New Revision: 3093
Added:
branches/rawstudio-ng-color/librawstudio/rs-profile-factory-model.h
Modified:
branches/rawstudio-ng-color/librawstudio/rs-profile-factory.c
Log:
Changed RSProfileFactory's store to GtkListStore.
Added: branches/rawstudio-ng-color/librawstudio/rs-profile-factory-model.h
===================================================================
--- branches/rawstudio-ng-color/librawstudio/rs-profile-factory-model.h
(rev 0)
+++ branches/rawstudio-ng-color/librawstudio/rs-profile-factory-model.h
2010-01-27 14:58:47 UTC (rev 3093)
@@ -0,0 +1,6 @@
+enum {
+ COLUMN_PROFILE,
+ COLUMN_MODEL,
+ COLUMN_ID,
+ NUM_COLUMNS
+};
Modified: branches/rawstudio-ng-color/librawstudio/rs-profile-factory.c
===================================================================
--- branches/rawstudio-ng-color/librawstudio/rs-profile-factory.c
2010-01-27 14:22:16 UTC (rev 3092)
+++ branches/rawstudio-ng-color/librawstudio/rs-profile-factory.c
2010-01-27 14:58:47 UTC (rev 3093)
@@ -1,5 +1,6 @@
#include "rs-dcp-file.h"
#include "rs-profile-factory.h"
+#include "rs-profile-factory-model.h"
#include "config.h"
#include "rs-utils.h"
@@ -8,7 +9,7 @@
struct _RSProfileFactory {
GObject parent;
- GList *profiles;
+ GtkListStore *profiles;
};
G_DEFINE_TYPE(RSProfileFactory, rs_profile_factory, G_TYPE_OBJECT)
@@ -21,7 +22,9 @@
static void
rs_profile_factory_init(RSProfileFactory *factory)
{
- factory->profiles = NULL;
+ /* We use G_TYPE_POINTER to store some strings because they should live
+ forever - and we avoid unneeded strdup/free */
+ factory->profiles = gtk_list_store_new(NUM_COLUMNS, RS_TYPE_DCP_FILE,
G_TYPE_POINTER, G_TYPE_POINTER);
}
static void
@@ -48,7 +51,14 @@
const gchar *model = rs_dcp_file_get_model(profile);
if (model)
{
- factory->profiles =
g_list_prepend(factory->profiles, profile);
+ GtkTreeIter iter;
+
+ gtk_list_store_prepend(factory->profiles,
&iter);
+ gtk_list_store_set(factory->profiles, &iter,
+ COLUMN_PROFILE, profile,
+ COLUMN_MODEL, model,
+ COLUMN_ID, rs_dcp_get_id(profile),
+ -1);
}
}
@@ -96,17 +106,23 @@
GList *
rs_profile_factory_get_compatible(RSProfileFactory *factory, const gchar
*make, const gchar *model)
{
+ RSDcpFile *dcp;
+ gchar *dcp_model;
GList *matches = NULL;
- GList *node;
+ GtkTreeIter iter;
+ GtkTreeModel *treemodel = GTK_TREE_MODEL(factory->profiles);
- for (node = g_list_first(factory->profiles) ; node != NULL ; node =
g_list_next(node))
- {
- RSDcpFile *profile = RS_DCP_FILE(node->data);
+ if (gtk_tree_model_get_iter_first(treemodel, &iter))
+ do {
+ gtk_tree_model_get(treemodel, &iter,
+ COLUMN_MODEL, &dcp_model,
+ COLUMN_PROFILE, &dcp,
+ -1);
+ if (model && g_str_equal(model, dcp_model))
+ matches = g_list_prepend(matches, dcp);
+ g_object_unref(dcp);
+ } while (gtk_tree_model_iter_next(treemodel, &iter));
- if (model && g_str_equal(model, rs_dcp_file_get_model(profile)))
- matches = g_list_prepend(matches, profile);
- }
-
return matches;
}
@@ -114,21 +130,30 @@
rs_profile_factory_find_from_id(RSProfileFactory *factory, const gchar *id)
{
RSDcpFile *ret = NULL;
- GList *node;
+ RSDcpFile *dcp;
+ gchar *model_id;
+ GtkTreeIter iter;
+ GtkTreeModel *treemodel = GTK_TREE_MODEL(factory->profiles);
- for (node = g_list_first(factory->profiles) ; node != NULL ; node =
g_list_next(node))
- {
- RSDcpFile *profile = RS_DCP_FILE(node->data);
+ if (gtk_tree_model_get_iter_first(treemodel, &iter))
+ do {
+ gtk_tree_model_get(treemodel, &iter,
+ COLUMN_ID, &model_id,
+ -1);
- const gchar *profile_id = rs_dcp_get_id(profile);
+ if (id && g_str_equal(id, model_id))
+ {
+ gtk_tree_model_get(treemodel, &iter,
+ COLUMN_PROFILE, &dcp,
+ -1);
- if (g_str_equal(id, profile_id))
- {
- if (ret)
- g_warning("WARNING: Duplicate profiles detected
in file: %s, for %s, named:%s.\nUnsing last found profile.",
rs_tiff_get_filename_nopath(RS_TIFF(profile)), rs_dcp_file_get_model(profile),
rs_dcp_file_get_name(profile));
- ret = profile;
- }
- }
+ if (ret)
+ g_warning("WARNING: Duplicate profiles
detected in file: %s, for %s, named:%s.\nUnsing last found profile.",
rs_tiff_get_filename_nopath(RS_TIFF(dcp)), rs_dcp_file_get_model(dcp),
rs_dcp_file_get_name(dcp));
+ ret = dcp;
+ g_object_unref(dcp);
+ }
+ } while (gtk_tree_model_iter_next(treemodel, &iter));
+
return ret;
}
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit