From 190dc4c9990172de9a43198b500c2e626829955e Mon Sep 17 00:00:00 2001 From: Maxim Ganetsky Date: Sat, 11 Nov 2023 03:06:04 +0300 Subject: [PATCH] IDE, Keymapping Options: removed key scheme `Import` button and related functionality (it was impossible to correctly load such a scheme after IDE restart), last part of issue #40559. Instead, `Export` button now opens file save dialog in user key scheme subdirectory ('userkeyschemes') of Lazarus settings directory. This behavior is similar to how color schemes are handled. Thus, user is able to edit scheme, export it and then immediately select it if desired (even without IDE restart). To load an external scheme, user should put it to key scheme subdirectory of Lazarus settings directory and select it in Lazarus settings (no IDE restart needed). --- ide/editoroptions.pp | 8 ++++ ide/frames/editor_keymapping_options.lfm | 33 ++++------------- ide/frames/editor_keymapping_options.pas | 47 +----------------------- ide/lazarusidestrconsts.pas | 1 - 4 files changed, 17 insertions(+), 72 deletions(-) diff --git a/ide/editoroptions.pp b/ide/editoroptions.pp index 37e7e0ff81..8a73da3a98 100644 --- a/ide/editoroptions.pp +++ b/ide/editoroptions.pp @@ -1872,6 +1872,7 @@ procedure RepairEditorFontSize(var FontSize: integer); function BuildBorlandDCIFile(ACustomSynAutoComplete: TCustomSynAutoComplete): Boolean; function HighlighterList: TEditOptLangList; function ColorSchemeFactory: TColorSchemeFactory; +function UserKeySchemeDirectory(CreateIfNotExists: Boolean): String; function UserSchemeDirectory(CreateIfNotExists: Boolean = False): String; procedure InitLocale; @@ -2597,6 +2598,13 @@ begin Result := Singleton; end; +function UserKeySchemeDirectory(CreateIfNotExists: Boolean): String; +begin + Result := AppendPathDelim(GetPrimaryConfigPath) + KeyMappingSchemeConfigDirName; + If CreateIfNotExists and (not DirectoryExistsUTF8(Result)) then + CreateDirUTF8(Result); +end; + function UserSchemeDirectory(CreateIfNotExists: Boolean): String; begin Result := AppendPathDelim(GetPrimaryConfigPath) + 'userschemes'; diff --git a/ide/frames/editor_keymapping_options.lfm b/ide/frames/editor_keymapping_options.lfm index 47099f7d3c..334bd2956d 100644 --- a/ide/frames/editor_keymapping_options.lfm +++ b/ide/frames/editor_keymapping_options.lfm @@ -46,8 +46,8 @@ object EditorKeymappingOptionsFrame: TEditorKeymappingOptionsFrame BorderSpacing.Left = 24 BorderSpacing.Right = 2 Caption = 'FindKeyButton' - OnClick = FindKeyButtonClick TabOrder = 1 + OnClick = FindKeyButtonClick end object ResetKeyFilterBtn: TSpeedButton AnchorSideTop.Control = FindKeyButton @@ -95,8 +95,8 @@ object EditorKeymappingOptionsFrame: TEditorKeymappingOptionsFrame RowSelect = True ScrollBars = ssAutoBoth TabOrder = 0 - OnMouseDown = ConflictsTreeViewMouseDown Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] + OnMouseDown = ConflictsTreeViewMouseDown end object KeyMapSplitter: TSplitter Cursor = crVSplit @@ -105,8 +105,8 @@ object EditorKeymappingOptionsFrame: TEditorKeymappingOptionsFrame Top = 247 Width = 574 Align = alBottom - OnMoved = KeyMapSplitterMoved ResizeAnchor = akBottom + OnMoved = KeyMapSplitterMoved end object TreeView: TTreeView Left = 0 @@ -122,10 +122,10 @@ object EditorKeymappingOptionsFrame: TEditorKeymappingOptionsFrame RowSelect = True ScrollBars = ssAutoBoth TabOrder = 2 + Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] OnDblClick = TreeViewDblClick OnKeyPress = TreeViewKeyPress OnSelectionChanged = TreeViewSelectionChanged - Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] end object BtnPanel: TPanel Left = 0 @@ -149,8 +149,8 @@ object EditorKeymappingOptionsFrame: TEditorKeymappingOptionsFrame Width = 171 AutoSize = True Caption = 'ChooseSchemeButton' - OnClick = ChooseSchemeButtonClick TabOrder = 0 + OnClick = ChooseSchemeButtonClick end object SchemeLabel: TLabel AnchorSideLeft.Control = ChooseSchemeButton @@ -163,7 +163,6 @@ object EditorKeymappingOptionsFrame: TEditorKeymappingOptionsFrame Width = 88 BorderSpacing.Around = 8 Caption = 'SchemeLabel' - Color = clDefault ParentColor = False end object ClearButton: TBitBtn @@ -180,8 +179,8 @@ object EditorKeymappingOptionsFrame: TEditorKeymappingOptionsFrame BorderSpacing.Left = 8 BorderSpacing.Bottom = 8 Caption = 'ClearButton' - OnClick = ClearButtonClick TabOrder = 1 + OnClick = ClearButtonClick end object EditButton: TBitBtn AnchorSideLeft.Control = CommandLabel @@ -196,8 +195,8 @@ object EditorKeymappingOptionsFrame: TEditorKeymappingOptionsFrame BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 Caption = 'EditButton' - OnClick = EditButtonClick TabOrder = 2 + OnClick = EditButtonClick end object CommandLabel: TLabel AnchorSideLeft.Control = BtnPanel @@ -209,7 +208,6 @@ object EditorKeymappingOptionsFrame: TEditorKeymappingOptionsFrame Width = 105 BorderSpacing.Right = 8 Caption = 'CommandLabel' - Color = clDefault ParentColor = False end object ExportButton: TButton @@ -224,23 +222,8 @@ object EditorKeymappingOptionsFrame: TEditorKeymappingOptionsFrame AutoSize = True BorderSpacing.Left = 25 Caption = 'ExportButton' - OnClick = ExportButtonClick TabOrder = 3 - end - object ImportButton: TButton - AnchorSideLeft.Control = ExportButton - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = ExportButton - AnchorSideTop.Side = asrCenter - Left = 467 - Height = 30 - Top = 0 - Width = 115 - AutoSize = True - BorderSpacing.Left = 8 - Caption = 'ImportButton' - OnClick = ImportButtonClick - TabOrder = 4 + OnClick = ExportButtonClick end end end diff --git a/ide/frames/editor_keymapping_options.pas b/ide/frames/editor_keymapping_options.pas index 3b3fb78383..dfbd20defa 100644 --- a/ide/frames/editor_keymapping_options.pas +++ b/ide/frames/editor_keymapping_options.pas @@ -47,7 +47,6 @@ type TEditorKeymappingOptionsFrame = class(TAbstractIDEOptionsEditor) BtnPanel: TPanel; ExportButton: TButton; - ImportButton: TButton; ChooseSchemeButton: TBitBtn; ClearButton: TBitBtn; EditButton: TBitBtn; @@ -71,7 +70,6 @@ type procedure ChooseSchemeButtonClick(Sender: TObject); procedure ClearButtonClick(Sender: TObject); procedure ExportButtonClick(Sender: TObject); - procedure ImportButtonClick(Sender: TObject); procedure FilterEditAfterFilter(Sender: TObject); function FilterEditFilterItem(ItemData: Pointer; out Done: Boolean): Boolean; procedure FilterEditKeyPress(Sender: TObject; var {%H-}Key: char); @@ -245,6 +243,7 @@ begin dlg := TSaveDialog.Create(Self); exp := TKeyCommandRelationList.Create; try + dlg.InitialDir := UserKeySchemeDirectory(True); dlg.DefaultExt:='xml'; dlg.Filter := dlgFilterXML + '|*.xml|' + dlgFilterAll +'|'+GetAllFilesMask; dlg.FilterIndex := 0; @@ -266,49 +265,6 @@ begin end; end; - -procedure TEditorKeymappingOptionsFrame.ImportButtonClick(Sender: TObject); -var - dlg : TOpenDialog; - xml : TXMLConfig; - exp : TKeyCommandRelationList; - src : TKeyCommandRelation; - dst : TKeyCommandRelation; - i : integer; - nm : string; -begin - xml := nil; - dlg := TOpenDialog.Create(Self); - exp := TKeyCommandRelationList.Create; - try - dlg.Filter := dlgFilterXML + '|*.xml|' + dlgFilterAll +'|'+GetAllFilesMask; - dlg.FilterIndex := 0; - if not dlg.Execute then Exit; - xml := TXMLConfig.Create(dlg.FileName); - exp.DefineCommandCategories; // default Relations - nm := xml.GetValue('Name/Value',''); - if nm = '' then nm := ExtractFileName(xml.FileName); - exp.LoadFromXMLConfig(xml, 'KeyMapping/', false); - for i:=0 to exp.RelationCount-1 do begin - src := exp.Relations[i]; - dst := FEditingKeyMap.FindByCommand(src.Command); - if Assigned(dst) then begin - dst.ShortcutA := src.ShortcutA; - dst.ShortcutB := src.ShortcutB; - end; - end; - EditorOpts.KeyMappingScheme := Format(lisImported, [nm]); - FillKeyMappingTreeView; - fModified:=True; - UpdateSchemeLabel; - UpdateConflictTree; - finally - exp.Free; - dlg.Free; - xml.Free; - end; -end; - function TEditorKeymappingOptionsFrame.FilterEditFilterItem(ItemData: Pointer; out Done: Boolean): Boolean; var @@ -468,7 +424,6 @@ begin ClearButton.Caption := lisClear; EditMenuItem.Caption := lisEdit; ClearMenuItem.Caption := lisClear; - ImportButton.Caption := lisImport; ExportButton.Caption := lisExport; TreeView.Images := IDEImages.Images_16; diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index d3d6fb78fc..930f119d6e 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -3035,7 +3035,6 @@ resourcestring lisThereAreNoConflictingKeys = 'There are no conflicting keys.'; srkmEditForCmd = 'Edit keys of command'; lisChooseAKey = 'Choose a key ...'; - lisImported = '%s (imported)'; //Commands srkmecLeft = 'Move cursor left';