From 7758c1e4aeb56f0133bf13e99fa3aac69fb0cb4a Mon Sep 17 00:00:00 2001 From: juha Date: Sat, 23 Jan 2016 22:25:36 +0000 Subject: [PATCH] =?UTF-8?q?IDE:=20Allow=20ComponentList=20to=20unselect=20?= =?UTF-8?q?a=20component.=20Issue=20#29348,=20patch=20from=20Bal=C3=A1zs?= =?UTF-8?q?=20Sz=C3=A9kely.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: trunk@51395 - --- ide/componentlist.lfm | 13 +++++++-- ide/componentlist.pas | 65 ++++++++++++++++++++++++++++++++++--------- 2 files changed, 62 insertions(+), 16 deletions(-) diff --git a/ide/componentlist.lfm b/ide/componentlist.lfm index 1f42c57b6f..1fdacf93e2 100644 --- a/ide/componentlist.lfm +++ b/ide/componentlist.lfm @@ -54,9 +54,9 @@ object ComponentListForm: TComponentListForm ShowLines = False ShowRoot = False TabOrder = 0 - OnChange = ComponentsChange OnDblClick = ComponentsDblClick OnKeyPress = TreeKeyPress + OnSelectionChanged = ListTreeSelectionChanged Options = [tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRowSelect, tvoToolTips] end end @@ -91,9 +91,9 @@ object ComponentListForm: TComponentListForm ScrollBars = ssAutoBoth ShowLines = False TabOrder = 0 - OnChange = ComponentsChange OnDblClick = ComponentsDblClick OnKeyPress = TreeKeyPress + OnSelectionChanged = ListTreeSelectionChanged Options = [tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoRowSelect, tvoShowButtons, tvoShowRoot, tvoToolTips] end end @@ -128,9 +128,9 @@ object ComponentListForm: TComponentListForm RowSelect = True ScrollBars = ssAutoBoth TabOrder = 0 - OnChange = ComponentsChange OnDblClick = ComponentsDblClick OnKeyPress = TreeKeyPress + OnSelectionChanged = ListTreeSelectionChanged Options = [tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips] end end @@ -231,4 +231,11 @@ object ComponentListForm: TComponentListForm left = 56 top = 168 end + object tmDeselect: TTimer + Enabled = False + Interval = 100 + OnTimer = tmDeselectTimer + left = 155 + top = 172 + end end diff --git a/ide/componentlist.pas b/ide/componentlist.pas index 2c7de225ea..646213be8d 100644 --- a/ide/componentlist.pas +++ b/ide/componentlist.pas @@ -62,18 +62,20 @@ type TabSheetPaletteTree: TTabSheet; TabSheetInheritance: TTabSheet; TabSheetList: TTabSheet; + tmDeselect: TTimer; TreeFilterEd: TTreeFilterEdit; procedure FormActivate(Sender: TObject); procedure FormShow(Sender: TObject); + procedure ListTreeSelectionChanged(Sender: TObject); procedure miCollapseAllClick(Sender: TObject); procedure miCollapseClick(Sender: TObject); procedure miExpandAllClick(Sender: TObject); procedure miExpandClick(Sender: TObject); procedure OKButtonClick(Sender: TObject); - procedure ComponentsDblClick(Sender: TObject); - procedure ComponentsChange(Sender: TObject; {%H-}Node: TTreeNode); - procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); + procedure ComponentsDblClick(Sender: TObject); + procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure pmCollapseExpandPopup(Sender: TObject); + procedure tmDeselectTimer(Sender: TObject); procedure TreeFilterEdAfterFilter(Sender: TObject); procedure PageControlChange(Sender: TObject); procedure TreeKeyPress(Sender: TObject; var Key: char); @@ -85,6 +87,9 @@ type FClassList: TStringList; FKeepSelected: Boolean; FFirstTimeAnchored: Boolean; + FIgnoreSelection: Boolean; + FPageControlChange: Boolean; + FActiveTree: TTreeView; procedure ClearSelection; procedure SelectionWasChanged; procedure ComponentWasAdded({%H-}ALookupRoot, {%H-}AComponent: TComponent; @@ -114,7 +119,7 @@ begin inherited Create(AOwner); Name:=NonModalIDEWindowNames[nmiwComponentList]; - + FActiveTree := ListTree; //Translations LabelSearch.Caption := lisMenuFind; Caption := lisCmpLstComponents; @@ -201,11 +206,16 @@ begin else Node := Nil; aTree.Selected := Node; + if aTree.Selected <> nil then + aTree.Selected.MakeVisible; end; procedure TComponentListForm.SelectionWasChanged; begin // ToDo: Select the component in active treeview. + if FIgnoreSelection then + Exit; + if ListTree.IsVisible then SelectTreeComp(ListTree) else if PalletteTree.IsVisible then @@ -386,8 +396,7 @@ begin OKButtonClick(nil); // Select and close this form end; -procedure TComponentListForm.ComponentsChange(Sender: TObject; Node: TTreeNode); -// This is used for all 3 treeviews +procedure TComponentListForm.ListTreeSelectionChanged(Sender: TObject); var AComponent: TRegisteredComponent; begin @@ -401,9 +410,17 @@ begin InheritanceTree.Selected := Nil; end else begin + if FPageControlChange then + Exit; AComponent:=GetSelectedComponent; if AComponent<>nil then - IDEComponentPalette.SetSelectedComp(AComponent, ssShift in GetKeyShiftState); + IDEComponentPalette.SetSelectedComp(AComponent, ssShift in GetKeyShiftState) + else + begin + FIgnoreSelection := True; + IDEComponentPalette.SetSelectedComp(nil, False); + FIgnoreSelection := False; + end; UpdateButtonState; end; end; @@ -417,18 +434,40 @@ end; procedure TComponentListForm.PageControlChange(Sender: TObject); begin + FPageControlChange := True; Assert(PageControl.PageIndex <> PrevPageIndex, Format( 'TComponentListForm.PageControlChange: PageControl.PageIndex = PrevPageIndex = %d', [PrevPageIndex])); case PageControl.PageIndex of - 0: TreeFilterEd.FilteredTreeview := ListTree; - 1: TreeFilterEd.FilteredTreeview := PalletteTree; - 2: TreeFilterEd.FilteredTreeview := InheritanceTree; + 0: begin + TreeFilterEd.FilteredTreeview := ListTree; + FActiveTree := ListTree; + end; + 1: begin + TreeFilterEd.FilteredTreeview := PalletteTree; + FActiveTree := PalletteTree; + end; + 2: begin + TreeFilterEd.FilteredTreeview := InheritanceTree; + FActiveTree := InheritanceTree; + end; end; TreeFilterEd.InvalidateFilter; PrevPageIndex := PageControl.PageIndex; + FActiveTree.BeginUpdate; + tmDeselect.Enabled := True; end; +procedure TComponentListForm.tmDeselectTimer(Sender: TObject); +begin + tmDeselect.Enabled := False; + FActiveTree.Selected := nil; + SelectionWasChanged; + FActiveTree.EndUpdate; + FPageControlChange := False; +end; + + procedure TComponentListForm.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin if Parent=nil then begin @@ -456,10 +495,10 @@ procedure TComponentListForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: begin if Key=VK_ESCAPE then begin - if ListTree.Selected = nil then //close only if no component is selected + if IDEComponentPalette.Selected = nil then //close only if no component is selected Close else - ListTree.Selected := nil; //unselect if component is selected + ClearSelection; //unselect if component is selected end; end; @@ -470,6 +509,7 @@ var begin AComponent := GetSelectedComponent; if AComponent<>nil then begin + FPageControlChange:=True; IDEComponentPalette.Selected := AComponent; FKeepSelected := True; Close; @@ -529,6 +569,5 @@ begin end; end; - end.