diff --git a/ide/editoroptions.pp b/ide/editoroptions.pp index 040fc5620a..1dc03c1e13 100644 --- a/ide/editoroptions.pp +++ b/ide/editoroptions.pp @@ -1001,10 +1001,13 @@ type // Code Folding FUseCodeFolding: Boolean; + FReverseFoldPopUpOrder: Boolean; // Multi window FMultiWinEditAccessOrder: TEditorOptionsEditAccessOrderList; + FDefaultValues: TEditorOptions; + function OldAdditionalAttributeName(NewAha:String): string; public class function GetGroupCaption:string; override; @@ -1012,7 +1015,9 @@ type procedure DoAfterWrite; override; public constructor Create; + constructor CreateDefaultOnly; destructor Destroy; override; + procedure Init; procedure Load; procedure Save; function GetAdditionalAttributeName(aha:TAdditionalHilightAttribute): string; @@ -1046,7 +1051,7 @@ type AddHilightAttr: TAdditionalHilightAttribute; aMarkup: TSynSelectedColor); procedure SetMarkupColors(aSynEd: TSynEdit); - published + public // general options property SynEditOptions: TSynEditorOptions read fSynEditOptions write fSynEditOptions default SynEditDefaultOptions; @@ -1163,6 +1168,12 @@ type // Multi window property MultiWinEditAccessOrder: TEditorOptionsEditAccessOrderList read FMultiWinEditAccessOrder write FMultiWinEditAccessOrder; + + published { use RTTIConf} + // Code Folding + property ReverseFoldPopUpOrder: Boolean + read FReverseFoldPopUpOrder write FReverseFoldPopUpOrder default True; + end; const @@ -3188,7 +3199,57 @@ begin end; // set defaults + Init; + // code templates (dci file) + fCodeTemplateFileName := + TrimFilename(GetPrimaryConfigPath+PathDelim+DefaultCodeTemplatesFilename); + CopySecondaryConfigFile(DefaultCodeTemplatesFilename); + if not FileExistsUTF8(CodeTemplateFileName) then + begin + res := LazarusResources.Find('lazarus_dci_file'); + if (res <> Nil) and (res.Value <> '') and (res.ValueType = 'DCI') then + try + InvalidateFileStateCache; + fs := TFileStream.Create(UTF8ToSys(CodeTemplateFileName), fmCreate); + try + fs.Write(res.Value[1], length(res.Value)); + finally + fs.Free; + end; + except + DebugLn('WARNING: unable to write code template file "', + CodeTemplateFileName, '"'); + end; + end; + + FMultiWinEditAccessOrder := TEditorOptionsEditAccessOrderList.Create; + FMultiWinEditAccessOrder.InitDefaults; + + FDefaultValues := TEditorOptions.CreateDefaultOnly; +end; + +constructor TEditorOptions.CreateDefaultOnly; +begin + inherited Create; + Init; + FDefaultValues := nil; +end; + +destructor TEditorOptions.Destroy; +begin + FreeAndNil(FUserColorSchemeSettings); + fKeyMap.Free; + FreeAndNil(FMultiWinEditAccessOrder); + XMLConfig.Free; + FUserMouseSettings.Free; + FTempMouseSettings.Free; + FreeAndNil(FDefaultValues); + inherited Destroy; +end; + +procedure TEditorOptions.Init; +begin // General options fShowTabCloseButtons := True; FHideSingleTabInWindow := False; @@ -3231,41 +3292,8 @@ begin // Code Tools options FCompletionLongLineHintType := sclpExtendRightOnly; - // code templates (dci file) - fCodeTemplateFileName := - TrimFilename(GetPrimaryConfigPath+PathDelim+DefaultCodeTemplatesFilename); - CopySecondaryConfigFile(DefaultCodeTemplatesFilename); - if not FileExistsUTF8(CodeTemplateFileName) then - begin - res := LazarusResources.Find('lazarus_dci_file'); - if (res <> Nil) and (res.Value <> '') and (res.ValueType = 'DCI') then - try - InvalidateFileStateCache; - fs := TFileStream.Create(UTF8ToSys(CodeTemplateFileName), fmCreate); - try - fs.Write(res.Value[1], length(res.Value)); - finally - fs.Free; - end; - except - DebugLn('WARNING: unable to write code template file "', - CodeTemplateFileName, '"'); - end; - end; - - FMultiWinEditAccessOrder := TEditorOptionsEditAccessOrderList.Create; - FMultiWinEditAccessOrder.InitDefaults; -end; - -destructor TEditorOptions.Destroy; -begin - FreeAndNil(FUserColorSchemeSettings); - fKeyMap.Free; - FreeAndNil(FMultiWinEditAccessOrder); - XMLConfig.Free; - FUserMouseSettings.Free; - FTempMouseSettings.Free; - inherited Destroy; + // Code folding + FReverseFoldPopUpOrder := True; end; type @@ -3284,6 +3312,8 @@ begin try FileVersion:=XMLConfig.GetValue('EditorOptions/Version', 0); + XMLConfig.ReadObject('EditorOptions/Misc/', Self, FDefaultValues); + // general options for SynEditOpt := Low(TSynEditorOption) to High(TSynEditorOption) do begin @@ -3491,6 +3521,8 @@ begin try XMLConfig.SetValue('EditorOptions/Version', EditorOptsFormatVersion); + XMLConfig.WriteObject('EditorOptions/Misc/', Self, FDefaultValues); + // general options for SynEditOpt := Low(TSynEditorOption) to High(TSynEditorOption) do begin @@ -4135,6 +4167,7 @@ begin ASynEdit.Gutter.CodeFoldPart.Visible := FUseCodeFolding; if not FUseCodeFolding then ASynEdit.UnfoldAll; + ASynEdit.Gutter.CodeFoldPart.ReversePopMenuOrder := ReverseFoldPopUpOrder; ASynEdit.Gutter.Width := fGutterWidth; ASynEdit.Gutter.SeparatorPart.Visible := FGutterSeparatorIndex <> -1; diff --git a/ide/frames/editor_codefolding_options.lfm b/ide/frames/editor_codefolding_options.lfm index b54497058e..0b5fad8427 100644 --- a/ide/frames/editor_codefolding_options.lfm +++ b/ide/frames/editor_codefolding_options.lfm @@ -139,4 +139,16 @@ inherited EditorCodefoldingOptionsFrame: TEditorCodefoldingOptionsFrame end end end + object chkPopOrder: TCheckBox[5] + AnchorSideTop.Control = Owner + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 421 + Height = 19 + Top = 0 + Width = 90 + Anchors = [akTop, akRight] + Caption = 'chkPopOrder' + TabOrder = 3 + end end diff --git a/ide/frames/editor_codefolding_options.pas b/ide/frames/editor_codefolding_options.pas index 7d7c8f266d..8c124484ac 100644 --- a/ide/frames/editor_codefolding_options.pas +++ b/ide/frames/editor_codefolding_options.pas @@ -35,6 +35,7 @@ type TEditorCodefoldingOptionsFrame = class(TAbstractIDEOptionsEditor) Bevel1: TBevel; + chkPopOrder: TCheckBox; FoldConfigCheckListBox: TCheckListBox; FoldConfPanel: TPanel; chkCodeFoldingEnabled: TCheckBox; @@ -225,6 +226,7 @@ begin chkFold.Caption := dlgCodeFoldEnableFold; chkHide.Caption := dlgCodeFoldEnableHide; chkBoth.Caption := dlgCodeFoldEnableBoth; + chkPopOrder.Caption := dlgCodeFoldPopUpOrder; LanguageLabel.Caption := dlgLang; FModeLock := False; end; @@ -251,6 +253,7 @@ begin end; LanguageComboBox.ItemIndex := 0; LanguageComboBoxExit(LanguageComboBox); + chkPopOrder.Checked := ReverseFoldPopUpOrder; end; UpdateFoldHideRadio; end; @@ -267,6 +270,7 @@ begin if assigned(FHighlighters[i]) then WriteHighlighterFoldSettings(FHighlighters[i]); end; + ReverseFoldPopUpOrder := chkPopOrder.Checked; end; end; diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 061948143a..88c27c06a6 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -1273,6 +1273,7 @@ resourcestring dlgCodeFoldEnableFold = 'Fold'; dlgCodeFoldEnableHide = 'Hide'; dlgCodeFoldEnableBoth = 'Both'; + dlgCodeFoldPopUpOrder = 'Reverse fold-order in Popup'; dlgCodeFoldingMouse = 'Mouse'; dlfMousePredefinedScheme = 'Use predefined scheme'; dlfNoPredefinedScheme = '< None >';