gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r12392 - in gnunet-gtk: contrib src


From: gnunet
Subject: [GNUnet-SVN] r12392 - in gnunet-gtk: contrib src
Date: Thu, 29 Jul 2010 15:43:38 +0200

Author: grothoff
Date: 2010-07-29 15:43:37 +0200 (Thu, 29 Jul 2010)
New Revision: 12392

Modified:
   gnunet-gtk/contrib/publish_dialog.glade
   gnunet-gtk/src/main_window_file_publish.c
Log:
towards namespace publishing

Modified: gnunet-gtk/contrib/publish_dialog.glade
===================================================================
--- gnunet-gtk/contrib/publish_dialog.glade     2010-07-29 11:37:24 UTC (rev 
12391)
+++ gnunet-gtk/contrib/publish_dialog.glade     2010-07-29 13:43:37 UTC (rev 
12392)
@@ -2,40 +2,26 @@
 <interface>
   <requires lib="gtk+" version="2.20"/>
   <!-- interface-naming-policy project-wide -->
-  <object class="GtkImage" id="right_stock_image">
-    <property name="visible">True</property>
-    <property name="stock">gtk-go-forward</property>
-  </object>
-  <object class="GtkImage" id="left_stock_image">
-    <property name="visible">True</property>
-    <property name="stock">gtk-go-back</property>
-  </object>
-  <object class="GtkImage" id="add_stock_image_2">
-    <property name="visible">True</property>
-    <property name="stock">gtk-add</property>
-  </object>
-  <object class="GtkImage" id="new_stock_image">
-    <property name="visible">True</property>
-    <property name="stock">gtk-new</property>
-  </object>
-  <object class="GtkImage" id="add_stock_image">
-    <property name="visible">True</property>
-    <property name="stock">gtk-add</property>
-  </object>
-  <object class="GtkTreeStore" 
id="GNUNET_GTK_file_sharing_publishing_tree_store">
+  <object class="GtkTreeStore" id="GNUNET_GTK_pseudonym_tree_store">
     <columns>
-      <!-- column-name filesize -->
+      <!-- column-name local_name -->
       <column type="gchararray"/>
-      <!-- column-name do_index -->
-      <column type="gboolean"/>
-      <!-- column-name filename -->
+      <!-- column-name namespace_handle -->
+      <column type="gpointer"/>
+      <!-- column-name last_id -->
       <column type="gchararray"/>
-      <!-- column-name anonymity_level -->
-      <column type="guint"/>
-      <!-- column-name priority -->
-      <column type="guint"/>
-      <!-- column-name file_information_struct -->
+      <!-- column-name last_uri -->
+      <column type="gchararray"/>
+      <!-- column-name last_meta -->
       <column type="gpointer"/>
+      <!-- column-name next_id -->
+      <column type="gchararray"/>
+      <!-- column-name last_description_from_meta -->
+      <column type="gchararray"/>
+      <!-- column-name next_id_editable -->
+      <column type="gboolean"/>
+      <!-- column-name current_id_editable -->
+      <column type="gboolean"/>
     </columns>
   </object>
   <object class="GtkDialog" id="GNUNET_GTK_master_publish_dialog">
@@ -292,6 +278,7 @@
         </child>
         <child>
           <object class="GtkTreeView" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_tree_view">
+            <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="model">GNUNET_GTK_pseudonym_tree_store</property>
             <property name="reorderable">True</property>
@@ -320,11 +307,11 @@
                 <property name="clickable">True</property>
                 <child>
                   <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_identifier_renderer">
-                    <property name="ellipsize">end</property>
+                    <signal name="edited" 
handler="GNUNET_GTK_master_publish_dialog_pseudonym_identifier_renderer_edited_cb"
 swapped="no"/>
                   </object>
                   <attributes>
-                    <attribute name="editable">7</attribute>
-                    <attribute name="text">5</attribute>
+                    <attribute name="editable">8</attribute>
+                    <attribute name="text">2</attribute>
                   </attributes>
                 </child>
               </object>
@@ -334,11 +321,14 @@
                 <property name="resizable">True</property>
                 <property name="sizing">autosize</property>
                 <property name="fixed_width">5</property>
-                <property name="title" translatable="yes">Previous 
identifier</property>
+                <property name="title" translatable="yes">Update 
identifier</property>
                 <child>
