Merge branch 'IDE/Options/Editor/Display/Colors/Filter' into 'main'

Draft: IDE/Options: Added filter to the frame of editor colors

See merge request freepascal.org/lazarus/lazarus!459
This commit is contained in:
n7800 2025-04-19 06:00:37 +00:00
commit 6511678854
2 changed files with 79 additions and 53 deletions

View File

@ -530,7 +530,7 @@ object EditorColorOptionsFrame: TEditorColorOptionsFrame
Constraints.MaxWidth = 1000
ParentShowHint = False
ShowHint = True
TabOrder = 0
TabOrder = 3
end
object PnlTop2: TPanel
AnchorSideLeft.Control = Owner
@ -547,35 +547,14 @@ object EditorColorOptionsFrame: TEditorColorOptionsFrame
BevelOuter = bvNone
ClientHeight = 187
ClientWidth = 640
TabOrder = 2
object ColorElementTree: TTreeView
Left = 0
Height = 181
Top = 6
Width = 200
Align = alLeft
AutoExpand = True
BorderSpacing.Top = 6
BorderSpacing.Right = 1
Constraints.MinWidth = 150
HideSelection = False
ReadOnly = True
ScrollBars = ssAutoBoth
ShowRoot = False
TabOrder = 0
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoToolTips, tvoNoDoubleClickExpand, tvoThemedDraw]
OnAdvancedCustomDrawItem = ColorElementTreeAdvancedCustomDrawItem
OnChange = ColorElementTreeChange
OnClick = ColorElementTreeClick
OnKeyDown = ColorElementTreeKeyDown
end
TabOrder = 0
inline ColorPreview: TSynEdit
AnchorSideLeft.Control = Splitter1
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = PnlTop2
AnchorSideRight.Control = PnlTop2
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = ColorElementTree
AnchorSideBottom.Control = ColorElementPanel
AnchorSideBottom.Side = asrBottom
Left = 207
Height = 181
@ -590,7 +569,7 @@ object EditorColorOptionsFrame: TEditorColorOptionsFrame
Font.Quality = fqNonAntialiased
ParentColor = False
ParentFont = False
TabOrder = 1
TabOrder = 2
TabStop = False
OnMouseUp = ColorPreviewMouseUp
BookMarkOptions.Xoffset = 30
@ -1116,6 +1095,52 @@ object EditorColorOptionsFrame: TEditorColorOptionsFrame
Top = 0
Width = 5
end
object ColorElementPanel: TPanel
Left = 0
Height = 187
Top = 0
Width = 200
Align = alLeft
BorderSpacing.Right = 1
BevelOuter = bvNone
ClientHeight = 187
ClientWidth = 200
TabOrder = 0
object ColorElementTreeFilter: TTreeFilterEdit
Left = 0
Height = 23
Top = 6
Width = 200
ButtonWidth = 23
Align = alTop
BorderSpacing.Top = 6
NumGlyphs = 1
MaxLength = 0
TabOrder = 0
OnKeyDown = ColorElementTreeKeyDown
FilteredTreeview = ColorElementTree
end
object ColorElementTree: TTreeView
Left = 0
Height = 152
Top = 35
Width = 200
Align = alClient
AutoExpand = True
BorderSpacing.Top = 6
Constraints.MinWidth = 150
HideSelection = False
ReadOnly = True
ScrollBars = ssAutoBoth
ShowRoot = False
TabOrder = 1
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoToolTips, tvoNoDoubleClickExpand, tvoThemedDraw]
OnAdvancedCustomDrawItem = ColorElementTreeAdvancedCustomDrawItem
OnChange = ColorElementTreeChange
OnClick = ColorElementTreeClick
OnKeyDown = ColorElementTreeKeyDown
end
end
end
object ToolBar: TToolBar
Left = 0
@ -1129,7 +1154,7 @@ object EditorColorOptionsFrame: TEditorColorOptionsFrame
ParentShowHint = False
ShowCaptions = True
ShowHint = True
TabOrder = 3
TabOrder = 2
object UseSyntaxHighlightCheckBox: TToolButton
Left = 1
Top = 0

View File

