[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r12392 - in gnunet-gtk: contrib src,
gnunet <=