Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=gfpm.git;a=commitdiff;h=f2dbc5ec5b9d99d3803a320a135ad0c06752a10f

commit f2dbc5ec5b9d99d3803a320a135ad0c06752a10f
Author: Priyank Gosalia <[EMAIL PROTECTED]>
Date:   Tue Feb 26 01:07:32 2008 +0530

gfpm-repomanager: gfpm-servermanager: users can now add their own servers.

diff --git a/data/gfpm.glade b/data/gfpm.glade
index 8e6850a..c824192 100644
--- a/data/gfpm.glade
+++ b/data/gfpm.glade
@@ -2310,4 +2310,132 @@
</widget>
</child>
</widget>
+  <widget class="GtkDialog" id="gfpm_servmgr_input_dlg">
+    <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+    <property name="border_width">5</property>
+    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <widget class="GtkVBox" id="dialog-vbox5">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+        <property name="spacing">2</property>
+        <child>
+          <widget class="GtkLabel" id="label25">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">&lt;span 
size="larger"&gt;&lt;b&gt;Add a new server&lt;/b&gt;&lt;/span&gt;</property>
+            <property name="use_markup">True</property>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkHSeparator" id="hseparator3">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="padding">3</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkLabel" id="label26">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">Repository URL</property>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkEntry" id="entry1">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">4</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkLabel" id="label27">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">Comment 
(Optional)</property>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">5</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkScrolledWindow" id="scrolledwindow11">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+            <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+            <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+            <property name="shadow_type">GTK_SHADOW_OUT</property>
+            <child>
+              <widget class="GtkTextView" id="commentview">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+              </widget>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">6</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <widget class="GtkHButtonBox" id="dialog-action_area5">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+            <child>
+              <widget class="GtkButton" id="button7">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+                <property name="label" translatable="yes">gtk-ok</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">32</property>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkButton" id="button8">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+                <property name="label" translatable="yes">gtk-cancel</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">64</property>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
</glade-interface>
diff --git a/src/gfpm-repomanager.c b/src/gfpm-repomanager.c
index 4c2f86a..7cad0c9 100644
--- a/src/gfpm-repomanager.c
+++ b/src/gfpm-repomanager.c
@@ -30,6 +30,8 @@
#define MOVE_UP         1
#define MOVE_DN         0

+extern GtkWidget *gfpm_mw;
+
static gfpm_repolist_t  *repolist = NULL;
static gchar                    *curr_repo = NULL;

@@ -44,6 +46,9 @@ static GtkWidget *gfpm_repomgr_btnedit;

/* Server manager widgets */
static GtkWidget *gfpm_servmgr_dlg;
+static GtkWidget *gfpm_servmgr_server_input_dlg;
+static GtkWidget *gfpm_servmgr_server_input_dlg_entry1;
+static GtkWidget *gfpm_servmgr_server_input_dlg_entry2;
static GtkWidget *gfpm_servmgr_treeview;
static GtkWidget *gfpm_servmgr_btnadd;
static GtkWidget *gfpm_servmgr_btndel;
@@ -53,6 +58,8 @@ static GtkWidget *gfpm_servmgr_btnedit;

static void gfpm_write_servers_to_file (const gchar *reponame);

+static gfpm_server_entry_t * gfpm_servmgr_get_server_input (void);
+
/* signal callbacks */
static void cb_gfpm_repomgr_btnedit_clicked (GtkButton *button, gpointer data);
static void cb_gfpm_servmgr_btndel_clicked (GtkButton *button, gpointer data);
@@ -81,6 +88,9 @@ gfpm_repomanager_init (void)
gfpm_servmgr_btnedit = gfpm_get_widget ("servman_edit");
gfpm_servmgr_btnmup = gfpm_get_widget ("servman_mup");
gfpm_servmgr_btnmdn = gfpm_get_widget ("servman_mdn");
+       gfpm_servmgr_server_input_dlg = gfpm_get_widget 
("gfpm_servmgr_input_dlg");
+       gfpm_servmgr_server_input_dlg_entry1 = gfpm_get_widget ("entry1");
+       gfpm_servmgr_server_input_dlg_entry2 = gfpm_get_widget ("commentview");

/* setup repo store */
store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
@@ -111,7 +121,7 @@ gfpm_repomanager_init (void)
NULL);
gtk_tree_view_column_set_resizable (column, FALSE);
gtk_tree_view_append_column (GTK_TREE_VIEW(gfpm_servmgr_treeview), column);
-
+
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes (_("Server"),
renderer,
@@ -135,6 +145,71 @@ gfpm_repomanager_init (void)
return;
}