@ -31,7 +31,7 @@ uses
// LCL
LCLType, LCLIntf, StdCtrls, ExtCtrls, Graphics, ComCtrls, Dialogs, Menus,
// LazControls
DividerBevel,
DividerBevel, TreeFilterEdit,
// SynEdit
SynEdit, SynEditMiscClasses, SynGutterCodeFolding, SynGutterLineNumber,
SynEditTypes, SynGutterChanges, SynEditMouseCmds, SynEditHighlighter, SynEditStrConst,
@ -88,6 +88,8 @@ type
LanguageMenu: TPopupMenu;
ColorSchemeMenu: TPopupMenu;
Splitter1: TSplitter;
ColorElementPanel: TPanel;
ColorElementTreeFilter: TTreeFilterEdit;
ColorElementTree: TTreeView;
SynColorAttrEditor1: TSynColorAttrEditor;
ToolBar: TToolBar;
@ -536,17 +538,10 @@ begin
ColorPreview.GetHighlighterAttriAtRowCol(XY, Token, Attri);
if Attri = nil then
Attri := FCurrentHighlighter.WhitespaceAttribute;
if Attri <> nil then begin
NewNode := ColorElementTree.Items.GetFirstNode;
while Assigned(NewNode) do begin
if (NewNode.Data <> nil)
and (TColorSchemeAttribute(NewNode.Data).StoredName = Attri.StoredName) then
break;
NewNode := NewNode.GetNext;
end;
end;
if NewNode <> nil then begin
NewNode.Selected := True;
if Attri <> nil then
begin
SelectNamedColor(Attri.StoredName);
FindCurHighlightElement;
end;
end;
@ -870,7 +865,9 @@ procedure TEditorColorOptionsFrame.ShowCurAttribute;
var
CanGlobal: Boolean;
begin
SynColorAttrEditor1.Enabled := FCurHighlightElement <> nil;
if (FCurHighlightElement = nil) then begin
SynColorAttrEditor1.CurHighlightElement := nil;
lblColorInfo.Visible := False;
Exit;
end;
@ -1148,16 +1145,20 @@ procedure TEditorColorOptionsFrame.FindCurHighlightElement;
begin
if (ColorElementTree.Selected <> nil) and
// (ColorElementTree.Selected.Parent = nil) and
(ColorElementTree.Selected.GetFirstChild <> nil)
(ColorElementTree.Selected.GetFirstVisibleChild <> nil)
then
ColorElementTree.Selected.GetFirstVisibleChild.Selected := True;
if (ColorElementTree.Selected <> nil) and
(FCurHighlightElement = TColorSchemeAttribute(ColorElementTree.Selected.Data))
then
ColorElementTree.Selected.GetFirstChild.Selected := True;
if (ColorElementTree.Selected = nil) or (ColorElementTree.Selected.Data = nil) then
exit;
if FCurHighlightElement = TColorSchemeAttribute(ColorElementTree.Selected.Data) then
exit;
if ColorElementTree.Selected = nil then
FCurHighlightElement := nil
else
FCurHighlightElement := TColorSchemeAttribute(ColorElementTree.Selected.Data);
FCurHighlightElement := TColorSchemeAttribute(ColorElementTree.Selected.Data);
ShowCurAttribute;
end;
@ -1752,16 +1753,16 @@ end;
procedure TEditorColorOptionsFrame.SelectNamedColor(XmlName: string);
var
i: Integer;
n: TTreeNode;
begin
for i := 0 to ColorElementTree.Items.Count - 1 do begin
if ColorElementTree.Items[i].Data = nil then continue;
if TColorSchemeAttribute(ColorElementTree.Items[i].Data).StoredName <> XmlName
then
continue;
ColorElementTree.Items[i].Selected := True;
break;
end;
for n in ColorElementTree.Items do
if assigned(n.Data) and (TColorSchemeAttribute(n.Data).StoredName = XmlName) then
begin
if not n.IsVisible then
ColorElementTreeFilter.Clear;
n.Selected := true;
break;
end;
end;
procedure TEditorColorOptionsFrame.SelectAhaColor(aha: TAdditionalHilightAttribute);