79
87
G_PARAM_READWRITE));
83
#define SPEC "<ETableSpecification cursor-mode=\"line\" draw-grid=\"true\" selection-mode=\"single\" gettext-domain=\"" GETTEXT_PACKAGE "\">" \
84
"<ETableColumn model_col= \"0\" _title=\"Name\" expansion=\"1.0\" minimum_width=\"18\" resizable=\"true\" cell=\"string\" compare=\"string\"/>" \
85
"<ETableState> <column source=\"0\"/> <grouping> </grouping> </ETableState>" \
86
"</ETableSpecification>"
88
/* For use from libglade. */
89
GtkWidget *gal_define_views_dialog_create_etable(char *name, char *string1, char *string2, int int1, int int2);
92
gal_define_views_dialog_create_etable(char *name, char *string1, char *string2, int int1, int int2)
96
model = gal_define_views_model_new();
97
table = e_table_scrolled_new(model, NULL, SPEC, NULL);
98
g_object_set_data(G_OBJECT (table), "GalDefineViewsDialog::model", model);
102
90
/* Button callbacks */
105
gdvd_button_new_dialog_callback(GtkWidget *widget, int id, GalDefineViewsDialog *dialog)
93
gdvd_button_new_dialog_callback (GtkWidget *widget, int id, GalDefineViewsDialog *dialog)
98
GalViewCollectionItem *item;
109
99
GalViewFactory *factory;
111
102
case GTK_RESPONSE_OK:
103
g_object_get (widget,
114
105
"factory", &factory,
116
108
if (name && factory) {
117
109
g_strchomp(name);
118
110
if (*name != '\0') {
119
view = gal_view_factory_new_view(factory, name);
120
gal_define_views_model_append(GAL_DEFINE_VIEWS_MODEL(dialog->model), view);
121
gal_view_edit(view, GTK_WINDOW (dialog));
122
g_object_unref(view);
111
view = gal_view_factory_new_view (factory, name);
112
gal_view_collection_append(dialog->collection, view);
114
item = dialog->collection->view_data[dialog->collection->view_count-1];
115
gtk_list_store_append (GTK_LIST_STORE (dialog->model), &iter);
116
gtk_list_store_set (GTK_LIST_STORE (dialog->model), &iter,
117
COL_GALVIEW_NAME, name,
118
COL_GALVIEW_DATA, item,
121
gal_view_edit (view, GTK_WINDOW (dialog));
122
g_object_unref (view);
125
g_object_unref(factory);
125
g_object_unref (factory);
129
129
gtk_widget_destroy (widget);
133
133
gdvd_button_new_callback(GtkWidget *widget, GalDefineViewsDialog *dialog)
135
GtkWidget *view_new_dialog = gal_view_new_dialog_new(dialog->collection);
135
GtkWidget *view_new_dialog = gal_view_new_dialog_new (dialog->collection);
136
136
gtk_window_set_transient_for (GTK_WINDOW (view_new_dialog), GTK_WINDOW (dialog));
137
g_signal_connect(view_new_dialog, "response",
138
G_CALLBACK(gdvd_button_new_dialog_callback), dialog);
139
gtk_widget_show(view_new_dialog);
137
g_signal_connect (view_new_dialog, "response",
138
G_CALLBACK (gdvd_button_new_dialog_callback), dialog);
139
gtk_widget_show (view_new_dialog);
143
143
gdvd_button_modify_callback(GtkWidget *widget, GalDefineViewsDialog *dialog)
149
scrolled = glade_xml_get_widget(dialog->gui, "custom-table");
150
etable = e_table_scrolled_get_table(E_TABLE_SCROLLED(scrolled));
151
row = e_table_get_cursor_row (E_TABLE(etable));
155
view = gal_define_views_model_get_view(GAL_DEFINE_VIEWS_MODEL(dialog->model),
157
gal_view_edit(view, GTK_WINDOW (dialog));
146
GalViewCollectionItem *item;
148
if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (dialog->treeview),
151
gtk_tree_model_get (dialog->model, &iter, COL_GALVIEW_DATA, &item, -1);
152
gal_view_edit (item->view, GTK_WINDOW (dialog));
162
157
gdvd_button_delete_callback(GtkWidget *widget, GalDefineViewsDialog *dialog)
168
scrolled = glade_xml_get_widget(dialog->gui, "custom-table");
169
etable = e_table_scrolled_get_table(E_TABLE_SCROLLED(scrolled));
170
row = e_table_get_cursor_row (E_TABLE(etable));
173
gal_define_views_model_delete_view(GAL_DEFINE_VIEWS_MODEL(dialog->model),
162
GtkTreeSelection *selection;
163
GalViewCollectionItem *item;
165
selection = gtk_tree_view_get_selection (dialog->treeview);
167
if (gtk_tree_selection_get_selected (selection,
170
gtk_tree_model_get (dialog->model, &iter, COL_GALVIEW_DATA, &item, -1);
172
for (row=0; row<dialog->collection->view_count; row++) {
173
if (item == dialog->collection->view_data[row]) {
174
gal_view_collection_delete_view (dialog->collection, row);
175
path = gtk_tree_model_get_path (dialog->model, &iter);
176
gtk_list_store_remove (GTK_LIST_STORE (dialog->model), &iter);
178
if (gtk_tree_path_prev (path)) {
179
gtk_tree_model_get_iter (dialog->model, &iter, path);
181
gtk_tree_model_get_iter_first (dialog->model, &iter);
184
gtk_tree_selection_select_iter (selection, &iter);
212
gdvd_cursor_changed_callback (GtkWidget *widget, GalDefineViewsDialog *dialog)
216
GalViewCollectionItem *item;
218
if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (dialog->treeview),
221
gtk_tree_model_get (dialog->model, &iter, COL_GALVIEW_DATA, &item, -1);
223
button = glade_xml_get_widget (dialog->gui, "button-delete");
224
gtk_widget_set_sensitive (GTK_WIDGET (button), !item->built_in);
226
button = glade_xml_get_widget (dialog->gui, "button-modify");
227
gtk_widget_set_sensitive (GTK_WIDGET (button), !item->built_in);
200
232
gdvd_connect_signal(GalDefineViewsDialog *dialog, char *widget_name, char *signal, GCallback handler)
202
234
GtkWidget *widget;
204
widget = glade_xml_get_widget(dialog->gui, widget_name);
236
widget = glade_xml_get_widget (dialog->gui, widget_name);
207
g_signal_connect(widget, signal, handler, dialog);
211
etable_selection_change_forall_cb (int row, GalDefineViewsDialog *dialog)
214
GalViewCollectionItem *item = gal_view_collection_get_view_item (dialog->collection, row);
217
gtk_widget_set_sensitive (glade_xml_get_widget (dialog->gui, "button-delete"),
219
if (GAL_VIEW_GET_CLASS (item->view)->edit)
220
gtk_widget_set_sensitive (glade_xml_get_widget (dialog->gui, "button-modify"),
223
gtk_widget_set_sensitive (glade_xml_get_widget (dialog->gui, "button-modify"),
230
etable_selection_change (ETable *etable, GalDefineViewsDialog *dialog)
232
e_table_selected_row_foreach (etable, (EForeachFunc) etable_selection_change_forall_cb, dialog);
239
g_signal_connect (widget, signal, handler, dialog);
261
g_object_ref(widget);
269
g_object_ref (widget);
262
270
gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
263
gtk_window_set_default_size(GTK_WINDOW(dialog), 360, 270);
264
gtk_container_set_border_width(GTK_CONTAINER(dialog), 6);
265
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), widget, TRUE, TRUE, 0);
271
gtk_window_set_default_size (GTK_WINDOW (dialog), 360, 270);
272
gtk_container_set_border_width (GTK_CONTAINER (dialog), 6);
273
gtk_container_set_border_width (GTK_CONTAINER (widget), 6);
274
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), widget, TRUE, TRUE, 0);
266
275
g_object_unref(widget);
268
277
gtk_dialog_add_buttons (GTK_DIALOG (dialog),
269
278
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
281
dialog->treeview = GTK_TREE_VIEW (glade_xml_get_widget (dialog->gui, "treeview1"));
282
gtk_tree_view_set_reorderable (GTK_TREE_VIEW (dialog->treeview), FALSE);
283
gtk_tree_view_set_headers_visible (dialog->treeview, TRUE);
285
gtk_window_set_policy (GTK_WINDOW (dialog), FALSE, TRUE, FALSE);
272
287
gdvd_connect_signal(dialog, "button-new", "clicked", G_CALLBACK(gdvd_button_new_callback));
273
288
gdvd_connect_signal(dialog, "button-modify", "clicked", G_CALLBACK(gdvd_button_modify_callback));
274
289
gdvd_connect_signal(dialog, "button-delete", "clicked", G_CALLBACK(gdvd_button_delete_callback));
276
291
gdvd_connect_signal(dialog, "button-copy", "clicked", G_CALLBACK(gdvd_button_copy_callback));
279
dialog->model = NULL;
280
etable = glade_xml_get_widget(dialog->gui, "custom-table");
282
dialog->model = g_object_get_data(G_OBJECT (etable), "GalDefineViewsDialog::model");
283
g_object_set(dialog->model,
284
"collection", dialog->collection,
286
g_signal_connect (e_table_scrolled_get_table (E_TABLE_SCROLLED (etable)),
288
G_CALLBACK (etable_selection_change), dialog);
289
gtk_widget_show_all (etable);
292
gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, TRUE, FALSE);
293
gdvd_connect_signal(dialog, "treeview1", "cursor-changed", G_CALLBACK(gdvd_cursor_changed_callback));
294
294
g_signal_connect (dialog, "response", G_CALLBACK (dialog_response), NULL);
296
gtk_widget_show (GTK_WIDGET (dialog));
312
313
gal_define_views_dialog_set_collection(GalDefineViewsDialog *dialog,
313
314
GalViewCollection *collection)
318
GtkCellRenderer *renderer;
315
319
dialog->collection = collection;
317
g_object_set(dialog->model,
318
"collection", collection,
321
store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER);
323
for (i=0; i<collection->view_count; i++) {
324
GalViewCollectionItem *item = collection->view_data[i];
327
/* hide built in views */
328
/*if (item->built_in == 1)
332
title = e_str_without_underscores (item->title);
334
gtk_list_store_append (store, &iter);
335
gtk_list_store_set (store, &iter,
336
COL_GALVIEW_NAME, title,
337
COL_GALVIEW_DATA, item,
343
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
344
COL_GALVIEW_NAME, GTK_SORT_ASCENDING);
346
/* attaching treeview to model */
347
gtk_tree_view_set_model (dialog->treeview, GTK_TREE_MODEL (store));
348
gtk_tree_view_set_search_column (dialog->treeview, COL_GALVIEW_NAME);
350
dialog->model = GTK_TREE_MODEL (store);
352
renderer = gtk_cell_renderer_text_new ();
353
gtk_tree_view_insert_column_with_attributes (dialog->treeview,
354
COL_GALVIEW_NAME, _("Name"),
355
renderer, "text", COL_GALVIEW_NAME,
358
/* set sort column */
359
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (dialog->model),
360
COL_GALVIEW_NAME, GTK_SORT_ASCENDING);
321
362
if (dialog->gui) {
322
363
GtkWidget *widget = glade_xml_get_widget(dialog->gui, "label-views");
323
364
if (widget && GTK_IS_LABEL (widget)) {