IDE, SynEdit: Enable markup fold color in options

git-svn-id: trunk@54021 -
This commit is contained in:
martin 2017-01-28 03:22:12 +00:00
parent b5d8bc7807
commit 721911b820
6 changed files with 301 additions and 102 deletions

View File

@ -55,12 +55,13 @@ uses
SynEditMarkupSpecialChar,
SourceSynEditor,
// SynEdit Highlighters
SynEditHighlighter, SynEditHighlighterFoldBase,
SynHighlighterCPP, SynHighlighterHTML, SynHighlighterJava, SynHighlighterLFM,
SynHighlighterPas, SynHighlighterPerl, SynHighlighterPHP, SynHighlighterSQL,
SynEditHighlighter, SynEditHighlighterFoldBase, SynHighlighterCPP,
SynHighlighterHTML, SynHighlighterJava, SynHighlighterLFM, SynHighlighterPas,
SynHighlighterPerl, SynHighlighterPHP, SynHighlighterSQL,
SynHighlighterPython, SynHighlighterUNIXShellScript, SynHighlighterXML,
SynHighlighterJScript, SynHighlighterDiff, SynHighlighterBat, SynHighlighterIni,
SynHighlighterPo, SynHighlighterPike, SynPluginMultiCaret,
SynHighlighterJScript, SynHighlighterDiff, SynHighlighterBat,
SynHighlighterIni, SynHighlighterPo, SynHighlighterPike, SynPluginMultiCaret,
SynEditMarkupFoldColoring, SynEditMarkup,
// codetools
LinkScanner, CodeToolManager,
// IDEIntf
@ -1390,6 +1391,8 @@ type
// Code Folding
FUseCodeFolding: Boolean;
FUseMarkupWordBracket: Boolean;
FUseMarkupOutline: Boolean;
FReverseFoldPopUpOrder: Boolean;
// Multi window
@ -1600,6 +1603,10 @@ type
// Code Folding
property UseCodeFolding: Boolean
read FUseCodeFolding write FUseCodeFolding default True;
property UseMarkupWordBracket: Boolean
read FUseMarkupWordBracket write FUseMarkupWordBracket default True;
property UseMarkupOutline: Boolean
read FUseMarkupOutline write FUseMarkupOutline default True;
// Multi window
property MultiWinEditAccessOrder: TEditorOptionsEditAccessOrderList
@ -4766,6 +4773,12 @@ begin
FUseCodeFolding :=
XMLConfig.GetValue(
'EditorOptions/CodeFolding/UseCodeFolding', True);
FUseMarkupWordBracket :=
XMLConfig.GetValue(
'EditorOptions/CodeFolding/UseMarkupWordBracket', True);
FUseMarkupOutline :=
XMLConfig.GetValue(
'EditorOptions/CodeFolding/UseMarkupOutline', True);
FUserMouseSettings.LoadFromXml(XMLConfig, 'EditorOptions/Mouse/',
'EditorOptions/General/Editor/', FileVersion);
@ -4952,6 +4965,10 @@ begin
// Code Folding
XMLConfig.SetDeleteValue('EditorOptions/CodeFolding/UseCodeFolding',
FUseCodeFolding, True);
XMLConfig.SetDeleteValue('EditorOptions/CodeFolding/UseMarkupWordBracket',
FUseMarkupWordBracket, True);
XMLConfig.SetDeleteValue('EditorOptions/CodeFolding/UseMarkupOutline',
FUseMarkupOutline, True);
FUserMouseSettings.SaveToXml(XMLConfig, 'EditorOptions/Mouse/');
@ -5269,8 +5286,13 @@ begin
(* if ReadForOptions=True then Enabled appies only to fmFold,fmHide.
This allows to store what selection was previously active *)
if not ReadForOptions then begin
if not FoldHl.FoldConfig[idx].Enabled then
if (not FoldHl.FoldConfig[idx].Enabled) or (not FUseCodeFolding) then
FoldHl.FoldConfig[idx].Modes := FoldHl.FoldConfig[idx].Modes - [fmFold, fmHide];
if (not FUseMarkupWordBracket) then
FoldHl.FoldConfig[idx].Modes := FoldHl.FoldConfig[idx].Modes - [fmMarkup];
if (not FUseMarkupOutline) then
FoldHl.FoldConfig[idx].Modes := FoldHl.FoldConfig[idx].Modes - [fmOutline];
FoldHl.FoldConfig[idx].Enabled := FoldHl.FoldConfig[idx].Modes <> [];
end;
end;
@ -5546,6 +5568,7 @@ var
i: Integer;
mw: TSourceSynEditMarkupHighlightAllMulti;
TermsConf: TEditorUserDefinedWords;
Markup: TSynEditMarkup;
begin
// general options
ASynEdit.BeginUpdate(False);
@ -5715,6 +5738,10 @@ begin
MarkCaret.Trim := FMarkupCurWordTrim;
end;
Markup := ASynEdit.MarkupByClass[TSynEditMarkupFoldColors];
if (Markup <> nil) then
Markup.Enabled := FUseMarkupOutline;
AssignKeyMapTo(ASynEdit, SimilarEdit);
ASynEdit.MouseOptions := [emUseMouseActions];

