gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r29097 - in gnunet-gtk: contrib src/fs src/identity


From: gnunet
Subject: [GNUnet-SVN] r29097 - in gnunet-gtk: contrib src/fs src/identity
Date: Sat, 7 Sep 2013 21:14:20 +0200

Author: grothoff
Date: 2013-09-07 21:14:20 +0200 (Sat, 07 Sep 2013)
New Revision: 29097

Modified:
   gnunet-gtk/contrib/gnunet_identity_gtk_advertise_dialog.glade
   gnunet-gtk/src/fs/gnunet-fs-gtk_publish-edit-dialog.c
   gnunet-gtk/src/identity/gnunet-identity-gtk_advertise.c
Log:
-completing widget handling in advertise dialog

Modified: gnunet-gtk/contrib/gnunet_identity_gtk_advertise_dialog.glade
===================================================================
--- gnunet-gtk/contrib/gnunet_identity_gtk_advertise_dialog.glade       
2013-09-07 18:47:14 UTC (rev 29096)
+++ gnunet-gtk/contrib/gnunet_identity_gtk_advertise_dialog.glade       
2013-09-07 19:14:20 UTC (rev 29097)
@@ -23,10 +23,15 @@
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
-  <object class="GtkAdjustment" 
id="GNUNET_GTK_identity_advertise_metadata_vadj">
-    <property name="upper">100</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
+  <object class="GtkListStore" 
id="GNUNET_GTK_identity_advertise_metadata_liststore">
+    <columns>
+      <!-- column-name TypeBin -->
+      <column type="gint"/>
+      <!-- column-name Type -->
+      <column type="gchararray"/>
+      <!-- column-name Value -->
+      <column type="gchararray"/>
+    </columns>
   </object>
   <object class="GtkDialog" id="GNUNET_GTK_identity_advertise_dialog">
     <property name="can_focus">False</property>
@@ -172,7 +177,7 @@
                           <object class="GtkTreeView" 
id="GNUNET_GTK_identity_advertise_metadata_treeview">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property 
name="model">GNUNET_GTK_identity_advertise_keywords_liststore</property>
+                            <property 
name="model">GNUNET_GTK_identity_advertise_metadata_liststore</property>
                             <property 
name="hadjustment">GNUNET_GTK_identity_advertise_metadata_hadj</property>
                             <property 
name="vadjustment">GNUNET_GTK_identity_advertise_metadata_vadj</property>
                             <property name="headers_clickable">False</property>
@@ -188,7 +193,7 @@
                                 <child>
                                   <object class="GtkCellRendererText" 
id="GNUNET_GTK_identity_advertise_metadata_type_text"/>
                                   <attributes>
-                                    <attribute name="text">2</attribute>
+                                    <attribute name="text">1</attribute>
                                   </attributes>
                                 </child>
                               </object>
@@ -202,7 +207,7 @@
                                     <signal name="edited" 
handler="GNUNET_GTK_identity_advertise_metadata_value_text_edited_cb" 
swapped="no"/>
                                   </object>
                                   <attributes>
-                                    <attribute name="text">5</attribute>
+                                    <attribute name="text">2</attribute>
                                   </attributes>
                                 </child>
                               </object>
@@ -322,7 +327,7 @@
                                 <signal name="edited" 
handler="GNUNET_GTK_identity_advertise_keywords_text_edited_cb" swapped="no"/>
                               </object>
                               <attributes>
-                                <attribute name="text">1</attribute>
+                                <attribute name="text">0</attribute>
                               </attributes>
                             </child>
                           </object>
@@ -355,15 +360,10 @@
       <action-widget 
response="-6">GNUNET_GTK_identity_advertise_cancel_button</action-widget>
     </action-widgets>
   </object>
-  <object class="GtkListStore" 
id="GNUNET_GTK_identity_advertise_metadata_liststore">
-    <columns>
-      <!-- column-name TypeBin -->
-      <column type="gint"/>
-      <!-- column-name Type -->
-      <column type="gchararray"/>
-      <!-- column-name Value -->
-      <column type="gchararray"/>
-    </columns>
+  <object class="GtkAdjustment" 
id="GNUNET_GTK_identity_advertise_metadata_vadj">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
   </object>
   <object class="GtkListStore" 
id="GNUNET_GTK_identity_metadata_types_liststore">
     <columns>

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk_publish-edit-dialog.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk_publish-edit-dialog.c       2013-09-07 
18:47:14 UTC (rev 29096)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk_publish-edit-dialog.c       2013-09-07 
19:14:20 UTC (rev 29097)
@@ -729,6 +729,7 @@
  * @param widget the entry line
  * @param event the event information
  * @param user_data the 'struct EditPublicationDialogContext'
