mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 15:39:30 +02:00
IDE: Add conflict warning for External Tools keyboard shortcut. Issue #14876, patch from Ludo Brands
git-svn-id: trunk@42790 -
This commit is contained in:
parent
fdb9a6258b
commit
07d52d2075
@ -74,6 +74,7 @@ type
|
|||||||
fOnFreeOutputFilter: TOnFreeOutputFilter;
|
fOnFreeOutputFilter: TOnFreeOutputFilter;
|
||||||
fOnNeedsOutputFilter: TOnNeedsOutputFilter;
|
fOnNeedsOutputFilter: TOnNeedsOutputFilter;
|
||||||
fRunningTools: TList; // list of TProcess
|
fRunningTools: TList; // list of TProcess
|
||||||
|
fAllKeys: TKeyCommandRelationList;
|
||||||
function GetToolOpts(Index: integer): TExternalToolOptions;
|
function GetToolOpts(Index: integer): TExternalToolOptions;
|
||||||
procedure SetToolOpts(Index: integer; NewTool: TExternalToolOptions);
|
procedure SetToolOpts(Index: integer; NewTool: TExternalToolOptions);
|
||||||
procedure AddRunningTool(TheProcess: TProcess; ExecuteProcess: boolean);
|
procedure AddRunningTool(TheProcess: TProcess; ExecuteProcess: boolean);
|
||||||
@ -244,6 +245,7 @@ begin
|
|||||||
TProcess(fRunningTools[i]).Free;
|
TProcess(fRunningTools[i]).Free;
|
||||||
fRunningTools.Free;
|
fRunningTools.Free;
|
||||||
end;
|
end;
|
||||||
|
fAllKeys.Free;
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -299,6 +301,9 @@ var
|
|||||||
i: integer;
|
i: integer;
|
||||||
KeyCommandRelation: TKeyCommandRelation;
|
KeyCommandRelation: TKeyCommandRelation;
|
||||||
begin
|
begin
|
||||||
|
if not assigned(fAllKeys) then
|
||||||
|
fAllKeys:=TKeyCommandRelationList.Create;
|
||||||
|
fAllKeys.Assign(KeyCommandRelationList);
|
||||||
for i:=0 to Count-1 do begin
|
for i:=0 to Count-1 do begin
|
||||||
KeyCommandRelation:=KeyCommandRelationList.FindByCommand(ecExtToolFirst+i);
|
KeyCommandRelation:=KeyCommandRelationList.FindByCommand(ecExtToolFirst+i);
|
||||||
if KeyCommandRelation<>nil then begin
|
if KeyCommandRelation<>nil then begin
|
||||||
@ -646,7 +651,9 @@ begin
|
|||||||
{$ELSE}
|
{$ELSE}
|
||||||
NewTool:=TExternalToolOptions.Create;
|
NewTool:=TExternalToolOptions.Create;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
if ShowExtToolOptionDlg(fTransferMacros,NewTool)=mrOk then begin
|
if ShowExtToolOptionDlg(fTransferMacros, NewTool,
|
||||||
|
TExternalToolList(EnvironmentOptions.ExternalTools).fAllKeys)=mrOk then
|
||||||
|
begin
|
||||||
fExtToolList.Add(NewTool);
|
fExtToolList.Add(NewTool);
|
||||||
Listbox.Items.Add(ToolDescription(fExtToolList.Count-1));
|
Listbox.Items.Add(ToolDescription(fExtToolList.Count-1));
|
||||||
end else begin
|
end else begin
|
||||||
@ -739,8 +746,9 @@ var
|
|||||||
begin
|
begin
|
||||||
i:=Listbox.ItemIndex;
|
i:=Listbox.ItemIndex;
|
||||||
if i<0 then exit;
|
if i<0 then exit;
|
||||||
if ShowExtToolOptionDlg(fTransferMacros,fExtToolList[i])=mrOk
|
if ShowExtToolOptionDlg(fTransferMacros,fExtToolList[i],
|
||||||
then begin
|
TExternalToolList(EnvironmentOptions.ExternalTools).fAllKeys)=mrOk then
|
||||||
|
begin
|
||||||
Listbox.Items[i]:=ToolDescription(i);
|
Listbox.Items[i]:=ToolDescription(i);
|
||||||
EnableButtons;
|
EnableButtons;
|
||||||
end;
|
end;
|
||||||
|
@ -196,11 +196,13 @@ type
|
|||||||
procedure OpenButtonClick({%H-}sender : TOBject);
|
procedure OpenButtonClick({%H-}sender : TOBject);
|
||||||
procedure ScannersButtonClick(Sender: TObject);
|
procedure ScannersButtonClick(Sender: TObject);
|
||||||
private
|
private
|
||||||
|
fAllKeys: TKeyCommandRelationList;
|
||||||
fOptions: {$IFDEF EnableNewExtTools}TExternalToolMenuItem{$ELSE}TExternalToolOptions{$ENDIF};
|
fOptions: {$IFDEF EnableNewExtTools}TExternalToolMenuItem{$ELSE}TExternalToolOptions{$ENDIF};
|
||||||
fTransferMacros: TTransferMacroList;
|
fTransferMacros: TTransferMacroList;
|
||||||
fScanners: TStrings;
|
fScanners: TStrings;
|
||||||
fKeyBox: TShortCutGrabBox;
|
fKeyBox: TShortCutGrabBox;
|
||||||
procedure FillMacroList;
|
procedure FillMacroList;
|
||||||
|
function KeyConflicts(Key:word; Shift:TShiftState): TModalResult;
|
||||||
procedure LoadFromOptions;
|
procedure LoadFromOptions;
|
||||||
procedure SaveToOptions;
|
procedure SaveToOptions;
|
||||||
procedure UpdateButtons;
|
procedure UpdateButtons;
|
||||||
@ -216,19 +218,23 @@ type
|
|||||||
|
|
||||||
|
|
||||||
function ShowExtToolOptionDlg(TransferMacroList: TTransferMacroList;
|
function ShowExtToolOptionDlg(TransferMacroList: TTransferMacroList;
|
||||||
ExternalToolOptions: {$IFDEF EnableNewExtTools}TExternalToolMenuItem{$ELSE}TExternalToolOptions{$ENDIF}):TModalResult;
|
ExternalToolOptions: {$IFDEF EnableNewExtTools}TExternalToolMenuItem{$ELSE}TExternalToolOptions{$ENDIF};
|
||||||
|
AllKeys: TKeyCommandRelationList):TModalResult;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
{$R *.lfm}
|
{$R *.lfm}
|
||||||
|
|
||||||
function ShowExtToolOptionDlg(TransferMacroList: TTransferMacroList;
|
function ShowExtToolOptionDlg(TransferMacroList: TTransferMacroList;
|
||||||
ExternalToolOptions: {$IFDEF EnableNewExtTools}TExternalToolMenuItem{$ELSE}TExternalToolOptions{$ENDIF}):TModalResult;
|
ExternalToolOptions: {$IFDEF EnableNewExtTools}TExternalToolMenuItem{$ELSE}TExternalToolOptions{$ENDIF};
|
||||||
var ExternalToolOptionDlg: TExternalToolOptionDlg;
|
AllKeys: TKeyCommandRelationList):TModalResult;
|
||||||
|
var
|
||||||
|
ExternalToolOptionDlg: TExternalToolOptionDlg;
|
||||||
begin
|
begin
|
||||||
Result:=mrCancel;
|
Result:=mrCancel;
|
||||||
ExternalToolOptionDlg:=TExternalToolOptionDlg.Create(nil);
|
ExternalToolOptionDlg:=TExternalToolOptionDlg.Create(nil);
|
||||||
try
|
try
|
||||||
|
ExternalToolOptionDlg.fAllKeys:=AllKeys;
|
||||||
ExternalToolOptionDlg.Options:=ExternalToolOptions;
|
ExternalToolOptionDlg.Options:=ExternalToolOptions;
|
||||||
ExternalToolOptionDlg.MacroList:=TransferMacroList;
|
ExternalToolOptionDlg.MacroList:=TransferMacroList;
|
||||||
Result:=ExternalToolOptionDlg.ShowModal;
|
Result:=ExternalToolOptionDlg.ShowModal;
|
||||||
@ -873,6 +879,60 @@ begin
|
|||||||
MacrosListbox.Items.EndUpdate;
|
MacrosListbox.Items.EndUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TExternalToolOptionDlg.KeyConflicts(Key: word; Shift: TShiftState
|
||||||
|
): TModalResult;
|
||||||
|
type
|
||||||
|
TConflictType = (ctNone,ctConflictKeyA,ctConflictKeyB);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
ct:TConflictType;
|
||||||
|
CurName: TCaption;
|
||||||
|
ConflictName: String;
|
||||||
|
begin
|
||||||
|
Result:=mrOK;
|
||||||
|
// look if we have already this key
|
||||||
|
if Key=VK_UNKNOWN then
|
||||||
|
exit;
|
||||||
|
i:=0;
|
||||||
|
for i:=0 to fAllKeys.RelationCount-1 do
|
||||||
|
begin
|
||||||
|
with fAllKeys.Relations[i] do
|
||||||
|
begin
|
||||||
|
ct:=ctnone;
|
||||||
|
if (ShortcutA.Key1=Key) and (ShortcutA.Shift1=Shift) then
|
||||||
|
ct:=ctConflictKeyA
|
||||||
|
else if (ShortcutB.Key1=Key) and (ShortcutB.Shift1=Shift) then
|
||||||
|
ct:=ctConflictKeyB;
|
||||||
|
if (ct<>ctNone) then begin
|
||||||
|
CurName:=TitleEdit.Text;
|
||||||
|
ConflictName:=GetCategoryAndName;
|
||||||
|
if ct=ctConflictKeyA then
|
||||||
|
ConflictName:=ConflictName
|
||||||
|
+' ('+KeyAndShiftStateToEditorKeyString(ShortcutA)
|
||||||
|
else
|
||||||
|
ConflictName:=ConflictName
|
||||||
|
+' ('+KeyAndShiftStateToEditorKeyString(ShortcutB);
|
||||||
|
case IDEMessageDialog(lisPEConflictFound,
|
||||||
|
Format(lisTheKeyIsAlreadyAssignedToRemoveTheOldAssignmentAnd, [
|
||||||
|
KeyAndShiftStateToKeyString(Key,Shift), LineEnding, ConflictName, LineEnding,
|
||||||
|
LineEnding, LineEnding, CurName]), mtConfirmation, [mbYes, mbNo, mbCancel])
|
||||||
|
of
|
||||||
|
mrYes: Result:=mrOK;
|
||||||
|
mrCancel: Result:=mrCancel;
|
||||||
|
else Result:=mrRetry;
|
||||||
|
end;
|
||||||
|
if Result=mrOK then begin
|
||||||
|
if (ct=ctConflictKeyA) then
|
||||||
|
ShortcutA:=ShortcutB;
|
||||||
|
ClearShortcutB;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TExternalToolOptionDlg.SetComboBox(
|
procedure TExternalToolOptionDlg.SetComboBox(
|
||||||
AComboBox: TComboBox; const AValue: string);
|
AComboBox: TComboBox; const AValue: string);
|
||||||
var i: integer;
|
var i: integer;
|
||||||
@ -915,6 +975,17 @@ end;
|
|||||||
|
|
||||||
procedure TExternalToolOptionDlg.OKButtonClick(Sender: TObject);
|
procedure TExternalToolOptionDlg.OKButtonClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
|
case KeyConflicts(fKeyBox.Key,fKeyBox.ShiftState) of
|
||||||
|
mrCancel: begin
|
||||||
|
debugln('TExternalToolOptionDlg.OkButtonClick KeyConflicts failed for key1');
|
||||||
|
ModalResult:=mrCancel;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
mrRetry: begin
|
||||||
|
ModalResult:=mrNone;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
if (TitleEdit.Text<>'') and (FilenameEdit.Text<>'') then
|
if (TitleEdit.Text<>'') and (FilenameEdit.Text<>'') then
|
||||||
SaveToOptions
|
SaveToOptions
|
||||||
else begin
|
else begin
|
||||||
|
Loading…
Reference in New Issue
Block a user