Mercurial > geeqie
comparison src/bar_sort.c @ 753:477f48ba28d8
rewritten utilops.h:
- better integration of external commands
- filter commands
author | nadvornik |
---|---|
date | Sat, 24 May 2008 22:44:18 +0000 |
parents | e07895754e65 |
children | 7dbdd80610a3 |
comparison
equal
deleted
inserted
replaced
752:85c9412d77d2 | 753:477f48ba28d8 |
---|---|
18 #include "collect-io.h" | 18 #include "collect-io.h" |
19 #include "filedata.h" | 19 #include "filedata.h" |
20 #include "layout.h" | 20 #include "layout.h" |
21 #include "layout_image.h" | 21 #include "layout_image.h" |
22 #include "utilops.h" | 22 #include "utilops.h" |
23 #include "editors.h" | |
23 #include "ui_bookmark.h" | 24 #include "ui_bookmark.h" |
24 #include "ui_fileops.h" | 25 #include "ui_fileops.h" |
25 #include "ui_menu.h" | 26 #include "ui_menu.h" |
26 #include "ui_misc.h" | 27 #include "ui_misc.h" |
27 | 28 |
39 } SortModeType; | 40 } SortModeType; |
40 | 41 |
41 typedef enum { | 42 typedef enum { |
42 BAR_SORT_COPY = 0, | 43 BAR_SORT_COPY = 0, |
43 BAR_SORT_MOVE, | 44 BAR_SORT_MOVE, |
44 BAR_SORT_LINK, | 45 BAR_SORT_FILTER, |
45 BAR_SORT_ACTION_COUNT | 46 BAR_SORT_ACTION_COUNT = BAR_SORT_FILTER + GQ_EDITOR_GENERIC_SLOTS |
46 } SortActionType; | 47 } SortActionType; |
47 | 48 |
48 typedef enum { | 49 typedef enum { |
49 BAR_SORT_SELECTION_IMAGE = 0, | 50 BAR_SORT_SELECTION_IMAGE = 0, |
50 BAR_SORT_SELECTION_SELECTED, | 51 BAR_SORT_SELECTION_SELECTED, |
201 GList *list; | 202 GList *list; |
202 gchar *src_dir; | 203 gchar *src_dir; |
203 | 204 |
204 list = g_list_append(NULL, file_data_new_simple(sd->undo_dest)); | 205 list = g_list_append(NULL, file_data_new_simple(sd->undo_dest)); |
205 src_dir = remove_level_from_path(sd->undo_src); | 206 src_dir = remove_level_from_path(sd->undo_src); |
206 file_util_move_simple(list, src_dir); | 207 file_util_move_simple(list, src_dir, sd->lw->window); |
207 g_free(src_dir); | 208 g_free(src_dir); |
208 } | 209 } |
209 break; | 210 break; |
210 case BAR_SORT_COPY: | 211 case BAR_SORT_COPY: |
211 file_util_delete(file_data_new_simple(sd->undo_dest), NULL, button); | 212 file_util_delete(file_data_new_simple(sd->undo_dest), NULL, button); |
212 break; | 213 break; |
213 case BAR_SORT_LINK: | |
214 if (!unlink_file(sd->undo_dest)) | |
215 { | |
216 gchar *buf; | |
217 | |
218 buf = g_strdup_printf(_("Unable to remove symbolic link:\n%s"), sd->undo_dest); | |
219 file_util_warning_dialog(_("Unlink failed"), buf, GTK_STOCK_DIALOG_ERROR, button); | |
220 g_free(buf); | |
221 } | |
222 break; | |
223 default: | 214 default: |
215 /* undo external command */ | |
216 file_util_delete(file_data_new_simple(sd->undo_dest), NULL, button); | |
224 break; | 217 break; |
225 } | 218 } |
226 | 219 |
227 layout_refresh(sd->lw); | 220 layout_refresh(sd->lw); |
228 | 221 |
278 list = g_list_append(NULL, file_data_ref(source)); | 271 list = g_list_append(NULL, file_data_ref(source)); |
279 | 272 |
280 switch (sd->action) | 273 switch (sd->action) |
281 { | 274 { |
282 case BAR_SORT_COPY: | 275 case BAR_SORT_COPY: |
283 file_util_copy_simple(list, path); | 276 file_util_copy_simple(list, path, sd->lw->window); |
284 list = NULL; | 277 list = NULL; |
285 layout_image_next(sd->lw); | 278 layout_image_next(sd->lw); |
286 break; | 279 break; |
287 case BAR_SORT_MOVE: | 280 case BAR_SORT_MOVE: |
288 file_util_move_simple(list, path); | 281 file_util_move_simple(list, path, sd->lw->window); |
289 list = NULL; | 282 list = NULL; |
290 break; | 283 break; |
291 case BAR_SORT_LINK: | 284 default: |
292 if (symlink_utf8(source->path, dest_path)) | 285 if (sd->action >= BAR_SORT_FILTER && sd->action < BAR_SORT_ACTION_COUNT) |
293 { | 286 { |
287 file_util_start_filter_from_filelist(sd->action - BAR_SORT_FILTER, list, path, sd->lw->window); | |
288 list = NULL; | |
294 layout_image_next(sd->lw); | 289 layout_image_next(sd->lw); |
295 } | 290 } |
296 else | |
297 { | |
298 gchar *buf; | |
299 | |
300 buf = g_strdup_printf(_("Unable to create symbolic link:\n%s"), dest_path); | |
301 file_util_warning_dialog(_("Link failed"), buf, GTK_STOCK_DIALOG_ERROR, sd->bookmarks); | |
302 | |
303 g_free(buf); | |
304 } | |
305 break; | |
306 default: | |
307 break; | 291 break; |
308 } | 292 } |
309 | 293 |
310 g_list_free(list); | 294 g_list_free(list); |
311 g_free(dest_path); | 295 g_free(dest_path); |
380 SortData *sd = data; | 364 SortData *sd = data; |
381 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return; | 365 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return; |
382 bar_sort_set_action(sd, BAR_SORT_MOVE); | 366 bar_sort_set_action(sd, BAR_SORT_MOVE); |
383 } | 367 } |
384 | 368 |
385 static void bar_sort_set_link_cb(GtkWidget *button, gpointer data) | 369 static void bar_sort_set_filter_cb(GtkWidget *button, gpointer data) |
386 { | 370 { |
387 SortData *sd = data; | 371 SortData *sd = data; |
372 gint n; | |
388 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return; | 373 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return; |
389 bar_sort_set_action(sd, BAR_SORT_LINK); | 374 n = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(button), "filter_idx")); |
375 if (n == 0) return; | |
376 n--; | |
377 bar_sort_set_action(sd, BAR_SORT_FILTER + n); | |
390 } | 378 } |
391 | 379 |
392 static void bar_sort_set_selection(SortData *sd, SortSelectionType selection) | 380 static void bar_sort_set_selection(SortData *sd, SortSelectionType selection) |
393 { | 381 { |
394 options->panels.sort.selection_state = sd->selection = selection; | 382 options->panels.sort.selection_state = sd->selection = selection; |
559 GtkWidget *buttongrp; | 547 GtkWidget *buttongrp; |
560 GtkWidget *label; | 548 GtkWidget *label; |
561 GtkWidget *tbar; | 549 GtkWidget *tbar; |
562 GtkWidget *combo; | 550 GtkWidget *combo; |
563 SortModeType mode; | 551 SortModeType mode; |
552 guint i; | |
564 | 553 |
565 if (!lw) return NULL; | 554 if (!lw) return NULL; |
566 | 555 |
567 sd = g_new0(SortData, 1); | 556 sd = g_new0(SortData, 1); |
568 | 557 |
569 sd->lw = lw; | 558 sd->lw = lw; |
570 | 559 |
571 mode = CLAMP(options->panels.sort.mode_state, 0, BAR_SORT_MODE_COUNT - 1); | 560 mode = CLAMP(options->panels.sort.mode_state, 0, BAR_SORT_MODE_COUNT - 1); |
572 sd->action = CLAMP(options->panels.sort.action_state, 0, BAR_SORT_ACTION_COUNT - 1); | 561 sd->action = CLAMP(options->panels.sort.action_state, 0, BAR_SORT_ACTION_COUNT - 1); |
562 | |
563 while (sd->action >= BAR_SORT_FILTER && !editor_is_filter(sd->action - BAR_SORT_FILTER)) sd->action--; | |
564 | |
573 sd->selection = CLAMP(options->panels.sort.selection_state, 0, BAR_SORT_SELECTION_COUNT - 1); | 565 sd->selection = CLAMP(options->panels.sort.selection_state, 0, BAR_SORT_SELECTION_COUNT - 1); |
574 sd->undo_src = NULL; | 566 sd->undo_src = NULL; |
575 sd->undo_dest = NULL; | 567 sd->undo_dest = NULL; |
576 | 568 |
577 sd->vbox = gtk_vbox_new(FALSE, PREF_PAD_GAP); | 569 sd->vbox = gtk_vbox_new(FALSE, PREF_PAD_GAP); |
600 _("Copy"), (sd->action == BAR_SORT_COPY), | 592 _("Copy"), (sd->action == BAR_SORT_COPY), |
601 G_CALLBACK(bar_sort_set_copy_cb), sd); | 593 G_CALLBACK(bar_sort_set_copy_cb), sd); |
602 pref_radiobutton_new(sd->folder_group, buttongrp, | 594 pref_radiobutton_new(sd->folder_group, buttongrp, |
603 _("Move"), (sd->action == BAR_SORT_MOVE), | 595 _("Move"), (sd->action == BAR_SORT_MOVE), |
604 G_CALLBACK(bar_sort_set_move_cb), sd); | 596 G_CALLBACK(bar_sort_set_move_cb), sd); |
605 pref_radiobutton_new(sd->folder_group, buttongrp, | 597 |
606 _("Link"), (sd->action == BAR_SORT_LINK), | 598 |
607 G_CALLBACK(bar_sort_set_link_cb), sd); | 599 for (i = 0; i < GQ_EDITOR_GENERIC_SLOTS; i++) |
600 { | |
601 GtkWidget *button; | |
602 | |
603 const gchar *name = editor_get_name(i); | |
604 if (!name || !editor_is_filter(i)) continue; | |
605 | |
606 button = pref_radiobutton_new(sd->folder_group, buttongrp, | |
607 name, (sd->action == BAR_SORT_FILTER + i), | |
608 G_CALLBACK(bar_sort_set_filter_cb), sd); | |
609 | |
610 | |
611 g_object_set_data(G_OBJECT(button), "filter_idx", GUINT_TO_POINTER(i + 1)); | |
612 } | |
613 | |
608 | 614 |
609 sd->collection_group = pref_box_new(sd->vbox, FALSE, GTK_ORIENTATION_VERTICAL, 0); | 615 sd->collection_group = pref_box_new(sd->vbox, FALSE, GTK_ORIENTATION_VERTICAL, 0); |
610 | 616 |
611 buttongrp = pref_radiobutton_new(sd->collection_group, NULL, | 617 buttongrp = pref_radiobutton_new(sd->collection_group, NULL, |
612 _("Add image"), (sd->selection == BAR_SORT_SELECTION_IMAGE), | 618 _("Add image"), (sd->selection == BAR_SORT_SELECTION_IMAGE), |