+ * @return TRUE if we handled the event, FALSE if not
  */
 gboolean
 GNUNET_GTK_edit_publication_keyword_entry_key_press_event_cb (GtkWidget *

Modified: gnunet-gtk/src/identity/gnunet-identity-gtk_advertise.c
===================================================================
--- gnunet-gtk/src/identity/gnunet-identity-gtk_advertise.c     2013-09-07 
18:47:14 UTC (rev 29096)
+++ gnunet-gtk/src/identity/gnunet-identity-gtk_advertise.c     2013-09-07 
19:14:20 UTC (rev 29097)
@@ -26,10 +26,15 @@
 #include "gnunet-identity-gtk_advertise.h"
 #include <gnunet/gnunet_fs_service.h>
 
+
+#define NEW_KEYWORD_TEXT "<add>"
+
+
 /**
  * Types of metadata we offer for namespaces.
  */
-static gint types[] = {
+static gint types[] = 
+{
   EXTRACTOR_METATYPE_TITLE,
   EXTRACTOR_METATYPE_KEYWORDS, 
   EXTRACTOR_METATYPE_SUBJECT,
@@ -47,58 +52,59 @@
  * Columns in the metadata list store.
  */
 enum METADATA_ModelColumns
-  {
-    /**
-     * A guint
-     */
-    METADATA_MC_TYPE_AS_ENUM = 0,
+{
 
-    /**
-     * A gchararray 
-     */
-    METADATA_MC_TYPE_AS_STRING = 1,
+  /**
+   * A guint
+   */
+  METADATA_MC_TYPE_AS_ENUM = 0,
+  
+  /**
+   * A gchararray 
+   */
+  METADATA_MC_TYPE_AS_STRING = 1,
 
-    /**
-     * A gchararray 
-     */
-    METADATA_MC_VALUE = 2
+  /**
+   * A gchararray 
+   */
+  METADATA_MC_VALUE = 2
+  
+};
 
-  };
 
-
 /**
  * Columns in the keyword list tree store.
  */
 enum KEYWORDS_ModelColumns
-  {
+{
 
-    /**
-     * A gchararray 
-     */
-    KEYWORDS_MC_KEYWORD = 0
+  /**
+   * A gchararray 
+   */
+  KEYWORDS_MC_KEYWORD = 0
 
-  };
+};
 
 
 /**
  * Columns in the meta types list tree store.
  */
 enum METATYPES_ModelColumns
-  {
+{
 
-    /**
-     * A gchararray 
-     */
-    METATYPES_MC_TYPE_AS_STRING = 0,
+  /**
+   * A gchararray 
+   */
+  METATYPES_MC_TYPE_AS_STRING = 0,
+  
+  /**
+   * A guint
+   */
+  METATYPES_MC_TYPE_AS_ENUM = 1
+  
+};
 
-    /**
-     * A guint
-     */
-    METATYPES_MC_TYPE_AS_ENUM = 1
 
-  };
-
-
 /**
  * Context for advertisement operations.
  */
@@ -134,9 +140,15 @@
    */
   GtkListStore *meta_types;
 
+  /**
+   * Number of keywords in the view.
+   */
+  unsigned int num_keywords;
+
 };
 
 
+
 /**
  * The user terminated the dialog.  Perform the appropriate action.
  *
@@ -161,1115 +173,295 @@
   GNUNET_free (ac);
 }
 
-
-/**
- * FIXME: do we need this event? If so, what do we do?
- */
-void
-GNUNET_GTK_identity_advertise_keywords_column_clicked_cb ()
-{
-  GNUNET_break (0);
-}
-
  
 /**
  * User edited keywords in the keyword tree view.  Update
  * the model accordingly.
+ *
+ * @param renderer the object that created the signal
+ * @param path the path identifying the edited cell
+ * @param new_text the new text
+ * @param user_data the 'struct AdvertiseContext'
  */ 
 void
-GNUNET_GTK_identity_advertise_keywords_text_edited_cb ()
+GNUNET_GTK_identity_advertise_keywords_text_edited_cb (GtkCellRendererText 
*renderer,
+                                                      gchar               
*path,
+                                                      gchar               
*new_text,
+                                                      gpointer             
user_data)
 {
-  GNUNET_break (0);
-}
-
-
-/**
- * User pushed a key in the metadata tree view.  Check if it was
- * "DEL" and if so, remove the selected values.
- */
-void
-GNUNET_GTK_identity_advertise_metadata_treeview_key_press_event_cb ()
-{
-  GNUNET_break (0);
-}
-
-
-/**
- * FIXME: how is this event triggered exactly?
- */
-void
-GNUNET_GTK_identity_advertise_metadata_treeview_delete_event_cb ()
-{
-  GNUNET_break (0);
-}
-
-
-/**
- * User edited metadata value.  Update sensitivity of the 'add' button.
- */
-void
-GNUNET_GTK_identity_advertise_metadata_value_text_edited_cb ()
-{
-  GNUNET_break (0);
-}
-
-
-/**
- * User edited metadata type.  Not sure we need to do something here...
- */
-void
-GNUNET_GTK_identity_advertise_metadata_type_text_edited_cb ()
-{
-  GNUNET_break (0);
-}
-
-
-/**
- * User clicked the 'add' button, get the type and value and update
- * the metadata model.
- */
-void
-GNUNET_GTK_identity_advertise_metadata_add_button_clicked_cb ()
-{
-  GNUNET_break (0);
-}
-
-
-/**
- * Run the dialog for advertising a namespace.
- *
- * @param priv private key of the namespace to advertise
- */
-void
-GIG_advertise_dialog_start_ (const struct GNUNET_CRYPTO_EccPrivateKey *priv)
-{
-  struct AdvertiseContext *ac;
-  gint i;
+  struct AdvertiseContext *ac = user_data;
+  GtkTreePath *tree_path;
   GtkTreeIter iter;
+  char *old_text;
 
-  ac = GNUNET_new (struct AdvertiseContext);
-  ac->priv = *priv;
-  ac->builder =
-    GNUNET_GTK_get_new_builder ("gnunet_identity_gtk_advertise_dialog.glade",
-                               ac);
-  if (NULL == ac->builder)
+  tree_path = gtk_tree_path_new_from_string (path);
+  if (NULL == tree_path)
   {
     GNUNET_break (0);
-    GNUNET_free (ac);
     return;
   }
-  ac->dialog = GTK_WIDGET (gtk_builder_get_object
-                          (ac->builder, 
"GNUNET_GTK_identity_advertise_dialog"));
-  ac->keywords = GTK_LIST_STORE (gtk_builder_get_object
-                               (ac->builder, 
"GNUNET_GTK_identity_advertise_keywords_liststore"));
-  ac->metadata = GTK_LIST_STORE (gtk_builder_get_object
-                            (ac->builder, 
"GNUNET_GTK_identity_advertise_metadata_liststore"));
-  ac->meta_types = GTK_LIST_STORE (gtk_builder_get_object
-                                  (ac->builder, 
"GNUNET_GTK_identity_metadata_types_liststore"));
-  for (i = 0; EXTRACTOR_METATYPE_RESERVED != types[i]; i++)  
-    gtk_list_store_insert_with_values (ac->meta_types,
-                                      &iter, G_MAXINT, 
-                                      METATYPES_MC_TYPE_AS_STRING,
-                                      EXTRACTOR_metatype_to_string (types[i]),
-                                      METATYPES_MC_TYPE_AS_ENUM,
-                                      types[i],
-                                      -1);
-  gtk_window_present (GTK_WINDOW (ac->dialog));
-}
-
-
-#if 0
-
-static void
-sort_order_list (struct GNUNET_GTK_NamespaceManagerContext *ctx,
-    int sort_column)
-{
-  int sorted = GNUNET_NO;
-  GtkTreeIter iter;
-  gint i;
-  gint row_count;
-  gint *row_indices, *row_ints;
-  gchar **row_strings;
-
-  ctx->sort_direction = ctx->sort_direction <= 0 ? 1 : 0;
-
-  row_count = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (
-      ctx->ns_order_store), NULL);
-  if (! gtk_tree_model_get_iter_first (GTK_TREE_MODEL (
-      ctx->ns_order_store), &iter))
+  if (! gtk_tree_model_get_iter (GTK_TREE_MODEL (ac->keywords),
+                                &iter, tree_path))
+  {
+    GNUNET_break (0);
+    gtk_tree_path_free (tree_path);
     return;
-
-  row_indices = g_new0 (gint, row_count);
-  row_ints = g_new0 (gint, row_count);
-  row_strings = g_new0 (gchar *, row_count);
-
-  for (i = 0; i < row_count; i++)
-  {
-    int an_int;
-    char *a_string;
-    row_indices[i] = i;
-    switch (sort_column)
-    {
-    case GNUNET_GTK_NAMESPACE_ORDER_RANK_COLUMN:
-      gtk_tree_model_get (GTK_TREE_MODEL (ctx->ns_order_store), &iter,
-          sort_column, &an_int, -1);
-      row_ints[i] = an_int;
-      row_strings[i] = NULL;
-      break;
-    case GNUNET_GTK_NAMESPACE_ORDER_NAME_COLUMN:
-    case GNUNET_GTK_NAMESPACE_ORDER_IDENTIFIER_COLUMN:
-      gtk_tree_model_get (GTK_TREE_MODEL (ctx->ns_order_store), &iter,
-          sort_column, &a_string, -1);
-      row_strings[i] = a_string;
-      break;
-    default:
-      row_strings[i] = NULL;
-      break;
-    }
-    if (TRUE != gtk_tree_model_iter_next (GTK_TREE_MODEL (
-      ctx->ns_order_store), &iter))
-      break;
   }
-
-  while (sorted != GNUNET_YES)
+  gtk_tree_path_free (tree_path);
+  gtk_tree_model_get (GTK_TREE_MODEL (ac->keywords), &iter,
+                     KEYWORDS_MC_KEYWORD, &old_text,
+                     -1);
+  if (0 == strcmp (NEW_KEYWORD_TEXT, old_text))
   {
-    sorted = GNUNET_YES;
-    for (i = 0; i < row_count - 1; i++)
+    if ( (NULL != new_text) &&
+        (0 != strlen (new_text)) )
     {
-      int cmp_result;
-
-      switch (sort_column)
-      {
-      case GNUNET_GTK_NAMESPACE_ORDER_RANK_COLUMN:
-        cmp_result = row_ints[i] <= row_ints[i + 1] ? 0 : 1;
-        break;
-      case GNUNET_GTK_NAMESPACE_ORDER_NAME_COLUMN:
-      case GNUNET_GTK_NAMESPACE_ORDER_IDENTIFIER_COLUMN:
-        /* FIXME: name can be UTF-8-encoded, use UTF-8-aware comparison func */
-        cmp_result = strcmp (row_strings[i], row_strings[i + 1]);
-        break;
-      default:
-       GNUNET_break (0);
-       cmp_result = 0;
-        break;
-      }
-
-      if (((ctx->sort_direction <= 0) && (cmp_result <= 0)) ||
-          ((ctx->sort_direction > 0) && (cmp_result > 0)))
-      {
-        int tmp_int, tmp_index;
-        char *tmp_string;
-        tmp_index = row_indices[i];
-        tmp_int = row_ints[i];
-        tmp_string = row_strings[i];
-        row_indices[i] = row_indices[i + 1];
-        row_ints[i] = row_ints[i + 1];
-        row_strings[i] = row_strings[i + 1];
-        row_ints[i + 1] = tmp_int;
-        row_strings[i + 1] = tmp_string;
-        row_indices[i + 1] = tmp_index;
-        sorted = GNUNET_NO;
-      }
+      gtk_list_store_insert_with_values (ac->keywords, &iter, -1,
+                                        KEYWORDS_MC_KEYWORD, new_text,
+                                        -1);
+      ac->num_keywords++;
     }
   }
-
-  gtk_list_store_reorder (ctx->ns_order_store, row_indices);
-
-  g_free (row_indices);
-  for (i = 0; i < row_count; i++)
-    g_free (row_strings[i]);
-  g_free (row_strings);
-  g_free (row_ints);
-}
-
-
-void
-GNUNET_GTK_namespace_manager_namespace_order_column_clicked_cb (
-    GtkTreeViewColumn *treeviewcolumn, gpointer user_data)
-{
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = user_data;
-  if (treeviewcolumn == ctx->order_rank)
-  {
-    sort_order_list (ctx, GNUNET_GTK_NAMESPACE_ORDER_RANK_COLUMN);
-  }
-  else if (treeviewcolumn == ctx->order_name)
-  {
-    sort_order_list (ctx, GNUNET_GTK_NAMESPACE_ORDER_NAME_COLUMN);
-  }
-  else if (treeviewcolumn == ctx->order_id)
-  {
-    sort_order_list (ctx, GNUNET_GTK_NAMESPACE_ORDER_IDENTIFIER_COLUMN);
-  }
-}
-
-
-void
-GNUNET_GTK_namespace_manager_known_namespaces_delete_button_clicked_cb (
-    GtkButton *button, gpointer user_data)
-{
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = user_data;
-  GtkTreeIter iter;
-  struct GNUNET_FS_PseudonymIdentifier *nsid;
-  GtkTreeRowReference *order_row, *known_row;
-  struct GNUNET_CONTAINER_MetaData *md;
-
-  if (FALSE == gtk_tree_selection_get_selected (ctx->known_ns_sel, NULL, 
&iter))
-    return;
-
-  gtk_tree_model_get (GTK_TREE_MODEL (ctx->known_ns_store), &iter,
-      GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_BIN_COLUMN, &nsid,
-      GNUNET_GTK_KNOWN_NAMESPACES_ORDER_ROW_REFERENCE_COLUMN, &order_row,
-      GNUNET_GTK_KNOWN_NAMESPACES_METADATA_COLUMN, &md,
-      -1);
-  /* Make sure the store does not contain references to freed objects */
-  gtk_list_store_set (ctx->known_ns_store, &iter,
-      GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_BIN_COLUMN, NULL,
-      GNUNET_GTK_KNOWN_NAMESPACES_ORDER_ROW_REFERENCE_COLUMN, NULL,
-      GNUNET_GTK_KNOWN_NAMESPACES_METADATA_COLUMN, NULL,
-      -1);
-  GNUNET_CONTAINER_meta_data_destroy (md);
-  if (order_row != NULL)
-  {
-    if (GNUNET_OK == GNUNET_GTK_get_iter_from_reference (order_row, &iter))
-    {
-      gtk_tree_model_get (GTK_TREE_MODEL (ctx->ns_order_store), &iter,
-        GNUNET_GTK_NAMESPACE_ORDER_KNOWN_ROW_REFERENCE_COLUMN, &known_row, -1);
-      gtk_list_store_set (ctx->ns_order_store, &iter,
-        GNUNET_GTK_NAMESPACE_ORDER_KNOWN_ROW_REFERENCE_COLUMN, NULL, -1);
-      if (known_row != NULL)
-        gtk_tree_row_reference_free (known_row);
-      gtk_list_store_remove (ctx->ns_order_store, &iter);
-    }
-    gtk_tree_row_reference_free (order_row);
-  }
-  ctx->deleted_namespaces = g_list_prepend (ctx->deleted_namespaces, nsid);
-  gtk_list_store_remove (ctx->known_ns_store, &iter);
-
-  gtk_list_store_clear (ctx->ns_details_store);
-  GNUNET_CONTAINER_meta_data_destroy (ctx->uneditable_md);
-  ctx->uneditable_md = NULL;
-}
-
-
-void
-GNUNET_GTK_namespace_manager_known_namespaces_swap_rank_button_clicked_cb (
-    GtkButton *button, gpointer user_data)
-{
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = user_data;
-  GtkTreeIter known_iter, order_iter;
-  struct GNUNET_CRYPTO_EccPublicKey *nsid;
-  int32_t old_rank, new_rank;
-  GtkTreeRowReference *order_row, *known_row;
-
-  if (FALSE == gtk_tree_selection_get_selected (ctx->known_ns_sel, NULL, 
&known_iter))
-    return;
-
-  gtk_tree_model_get (GTK_TREE_MODEL (ctx->known_ns_store), &known_iter,
-      GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_BIN_COLUMN, &nsid,
-      GNUNET_GTK_KNOWN_NAMESPACES_RANK_COLUMN, &old_rank,
-      GNUNET_GTK_KNOWN_NAMESPACES_ORDER_ROW_REFERENCE_COLUMN, &order_row,
-      -1);
-
-  if (old_rank == 0)
-    new_rank = -1;
   else
-    new_rank = -old_rank;
-
-  gtk_list_store_set (ctx->known_ns_store, &known_iter,
-      GNUNET_GTK_KNOWN_NAMESPACES_RANK_COLUMN, new_rank,
-      GNUNET_GTK_KNOWN_NAMESPACES_ORDER_ROW_REFERENCE_COLUMN, NULL,
-      -1);
-
-  if (order_row != NULL)
   {
-    if (new_rank < 0)
+    if ( (NULL != new_text) &&
+        (0 != strlen (new_text)) )
     {
-      if (GNUNET_OK == GNUNET_GTK_get_iter_from_reference (order_row, 
&order_iter))
-      {
-        gtk_tree_model_get (GTK_TREE_MODEL (ctx->ns_order_store), &order_iter,
-            GNUNET_GTK_NAMESPACE_ORDER_KNOWN_ROW_REFERENCE_COLUMN, &known_row, 
-1);
-        gtk_list_store_remove (ctx->ns_order_store, &order_iter);
-        if (known_row != NULL)
-          gtk_tree_row_reference_free (known_row);
-      }
+      gtk_list_store_set (ac->keywords, &iter,
+                         KEYWORDS_MC_KEYWORD, new_text,
+                         -1);
     }
-    gtk_tree_row_reference_free (order_row);
-  }
-  if (new_rank >= 0)
-  {
-    char *name, *identifier;
-    if (order_row != NULL)
+    else
     {
-      /* This should not happen */
-      GNUNET_break (0);
+      gtk_list_store_remove (ac->keywords, &iter);
+      ac->num_keywords--;
     }
-    gtk_tree_model_get (GTK_TREE_MODEL (ctx->known_ns_store), &known_iter,
-        GNUNET_GTK_KNOWN_NAMESPACES_NAME_COLUMN, &name,
-        GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_COLUMN, &identifier,
-        -1);
-    known_row = GNUNET_GTK_get_reference_from_iter (GTK_TREE_MODEL (
-        ctx->known_ns_store), &known_iter);
-    gtk_list_store_insert_with_values (ctx->ns_order_store, &order_iter, 
G_MAXINT,
-        GNUNET_GTK_NAMESPACE_ORDER_RANK_COLUMN, new_rank,
-        GNUNET_GTK_NAMESPACE_ORDER_NAME_COLUMN, name,
-        GNUNET_GTK_NAMESPACE_ORDER_IDENTIFIER_COLUMN, identifier,
-        GNUNET_GTK_NAMESPACE_ORDER_IDENTIFIER_BIN_COLUMN, nsid,
-        GNUNET_GTK_NAMESPACE_ORDER_KNOWN_ROW_REFERENCE_COLUMN, known_row,
-        -1);
-    g_free (name);
-    g_free (identifier);
-    order_row = GNUNET_GTK_get_reference_from_iter (GTK_TREE_MODEL 
(ctx->ns_order_store),
-        &order_iter);
-    gtk_list_store_set (ctx->known_ns_store, &known_iter,
-      GNUNET_GTK_KNOWN_NAMESPACES_ORDER_ROW_REFERENCE_COLUMN, order_row, -1);
   }
+  g_free (old_text);
+  gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object 
+                                       (ac->builder,
+                                        
"GNUNET_GTK_identity_advertise_ok_button")),
+                           0 != ac->num_keywords);
 }
 
 
