diff --git a/src/ce_symlist.lfm b/src/ce_symlist.lfm index 77bf02c1..0f078999 100644 --- a/src/ce_symlist.lfm +++ b/src/ce_symlist.lfm @@ -1,7 +1,7 @@ inherited CESymbolListWidget: TCESymbolListWidget - Left = 1548 + Left = 985 Height = 430 - Top = 457 + Top = 215 Width = 310 Caption = 'Symbol list' ClientHeight = 430 @@ -25,18 +25,16 @@ inherited CESymbolListWidget: TCESymbolListWidget Align = alClient BorderSpacing.Around = 4 DefaultItemHeight = 18 - ExpandSignType = tvestPlusMinus HideSelection = False Images = imgList ReadOnly = True RightClickSelect = True - RowSelect = True ScrollBars = ssAutoBoth SelectionColor = clActiveBorder TabOrder = 0 OnDeletion = TreeDeletion OnKeyPress = TreeKeyPress - Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] + Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] Items.Data = { F9FFFFFF02000B000000000000000000000000000000FFFFFFFF000000000000 00000005000000416C696173010000000100000001000000FFFFFFFF00000000 @@ -73,6 +71,7 @@ inherited CESymbolListWidget: TCESymbolListWidget Top = 2 Width = 272 OnAfterFilter = TreeFilterEdit1AfterFilter + OnFilterItem = TreeFilterEdit1FilterItem ButtonWidth = 28 NumGlyphs = 1 Align = alClient @@ -80,6 +79,7 @@ inherited CESymbolListWidget: TCESymbolListWidget BorderSpacing.Around = 2 MaxLength = 0 TabOrder = 0 + OnMouseEnter = TreeFilterEdit1MouseEnter FilteredTreeview = Tree end object btnRefresh: TBitBtn diff --git a/src/ce_symlist.pas b/src/ce_symlist.pas index a2fae584..6e303201 100644 --- a/src/ce_symlist.pas +++ b/src/ce_symlist.pas @@ -7,7 +7,7 @@ interface uses Classes, SysUtils, TreeFilterEdit, Forms, Controls, Graphics, ExtCtrls, Menus, ComCtrls, ce_widget, jsonparser, process, actnlist, Buttons, Clipbrd, LCLProc, - ce_common, ce_observer, ce_synmemo, ce_interfaces, ce_writableComponent; + ce_common, ce_observer, ce_synmemo, ce_interfaces, ce_writableComponent, EditBtn; type @@ -77,18 +77,22 @@ type fRefreshOnFocus: boolean; fShowChildCategories: boolean; fAutoRefreshDelay: Integer; + fSmartFilter: boolean; published property autoRefresh: boolean read fAutoRefresh write fAutoRefresh; property refreshOnChange: boolean read fRefreshOnChange write fRefreshOnChange; - property refreshOnFocus: boolean read fRefreshOnFocus write fRefreshOnFocus default true; - property showChildCategories: boolean read fShowChildCategories write fShowChildCategories default true; - property autoRefreshDelay: Integer read fAutoRefreshDelay write fAutoRefreshDelay default 1500; + property refreshOnFocus: boolean read fRefreshOnFocus write fRefreshOnFocus; + property showChildCategories: boolean read fShowChildCategories write fShowChildCategories; + property autoRefreshDelay: Integer read fAutoRefreshDelay write fAutoRefreshDelay; + property smartFilter: boolean read fSmartFilter write fSmartFilter; public constructor Create(AOwner: TComponent); override; procedure Assign(Source: TPersistent); override; procedure AssignTo(Dest: TPersistent); override; end; + { TCESymbolListWidget } + TCESymbolListWidget = class(TCEWidget, ICEMultiDocObserver, ICEEditableOptions) btnRefresh: TBitBtn; imgList: TImageList; @@ -98,6 +102,9 @@ type procedure btnRefreshClick(Sender: TObject); procedure TreeDeletion(Sender: TObject; Node: TTreeNode); procedure TreeFilterEdit1AfterFilter(Sender: TObject); + function TreeFilterEdit1FilterItem(Item: TObject; out Done: Boolean + ): Boolean; + procedure TreeFilterEdit1MouseEnter(Sender: TObject); procedure TreeKeyPress(Sender: TObject; var Key: char); private fOptions: TCESymbolListOptions; @@ -115,6 +122,7 @@ type fRefreshOnChange: boolean; fRefreshOnFocus: boolean; fShowChildCategories: boolean; + fSmartFilter: boolean; fToolOutput: TMemoryStream; ndAlias, ndClass, ndEnum, ndFunc, ndUni: TTreeNode; ndImp, ndIntf, ndMix, ndStruct, ndTmp, ndVar: TTreeNode; @@ -230,6 +238,7 @@ begin inherited; fRefreshOnFocus := true; fShowChildCategories := true; + fSmartFilter := true; fAutoRefreshDelay := 1500; end; @@ -246,6 +255,7 @@ begin fRefreshOnChange := widg.fRefreshOnChange; fAutoRefresh := widg.fAutoRefresh; fShowChildCategories := widg.fShowChildCategories; + fSmartFilter := widg.fSmartFilter; end else inherited; end; @@ -263,6 +273,7 @@ begin widg.fRefreshOnChange := fRefreshOnChange; widg.fAutoRefresh := fAutoRefresh; widg.fShowChildCategories := fShowChildCategories; + widg.fSmartFilter := fSmartFilter; // widg.fActAutoRefresh.Checked := fAutoRefresh; widg.fActRefreshOnChange.Checked:= fRefreshOnChange; @@ -312,7 +323,8 @@ begin fSyms := TSymbolList.create(nil); fToolOutput := TMemoryStream.create; // - fOptions := TCESymbolListOptions.Create(nil); + fOptions := TCESymbolListOptions.Create(self); + fOptions.Name:= 'symbolListOptions'; fname := getCoeditDocPath + OptsFname; if FileExists(fname) then fOptions.loadFromFile(fname); @@ -549,6 +561,26 @@ begin updateVisibleCat; end; +function TCESymbolListWidget.TreeFilterEdit1FilterItem(Item: TObject; out + Done: Boolean): Boolean; +begin + if not fSmartFilter then exit; + // + if TreeFilterEdit1.Filter <> '' then + tree.FullExpand + else if tree.Selected = nil then + tree.FullCollapse + else tree.MakeSelectionVisible; + result := false; +end; + +procedure TCESymbolListWidget.TreeFilterEdit1MouseEnter(Sender: TObject); +begin + if not fSmartFilter then exit; + // + tree.Selected := nil; +end; + procedure TCESymbolListWidget.TreeKeyPress(Sender: TObject; var Key: char); begin if Key = #13 then TreeDblClick(nil);