-                  <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_updates_renderer"/>
+                  <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_updates_renderer">
+                    <signal name="edited" 
handler="GNUNET_GTK_master_publish_dialog_pseudonym_updates_renderer_edited_cb" 
swapped="no"/>
+                  </object>
                   <attributes>
-                    <attribute name="text">2</attribute>
+                    <attribute name="editable">7</attribute>
+                    <attribute name="text">5</attribute>
                   </attributes>
                 </child>
               </object>
@@ -411,24 +401,40 @@
       <action-widget 
response="-5">GNUNET_GTK_master_publish_dialog_execute_button</action-widget>
     </action-widgets>
   </object>
-  <object class="GtkTreeStore" id="GNUNET_GTK_pseudonym_tree_store">
+  <object class="GtkTreeStore" 
id="GNUNET_GTK_file_sharing_publishing_tree_store">
     <columns>
-      <!-- column-name local_name -->
+      <!-- column-name filesize -->
       <column type="gchararray"/>
-      <!-- column-name namespace_handle -->
-      <column type="gpointer"/>
-      <!-- column-name last_id -->
+      <!-- column-name do_index -->
+      <column type="gboolean"/>
+      <!-- column-name filename -->
       <column type="gchararray"/>
-      <!-- column-name last_uri -->
-      <column type="gchararray"/>
-      <!-- column-name last_meta -->
+      <!-- column-name anonymity_level -->
+      <column type="guint"/>
+      <!-- column-name priority -->
+      <column type="guint"/>
+      <!-- column-name file_information_struct -->
       <column type="gpointer"/>
-      <!-- column-name next_id -->
-      <column type="gchararray"/>
-      <!-- column-name last_description_from_meta -->
-      <column type="gchararray"/>
-      <!-- column-name next_id_editable -->
-      <column type="gboolean"/>
     </columns>
   </object>
+  <object class="GtkImage" id="add_stock_image">
+    <property name="visible">True</property>
+    <property name="stock">gtk-add</property>
+  </object>
+  <object class="GtkImage" id="new_stock_image">
+    <property name="visible">True</property>
+    <property name="stock">gtk-new</property>
+  </object>
+  <object class="GtkImage" id="add_stock_image_2">
+    <property name="visible">True</property>
+    <property name="stock">gtk-add</property>
+  </object>
+  <object class="GtkImage" id="left_stock_image">
+    <property name="visible">True</property>
+    <property name="stock">gtk-go-back</property>
+  </object>
+  <object class="GtkImage" id="right_stock_image">
+    <property name="visible">True</property>
+    <property name="stock">gtk-go-forward</property>
+  </object>
 </interface>

Modified: gnunet-gtk/src/main_window_file_publish.c
===================================================================
--- gnunet-gtk/src/main_window_file_publish.c   2010-07-29 11:37:24 UTC (rev 
12391)
+++ gnunet-gtk/src/main_window_file_publish.c   2010-07-29 13:43:37 UTC (rev 
12392)
@@ -66,6 +66,7 @@
 {
   GtkTreeView *tv;
   GtkTreeModel *tm;
+  GtkTreeModel *ptm;
   GtkTreeSelection *sel;
   GtkTreeIter iter;
   GtkTreeIter parent;
@@ -79,7 +80,27 @@
   GtkWidget *execute_button;
   int is_dir;
   struct GNUNET_FS_FileInformation *fip;
-
+  int ns_ok;
+  char *namespace_id;
+  
+  tm = GTK_TREE_MODEL (gtk_builder_get_object (master_builder,
+                                              
"GNUNET_GTK_file_sharing_publishing_tree_store"));
+  tv = GTK_TREE_VIEW (gtk_builder_get_object (master_builder,
+                                             
"GNUNET_GTK_master_publish_dialog_pseudonym_tree_view"));
+  sel = gtk_tree_view_get_selection (tv);
+  ns_ok = GNUNET_YES;
+  if (TRUE == gtk_tree_selection_get_selected (sel, &ptm, &iter))
+    {
+      gtk_tree_model_get (ptm,
+                         &iter,
+                         2, &namespace_id,
+                         -1);
+      if (namespace_id == NULL)
+       {
+         ns_ok = GNUNET_NO;
+         GNUNET_free (namespace_id);
+       }
+    }
   up_button = GTK_WIDGET (gtk_builder_get_object (master_builder,
                                                  
"GNUNET_GTK_master_publish_dialog_up_button"));
   down_button = GTK_WIDGET (gtk_builder_get_object (master_builder,
@@ -98,7 +119,8 @@
                                              
"GNUNET_GTK_master_publish_dialog_file_information_tree_view"));
   sel = gtk_tree_view_get_selection (tv);
   tm = gtk_tree_view_get_model (tv);
-  if (gtk_tree_model_get_iter_first (tm, &iter))
+  if ( (gtk_tree_model_get_iter_first (tm, &iter)) &&
+       (ns_ok == GNUNET_YES) )
     gtk_widget_set_sensitive (execute_button, TRUE);
   else
     gtk_widget_set_sensitive (execute_button, FALSE);
@@ -526,8 +548,61 @@
   update_selectivity ();
 }
 