-void
-GNUNET_GTK_namespace_manager_namespace_order_apply_clicked_cb (
-    GtkButton *button, gpointer user_data)
+/**
+ * User pushed a key in the metadata tree view.  Check if it was
+ * "DEL" and if so, remove the selected values.
+ *
+ * @param widget widget creating the signal
+ * @param event the event to process
+ * @param user_data the 'struct AdvertiseContext'
+ * @return TRUE if we handled the event, FALSE if not
+ */
+gboolean
+GNUNET_GTK_identity_advertise_metadata_treeview_key_press_event_cb (GtkWidget 
*widget,
+                                                                   GdkEventKey 
*event,
+                                                                   gpointer 
user_data)
 {
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = user_data;
+  struct AdvertiseContext *ac = user_data;
+  GtkTreeSelection *sel;
+  GtkTreeModel *model;
   GtkTreeIter iter;
-  gint i;
-  gint row_count;
-  GtkTreeRowReference *known_row;
 
-  row_count = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (
-      ctx->ns_order_store), NULL);
-  if (! gtk_tree_model_get_iter_first (GTK_TREE_MODEL (
-      ctx->ns_order_store), &iter))
-    return;
-
-  for (i = 0; i < row_count; i++)
-  {
-    gtk_list_store_set (ctx->ns_order_store, &iter,
-        GNUNET_GTK_NAMESPACE_ORDER_RANK_COLUMN, i, -1);
-    gtk_tree_model_get (GTK_TREE_MODEL (ctx->ns_order_store), &iter,
-        GNUNET_GTK_NAMESPACE_ORDER_KNOWN_ROW_REFERENCE_COLUMN, &known_row, -1);
-    if (known_row == NULL)
+  if (event->keyval != GDK_KEY_Delete)
+    return FALSE;
+  sel = gtk_tree_view_get_selection (GTK_TREE_VIEW 
+                                    (gtk_builder_get_object
+                                     (ac->builder,
+                                      
"GNUNET_GTK_identity_advertise_metadata_treeview")));
+  if (! gtk_tree_selection_get_selected (sel,
+                                        &model,
+                                        &iter))
     {
-      /* This is not supposed to happen. What to do? */
-      GNUNET_break (0);
+      gdk_beep ();
+      return TRUE;
     }
-    else
-    {
-      GtkTreeIter known_iter;
-      if (GNUNET_OK == GNUNET_GTK_get_iter_from_reference (known_row, 
&known_iter))
-      {
-        gtk_list_store_set (ctx->known_ns_store, &known_iter,
-            GNUNET_GTK_KNOWN_NAMESPACES_RANK_COLUMN, i,
-            -1);
-      }
-    }
-    if (TRUE != gtk_tree_model_iter_next (GTK_TREE_MODEL (
-      ctx->ns_order_store), &iter))
-      break;
-  }
+  gtk_list_store_remove (ac->metadata,
+                        &iter);
+  return TRUE;
 }
 
 
