diff options
Diffstat (limited to 'src/identity/gnunet-identity-gtk_namespace_manager.c')
-rw-r--r-- | src/identity/gnunet-identity-gtk_namespace_manager.c | 300 |
1 files changed, 253 insertions, 47 deletions
diff --git a/src/identity/gnunet-identity-gtk_namespace_manager.c b/src/identity/gnunet-identity-gtk_namespace_manager.c index ca4a14c5..788c18a3 100644 --- a/src/identity/gnunet-identity-gtk_namespace_manager.c +++ b/src/identity/gnunet-identity-gtk_namespace_manager.c | |||
@@ -19,60 +19,266 @@ | |||
19 | */ | 19 | */ |
20 | 20 | ||
21 | /** | 21 | /** |
22 | * @file src/fs/gnunet-fs-gtk_namespace_manager.c | 22 | * @file src/identity/gnunet-identity-gtk_namespace_manager.c |
23 | * @author LRN | 23 | * @author LRN |
24 | * @author Christian Grothoff | ||
24 | */ | 25 | */ |
25 | #include "gnunet-fs-gtk_common.h" | 26 | #include "gnunet-identity-gtk_namespace_manager.h" |
26 | #include "gnunet-fs-gtk.h" | ||
27 | #include <gnunet/gnunet_util_lib.h> | ||
28 | #include <gnunet/gnunet_fs_service.h> | 27 | #include <gnunet/gnunet_fs_service.h> |
29 | 28 | ||
30 | struct GNUNET_GTK_NamespaceManagerContext | 29 | /** |
30 | * Types of metadata we offer for namespaces. | ||
31 | */ | ||
32 | static gint types[] = { | ||
33 | EXTRACTOR_METATYPE_TITLE, | ||
34 | EXTRACTOR_METATYPE_KEYWORDS, | ||
35 | EXTRACTOR_METATYPE_SUBJECT, | ||
36 | EXTRACTOR_METATYPE_DESCRIPTION, | ||
37 | EXTRACTOR_METATYPE_COMMENT, | ||
38 | EXTRACTOR_METATYPE_COPYRIGHT, | ||
39 | EXTRACTOR_METATYPE_URI, | ||
40 | EXTRACTOR_METATYPE_CREATOR, | ||
41 | EXTRACTOR_METATYPE_CREATION_DATE, | ||
42 | EXTRACTOR_METATYPE_RESERVED | ||
43 | }; | ||
44 | |||
45 | |||
46 | /** | ||
47 | * Columns in the metadata list store. | ||
48 | */ | ||
49 | enum METADATA_ModelColumns | ||
50 | { | ||
51 | /** | ||
52 | * A guint | ||
53 | */ | ||
54 | METADATA_MC_TYPE_AS_ENUM = 0, | ||
55 | |||
56 | /** | ||
57 | * A gchararray | ||
58 | */ | ||
59 | METADATA_MC_TYPE_AS_STRING = 1, | ||
60 | |||
61 | /** | ||
62 | * A gchararray | ||
63 | */ | ||
64 | METADATA_MC_VALUE = 2 | ||
65 | |||
66 | }; | ||
67 | |||
68 | |||
69 | /** | ||
70 | * Columns in the keyword list tree store. | ||
71 | */ | ||
72 | enum KEYWORDS_ModelColumns | ||
73 | { | ||
74 | |||
75 | /** | ||
76 | * A gchararray | ||
77 | */ | ||
78 | KEYWORDS_MC_KEYWORD = 0 | ||
79 | |||
80 | }; | ||
81 | |||
82 | |||
83 | /** | ||
84 | * Columns in the meta types list tree store. | ||
85 | */ | ||
86 | enum METATYPES_ModelColumns | ||
87 | { | ||
88 | |||
89 | /** | ||
90 | * A gchararray | ||
91 | */ | ||
92 | METATYPES_MC_TYPE_AS_STRING = 0, | ||
93 | |||
94 | /** | ||
95 | * A guint | ||
96 | */ | ||
97 | METATYPES_MC_TYPE_AS_ENUM = 1 | ||
98 | |||
99 | }; | ||
100 | |||
101 | |||
102 | /** | ||
103 | * Context for advertisement operations. | ||
104 | */ | ||
105 | struct AdvertiseContext | ||
31 | { | 106 | { |
107 | /** | ||
108 | * Builder for accessing objects in the dialog. | ||
109 | */ | ||
32 | GtkBuilder *builder; | 110 | GtkBuilder *builder; |
33 | GtkWidget *known_ns; | 111 | |
34 | GtkWidget *ns_order; | 112 | /** |
35 | GtkWidget *ns_details; | 113 | * Private key of the namespace we will be advertising. |
36 | GtkTreeSelection *known_ns_sel; | 114 | */ |
37 | GtkTreeSelection *ns_order_sel; | 115 | struct GNUNET_CRYPTO_EccPrivateKey priv; |
38 | GtkTreeSelection *ns_details_sel; | 116 | |
39 | GtkListStore *ns_order_store; | 117 | /** |
40 | GtkListStore *known_ns_store; | 118 | * Main dialog object. |
41 | GtkListStore *ns_details_store; | 119 | */ |
42 | GtkWindow *namespace_manager; | 120 | GtkWidget *dialog; |
43 | GtkTreeViewColumn *order_rank; | 121 | |
44 | GtkTreeViewColumn *order_name; | 122 | /** |
45 | GtkTreeViewColumn *order_id; | 123 | * List of keywords to advertise under. |
46 | GtkWidget *details_apply_button; | 124 | */ |
47 | GtkWidget *details_delete_button; | 125 | GtkListStore *keywords; |
48 | int sort_direction; | 126 | |
49 | GList *deleted_namespaces; | 127 | /** |
50 | struct GNUNET_CONTAINER_MetaData *uneditable_md; | 128 | * Metadata to include in the advertisement. |
51 | struct GNUNET_GTK_MainWindowContext *main_ctx; | 129 | */ |
130 | GtkListStore *metadata; | ||
131 | |||
132 | /** | ||
133 | * Model with the meta types. | ||
134 | */ | ||
135 | GtkListStore *meta_types; | ||
136 | |||
52 | }; | 137 | }; |
53 | 138 | ||
54 | #define GNUNET_GTK_KNOWN_NAMESPACES_IS_MINE_COLUMN 0 | ||
55 | #define GNUNET_GTK_KNOWN_NAMESPACES_RANK_COLUMN 1 | ||
56 | #define GNUNET_GTK_KNOWN_NAMESPACES_NAME_COLUMN 2 | ||
57 | #define GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_COLUMN 3 | ||
58 | #define GNUNET_GTK_KNOWN_NAMESPACES_IDENTIFIER_BIN_COLUMN 4 | ||
59 | #define GNUNET_GTK_KNOWN_NAMESPACES_ORDER_ROW_REFERENCE_COLUMN 5 | ||
60 | #define GNUNET_GTK_KNOWN_NAMESPACES_METADATA_COLUMN 6 | ||
61 | #define GNUNET_GTK_KNOWN_NAMESPACES_NON_UNIQUE_NAME_COLUMN 7 | ||
62 | |||
63 | #define GNUNET_GTK_NAMESPACE_ORDER_RANK_COLUMN 0 | ||
64 | #define GNUNET_GTK_NAMESPACE_ORDER_NAME_COLUMN 1 | ||
65 | #define GNUNET_GTK_NAMESPACE_ORDER_IDENTIFIER_COLUMN 2 | ||
66 | #define GNUNET_GTK_NAMESPACE_ORDER_IDENTIFIER_BIN_COLUMN 3 | ||
67 | #define GNUNET_GTK_NAMESPACE_ORDER_KNOWN_ROW_REFERENCE_COLUMN 4 | ||
68 | |||
69 | #define GNUNET_GTK_NAMESPACE_DETAILS_PLUGIN_NAME_COLUMN 0 | ||
70 | #define GNUNET_GTK_NAMESPACE_DETAILS_TYPE_BIN_COLUMN 1 | ||
71 | #define GNUNET_GTK_NAMESPACE_DETAILS_TYPE_COLUMN 2 | ||
72 | #define GNUNET_GTK_NAMESPACE_DETAILS_FORMAT_COLUMN 3 | ||
73 | #define GNUNET_GTK_NAMESPACE_DETAILS_DATA_MIME_COLUMN 4 | ||
74 | #define GNUNET_GTK_NAMESPACE_DETAILS_VALUE_COLUMN 5 | ||
75 | 139 | ||
140 | /** | ||
141 | * The user terminated the dialog. Perform the appropriate action. | ||
142 | * | ||
143 | * @param dialog the advertisement dialog | ||
144 | * @param response_id action selected by the user | ||
145 | * @param user_data our 'struct AdvertiseContext' (to be cleaned up) | ||
146 | */ | ||
147 | void | ||
148 | GNUNET_GTK_identity_advertise_dialog_response_cb (GtkDialog *dialog, | ||
149 | gint response_id, | ||
150 | gpointer user_data) | ||
151 | { | ||
152 | struct AdvertiseContext *ac = user_data; | ||
153 | |||
154 | if (GTK_RESPONSE_OK == response_id) | ||
155 | { | ||
156 | GNUNET_break (0); // FIXME: not implemented | ||
157 | } | ||
158 | |||
159 | gtk_widget_destroy (ac->dialog); | ||
160 | g_object_unref (G_OBJECT (ac->builder)); | ||
161 | GNUNET_free (ac); | ||
162 | } | ||
163 | |||
164 | |||
165 | /** | ||
166 | * FIXME: do we need this event? If so, what do we do? | ||
167 | */ | ||
168 | void | ||
169 | GNUNET_GTK_identity_advertise_keywords_column_clicked_cb () | ||
170 | { | ||
171 | GNUNET_break (0); | ||
172 | } | ||
173 | |||
174 | |||
175 | /** | ||
176 | * User edited keywords in the keyword tree view. Update | ||
177 | * the model accordingly. | ||
178 | */ | ||
179 | void | ||
180 | GNUNET_GTK_identity_advertise_keywords_text_edited_cb () | ||
181 | { | ||
182 | GNUNET_break (0); | ||
183 | } | ||
184 | |||
185 | |||
186 | /** | ||
187 | * User pushed a key in the metadata tree view. Check if it was | ||
188 | * "DEL" and if so, remove the selected values. | ||
189 | */ | ||
190 | void | ||
191 | GNUNET_GTK_identity_advertise_metadata_treeview_key_press_event_cb () | ||
192 | { | ||
193 | GNUNET_break (0); | ||
194 | } | ||
195 | |||
196 | |||
197 | /** | ||
198 | * FIXME: how is this event triggered exactly? | ||
199 | */ | ||
200 | void | ||
201 | GNUNET_GTK_identity_advertise_metadata_treeview_delete_event_cb () | ||
202 | { | ||
203 | GNUNET_break (0); | ||
204 | } | ||
205 | |||
206 | |||
207 | /** | ||
208 | * User edited metadata value. Update sensitivity of the 'add' button. | ||
209 | */ | ||
210 | void | ||
211 | GNUNET_GTK_identity_advertise_metadata_value_text_edited_cb () | ||
212 | { | ||
213 | GNUNET_break (0); | ||
214 | } | ||
215 | |||
216 | |||
217 | /** | ||
218 | * User edited metadata type. Not sure we need to do something here... | ||
219 | */ | ||
220 | void | ||
221 | GNUNET_GTK_identity_advertise_metadata_type_text_edited_cb () | ||
222 | { | ||
223 | GNUNET_break (0); | ||
224 | } | ||
225 | |||
226 | |||
227 | /** | ||
228 | * User clicked the 'add' button, get the type and value and update | ||
229 | * the metadata model. | ||
230 | */ | ||
231 | void | ||
232 | GNUNET_GTK_identity_advertise_metadata_add_button_clicked_cb () | ||
233 | { | ||
234 | GNUNET_break (0); | ||
235 | } | ||
236 | |||
237 | |||
238 | /** | ||
239 | * Run the dialog for advertising a namespace. | ||
240 | * | ||
241 | * @param priv private key of the namespace to advertise | ||
242 | */ | ||
243 | void | ||
244 | GNUNET_IDENTITY_advertise_dialog_start_ (const struct GNUNET_CRYPTO_EccPrivateKey *priv) | ||
245 | { | ||
246 | struct AdvertiseContext *ac; | ||
247 | gint i; | ||
248 | GtkTreeIter iter; | ||
249 | |||
250 | ac = GNUNET_new (struct AdvertiseContext); | ||
251 | ac->priv = *priv; | ||
252 | ac->builder = | ||
253 | GNUNET_GTK_get_new_builder ("gnunet_identity_gtk_advertise_dialog.glade", | ||
254 | ac); | ||
255 | if (NULL == ac->builder) | ||
256 | { | ||
257 | GNUNET_break (0); | ||
258 | GNUNET_free (ac); | ||
259 | return; | ||
260 | } | ||
261 | ac->dialog = GTK_WIDGET (gtk_builder_get_object | ||
262 | (ac->builder, "GNUNET_GTK_identity_advertise_dialog")); | ||
263 | ac->keywords = GTK_LIST_STORE (gtk_builder_get_object | ||
264 | (ac->builder, "GNUNET_GTK_identity_advertise_keywords_liststore")); | ||
265 | ac->metadata = GTK_LIST_STORE (gtk_builder_get_object | ||
266 | (ac->builder, "GNUNET_GTK_identity_advertise_metadata_liststore")); | ||
267 | ac->meta_types = GTK_LIST_STORE (gtk_builder_get_object | ||
268 | (ac->builder, "GNUNET_GTK_identity_metadata_types_liststore")); | ||
269 | for (i = 0; EXTRACTOR_METATYPE_RESERVED != types[i]; i++) | ||
270 | gtk_list_store_insert_with_values (ac->meta_types, | ||
271 | &iter, G_MAXINT, | ||
272 | METATYPES_MC_TYPE_AS_STRING, | ||
273 | EXTRACTOR_metatype_to_string (types[i]), | ||
274 | METATYPES_MC_TYPE_AS_ENUM, | ||
275 | types[i], | ||
276 | -1); | ||
277 | gtk_window_present (GTK_WINDOW (ac->dialog)); | ||
278 | } | ||
279 | |||
280 | |||
281 | #if 0 | ||
76 | 282 | ||
77 | static void | 283 | static void |
78 | sort_order_list (struct GNUNET_GTK_NamespaceManagerContext *ctx, | 284 | sort_order_list (struct GNUNET_GTK_NamespaceManagerContext *ctx, |
@@ -1064,6 +1270,6 @@ namespace_selector_manage_namespaces_button_clicked_cb (GtkButton *button, gpoin | |||
1064 | { | 1270 | { |
1065 | GNUNET_GTK_open_ns_manager (user_data); | 1271 | GNUNET_GTK_open_ns_manager (user_data); |
1066 | } | 1272 | } |
1273 | #endif | ||
1067 | 1274 | ||
1068 | 1275 | /* end of gnunet-identity-gtk_namespace_manager.c */ | |
1069 | /* end of gnunet-fs-gtk_namespace_manager.c */ | ||