From 7430ebaf317e4b7e1175b7d9b0a37483dfe8e235 Mon Sep 17 00:00:00 2001 From: Cosimo Cecchi Date: Wed, 30 Jul 2008 16:51:13 +0200 Subject: [PATCH] Implement a basic UI for the filter builder --- libmmanager-gtk/mm-gtk-filter-builder.c | 87 +++++++++++++++++++++++++++++++-- libmmanager-gtk/mm-gtk-filter-builder.h | 3 ++ 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/libmmanager-gtk/mm-gtk-filter-builder.c b/libmmanager-gtk/mm-gtk-filter-builder.c index 24ab664..e3c02fd 100644 --- a/libmmanager-gtk/mm-gtk-filter-builder.c +++ b/libmmanager-gtk/mm-gtk-filter-builder.c @@ -22,21 +22,102 @@ #include -G_DEFINE_TYPE (MMGtkFilterBuilder, mm_gtk_filter_builder, GTK_TYPE_V_BOX) +G_DEFINE_TYPE (MMGtkFilterBuilder, mm_gtk_filter_builder, GTK_TYPE_V_BOX); +#define MM_GTK_FILTER_BUILDER_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_GTK_TYPE_FILTER_BUILDER, MMGtkFilterBuilderPrivate)) + +struct MMGtkFilterBuilderDetails { + GtkListStore *filter_store; + GtkTreeView *fitler_view; + + GtkWidget *cat_combo; + GtkWidget *attr_combo; + GtkWidget *logic_combo; + GtkWidget *value_entry; +}; static void mm_gtk_filter_builder_class_init (MMGtkFilterBuilderClass *klass) { + g_type_class_add_private (klass, sizeof (MMGtkFilterBuilderDetails)); } static void mm_gtk_filter_builder_init (MMGtkFilterBuilder *self) { + MMGtkFilterBuilderDetails *details = self->details = + MM_GTK_FILTER_BUILDER_GET_PRIVATE (self); + GtkTreeView *filter_view; + GtkTreeColumn *column; + GtkCellRenderer *renderer; + GtkWidget *table; + GtkWidget *w; + + details->filter_store = gtk_list_store_new (3, + G_TYPE_STRING, /* attribute name */ + G_TYPE_STRING, /* operator */ + G_TYPE_STRING); /* value */ + filter_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (details->filter_store)); + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes (_("Parameter"), + renderer, + "text", 0, + NULL); + gtk_tree_view_append_column (filter_view, column); + column = gtk_tree_view_column_new_with_attributes (_("Logic"), + renderer, + "text", 1, + NULL); + gtk_tree_view_append_column (filter_view, column); + column = gtk_tree_view_column_new_with_attributes (_("Value"), + renderer, + text, 1, + NULL); + gtk_tree_view_append_column (filter_view, column); + details->filter_view = filter_view; + gtk_box_pack_start (GTK_BOX (self), GTK_WIDGET (filter_view), + TRUE, TRUE, 12); + gtk_widget_show (filter_view); + + table = gtk_table_new (3, 4, FALSE); + w = gtk_label_new_with_mnemonic (_("Attribute _category")); + gtk_table_attach_defaults (GTK_TABLE (table), w, + 0, 1, 0, 1); + details->cat_combo = gtk_combo_box_new (); + gtk_table_attach_defaults (GTK_TABLE (table), details->cat_combo, + 1, 2, 0, 1); + w = gtk_label_new_with_mnemonic (_("Attribute _name")); + gtk_table_attach_defaults (GTK_TABLE (table), w, + 2, 3, 0, 1); + details->attr_combo = gtk_combo_new (); + gtk_table_attach_defaults (GTK_TABLE (table), details->attr_combo, + 3, 4, 0, 1); + w = gtk_label_new_with_mnemonic (_("_Logic")); + gtk_table_attach_defaults (GTK_TABLE (table), w, + 0, 1, 1, 2); + details->logic_combo = gtk_combo_new (); + gtk_table_attach_defaults (GTK_TABLE (table), details->logic_combo, + 1, 2, 1, 2); + w = gtk_label_new_with_mnemonic (_("_Value")); + gtk_table_attach_defaults (GTK_TABLE (table), w, + 2, 3, 1, 2); + details->value_entry = gtk_entry_new (); + gtk_table_attach_defaults (GTK_TABLE (table), details->value_entry, + 3, 4, 1, 2); + w = gtk_button_new_from_stock (GTK_STOCK_ADD); + gtk_table_attach_defaults (GTK_TABLE (table), w, + 3, 4, 2, 3); + gtk_widget_show_all (table); } MMGtkFilterBuilder* -mm_gtk_filter_builder_new (void) +mm_gtk_filter_builder_new (MMCategory *category) { - return g_object_new (MM_GTK_TYPE_FILTER_BUILDER, NULL); + MMGtkFilterBuilder *self; + + self = MM_GTK_FILTER_BUILDER (g_object_new (MM_GTK_TYPE_FILTER_BUILDER, NULL)); + populate_from_category (self, category); + + return self; } diff --git a/libmmanager-gtk/mm-gtk-filter-builder.h b/libmmanager-gtk/mm-gtk-filter-builder.h index a7ae60c..c3e5e2c 100644 --- a/libmmanager-gtk/mm-gtk-filter-builder.h +++ b/libmmanager-gtk/mm-gtk-filter-builder.h @@ -36,8 +36,11 @@ #define MM_GTK_FILTER_BUILDER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_GTK_TYPE_FILTER_BUILDER, MMGtkFilterBuilderClass)) +typedef struct _MMGtkFilterBuilderDetails MMGtkFilterBuilderDetails; + typedef struct { GtkVBox parent; + MMGtkFilterBuilderDetails *details; } MMGtkFilterBuilder; typedef struct { -- 2.11.4.GIT