+/**
+ * User edited metadata value in the tree view. Update the model.
+ *
+ * @param renderer the object that created the signal
+ * @param path the path identifying the edited cell
+ * @param new_text the new text, if empty, remove the line
+ * @param user_data the 'struct AdvertiseContext'
+ */
 void
-GNUNET_GTK_namespace_manager_namespace_details_add_button_clicked_cb (
-    GtkButton *button, gpointer user_data)
+GNUNET_GTK_identity_advertise_metadata_value_text_edited_cb 
(GtkCellRendererText *renderer,
+                                                            gchar *path,
+                                                            gchar *new_text,
+                                                            gpointer user_data)
 {
-  /* FIXME: add a row to the details list. Disabled at the moment, since
-   * metadata type selection is not implemented.
-   */
-}
-
-
-void
-GNUNET_GTK_namespace_manager_namespace_details_delete_button_clicked_cb (
-    GtkButton *button, gpointer user_data)
-{
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = user_data;
+  struct AdvertiseContext *ac = user_data;
+  GtkTreePath *tree_path;
   GtkTreeIter iter;
 
-  if (FALSE == gtk_tree_selection_get_selected (ctx->ns_details_sel, NULL, 
&iter))
-    return;
-
-  gtk_list_store_remove (ctx->ns_details_store, &iter);
-  gtk_widget_set_sensitive (ctx->details_apply_button, TRUE);
-}
-
-
-void
-GNUNET_GTK_namespace_manager_namespace_details_apply_button_clicked_cb (
-    GtkButton *button, gpointer user_data)
-{
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = user_data;
-  GtkTreeIter iter, known_iter;
-  gint i;
-  gint row_count;
-  struct GNUNET_CONTAINER_MetaData *md, *old_md;
-  char *plugin_name;
-  int type;
-  char *type_name;
-  int format;
-  char *data_mime_type;
-  char *data;
-
-  row_count = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (
-      ctx->ns_details_store), NULL);
-  if ((row_count > 0) && (! gtk_tree_model_get_iter_first (
-      GTK_TREE_MODEL (ctx->ns_details_store), &iter)))
+  tree_path = gtk_tree_path_new_from_string (path);
+  if (NULL == tree_path)
   {
-    /* This should not happen */
+    GNUNET_break (0);
     return;
   }
-
-  if (FALSE == gtk_tree_selection_get_selected (ctx->known_ns_sel, NULL,
-      &known_iter))
+  if (! gtk_tree_model_get_iter (GTK_TREE_MODEL (ac->metadata),
+                                &iter, tree_path))
   {
-    /* This should not happen */
+    GNUNET_break (0);
+    gtk_tree_path_free (tree_path);
     return;
   }
-
-  md = GNUNET_CONTAINER_meta_data_create ();
-
-  for (i = 0; i < row_count; i++)
-  {
-    gtk_tree_model_get (GTK_TREE_MODEL (ctx->ns_details_store), &iter,
-        GNUNET_GTK_NAMESPACE_DETAILS_PLUGIN_NAME_COLUMN, &plugin_name,
-        GNUNET_GTK_NAMESPACE_DETAILS_TYPE_BIN_COLUMN, &type,
-        GNUNET_GTK_NAMESPACE_DETAILS_TYPE_COLUMN, &type_name,
-        GNUNET_GTK_NAMESPACE_DETAILS_FORMAT_COLUMN, &format,
-        GNUNET_GTK_NAMESPACE_DETAILS_DATA_MIME_COLUMN, &data_mime_type,
-        GNUNET_GTK_NAMESPACE_DETAILS_VALUE_COLUMN, &data,
-        -1);
-    GNUNET_CONTAINER_meta_data_insert (md, plugin_name,
-        type, format, data_mime_type, data, strlen (data) + 1);
-    g_free (plugin_name);
-    g_free (type_name);
-    g_free (data_mime_type);
-    g_free (data);
-    if (TRUE != gtk_tree_model_iter_next (GTK_TREE_MODEL (
-      ctx->ns_details_store), &iter))
-      break;
-  }
-  GNUNET_CONTAINER_meta_data_merge (md,
-      (const struct GNUNET_CONTAINER_MetaData *) ctx->uneditable_md);
-
-  gtk_tree_model_get (GTK_TREE_MODEL (ctx->known_ns_store), &known_iter,
-      GNUNET_GTK_KNOWN_NAMESPACES_METADATA_COLUMN, &old_md,
-      -1);
-  GNUNET_CONTAINER_meta_data_destroy (old_md);
-  gtk_list_store_set (ctx->known_ns_store, &known_iter,
-      GNUNET_GTK_KNOWN_NAMESPACES_METADATA_COLUMN, md,
-      -1);
-  gtk_widget_set_sensitive (ctx->details_apply_button, FALSE);
+  gtk_tree_path_free (tree_path);
+  if ( (NULL != new_text) &&
+       (0 != strlen (new_text)) )
+    gtk_list_store_set (ac->metadata, &iter,
+                       METADATA_MC_VALUE, new_text,
+                       -1);
+  else
+    gtk_list_store_remove (ac->metadata, &iter);
 }
 
 
