aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/menus/gal-view-new-dialog.c
diff options
context:
space:
mode:
authorChris Toshok <toshok@ximian.com>2002-11-17 07:46:27 +0800
committerChris Toshok <toshok@src.gnome.org>2002-11-17 07:46:27 +0800
commit09e8fe231719c87f7b1b4a22cc7015773bb1be19 (patch)
tree230ee57289e5ab709cbf9938471c022a869a551a /widgets/menus/gal-view-new-dialog.c
parent183eb85406f50023f3b31b30d320457b2484cce2 (diff)
downloadgsoc2013-evolution-09e8fe231719c87f7b1b4a22cc7015773bb1be19.tar.gz
gsoc2013-evolution-09e8fe231719c87f7b1b4a22cc7015773bb1be19.tar.zst
gsoc2013-evolution-09e8fe231719c87f7b1b4a22cc7015773bb1be19.zip
GtkObject->Gobject and GnomeDialog->GtkDialog work.
2002-11-16 Chris Toshok <toshok@ximian.com> * gal-view-instance-save-as-dialog.c: GtkObject->Gobject and GnomeDialog->GtkDialog work. * gal-view-new-dialog.[ch]: same. * gal-view-new-dialog.dialog: same. svn path=/trunk/; revision=18799
Diffstat (limited to 'widgets/menus/gal-view-new-dialog.c')
-rw-r--r--widgets/menus/gal-view-new-dialog.c106
1 files changed, 85 insertions, 21 deletions
diff --git a/widgets/menus/gal-view-new-dialog.c b/widgets/menus/gal-view-new-dialog.c
index 2677f2a415..52342ce773 100644
--- a/widgets/menus/gal-view-new-dialog.c
+++ b/widgets/menus/gal-view-new-dialog.c
@@ -24,6 +24,7 @@
#include <config.h>
#include <libgnomeui/gnome-dialog.h>
#include <gtk/gtk.h>
+#include <gtk/gtktreeselection.h>
#include "gal-view-new-dialog.h"
#include "gal-define-views-model.h"
#include <gal/widgets/e-unicode.h>
@@ -65,7 +66,7 @@ gal_view_new_dialog_class_init (GalViewNewDialogClass *klass)
object_class->get_property = gal_view_new_dialog_get_property;
object_class->dispose = gal_view_new_dialog_dispose;
- g_object_class_install_property (object_class, PROP_FACTORY,
+ g_object_class_install_property (object_class, PROP_NAME,
g_param_spec_string ("name",
_("Name"),
/*_( */"XXX blurb" /*)*/,
@@ -131,44 +132,107 @@ gal_view_new_dialog_new (GalViewCollection *collection)
return widget;
}
+static void
+sensitize_ok_response (GalViewNewDialog *dialog)
+{
+ gboolean ok = TRUE;
+ const char *text;
+
+ text = gtk_entry_get_text (GTK_ENTRY (dialog->entry));
+ if (!text || !text[0])
+ ok = FALSE;
+
+ if (!dialog->selected_factory)
+ ok = FALSE;
+
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, ok);
+}
+
+static gboolean
+selection_func (GtkTreeSelection *selection,
+ GtkTreeModel *model,
+ GtkTreePath *path,
+ gboolean path_currently_selected,
+ gpointer data)
+{
+ GtkTreeIter iter;
+ GalViewNewDialog *dialog = data;
+
+ if (path_currently_selected)
+ return TRUE;
+
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (dialog->list_store),
+ &iter,
+ (GtkTreePath*)path);
+
+ gtk_tree_model_get (GTK_TREE_MODEL (dialog->list_store),
+ &iter,
+ 1, &dialog->selected_factory,
+ -1);
+
+ printf ("%s factory selected\n", gal_view_factory_get_title(dialog->selected_factory));
+
+ sensitize_ok_response (dialog);
+
+ return TRUE;
+}
static void
-gal_view_new_dialog_select_row_callback(GtkCList *list,
- gint row,
- gint column,
- GdkEventButton *event,
- GalViewNewDialog *dialog)
+entry_changed (GtkWidget *entry, gpointer data)
{
- dialog->selected_factory = gtk_clist_get_row_data(list,
- row);
+ GalViewNewDialog *dialog = data;
+
+ sensitize_ok_response (dialog);
}
GtkWidget*
gal_view_new_dialog_construct (GalViewNewDialog *dialog,
GalViewCollection *collection)
{
- GtkWidget *list = glade_xml_get_widget(dialog->gui,
- "clist-type-list");
GList *iterator;
+ GtkTreeSelection *selection;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *rend;
+
dialog->collection = collection;
+ dialog->list = glade_xml_get_widget(dialog->gui,"list-type-list");
+ dialog->entry = glade_xml_get_widget(dialog->gui, "entry-name");
+ dialog->list_store = gtk_list_store_new (2,
+ G_TYPE_STRING,
+ G_TYPE_POINTER);
- iterator = dialog->collection->factory_list;
+ rend = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes ("factory title",
+ rend,
+ "text", 0,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (dialog->list), column);
+
+ iterator = dialog->collection->factory_list;
for ( ; iterator; iterator = g_list_next(iterator) ) {
GalViewFactory *factory = iterator->data;
- char *text[1];
- int row;
+ GtkTreeIter iter;
g_object_ref(factory);
- text[0] = (char *) gal_view_factory_get_title(factory);
- row = gtk_clist_append(GTK_CLIST(list), text);
- gtk_clist_set_row_data(GTK_CLIST(list), row, factory);
+ gtk_list_store_append (dialog->list_store,
+ &iter);
+ gtk_list_store_set (dialog->list_store,
+ &iter,
+ 0, gal_view_factory_get_title(factory),
+ 1, factory,
+ -1);
}
- g_signal_connect(list,
- "select_row",
- G_CALLBACK(gal_view_new_dialog_select_row_callback),
- dialog);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->list), GTK_TREE_MODEL (dialog->list_store));
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->list));
+ gtk_tree_selection_set_select_function (selection, selection_func, dialog, NULL);
+
+ g_signal_connect (dialog->entry, "changed",
+ G_CALLBACK (entry_changed), dialog);
+
+ sensitize_ok_response (dialog);
return GTK_WIDGET(dialog);
}
@@ -183,7 +247,7 @@ gal_view_new_dialog_set_property (GObject *object, guint prop_id, const GValue *
switch (prop_id){
case PROP_NAME:
- entry = glade_xml_get_widget(dialog->gui, "entry-name");
+
if (entry && GTK_IS_ENTRY(entry)) {
gtk_entry_set_text(GTK_ENTRY(entry), g_value_get_string (value));
}