From d338f1f0c1a72665396d95bfe303ed408a3f10b9 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Sun, 14 Feb 2010 15:12:08 +0100 Subject: Show warning when some files are unreadable This will make user aware of what files will not be copied, chmodded or chowned. --- UGnome.pas | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'UGnome.pas') diff --git a/UGnome.pas b/UGnome.pas index 9fa0319..7871f3e 100644 --- a/UGnome.pas +++ b/UGnome.pas @@ -165,6 +165,8 @@ function HandleVFSAskPasswordCallback(DialogParent: PGtkWidget; domain: PPChar; password_save: PVFSPasswordSave): gboolean; +function ShowInaccessiblePathsDialog(DialogParent: PGtkWidget; List: TStringList): integer; + type PGnomeColorPicker = PGtkWidget; @@ -1549,6 +1551,65 @@ begin end; +(********************************************************************************************************************************) +(********************************************************************************************************************************) +function ShowInaccessiblePathsDialog(DialogParent: PGtkWidget; List: TStringList): integer; +var dialog: PGtkWidget; + hbox, vbox, expander: PGtkWidget; + primary_label, secondary_label, details_label, image: PGtkWidget; + scrolled_window: PGtkWidget; +begin + if not Assigned(List) or (List.Count = 0) then Exit; + dialog := gtk_dialog_new; + if DialogParent <> nil then gtk_window_set_transient_for(PGtkWindow(dialog), PGtkWindow(DialogParent)); + gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); + gtk_box_set_spacing(GTK_BOX(PGtkDialog(dialog)^.vbox), 14); + gtk_window_set_resizable(GTK_WINDOW (dialog), False); + gtk_dialog_set_has_separator(PGtkDialog(dialog), False); + gtk_window_set_title(GTK_WINDOW(dialog), ''); + gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), True); + + primary_label := gtk_label_new(nil); + gtk_label_set_markup(PGtkLabel(primary_label), PChar(Format('%s', ['Inaccessible folders and files']))); + secondary_label := gtk_label_new('Some files are not accessible and will be skipped. Press Cancel to abort the operation or Continue to ignore this warning.'); + details_label := gtk_label_new(nil); + gtk_label_set_label(PGtkLabel(details_label), PChar(List.Text)); + image := gtk_image_new_from_stock(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG); + gtk_misc_set_alignment(GTK_MISC(image), 0.5, 0.0); + gtk_label_set_line_wrap(GTK_LABEL(primary_label), True); + gtk_label_set_selectable(GTK_LABEL(primary_label), True); + gtk_misc_set_alignment(GTK_MISC(primary_label), 0.0, 0.5); + gtk_label_set_line_wrap(GTK_LABEL(secondary_label), True); + gtk_label_set_selectable(GTK_LABEL(secondary_label), True); + gtk_misc_set_alignment(GTK_MISC(secondary_label), 0.0, 0.5); + gtk_label_set_line_wrap(GTK_LABEL(details_label), False); + gtk_label_set_selectable(GTK_LABEL(details_label), True); + gtk_misc_set_alignment(GTK_MISC(details_label), 0.0, 0.5); + scrolled_window := gtk_scrolled_window_new(nil, nil); + gtk_scrolled_window_set_policy(PGtkScrolledWindow(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_add_with_viewport(PGtkScrolledWindow(scrolled_window), details_label); + hbox := gtk_hbox_new (False, 12); + gtk_container_set_border_width(GTK_CONTAINER(hbox), 5); + gtk_box_pack_start(GTK_BOX(hbox), image, False, False, 0); + vbox := gtk_vbox_new(False, 12); + gtk_box_pack_start(GTK_BOX(hbox), vbox, False, False, 0); + gtk_box_pack_start(GTK_BOX(vbox), primary_label, False, False, 0); + gtk_box_pack_start(GTK_BOX(vbox), secondary_label, False, False, 0); + expander := gtk_expander_new_with_mnemonic('Show more _details'); + gtk_expander_set_spacing(GTK_EXPANDER(expander), 6); + gtk_container_add(GTK_CONTAINER(expander), scrolled_window); + gtk_box_pack_start(GTK_BOX(vbox), expander, False, False, 0); + gtk_box_pack_start(GTK_BOX(PGtkDialog(dialog)^.vbox), hbox, False, False, 0); + + gtk_dialog_add_button(PGtkDialog(dialog), GTK_STOCK_CANCEL, 0); + gtk_dialog_add_button(PGtkDialog(dialog), 'C_ontinue', 1); + gtk_dialog_set_default_response(PGtkDialog(dialog), 1); + gtk_widget_show_all(dialog); + + Result := gtk_dialog_run(PGtkDialog(dialog)); + gtk_widget_destroy(Dialog); +end; + (********************************************************************************************************************************) (********************************************************************************************************************************) (********************************************************************************************************************************) -- cgit v1.2.3