+/**
+ * User edited the 'value' field for inserting meta data.   Update
+ * sensitivity of the 'add' button accordingly.
+ *
+ * @param editable the widget that was edited
+ * @param user_data the 'struct AdvertiseContext'
+ */
 void
-GNUNET_GTK_namespace_manager_name_text_editing_started_cb (
-    GtkCellRenderer *renderer, GtkCellEditable *editable, gchar *path,
-    gpointer user_data)
+GNUNET_GTK_identity_advertise_metadata_value_entry_changed_cb (GtkEditable 
*editable,
+                                                              gpointer 
user_data)
 {
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = user_data;
+  struct AdvertiseContext *ac = user_data;
+  const char *value;
+  GtkEntry *value_entry;
+  GtkWidget * add_button;
 
-  if (GTK_IS_ENTRY (editable)) 
+  value_entry = GTK_ENTRY (gtk_builder_get_object (ac->builder,
+                                                  
"GNUNET_GTK_identity_advertise_metadata_value_entry"));
+  value = gtk_entry_get_text (value_entry);  
+  add_button = GTK_WIDGET (gtk_builder_get_object (ac->builder, 
+                                                  
"GNUNET_GTK_identity_advertise_metadata_add_button"));
+  if ( (NULL == value) ||
+       (0 == strlen (value)) )
   {
-    GtkTreePath *tree_path;
-    GtkTreeIter iter;
-    char *non_unique_name = NULL;
-    GtkEntry *entry = GTK_ENTRY (editable);
-
-    tree_path = gtk_tree_path_new_from_string (path);
-    if (tree_path != NULL)
-    {
-      if (gtk_tree_model_get_iter (GTK_TREE_MODEL (ctx->known_ns_store),
-          &iter, tree_path))
-      {
-        gtk_tree_model_get (GTK_TREE_MODEL (ctx->known_ns_store), &iter,
-            GNUNET_GTK_KNOWN_NAMESPACES_NON_UNIQUE_NAME_COLUMN, 
&non_unique_name,
-            -1);
-      }
-      gtk_tree_path_free (tree_path);
-    }
-    if (non_unique_name == NULL)
-    {
-      gtk_cell_editable_editing_done (editable);
-      return;
-    }
-    gtk_entry_set_text (entry, non_unique_name);
-    g_free (non_unique_name);
-  }
-}
-
-
-void
-GNUNET_GTK_namespace_manager_name_text_edited_cb (
-    GtkCellRendererText *renderer, gchar *path, gchar *new_text,
-    gpointer user_data)
-{
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = user_data;
-  char *unique_name;
-  GtkTreeRowReference *order_row;
-
-  if (strlen (new_text) == 0)
+    gtk_widget_set_sensitive (add_button,
+                             FALSE);
     return;
-
-  GtkTreePath *tree_path;
-  GtkTreeIter iter;
-  tree_path = gtk_tree_path_new_from_string (path);
-  if (tree_path != NULL)
-  {
-    if (gtk_tree_model_get_iter (GTK_TREE_MODEL (ctx->known_ns_store),
-        &iter, tree_path))
-    {
-      struct GNUNET_CRYPTO_EccPublicKey *nsid;
-      gtk_tree_model_get (GTK_TREE_MODEL (ctx->known_ns_store), &iter,
-          GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_BIN_COLUMN, &nsid,
-          GNUNET_GTK_KNOWN_NAMESPACES_ORDER_ROW_REFERENCE_COLUMN, &order_row,
-          -1);
-
-      unique_name = GNUNET_FS_pseudonym_name_uniquify (
-          GNUNET_FS_GTK_get_configuration (), nsid, new_text, NULL);
-
-      gtk_list_store_set (ctx->known_ns_store, &iter,
-          GNUNET_GTK_KNOWN_NAMESPACES_NON_UNIQUE_NAME_COLUMN, new_text,
-          GNUNET_GTK_KNOWN_NAMESPACES_NAME_COLUMN, unique_name,
-          -1);
-
-      if (order_row != NULL)
-      {
-        GtkTreeIter order_iter;
-        if (GNUNET_OK == GNUNET_GTK_get_iter_from_reference (order_row, 
&order_iter))
-        {
-          gtk_list_store_set (ctx->ns_order_store, &order_iter,
-            GNUNET_GTK_NAMESPACE_ORDER_NAME_COLUMN, unique_name,
-            -1);
-        }
-      }
-
-      GNUNET_free (unique_name);
-    }
-    gtk_tree_path_free (tree_path);
   }
+  gtk_widget_set_sensitive (add_button,
+                           TRUE);
 }
 
 
-void
-GNUNET_GTK_namespace_manager_namespace_details_type_text_edited_cb (
-    GtkCellRendererText *renderer, gchar *path, gchar *new_text,
-    gpointer user_data)
-{
-  /* Changing metadata type is more difficult than simply entering a
-   * new string, see publication editing dialog. So this is disabled
-   * for now. In fact, it's not going to be a Text renderer when it's done.
-   */
-  /*
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = cls;
-  GtkTreeIter iter;
-  if (gtk_tree_model_get_iter (GTK_TREE_MODEL (ctx->ns_details_store),
-      &iter, path))
-  {
-    gtk_list_store_set (ctx->ns_details_store, &iter,
-        GNUNET_GTK_NAMESPACE_DETAILS_TYPE_COLUMN, new_text,
-        -1);
-  }
-  */
-}
-
-
-void
-GNUNET_GTK_namespace_manager_namespace_details_value_text_edited_cb (
-    GtkCellRendererText *renderer, gchar *path, gchar *new_text,
-    gpointer user_data)
-{
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = user_data;
-  GtkTreePath *tree_path;
-  GtkTreeIter iter;
-  tree_path = gtk_tree_path_new_from_string (path);
-  if (tree_path != NULL)
-  {
-    if (gtk_tree_model_get_iter (GTK_TREE_MODEL (ctx->ns_details_store),
-        &iter, tree_path))
-    {
-      char *old_text;
-      gtk_tree_model_get (GTK_TREE_MODEL (ctx->ns_details_store), &iter,
-          GNUNET_GTK_NAMESPACE_DETAILS_VALUE_COLUMN, &old_text,
-          -1);
-      if (strcmp (old_text, new_text) != 0)
-      {
-        gtk_list_store_set (ctx->ns_details_store, &iter,
-            GNUNET_GTK_NAMESPACE_DETAILS_VALUE_COLUMN, new_text,
-            -1);
-        gtk_widget_set_sensitive (ctx->details_apply_button, TRUE);
-      }
-      g_free (old_text);
-    }
-    gtk_tree_path_free (tree_path);
-  }
-}
-
-
 /**
- * Iterator over all known pseudonyms.
- * Populate "known ns" and "ns order" lists.
+ * User clicked the 'add' button, get the type and value and update
+ * the metadata model.
  *
- * @param cls closure
- * @param pseudonym hash code of public key of pseudonym
- * @param md meta data known about the pseudonym
- * @param rating the local rating of the pseudonym
- * @return GNUNET_OK to continue iteration, GNUNET_SYSERR to abort
+ * @param button the 'add' button
+ * @param user_data the 'struct AdvertiseContext'
  */
