Adding a dialog to the settings plugin that lists all connections.
authorTobias Brunner <tobias@strongswan.org>
Fri, 4 Jun 2010 12:15:37 +0000 (14:15 +0200)
committerTobias Brunner <tobias@strongswan.org>
Thu, 14 Oct 2010 15:36:17 +0000 (17:36 +0200)
src/frontends/maemo/src/strongswan-settings.c

index f8c3719..56c1875 100644 (file)
  */
 
 #include <hildon-cp-plugin/hildon-cp-plugin-interface.h>
+#include <gtk/gtk.h>
+#include <hildon/hildon.h>
+
+#include <string.h>
+
+#include "strongswan-connections.h"
+
+enum {
+       RESPONSE_NEW = 1,
+       RESPONSE_EDIT,
+       RESPONSE_DELETE
+};
+
+struct {
+       GtkWidget *dialog;
+       GtkWidget *list;
+       StrongswanConnections *conns;
+} ListDialog = { 0, };
+
+/**
+ * Creates a dialog showing a list of all connections
+ */
+static void
+create_list_dialog (gpointer *parent)
+{
+       GtkWidget *dialog = gtk_dialog_new_with_buttons (
+                                                       "strongSwan Connections",
+                                                       GTK_WINDOW (parent),
+                                                       GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR,
+                                                       GTK_STOCK_NEW,
+                                                       RESPONSE_NEW,
+                                                       GTK_STOCK_EDIT,
+                                                       RESPONSE_EDIT,
+                                                       GTK_STOCK_DELETE,
+                                                       RESPONSE_DELETE,
+                                                       GTK_STOCK_CLOSE,
+                                                       GTK_RESPONSE_OK,
+                                                       NULL);
+       ListDialog.dialog = dialog;
+       GtkWidget *vbox = GTK_DIALOG (dialog)->vbox;
+
+       ListDialog.conns = strongswan_connections_new ();
+
+       GtkTreeModel *model = strongswan_connections_get_model (ListDialog.conns);
+       ListDialog.list = gtk_tree_view_new_with_model (model);
+       g_object_unref (model);
+
+       GtkTreeSelection *selection;
+       selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (ListDialog.list));
+       gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
+
+       GtkTreeViewColumn *column = gtk_tree_view_column_new ();
+       strongswan_connections_setup_column_renderers (ListDialog.conns,
+                                                                                                  GTK_CELL_LAYOUT (column));
+       gtk_tree_view_append_column (GTK_TREE_VIEW (ListDialog.list), column);
+
+       gtk_box_pack_start (GTK_BOX (vbox),
+                                               ListDialog.list,
+                                               TRUE,
+                                               TRUE,
+                                               HILDON_MARGIN_DEFAULT);
+       gtk_widget_show_all (dialog);
+       gtk_widget_hide (dialog);
+}
+
 
 /**
  * main callback for control panel plugins
 osso_return_t execute(osso_context_t *osso, gpointer data,
                                          gboolean user_activated)
 {
+       gint response;
+
+       create_list_dialog (data);
+
        if (!user_activated)
        {
                /* load state */
        }
 
+       do
+       {
+               gchar *selected;
+               response = gtk_dialog_run (GTK_DIALOG (ListDialog.dialog));
+               switch (response)
+               {
+                       case RESPONSE_NEW:
+                       {
+                               break;
+                       }
+                       case RESPONSE_EDIT:
+                       {
+                               break;
+                       }
+                       case RESPONSE_DELETE:
+                       {
+                               break;
+                       }
+                       default:
+                               break;
+               }
+       }
+       while (response > 0);
+
+       gtk_widget_destroy (ListDialog.dialog);
+       g_object_unref (ListDialog.conns);
        return OSSO_OK;
 }