(* Tux Commander - UOverwrite - Overwrite dialog form and related funcions Copyright (C) 2004 Tomas Bzatek Check for updates on tuxcmd.sourceforge.net This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) unit UOverwrite; interface uses SysUtils, Classes, lazgdk3, lazgtk3, GTKControls, GTKForms, GTKStdCtrls; const OVERWRITE_CANCEL = 0; OVERWRITE_OVERWRITE = 1; OVERWRITE_OVERWRITE_ALL = 2; OVERWRITE_SKIP = 3; OVERWRITE_OVERWRITE_ALL_OLDER = 4; OVERWRITE_SKIP_ALL = 5; OVERWRITE_RENAME = 6; OVERWRITE_APPEND = 7; type TFOverwrite = class(TGTKDialog) FromLabel, FromInfoLabel, ToLabel, ToInfoLabel: TGTKLabel; ButtonGrid: TGTKGrid; FromVBox, ToVBox: TGTKVBox; OverwriteButton, OverwriteAllButton, SkipButton, CancelButton, OverwriteAllOlderButton, SkipAllButton, RenameButton, AppendButton : TGTKButton; procedure FormCreate(Sender: TObject); override; procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean); procedure ButtonClick(Sender: TObject); public RenameStr, SourceFile, DestFile: string; procedure AddButtons(ShowAppend: boolean); procedure DoRename; procedure DoAppend; end; var FOverwrite: TFOverwrite; implementation uses ULocale, UCopyMove, UCoreUtils; procedure TFOverwrite.FormCreate(Sender: TObject); begin Caption := LANGOverwriteQuestion; FromLabel := TGTKLabel.Create(Self); FromLabel.XAlign := 0; FromLabel.MarginStart := 10; FromLabel.MarginEnd := 10; FromInfoLabel := TGTKLabel.Create(Self); FromInfoLabel.XAlign := 0; FromInfoLabel.MarginStart := 40; FromInfoLabel.MarginEnd := 40; ToLabel := TGTKLabel.Create(Self); ToLabel.XAlign := 0; ToLabel.MarginStart := 10; ToLabel.MarginEnd := 10; ToInfoLabel := TGTKLabel.Create(Self); ToInfoLabel.XAlign := 0; ToInfoLabel.MarginStart := 40; ToInfoLabel.MarginEnd := 40; OverwriteButton := TGTKButton.Create(Self); OverwriteButton.Caption := LANGOverwriteButton_Caption; OverwriteButton.OnClick := @ButtonClick; OverwriteAllButton := TGTKButton.Create(Self); OverwriteAllButton.Caption := LANGOverwriteAllButton_Caption; OverwriteAllButton.OnClick := @ButtonClick; SkipButton := TGTKButton.Create(Self); SkipButton.Caption := LANGSkipButton_Caption; SkipButton.OnClick := @ButtonClick; CancelButton := TGTKButton.Create(Self); CancelButton.Caption := LANGCancel; CancelButton.OnClick := @ButtonClick; OverwriteAllOlderButton := TGTKButton.Create(Self); OverwriteAllOlderButton.Caption := LANGOverwriteAllOlderButton_Caption; OverwriteAllOlderButton.OnClick := @ButtonClick; SkipAllButton := TGTKButton.Create(Self); SkipAllButton.Caption := LANGSkipAllButton_Caption; SkipAllButton.OnClick := @ButtonClick; RenameButton := TGTKButton.Create(Self); RenameButton.Caption := LANGRenameButton_Caption; RenameButton.OnClick := @ButtonClick; AppendButton := TGTKButton.Create(Self); AppendButton.Caption := LANGAppendButton_Caption; AppendButton.OnClick := @ButtonClick; ButtonGrid := TGTKGrid.Create(Self); ButtonGrid.RowSpacing := 3; ButtonGrid.ColSpacing := 3; ButtonGrid.RowHomogeneous := True; ButtonGrid.ColHomogeneous := True; FromVBox := TGTKVBox.Create(Self); FromVBox.AddControlEx(FromLabel, True, True, 0); FromVBox.AddControlEx(FromInfoLabel, True, True, 0); ToVBox := TGTKVBox.Create(Self); ToVBox.AddControlEx(ToLabel, True, True, 0); ToVBox.AddControlEx(ToInfoLabel, True, True, 0); ClientArea.AddControlEx(FromVBox, True, True, 5); ClientArea.AddControlEx(ToVBox, True, True, 5); ActionArea.AddControlEx(ButtonGrid, True, True, 0); OnKeyDown := @FormKeyDown; end; procedure TFOverwrite.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean); begin if (Key = gdk_keyval_to_lower(gdk_keyval_from_name(PChar(ExtractAccelerator(LANGCancel))))) then ModalResult := TMessageButton(OVERWRITE_CANCEL) else if (Key = gdk_keyval_to_lower(gdk_keyval_from_name(PChar(ExtractAccelerator(LANGOverwriteButton_Caption))))) then ModalResult := TMessageButton(OVERWRITE_OVERWRITE) else if (Key = gdk_keyval_to_lower(gdk_keyval_from_name(PChar(ExtractAccelerator(LANGOverwriteAllButton_Caption))))) then ModalResult := TMessageButton(OVERWRITE_OVERWRITE_ALL) else if (Key = gdk_keyval_to_lower(gdk_keyval_from_name(PChar(ExtractAccelerator(LANGSkipButton_Caption))))) then ModalResult := TMessageButton(OVERWRITE_SKIP) else if (Key = gdk_keyval_to_lower(gdk_keyval_from_name(PChar(ExtractAccelerator(LANGOverwriteAllOlderButton_Caption))))) then ModalResult := TMessageButton(OVERWRITE_OVERWRITE_ALL_OLDER) else if (Key = gdk_keyval_to_lower(gdk_keyval_from_name(PChar(ExtractAccelerator(LANGSkipAllButton_Caption))))) then ModalResult := TMessageButton(OVERWRITE_SKIP_ALL) else if (Key = gdk_keyval_to_lower(gdk_keyval_from_name(PChar(ExtractAccelerator(LANGRenameButton_Caption))))) then DoRename else if (Key = gdk_keyval_to_lower(gdk_keyval_from_name(PChar(ExtractAccelerator(LANGAppendButton_Caption))))) then DoAppend else if (Key = GDK_KEY_Escape) then ModalResult := TMessageButton(OVERWRITE_CANCEL); end; procedure TFOverwrite.AddButtons(ShowAppend: boolean); begin ButtonGrid.AddControl(0, 0, 1, 1, OverwriteButton); ButtonGrid.AddControl(1, 0, 1, 1, OverwriteAllButton); ButtonGrid.AddControl(2, 0, 1, 1, SkipButton); ButtonGrid.AddControl(0, 1, 1, 1, CancelButton); ButtonGrid.AddControl(1, 1, 1, 1, OverwriteAllOlderButton); ButtonGrid.AddControl(2, 1, 1, 1, SkipAllButton); ButtonGrid.AddControl(0, 2, 1, 1, RenameButton); if ShowAppend then ButtonGrid.AddControl(1, 2, 1, 1, AppendButton); end; procedure TFOverwrite.ButtonClick(Sender: TObject); begin if Sender = OverwriteButton then ModalResult := TMessageButton(OVERWRITE_OVERWRITE) else if Sender = OverwriteAllButton then ModalResult := TMessageButton(OVERWRITE_OVERWRITE_ALL) else if Sender = SkipButton then ModalResult := TMessageButton(OVERWRITE_SKIP) else if Sender = CancelButton then ModalResult := TMessageButton(OVERWRITE_CANCEL) else if Sender = OverwriteAllOlderButton then ModalResult := TMessageButton(OVERWRITE_OVERWRITE_ALL_OLDER) else if Sender = SkipAllButton then ModalResult := TMessageButton(OVERWRITE_SKIP_ALL) else if Sender = RenameButton then DoRename else if Sender = AppendButton then DoAppend; end; procedure TFOverwrite.DoRename; var AFCopyMove: TFCopyMove; begin AFCopyMove := TFCopyMove.Create(Self); try AFCopyMove.Entry.Text := RenameStr; AFCopyMove.Caption := LANGRename; AFCopyMove.Label1.Caption := Format(LANGRenameFile, [RenameStr]); AFCopyMove.Entry.SelectAll; if AFCopyMove.Run = mbOK then begin RenameStr := AFCopyMove.Entry.Text; ModalResult := TMessageButton(OVERWRITE_RENAME); end; finally AFCopyMove.Free; end; end; procedure TFOverwrite.DoAppend; begin if Application.MessageBox(PGtkWindow(FWidget), Format(LANGAppendQuestion, [StrToUTF8(ExtractFileName(SourceFile)), StrToUTF8(ExtractFileName(DestFile))]), [mbYes, mbNo], mbQuestion, mbNone, mbNo) = mbYes then ModalResult := TMessageButton(OVERWRITE_APPEND); end; end.