-static int
-populate_known_ns_list (void *cls, 
-                       const struct GNUNET_CRYPTO_EccPublicKey *pseudonym,
-                       const char *name, const char *unique_name,
-                       const struct GNUNET_CONTAINER_MetaData *md, 
-                       int rating)
+void
+GNUNET_GTK_identity_advertise_metadata_add_button_clicked_cb (GtkButton * 
button,
+                                                             gpointer 
user_data)
 {
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = cls;
-  struct GNUNET_CRYPTO_EccPublicKey *nsid;
-  char buf[1024];
-  char *ret;
-  GtkTreeIter known_iter, order_iter;
-  struct GNUNET_CONTAINER_MetaData *md_copy;
-  char *non_null_name, *non_null_unique_name;
+  struct AdvertiseContext *ac = user_data;
+  GtkTreeIter iter;
+  guint type;
+  const char *type_as_string;
+  const char *value;
+  GtkEntry *value_entry;
+  GtkComboBox *type_box;
 
-  nsid = GNUNET_new (struct GNUNET_CRYPTO_EccPublicKey);
-  *nsid = *pseudonym;
-
-  ret = GNUNET_STRINGS_data_to_string (nsid,
-                                      sizeof (struct 
GNUNET_CRYPTO_EccPublicKey),
-                                      buf,
-                                      sizeof (buf));
-  GNUNET_assert (NULL != ret);
-  ret[0] = '\0';
-
-  GNUNET_FS_pseudonym_get_info (GNUNET_FS_GTK_get_configuration (),
-                             nsid, NULL, NULL, &non_null_name, NULL);
-  non_null_unique_name = GNUNET_FS_pseudonym_name_uniquify (
-      GNUNET_FS_GTK_get_configuration (), nsid, non_null_name, NULL);
-
-  md_copy = GNUNET_CONTAINER_meta_data_duplicate (md);
-
-  gtk_list_store_insert_with_values (ctx->known_ns_store, &known_iter, 
G_MAXINT,
-      GNUNET_GTK_KNOWN_NAMESPACES_IS_MINE_COLUMN, FALSE,
-      GNUNET_GTK_KNOWN_NAMESPACES_RANK_COLUMN, rating,
-      GNUNET_GTK_KNOWN_NAMESPACES_NAME_COLUMN, non_null_unique_name,
-      GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_COLUMN, buf,
-      GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_BIN_COLUMN, nsid,
-      GNUNET_GTK_KNOWN_NAMESPACES_ORDER_ROW_REFERENCE_COLUMN, NULL,
-      GNUNET_GTK_KNOWN_NAMESPACES_METADATA_COLUMN, md_copy,
-      GNUNET_GTK_KNOWN_NAMESPACES_NON_UNIQUE_NAME_COLUMN, non_null_name,
-      -1);
-
-  if (rating >= 0)
+  type_box = GTK_COMBO_BOX (gtk_builder_get_object (ac->builder,
+                                                   
"GNUNET_GTK_identity_advertise_metadata_type_combobox"));
+  if (! gtk_combo_box_get_active_iter (type_box,
+                                      &iter))
   {
-    GtkTreeRowReference *rr = GNUNET_GTK_get_reference_from_iter 
(GTK_TREE_MODEL (
-        ctx->known_ns_store), &known_iter);
-    gtk_list_store_insert_with_values (ctx->ns_order_store, &order_iter, 
G_MAXINT,
-        GNUNET_GTK_NAMESPACE_ORDER_RANK_COLUMN, rating,
-        GNUNET_GTK_NAMESPACE_ORDER_NAME_COLUMN, non_null_unique_name,
-        GNUNET_GTK_NAMESPACE_ORDER_IDENTIFIER_COLUMN, buf,
-        GNUNET_GTK_NAMESPACE_ORDER_IDENTIFIER_BIN_COLUMN, nsid,
-        GNUNET_GTK_NAMESPACE_ORDER_KNOWN_ROW_REFERENCE_COLUMN, rr,
-        -1);
-    rr = GNUNET_GTK_get_reference_from_iter (GTK_TREE_MODEL 
(ctx->ns_order_store),
-        &order_iter);
-    gtk_list_store_set (ctx->known_ns_store, &known_iter,
-      GNUNET_GTK_KNOWN_NAMESPACES_ORDER_ROW_REFERENCE_COLUMN, rr, -1);
-  }
-  GNUNET_free (non_null_name);
-  GNUNET_free (non_null_unique_name);
-
-  return GNUNET_OK;
-}
-
-
-static void
-apply_known_ns_changes (struct GNUNET_GTK_NamespaceManagerContext *ctx)
-{
-  GtkTreeIter iter;
-  gint i;
-  gint row_count;
-  struct GNUNET_CRYPTO_EccPublicKey *nsid;
-  char *name;
-  int32_t rank;
-  struct GNUNET_CONTAINER_MetaData *md;
-
-  row_count = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (
-      ctx->known_ns_store), NULL);
-  if (! gtk_tree_model_get_iter_first (GTK_TREE_MODEL (
-      ctx->known_ns_store), &iter))
+    GNUNET_break (0);
     return;
-
-  for (i = 0; i < row_count; i++)
-  {
-    gtk_tree_model_get (GTK_TREE_MODEL (ctx->known_ns_store), &iter,
-        GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_BIN_COLUMN, &nsid,
-        GNUNET_GTK_KNOWN_NAMESPACES_NON_UNIQUE_NAME_COLUMN, &name,
-        GNUNET_GTK_KNOWN_NAMESPACES_METADATA_COLUMN, &md,
-        GNUNET_GTK_KNOWN_NAMESPACES_RANK_COLUMN, &rank,
-        -1);
-    GNUNET_FS_pseudonym_set_info (GNUNET_FS_GTK_get_configuration (),
-        nsid, name, md, rank);
-    g_free (name);
-    if (TRUE != gtk_tree_model_iter_next (GTK_TREE_MODEL (
-      ctx->known_ns_store), &iter))
-      break;
   }
-#if FIXME_NAMESPACE_REMOVAL
-  while (NULL != ctx->deleted_namespaces)
+  gtk_tree_model_get (GTK_TREE_MODEL (ac->meta_types),
+                     &iter,
+                     METATYPES_MC_TYPE_AS_ENUM, &type,
+                     -1);
+  type_as_string = EXTRACTOR_metatype_to_string (type);
+  value_entry = GTK_ENTRY (gtk_builder_get_object (ac->builder,
+                                                  
"GNUNET_GTK_identity_advertise_metadata_value_entry"));
+  value = gtk_entry_get_text (value_entry);  
+  if ( (NULL == value) ||
+       (0 == strlen (value)) )
   {
-    nsid = ctx->deleted_namespaces->data;
-    if (nsid)
-    {
-      GNUNET_FS_pseudonym_remove (GNUNET_FS_GTK_get_configuration (), nsid);
-      GNUNET_free (nsid);
-    }
-    ctx->deleted_namespaces = g_list_delete_link (ctx->deleted_namespaces, 
ctx->deleted_namespaces);
-  }
-#endif
-}
-
-
-static void
-free_lists_contents (struct GNUNET_GTK_NamespaceManagerContext *ctx)
-{
-  GtkTreeIter iter;
-  gint i;
-  gint row_count;
-  struct GNUNET_CRYPTO_EccPublicKey *nsid;
-  GtkTreeRowReference *order_row;
-  struct GNUNET_CONTAINER_MetaData *md;
-
-  row_count = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (
-      ctx->known_ns_store), NULL);
-  if (! gtk_tree_model_get_iter_first (GTK_TREE_MODEL (
-      ctx->known_ns_store), &iter))
+    GNUNET_break (0);
     return;