+/**
+ * User has changed the "current" identifier for the content in
+ * the GtkTreeView.  Update the model.
+ */
+void
+GNUNET_GTK_master_publish_dialog_pseudonym_updates_renderer_edited_cb 
(GtkCellRendererText *renderer,
+                                                                      gchar 
*cpath,
+                                                                      gchar 
*new_text,
+                                                                      gpointer 
user_data)
+{
+  GtkTreeIter iter;
+  GtkTreeStore *ts;
 
+  ts = GTK_TREE_STORE (gtk_builder_get_object (master_builder,
+                                              
"GNUNET_GTK_pseudonym_tree_store"));
+  
+  if (TRUE !=
+      gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (ts), &iter, cpath))
+    {
+      GNUNET_break (0);
+      return;
+    }
+  gtk_tree_store_set (ts, &iter, 5, new_text, -1);
+  update_selectivity ();
+}
+
+
+/**
+ * User has changed the "current" identifier for the content in
+ * the GtkTreeView.  Update the model.
+ */
 void
+GNUNET_GTK_master_publish_dialog_pseudonym_identifier_renderer_edited_cb 
(GtkCellRendererText *renderer,
+                                                                         gchar 
*cpath,
+                                                                         gchar 
*new_text,
+                                                                         
gpointer user_data)
+{
+  GtkTreeIter iter;
+  GtkTreeStore *ts;
+
+  ts = GTK_TREE_STORE (gtk_builder_get_object (master_builder,
+                                              
"GNUNET_GTK_pseudonym_tree_store"));
+  
+  if (TRUE !=
+      gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (ts), &iter, cpath))
+    {
+      GNUNET_break (0);
+      return;
+    }
+  gtk_tree_store_set (ts, &iter, 2, new_text, -1);
+  update_selectivity ();
+}
+
+
+void
 GNUNET_GTK_master_publish_dialog_right_button_clicked_cb (GtkWidget * dummy, 
                                                          gpointer data)
 {
@@ -640,7 +715,7 @@
   if (TRUE != gtk_tree_selection_get_selected (sel,
                                               &tm,
                                               &iter))
-    {
+   {
       GNUNET_break (0);
       return;
     }
@@ -1055,6 +1130,77 @@
 }
 
 
+struct UpdateableContext
+{
+  GtkTreeIter parent;
+  GtkTreeStore *ts;
+  const char *namespace_name;
+  struct GNUNET_FS_Namespace *ns;
+};
+
+
+static void
+add_updateable_to_ts (void *cls,
+                     const char *last_id,
+                     const struct GNUNET_FS_Uri *last_uri,
+                     const struct GNUNET_CONTAINER_MetaData *last_meta,
+                     const char *next_id)
+{
+  struct UpdateableContext *uc = cls;
+  GtkTreeIter iter;
+  char *desc;
+
+  desc = GNUNET_CONTAINER_meta_data_get_by_type (last_meta,
+                                                
EXTRACTOR_METATYPE_DESCRIPTION);
+  gtk_tree_store_insert_with_values (uc->ts, 
+                                    &iter,
+                                    &uc->parent,
+                                    G_MAXINT,
+                                    0, uc->namespace_name,
+                                    1, uc->ns,
+                                    2, last_id,
+                                    3, GNUNET_FS_uri_dup (last_uri),
+                                    4, GNUNET_CONTAINER_meta_data_duplicate 
(last_meta),
+                                    5, next_id,
+                                    6, desc,
+                                    7, FALSE /* current not editable (only for 
top-level) */,
+                                    8, TRUE /* update editable (always) */,
+                                    -1);  
+  GNUNET_free_non_null (desc);
+}
+
+
+static void
+add_namespace_to_ts (void *cls,
+                    const char *name,
+                    const GNUNET_HashCode *id)
+{
+  GtkTreeStore *ts = cls;
+  struct UpdateableContext uc;
+
+  uc.namespace_name = name;
+  uc.ts = ts;
+  uc.ns = GNUNET_FS_namespace_create (GNUNET_GTK_get_fs_handle (),
+                                     name);
+  gtk_tree_store_insert_with_values (ts, &uc.parent,
+                                    NULL,
+                                    G_MAXINT,
+                                    0, name,
+                                    1, uc.ns,
+                                    2, NULL /* last-id */,
+                                    3, NULL /* last-uri */,
+                                    4, NULL /* meta */,
+                                    5, NULL /* next-ID */,
+                                    6, NULL /* last-description */,
+                                    7, TRUE /* current editable */,
+                                    8, TRUE /* update editable */,
+                                    -1);  
+  /* FIXME: maybe we want to build the real tree here?
+     => FS API should be different... */
+  GNUNET_FS_namespace_list_updateable (uc.ns, &add_updateable_to_ts, &uc);
+}
+
+
 /**
  */
 void
@@ -1062,13 +1208,17 @@
                                               gpointer data)
 {
   GtkWidget *ad;
-  GtkTreeStore *ls;
+  GtkTreeStore *ts;
   gint ret;
   GtkTreeView *tv;
   GtkTreeSelection *sel;
   GtkTreeIter iter;
   struct GNUNET_FS_FileInformation *fi;
   GtkTreeModel *tm;
+  GtkTreeModel *ptm;
+  struct GNUNET_FS_Namespace *namespace;
+  char *namespace_id;
+  char *namespace_uid;
   
   GNUNET_assert (master_builder == NULL);
   master_builder = GNUNET_GTK_get_new_builder ("publish_dialog.glade");
@@ -1081,29 +1231,51 @@
                   G_CALLBACK(selection_changed_cb), NULL); 
   ad = GTK_WIDGET (gtk_builder_get_object (master_builder,
                                           "GNUNET_GTK_master_publish_dialog"));
