mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-11 13:56:05 +02:00
IDE: use TreeView also for flat component list. Allows use of one FilterEdit for all views. Improve interaction with comp palette.
git-svn-id: trunk@41880 -
This commit is contained in:
parent
2ec180ab41
commit
52a80e24b4
@ -3,7 +3,6 @@ object ComponentListForm: TComponentListForm
|
||||
Height = 467
|
||||
Top = 40
|
||||
Width = 300
|
||||
ActiveControl = ListFilterEd
|
||||
Caption = 'Components'
|
||||
ClientHeight = 467
|
||||
ClientWidth = 300
|
||||
@ -44,22 +43,18 @@ object ComponentListForm: TComponentListForm
|
||||
ClientHeight = 366
|
||||
ClientWidth = 294
|
||||
TabOrder = 0
|
||||
object ComponentsListbox: TListBox
|
||||
object ListTree: TTreeView
|
||||
Left = 2
|
||||
Height = 362
|
||||
Top = 2
|
||||
Width = 290
|
||||
Align = alClient
|
||||
ItemHeight = 0
|
||||
OnClick = ComponentsClick
|
||||
OnDblClick = ComponentsDblClick
|
||||
OnDrawItem = ComponentsListboxDrawItem
|
||||
OnKeyDown = ComponentsListboxKeyDown
|
||||
ScrollWidth = 286
|
||||
Sorted = True
|
||||
Style = lbOwnerDrawFixed
|
||||
DefaultItemHeight = 18
|
||||
TabOrder = 0
|
||||
TopIndex = -1
|
||||
OnClick = ComponentsClick
|
||||
OnCustomDrawItem = TreeCustomDrawItem
|
||||
OnDblClick = ComponentsDblClick
|
||||
OnKeyDown = TreeKeyDown
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -87,9 +82,10 @@ object ComponentListForm: TComponentListForm
|
||||
ReadOnly = True
|
||||
ShowLines = False
|
||||
TabOrder = 0
|
||||
OnClick = ComponentsClick
|
||||
OnCustomDrawItem = TreeCustomDrawItem
|
||||
OnDblClick = ComponentsDblClick
|
||||
OnKeyDown = PalletteTreeKeyDown
|
||||
OnKeyDown = TreeKeyDown
|
||||
Options = [tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowRoot, tvoToolTips, tvoNoDoubleClickExpand, tvoThemedDraw]
|
||||
end
|
||||
end
|
||||
@ -117,9 +113,10 @@ object ComponentListForm: TComponentListForm
|
||||
Align = alClient
|
||||
ReadOnly = True
|
||||
TabOrder = 0
|
||||
OnClick = ComponentsClick
|
||||
OnCustomDrawItem = TreeCustomDrawItem
|
||||
OnDblClick = ComponentsDblClick
|
||||
OnKeyDown = InheritanceTreeKeyDown
|
||||
OnKeyDown = TreeKeyDown
|
||||
Options = [tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoNoDoubleClickExpand, tvoThemedDraw]
|
||||
end
|
||||
end
|
||||
@ -148,25 +145,6 @@ object ComponentListForm: TComponentListForm
|
||||
Caption = 'LabelSearch'
|
||||
ParentColor = False
|
||||
end
|
||||
object ListFilterEd: TListFilterEdit
|
||||
AnchorSideLeft.Control = LabelSearch
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = LabelSearch
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 82
|
||||
Height = 24
|
||||
Top = 2
|
||||
Width = 169
|
||||
UseFormActivate = True
|
||||
ButtonWidth = 23
|
||||
NumGlyphs = 1
|
||||
BorderSpacing.Left = 5
|
||||
Font.Color = clBtnShadow
|
||||
MaxLength = 0
|
||||
ParentFont = False
|
||||
TabOrder = 0
|
||||
FilteredListbox = ComponentsListbox
|
||||
end
|
||||
object TreeFilterEd: TTreeFilterEdit
|
||||
AnchorSideLeft.Control = LabelSearch
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
@ -181,7 +159,8 @@ object ComponentListForm: TComponentListForm
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 5
|
||||
MaxLength = 0
|
||||
TabOrder = 1
|
||||
TabOrder = 0
|
||||
FilteredTreeview = ListTree
|
||||
end
|
||||
end
|
||||
object ButtonPanel: TPanel
|
||||
|
@ -43,11 +43,10 @@ type
|
||||
{ TComponentListForm }
|
||||
|
||||
TComponentListForm = class(TForm)
|
||||
ListTree: TTreeView;
|
||||
UseAndCloseButton: TBitBtn;
|
||||
ButtonPanel: TPanel;
|
||||
LabelSearch: TLabel;
|
||||
ComponentsListbox: TListBox;
|
||||
ListFilterEd: TListFilterEdit;
|
||||
PageControl: TPageControl;
|
||||
Panel3: TPanel;
|
||||
Panel5: TPanel;
|
||||
@ -63,20 +62,19 @@ type
|
||||
procedure UseAndCloseButtonClick(Sender: TObject);
|
||||
procedure ComponentsDblClick(Sender: TObject);
|
||||
procedure ComponentsClick(Sender: TObject);
|
||||
procedure ComponentsListboxDrawItem(Control: TWinControl; Index: Integer;
|
||||
ARect: TRect; State: TOwnerDrawState);
|
||||
//procedure ComponentsListboxDrawItem(Control: TWinControl; Index: Integer;
|
||||
// ARect: TRect; State: TOwnerDrawState);
|
||||
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
||||
procedure TreeCustomDrawItem(Sender: TCustomTreeView;
|
||||
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
|
||||
procedure ComponentsListboxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure InheritanceTreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure PageControlChange(Sender: TObject);
|
||||
procedure PalletteTreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure TreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure UpdateComponentSelection(Sender: TObject);
|
||||
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
private
|
||||
PrevPageIndex: Integer;
|
||||
FComponentList: TRegisteredCompList;
|
||||
FKeepSelected: Boolean;
|
||||
procedure ClearSelection;
|
||||
procedure ComponentWasAdded;
|
||||
procedure FindAllLazarusComponents;
|
||||
@ -101,11 +99,11 @@ begin
|
||||
inherited Create(AOwner);
|
||||
FComponentList := TRegisteredCompList.Create;
|
||||
UseAndCloseButton.Caption := lisUseAndClose;
|
||||
ComponentsListBox.ItemHeight := ComponentPaletteImageHeight + 1;
|
||||
ListTree.DefaultItemHeight := ComponentPaletteImageHeight + 1;
|
||||
InheritanceTree.DefaultItemHeight:= ComponentPaletteImageHeight + 1;
|
||||
PalletteTree.DefaultItemHeight := ComponentPaletteImageHeight + 1;
|
||||
|
||||
//Translations..
|
||||
//Translations
|
||||
LabelSearch.Caption := lisMenuFind;
|
||||
Caption := lisCmpLstComponents;
|
||||
TabSheetListBox.Caption := lisCmpLstList;
|
||||
@ -115,11 +113,9 @@ begin
|
||||
//PLEASE add a defaultpage property in TPagecontrol
|
||||
PrevPageIndex := -1;
|
||||
PageControl.ActivePage := TabSheetListBox;
|
||||
TreeFilterEd.Visible := False;
|
||||
|
||||
FindAllLazarusComponents;
|
||||
UpdateComponentSelection(nil);
|
||||
ListFilterEd.InvalidateFilter;
|
||||
TreeFilterEd.InvalidateFilter;
|
||||
IDEComponentPalette.AddHandlerComponentAdded(@ComponentWasAdded);
|
||||
end;
|
||||
|
||||
@ -139,26 +135,18 @@ end;
|
||||
|
||||
procedure TComponentListForm.ClearSelection;
|
||||
begin
|
||||
if ComponentsListbox.IsVisible then
|
||||
ComponentsListbox.ItemIndex := -1
|
||||
else if PalletteTree.IsVisible then
|
||||
PalletteTree.Selected := Nil
|
||||
else if InheritanceTree.IsVisible then
|
||||
InheritanceTree.Selected := Nil;
|
||||
ListTree.Selected := Nil;
|
||||
PalletteTree.Selected := Nil;
|
||||
InheritanceTree.Selected := Nil;
|
||||
end;
|
||||
|
||||
function TComponentListForm.GetSelectedComponent: TRegisteredComponent;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
Result:=nil;
|
||||
if ComponentsListbox.IsVisible then
|
||||
if ListTree.IsVisible then
|
||||
begin
|
||||
i := ComponentsListbox.ItemIndex;
|
||||
if i>=0 then begin
|
||||
Result := TRegisteredComponent(ComponentsListbox.Items.Objects[i]);
|
||||
DebugLn(['*** Getting component ', Result.ComponentClass.ClassName, ' from index ', i]);
|
||||
end;
|
||||
if Assigned(ListTree.Selected) then
|
||||
Result := TRegisteredComponent(ListTree.Selected.Data);
|
||||
end
|
||||
else if PalletteTree.IsVisible then
|
||||
begin
|
||||
@ -211,7 +199,7 @@ procedure TComponentListForm.UpdateComponentSelection(Sender: TObject);
|
||||
var
|
||||
AComponent: TRegisteredComponent;
|
||||
AClassName: string;
|
||||
AClassList, List: TStringlist;
|
||||
AClassList, List: TStringList;
|
||||
i, j, AIndex: Integer;
|
||||
ANode: TTreeNode;
|
||||
AClass: TClass;
|
||||
@ -219,18 +207,18 @@ begin
|
||||
if [csDestroying,csLoading]*ComponentState<>[] then exit;
|
||||
Screen.Cursor := crHourGlass;
|
||||
try
|
||||
//First tabsheet (ComponentsListbox)
|
||||
ComponentsListbox.Items.BeginUpdate;
|
||||
//First tabsheet (List)
|
||||
ListTree.BeginUpdate;
|
||||
try
|
||||
ComponentsListbox.Items.Clear;
|
||||
ListTree.Items.Clear;
|
||||
for i := 0 to FComponentList.Count-1 do
|
||||
begin
|
||||
AComponent := FComponentList[i];
|
||||
AClassName := AComponent.ComponentClass.ClassName;
|
||||
ListFilterEd.Items.AddObject(AClassName, AComponent);
|
||||
ANode := ListTree.Items.AddChildObject(Nil, AClassName, AComponent);
|
||||
end;
|
||||
finally
|
||||
ComponentsListbox.Items.EndUpdate;
|
||||
ListTree.EndUpdate;
|
||||
end;
|
||||
|
||||
//Second tabsheet (palette layout)
|
||||
@ -254,8 +242,8 @@ begin
|
||||
end;
|
||||
|
||||
//Third tabsheet (component inheritence)
|
||||
List := TStringlist.Create;
|
||||
AClassList := TStringlist.Create;
|
||||
List := TStringList.Create;
|
||||
AClassList := TStringList.Create;
|
||||
InheritanceTree.Items.BeginUpdate;
|
||||
try
|
||||
InheritanceTree.Items.Clear;
|
||||
@ -306,7 +294,7 @@ begin
|
||||
Screen.Cursor := crDefault;
|
||||
end;
|
||||
end;
|
||||
|
||||
{
|
||||
procedure TComponentListForm.ComponentsListboxDrawItem(Control: TWinControl;
|
||||
Index: Integer; ARect: TRect; State: TOwnerDrawState);
|
||||
var
|
||||
@ -337,7 +325,7 @@ begin
|
||||
ARect.Top+(ARect.Bottom-ARect.Top-TxtH) div 2, CurStr);
|
||||
end;
|
||||
end;
|
||||
|
||||
}
|
||||
procedure TComponentListForm.TreeCustomDrawItem(Sender: TCustomTreeView;
|
||||
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
|
||||
var
|
||||
@ -384,13 +372,13 @@ begin
|
||||
end;
|
||||
|
||||
procedure TComponentListForm.ComponentsDblClick(Sender: TObject);
|
||||
// This is used for all 3 lists / treeviews
|
||||
// This is used for all 3 treeviews
|
||||
begin
|
||||
UseAndCloseButtonClick(nil); // Select and close this form
|
||||
end;
|
||||
|
||||
procedure TComponentListForm.ComponentsClick(Sender: TObject);
|
||||
// This is used for all 3 lists / treeviews
|
||||
// This is used for all 3 treeviews
|
||||
var
|
||||
AComponent: TRegisteredComponent;
|
||||
begin
|
||||
@ -400,22 +388,7 @@ begin
|
||||
UpdateButtonState;
|
||||
end;
|
||||
|
||||
procedure TComponentListForm.ComponentsListboxKeyDown(Sender: TObject;
|
||||
var Key: Word; Shift: TShiftState);
|
||||
begin
|
||||
if Key = VK_RETURN then
|
||||
if (ComponentsListbox.ItemIndex >= 0) then
|
||||
ComponentsDblClick(Sender);
|
||||
end;
|
||||
|
||||
procedure TComponentListForm.PalletteTreeKeyDown(Sender: TObject;
|
||||
var Key: Word; Shift: TShiftState);
|
||||
begin
|
||||
if Key = VK_RETURN then
|
||||
ComponentsDblClick(Sender);
|
||||
end;
|
||||
|
||||
procedure TComponentListForm.InheritanceTreeKeyDown(Sender: TObject;
|
||||
procedure TComponentListForm.TreeKeyDown(Sender: TObject;
|
||||
var Key: Word; Shift: TShiftState);
|
||||
begin
|
||||
if Key = VK_RETURN then
|
||||
@ -428,41 +401,23 @@ begin
|
||||
'TComponentListForm.PageControlChange: PageControl.PageIndex = PrevPageIndex = %d',
|
||||
[PrevPageIndex]));
|
||||
case PageControl.PageIndex of
|
||||
0: begin
|
||||
ListFilterEd.Visible := True;
|
||||
ListFilterEd.SetFocus;
|
||||
if PrevPageIndex > 0 then
|
||||
ListFilterEd.Text := TreeFilterEd.Text;
|
||||
ListFilterEd.InvalidateFilter;
|
||||
TreeFilterEd.Visible := False;
|
||||
end;
|
||||
1: begin
|
||||
TreeFilterEd.Visible := True;
|
||||
TreeFilterEd.FilteredTreeview := PalletteTree;
|
||||
TreeFilterEd.SetFocus;
|
||||
if PrevPageIndex <= 0 then
|
||||
TreeFilterEd.Text := ListFilterEd.Text;
|
||||
TreeFilterEd.InvalidateFilter;
|
||||
ListFilterEd.Visible := False;
|
||||
end;
|
||||
2: begin
|
||||
TreeFilterEd.Visible := True;
|
||||
TreeFilterEd.FilteredTreeview := InheritanceTree;
|
||||
TreeFilterEd.SetFocus;
|
||||
if PrevPageIndex <= 0 then
|
||||
TreeFilterEd.Text := ListFilterEd.Text;
|
||||
TreeFilterEd.InvalidateFilter;
|
||||
ListFilterEd.Visible := False;
|
||||
end;
|
||||
0: TreeFilterEd.FilteredTreeview := ListTree;
|
||||
1: TreeFilterEd.FilteredTreeview := PalletteTree;
|
||||
2: TreeFilterEd.FilteredTreeview := InheritanceTree;
|
||||
end;
|
||||
TreeFilterEd.InvalidateFilter;
|
||||
PrevPageIndex := PageControl.PageIndex;
|
||||
end;
|
||||
|
||||
procedure TComponentListForm.FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
||||
begin
|
||||
// Using a dock manager...
|
||||
if Parent<>nil then
|
||||
begin
|
||||
if Parent=nil then begin
|
||||
ClearSelection;
|
||||
if not fKeepSelected then
|
||||
IDEComponentPalette.Selected := Nil;
|
||||
end
|
||||
else begin
|
||||
// Using a dock manager...
|
||||
CloseAction := caNone;
|
||||
//todo: helper function in DockManager or IDEDockMaster for closing forms.
|
||||
// Only close the window if it's floating.
|
||||
@ -474,13 +429,14 @@ begin
|
||||
TCustomForm(HostDockSite).Close;
|
||||
end;
|
||||
end;
|
||||
FKeepSelected := False;
|
||||
end;
|
||||
|
||||
procedure TComponentListForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
//Close the form on escape key like every other IDE dialog does
|
||||
begin
|
||||
if (Key=VK_ESCAPE) and (Parent=nil) then
|
||||
UseAndCloseButtonClick(nil);
|
||||
if Key=VK_ESCAPE then
|
||||
Close;
|
||||
end;
|
||||
|
||||
procedure TComponentListForm.UseAndCloseButtonClick(Sender: TObject);
|
||||
@ -491,11 +447,9 @@ begin
|
||||
AComponent := GetSelectedComponent;
|
||||
if AComponent<>nil then begin
|
||||
IDEComponentPalette.Selected := AComponent;
|
||||
ClearSelection;
|
||||
FKeepSelected := True;
|
||||
Close;
|
||||
end;
|
||||
// IDEComponentPalette.Selected := nil; // Remove component selection from palette.
|
||||
// Close;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user