-
-  for (i = 0; i < row_count; i++)
-  {
-    gtk_tree_model_get (GTK_TREE_MODEL (ctx->known_ns_store), &iter,
-        GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_BIN_COLUMN, &nsid,
-        GNUNET_GTK_KNOWN_NAMESPACES_ORDER_ROW_REFERENCE_COLUMN, &order_row,
-        GNUNET_GTK_KNOWN_NAMESPACES_METADATA_COLUMN, &md,
-        -1);
-    /* Make sure the store does not contain references to freed objects */
-    gtk_list_store_set (ctx->known_ns_store, &iter,
-        GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_BIN_COLUMN, NULL,
-        GNUNET_GTK_KNOWN_NAMESPACES_ORDER_ROW_REFERENCE_COLUMN, NULL,
-        GNUNET_GTK_KNOWN_NAMESPACES_METADATA_COLUMN, NULL,
-        -1);
-    if (order_row != NULL)
-    {
-      GtkTreeIter order_iter;
-      if (GNUNET_OK == GNUNET_GTK_get_iter_from_reference (order_row, 
&order_iter))
-      {
-        GtkTreeRowReference *known_row;
-        gtk_tree_model_get (GTK_TREE_MODEL (ctx->ns_order_store), &order_iter,
-            GNUNET_GTK_NAMESPACE_ORDER_KNOWN_ROW_REFERENCE_COLUMN, &known_row,
-            -1);
-        if (known_row != NULL)
-          gtk_tree_row_reference_free (known_row);
-      }
-      gtk_tree_row_reference_free (order_row);
-    }
-    GNUNET_CONTAINER_meta_data_destroy (md);
-    GNUNET_free (nsid);
-    if (TRUE != gtk_tree_model_iter_next (GTK_TREE_MODEL (
-      ctx->known_ns_store), &iter))
-      break;
   }
-
-  gtk_list_store_clear (ctx->ns_order_store);
-  gtk_list_store_clear (ctx->known_ns_store);
-  gtk_list_store_clear (ctx->ns_details_store);
-  if (ctx->uneditable_md != NULL)
-    GNUNET_CONTAINER_meta_data_destroy (ctx->uneditable_md);
+  gtk_list_store_insert_with_values (ac->metadata,
+                                     &iter, 0,
+                                     METADATA_MC_TYPE_AS_ENUM, type,
+                                     METADATA_MC_TYPE_AS_STRING, 
type_as_string,
+                                     METADATA_MC_VALUE, value,
+                                     -1);
+  gtk_entry_set_text (value_entry, "");
 }
 
 
-void
-GNUNET_GTK_namespace_manager_dialog_response_cb (GtkDialog *dialog,
-    gint response_id, gpointer user_data)
-{
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = user_data;
-  switch (response_id)
-  {
-  case GTK_RESPONSE_APPLY:
-  case GTK_RESPONSE_OK:
-    apply_known_ns_changes (ctx);
-    GNUNET_GTK_main_window_refresh_ns_list (ctx->main_ctx);
-    break;
-  default:
-    break;
-  }
-  switch (response_id)
-  {
-  case GTK_RESPONSE_APPLY:
-    break;
-  case GTK_RESPONSE_OK:
-  case GTK_RESPONSE_CANCEL:
-  default:
-    free_lists_contents (ctx);
-    gtk_widget_destroy (GTK_WIDGET (ctx->namespace_manager));
-    GNUNET_free (ctx);
-  }
-}
-
-
-static gboolean
-mark_as_mine (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter,
-    gpointer data)
-{
-  const struct GNUNET_CRYPTO_EccPublicKey *mine_id = data;
-  const struct GNUNET_CRYPTO_EccPublicKey *ns_id;
-
-  gtk_tree_model_get (model, iter,
-      GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_BIN_COLUMN, &ns_id, -1);
-
-  if (memcmp (ns_id, mine_id, sizeof (struct GNUNET_CRYPTO_EccPublicKey)) != 0)
-    return FALSE;
-
-  gtk_list_store_set (GTK_LIST_STORE (model), iter,
-      GNUNET_GTK_KNOWN_NAMESPACES_IS_MINE_COLUMN, TRUE, -1);
-  return TRUE;
-}
-
-
 /**
- * Callback with information about local (!) namespaces.
- * Contains the names of the local namespace and the global
- * ID.
+ * Run the dialog for advertising a namespace.
  *
- * @param cls closure
- * @param name human-readable identifier of the namespace
- * @param id hash identifier for the namespace
+ * @param priv private key of the namespace to advertise
  */
