mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
411 lines
12 KiB
ObjectPascal
411 lines
12 KiB
ObjectPascal
{-------------------------------------------------------------------------------
|
|
The contents of this file are subject to the Mozilla Public License
|
|
Version 1.1 (the "License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/
|
|
|
|
Software distributed under the License is distributed on an "AS IS" basis,
|
|
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
|
the specific language governing rights and limitations under the License.
|
|
|
|
The Original Code is: SynEditKeyCmdsEditor.pas, released 2000-04-07.
|
|
The Original Code is based on the mwKeyCmdsEditor.pas file from the
|
|
mwEdit component suite by Martin Waldenburg and other developers, the Initial
|
|
Author of this file is Brad Stowers.
|
|
All Rights Reserved.
|
|
|
|
Contributors to the SynEdit and mwEdit projects are listed in the
|
|
Contributors.txt file.
|
|
|
|
Alternatively, the contents of this file may be used under the terms of the
|
|
GNU General Public License Version 2 or later (the "GPL"), in which case
|
|
the provisions of the GPL are applicable instead of those above.
|
|
If you wish to allow use of your version of this file only under the terms
|
|
of the GPL and not to allow others to use your version of this file
|
|
under the MPL, indicate your decision by deleting the provisions above and
|
|
replace them with the notice and other provisions required by the GPL.
|
|
If you do not delete the provisions above, a recipient may use your version
|
|
of this file under either the MPL or the GPL.
|
|
|
|
$Id: SynEditKeyCmdsEditor.pas,v 1.10.2.2 2004/12/10 15:31:05 maelh Exp $
|
|
|
|
You may retrieve the latest version of this file at the SynEdit home page,
|
|
located at http://SynEdit.SourceForge.net
|
|
|
|
Known Issues:
|
|
-------------------------------------------------------------------------------}
|
|
|
|
{$IFNDEF QSYNEDITKEYCMDSEDITOR}
|
|
unit SynEditKeyCmdsEditor;
|
|
{$ENDIF}
|
|
|
|
{$I SynEdit.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF SYN_COMPILER_15_UP}
|
|
Types,
|
|
{$ENDIF}
|
|
{$IFDEF SYN_COMPILER_17_UP}
|
|
UITypes,
|
|
{$ENDIF}
|
|
Windows,
|
|
Messages,
|
|
Graphics,
|
|
Controls,
|
|
Forms,
|
|
Dialogs,
|
|
ComCtrls,
|
|
Menus,
|
|
StdCtrls,
|
|
Buttons,
|
|
ExtCtrls,
|
|
SynEditKeyCmds,
|
|
SysUtils,
|
|
Classes;
|
|
|
|
type
|
|
TSynEditKeystrokesEditorForm = class(TForm)
|
|
pnlBottom: TPanel;
|
|
lnlInfo: TLabel;
|
|
lnlInfo2: TLabel;
|
|
btnAdd: TButton;
|
|
btnEdit: TButton;
|
|
btnDelete: TButton;
|
|
btnClear: TButton;
|
|
btnReset: TButton;
|
|
btnOK: TButton;
|
|
btnCancel: TButton;
|
|
pnlCommands: TPanel;
|
|
KeyCmdList: TListView;
|
|
procedure FormResize(Sender: TObject);
|
|
procedure btnAddClick(Sender: TObject);
|
|
procedure btnEditClick(Sender: TObject);
|
|
procedure btnDeleteClick(Sender: TObject);
|
|
procedure btnResetClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure btnClearClick(Sender: TObject);
|
|
procedure btnOKClick(Sender: TObject);
|
|
procedure btnCancelClick(Sender: TObject);
|
|
procedure KeyCmdListClick(Sender: TObject);
|
|
private
|
|
FKeystrokes: TSynEditKeystrokes;
|
|
FExtended: Boolean;
|
|
procedure SetKeystrokes(const Value: TSynEditKeyStrokes);
|
|
procedure UpdateKeystrokesList;
|
|
procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
|
|
message WM_GETMINMAXINFO;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
|
|
property Keystrokes: TSynEditKeyStrokes read FKeystrokes write SetKeystrokes;
|
|
property ExtendedString: Boolean read FExtended write FExtended;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
uses
|
|
SynEditKeyCmdEditor,
|
|
SynEditStrConst;
|
|
|
|
{ TSynEditKeystrokesEditorForm }
|
|
|
|
constructor TSynEditKeystrokesEditorForm.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FKeystrokes := nil;
|
|
end;
|
|
|
|
destructor TSynEditKeystrokesEditorForm.Destroy;
|
|
begin
|
|
if Assigned(FKeystrokes) then FKeystrokes.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TSynEditKeystrokesEditorForm.SetKeystrokes(const Value:
|
|
TSynEditKeyStrokes);
|
|
begin
|
|
if FKeystrokes = nil then
|
|
FKeystrokes := TSynEditKeyStrokes.Create(Self);
|
|
FKeystrokes.Assign(Value);
|
|
UpdateKeystrokesList;
|
|
end;
|
|
|
|
procedure TSynEditKeystrokesEditorForm.UpdateKeystrokesList;
|
|
var
|
|
x: Integer;
|
|
begin
|
|
KeyCmdList.Items.BeginUpdate;
|
|
try
|
|
KeyCmdList.Items.Clear;
|
|
for x := 0 to FKeystrokes.Count-1 do
|
|
begin
|
|
with KeyCmdList.Items.Add do
|
|
begin
|
|
if FExtended then
|
|
Caption := ConvertCodeStringToExtended(EditorCommandToCodeString(FKeystrokes[x].Command))
|
|
else Caption := EditorCommandToCodeString(FKeystrokes[x].Command);
|
|
if FKeystrokes[x].ShortCut = 0 then
|
|
SubItems.Add(SYNS_ShortCutNone)
|
|
else
|
|
if FKeystrokes[x].ShortCut2 = 0 then
|
|
SubItems.Add(Menus.ShortCutToText(FKeystrokes[x].ShortCut))
|
|
else
|
|
SubItems.Add(Menus.ShortCutToText(FKeystrokes[x].ShortCut)+ ' '+
|
|
Menus.ShortCutToText(FKeystrokes[x].ShortCut2));
|
|
end;
|
|
end;
|
|
finally
|
|
KeyCmdList.Items.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TSynEditKeystrokesEditorForm.FormResize(Sender: TObject);
|
|
begin
|
|
pnlBottom.Width := pnlBottom.Left + ClientWidth - 25;
|
|
pnlBottom.Height := ClientHeight - 11;
|
|
pnlCommands.Width := ClientWidth - 136;
|
|
pnlCommands.Height := ClientHeight - 75;
|
|
|
|
btnAdd.Left := pnlCommands.Left + pnlCommands.Width + 14;
|
|
btnEdit.Left := pnlCommands.Left + pnlCommands.Width + 14;
|
|
btnDelete.Left := pnlCommands.Left + pnlCommands.Width + 14;
|
|
btnClear.Left := pnlCommands.Left + pnlCommands.Width + 14;
|
|
btnReset.Left := pnlCommands.Left + pnlCommands.Width + 14;
|
|
|
|
btnOK.Left := pnlCommands.Left + pnlCommands.Width + 14;
|
|
btnOK.Top := pnlCommands.Top + pnlCommands.Height - 19;
|
|
btnCancel.Left := pnlCommands.Left + pnlCommands.Width + 14;
|
|
btnCancel.Top := pnlCommands.Top + pnlCommands.Height + 13;
|
|
|
|
lnlInfo.Top := pnlCommands.Top + pnlCommands.Height + 11;
|
|
lnlInfo2.Top := pnlCommands.Top + pnlCommands.Height + 27;
|
|
end;
|
|
|
|
procedure TSynEditKeystrokesEditorForm.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
|
|
begin
|
|
inherited;
|
|
Msg.MinMaxInfo.ptMinTrackSize := Point(300, 225);
|
|
end;
|
|
|
|
procedure TSynEditKeystrokesEditorForm.btnAddClick(Sender: TObject); //DDH 10/16/01 Begin (reworked proc)
|
|
var
|
|
NewStroke: TSynEditKeyStroke;
|
|
AForm : TSynEditKeystrokeEditorForm;
|
|
|
|
function AddKeyStroke: Boolean;
|
|
var
|
|
KeyLoc: Integer;
|
|
TmpCommand: string;
|
|
begin
|
|
Result := False;
|
|
KeyLoc := 0;
|
|
if AForm.ShowModal = mrOK then
|
|
begin
|
|
Result := True;
|
|
NewStroke := FKeystrokes.Add;
|
|
NewStroke.Command := AForm.Command;
|
|
try
|
|
KeyLoc := TSynEditKeyStrokes(NewStroke.Collection).FindShortcut2(AForm.Keystroke, AForm.Keystroke2);
|
|
NewStroke.ShortCut := AForm.Keystroke;
|
|
NewStroke.ShortCut2 := AForm.Keystroke2;
|
|
except
|
|
on ESynKeyError do
|
|
begin
|
|
// Shortcut already exists in the collection!
|
|
if FExtended then
|
|
TmpCommand := ConvertCodeStringToExtended(EditorCommandToCodeString(TSynEditKeyStrokes(NewStroke.Collection).Items[KeyLoc].Command))
|
|
else TmpCommand := EditorCommandToCodeString(TSynEditKeyStrokes(NewStroke.Collection).Items[KeyLoc].Command);
|
|
|
|
Result := MessageDlg(Format(SYNS_DuplicateShortcutMsg,
|
|
[Menus.ShortCutToText(AForm.Keystroke), TmpCommand]),
|
|
mtError, [mbOK, mbCancel], 0) = mrOK;
|
|
NewStroke.Free;
|
|
|
|
if Result then
|
|
Result := AddKeyStroke;
|
|
end;
|
|
// Some other kind of exception, we don't deal with it...
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
AForm := TSynEditKeystrokeEditorForm.Create(Self);
|
|
with AForm do
|
|
try
|
|
Caption := 'Add Keystroke';
|
|
ExtendedString := self.ExtendedString;
|
|
Command := ecNone;
|
|
Keystroke := 0;
|
|
Keystroke2 := 0;
|
|
|
|
if AddKeyStroke then
|
|
begin
|
|
|
|
with KeyCmdList.Items.Add do
|
|
begin
|
|
if FExtended then
|
|
Caption := ConvertCodeStringToExtended(EditorCommandToCodeString(NewStroke.Command))
|
|
else Caption := EditorCommandToCodeString(NewStroke.Command);
|
|
if NewStroke.ShortCut = 0 then
|
|
SubItems.Add(SYNS_ShortcutNone)
|
|
else
|
|
if NewStroke.ShortCut2 = 0 then
|
|
SubItems.Add(Menus.ShortCutToText(NewStroke.ShortCut))
|
|
else
|
|
SubItems.Add(Menus.ShortCutToText(NewStroke.ShortCut)+ ' '+
|
|
Menus.ShortCutToText(NewStroke.ShortCut2));
|
|
end;
|
|
end;
|
|
finally
|
|
AForm.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TSynEditKeystrokesEditorForm.btnEditClick(Sender: TObject);
|
|
var
|
|
SelItem: TListItem;
|
|
OldShortcut: TShortcut;
|
|
OldShortcut2: TShortcut;
|
|
AForm: TSynEditKeystrokeEditorForm;
|
|
|
|
function EditKeyStroke: Boolean;
|
|
var
|
|
KeyLoc: Integer;
|
|
TmpCommand: string;
|
|
begin
|
|
Result := False;
|
|
KeyLoc := 0;
|
|
if AForm.ShowModal = mrOK then
|
|
begin
|
|
Result := True;
|
|
OldShortCut := FKeystrokes[SelItem.Index].ShortCut;
|
|
OldShortCut2 := FKeystrokes[SelItem.Index].ShortCut2;
|
|
|
|
try
|
|
KeyLoc := TSynEditKeyStrokes(FKeystrokes[SelItem.Index].Collection).FindShortcut2(AForm.Keystroke, AForm.Keystroke2);
|
|
FKeystrokes[SelItem.Index].Command := AForm.Command;
|
|
FKeystrokes[SelItem.Index].ShortCut := AForm.Keystroke;
|
|
FKeystrokes[SelItem.Index].ShortCut2 := AForm.Keystroke2;
|
|
except
|
|
on ESynKeyError do
|
|
begin
|
|
// Shortcut already exists in the collection!
|
|
if FExtended then
|
|
TmpCommand := ConvertCodeStringToExtended(EditorCommandToCodeString(TSynEditKeyStrokes(FKeystrokes[SelItem.Index].Collection).Items[KeyLoc].Command))
|
|
else TmpCommand := EditorCommandToCodeString(TSynEditKeyStrokes(FKeystrokes[SelItem.Index].Collection).Items[KeyLoc].Command);
|
|
|
|
Result := MessageDlg(Format(SYNS_DuplicateShortcutMsg,
|
|
[Menus.ShortCutToText(AForm.Keystroke), TmpCommand]),
|
|
mtError, [mbOK, mbCancel], 0) = mrOK;
|
|
|
|
FKeystrokes[SelItem.Index].ShortCut := OldShortCut;
|
|
FKeystrokes[SelItem.Index].ShortCut2 := OldShortCut2;
|
|
|
|
if Result then
|
|
Result := EditKeyStroke;
|
|
end;
|
|
// Some other kind of exception, we don't deal with it...
|
|
end;
|
|
end;
|
|
end;
|
|
begin
|
|
SelItem := KeyCmdList.Selected;
|
|
if SelItem = NIL then
|
|
begin
|
|
MessageBeep(1);
|
|
Exit;
|
|
end;
|
|
AForm := TSynEditKeystrokeEditorForm.Create(Self);
|
|
with AForm do
|
|
try
|
|
ExtendedString := self.ExtendedString;
|
|
Command := FKeystrokes[SelItem.Index].Command;
|
|
Keystroke := FKeystrokes[SelItem.Index].Shortcut;
|
|
Keystroke2 := FKeystrokes[SelItem.Index].Shortcut2;
|
|
if EditKeyStroke then
|
|
begin
|
|
KeyCmdList.Items.BeginUpdate;
|
|
try
|
|
with SelItem do
|
|
begin
|
|
|
|
if FExtended then
|
|
Caption := ConvertCodeStringToExtended(EditorCommandToCodeString(FKeystrokes[Index].Command))
|
|
else Caption := EditorCommandToCodeString(FKeystrokes[Index].Command);
|
|
|
|
if FKeystrokes[Index].ShortCut = 0 then
|
|
SubItems[0] := SYNS_ShortcutNone
|
|
else
|
|
if FKeystrokes[Index].ShortCut2 = 0 then
|
|
SubItems[0] := Menus.ShortCutToText(FKeystrokes[Index].ShortCut)
|
|
else
|
|
SubItems[0] := Menus.ShortCutToText(FKeystrokes[Index].ShortCut)
|
|
+ ' ' + Menus.ShortCutToText(FKeystrokes[Index].ShortCut2);
|
|
end;
|
|
finally
|
|
KeyCmdList.Items.EndUpdate;
|
|
end;
|
|
end;
|
|
finally
|
|
AForm.Free;
|
|
end;
|
|
end; //DDH 10/16/01 End (reworked procs)
|
|
|
|
procedure TSynEditKeystrokesEditorForm.btnDeleteClick(Sender: TObject);
|
|
var
|
|
SelItem: TListItem;
|
|
begin
|
|
SelItem := KeyCmdList.Selected;
|
|
if SelItem = nil then
|
|
begin
|
|
MessageBeep(1);
|
|
Exit;
|
|
end;
|
|
FKeystrokes[SelItem.Index].Free;
|
|
KeyCmdList.Items.Delete(SelItem.Index);
|
|
end;
|
|
|
|
procedure TSynEditKeystrokesEditorForm.btnClearClick(Sender: TObject);
|
|
begin
|
|
FKeystrokes.Clear;
|
|
KeyCmdList.Items.Clear;
|
|
end;
|
|
|
|
procedure TSynEditKeystrokesEditorForm.btnResetClick(Sender: TObject);
|
|
begin
|
|
FKeystrokes.ResetDefaults;
|
|
UpdateKeystrokesList;
|
|
end;
|
|
|
|
procedure TSynEditKeystrokesEditorForm.FormCreate(Sender: TObject);
|
|
begin
|
|
{$IFDEF SYN_COMPILER_3_UP}
|
|
KeyCmdList.RowSelect := True;
|
|
{$ENDIF}
|
|
end;
|
|
|
|
procedure TSynEditKeystrokesEditorForm.btnOKClick(Sender: TObject);
|
|
begin
|
|
ModalResult := mrOK;
|
|
end;
|
|
|
|
procedure TSynEditKeystrokesEditorForm.btnCancelClick(Sender: TObject);
|
|
begin
|
|
ModalResult := mrCancel;
|
|
end;
|
|
|
|
procedure TSynEditKeystrokesEditorForm.KeyCmdListClick(Sender: TObject);
|
|
begin
|
|
btnEdit.Enabled := Assigned(KeyCmdList.Selected);
|
|
btnDelete.Enabled := btnEdit.Enabled;
|
|
end;
|
|
|
|
end.
|
|
|