Mercurial > geeqie
annotate src/bar_sort.c @ 283:e213fb025621
GQVIEW_* -> GQ_*
| author | zas_ |
|---|---|
| date | Tue, 08 Apr 2008 23:16:12 +0000 |
| parents | 9995c5fb202a |
| children | 4b2d7f9af171 |
| rev | line source |
|---|---|
| 9 | 1 /* |
| 196 | 2 * Geeqie |
|
67
f63ecca6c087
Fri Oct 13 05:22:43 2006 John Ellis <johne@verizon.net>
gqview
parents:
41
diff
changeset
|
3 * (C) 2006 John Ellis |
| 9 | 4 * |
| 5 * Author: John Ellis | |
| 6 * | |
| 7 * This software is released under the GNU General Public License (GNU GPL). | |
| 8 * Please read the included file COPYING for more information. | |
| 9 * This software comes with no warranty of any kind, use at your own risk! | |
| 10 */ | |
| 11 | |
| 12 | |
| 281 | 13 #include "main.h" |
| 9 | 14 #include "bar_sort.h" |
| 15 | |
| 16 #include "collect.h" | |
| 17 #include "collect-io.h" | |
| 18 #include "filelist.h" | |
| 19 #include "layout.h" | |
| 20 #include "layout_image.h" | |
| 21 #include "utilops.h" | |
| 22 #include "ui_bookmark.h" | |
| 23 #include "ui_fileops.h" | |
| 24 #include "ui_menu.h" | |
| 25 #include "ui_misc.h" | |
| 26 | |
| 27 | |
| 28 /* | |
| 29 *------------------------------------------------------------------- | |
| 30 * sort bar | |
| 31 *------------------------------------------------------------------- | |
| 32 */ | |
| 33 | |
| 34 typedef enum { | |
| 35 BAR_SORT_MODE_FOLDER = 0, | |
| 36 BAR_SORT_MODE_COLLECTION | |
| 37 } SortModeType; | |
| 38 | |
| 39 typedef enum { | |
| 40 BAR_SORT_COPY, | |
| 41 BAR_SORT_MOVE, | |
| 42 BAR_SORT_LINK | |
| 43 } SortActionType; | |
| 44 | |
| 45 typedef enum { | |
| 46 BAR_SORT_SELECTION_IMAGE, | |
| 47 BAR_SORT_SELECTION_SELECTED | |
| 48 } SortSelectionType; | |
| 49 | |
| 50 typedef struct _SortData SortData; | |
| 51 struct _SortData | |
| 52 { | |
| 53 GtkWidget *vbox; | |
| 54 GtkWidget *bookmarks; | |
| 55 LayoutWindow *lw; | |
| 56 | |
| 57 FileDialog *dialog; | |
| 58 GtkWidget *dialog_name_entry; | |
| 59 | |
| 60 SortModeType mode; | |
| 61 SortActionType action; | |
| 62 SortSelectionType selection; | |
| 63 | |
| 64 GtkWidget *folder_group; | |
| 65 GtkWidget *collection_group; | |
| 66 | |
| 67 GtkWidget *add_button; | |
| 68 GtkWidget *undo_button; | |
| 69 SortActionType undo_action; | |
| 70 GList *undo_src_list; | |
| 71 gchar *undo_src; | |
| 72 gchar *undo_dest; | |
| 73 }; | |
| 74 | |
| 75 | |
| 76 #define SORT_KEY_FOLDERS "sort_manager" | |
| 77 #define SORT_KEY_COLLECTIONS "sort_manager_collections" | |
| 78 | |
| 79 | |
| 80 static gint bar_sort_mode_state = BAR_SORT_MODE_FOLDER; | |
| 81 static gint bar_sort_action_state = BAR_SORT_COPY; | |
| 82 static gint bar_sort_selection_state = BAR_SORT_SELECTION_IMAGE; | |
| 83 | |
| 84 | |
| 138 | 85 static void bar_sort_undo_set(SortData *sd, GList *src_list, FileData *src, const gchar *dest); |
| 9 | 86 static void bar_sort_add_close(SortData *sd); |
| 87 | |
| 88 | |
| 89 static void bar_sort_collection_list_build(GtkWidget *bookmarks) | |
| 90 { | |
| 91 gchar *collect_path; | |
| 92 GList *list = NULL; | |
| 93 GList *work; | |
| 94 | |
| 95 history_list_free_key(SORT_KEY_COLLECTIONS); | |
| 96 bookmark_list_set_key(bookmarks, SORT_KEY_COLLECTIONS); | |
| 97 | |
| 283 | 98 collect_path = g_strconcat(homedir(), "/", GQ_RC_DIR_COLLECTIONS, NULL); |
| 9 | 99 path_list(collect_path, &list, NULL); |
| 100 g_free(collect_path); | |
| 101 | |
| 102 list = path_list_sort(list); | |
| 103 | |
| 104 work = list; | |
| 105 while (work) | |
| 106 { | |
| 107 const gchar *path; | |
| 108 gchar *name; | |
| 109 | |
| 110 path = work->data; | |
| 111 work = work->next; | |
| 112 | |
| 113 if (file_extension_match(path, ".gqv")) | |
| 114 { | |
| 115 name = remove_extension_from_path(filename_from_path(path)); | |
| 116 } | |
| 117 else | |
| 118 { | |
| 119 name = g_strdup(filename_from_path(path)); | |
| 120 } | |
| 121 bookmark_list_add(bookmarks, name, path); | |
| 122 g_free(name); | |
| 123 } | |
| 124 | |
| 138 | 125 string_list_free(list); |
| 9 | 126 } |
| 127 | |
| 128 static void bar_sort_mode_sync(SortData *sd, SortModeType mode) | |
| 129 { | |
| 130 gint folder_mode; | |
| 131 | |
| 132 if (sd->mode == mode) return; | |
| 133 sd->mode = mode; | |
| 134 | |
| 135 folder_mode = (sd->mode == BAR_SORT_MODE_FOLDER); | |
| 136 | |
| 137 bookmark_list_set_no_defaults(sd->bookmarks, !folder_mode); | |
| 138 bookmark_list_set_editable(sd->bookmarks, folder_mode); | |
| 139 | |
| 140 if (folder_mode) | |
| 141 { | |
| 142 gtk_widget_hide(sd->collection_group); | |
| 143 gtk_widget_show(sd->folder_group); | |
| 144 bookmark_list_set_key(sd->bookmarks, SORT_KEY_FOLDERS ); | |
| 145 } | |
| 146 else | |
| 147 { | |
| 148 gtk_widget_hide(sd->folder_group); | |
| 149 gtk_widget_show(sd->collection_group); | |
| 150 bar_sort_collection_list_build(sd->bookmarks); | |
| 151 } | |
| 152 | |
| 153 bar_sort_add_close(sd); | |
| 154 | |
| 155 bar_sort_undo_set(sd, NULL, NULL, NULL); | |
| 156 } | |
| 157 | |
| 158 static void bar_sort_mode_cb(GtkWidget *combo, gpointer data) | |
| 159 { | |
| 160 SortData *sd = data; | |
| 161 | |
| 162 if (gtk_combo_box_get_active(GTK_COMBO_BOX(combo)) == BAR_SORT_MODE_FOLDER) | |
| 163 { | |
| 164 bar_sort_mode_sync(sd, BAR_SORT_MODE_FOLDER); | |
| 165 } | |
| 166 else | |
| 167 { | |
| 168 bar_sort_mode_sync(sd, BAR_SORT_MODE_COLLECTION); | |
| 169 } | |
| 170 } | |
| 171 | |
| 172 /* this takes control of src_list */ | |
| 138 | 173 static void bar_sort_undo_set(SortData *sd, GList *src_list, FileData *src, const gchar *dest) |
| 9 | 174 { |
| 138 | 175 string_list_free(sd->undo_src_list); |
| 176 sd->undo_src_list = filelist_to_path_list(src_list); | |
| 9 | 177 |
| 178 g_free(sd->undo_src); | |
| 138 | 179 sd->undo_src = src ? g_strdup(src->path) : NULL; |
| 9 | 180 g_free(sd->undo_dest); |
| 181 sd->undo_dest = g_strdup(dest); | |
| 182 | |
| 183 sd->undo_action = sd->action; | |
| 184 | |
| 185 if (sd->undo_button) | |
| 186 { | |
| 187 gtk_widget_set_sensitive(sd->undo_button, | |
| 188 ((sd->undo_src_list || sd->undo_src) && sd->undo_dest) ); | |
| 189 } | |
| 190 } | |
| 191 | |
| 192 static void bar_sort_undo_folder(SortData *sd, GtkWidget *button) | |
| 193 { | |
| 194 if (!sd->undo_src || !sd->undo_dest) return; | |
| 195 | |
| 196 switch (sd->undo_action) | |
| 197 { | |
| 198 case BAR_SORT_MOVE: | |
| 199 { | |
| 200 GList *list; | |
| 201 gchar *src_dir; | |
| 202 | |
| 138 | 203 list = g_list_append(NULL, file_data_new_simple(sd->undo_dest)); |
| 9 | 204 src_dir = remove_level_from_path(sd->undo_src); |
| 205 file_util_move_simple(list, src_dir); | |
| 206 g_free(src_dir); | |
| 207 } | |
| 208 break; | |
| 209 case BAR_SORT_COPY: | |
| 138 | 210 file_util_delete(file_data_new_simple(sd->undo_dest), NULL, button); |
| 9 | 211 break; |
| 212 case BAR_SORT_LINK: | |
| 213 if (!unlink_file(sd->undo_dest)) | |
| 214 { | |
| 215 gchar *buf; | |
| 216 | |
|
67
f63ecca6c087
Fri Oct 13 05:22:43 2006 John Ellis <johne@verizon.net>
gqview
parents:
41
diff
changeset
|
217 buf = g_strdup_printf(_("Unable to remove symbolic link:\n%s"), sd->undo_dest); |
| 9 | 218 file_util_warning_dialog(_("Unlink failed"), buf, GTK_STOCK_DIALOG_ERROR, button); |
| 219 g_free(buf); | |
| 220 } | |
| 221 break; | |
| 222 } | |
| 223 | |
| 224 layout_refresh(sd->lw); | |
| 225 | |
| 226 if (isfile(sd->undo_src)) | |
| 227 { | |
| 138 | 228 layout_image_set_fd(sd->lw, file_data_new_simple(sd->undo_src)); |
| 9 | 229 } |
| 230 | |
| 231 bar_sort_undo_set(sd, NULL, NULL, NULL); | |
| 232 } | |
| 233 | |
| 234 static void bar_sort_undo_collection(SortData *sd) | |
| 235 { | |
| 236 GList *work; | |
| 237 | |
| 238 work = sd->undo_src_list; | |
| 239 while (work) | |
| 240 { | |
| 241 gchar *source; | |
| 242 | |
| 243 source = work->data; | |
| 244 work = work->next; | |
| 138 | 245 collect_manager_remove(file_data_new_simple(source), sd->undo_dest); |
| 9 | 246 } |
| 247 | |
| 248 bar_sort_undo_set(sd, NULL, NULL, NULL); | |
| 249 } | |
| 250 | |
| 251 static void bar_sort_undo_cb(GtkWidget *button, gpointer data) | |
| 252 { | |
| 253 SortData *sd = data; | |
| 254 | |
| 255 if (sd->mode == BAR_SORT_MODE_FOLDER) | |
| 256 { | |
| 257 bar_sort_undo_folder(sd, button); | |
| 258 } | |
| 259 else | |
| 260 { | |
| 261 bar_sort_undo_collection(sd); | |
| 262 } | |
| 263 } | |
| 264 | |
| 138 | 265 static void bar_sort_bookmark_select_folder(SortData *sd, FileData *source, const gchar *path) |
| 9 | 266 { |
| 267 GList *list; | |
| 268 gchar *dest_path; | |
| 269 | |
| 270 if (!isdir(path)) return; | |
| 271 | |
| 138 | 272 dest_path = concat_dir_and_file(path, source->name); |
| 9 | 273 bar_sort_undo_set(sd, NULL, source, dest_path); |
| 274 | |
| 138 | 275 list = g_list_append(NULL, file_data_ref(source)); |
| 9 | 276 |
| 277 switch (sd->action) | |
| 278 { | |
| 279 case BAR_SORT_COPY: | |
| 280 file_util_copy_simple(list, path); | |
| 281 list = NULL; | |
| 282 layout_image_next(sd->lw); | |
| 283 break; | |
| 284 case BAR_SORT_MOVE: | |
| 285 file_util_move_simple(list, path); | |
| 286 list = NULL; | |
| 287 break; | |
| 288 case BAR_SORT_LINK: | |
| 138 | 289 if (symlink_utf8(source->path, dest_path)) |
| 9 | 290 { |
| 291 layout_image_next(sd->lw); | |
| 292 } | |
| 293 else | |
| 294 { | |
| 295 gchar *buf; | |
| 296 | |
|
67
f63ecca6c087
Fri Oct 13 05:22:43 2006 John Ellis <johne@verizon.net>
gqview
parents:
41
diff
changeset
|
297 buf = g_strdup_printf(_("Unable to create symbolic link:\n%s"), dest_path); |
| 9 | 298 file_util_warning_dialog(_("Link failed"), buf, GTK_STOCK_DIALOG_ERROR, sd->bookmarks); |
| 299 | |
| 300 g_free(buf); | |
| 301 } | |
| 302 break; | |
| 303 } | |
| 304 | |
| 305 g_list_free(list); | |
| 306 g_free(dest_path); | |
| 307 } | |
| 308 | |
| 138 | 309 static void bar_sort_bookmark_select_collection(SortData *sd, FileData *source, const gchar *path) |
| 9 | 310 { |
| 311 GList *list = NULL; | |
| 312 | |
| 313 switch (sd->selection) | |
| 314 { | |
| 315 case BAR_SORT_SELECTION_IMAGE: | |
| 138 | 316 list = g_list_append(NULL, file_data_ref(source)); |
| 9 | 317 break; |
| 318 case BAR_SORT_SELECTION_SELECTED: | |
| 319 list = layout_selection_list(sd->lw); | |
| 320 break; | |
| 321 } | |
| 322 | |
| 323 if (!list) | |
| 324 { | |
| 325 bar_sort_undo_set(sd, NULL, NULL, NULL); | |
| 326 return; | |
| 327 } | |
| 328 | |
| 329 bar_sort_undo_set(sd, list, NULL, path); | |
| 330 | |
| 331 while (list) | |
| 332 { | |
| 138 | 333 FileData *image_fd; |
| 9 | 334 |
| 138 | 335 image_fd = list->data; |
| 9 | 336 list = list->next; |
| 138 | 337 collect_manager_add(image_fd, path); |
| 9 | 338 } |
| 339 } | |
| 340 | |
| 341 static void bar_sort_bookmark_select(const gchar *path, gpointer data) | |
| 342 { | |
| 343 SortData *sd = data; | |
| 138 | 344 FileData *source; |
| 9 | 345 |
| 138 | 346 source = layout_image_get_fd(sd->lw); |
| 9 | 347 if (!path || !source) return; |
| 348 | |
| 349 if (sd->mode == BAR_SORT_MODE_FOLDER) | |
| 350 { | |
| 351 bar_sort_bookmark_select_folder(sd, source, path); | |
| 352 } | |
| 353 else | |
| 354 { | |
| 355 bar_sort_bookmark_select_collection(sd, source, path); | |
| 356 } | |
| 357 } | |
| 358 | |
| 359 static void bar_sort_set_copy_cb(GtkWidget *button, gpointer data) | |
| 360 { | |
| 361 SortData *sd = data; | |
| 362 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return; | |
| 363 sd->action = BAR_SORT_COPY; | |
| 364 } | |
| 365 | |
| 366 static void bar_sort_set_move_cb(GtkWidget *button, gpointer data) | |
| 367 { | |
| 368 SortData *sd = data; | |
| 369 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return; | |
| 370 sd->action = BAR_SORT_MOVE; | |
| 371 } | |
| 372 | |
| 373 static void bar_sort_set_link_cb(GtkWidget *button, gpointer data) | |
| 374 { | |
| 375 SortData *sd = data; | |
| 376 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return; | |
| 377 sd->action = BAR_SORT_LINK; | |
| 378 } | |
| 379 | |
| 380 static void bar_sort_set_selection_image_cb(GtkWidget *button, gpointer data) | |
| 381 { | |
| 382 SortData *sd = data; | |
| 383 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return; | |
| 384 sd->selection = BAR_SORT_SELECTION_IMAGE; | |
| 385 } | |
| 386 | |
| 387 static void bar_sort_set_selection_selected_cb(GtkWidget *button, gpointer data) | |
| 388 { | |
| 389 SortData *sd = data; | |
| 390 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return; | |
| 391 sd->selection = BAR_SORT_SELECTION_SELECTED; | |
| 392 } | |
| 393 | |
| 394 static void bar_sort_add_close(SortData *sd) | |
| 395 { | |
| 396 if (sd->dialog) file_dialog_close(sd->dialog); | |
| 397 sd->dialog_name_entry = NULL; | |
| 398 sd->dialog = NULL; | |
| 399 } | |
| 400 | |
| 401 static void bar_sort_add_ok_cb(FileDialog *fd, gpointer data) | |
| 402 { | |
| 403 SortData *sd = data; | |
| 404 const gchar *name; | |
| 405 | |
| 406 name = gtk_entry_get_text(GTK_ENTRY(sd->dialog_name_entry)); | |
| 407 if (sd->mode == BAR_SORT_MODE_FOLDER) | |
| 408 { | |
| 409 if (strlen(name) == 0) | |
| 410 { | |
| 411 name = filename_from_path(fd->dest_path); | |
| 412 } | |
| 413 | |
| 414 bookmark_list_add(sd->bookmarks, name, fd->dest_path); | |
| 415 } | |
| 416 else | |
| 417 { | |
| 418 gchar *path; | |
| 419 gchar *ext; | |
| 420 | |
| 421 if (strlen(name) == 0) return; | |
| 422 | |
| 423 if (file_extension_match(name, ".gqv")) | |
| 424 { | |
| 425 ext = NULL; | |
| 426 } | |
| 427 else | |
| 428 { | |
| 429 ext = ".gqv"; | |
| 430 } | |
| 431 | |
| 283 | 432 path = g_strconcat(homedir(), "/", GQ_RC_DIR_COLLECTIONS, "/", name, ext, NULL); |
| 9 | 433 if (isfile(path)) |
| 434 { | |
| 435 gchar *text = g_strdup_printf(_("The collection:\n%s\nalready exists."), name); | |
| 436 file_util_warning_dialog(_("Collection exists"), text, GTK_STOCK_DIALOG_INFO, NULL); | |
| 437 g_free(text); | |
| 438 } | |
| 439 else | |
| 440 { | |
| 441 CollectionData *cd; | |
| 442 | |
| 443 cd = collection_new(path); | |
| 444 if (collection_save(cd, path)) | |
| 445 { | |
| 446 bar_sort_collection_list_build(sd->bookmarks); | |
| 447 } | |
| 448 else | |
| 449 { | |
| 450 gchar *text = g_strdup_printf(_("Failed to save the collection:\n%s"), path); | |
| 451 file_util_warning_dialog(_("Save Failed"), text, | |
| 452 GTK_STOCK_DIALOG_ERROR, GENERIC_DIALOG(fd)->dialog); | |
| 453 g_free(text); | |
| 454 } | |
| 455 collection_unref(cd); | |
| 456 } | |
| 457 | |
| 458 g_free(path); | |
| 459 } | |
| 460 | |
| 461 bar_sort_add_close(sd); | |
| 462 } | |
| 463 | |
| 464 static void bar_sort_add_cancel_cb(FileDialog *fd, gpointer data) | |
| 465 { | |
| 466 SortData *sd = data; | |
| 467 | |
| 468 bar_sort_add_close(sd); | |
| 469 } | |
| 470 | |
| 471 static void bar_sort_add_cb(GtkWidget *button, gpointer data) | |
| 472 { | |
| 473 SortData *sd = data; | |
| 474 GtkWidget *hbox; | |
| 475 const gchar *title; | |
| 476 | |
| 477 if (sd->dialog) | |
| 478 { | |
| 479 gtk_window_present(GTK_WINDOW(GENERIC_DIALOG(sd->dialog)->dialog)); | |
| 480 return; | |
| 481 } | |
| 482 | |
| 483 if (sd->mode == BAR_SORT_MODE_FOLDER) | |
| 484 { | |
| 485 title = _("Add Bookmark"); | |
| 486 } | |
| 487 else | |
| 488 { | |
| 489 title = _("Add Collection"); | |
| 490 } | |
| 491 | |
| 492 sd->dialog = file_util_file_dlg(title, | |
|
254
9faf34f047b1
Make the wmclass value unique among the code by defining
zas_
parents:
228
diff
changeset
|
493 GQ_WMCLASS, "add_bookmark", button, |
| 9 | 494 bar_sort_add_cancel_cb, sd); |
| 495 file_dialog_add_button(sd->dialog, GTK_STOCK_OK, NULL, bar_sort_add_ok_cb, TRUE); | |
| 496 | |
| 497 generic_dialog_add_message(GENERIC_DIALOG(sd->dialog), NULL, title, NULL); | |
| 498 | |
| 499 if (sd->mode == BAR_SORT_MODE_FOLDER) | |
| 500 { | |
| 501 file_dialog_add_path_widgets(sd->dialog, NULL, NULL, "add_bookmark", NULL, NULL); | |
| 502 } | |
| 503 | |
| 504 hbox = pref_box_new(GENERIC_DIALOG(sd->dialog)->vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_GAP); | |
| 505 | |
| 506 pref_label_new(hbox, _("Name:")); | |
| 507 | |
| 508 sd->dialog_name_entry = gtk_entry_new(); | |
| 509 gtk_box_pack_start(GTK_BOX(hbox), sd->dialog_name_entry, TRUE, TRUE, 0); | |
| 510 generic_dialog_attach_default(GENERIC_DIALOG(sd->dialog), sd->dialog_name_entry); | |
| 511 gtk_widget_show(sd->dialog_name_entry); | |
| 512 | |
| 513 if (sd->mode == BAR_SORT_MODE_COLLECTION) | |
| 514 { | |
| 515 gtk_widget_grab_focus(sd->dialog_name_entry); | |
| 516 } | |
| 517 | |
| 518 gtk_widget_show(GENERIC_DIALOG(sd->dialog)->dialog); | |
| 519 } | |
| 520 | |
| 521 void bar_sort_close(GtkWidget *bar) | |
| 522 { | |
| 523 SortData *sd; | |
| 524 | |
| 525 sd = g_object_get_data(G_OBJECT(bar), "bar_sort_data"); | |
| 526 if (!sd) return; | |
| 527 | |
| 528 gtk_widget_destroy(sd->vbox); | |
| 529 } | |
| 530 | |
| 531 static void bar_sort_destroy(GtkWidget *widget, gpointer data) | |
| 532 { | |
| 533 SortData *sd = data; | |
| 534 | |
| 535 bar_sort_add_close(sd); | |
| 536 bar_sort_mode_state = sd->mode; | |
| 537 bar_sort_action_state = sd->action; | |
| 538 bar_sort_selection_state = sd->selection; | |
| 539 | |
| 540 g_free(sd->undo_src); | |
| 541 g_free(sd->undo_dest); | |
| 542 g_free(sd); | |
| 543 } | |
| 544 | |
| 545 GtkWidget *bar_sort_new(LayoutWindow *lw) | |
| 546 { | |
| 547 SortData *sd; | |
| 548 GtkWidget *buttongrp; | |
| 549 GtkWidget *label; | |
| 550 GtkWidget *tbar; | |
| 551 GtkWidget *combo; | |
| 552 | |
| 553 if (!lw) return NULL; | |
| 554 | |
| 555 sd = g_new0(SortData, 1); | |
| 556 | |
| 557 sd->lw = lw; | |
| 558 sd->action = bar_sort_action_state; | |
| 559 sd->selection = bar_sort_selection_state; | |
| 560 sd->undo_src = NULL; | |
| 561 sd->undo_dest = NULL; | |
| 562 | |
| 563 sd->vbox = gtk_vbox_new(FALSE, PREF_PAD_GAP); | |
| 564 g_object_set_data(G_OBJECT(sd->vbox), "bar_sort_data", sd); | |
| 565 g_signal_connect(G_OBJECT(sd->vbox), "destroy", | |
| 566 G_CALLBACK(bar_sort_destroy), sd); | |
| 567 | |
| 568 label = gtk_label_new(_("Sort Manager")); | |
| 569 pref_label_bold(label, TRUE, FALSE); | |
| 570 gtk_box_pack_start(GTK_BOX(sd->vbox), label, FALSE, FALSE, 0); | |
| 571 gtk_widget_show(label); | |
| 572 | |
| 573 combo = gtk_combo_box_new_text(); | |
| 574 gtk_box_pack_start(GTK_BOX(sd->vbox), combo, FALSE, FALSE, 0); | |
| 575 gtk_widget_show(combo); | |
| 576 | |
| 577 gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Folders")); | |
| 578 gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Collections")); | |
| 579 | |
| 580 g_signal_connect(G_OBJECT(combo), "changed", | |
| 581 G_CALLBACK(bar_sort_mode_cb), sd); | |
| 582 | |
| 583 sd->folder_group = pref_box_new(sd->vbox, FALSE, GTK_ORIENTATION_VERTICAL, 0); | |
| 584 | |
|
41
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
585 buttongrp = pref_radiobutton_new(sd->folder_group, NULL, |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
586 _("Copy"), (sd->action == BAR_SORT_COPY), |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
587 G_CALLBACK(bar_sort_set_copy_cb), sd); |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
588 pref_radiobutton_new(sd->folder_group, buttongrp, |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
589 _("Move"), (sd->action == BAR_SORT_MOVE), |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
590 G_CALLBACK(bar_sort_set_move_cb), sd); |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
591 pref_radiobutton_new(sd->folder_group, buttongrp, |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
592 _("Link"), (sd->action == BAR_SORT_LINK), |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
593 G_CALLBACK(bar_sort_set_link_cb), sd); |
| 9 | 594 |
| 595 sd->collection_group = pref_box_new(sd->vbox, FALSE, GTK_ORIENTATION_VERTICAL, 0); | |
| 596 | |
|
41
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
597 buttongrp = pref_radiobutton_new(sd->collection_group, NULL, |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
598 _("Add image"), (sd->selection == BAR_SORT_SELECTION_IMAGE), |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
599 G_CALLBACK(bar_sort_set_selection_image_cb), sd); |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
600 pref_radiobutton_new(sd->collection_group, buttongrp, |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
601 _("Add selection"), (sd->selection == BAR_SORT_SELECTION_SELECTED), |
|
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
602 G_CALLBACK(bar_sort_set_selection_selected_cb), sd); |
| 9 | 603 |
| 604 sd->bookmarks = bookmark_list_new(SORT_KEY_FOLDERS, bar_sort_bookmark_select, sd); | |
| 605 gtk_box_pack_start(GTK_BOX(sd->vbox), sd->bookmarks, TRUE, TRUE, 0); | |
| 606 gtk_widget_show(sd->bookmarks); | |
| 607 | |
| 608 tbar = pref_toolbar_new(sd->vbox, GTK_TOOLBAR_ICONS); | |
| 609 | |
|
41
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
610 sd->add_button = pref_toolbar_button(tbar, GTK_STOCK_ADD, NULL, FALSE, |
| 9 | 611 _("Add Bookmark"), |
| 612 G_CALLBACK(bar_sort_add_cb), sd); | |
|
41
6281cc38e5ca
Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
gqview
parents:
9
diff
changeset
|
613 sd->undo_button = pref_toolbar_button(tbar, GTK_STOCK_UNDO, NULL, FALSE, |
| 9 | 614 _("Undo last image"), |
| 615 G_CALLBACK(bar_sort_undo_cb), sd); | |
| 616 | |
| 617 sd->mode = -1; | |
| 618 bar_sort_mode_sync(sd, bar_sort_mode_state); | |
| 619 gtk_combo_box_set_active(GTK_COMBO_BOX(combo), sd->mode); | |
| 620 | |
| 621 return sd->vbox; | |
| 622 } | |
| 623 |