-static void
-mark_namespaces_as_mine (void *cls, const char *name,
-                        const struct GNUNET_CRYPTO_EccPublicKey *id)
+void
+GIG_advertise_dialog_start_ (const struct GNUNET_CRYPTO_EccPrivateKey *priv)
 {
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = cls;
-
-  gtk_tree_model_foreach (GTK_TREE_MODEL (ctx->known_ns_store), mark_as_mine,
-      (gpointer) id);
-}
-
-
-/**
- * Type of a function that libextractor calls for each
- * meta data item found.
- *
- * @param cls closure (user-defined)
- * @param plugin_name name of the plugin that produced this value;
- *        special values can be used (i.e. '&lt;zlib&gt;' for zlib being
- *        used in the main libextractor library and yielding
- *        meta data).
- * @param type libextractor-type describing the meta data
- * @param format basic format information about data 
- * @param data_mime_type mime-type of data (not of the original file);
- *        can be NULL (if mime-type is not known)
- * @param data actual meta-data found
- * @param data_len number of bytes in data
- * @return 0 to continue extracting, 1 to abort
- */ 
-static int
-populate_details_list (void *cls, const char *plugin_name,
-    enum EXTRACTOR_MetaType type, enum EXTRACTOR_MetaFormat format,
-    const char *data_mime_type, const char *data, size_t data_len)
-{
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = cls;
-  const char *type_name;
-  char *data_utf8;
-
-  if (format == EXTRACTOR_METAFORMAT_UTF8 ||
-      format == EXTRACTOR_METAFORMAT_C_STRING)
-  {
-    type_name = EXTRACTOR_metatype_to_string (type);
-    /* TODO: translate type_name using dgettext? */
-    data_utf8 = GNUNET_FS_GTK_dubious_meta_to_utf8 (format, data, data_len);
-    if (data != NULL)
-    {
-      gtk_list_store_insert_with_values (ctx->ns_details_store, NULL, G_MAXINT,
-          GNUNET_GTK_NAMESPACE_DETAILS_PLUGIN_NAME_COLUMN, plugin_name,
-          GNUNET_GTK_NAMESPACE_DETAILS_TYPE_BIN_COLUMN, type,
-          GNUNET_GTK_NAMESPACE_DETAILS_TYPE_COLUMN, type_name,
-          GNUNET_GTK_NAMESPACE_DETAILS_FORMAT_COLUMN,
-          EXTRACTOR_METAFORMAT_UTF8,
-          GNUNET_GTK_NAMESPACE_DETAILS_DATA_MIME_COLUMN, data_mime_type,
-          GNUNET_GTK_NAMESPACE_DETAILS_VALUE_COLUMN, data_utf8,
-          -1);
-      GNUNET_free (data_utf8);
-      return 0;
-    }
-  }
-  GNUNET_CONTAINER_meta_data_insert (ctx->uneditable_md,
-      plugin_name, type, format, data_mime_type, data, data_len);
-  return 0;
-}
-
-
-static void
-ns_details_selection_changed (GtkTreeSelection *treeselection,
-    gpointer user_data)
-{
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = user_data;
+  struct AdvertiseContext *ac;
+  gint i;
   GtkTreeIter iter;
 
-  if (FALSE == gtk_tree_selection_get_selected (ctx->ns_details_sel, NULL, 
&iter))
+  ac = GNUNET_new (struct AdvertiseContext);
+  ac->priv = *priv;
+  ac->builder =
+    GNUNET_GTK_get_new_builder ("gnunet_identity_gtk_advertise_dialog.glade",
+                               ac);
+  if (NULL == ac->builder)
   {
-    gtk_widget_set_sensitive (ctx->details_delete_button, FALSE);
+    GNUNET_break (0);
+    GNUNET_free (ac);
     return;
   }
-
-  gtk_widget_set_sensitive (ctx->details_delete_button, TRUE);
-}
-
-
-static void
-known_ns_selection_changed (GtkTreeSelection *treeselection,
-    gpointer user_data)
-{
-  struct GNUNET_GTK_NamespaceManagerContext *ctx = user_data;
-  GtkTreeIter iter;
-  const struct GNUNET_CONTAINER_MetaData *md;
-
-  if (FALSE == gtk_tree_selection_get_selected (ctx->known_ns_sel, NULL, 
&iter))
-    return;
-
-  gtk_tree_model_get (GTK_TREE_MODEL (ctx->known_ns_store), &iter,
-      GNUNET_GTK_KNOWN_NAMESPACES_METADATA_COLUMN, &md,
-      -1);
-  if (ctx->uneditable_md != NULL)
-    GNUNET_CONTAINER_meta_data_clear (ctx->uneditable_md);
-  else
-    ctx->uneditable_md = GNUNET_CONTAINER_meta_data_create ();
-  gtk_list_store_clear (ctx->ns_details_store);
-  gtk_widget_set_sensitive (ctx->details_apply_button, FALSE);
-  if (NULL != md)
-    GNUNET_CONTAINER_meta_data_iterate ((const struct 
GNUNET_CONTAINER_MetaData *) md,
-        populate_details_list, ctx);
-  else
-    GNUNET_break (0);
-  gtk_widget_set_sensitive (ctx->details_apply_button, FALSE);
-}
-
-
-GtkWindow *
-GNUNET_GTK_namespace_manager_open (struct GNUNET_GTK_MainWindowContext 
*main_ctx)
-{
-  struct GNUNET_GTK_NamespaceManagerContext *ctx;
-
-  ctx = GNUNET_new (struct GNUNET_GTK_NamespaceManagerContext);
-  ctx->builder = GNUNET_GTK_get_new_builder 
("gnunet_fs_gtk_namespace_manager.glade", ctx);
-  if (ctx->builder == NULL)
+  ac->dialog = GTK_WIDGET (gtk_builder_get_object
+                          (ac->builder, 
"GNUNET_GTK_identity_advertise_dialog"));
+  ac->keywords = GTK_LIST_STORE (gtk_builder_get_object
+                               (ac->builder, 
"GNUNET_GTK_identity_advertise_keywords_liststore"));
+  ac->metadata = GTK_LIST_STORE (gtk_builder_get_object
+                            (ac->builder, 
"GNUNET_GTK_identity_advertise_metadata_liststore"));
+  ac->meta_types = GTK_LIST_STORE (gtk_builder_get_object
+                                  (ac->builder, 
"GNUNET_GTK_identity_metadata_types_liststore"));
+  for (i = 0; EXTRACTOR_METATYPE_RESERVED != types[i]; i++)  
   {
-    GNUNET_break (0);
-    GNUNET_free (ctx);
-    return NULL;
+    gtk_list_store_insert_with_values (ac->meta_types,
+                                      &iter, G_MAXINT, 
+                                      METATYPES_MC_TYPE_AS_STRING,
+                                      EXTRACTOR_metatype_to_string (types[i]),
+                                      METATYPES_MC_TYPE_AS_ENUM,
+                                      types[i],
+                                      -1);
+    if (0 == i)
+      gtk_combo_box_set_active_iter (GTK_COMBO_BOX
+                                    (gtk_builder_get_object
+                                     (ac->builder,
+                                      
"GNUNET_GTK_identity_advertise_metadata_type_combobox")),
+                                    &iter);
   }
-
-  ctx->main_ctx = main_ctx;
-
-  /* initialize widget references */
-  ctx->known_ns = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
-      "GNUNET_GTK_namespace_manager_known_treeview"));
-  ctx->ns_order = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
-      "GNUNET_GTK_namespace_manager_namespace_order_treeview"));
-  ctx->ns_details = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
-      "GNUNET_GTK_namespace_manager_namespace_details_treeview"));
-  ctx->known_ns_sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (
-      ctx->known_ns));
-  ctx->ns_order_sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (
-      ctx->ns_order));
-  ctx->ns_details_sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (
-      ctx->ns_details));
-  ctx->ns_order_store = GTK_LIST_STORE (gtk_tree_view_get_model (
-      GTK_TREE_VIEW (ctx->ns_order)));
-  ctx->known_ns_store = GTK_LIST_STORE (gtk_tree_view_get_model (
-      GTK_TREE_VIEW (ctx->known_ns)));
-  ctx->ns_details_store = GTK_LIST_STORE (gtk_tree_view_get_model (
-      GTK_TREE_VIEW (ctx->ns_details)));
-  ctx->namespace_manager = GTK_WINDOW (gtk_builder_get_object (
-      ctx->builder, "GNUNET_GTK_namespace_manager_dialog"));
-  ctx->details_apply_button = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
-      "GNUNET_GTK_namespace_manager_namespace_details_apply_button"));
-  ctx->details_delete_button = GTK_WIDGET (gtk_builder_get_object 
(ctx->builder,
-      "GNUNET_GTK_namespace_manager_namespace_details_delete_button"));
-  ctx->order_rank = gtk_tree_view_get_column (GTK_TREE_VIEW (ctx->ns_order), 
0);
-  ctx->order_name = gtk_tree_view_get_column (GTK_TREE_VIEW (ctx->ns_order), 
1);
-  ctx->order_id = gtk_tree_view_get_column (GTK_TREE_VIEW (ctx->ns_order), 2);
-
-  /* connect signals; FIXME-GTK3: these could be connected with (modern) Glade 
*/
-  g_signal_connect (G_OBJECT (ctx->known_ns_sel), "changed",
-      G_CALLBACK (known_ns_selection_changed), ctx);
-  g_signal_connect (G_OBJECT (ctx->ns_details_sel), "changed",
-      G_CALLBACK (ns_details_selection_changed), ctx);
-
-  /* populate namespace model */
-  (void) GNUNET_FS_pseudonym_list_all (GNUNET_FS_GTK_get_configuration (),
-      populate_known_ns_list, ctx);
-
-#if FIXME_USE_IDENTITY_SERVICE
-  /* mark our own namespaces as such */
-  GNUNET_FS_namespace_list (GNUNET_FS_GTK_get_fs_handle (),
-                           &mark_namespaces_as_mine, ctx);
-#endif
-
-  /* sort namespace order list by rank (initially) */
-  sort_order_list (ctx, GNUNET_GTK_NAMESPACE_ORDER_RANK_COLUMN);
-
-  gtk_widget_set_sensitive (ctx->details_apply_button, FALSE);
-
-  /* show dialog */
-  gtk_window_present (ctx->namespace_manager);
-  return ctx->namespace_manager;
+  gtk_list_store_insert_with_values (ac->keywords,
+                                    &iter, G_MAXINT,
+                                    KEYWORDS_MC_KEYWORD, NEW_KEYWORD_TEXT,
+                                    -1);
+  gtk_window_present (GTK_WINDOW (ac->dialog));
 }
 
 
-static void
-ns_manager_deleted (GtkWindow *object, gpointer user_data)
-{
-  struct GNUNET_GTK_MainWindowContext *ctx = user_data;
-  g_signal_handler_disconnect (object, ctx->ns_manager_delete_handler_id);
-  g_object_unref (G_OBJECT (ctx->ns_manager));
-  ctx->ns_manager = NULL;
-  ctx->ns_manager_delete_handler_id = 0;
-  return;
-}
-
-
-void
-GNUNET_GTK_open_ns_manager (struct GNUNET_GTK_MainWindowContext *ctx)
-{
-  if (ctx->ns_manager != NULL)
-  {
-    gtk_window_present (ctx->ns_manager);
-    return;
-  }
-
-  ctx->ns_manager = GNUNET_GTK_namespace_manager_open (ctx);
-  if (ctx->ns_manager == NULL)
-    return;
-
-  g_object_ref (G_OBJECT (ctx->ns_manager));
-  ctx->ns_manager_delete_handler_id = g_signal_connect (G_OBJECT 
(ctx->ns_manager), "destroy", G_CALLBACK (ns_manager_deleted), ctx);
-}
-
-
-void
-GNUNET_GTK_main_menu_file_manage_pseudonyms_activate_cb (GtkMenuItem *menuitem,
-    gpointer user_data)
-{
-  GNUNET_GTK_open_ns_manager (user_data);
-}
-
-
-void
-namespace_selector_manage_namespaces_button_clicked_cb (GtkButton *button, 
gpointer user_data)
-{
-  GNUNET_GTK_open_ns_manager (user_data);
-}
-#endif
-
 /* end of gnunet-identity-gtk_advertise.c */




reply via email to

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