Updated Spanish translation
[anjuta-git-plugin.git] / plugins / gtodo / mcategory.c
blob8eb9e3ed2397043674151d2fc881c366e1710e92
1 #include <gtk/gtk.h>
2 #include "main.h"
3 void category_manager_delete_item(GtkWidget *button, GtkWidget *treeview);
4 void category_manager_add_item(GtkWidget *button, GtkWidget *treeview);
5 void category_manager_move_item_up(GtkWidget *button, GtkWidget *treeview);
6 void category_manager_move_item_down(GtkWidget *button, GtkWidget *treeview);
7 void tree_edited_string(GtkCellRendererText *cell, const char *path_string, const char *new_text, GtkWidget *treeview);
9 void category_manager(void)
11 GtkWidget *dialog;
12 GtkWidget *hbox, *vbutbox, *treeview, *sw;
13 GtkListStore *list;
14 GtkTreeViewColumn *column;
15 GtkTreeIter iter;
16 GtkCellRenderer *renderer;
17 GtkWidget *newb, *deleteb, *upb, *downb;
18 int i;
19 gtodo_client_block_changed_callback(cl);
20 dialog = gtk_dialog_new_with_buttons(_("Edit Categories"), GTK_WINDOW(mw.window),
21 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
22 GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL,
23 NULL);
25 hbox = gtk_hbox_new(FALSE,12);
26 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox);
27 gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
29 /* the list */
30 list = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_BOOLEAN);
31 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list));
32 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE);
33 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
35 renderer = gtk_cell_renderer_text_new();
36 column = gtk_tree_view_column_new_with_attributes(_("Category"), renderer, "text" , 0, "editable", 1, NULL);
37 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
39 g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(tree_edited_string), treeview);
41 sw = gtk_scrolled_window_new(NULL, NULL);
42 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
43 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN);
44 gtk_container_add(GTK_CONTAINER(sw), treeview);
46 gtk_box_pack_start(GTK_BOX(hbox), sw, TRUE, TRUE, 0);
48 /* the buttonbox */
49 vbutbox = gtk_vbutton_box_new();
50 gtk_button_box_set_layout(GTK_BUTTON_BOX(vbutbox), GTK_BUTTONBOX_START);
51 gtk_button_box_set_spacing(GTK_BUTTON_BOX(vbutbox), 6);
52 gtk_box_pack_start(GTK_BOX(hbox), vbutbox, FALSE, TRUE, 0);
55 newb = gtk_button_new_from_stock(GTK_STOCK_NEW);
57 deleteb = gtk_button_new_from_stock(GTK_STOCK_DELETE);
59 upb = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
60 downb = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
61 g_signal_connect(G_OBJECT(deleteb), "clicked", G_CALLBACK(category_manager_delete_item), treeview);
62 g_signal_connect(G_OBJECT(newb), "clicked", G_CALLBACK(category_manager_add_item), treeview);
63 g_signal_connect(G_OBJECT(upb), "clicked", G_CALLBACK(category_manager_move_item_up), treeview);
64 g_signal_connect(G_OBJECT(downb), "clicked", G_CALLBACK(category_manager_move_item_down), treeview);
65 gtk_box_pack_start(GTK_BOX(vbutbox), newb, FALSE, FALSE,6);
66 gtk_box_pack_start(GTK_BOX(vbutbox), deleteb, FALSE, FALSE,6);
67 gtk_box_pack_start(GTK_BOX(vbutbox), gtk_hseparator_new(), FALSE, FALSE,6);
68 gtk_box_pack_start(GTK_BOX(vbutbox), upb, FALSE, FALSE,6);
69 gtk_box_pack_start(GTK_BOX(vbutbox), downb, FALSE, FALSE,6);
70 /* add the categorys */
71 for(i=0; i< categorys; i++)
73 gtk_list_store_append(list, &iter);
74 gtk_list_store_set(list, &iter, 0, mw.mitems[i]->date, 1, 1, -1);
77 gtk_widget_set_usize(GTK_WIDGET(dialog), 350, 250);
78 gtk_widget_show_all(dialog);
79 gtk_dialog_run(GTK_DIALOG(dialog));
80 gtk_widget_destroy(dialog);
81 read_categorys();
82 gtodo_client_unblock_changed_callback(cl);
86 void category_manager_move_item_up(GtkWidget *button, GtkWidget *treeview)
88 GtkTreeSelection *selection;
89 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
90 GtkTreePath *patha;
91 GtkTreeIter iter, iterb;
92 gchar *category;
94 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
95 if(!gtk_tree_selection_get_selected(selection, &model, &iter))return;
96 gtk_tree_model_get(model, &iter, 0, &category, -1);
97 patha = gtk_tree_model_get_path(model, &iter);
98 if(!gtk_tree_path_prev(patha)) return;
99 if(!gtk_tree_model_get_iter(model, &iterb, patha))
101 gtk_tree_path_free(patha);
102 return;
104 gtk_tree_path_free(patha);
106 gtodo_client_category_move_up(cl, category);
107 gtk_list_store_swap(GTK_LIST_STORE(model), &iterb, &iter);
110 void category_manager_move_item_down(GtkWidget *button, GtkWidget *treeview)
112 GtkTreeSelection *selection;
113 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
114 GtkTreePath *patha;
115 GtkTreeIter iter, iterb;
116 gchar *category;
118 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
119 if(!gtk_tree_selection_get_selected(selection, &model, &iter))return;
120 gtk_tree_model_get(model, &iter, 0, &category, -1);
121 patha = gtk_tree_model_get_path(model, &iter);
122 gtk_tree_path_next(patha);
123 if(!gtk_tree_model_get_iter(model, &iterb, patha))
125 gtk_tree_path_free(patha);
126 return;
128 gtk_tree_path_free(patha);
130 gtodo_client_category_move_down(cl, category);
131 gtk_list_store_swap(GTK_LIST_STORE(model), &iterb, &iter);
134 void category_manager_delete_item(GtkWidget *button, GtkWidget *treeview)
136 GtkTreeSelection *selection;
137 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
138 GtkTreeIter iter;
139 gchar *tm = NULL, *category;
141 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
142 if(!gtk_tree_selection_get_selected(selection, &model, &iter))return;
143 gtk_tree_model_get(model, &iter, 0, &category, -1);
145 tm = g_strdup_printf(_("When you delete the category \"%s\", all containing items are lost"), category);
146 if(!message_box(tm,_("Delete"),GTK_MESSAGE_WARNING))
148 g_free(tm);
149 return;
151 g_free(tm);
152 gtodo_client_category_remove(cl, category);
153 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
157 void category_manager_add_item(GtkWidget *button, GtkWidget *treeview)
159 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
160 GtkTreeIter iter;
161 GtkTreeSelection *selection;
162 GtkTreePath *path;
163 gchar* new_name = NULL;
165 gtk_list_store_append(GTK_LIST_STORE(model), &iter);
167 /* find the smallest available number to avoid name repetition */
168 int number = 0;
171 number ++;
172 g_free(new_name);
173 new_name = g_strdup_printf(_("<New category (%d)>"), number);
175 while(gtodo_client_category_exists(cl, new_name));
177 /* This is shown in an editable treeview column to show the user
178 he should enter the category name here */
179 gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0, new_name, 1, 1, -1);
180 path = gtk_tree_model_get_path(model, &iter);
181 gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(treeview), path, NULL, FALSE, 0, 0);
182 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
183 gtk_tree_selection_select_iter(selection, &iter);
184 gtk_tree_view_set_cursor(GTK_TREE_VIEW(treeview), path, gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), 0), TRUE);
185 gtk_tree_path_free(path);
186 gtodo_client_category_new(cl, new_name);
187 g_free(new_name);
190 void tree_edited_string(GtkCellRendererText *cell, const char *path_string, const char *new_text, GtkWidget *treeview)
192 GtkTreeIter iter;
193 char *name;
194 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
195 GtkTreePath *path= gtk_tree_path_new_from_string(path_string);
197 gtk_tree_model_get_iter (model, &iter, path);
198 gtk_tree_path_free(path);
199 gtk_tree_model_get(model, &iter, 0, &name, -1);
200 gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0, new_text, -1);
201 gtodo_client_category_edit(cl, name, (gchar *)new_text);
202 read_categorys();