[gdl] Remove the layout manager code from GdlDockLayout
- From: James Liggett <jrliggett src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdl] Remove the layout manager code from GdlDockLayout
- Date: Mon, 3 Oct 2011 03:16:34 +0000 (UTC)
commit 2b3b292168b98ea981aafcb69634b54ae3477835
Author: James Liggett <jrliggett cox net>
Date: Sun Oct 2 20:01:26 2011 -0700
Remove the layout manager code from GdlDockLayout
gdl/Makefile.am | 4 -
gdl/gdl-dock-layout.c | 535 +------------------------------------------------
gdl/layout.ui | 204 -------------------
gdl/test-dock.c | 12 -
4 files changed, 1 insertions(+), 754 deletions(-)
---
diff --git a/gdl/Makefile.am b/gdl/Makefile.am
index d5d2f25..7441141 100644
--- a/gdl/Makefile.am
+++ b/gdl/Makefile.am
@@ -81,13 +81,9 @@ libgdlinclude_HEADERS = \
$(libgdl_headers) \
libgdltypebuiltins.h
-uidir = $(datadir)/gdl-3/ui
-ui_DATA = layout.ui
-
EXTRA_DIST = libgdlmarshal.list \
tree-expand.xpm \
tree-contract.xpm \
- layout.ui \
program.xpm static.xpm shared.xpm \
$(noinst_SCRIPTS)
diff --git a/gdl/gdl-dock-layout.c b/gdl/gdl-dock-layout.c
index fd7863e..dcf367b 100644
--- a/gdl/gdl-dock-layout.c
+++ b/gdl/gdl-dock-layout.c
@@ -60,25 +60,12 @@ enum {
struct _GdlDockLayoutPrivate {
xmlDocPtr doc;
- /* layout list models */
- GtkListStore *items_model;
- GtkListStore *layouts_model;
-
glong layout_changed_id;
/* idle control */
gboolean idle_save_pending;
};
-typedef struct _GdlDockLayoutUIData GdlDockLayoutUIData;
-
-struct _GdlDockLayoutUIData {
- GdlDockLayout *layout;
- GtkWidget *locked_check;
- GtkTreeSelection *selection;
-};
-
-
/* ----- Private prototypes ----- */
static void gdl_dock_layout_class_init (GdlDockLayoutClass *klass);
@@ -100,7 +87,6 @@ static void gdl_dock_layout_build_doc (GdlDockLayout *layout);
static xmlNodePtr gdl_dock_layout_find_layout (GdlDockLayout *layout,
const gchar *name);
-static void gdl_dock_layout_build_models (GdlDockLayout *layout);
/* ----- Private implementation ----- */
@@ -146,7 +132,6 @@ gdl_dock_layout_init (GdlDockLayout *layout)
layout->dirty = FALSE;
layout->priv->idle_save_pending = FALSE;
- gdl_dock_layout_build_models (layout);
}
static void
@@ -206,13 +191,6 @@ gdl_dock_layout_dispose (GObject *object)
layout->priv->doc = NULL;
}
- if (layout->priv->items_model) {
- g_object_unref (layout->priv->items_model);
- g_object_unref (layout->priv->layouts_model);
- layout->priv->items_model = NULL;
- layout->priv->layouts_model = NULL;
- }
-
G_OBJECT_CLASS (gdl_dock_layout_parent_class)->dispose (object);
}
@@ -263,473 +241,6 @@ gdl_dock_layout_find_layout (GdlDockLayout *layout,
return node;
}
-static void
-gdl_dock_layout_build_models (GdlDockLayout *layout)
-{
- if (!layout->priv->items_model) {
- layout->priv->items_model = gtk_list_store_new (4,
- G_TYPE_STRING,
- G_TYPE_BOOLEAN,
- G_TYPE_BOOLEAN,
- G_TYPE_POINTER);
- gtk_tree_sortable_set_sort_column_id (
- GTK_TREE_SORTABLE (layout->priv->items_model),
- COLUMN_NAME, GTK_SORT_ASCENDING);
- }
-
- if (!layout->priv->layouts_model) {
- layout->priv->layouts_model = gtk_list_store_new (2, G_TYPE_STRING,
- G_TYPE_BOOLEAN);
- gtk_tree_sortable_set_sort_column_id (
- GTK_TREE_SORTABLE (layout->priv->layouts_model),
- COLUMN_NAME, GTK_SORT_ASCENDING);
- }
-}
-
-static void
-build_list (GdlDockObject *object, GList **list)
-{
- /* add only items, not toplevels */
- if (GDL_IS_DOCK_ITEM (object))
- *list = g_list_prepend (*list, object);
-}
-
-static void
-update_items_model (GdlDockLayout *layout)
-{
- GList *items, *l;
- GtkTreeIter iter;
- GtkListStore *store;
- gchar *long_name;
- gboolean locked;
-
- g_return_if_fail (layout != NULL);
- g_return_if_fail (layout->priv->items_model != NULL);
-
- if (!layout->master)
- return;
-
- /* build items list */
- items = NULL;
- gdl_dock_master_foreach (layout->master, (GFunc) build_list, &items);
-
- /* walk the current model */
- store = layout->priv->items_model;
-
- /* update items model data after a layout load */
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter)) {
- gboolean valid = TRUE;
-
- while (valid) {
- GdlDockItem *item;
-
- gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
- COLUMN_ITEM, &item,
- -1);
- if (item) {
- /* look for the object in the items list */
- for (l = items; l && l->data != item; l = l->next);
-
- if (l) {
- /* found, update data */
- g_object_get (item,
- "long-name", &long_name,
- "locked", &locked,
- NULL);
- gtk_list_store_set (store, &iter,
- COLUMN_NAME, long_name,
- COLUMN_SHOW, GDL_DOCK_OBJECT_ATTACHED (item),
- COLUMN_LOCKED, locked,
- -1);
- g_free (long_name);
-
- /* remove the item from the linked list and keep on walking the model */
- items = g_list_delete_link (items, l);
- valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter);
-
- } else {
- /* not found, which means the item has been removed */
- valid = gtk_list_store_remove (store, &iter);
-
- }
-
- } else {
- /* not a valid row */
- valid = gtk_list_store_remove (store, &iter);
- }
- }
- }
-
- /* add any remaining objects */
- for (l = items; l; l = l->next) {
- GdlDockObject *object = l->data;
-
- g_object_get (object,
- "long-name", &long_name,
- "locked", &locked,
- NULL);
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- COLUMN_ITEM, object,
- COLUMN_NAME, long_name,
- COLUMN_SHOW, GDL_DOCK_OBJECT_ATTACHED (object),
- COLUMN_LOCKED, locked,
- -1);
- g_free (long_name);
- }
-
- g_list_free (items);
-}
-
-static void
-update_layouts_model (GdlDockLayout *layout)
-{
- GList *items, *l;
- GtkTreeIter iter;
-
- g_return_if_fail (layout != NULL);
- g_return_if_fail (layout->priv->layouts_model != NULL);
-
- /* build layouts list */
- gtk_list_store_clear (layout->priv->layouts_model);
- items = gdl_dock_layout_get_layouts (layout, FALSE);
- for (l = items; l; l = l->next) {
- gtk_list_store_append (layout->priv->layouts_model, &iter);
- gtk_list_store_set (layout->priv->layouts_model, &iter,
- COLUMN_NAME, l->data, COLUMN_EDITABLE, TRUE,
- -1);
- g_free (l->data);
- };
- g_list_free (items);
-}
-
-
-/* ------- UI functions & callbacks ------ */
-
-static void
-load_layout_cb (GtkWidget *w,
- gpointer data)
-{
- GdlDockLayoutUIData *ui_data = (GdlDockLayoutUIData *) data;
-
- GtkTreeModel *model;
- GtkTreeIter iter;
- GdlDockLayout *layout = ui_data->layout;
- gchar *name;
-
- g_return_if_fail (layout != NULL);
-
- if (gtk_tree_selection_get_selected (ui_data->selection, &model, &iter)) {
- gtk_tree_model_get (model, &iter,
- COLUMN_NAME, &name,
- -1);
- gdl_dock_layout_load_layout (layout, name);
- g_free (name);
- }
-}
-
-static void
-delete_layout_cb (GtkWidget *w, gpointer data)
-{
- GdlDockLayoutUIData *ui_data = (GdlDockLayoutUIData *) data;
-
- GtkTreeModel *model;
- GtkTreeIter iter;
- GdlDockLayout *layout = ui_data->layout;
- gchar *name;
-
- g_return_if_fail (layout != NULL);
-
- if (gtk_tree_selection_get_selected (ui_data->selection, &model, &iter)) {
- gtk_tree_model_get (model, &iter,
- COLUMN_NAME, &name,
- -1);
- gdl_dock_layout_delete_layout (layout, name);
- gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
- g_free (name);
- };
-}
-
-static void
-show_toggled_cb (GtkCellRendererToggle *renderer,
- gchar *path_str,
- gpointer data)
-{
- GdlDockLayoutUIData *ui_data = (GdlDockLayoutUIData *) data;
-
- GdlDockLayout *layout = ui_data->layout;
- GtkTreeModel *model;
- GtkTreeIter iter;
- GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
- gboolean value;
- GdlDockItem *item;
-
- g_return_if_fail (layout != NULL);
-
- model = GTK_TREE_MODEL (layout->priv->items_model);
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter,
- COLUMN_SHOW, &value,
- COLUMN_ITEM, &item,
- -1);
-
- value = !value;
- if (value)
- gdl_dock_item_show_item (item);
- else
- gdl_dock_item_hide_item (item);
-
- gtk_tree_path_free (path);
-}
-
-static void
-all_locked_toggled_cb (GtkWidget *widget,
- gpointer data)
-{
- GdlDockLayoutUIData *ui_data = (GdlDockLayoutUIData *) data;
- GdlDockMaster *master;
- gboolean locked;
-
- g_return_if_fail (ui_data->layout != NULL);
- master = ui_data->layout->master;
- g_return_if_fail (master != NULL);
-
- locked = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
- g_object_set (master, "locked", locked ? 1 : 0, NULL);
-}
-
-static void
-layout_ui_destroyed (GtkWidget *widget,
- gpointer user_data)
-{
- GdlDockLayoutUIData *ui_data;
-
- /* widget is the GtkContainer */
- ui_data = g_object_get_data (G_OBJECT (widget), "ui_data");
- if (ui_data) {
- if (ui_data->layout) {
- if (ui_data->layout->master)
- /* disconnet the notify handler */
- g_signal_handlers_disconnect_matched (ui_data->layout->master,
- G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL,
- ui_data);
-
- g_object_remove_weak_pointer (G_OBJECT (ui_data->layout),
- (gpointer *) &ui_data->layout);
- ui_data->layout = NULL;
- }
- g_object_set_data (G_OBJECT (widget), "ui_data", NULL);
- g_free (ui_data);
- }
-}
-
-static void
-master_locked_notify_cb (GdlDockMaster *master,
- GParamSpec *pspec,
- gpointer user_data)
-{
- GdlDockLayoutUIData *ui_data = (GdlDockLayoutUIData *) user_data;
- gint locked;
-
- g_object_get (master, "locked", &locked, NULL);
- if (locked == -1) {
- gtk_toggle_button_set_inconsistent (
- GTK_TOGGLE_BUTTON (ui_data->locked_check), TRUE);
- }
- else {
- gtk_toggle_button_set_inconsistent (
- GTK_TOGGLE_BUTTON (ui_data->locked_check), FALSE);
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (ui_data->locked_check), (locked == 1));
- }
-}
-
-static GtkBuilder *
-load_interface ()
-{
- GtkBuilder *gui;
- gchar *gui_file;
- GError* error = NULL;
-
- /* load ui */
- gui_file = g_build_filename (GDL_UIDIR, LAYOUT_UI_FILE, NULL);
- gui = gtk_builder_new();
- gtk_builder_add_from_file (gui, gui_file, &error);
- g_free (gui_file);
- if (error) {
- g_warning (_("Could not load layout user interface file '%s'"),
- LAYOUT_UI_FILE);
- g_object_unref (gui);
- g_error_free (error);
- return NULL;
- };
- return gui;
-}
-
-static GtkWidget *
-gdl_dock_layout_construct_items_ui (GdlDockLayout *layout)
-{
- GtkBuilder *gui;
- GtkWidget *dialog;
- GtkWidget *items_list;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
-
- GdlDockLayoutUIData *ui_data;
-
- /* load the interface if it wasn't provided */
- gui = load_interface ();
-
- if (!gui)
- return NULL;
-
- /* get the container */
- dialog = GTK_WIDGET (gtk_builder_get_object (gui, "layout_dialog"));
-
- ui_data = g_new0 (GdlDockLayoutUIData, 1);
- ui_data->layout = layout;
- g_object_add_weak_pointer (G_OBJECT (layout),
- (gpointer *) &ui_data->layout);
- g_object_set_data (G_OBJECT (dialog), "ui_data", ui_data);
-
- /* get ui widget references */
- ui_data->locked_check = GTK_WIDGET (gtk_builder_get_object (gui, "locked_check"));
- items_list = GTK_WIDGET (gtk_builder_get_object(gui, "items_list"));
-
- /* locked check connections */
- g_signal_connect (ui_data->locked_check, "toggled",
- (GCallback) all_locked_toggled_cb, ui_data);
- if (layout->master) {
- g_signal_connect (layout->master, "notify::locked",
- (GCallback) master_locked_notify_cb, ui_data);
- /* force update now */
- master_locked_notify_cb (layout->master, NULL, ui_data);
- }
-
- /* set models */
- gtk_tree_view_set_model (GTK_TREE_VIEW (items_list),
- GTK_TREE_MODEL (layout->priv->items_model));
-
- /* construct list views */
- renderer = gtk_cell_renderer_toggle_new ();
- g_signal_connect (renderer, "toggled",
- G_CALLBACK (show_toggled_cb), ui_data);
- column = gtk_tree_view_column_new_with_attributes (_("Visible"),
- renderer,
- "active", COLUMN_SHOW,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (items_list), column);
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("Item"),
- renderer,
- "text", COLUMN_NAME,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (items_list), column);
-
- /* connect signals */
- g_signal_connect (dialog, "destroy", (GCallback) layout_ui_destroyed, NULL);
-
- g_object_unref (gui);
-
- return dialog;
-}
-
-static void
-cell_edited_cb (GtkCellRendererText *cell,
- const gchar *path_string,
- const gchar *new_text,
- gpointer data)
-{
- GdlDockLayoutUIData *ui_data = data;
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreeIter iter;
- gchar *name;
- xmlNodePtr node;
-
- model = GTK_TREE_MODEL (ui_data->layout->priv->layouts_model);
- path = gtk_tree_path_new_from_string (path_string);
-
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter, COLUMN_NAME, &name, -1);
-
- node = gdl_dock_layout_find_layout (ui_data->layout, name);
- g_free (name);
- g_return_if_fail (node != NULL);
-
- xmlSetProp (node, BAD_CAST NAME_ATTRIBUTE_NAME, BAD_CAST new_text);
- gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_NAME, new_text,
- COLUMN_EDITABLE, TRUE, -1);
-
- gdl_dock_layout_save_layout (ui_data->layout, new_text);
-
- gtk_tree_path_free (path);
-}
-
-static GtkWidget *
-gdl_dock_layout_construct_layouts_ui (GdlDockLayout *layout)
-{
- GtkBuilder *gui;
- GtkWidget *container;
- GtkWidget *layouts_list;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- GtkWidget *load_button;
- GtkWidget *delete_button;
-
- GdlDockLayoutUIData *ui_data;
-
- /* load the interface if it wasn't provided */
- gui = load_interface ();
-
- if (!gui)
- return NULL;
-
- /* get the container */
- container = GTK_WIDGET (gtk_builder_get_object(gui, "layouts_vbox"));
-
- ui_data = g_new0 (GdlDockLayoutUIData, 1);
- ui_data->layout = layout;
- g_object_add_weak_pointer (G_OBJECT (layout),
- (gpointer *) &ui_data->layout);
- g_object_set_data (G_OBJECT (container), "ui-data", ui_data);
-
- /* get ui widget references */
- layouts_list = GTK_WIDGET (gtk_builder_get_object(gui, "layouts_list"));
-
- /* set models */
- gtk_tree_view_set_model (GTK_TREE_VIEW (layouts_list),
- GTK_TREE_MODEL (layout->priv->layouts_model));
-
- /* construct list views */
- renderer = gtk_cell_renderer_text_new ();
- g_signal_connect (G_OBJECT (renderer), "edited",
- G_CALLBACK (cell_edited_cb), ui_data);
- column = gtk_tree_view_column_new_with_attributes (_("Name"), renderer,
- "text", COLUMN_NAME,
- "editable", COLUMN_EDITABLE,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (layouts_list), column);
-
- ui_data->selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (layouts_list));
-
- /* connect signals */
- load_button = GTK_WIDGET (gtk_builder_get_object(gui, "load_button"));
- delete_button = GTK_WIDGET (gtk_builder_get_object(gui, "delete_button"));
-
- g_signal_connect (load_button, "clicked", (GCallback) load_layout_cb, ui_data);
- g_signal_connect (delete_button, "clicked", (GCallback) delete_layout_cb, ui_data);
-
-
- g_signal_connect (container, "destroy", (GCallback) layout_ui_destroyed, NULL);
-
- g_object_unref (gui);
-
- return container;
-}
-
/* ----- Save & Load layout functions --------- */
#define GDL_DOCK_PARAM_CONSTRUCTION(p) \
@@ -1110,9 +621,6 @@ static void
gdl_dock_layout_layout_changed_cb (GdlDockMaster *master,
GdlDockLayout *layout)
{
- /* update model */
- update_items_model (layout);
-
if (!layout->priv->idle_save_pending) {
g_idle_add ((GSourceFunc) gdl_dock_layout_idle_save, layout);
layout->priv->idle_save_pending = TRUE;
@@ -1141,8 +649,6 @@ gdl_dock_layout_attach (GdlDockLayout *layout,
g_object_unref (layout->master);
}
- gtk_list_store_clear (layout->priv->items_model);
-
layout->master = master;
if (layout->master) {
g_object_ref (layout->master);
@@ -1151,8 +657,6 @@ gdl_dock_layout_attach (GdlDockLayout *layout,
(GCallback) gdl_dock_layout_layout_changed_cb,
layout);
}
-
- update_items_model (layout);
}
/**
@@ -1272,31 +776,6 @@ gdl_dock_layout_delete_layout (GdlDockLayout *layout,
}
/**
-* gdl_dock_layout_run_manager:
-* @layout: The dock item.
-*
-* Runs the layout manager.
-*/
-void
-gdl_dock_layout_run_manager (GdlDockLayout *layout)
-{
- GtkWidget *dialog;
- GtkWidget *parent = NULL;
-
- g_return_if_fail (layout != NULL);
-
- if (!layout->master)
- /* not attached to a dock yet */
- return;
-
- dialog = gdl_dock_layout_construct_items_ui (layout);
-
- gtk_dialog_run (GTK_DIALOG (dialog));
-
- gtk_widget_destroy (dialog);
-}
-
-/**
* gdl_dock_layout_load_from_file:
* @layout: The layout item.
* @filename: The name of the file to load.
@@ -1326,7 +805,6 @@ gdl_dock_layout_load_from_file (GdlDockLayout *layout,
xmlNodePtr root = layout->priv->doc->children;
/* minimum validation: test the root element */
if (root && !strcmp ((char*)root->name, ROOT_ELEMENT)) {
- update_layouts_model (layout);
retval = TRUE;
} else {
xmlFreeDoc (layout->priv->doc);
@@ -1419,15 +897,4 @@ gdl_dock_layout_get_layouts (GdlDockLayout *layout,
retval = g_list_reverse (retval);
return retval;
-}
-
-GtkWidget *
-gdl_dock_layout_get_layouts_ui (GdlDockLayout *layout)
-{
- GtkWidget *ui;
-
- g_return_val_if_fail (layout != NULL, NULL);
- ui = gdl_dock_layout_construct_layouts_ui (layout);
-
- return ui;
-}
+}
\ No newline at end of file
diff --git a/gdl/test-dock.c b/gdl/test-dock.c
index caf5b91..95dbfa7 100644
--- a/gdl/test-dock.c
+++ b/gdl/test-dock.c
@@ -131,13 +131,6 @@ button_dump_cb (GtkWidget *button, gpointer data)
}
static void
-run_layout_manager_cb (GtkWidget *w, gpointer data)
-{
- GdlDockLayout *layout = GDL_DOCK_LAYOUT (data);
- gdl_dock_layout_run_manager (layout);
-}
-
-static void
save_layout_cb (GtkWidget *w, gpointer data)
{
GdlDockLayout *layout = GDL_DOCK_LAYOUT (data);
@@ -295,11 +288,6 @@ main (int argc, char **argv)
g_signal_connect (button, "clicked",
G_CALLBACK (save_layout_cb), layout);
gtk_box_pack_end (GTK_BOX (box), button, FALSE, TRUE, 0);
-
- button = gtk_button_new_with_label ("Layout Manager");
- g_signal_connect (button, "clicked",
- G_CALLBACK (run_layout_manager_cb), layout);
- gtk_box_pack_end (GTK_BOX (box), button, FALSE, TRUE, 0);
button = gtk_button_new_with_label ("Dump XML");
g_signal_connect (button, "clicked",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]