[evolution-kolab/ek-wip-gui: 22/22] EPlugin: finalized implementation for folder permissions dialog
- From: Christian Hilberg <chilberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-kolab/ek-wip-gui: 22/22] EPlugin: finalized implementation for folder permissions dialog
- Date: Mon, 20 Feb 2012 23:26:37 +0000 (UTC)
commit 9691e2c8511e57c475f23fc06bf013b1e288db56
Author: Christian Hilberg <hilberg kernelconcepts de>
Date: Mon Feb 20 21:52:07 2012 +0100
EPlugin: finalized implementation for folder permissions dialog
* added widgets for Kolab user selection
and user list retrieval
* added add/edit/remove stock buttons
* added add/edit common dialog with
Kolab user selector (editable combo box)
and a button to retrieve the list of
users
src/eplugin/e-kolab-folder-permissions.c | 233 ++++++++++++++++++++++++++++++
src/eplugin/e-kolab-folder-permissions.h | 15 ++
2 files changed, 248 insertions(+), 0 deletions(-)
---
diff --git a/src/eplugin/e-kolab-folder-permissions.c b/src/eplugin/e-kolab-folder-permissions.c
index 9efa23d..36051ca 100644
--- a/src/eplugin/e-kolab-folder-permissions.c
+++ b/src/eplugin/e-kolab-folder-permissions.c
@@ -35,12 +35,197 @@
#include "e-kolab-folder-permissions.h"
+enum {
+ KOLAB_PERM_TREE_VIEW_COL_NAME = 0,
+ KOLAB_PERM_TREE_VIEW_COL_LEVEL,
+ KOLAB_PERM_TREE_VIEW_LAST_COL
+};
+
/*----------------------------------------------------------------------------*/
/* internal statics (non-UI) */
/*----------------------------------------------------------------------------*/
/* internal statics (UI) */
+static void
+kolab_folder_permissions_ui_edit_dialog_response_cb (GObject *dialog,
+ gint response_id)
+{
+ g_return_if_fail (dialog != NULL);
+
+ if (response_id != GTK_RESPONSE_OK) {
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ return;
+ }
+
+ /* FIXME implement me */
+ g_warning ("%s: FIXME implement me", __func__);
+}
+
+static void
+kolab_folder_permissions_ui_edit_dialog_cb (KolabFolderPermUIData *uidata)
+{
+ GtkWidget *dialog = NULL;
+ GtkWidget *content = NULL;
+ GtkWidget *hbox = NULL;
+ GtkWidget *label = NULL;
+ GtkWidget *entry = NULL;
+ GtkWidget *frame = NULL;
+ GtkWidget *btn = NULL;
+ GtkWidget *grid = NULL;
+ GtkWidget *widget = NULL;
+ gchar *tmp_str = NULL;
+
+ g_assert (uidata != NULL);
+ g_assert (uidata->widgets != NULL);
+
+ dialog = gtk_dialog_new_with_buttons (_("Edit Kolab folder permissions..."),
+ NULL, /* parent */
+ GTK_DIALOG_DESTROY_WITH_PARENT|GTK_DIALOG_MODAL,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
+ NULL);
+
+ content = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+ gtk_container_set_border_width (GTK_CONTAINER (content), 6);
+
+ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+ tmp_str = g_strconcat (_("User Identification"), ":", NULL);
+ label = gtk_label_new (tmp_str);
+ g_free (tmp_str);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ entry = gtk_combo_box_new_with_entry ();
+ uidata->widgets->edit_entry_box = entry;
+ gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, FALSE, 0);
+ btn = gtk_button_new_with_label (_("Retrieve..."));
+ uidata->widgets->edit_btn_retrieve = btn;
+ gtk_box_pack_start (GTK_BOX (hbox), btn, TRUE, FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (content), hbox);
+
+ frame = gtk_frame_new (_("Access Rights"));
+ gtk_container_add (GTK_CONTAINER (content), frame);
+
+ grid = gtk_grid_new ();
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (grid), GTK_ORIENTATION_VERTICAL);
+ gtk_grid_set_column_spacing (GTK_GRID (grid), 2);
+ gtk_container_set_border_width (GTK_CONTAINER (grid), 16);
+ gtk_container_add (GTK_CONTAINER (frame), grid);
+
+ widget = gtk_radio_button_new_with_label (NULL, C_("Permissions", "None"));
+ uidata->widgets->radio_btn_perm_none = widget;
+ uidata->widgets->radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (widget));
+ gtk_container_add (GTK_CONTAINER (grid), widget);
+
+ widget = gtk_radio_button_new_with_label (uidata->widgets->radio_group, C_("Permissions", "Read"));
+ uidata->widgets->radio_btn_perm_read = widget;
+ gtk_container_add (GTK_CONTAINER (grid), widget);
+
+ widget = gtk_radio_button_new_with_label (uidata->widgets->radio_group, C_("Permissions", "Append"));
+ uidata->widgets->radio_btn_perm_append = widget;
+ gtk_container_add (GTK_CONTAINER (grid), widget);
+
+ widget = gtk_radio_button_new_with_label (uidata->widgets->radio_group, C_("Permissions", "Write"));
+ uidata->widgets->radio_btn_perm_write = widget;
+ gtk_container_add (GTK_CONTAINER (grid), widget);
+
+ widget = gtk_radio_button_new_with_label (uidata->widgets->radio_group, C_("Permissions", "All"));
+ uidata->widgets->radio_btn_perm_all = widget;
+ gtk_container_add (GTK_CONTAINER (grid), widget);
+
+ /* FIXME connect signals */
+ g_warning ("%s: FIXME connect signals", __func__);
+
+ g_signal_connect (dialog,
+ "response",
+ G_CALLBACK (kolab_folder_permissions_ui_edit_dialog_response_cb),
+ NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
+ GTK_RESPONSE_OK,
+ FALSE);
+
+ uidata->widgets->edit_dialog = dialog;
+
+ gtk_widget_show_all (content);
+ gtk_widget_show (dialog);
+}
+
+static GtkWidget*
+kolab_folder_permissions_ui_create_tree_view (KolabFolderPermUIData *uidata)
+{
+ GtkTreeView *tree_view = NULL;
+ GtkTreeModel *tree_model = NULL;
+ GtkTreeSelection *selection = NULL;
+ GtkCellRenderer *renderer = NULL;
+ GtkTreeViewColumn *column = NULL;
+
+ g_assert (uidata != NULL);
+ g_assert (uidata->widgets != NULL);
+
+ tree_model = GTK_TREE_MODEL (gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING));
+ tree_view = GTK_TREE_VIEW (gtk_tree_view_new_with_model (tree_model));
+ gtk_tree_view_set_grid_lines (tree_view, GTK_TREE_VIEW_GRID_LINES_BOTH);
+ gtk_tree_view_set_rubber_banding (tree_view, TRUE);
+
+ renderer = gtk_cell_renderer_text_new ();
+ g_object_set (renderer, "editable", FALSE, NULL);
+ gtk_tree_view_insert_column_with_attributes (tree_view,
+ -1,
+ _("Name"),
+ renderer,
+ "text",
+ KOLAB_PERM_TREE_VIEW_COL_NAME,
+ NULL);
+ column = gtk_tree_view_get_column (tree_view, KOLAB_PERM_TREE_VIEW_COL_NAME);
+ gtk_tree_view_column_set_expand (column, TRUE);
+
+ renderer = gtk_cell_renderer_text_new ();
+ g_object_set (renderer, "editable", FALSE, NULL);
+ gtk_tree_view_insert_column_with_attributes (tree_view,
+ -1,
+ _("Permission level"),
+ renderer,
+ "text",
+ KOLAB_PERM_TREE_VIEW_COL_LEVEL,
+ NULL);
+
+ selection = gtk_tree_view_get_selection (tree_view);
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+ /* FIXME connect signal to callback
+ g_signal_connect (selection, "changed", G_CALLBACK (folder_permissions_tree_selection_changed_cb), widgets);
+ */
+ gtk_tree_view_set_headers_visible (tree_view, TRUE);
+ gtk_tree_view_set_headers_clickable (tree_view, FALSE);
+ gtk_tree_view_set_fixed_height_mode (tree_view, TRUE);
+
+ return GTK_WIDGET (tree_view);
+}
+
+/* FIXME testing/debugging only, remove */
+static void
+add_some_content_to_treeview (GtkTreeView *treeview)
+{
+ GtkListStore *liststore = NULL;
+
+ g_assert (treeview != NULL);
+
+ liststore = GTK_LIST_STORE (gtk_tree_view_get_model (treeview));
+
+ gtk_list_store_insert_with_values (liststore,
+ NULL,
+ 0,
+ 0, g_strdup ("this is a lengthy user name entry"),
+ 1, g_strdup ("and the lengthy permission string, display testing"),
+ -1);
+ gtk_list_store_insert_with_values (liststore,
+ NULL,
+ 1,
+ 0, g_strdup ("this is another lengthy user name entry"),
+ 1, g_strdup ("and another lengthy permission string, display testing"),
+ -1);
+
+}
+
/*----------------------------------------------------------------------------*/
/* API functions (non-UI) */
@@ -91,9 +276,57 @@ KolabFolderPermUIData*
e_kolab_folder_permissions_ui_new (void)
{
KolabFolderPermUIData *uidata = g_new0 (KolabFolderPermUIData, 1);
+ GtkGrid *grid = NULL;
+ GtkWidget *vbox = NULL;
+ GtkWidget *treeview = NULL;
+ gint row = 0;
uidata->widgets = g_new0 (KolabFolderPermUIWidgets, 1);
uidata->widgets->container = gtk_frame_new (_("Folder Permissions"));
+ gtk_container_set_border_width (GTK_CONTAINER (uidata->widgets->container), 6);
+ /* gtk_container_set_resize_mode (uidata->widgets->container, GTK_RESIZE_QUEUE); */
+
+ grid = GTK_GRID (gtk_grid_new ());
+ gtk_grid_set_row_homogeneous (grid, FALSE);
+ gtk_grid_set_row_spacing (grid, 6);
+ gtk_grid_set_column_homogeneous (grid, FALSE);
+ gtk_grid_set_column_spacing (grid, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (grid), 16);
+ /* gtk_container_set_resize_mode (GTK_CONTAINER (grid), GTK_RESIZE_QUEUE); */
+ gtk_container_add (GTK_CONTAINER (uidata->widgets->container), GTK_WIDGET (grid));
+
+ row = 0;
+
+ /* permissions tree view */
+ treeview = kolab_folder_permissions_ui_create_tree_view (uidata);
+ /* gtk_container_set_resize_mode (GTK_CONTAINER (treeview), GTK_RESIZE_QUEUE); */
+ uidata->widgets->treeview = treeview;
+ gtk_grid_attach (GTK_GRID (grid), treeview, 0, row, 1, 1);
+
+ /* FIXME remove me, display testing */
+ /* add_some_content_to_treeview (GTK_TREE_VIEW (treeview)); */
+
+ /* add/edit/delete stock buttons */
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
+ uidata->widgets->btn_add = gtk_button_new_from_stock (GTK_STOCK_ADD);
+ gtk_box_pack_start (GTK_BOX (vbox), uidata->widgets->btn_add, FALSE, FALSE, 0);
+ uidata->widgets->btn_edit = gtk_button_new_from_stock (GTK_STOCK_EDIT);
+ gtk_box_pack_start (GTK_BOX (vbox), uidata->widgets->btn_edit, FALSE, FALSE, 0);
+ uidata->widgets->btn_remove = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
+ gtk_box_pack_start (GTK_BOX (vbox), uidata->widgets->btn_remove, FALSE, FALSE, 0);
+ gtk_grid_attach (GTK_GRID (grid), vbox, 1, row, 1, 1);
+
+ /* FIXME connect signals */
+ g_warning ("%s: FIXME connect signals", __func__);
+
+ g_signal_connect_swapped (G_OBJECT (uidata->widgets->btn_add),
+ "clicked",
+ G_CALLBACK (kolab_folder_permissions_ui_edit_dialog_cb),
+ uidata);
+ g_signal_connect_swapped (G_OBJECT (uidata->widgets->btn_edit),
+ "clicked",
+ G_CALLBACK (kolab_folder_permissions_ui_edit_dialog_cb),
+ uidata);
return uidata;
}
diff --git a/src/eplugin/e-kolab-folder-permissions.h b/src/eplugin/e-kolab-folder-permissions.h
index 04d81f0..ff91d4c 100644
--- a/src/eplugin/e-kolab-folder-permissions.h
+++ b/src/eplugin/e-kolab-folder-permissions.h
@@ -45,6 +45,21 @@ typedef struct _KolabFolderPermUIWidgets KolabFolderPermUIWidgets;
struct _KolabFolderPermUIWidgets {
GtkWidget *container;
/* sub-widgets of container */
+ GtkWidget *treeview;
+ GtkWidget *btn_add;
+ GtkWidget *btn_edit;
+ GtkWidget *btn_remove;
+ /* add/edit dialog */
+ GtkWidget *edit_dialog;
+ /* sub-widgets of add/edit dialog */
+ GtkWidget *edit_entry_box;
+ GtkWidget *edit_btn_retrieve;
+ GSList *radio_group;
+ GtkWidget *radio_btn_perm_none;
+ GtkWidget *radio_btn_perm_read;
+ GtkWidget *radio_btn_perm_append;
+ GtkWidget *radio_btn_perm_write;
+ GtkWidget *radio_btn_perm_all;
};
typedef struct _KolabFolderPermUIData KolabFolderPermUIData;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]