-  ls = GTK_TREE_STORE (gtk_builder_get_object (master_builder,
+  ts = GTK_TREE_STORE (gtk_builder_get_object (master_builder,
                                               
"GNUNET_GTK_pseudonym_tree_store"));
-  /* FIXME: populate 'ls' */
+  GNUNET_FS_namespace_list (GNUNET_GTK_get_fs_handle (),
+                           &add_namespace_to_ts,
+                           ts);
   ret = gtk_dialog_run (GTK_DIALOG (ad));
   if (ret == GTK_RESPONSE_OK)
     {
-      /* FIXME: grab namespace from ls! */
       tm = GTK_TREE_MODEL (gtk_builder_get_object (master_builder,
                                                   
"GNUNET_GTK_file_sharing_publishing_tree_store"));
+      tv = GTK_TREE_VIEW (gtk_builder_get_object (master_builder,
+                                                 
"GNUNET_GTK_master_publish_dialog_pseudonym_tree_view"));
+      sel = gtk_tree_view_get_selection (tv);
+      if (TRUE == gtk_tree_selection_get_selected (sel, &ptm, &iter))
+       {
+         gtk_tree_model_get (ptm,
+                             &iter,
+                             1, &namespace,
+                             2, &namespace_id,
+                             5, &namespace_uid,
+                             -1);
+       }
+      else
+       {
+         namespace = NULL;
+         namespace_id = NULL;
+         namespace_uid = NULL;
+       }
       if (gtk_tree_model_get_iter_first (tm, &iter))
        do
          {
            fi = get_file_information (tm, &iter);
            GNUNET_FS_publish_start (GNUNET_GTK_get_fs_handle (),
                                     fi,
-                                    NULL /* FIXME: namespace */,
-                                    NULL /* FIXME: namespace id */,
-                                    NULL /* FIXME: namespace uid */,
+                                    namespace,
+                                    namespace_id,
+                                    namespace_uid,
                                     GNUNET_FS_PUBLISH_OPTION_NONE);
          }
        while (gtk_tree_model_iter_next (tm, &iter));
-    }
+      GNUNET_free_non_null (namespace_uid);
+      GNUNET_free_non_null (namespace_id);      
+    }  
   /* FIXME: free state from 'ls' */
+  /* FIXME: free state from 'tm' */
   gtk_widget_destroy (ad);
   g_object_unref (G_OBJECT (master_builder));
   master_builder = NULL;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]