added symbol smart-filtering

This commit is contained in:
Basile Burg 2015-02-26 06:39:23 +01:00
parent 986c2f36ca
commit 0eb82a0dfe
2 changed files with 42 additions and 10 deletions

View File

@ -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

View File

@ -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);