mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-26 11:17:57 +08:00
Issue #744: Shortcut settings: Let user know whether a wanted shortcut is assigned to another action, and prompt for confirmation in such cases.
This commit is contained in:
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: HeidiSQL\n"
|
||||
"POT-Creation-Date: 2012-11-05 21:40\n"
|
||||
"PO-Revision-Date: 2020-12-02 17:29+0100\n"
|
||||
"PO-Revision-Date: 2020-12-21 21:08+0100\n"
|
||||
"Last-Translator: Ansgar Becker <anse@heidisql.com>\n"
|
||||
"Language-Team: English (http://www.transifex.com/projects/p/heidisql/language/en/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -6610,3 +6610,11 @@ msgstr "Current query is empty"
|
||||
|
||||
msgid "Please move the cursor inside the query you want to use."
|
||||
msgstr "Please move the cursor inside the query you want to use."
|
||||
|
||||
#. Keyboard shortcut settings
|
||||
msgid "Keyboard shortcut [%s] is already assigned to \"%s\"."
|
||||
msgstr "Keyboard shortcut [%s] is already assigned to \"%s\"."
|
||||
|
||||
#. Keyboard shortcut settings
|
||||
msgid "Remove it there and assign to \"%s\" instead?"
|
||||
msgstr "Remove it there and assign to \"%s\" instead?"
|
||||
|
@ -1256,7 +1256,7 @@ object optionsform: Toptionsform
|
||||
HotKey = 0
|
||||
Modifiers = []
|
||||
TabOrder = 1
|
||||
OnChange = HotKey1Change
|
||||
OnChange = HotKeyChange
|
||||
OnEnter = HotKeyEnter
|
||||
OnExit = HotKeyExit
|
||||
end
|
||||
@ -1270,7 +1270,7 @@ object optionsform: Toptionsform
|
||||
InvalidKeys = []
|
||||
Modifiers = []
|
||||
TabOrder = 2
|
||||
OnChange = HotKey2Change
|
||||
OnChange = HotKeyChange
|
||||
OnEnter = HotKeyEnter
|
||||
OnExit = HotKeyExit
|
||||
end
|
||||
|
@ -216,8 +216,7 @@ type
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure chkThemePreviewClick(Sender: TObject);
|
||||
procedure chkCompletionProposalClick(Sender: TObject);
|
||||
procedure HotKey1Change(Sender: TObject);
|
||||
procedure HotKey2Change(Sender: TObject);
|
||||
procedure HotKeyChange(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
FWasModified: Boolean;
|
||||
@ -230,6 +229,7 @@ type
|
||||
FThemePreview: TfrmThemePreview;
|
||||
procedure InitLanguages;
|
||||
procedure SelectDirectory(Sender: TObject; NewFolderButton: Boolean);
|
||||
function EnsureShortcutIsUnused(RequestShortcut: TShortCut): Boolean;
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
@ -1222,25 +1222,74 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
procedure Toptionsform.HotKey1Change(Sender: TObject);
|
||||
function Toptionsform.EnsureShortcutIsUnused(RequestShortcut: TShortCut): Boolean;
|
||||
var
|
||||
Node, NodeWantsIt: PVirtualNode;
|
||||
Data: PShortcutItemData;
|
||||
Tree: TVirtualStringTree;
|
||||
MsgFormat, Msg: String;
|
||||
begin
|
||||
// Shortcut 1 changed
|
||||
Data := TreeShortcutItems.GetNodeData(TreeShortcutItems.FocusedNode);
|
||||
Data.Shortcut1 := (Sender as THotKey).HotKey;
|
||||
Modified(Sender);
|
||||
Result := True;
|
||||
if RequestShortcut = 0 then
|
||||
Exit;
|
||||
MsgFormat := _('Keyboard shortcut [%s] is already assigned to "%s".') + sLineBreak + sLineBreak +
|
||||
_('Remove it there and assign to "%s" instead?');
|
||||
Tree := TreeShortcutItems;
|
||||
NodeWantsIt := Tree.FocusedNode;
|
||||
Node := GetNextNode(Tree, nil, False);
|
||||
while Assigned(Node) do begin
|
||||
if Tree.GetNodeLevel(Node) = 1 then begin
|
||||
Data := Tree.GetNodeData(Node);
|
||||
Msg := Format(MsgFormat, [ShortCutToText(RequestShortcut), Tree.Text[Node, 0], Tree.Text[NodeWantsIt, 0]]);
|
||||
if Node = NodeWantsIt then begin
|
||||
// Ignore requesting node
|
||||
end else begin
|
||||
if Data.ShortCut1 = RequestShortcut then begin
|
||||
if MessageDialog(Msg, mtConfirmation, [mbYes, mbNo]) = mrYes then
|
||||
Data.ShortCut1 := 0 // Unassign shortcut 1
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
if Data.ShortCut2 = RequestShortcut then begin
|
||||
if MessageDialog(Msg, mtConfirmation, [mbYes, mbNo]) = mrYes then
|
||||
Data.ShortCut2 := 0 // Unassign shortcut 2
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if Result = False then
|
||||
Break;
|
||||
Node := GetNextNode(Tree, Node, False);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
procedure Toptionsform.HotKey2Change(Sender: TObject);
|
||||
procedure Toptionsform.HotKeyChange(Sender: TObject);
|
||||
var
|
||||
Data: PShortcutItemData;
|
||||
HotKeyEdit: THotKey;
|
||||
EventHandler: TNotifyEvent;
|
||||
begin
|
||||
// Shortcut 2 changed
|
||||
// Shortcut 1 or 2 changed
|
||||
HotKeyEdit := Sender as THotKey;
|
||||
Data := TreeShortcutItems.GetNodeData(TreeShortcutItems.FocusedNode);
|
||||
Data.Shortcut2 := (Sender as THotKey).HotKey;
|
||||
Modified(Sender);
|
||||
if EnsureShortcutIsUnused(HotKeyEdit.HotKey) then begin
|
||||
if HotKeyEdit = HotKey1 then
|
||||
Data.Shortcut1 := HotKeyEdit.HotKey
|
||||
else
|
||||
Data.Shortcut2 := HotKeyEdit.HotKey;
|
||||
Modified(Sender);
|
||||
end else begin
|
||||
// Undo change in hotkey editor, without triggering OnChange event
|
||||
EventHandler := HotKeyEdit.OnChange;
|
||||
if HotKeyEdit = HotKey1 then
|
||||
HotKeyEdit.HotKey := Data.ShortCut1
|
||||
else
|
||||
HotKeyEdit.HotKey := Data.ShortCut2;
|
||||
HotKeyEdit.OnChange := EventHandler;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user