[libgda/gtk3] GdaBrowser: UI improvements in the data manager's data source editor
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda/gtk3] GdaBrowser: UI improvements in the data manager's data source editor
- Date: Tue, 18 Jan 2011 20:23:59 +0000 (UTC)
commit 86b274f7bbc7b288a071a38fcf8d27854cfb3302
Author: Vivien Malerba <malerba gnome-db org>
Date: Wed Jan 12 20:49:25 2011 +0100
GdaBrowser: UI improvements in the data manager's data source editor
tools/browser/data-manager/data-source-editor.c | 3 +-
tools/browser/data-manager/data-widget.c | 20 ++++-
tools/browser/data-manager/ui-spec-editor.c | 108 ++++++++++++++++++++++-
3 files changed, 126 insertions(+), 5 deletions(-)
---
diff --git a/tools/browser/data-manager/data-source-editor.c b/tools/browser/data-manager/data-source-editor.c
index 17334c1..fe5de5a 100644
--- a/tools/browser/data-manager/data-source-editor.c
+++ b/tools/browser/data-manager/data-source-editor.c
@@ -138,7 +138,8 @@ data_source_editor_init (DataSourceEditor *editor)
holder = gda_set_get_holder (editor->priv->attributes, "sql");
g_object_set ((GObject*) holder, "name", _("SELECT\nSQL"),
- "description", _("Actual SQL executed\nto select data"), NULL);
+ "description", _("Actual SQL executed\nto select data\n"
+ "Can't be changed if a table name is set"), NULL);
value = gda_value_new_from_string ("text:PROG_LANG=gda-sql", G_TYPE_STRING);
gda_holder_set_attribute_static (holder, GDAUI_ATTRIBUTE_PLUGIN, value);
gda_value_free (value);
diff --git a/tools/browser/data-manager/data-widget.c b/tools/browser/data-manager/data-widget.c
index 64183c0..b84e17f 100644
--- a/tools/browser/data-manager/data-widget.c
+++ b/tools/browser/data-manager/data-widget.c
@@ -1,5 +1,5 @@
-/* GNOME DB library
- * Copyright (C) 2010 The GNOME Foundation.
+/*
+ * Copyright (C) 2010 - 2011 The GNOME Foundation.
*
* AUTHORS:
* Vivien Malerba <malerba gnome-db org>
@@ -379,6 +379,7 @@ data_source_menu_clicked_cb (G_GNUC_UNUSED GtkButton *button, DataPart *part)
{
if (! part->menu) {
GtkWidget *menu, *mitem;
+ gboolean add_separator = TRUE;
menu = gtk_menu_new ();
part->menu = menu;
@@ -438,6 +439,13 @@ data_source_menu_clicked_cb (G_GNUC_UNUSED GtkButton *button, DataPart *part)
continue;
}
+ if (add_separator) {
+ mitem = gtk_separator_menu_item_new ();
+ gtk_widget_show (mitem);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem);
+ add_separator = FALSE;
+ }
+
mitem = gtk_menu_item_new_with_label (tmp);
g_object_set_data_full ((GObject*) mitem, "xml", sourcespec,
(GDestroyNotify) xmlFreeNode);
@@ -463,6 +471,14 @@ data_source_menu_clicked_cb (G_GNUC_UNUSED GtkButton *button, DataPart *part)
g_free (tmp);
continue;
}
+
+ if (add_separator) {
+ mitem = gtk_separator_menu_item_new ();
+ gtk_widget_show (mitem);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem);
+ add_separator = FALSE;
+ }
+
mitem = gtk_menu_item_new_with_label (tmp);
g_object_set_data_full ((GObject*) mitem, "xml", sourcespec,
(GDestroyNotify) xmlFreeNode);
diff --git a/tools/browser/data-manager/ui-spec-editor.c b/tools/browser/data-manager/ui-spec-editor.c
index cf991ac..c017767 100644
--- a/tools/browser/data-manager/ui-spec-editor.c
+++ b/tools/browser/data-manager/ui-spec-editor.c
@@ -27,6 +27,7 @@
#include <libgda/libgda.h>
#include "../support.h"
#include "data-source-editor.h"
+#include <gdk/gdkkeysyms.h>
enum
{
@@ -39,6 +40,7 @@ struct _UiSpecEditorPrivate {
GtkListStore *sources_model;
GtkWidget *sources_tree;
DataSourceEditor *propsedit;
+ GtkWidget *popup_menu;
/* warnings */
GtkWidget *info;
@@ -129,6 +131,96 @@ data_source_selection_changed_cb (GtkTreeSelection *sel, UiSpecEditor *uied)
COLUMN_DATA_SOURCE, &source, -1);
data_source_editor_display_source (uied->priv->propsedit, source);
}
+ else
+ data_source_editor_display_source (uied->priv->propsedit, NULL);
+}
+
+static void
+popup_func_delete_cb (G_GNUC_UNUSED GtkMenuItem *mitem, UiSpecEditor *uied)
+{
+ GtkTreeModel *model;
+ GtkTreeSelection *select;
+ GtkTreeIter iter;
+
+ select = gtk_tree_view_get_selection (GTK_TREE_VIEW (uied->priv->sources_tree));
+ if (gtk_tree_selection_get_selected (select, &model, &iter)) {
+ DataSource *source;
+ gtk_tree_model_get (model, &iter, COLUMN_DATA_SOURCE, &source, -1);
+ g_assert (source);
+ data_source_manager_remove_source (uied->priv->mgr, source);
+ }
+}
+
+static void
+do_popup_menu (G_GNUC_UNUSED GtkWidget *widget, GdkEventButton *event, UiSpecEditor *uied)
+{
+ int button, event_time;
+
+ if (! uied->priv->popup_menu) {
+ GtkWidget *menu, *mitem;
+
+ menu = gtk_menu_new ();
+ g_signal_connect (menu, "deactivate",
+ G_CALLBACK (gtk_widget_hide), NULL);
+
+ mitem = gtk_image_menu_item_new_with_label (_("Remove"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem);
+ gtk_widget_show (mitem);
+ g_signal_connect (mitem, "activate",
+ G_CALLBACK (popup_func_delete_cb), uied);
+
+ uied->priv->popup_menu = menu;
+ }
+
+ if (event) {
+ button = event->button;
+ event_time = event->time;
+ }
+ else {
+ button = 0;
+ event_time = gtk_get_current_event_time ();
+ }
+
+ gtk_menu_popup (GTK_MENU (uied->priv->popup_menu), NULL, NULL, NULL, NULL,
+ button, event_time);
+}
+
+static gboolean
+popup_menu_cb (GtkWidget *widget, UiSpecEditor *uied)
+{
+ do_popup_menu (widget, NULL, uied);
+ return TRUE;
+}
+
+static gboolean
+button_press_event_cb (GtkTreeView *treeview, GdkEventButton *event, UiSpecEditor *uied)
+{
+ if (event->button == 3 && event->type == GDK_BUTTON_PRESS) {
+ do_popup_menu ((GtkWidget*) treeview, event, uied);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+key_press_event_cb (GtkTreeView *treeview, GdkEventKey *event, UiSpecEditor *sped)
+{
+ if (event->keyval == GDK_Delete) {
+ GtkTreeModel *model;
+ GtkTreeSelection *select;
+ GtkTreeIter iter;
+
+ select = gtk_tree_view_get_selection (treeview);
+ if (gtk_tree_selection_get_selected (select, &model, &iter)) {
+ DataSource *source;
+ gtk_tree_model_get (model, &iter, COLUMN_DATA_SOURCE, &source, -1);
+ g_assert (source);
+ data_source_manager_remove_source (sped->priv->mgr, source);
+ }
+ return TRUE;
+ }
+ return FALSE; /* not handled */
}
static void
@@ -163,7 +255,7 @@ ui_spec_editor_init (UiSpecEditor *sped, G_GNUC_UNUSED UiSpecEditorClass *klass)
sped->priv->sources_model = gtk_list_store_new (NUM_COLUMNS,
G_TYPE_POINTER);
- sped->priv->sources_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (sped->priv->sources_model));
+ sped->priv->sources_tree = browser_make_tree_view (GTK_TREE_MODEL (sped->priv->sources_model));
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (sped->priv->sources_tree), FALSE);
gtk_widget_set_size_request (sped->priv->sources_tree, 170, -1);
@@ -181,6 +273,13 @@ ui_spec_editor_init (UiSpecEditor *sped, G_GNUC_UNUSED UiSpecEditorClass *klass)
gtk_tree_view_append_column (GTK_TREE_VIEW (sped->priv->sources_tree), column);
+ g_signal_connect (G_OBJECT (sped->priv->sources_tree), "key-press-event",
+ G_CALLBACK (key_press_event_cb), sped);
+ g_signal_connect (G_OBJECT (sped->priv->sources_tree), "popup-menu",
+ G_CALLBACK (popup_menu_cb), sped);
+ g_signal_connect (G_OBJECT (sped->priv->sources_tree), "button-press-event",
+ G_CALLBACK (button_press_event_cb), sped);
+
GtkTreeSelection *sel;
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (sped->priv->sources_tree));
g_signal_connect (sel, "changed",
@@ -248,6 +347,8 @@ ui_spec_editor_dispose (GObject *object)
if (sped->priv) {
if (sped->priv->mgr)
g_object_unref (sped->priv->mgr);
+ if (sped->priv->popup_menu)
+ gtk_widget_destroy (sped->priv->popup_menu);
g_free (sped->priv);
sped->priv = NULL;
@@ -286,7 +387,10 @@ mgr_changed_cb (DataSourceManager *mgr, UiSpecEditor *sped)
}
/* reset selected source */
- data_source_editor_display_source (sped->priv->propsedit, current_source);
+ if (! g_slist_find ((GSList*) data_source_manager_get_sources (sped->priv->mgr),
+ current_source))
+ current_source = NULL;
+ data_source_editor_display_source (sped->priv->propsedit, NULL);
if (current_path) {
gtk_tree_selection_select_path (sel, current_path);
gtk_tree_path_free (current_path);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]