+static gfpm_server_entry_t *
+gfpm_servmgr_get_server_input (void)
+{
+       gint                            response;
+       gchar                           *url = NULL;
+       GtkTextBuffer           *buffer = NULL;
+       gfpm_server_entry_t *ret = NULL;
+
+       ret = (gfpm_server_entry_t *) malloc (sizeof(gfpm_server_entry_t));
+       memset (ret, 0, sizeof(gfpm_server_entry_t));
+       run: response = gtk_dialog_run 
(GTK_DIALOG(gfpm_servmgr_server_input_dlg));
+       url = gtk_entry_get_text 
(GTK_ENTRY(gfpm_servmgr_server_input_dlg_entry1));
+       buffer = gtk_text_view_get_buffer 
(GTK_TEXT_VIEW(gfpm_servmgr_server_input_dlg_entry2));
+
+       switch (response)
+       {
+               gchar *comments = NULL;
+               GtkTextIter siter;
+               GtkTextIter eiter;
+
+               case 32: /* OK Button */
+               {
+                       if (url == NULL || !strlen (url))
+                       {
+                               gfpm_error (_("Error"), _("The Repository URL 
field cannot be left blank"));
+                               gtk_widget_hide (gfpm_servmgr_server_input_dlg);
+                               goto run;
+                       }
+                       strncpy (ret->url, url, strlen(url));
+                       gtk_text_buffer_get_start_iter (buffer, &siter);
+                       gtk_text_buffer_get_end_iter (buffer, &eiter);
+                       comments = gtk_text_buffer_get_text (buffer, &siter, 
&eiter, FALSE);
+                       if (comments != NULL)
+                       {
+                               gchar *cslice = NULL;
+                               cslice = strtok (comments, "\n");
+                               if (cslice != NULL)
+                               {
+                                       do {
+                                               gchar *text = g_strdup_printf 
("# %s", cslice);
+                                               ret->comments = g_list_append 
(ret->comments, (gpointer) text);
+                                       } while 
((cslice=strtok(NULL,"\n"))!=NULL);
+                               }
+                       }
+                       gtk_entry_set_text 
(GTK_ENTRY(gfpm_servmgr_server_input_dlg_entry1), "");
+                       gtk_text_buffer_set_text (buffer, "", 0);
+                       gtk_text_view_set_buffer 
(GTK_TEXT_VIEW(gfpm_servmgr_server_input_dlg_entry2), buffer);
+                       gtk_widget_hide (gfpm_servmgr_server_input_dlg);
+                       break;
+               }
+
+               case 64: /* CANCEL Button */
+                       gtk_entry_set_text 
(GTK_ENTRY(gfpm_servmgr_server_input_dlg_entry1), "");
+                       gtk_text_buffer_set_text (buffer, "", 0);
+                       gtk_text_view_set_buffer 
(GTK_TEXT_VIEW(gfpm_servmgr_server_input_dlg_entry2), buffer);
+                       gtk_widget_hide (gfpm_servmgr_server_input_dlg);
+                       g_free (ret);
+                       return NULL;
+
+                       break;
+       }
+
+       return ret;
+}
+
static GList *
gfpm_repomgr_get_servers_from_repofile (const char *conf_file)
{
@@ -587,20 +662,14 @@ cb_gfpm_repomgr_btnedit_clicked (GtkButton *button, 
gpointer data)
static void
cb_gfpm_servmgr_btnadd_clicked (GtkButton *button, gpointer data)
{
-       gint                            msgres = 0;
-       gchar                           *path = NULL;
-       gchar                           *server = NULL;
+       gfpm_server_entry_t *s = NULL;
GList                           *rlist = NULL;
-       GList                           *slist = NULL;
gfpm_repo_t                     *rp = NULL;
-       gfpm_server_entry_t *s = NULL;
+       GList                           *slist = NULL;

-       server = gfpm_input (_("Add new server"), _("Enter the URL of the 
server: "), &msgres);
-       if (msgres != GTK_RESPONSE_ACCEPT)
-               return;
-       if (!strlen(server))
+       s = gfpm_servmgr_get_server_input ();
+       if (s == NULL)
return;
-       /* check if the server already exists */
rlist = repolist->list;
while (rlist != NULL)
{
@@ -613,22 +682,21 @@ cb_gfpm_servmgr_btnadd_clicked (GtkButton *button, 
gpointer data)
}
while (slist != NULL)
{
-               if (!strcmp(slist->data,server))
+               if (!strcmp(slist->data,s->url))
{
gfpm_error (_("Server already exists"), _("The server you're trying to add 
already exists"));
+                       g_free (s);
return;
}
slist = g_list_next (slist);
}
-       s = (gfpm_server_entry_t*) malloc (sizeof(gfpm_server_entry_t));
-       memset (s, 0, sizeof(gfpm_server_entry_t));
-       sprintf (s->url, "%s", server);
rp->servers = g_list_append (rp->servers, s);
-
+
+       /* update repository file */
gfpm_write_servers_to_file (curr_repo);
-       gfpm_repomgr_populate_servtvw (curr_repo);

-       g_free (path);
+       /* repopulate the server list and display */
+       gfpm_repomgr_populate_servtvw (curr_repo);

return;
}
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to