View File

@ -12,13 +12,13 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
object MarginAndGutterGroupBox: TGroupBox
AnchorSideRight.Side = asrBottom
Left = 0
Height = 175
Height = 151
Top = 0
Width = 501
Align = alTop
AutoSize = True
Caption = 'MarginAndGutterGroupBox'
ClientHeight = 156
ClientHeight = 131
ClientWidth = 497
TabOrder = 0
object RightMarginLabel: TLabel
@ -26,10 +26,10 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = RightMarginComboBox
AnchorSideTop.Side = asrCenter
Left = 344
Height = 17
Top = 12
Width = 119
Left = 296
Height = 15
Top = 10
Width = 94
BorderSpacing.Left = 6
Caption = 'RightMarginLabel'
ParentColor = False
@ -39,10 +39,10 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = ShowOnlyLineNumbersMultiplesOfSpinEdit
AnchorSideTop.Side = asrCenter
Left = 342
Height = 17
Top = 79
Width = 147
Left = 294
Height = 15
Top = 68
Width = 121
BorderSpacing.Left = 6
BorderSpacing.Top = 6
Caption = 'Every n-th line number'
@ -52,10 +52,10 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideLeft.Control = RightMarginLabel
AnchorSideTop.Control = GutterSeparatorIndexSpinBox
AnchorSideTop.Side = asrCenter
Left = 344
Height = 17
Top = 46
Width = 186
Left = 296
Height = 15
Top = 39
Width = 139
Caption = 'GutterSeparatorIndexLabel'
ParentColor = False
end
@ -65,10 +65,10 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideTop.Control = RightMarginLabel
AnchorSideTop.Side = asrCenter
Cursor = crHandPoint
Left = 469
Height = 17
Top = 12
Width = 147
Left = 396
Height = 15
Top = 10
Width = 117
BorderSpacing.Left = 6
Caption = 'RightMarginColorLink'
Font.Color = clBlue
@ -82,9 +82,9 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideLeft.Control = MarginAndGutterGroupBox
AnchorSideTop.Control = MarginAndGutterGroupBox
Left = 6
Height = 24
Height = 19
Top = 6
Width = 220
Width = 172
BorderSpacing.Around = 6
Caption = 'VisibleRightMarginCheckBox'
OnChange = GeneralCheckBoxOnChange
@ -95,9 +95,9 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideTop.Control = VisibleRightMarginCheckBox
AnchorSideTop.Side = asrBottom
Left = 6
Height = 24
Top = 36
Width = 182
Height = 19
Top = 31
Width = 139
BorderSpacing.Around = 6
Caption = 'VisibleGutterCheckBox'
OnChange = GeneralCheckBoxOnChange
@ -108,9 +108,9 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideTop.Control = VisibleGutterCheckBox
AnchorSideTop.Side = asrBottom
Left = 6
Height = 24
Top = 66
Width = 218
Height = 19
Top = 56
Width = 172
BorderSpacing.Around = 6
Caption = 'ShowLineNumbersCheckBox'
OnChange = GeneralCheckBoxOnChange
@ -121,13 +121,13 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideLeft.Control = VisibleRightMarginCheckBox
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = MarginAndGutterGroupBox
Left = 282
Height = 29
Left = 234
Height = 23
Top = 6
Width = 56
BorderSpacing.Left = 50
BorderSpacing.Around = 6
ItemHeight = 0
ItemHeight = 15
Items.Strings = (
'80'
'78'
@ -142,9 +142,9 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideLeft.Control = GutterSeparatorIndexSpinBox
AnchorSideTop.Control = GutterSeparatorIndexSpinBox
AnchorSideTop.Side = asrBottom
Left = 282
Height = 27
Top = 74
Left = 234
Height = 23
Top = 64
Width = 54
BorderSpacing.Top = 6
MinValue = 1
@ -156,9 +156,9 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideLeft.Control = RightMarginComboBox
AnchorSideTop.Control = RightMarginComboBox
AnchorSideTop.Side = asrBottom
Left = 282
Height = 27
Top = 41
Left = 234
Height = 23
Top = 35
Width = 56
MaxValue = 4
MinValue = -1
@ -170,9 +170,9 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideTop.Control = ShowLineNumbersCheckBox
AnchorSideTop.Side = asrBottom
Left = 6
Height = 24
Top = 96
Width = 147
Height = 19
Top = 81
Width = 117
BorderSpacing.Around = 6
Caption = 'chkShowOverview'
OnChange = GeneralCheckBoxOnChange
@ -183,9 +183,9 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideTop.Control = chkShowOverview
AnchorSideTop.Side = asrBottom
Left = 6
Height = 24
Top = 126
Width = 134
Height = 19
Top = 106
Width = 106
BorderSpacing.Around = 6
Caption = 'chkTopInfoView'
TabOrder = 7
@ -194,14 +194,14 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
object EditorFontGroupBox: TGroupBox
AnchorSideRight.Side = asrBottom
Left = 0
Height = 130
Top = 181
Height = 113
Top = 157
Width = 501
Align = alTop
AutoSize = True
BorderSpacing.Top = 6
Caption = 'EditorFontGroupBox'
ClientHeight = 111
ClientHeight = 93
ClientWidth = 497
TabOrder = 1
object EditorFontSizeLabel: TLabel
@ -210,9 +210,9 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideTop.Control = EditorFontSizeSpinEdit
AnchorSideTop.Side = asrCenter
Left = 62
Height = 17
Top = 46
Width = 137
Height = 15
Top = 39
Width = 103
BorderSpacing.Around = 6
Caption = 'EditorFontSizeLabel'
ParentColor = False
@ -222,10 +222,10 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = ExtraLineSpacingComboBox
AnchorSideTop.Side = asrCenter
Left = 331
Height = 17
Top = 47
Width = 153
Left = 297
Height = 15
Top = 39
Width = 117
BorderSpacing.Around = 6
Caption = 'ExtraLineSpacingLabel'
ParentColor = False
@ -235,10 +235,10 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = ExtraCharSpacingComboBox
AnchorSideTop.Side = asrCenter
Left = 331
Height = 17
Top = 82
Width = 156
Left = 297
Height = 15
Top = 68
Width = 120
BorderSpacing.Around = 6
Caption = 'ExtraCharSpacingLabel'
ParentColor = False
@ -248,13 +248,13 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideTop.Control = EditorFontGroupBox
AnchorSideRight.Control = EditorFontButton
Left = 6
Height = 29
Height = 23
Top = 6
Width = 435
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 6
BorderSpacing.Top = 6
ItemHeight = 0
ItemHeight = 15
OnEditingDone = EditorFontComboBoxEditingDone
TabOrder = 0
Text = 'EditorFontComboBox'
@ -266,7 +266,7 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideBottom.Control = EditorFontComboBox
AnchorSideBottom.Side = asrBottom
Left = 441
Height = 29
Height = 23
Top = 6
Width = 50
Anchors = [akTop, akRight, akBottom]
@ -280,10 +280,11 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideTop.Control = EditorFontComboBox
AnchorSideTop.Side = asrBottom
Left = 6
Height = 27
Top = 41
Height = 23
Top = 35
Width = 50
BorderSpacing.Around = 6
MinValue = -100
OnChange = EditorFontSizeSpinEditChange
TabOrder = 2
end
@ -292,13 +293,13 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = EditorFontComboBox
AnchorSideTop.Side = asrBottom
Left = 225
Height = 29
Top = 41
Left = 191
Height = 23
Top = 35
Width = 100
BorderSpacing.Left = 20
BorderSpacing.Around = 6
ItemHeight = 0
ItemHeight = 15
Items.Strings = (
'0'
'1'
@ -313,12 +314,12 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideLeft.Control = ExtraLineSpacingComboBox
AnchorSideTop.Control = ExtraLineSpacingComboBox
AnchorSideTop.Side = asrBottom
Left = 225
Height = 29
Top = 76
Left = 191
Height = 23
Top = 64
Width = 100
BorderSpacing.Bottom = 6
ItemHeight = 0
ItemHeight = 15
Items.Strings = (
'0'
'1'
@ -334,9 +335,9 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideTop.Control = EditorFontSizeSpinEdit
AnchorSideTop.Side = asrBottom
Left = 6
Height = 31
Top = 74
Width = 221
Height = 23
Top = 64
Width = 172
Anchors = [akTop, akLeft, akBottom]
BorderSpacing.Around = 6
Caption = 'DisableAntialiasingCheckBox'
@ -348,8 +349,8 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Side = asrBottom
Left = 0
Height = 138
Top = 317
Height = 179
Top = 276
Width = 501
Align = alClient
BorderSpacing.Top = 6
@ -361,7 +362,7 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
ParentFont = False
TabOrder = 2
BookMarkOptions.Xoffset = 30
Gutter.Width = 61
Gutter.Width = 59
Gutter.MouseActions = <
item
ClickCount = ccAny
@ -793,7 +794,7 @@ object EditorDisplayOptionsFrame: TEditorDisplayOptionsFrame
MouseActions = <>
end
object TSynGutterLineNumber
Width = 21
Width = 19
MouseActions = <>
MarkupInfo.Background = clBtnFace
MarkupInfo.Foreground = clNone

View File

@ -317,13 +317,14 @@ object EditorMarkupOptionsFrame: TEditorMarkupOptionsFrame
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 6
Height = 156
Top = 330
Height = 150
Top = 380
Width = 220
Anchors = [akTop, akLeft, akBottom]
BorderSpacing.Around = 6
Constraints.MinHeight = 150
ItemHeight = 0
OnClick = chkKWGroupsClick
OnClickCheck = chkKWGroupsClickCheck
OnExit = chkKWGroupsClickCheck
OnKeyUp = chkKWGroupsKeyUp
@ -331,11 +332,11 @@ object EditorMarkupOptionsFrame: TEditorMarkupOptionsFrame
end
object LanguageComboBox: TComboBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = divKeyWordGroups
AnchorSideTop.Control = cbMarkupOutline
AnchorSideTop.Side = asrBottom
Left = 6
Height = 23
Top = 301
Top = 351
Width = 200
BorderSpacing.Left = 6
BorderSpacing.Top = 6
@ -353,10 +354,64 @@ object EditorMarkupOptionsFrame: TEditorMarkupOptionsFrame
AnchorSideTop.Side = asrCenter
Left = 212
Height = 15
Top = 305
Top = 355
Width = 80
BorderSpacing.Left = 6
Caption = 'LanguageLabel'
ParentColor = False
end
object cbMarkup: TCheckBox
AnchorSideLeft.Control = chkKWGroups
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = chkKWGroups
Left = 232
Height = 19
Top = 380
Width = 74
BorderSpacing.Left = 6
Caption = 'cbMarkup'
OnChange = cbMarkupChange
TabOrder = 10
end
object cbOutline: TCheckBox
AnchorSideLeft.Control = chkKWGroups
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = cbMarkup
AnchorSideTop.Side = asrBottom
Left = 232
Height = 19
Top = 405
Width = 72
BorderSpacing.Left = 6
BorderSpacing.Top = 6
Caption = 'cbOutline'
OnChange = cbMarkupChange
TabOrder = 11
end
object cbMarkupWordBracket: TCheckBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = divKeyWordGroups
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
Top = 301
Width = 142
BorderSpacing.Around = 6
Caption = 'cbMarkupWordBracket'
OnChange = cbMarkupWordBracketChange
TabOrder = 12
end
object cbMarkupOutline: TCheckBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = cbMarkupWordBracket
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
Top = 326
Width = 113
BorderSpacing.Around = 6
Caption = 'cbMarkupOutline'
OnChange = cbMarkupOutlineChange
TabOrder = 13
end
end

View File

@ -46,6 +46,10 @@ type
BracketCombo: TComboBox;
BracketLabel: TLabel;
BracketLink: TLabel;
cbMarkup: TCheckBox;
cbOutline: TCheckBox;
cbMarkupWordBracket: TCheckBox;
cbMarkupOutline: TCheckBox;
chkKWGroups: TCheckListBox;
chkExtPasKeywords: TCheckBox;
divKeyWordGroups: TDividerBevel;
@ -72,7 +76,11 @@ type
procedure BracketLinkClick(Sender: TObject);
procedure BracketLinkMouseEnter(Sender: TObject);
procedure BracketLinkMouseLeave(Sender: TObject);
procedure cbMarkupChange(Sender: TObject);
procedure cbMarkupOutlineChange(Sender: TObject);
procedure cbMarkupWordBracketChange(Sender: TObject);
procedure chkExtPasKeywordsChange(Sender: TObject);
procedure chkKWGroupsClick(Sender: TObject);
procedure chkKWGroupsClickCheck(Sender: TObject);
procedure chkKWGroupsKeyUp(Sender: TObject; var {%H-}Key: Word; {%H-}Shift: TShiftState);
procedure dropPasStringKeywordsChange(Sender: TObject);
@ -87,10 +95,14 @@ type
private
{ private declarations }
FDialog: TAbstractOptionsEditorDialog;
FModeLock: Boolean;
FCurHighlighter: TSrcIDEHighlighter;
FCurFoldInfo: TEditorOptionsFoldRecord;
FUseMarkupWordBracket: Boolean;
FUseMarkupOutline: Boolean;
function GetHighlighter(SynType: TLazSyntaxHighlighter;
CreateIfNotExists: Boolean): TSrcIDEHighlighter;
procedure UpdateMarkupCheckBoxes;
public
function GetTitle: String; override;
@ -165,32 +177,85 @@ begin
(Sender as TLabel).Font.Color := clBlue;
end;
procedure TEditorMarkupOptionsFrame.cbMarkupChange(Sender: TObject);
var
Hl: TSynCustomFoldHighlighter;
Modes: TSynCustomFoldConfigModes;
i: LongInt;
begin
if FModeLock then exit;
if not (assigned(FCurHighlighter) and
(FCurHighlighter is TSynCustomFoldHighlighter)) then exit;
i := chkKWGroups.ItemIndex;
if i < 0 then exit;
i := PtrUInt(chkKWGroups.Items.Objects[i]);
i := FCurFoldInfo.Info^[i].Index;
Hl := TSynCustomFoldHighlighter(FCurHighlighter);
Modes := [fmMarkup];
if Sender = cbOutline then
Modes := [fmOutline];
if TCheckBox(Sender).Checked then
Hl.FoldConfig[i].Modes := Hl.FoldConfig[i].Modes + Modes
else
Hl.FoldConfig[i].Modes := Hl.FoldConfig[i].Modes - Modes;
chkKWGroups.Checked[chkKWGroups.ItemIndex] := cbMarkup.Checked or cbOutline.Checked;
end;
procedure TEditorMarkupOptionsFrame.cbMarkupOutlineChange(Sender: TObject);
begin
FUseMarkupOutline := cbMarkupOutline.Checked;
LanguageComboBoxExit(nil);
end;
procedure TEditorMarkupOptionsFrame.cbMarkupWordBracketChange(Sender: TObject);
begin
FUseMarkupWordBracket := cbMarkupWordBracket.Checked;
LanguageComboBoxExit(nil);
end;
procedure TEditorMarkupOptionsFrame.chkExtPasKeywordsChange(Sender: TObject);
begin
GeneralPage.PasExtendedKeywordsMode := chkExtPasKeywords.Checked;
GeneralPage.UpdatePrevieEdits;
end;
procedure TEditorMarkupOptionsFrame.chkKWGroupsClick(Sender: TObject);
begin
UpdateMarkupCheckBoxes;
end;
procedure TEditorMarkupOptionsFrame.chkKWGroupsClickCheck(Sender: TObject);
var
i, j, idx: Integer;
i, j, idx, i1: Integer;
Hl: TSynCustomFoldHighlighter;
FMask: TSynCustomFoldConfigModes;
begin
if not (assigned(FCurHighlighter) and
(FCurHighlighter is TSynCustomFoldHighlighter)) then exit;
Hl := TSynCustomFoldHighlighter(FCurHighlighter);
FMask := [fmMarkup, fmOutline];
if not FUseMarkupWordBracket then FMask := FMask - [fmMarkup];
if not FUseMarkupOutline then FMask := FMask - [fmOutline];
j := 0;
for i := 0 to FCurFoldInfo.Count - 1 do begin
for i1 := 0 to chkKWGroups.Count - 1 do begin
i := PtrUInt(chkKWGroups.Items.Objects[i1]);
idx := FCurFoldInfo.Info^[i].Index;
if fmMarkup in Hl.FoldConfig[idx].SupportedModes then begin
if chkKWGroups.Checked[j] then
Hl.FoldConfig[idx].Modes := Hl.FoldConfig[idx].Modes + [fmMarkup]
if Hl.FoldConfig[idx].SupportedModes * [fmMarkup, fmOutline] <> [] then begin
if not chkKWGroups.Checked[j] then
Hl.FoldConfig[idx].Modes := Hl.FoldConfig[idx].Modes - FMask
else
Hl.FoldConfig[idx].Modes := Hl.FoldConfig[idx].Modes - [fmMarkup];
if Hl.FoldConfig[idx].Modes * FMask = [] then
Hl.FoldConfig[idx].Modes := Hl.FoldConfig[idx].Modes + FMask;
inc(j);
end;
end;
UpdateMarkupCheckBoxes;
end;
procedure TEditorMarkupOptionsFrame.chkKWGroupsKeyUp(Sender: TObject; var Key: Word;
@ -225,13 +290,13 @@ end;
procedure TEditorMarkupOptionsFrame.LanguageComboBoxExit(Sender: TObject);
var
ComboBox: TComboBox absolute Sender;
tp: TLazSyntaxHighlighter;
i, j: Integer;
Hl: TSynCustomFoldHighlighter;
FMask: TSynCustomFoldConfigModes;
begin
tp := EditorOpts.HighlighterList
[EditorOpts.HighlighterList.FindByName(ComboBox.Text)].TheType;
[EditorOpts.HighlighterList.FindByName(LanguageComboBox.Text)].TheType;
FCurHighlighter := GetHighlighter(tp, True);
FCurFoldInfo := EditorOptionsFoldDefaults[tp];
@ -240,14 +305,18 @@ begin
(FCurHighlighter is TSynCustomFoldHighlighter)) then exit;
Hl := TSynCustomFoldHighlighter(FCurHighlighter);
FMask := [fmMarkup, fmOutline];
if not FUseMarkupWordBracket then FMask := FMask - [fmMarkup];
if not FUseMarkupOutline then FMask := FMask - [fmOutline];
for i := 0 to FCurFoldInfo.Count - 1 do begin
if Hl.FoldConfig[FCurFoldInfo.Info^[i].Index].SupportedModes * [fmMarkup{, fmOutline}] <> [] then begin
if Hl.FoldConfig[FCurFoldInfo.Info^[i].Index].SupportedModes * FMask <> [] then begin
j := chkKWGroups.Items.Add(FCurFoldInfo.Info^[i].Name);
chkKWGroups.Checked[j] :=
(Hl.FoldConfig[FCurFoldInfo.Info^[i].Index].Modes * [fmMarkup{, fmOutline}] <> []);
(Hl.FoldConfig[FCurFoldInfo.Info^[i].Index].Modes * FMask <> []);
chkKWGroups.Items.Objects[j] := TObject({%H-}Pointer(PtrUInt(i)));
end;
end;
UpdateMarkupCheckBoxes;
end;
procedure TEditorMarkupOptionsFrame.LanguageComboBoxKeyDown(Sender: TObject;
@ -284,6 +353,40 @@ begin
Result := FoldPage.GetHighlighter(SynType, CreateIfNotExists);
end;
procedure TEditorMarkupOptionsFrame.UpdateMarkupCheckBoxes;
var
i: LongInt;
FMask: TSynCustomFoldConfigModes;
Hl: TSynCustomFoldHighlighter;
begin
if not (assigned(FCurHighlighter) and
(FCurHighlighter is TSynCustomFoldHighlighter)) then exit;
Hl := TSynCustomFoldHighlighter(FCurHighlighter);
FModeLock := True;
i := chkKWGroups.ItemIndex;
if i >= 0 then
i := PtrUInt(chkKWGroups.Items.Objects[i]);
if i >= 0 then begin
i := FCurFoldInfo.Info^[i].Index;
FMask := [fmMarkup, fmOutline];
if not FUseMarkupWordBracket then FMask := FMask - [fmMarkup];
if not FUseMarkupOutline then FMask := FMask - [fmOutline];
cbMarkup.Enabled := fmMarkup in Hl.FoldConfig[i].SupportedModes * FMask;
cbMarkup.Checked := fmMarkup in Hl.FoldConfig[i].Modes * FMask;
cbOutline.Enabled := fmOutline in Hl.FoldConfig[i].SupportedModes * FMask;
cbOutline.Checked := fmOutline in Hl.FoldConfig[i].Modes * FMask;
end else
begin
cbMarkup.Enabled := false;
cbMarkup.Checked := false;
cbOutline.Enabled := false;
cbOutline.Checked := false;
end;
FModeLock := False;
end;
function TEditorMarkupOptionsFrame.GetTitle: String;
begin
Result := lisAutoMarkup;
@ -322,6 +425,11 @@ begin
LanguageLabel.Caption := dlgLang;
divKeyWordGroups.Caption := dlgPasKeywordsMatches;
cbMarkup.Caption := dlgPasKeywordsMarkup;
cbOutline.Caption := dlgPasKeywordsOutline;
cbMarkupWordBracket.Caption := dlgMarkupWordBracket;
cbMarkupOutline.Caption := dlgMarkupOutline;
with LanguageComboBox.Items do begin
BeginUpdate;
for i := 0 to EditorOpts.HighlighterList.Count - 1 do begin
@ -350,11 +458,17 @@ begin
chkExtPasKeywords.Checked := PasExtendedKeywordsMode;
dropPasStringKeywords.ItemIndex := ord(PasStringKeywordMode);
FUseMarkupWordBracket := UseMarkupWordBracket;
FUseMarkupOutline := UseMarkupOutline;
end;
AutoDelayTrackBarChange(nil);
LanguageComboBox.ItemIndex := 0;
LanguageComboBoxExit(LanguageComboBox);
cbMarkupOutline.Checked := FUseMarkupOutline;
cbMarkupWordBracket.Checked := FUseMarkupWordBracket;
UpdateMarkupCheckBoxes;
end;
procedure TEditorMarkupOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
@ -377,6 +491,9 @@ begin
PasExtendedKeywordsMode := chkExtPasKeywords.Checked;
PasStringKeywordMode := TSynPasStringMode(dropPasStringKeywords.ItemIndex);
UseMarkupWordBracket := FUseMarkupWordBracket;
UseMarkupOutline := FUseMarkupOutline;
end;
end;

View File

@ -1938,6 +1938,10 @@ resourcestring
dlgBracketMatchGroup = 'Matching bracket pairs';
dlgPasExtKeywordsGroup = 'Extended Pascal Keyword Options';
dlgPasKeywordsMatches = 'Matching Keywords';
dlgPasKeywordsMarkup = 'Markup (on caret)';
dlgPasKeywordsOutline = 'Outline';
dlgMarkupWordBracket = 'Word Brackets on caret (global)';
dlgMarkupOutline = 'Outline (global)';
dlgPasExtKeywords = 'Highlight control statements as keywords';
dlgPasStringKeywords = 'Highlight "String" keyword(s)';
dlgPasStringKeywordsOptDefault = 'Default';

View File

@ -59,9 +59,7 @@ uses
SynEditHighlighter, SynEditHighlighterFoldBase, SynHighlighterPas,
SynEditMarkupHighAll, SynEditKeyCmds, SynEditMarkupIfDef, SynEditMiscProcs,
SynPluginMultiCaret, SynEditPointClasses,
{$IFDEF SynWithOutlineMarkup}
SynEditMarkupFoldColoring,
{$ENDIF}
etSrcEditMarks, LazarusIDEStrConsts;
type
@ -1636,6 +1634,7 @@ begin
inherited SetHighlighter(Value);
//TSynEditMarkupFoldColors(MarkupByClass[TSynEditMarkupFoldColors]).Highlighter := Highlighter; // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
if Highlighter is TSynPasSyn then
FMarkupIfDef.Highlighter := TSynPasSyn(Highlighter)
else
@ -1657,10 +1656,8 @@ begin
end;
constructor TIDESynEditor.Create(AOwner: TComponent);
{$IFDEF SynWithOutlineMarkup}
var
MarkupFoldColors: TSynEditMarkupFoldColors;
{$ENDIF}
begin
inherited Create(AOwner);
FUserWordsList := TFPList.Create;
@ -1676,11 +1673,9 @@ begin
FMarkupForGutterMark := TSynEditMarkupGutterMark.Create(Self, FWordBreaker);
TSynEditMarkupManager(MarkupMgr).AddMarkUp(FMarkupForGutterMark);
{$IFDEF SynWithOutlineMarkup}
MarkupFoldColors := TSynEditMarkupFoldColors.Create(Self);
//MarkupFoldColors.DefaultGroup := 0;
TSynEditMarkupManager(MarkupMgr).AddMarkUp(MarkupFoldColors);
{$ENDIF}
FMarkupIfDef := TSourceSynEditMarkupIfDef.Create(Self);
FMarkupIfDef.FoldView := TSynEditFoldedView(FoldedTextBuffer);