[libgda] Added gdaui_bar_add_search_entry()



commit edad12658e37515693cad7b82add7c153c6b342b
Author: Vivien Malerba <malerba gnome-db org>
Date:   Wed Aug 22 16:21:29 2012 +0200

    Added gdaui_bar_add_search_entry()

 control-center/gdaui-bar.c                   |   58 ++++++++++++++++++++++++++
 control-center/gdaui-bar.h                   |    1 +
 tools/browser/schema-browser/objects-index.c |   26 +++++-------
 3 files changed, 70 insertions(+), 15 deletions(-)
---
diff --git a/control-center/gdaui-bar.c b/control-center/gdaui-bar.c
index 6008c29..2166e64 100644
--- a/control-center/gdaui-bar.c
+++ b/control-center/gdaui-bar.c
@@ -488,3 +488,61 @@ gdaui_bar_add_button_from_stock (GdauiBar *bar, const gchar *stock_id)
 	gtk_widget_show_all (vb);
 	return button;
 }
+
+static void
+find_icon_pressed_cb (GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos,
+		      G_GNUC_UNUSED GdkEvent *event, G_GNUC_UNUSED gpointer data)
+{
+	if (icon_pos == GTK_ENTRY_ICON_SECONDARY)
+		gtk_entry_set_text (entry, "");
+}
+
+/**
+ * gdaui_bar_add_search_entry:
+ * @bar: a #GdauiBar
+ *
+ * Returns: (transfer none): the created #GtkEntry
+ */
+GtkWidget *
+gdaui_bar_add_search_entry (GdauiBar *bar)
+{
+	g_return_val_if_fail (GDAUI_IS_BAR (bar), NULL);
+
+	GtkWidget *vb, *entry;
+
+	vb = gtk_button_box_new (GTK_ORIENTATION_VERTICAL);
+	gtk_button_box_set_layout (GTK_BUTTON_BOX (vb), GTK_BUTTONBOX_CENTER);
+	gtk_box_pack_start (GTK_BOX (bar->priv->action_area), vb, FALSE, FALSE, 0);
+
+	entry = gtk_entry_new ();
+	gtk_box_pack_start (GTK_BOX (vb), entry, FALSE, FALSE, 0);
+
+	/* CSS theming */
+	GtkStyleContext *context;
+	GtkStyleProvider *provider;
+#define ENTRY_CSS "* {\n" \
+                "-GtkWidget-focus-line-width : 0px;\n"		\
+                "-GtkWidget-focus-padding : 0px;\n"		\
+                "padding: 1px;\n"				\
+                "-GtkButtonBox-child-internal-pad-x : 1px;\n"	\
+                "-GtkButtonBox-child-min-width : 0px;\n"	\
+		"border-style: solid;\n"				\
+		"border-radius: 5px;\n"				\
+                "}"
+	provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ());
+	gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (provider), ENTRY_CSS, -1, NULL);
+	context = gtk_widget_get_style_context (vb);
+	gtk_style_context_add_provider (context, provider, G_MAXUINT);
+	context = gtk_widget_get_style_context (entry);
+	gtk_style_context_add_provider (context, provider, G_MAXUINT);
+	g_object_unref (provider);
+
+	gtk_entry_set_icon_from_stock (GTK_ENTRY (entry),
+				       GTK_ENTRY_ICON_SECONDARY,
+				       GTK_STOCK_CLEAR);
+	g_signal_connect (entry, "icon-press",
+			  G_CALLBACK (find_icon_pressed_cb), NULL);
+
+	gtk_widget_show_all (vb);
+	return entry;
+}
diff --git a/control-center/gdaui-bar.h b/control-center/gdaui-bar.h
index becb4cb..0c5db93 100644
--- a/control-center/gdaui-bar.h
+++ b/control-center/gdaui-bar.h
@@ -62,6 +62,7 @@ void         gdaui_bar_set_icon_from_stock   (GdauiBar *bar, const gchar *stock_
 void         gdaui_bar_set_show_icon         (GdauiBar *bar, gboolean show);
 gboolean     gdaui_bar_get_show_icon         (GdauiBar *bar);
 GtkWidget   *gdaui_bar_add_button_from_stock (GdauiBar *bar, const gchar *stock_id);
+GtkWidget   *gdaui_bar_add_search_entry      (GdauiBar *bar);
 
 G_END_DECLS
 
diff --git a/tools/browser/schema-browser/objects-index.c b/tools/browser/schema-browser/objects-index.c
index 921fcca..8afb2fc 100644
--- a/tools/browser/schema-browser/objects-index.c
+++ b/tools/browser/schema-browser/objects-index.c
@@ -35,7 +35,6 @@
 struct _ObjectsIndexPrivate {
 	BrowserConnection *bcnc;
 	ObjectsCloud      *cloud;
-	GtkWidget         *popup_container;
 };
 
 static void objects_index_class_init (ObjectsIndexClass *klass);
@@ -95,7 +94,6 @@ objects_index_dispose (GObject *object)
 
 	/* free memory */
 	if (index->priv) {
-		gtk_widget_destroy (index->priv->popup_container);
 		if (index->priv->bcnc) {
 			g_signal_handlers_disconnect_by_func (index->priv->bcnc,
 							      G_CALLBACK (meta_changed_cb), index);
@@ -141,8 +139,14 @@ cloud_object_selected_cb (G_GNUC_UNUSED ObjectsCloud *sel, G_GNUC_UNUSED Objects
 		       TOOLS_FAVORITES_TABLES, sel_contents);
 }
 
+static void
+find_changed_cb (GtkEntry *entry, ObjectsIndex *index)
+{
+	objects_cloud_filter (index->priv->cloud, gtk_entry_get_text (entry));
+}
+
 /**
- * objects_index_new
+ * objects_index_new:
  *
  *
  *
@@ -185,19 +189,11 @@ objects_index_new (BrowserConnection *bcnc)
 	g_signal_connect (cloud, "selected",
 			  G_CALLBACK (cloud_object_selected_cb), index);
 
-	/* find button */
-	wid = gdaui_bar_add_button_from_stock (GDAUI_BAR (label), GTK_STOCK_FIND);
+	/* search entry */
+	wid = gdaui_bar_add_search_entry (GDAUI_BAR (label));
 	
-	GtkWidget *popup;
-	popup = popup_container_new (wid);
-	index->priv->popup_container = popup;
-	g_signal_connect_swapped (wid, "clicked",
-				  G_CALLBACK (gtk_widget_show), popup);
-	g_object_set_data (G_OBJECT (popup), "button", wid);
-
-	wid = objects_cloud_create_filter (OBJECTS_CLOUD (cloud));
-	gtk_container_add (GTK_CONTAINER (popup), wid);
-	gtk_widget_show (wid);
+	g_signal_connect (wid, "changed",
+			  G_CALLBACK (find_changed_cb), index);
 
 	return (GtkWidget*) index;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]