|
@@ -57,12 +57,25 @@ type
|
|
|
|
|
|
TEditButtonEx = class(TEditButton)
|
|
TEditButtonEx = class(TEditButton)
|
|
private
|
|
private
|
|
|
|
+{$IFDEF LCLCOCOA}
|
|
|
|
+ originalText: String;
|
|
|
|
+ keyDownText: String;
|
|
|
|
+{$ENDIF}
|
|
|
|
+ procedure handleSpecialKeys( Key: Word );
|
|
function GetFont: TFont;
|
|
function GetFont: TFont;
|
|
procedure SetFont(AValue: TFont);
|
|
procedure SetFont(AValue: TFont);
|
|
protected
|
|
protected
|
|
function CalcButtonVisible: Boolean; override;
|
|
function CalcButtonVisible: Boolean; override;
|
|
function GetDefaultGlyphName: String; override;
|
|
function GetDefaultGlyphName: String; override;
|
|
|
|
+ procedure EditKeyDown(var Key: word; Shift: TShiftState); override;
|
|
|
|
+{$IFDEF LCLCOCOA}
|
|
|
|
+ procedure EditEnter; override;
|
|
|
|
+ procedure EditChange; override;
|
|
|
|
+ procedure EditKeyUp(var Key: word; Shift: TShiftState); override;
|
|
|
|
+{$ENDIF}
|
|
public
|
|
public
|
|
|
|
+ onKeyESCAPE: TNotifyEvent;
|
|
|
|
+ onKeyRETURN: TNotifyEvent;
|
|
property Font: TFont read GetFont write SetFont;
|
|
property Font: TFont read GetFont write SetFont;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -94,20 +107,14 @@ type
|
|
procedure edtRenameEnter(Sender: TObject);
|
|
procedure edtRenameEnter(Sender: TObject);
|
|
procedure edtRenameExit(Sender: TObject);
|
|
procedure edtRenameExit(Sender: TObject);
|
|
procedure edtRenameButtonClick(Sender: TObject);
|
|
procedure edtRenameButtonClick(Sender: TObject);
|
|
- procedure handleKey(Sender: TObject; var Key: Word; Shift: TShiftState);
|
|
|
|
- {$IFDEF LCLCOCOA}
|
|
|
|
- procedure edtRenameKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
|
|
|
- procedure edtRenameKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
|
|
|
- procedure edtRenameOnChange(Sender: TObject);
|
|
|
|
- {$ENDIF}
|
|
|
|
procedure edtRenameMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
|
|
procedure edtRenameMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
|
|
|
|
|
|
|
|
+{$IFDEF LCLWIN32}
|
|
|
|
+ procedure edtRenameKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
|
|
|
|
+{$ENDIF}
|
|
|
|
+ procedure edtRenameOnKeyESCAPE(Sender: TObject);
|
|
|
|
+ procedure edtRenameOnKeyRETURN(Sender: TObject);
|
|
protected
|
|
protected
|
|
- {$IFDEF LCLCOCOA}
|
|
|
|
- originalText: String;
|
|
|
|
- keyDownText: String;
|
|
|
|
- {$ENDIF}
|
|
|
|
-
|
|
|
|
edtRename: TEditButtonEx;
|
|
edtRename: TEditButtonEx;
|
|
FRenameFile: TFile;
|
|
FRenameFile: TFile;
|
|
FRenFile:TRenameFileEditInfo;
|
|
FRenFile:TRenameFileEditInfo;
|
|
@@ -237,6 +244,79 @@ type
|
|
|
|
|
|
{ TEditButtonEx }
|
|
{ TEditButtonEx }
|
|
|
|
|
|
|
|
+{$IFDEF LCLCOCOA}
|
|
|
|
+procedure TEditButtonEx.EditEnter;
|
|
|
|
+begin
|
|
|
|
+ inherited EditEnter;
|
|
|
|
+ self.originalText:= self.Text;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+procedure TEditButtonEx.EditChange;
|
|
|
|
+begin
|
|
|
|
+ inherited EditChange;
|
|
|
|
+ self.originalText:= self.Text;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+procedure TEditButtonEx.EditKeyDown( var Key: Word; Shift: TShiftState );
|
|
|
|
+begin
|
|
|
|
+ case Key of
|
|
|
|
+ VK_ESCAPE:
|
|
|
|
+ self.keyDownText:= self.Text;
|
|
|
|
+ VK_RETURN,
|
|
|
|
+ VK_SELECT:
|
|
|
|
+ self.keyDownText:= self.originalText
|
|
|
|
+ end;
|
|
|
|
+ inherited EditKeyDown( Key, Shift );
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+procedure TEditButtonEx.EditKeyUp( var Key: Word; Shift: TShiftState );
|
|
|
|
+begin
|
|
|
|
+ case Key of
|
|
|
|
+ VK_ESCAPE,
|
|
|
|
+ VK_RETURN,
|
|
|
|
+ VK_SELECT:
|
|
|
|
+ if self.text=self.keyDownText then
|
|
|
|
+ // from the text has not been changed,
|
|
|
|
+ // the EditButton is not in the IME state
|
|
|
|
+ handleSpecialKeys( Key )
|
|
|
|
+ else
|
|
|
|
+ Key:= 0;
|
|
|
|
+ end;
|
|
|
|
+ inherited EditKeyUp( Key, Shift );
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+{$ELSE}
|
|
|
|
+
|
|
|
|
+procedure TEditButtonEx.EditKeyDown(var Key: Word; Shift: TShiftState);
|
|
|
|
+begin
|
|
|
|
+ inherited EditKeyDown(Key, Shift);
|
|
|
|
+
|
|
|
|
+ case Key of
|
|
|
|
+ VK_ESCAPE,
|
|
|
|
+ VK_RETURN,
|
|
|
|
+ VK_SELECT:
|
|
|
|
+ handleSpecialKeys( Key );
|
|
|
|
+
|
|
|
|
+{$IFDEF LCLGTK2}
|
|
|
|
+ // Workaround for GTK2 - up and down arrows moving through controls.
|
|
|
|
+ VK_UP,
|
|
|
|
+ VK_DOWN:
|
|
|
|
+ Key := 0;
|
|
|
|
+{$ENDIF}
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+{$ENDIF}
|
|
|
|
+
|
|
|
|
+procedure TEditButtonEx.handleSpecialKeys( Key: Word );
|
|
|
|
+begin
|
|
|
|
+ if Key=VK_ESCAPE then begin
|
|
|
|
+ if Assigned(onKeyESCAPE) then onKeyESCAPE( self );
|
|
|
|
+ end else begin
|
|
|
|
+ if Assigned(onKeyRETURN) then onKeyRETURN( self );
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
function TEditButtonEx.GetFont: TFont;
|
|
function TEditButtonEx.GetFont: TFont;
|
|
begin
|
|
begin
|
|
Result:= BaseEditor.Font;
|
|
Result:= BaseEditor.Font;
|
|
@@ -259,6 +339,60 @@ end;
|
|
|
|
|
|
{ TFileViewWithMainCtrl }
|
|
{ TFileViewWithMainCtrl }
|
|
|
|
|
|
|
|
+
|
|
|
|
+{$IFDEF LCLWIN32}
|
|
|
|
+procedure TFileViewWithMainCtrl.edtRenameKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
|
|
|
|
+begin
|
|
|
|
+ case Key of
|
|
|
|
+ // Workaround for Win32 - right arrow must clear selection at first move.
|
|
|
|
+ VK_RIGHT:
|
|
|
|
+ begin
|
|
|
|
+ if (Win32MajorVersion < 10) and (Shift = []) and (edtRename.SelLength > 0) then
|
|
|
|
+ begin
|
|
|
|
+ Key := edtRename.CaretPos.X;
|
|
|
|
+ edtRename.SelLength := 0;
|
|
|
|
+ edtRename.CaretPos := Classes.Point(Key, 0);
|
|
|
|
+ Key := 0;
|
|
|
|
+ end;
|
|
|
|
+ FRenFile.UserManualEdit:=True; // user begin manual edit - no need cycle Name,Ext,FullName selection
|
|
|
|
+ end;
|
|
|
|
+ VK_LEFT:
|
|
|
|
+ FRenFile.UserManualEdit:=True; // user begin manual edit - no need cycle Name,Ext,FullName selection
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+{$ENDIF}
|
|
|
|
+
|
|
|
|
+procedure TFileViewWithMainCtrl.edtRenameOnKeyESCAPE(Sender: TObject);
|
|
|
|
+begin
|
|
|
|
+ edtRename.Visible:=False;
|
|
|
|
+ SetFocus;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+procedure TFileViewWithMainCtrl.edtRenameOnKeyRETURN(Sender: TObject);
|
|
|
|
+var
|
|
|
|
+ NewFileName: String;
|
|
|
|
+ OldFileNameAbsolute: String;
|
|
|
|
+begin
|
|
|
|
+ NewFileName := edtRename.Text;
|
|
|
|
+ OldFileNameAbsolute := edtRename.Hint;
|
|
|
|
+
|
|
|
|
+ try
|
|
|
|
+ case RenameFile(FileSource, FRenameFile, NewFileName, True) of
|
|
|
|
+ sfprSuccess:
|
|
|
|
+ begin
|
|
|
|
+ edtRename.Visible:=False;
|
|
|
|
+ SetActiveFile(CurrentPath + NewFileName);
|
|
|
|
+ SetFocus;
|
|
|
|
+ end;
|
|
|
|
+ sfprError:
|
|
|
|
+ msgError(Format(rsMsgErrRename, [ExtractFileName(OldFileNameAbsolute), NewFileName]));
|
|
|
|
+ end;
|
|
|
|
+ except
|
|
|
|
+ on e: EInvalidFileProperty do
|
|
|
|
+ msgError(Format(rsMsgErrRename + ':' + LineEnding + '%s (%s)', [ExtractFileName(OldFileNameAbsolute), NewFileName, rsMsgInvalidFileName, e.Message]));
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TFileViewWithMainCtrl.ClearAfterDragDrop;
|
|
procedure TFileViewWithMainCtrl.ClearAfterDragDrop;
|
|
begin
|
|
begin
|
|
tmMouseScroll.Enabled := False;
|
|
tmMouseScroll.Enabled := False;
|
|
@@ -316,13 +450,11 @@ begin
|
|
edtRename.Visible := False;
|
|
edtRename.Visible := False;
|
|
edtRename.TabStop := False;
|
|
edtRename.TabStop := False;
|
|
edtRename.AutoSize := False;
|
|
edtRename.AutoSize := False;
|
|
- {$IFDEF LCLCOCOA}
|
|
|
|
- edtRename.OnKeyDown := @edtRenameKeyDown;
|
|
|
|
- edtRename.OnKeyUp := @edtRenameKeyUp;
|
|
|
|
- edtRename.OnChange := @edtRenameOnChange;
|
|
|
|
- {$ELSE}
|
|
|
|
- edtRename.OnKeyDown := @handleKey;
|
|
|
|
- {$ENDIF}
|
|
|
|
|
|
+{$IFDEF LCLWIN32}
|
|
|
|
+ edtRename.onKeyDown:=@edtRenameKeyDown;
|
|
|
|
+{$ENDIF}
|
|
|
|
+ edtRename.onKeyESCAPE:=@edtRenameOnKeyESCAPE;
|
|
|
|
+ edtRename.onKeyRETURN:=@edtRenameOnKeyRETURN;
|
|
edtRename.OnMouseDown:=@edtRenameMouseDown;
|
|
edtRename.OnMouseDown:=@edtRenameMouseDown;
|
|
edtRename.OnEnter := @edtRenameEnter;
|
|
edtRename.OnEnter := @edtRenameEnter;
|
|
edtRename.OnExit := @edtRenameExit;
|
|
edtRename.OnExit := @edtRenameExit;
|
|
@@ -1444,9 +1576,6 @@ end;
|
|
|
|
|
|
procedure TFileViewWithMainCtrl.edtRenameEnter(Sender: TObject);
|
|
procedure TFileViewWithMainCtrl.edtRenameEnter(Sender: TObject);
|
|
begin
|
|
begin
|
|
- {$IFDEF LCLCOCOA}
|
|
|
|
- originalText:= edtRename.Text;
|
|
|
|
- {$ENDIF}
|
|
|
|
FWindowProc:= MainControl.WindowProc;
|
|
FWindowProc:= MainControl.WindowProc;
|
|
MainControl.WindowProc:= @MainControlWindowProc;
|
|
MainControl.WindowProc:= @MainControlWindowProc;
|
|
end;
|
|
end;
|
|
@@ -1463,115 +1592,9 @@ begin
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TFileViewWithMainCtrl.edtRenameButtonClick(Sender: TObject);
|
|
procedure TFileViewWithMainCtrl.edtRenameButtonClick(Sender: TObject);
|
|
-var
|
|
|
|
- Key: Word = VK_RETURN;
|
|
|
|
-begin
|
|
|
|
- handleKey(Sender, Key, []);
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
-{$IFDEF LCLCOCOA}
|
|
|
|
-procedure TFileViewWithMainCtrl.edtRenameKeyDown(Sender: TObject;
|
|
|
|
- var Key: Word; Shift: TShiftState);
|
|
|
|
-begin
|
|
|
|
- if key=VK_RETURN then
|
|
|
|
- keyDownText:= originalText
|
|
|
|
- else if key=VK_ESCAPE then
|
|
|
|
- keyDownText:= edtRename.Text;
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
-procedure TFileViewWithMainCtrl.edtRenameOnChange(Sender: TObject);
|
|
|
|
-begin
|
|
|
|
- originalText:= edtRename.Text;
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
-procedure TFileViewWithMainCtrl.edtRenameKeyUp(Sender: TObject;
|
|
|
|
- var Key: Word; Shift: TShiftState);
|
|
|
|
-var
|
|
|
|
- currentText: String;
|
|
|
|
begin
|
|
begin
|
|
- currentText:= edtRename.Text;
|
|
|
|
- if (Key=VK_RETURN) or (key=VK_ESCAPE) then
|
|
|
|
- begin
|
|
|
|
- if currentText<>keyDownText then
|
|
|
|
- begin
|
|
|
|
- // From the text has been changed,
|
|
|
|
- // the EditButton is in the IME state, just return
|
|
|
|
- Key:= 0;
|
|
|
|
- exit;
|
|
|
|
- end;
|
|
|
|
- end;
|
|
|
|
- handleKey( Sender, Key, Shift );
|
|
|
|
|
|
+ edtRenameOnKeyRETURN(Sender);
|
|
end;
|
|
end;
|
|
-{$ENDIF}
|
|
|
|
-
|
|
|
|
-procedure TFileViewWithMainCtrl.handleKey(Sender: TObject;
|
|
|
|
- var Key: Word; Shift: TShiftState);
|
|
|
|
-var
|
|
|
|
- NewFileName: String;
|
|
|
|
- OldFileNameAbsolute: String;
|
|
|
|
-begin
|
|
|
|
-
|
|
|
|
- case Key of
|
|
|
|
- VK_ESCAPE:
|
|
|
|
- begin
|
|
|
|
- Key := 0;
|
|
|
|
- edtRename.Visible:=False;
|
|
|
|
- SetFocus;
|
|
|
|
- end;
|
|
|
|
-
|
|
|
|
- VK_RETURN,
|
|
|
|
- VK_SELECT:
|
|
|
|
- begin
|
|
|
|
- Key := 0; // catch the enter
|
|
|
|
-
|
|
|
|
- NewFileName := edtRename.Text;
|
|
|
|
- OldFileNameAbsolute := edtRename.Hint;
|
|
|
|
-
|
|
|
|
- try
|
|
|
|
- case RenameFile(FileSource, FRenameFile, NewFileName, True) of
|
|
|
|
- sfprSuccess:
|
|
|
|
- begin
|
|
|
|
- edtRename.Visible:=False;
|
|
|
|
- SetActiveFile(CurrentPath + NewFileName);
|
|
|
|
- SetFocus;
|
|
|
|
- end;
|
|
|
|
- sfprError:
|
|
|
|
- msgError(Format(rsMsgErrRename, [ExtractFileName(OldFileNameAbsolute), NewFileName]));
|
|
|
|
- end;
|
|
|
|
-
|
|
|
|
- except
|
|
|
|
- on e: EInvalidFileProperty do
|
|
|
|
- msgError(Format(rsMsgErrRename + ':' + LineEnding + '%s (%s)', [ExtractFileName(OldFileNameAbsolute), NewFileName, rsMsgInvalidFileName, e.Message]));
|
|
|
|
- end;
|
|
|
|
- end;
|
|
|
|
-
|
|
|
|
-{$IFDEF LCLGTK2}
|
|
|
|
- // Workaround for GTK2 - up and down arrows moving through controls.
|
|
|
|
- VK_UP,
|
|
|
|
- VK_DOWN:
|
|
|
|
- Key := 0;
|
|
|
|
-{$ENDIF}
|
|
|
|
-
|
|
|
|
-{$IFDEF LCLWIN32}
|
|
|
|
- // Workaround for Win32 - right arrow must clear selection at first move.
|
|
|
|
- VK_RIGHT:
|
|
|
|
- begin
|
|
|
|
- if (Shift = []) and (edtRename.SelLength > 0) then
|
|
|
|
- begin
|
|
|
|
- Key := edtRename.CaretPos.X;
|
|
|
|
- edtRename.SelLength := 0;
|
|
|
|
- edtRename.CaretPos := Classes.Point(Key, 0);
|
|
|
|
- Key := 0;
|
|
|
|
- end;
|
|
|
|
- FRenFile.UserManualEdit:=True; // user begin manual edit - no need cycle Name,Ext,FullName selection
|
|
|
|
- end;
|
|
|
|
- VK_LEFT:
|
|
|
|
- FRenFile.UserManualEdit:=True; // user begin manual edit - no need cycle Name,Ext,FullName selection
|
|
|
|
-
|
|
|
|
-{$ENDIF}
|
|
|
|
- end;
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
|
|
|
|
procedure TFileViewWithMainCtrl.edtRenameMouseDown(Sender: TObject;
|
|
procedure TFileViewWithMainCtrl.edtRenameMouseDown(Sender: TObject;
|
|
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|