22
21
#define URL_ENTRY_LENGTH 100
23
#define SC_WIN_HEIGHT 350
25
/* predefined GTK_RESPONSE_ are < 0, those ones are app level defined and >= 0 */
23
/* Predefined GTK_RESPONSE_ are < 0, those ones are app level defined and >= 0. */
27
25
GTK_RESPONSE_SELECT_ALL, GTK_RESPONSE_UNSELECT_ALL, GTK_RESPONSE_TOP, GTK_RESPONSE_HOME,
28
26
GTK_RESPONSE_REMOVE, GTK_RESPONSE_ADD, GTK_RESPONSE_SINGLE, GTK_RESPONSE_SELECTION
33
31
static GtkWidget *dialog, *entry_url;
34
32
static FList *flist;
35
static int f_index; /* starting at 0 (row starts at 1) */
33
static int f_index; /* Starting at 0 (row starts at 1) */
36
34
static gchar home_feed[FILE_NAME_MAXLEN + 1];
38
static gint esc_key_pressed(GtkWidget *dialog2, GdkEventKey *event)
40
if (event->keyval == GDK_Escape) {
41
gtk_dialog_response(GTK_DIALOG(dialog2), GTK_RESPONSE_CLOSE);
47
static void force_quit_dialog(GtkWidget *dialog2)
49
gtk_dialog_response(GTK_DIALOG(dialog2), GTK_RESPONSE_CLOSE);
52
/* tree selection callback - update f_index and copy selected url to entry_url (override) */
36
/* Tree selection callback - update f_index and copy selected url to entry_url (override) */
53
37
static gint tree_selection_changed(GtkTreeSelection *selection)
55
39
GtkTreeModel *tree_model = NULL;
73
/* catch double-click on tree view */
57
/* Catch double-click on tree view */
74
58
static gint double_click_on_tree_view(GtkTreeView *tree_view, GtkTreePath *tree_path)
76
60
GtkTreeModel *tree_model = NULL;
176
/* select and scroll to row */
160
/* Select and scroll to row */
177
161
void highlight_and_go_to_row(GtkTreeView *tree_view, GtkTreeSelection *selection, int row)
179
163
GtkTreeModel *tree_model;
227
211
if (IS_FLIST(flist))
228
212
flist = f_list_last(flist);
229
213
if (get_feed_info(resrc->id, rss_feed_title, rss_feed_link, rss_feed_ttl) == OK)
230
/* added url is set unselected */
214
/* Added url is set unselected */
231
215
flist = f_list_add_at_end(flist, resrc->id, rss_feed_title, FALSE);
233
217
flist = f_list_add_at_end(flist, resrc->id, "", FALSE);
241
* open a dialog with a list of urls to choose from and an url entry
225
* Open a dialog with a list of urls to choose from and an url entry.
243
* entry format in url list file:
227
* Entry format in url list file:
244
228
* ["*" (selected) or "-" (unselected) + url [+ ">" + title] + '\n']
246
* entry max length = FILE_NAME_MAXLEN
247
* see also: (UN)SELECTED_URL_CHAR in tickr.h
230
* Entry max length = FILE_NAME_MAXLEN.
231
* See also: (UN)SELECTED_URL_CHAR in tickr.h.
249
233
void get_new_url(Resource *resrc)
252
GtkWidget *vbox, *sc_win, *hbox, *label[3];
236
GtkWidget *sc_win, *hbox;
253
237
GtkWidget *cancel_but, *selectall_but, *unselectall_but;
254
238
GtkWidget *top_but, *home_but, *remove_but, *add_but;
255
239
GtkWidget *single_but, *selection_but, *clear_but;
285
269
selection_but = gtk_dialog_add_button(GTK_DIALOG(dialog), "OK (Selec)", GTK_RESPONSE_SELECTION);
286
270
clear_but = gtk_button_new_with_label("Clear");
288
cancel_but = cancel_but; /* to get rid of one compiler warning */
272
cancel_but = cancel_but; /* To get rid of some annoying compiler warnings */
289
273
selectall_but = selectall_but;
290
274
unselectall_but = unselectall_but;
291
275
top_but = top_but;
294
278
add_but = add_but;
295
279
single_but = single_but;
296
280
selection_but = selection_but;
297
clear_but = clear_but; /* until here */
281
clear_but = clear_but; /* Until here */
299
283
set_tickr_icon_to_dialog(GTK_WINDOW(dialog));
300
284
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ALWAYS);
302
vbox = gtk_vbox_new(FALSE, 0);
303
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox, FALSE, TRUE, 0);
304
gtk_container_set_border_width(GTK_CONTAINER(GTK_BOX(vbox)), 15);
286
sc_win = gtk_scrolled_window_new(NULL, NULL);
287
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sc_win),
288
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
289
gtk_container_set_border_width(GTK_CONTAINER(sc_win), 5);
290
/* Whole window must be visible on netbooks as well */
291
gtk_widget_set_size_request(sc_win, 1000, 450);
292
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), sc_win, TRUE, FALSE, 0);
306
294
str_n_cpy(home_feed, get_params()->homefeed, FILE_NAME_MAXLEN);
307
295
list_store = gtk_list_store_new(N_COLUMNS, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING);
333
321
"text", COLUMN_STRING_URL, NULL);
334
322
gtk_tree_view_append_column(tree_view, column3);
336
sc_win = gtk_scrolled_window_new(NULL, NULL);
337
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sc_win),
338
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
339
gtk_widget_set_size_request(sc_win, -1, SC_WIN_HEIGHT);
341
gtk_container_add(GTK_CONTAINER(vbox), sc_win);
342
324
gtk_container_add(GTK_CONTAINER(sc_win), GTK_WIDGET(tree_view));
344
label[0] = gtk_label_new("");
345
gtk_container_add(GTK_CONTAINER(vbox), label[0]);
347
326
selection = gtk_tree_view_get_selection(tree_view);
348
327
gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
352
331
g_signal_connect(G_OBJECT(renderer1), "toggled", G_CALLBACK(checkbox_toggled), tree_view);
354
333
hbox = gtk_hbox_new(FALSE, 0);
355
label[1] = gtk_label_new("Enter new URL:");
356
gtk_box_pack_start(GTK_BOX(hbox), label[1], FALSE, FALSE, 0);
357
label[2] = gtk_label_new(" ");
358
gtk_box_pack_start(GTK_BOX(hbox), label[2], TRUE, FALSE, 0);
334
gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Enter new URL:"), FALSE, FALSE, 0);
335
gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(" "), TRUE, FALSE, 0);
359
336
entry_url = gtk_entry_new();
360
337
gtk_entry_set_max_length(GTK_ENTRY(entry_url), FILE_NAME_MAXLEN);
361
338
gtk_entry_set_width_chars(GTK_ENTRY(entry_url), URL_ENTRY_LENGTH);
362
339
gtk_box_pack_start(GTK_BOX(hbox), entry_url, FALSE, FALSE, 0);
363
340
gtk_box_pack_start(GTK_BOX(hbox), clear_but, FALSE, FALSE, 0);
364
gtk_container_add(GTK_CONTAINER(vbox), hbox);
341
gtk_container_set_border_width(GTK_CONTAINER(hbox), 5);
342
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 0);
366
344
g_signal_connect(G_OBJECT(entry_url), "activate", G_CALLBACK(enter_key_pressed_in_entry), NULL);
367
345
g_signal_connect(G_OBJECT(clear_but), "clicked", G_CALLBACK(clear_entry), NULL);
369
347
g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL);
371
349
gtk_widget_show_all(dialog);
372
gtk_widget_set_size_request(sc_win, -1, SC_WIN_HEIGHT);
374
/* backup last valid opened resource (if any) */
351
/* Backup last valid opened resource (if any) */
375
352
str_n_cpy(resrc_bak.id, resrc->id, FILE_NAME_MAXLEN);
376
/* is it better like that ? */
353
/* Is it better like that ? */
377
354
if (IS_FLIST(flist) && resrc->id[0] != '\0')
378
355
if ((f_index = f_list_search(flist, resrc->id)) > -1)
379
356
highlight_and_go_to_row(tree_view, selection, f_index + 1);
418
395
if ((f_index = f_list_search(flist,
419
396
gtk_entry_get_text(GTK_ENTRY(entry_url)))) > -1)
420
397
highlight_and_go_to_row(tree_view, selection, f_index + 1);
421
/* backup last valid opened resource (if any) */
398
/* Backup last valid opened resource (if any) */
422
399
str_n_cpy(resrc_bak.id, resrc->id, FILE_NAME_MAXLEN);
424
/* restore last valid opened resource (if any) */
401
/* Restore last valid opened resource (if any) */
425
402
str_n_cpy(resrc->id, resrc_bak.id, FILE_NAME_MAXLEN);
426
403
gtk_widget_grab_focus(GTK_WIDGET(entry_url));
427
404
gtk_editable_set_position(GTK_EDITABLE(entry_url), cursor_position);
441
418
env->reload_rq = TRUE;
444
/* restore last valid opened resource (if any) */
421
/* Restore last valid opened resource (if any) */
445
422
str_n_cpy(resrc->id, resrc_bak.id, FILE_NAME_MAXLEN);
447
424
warning(FALSE, 1, "You must enter or select an URL first");