IDE: help selector: show database

git-svn-id: trunk@50693 -
This commit is contained in:
mattias 2015-12-06 14:41:42 +00:00
parent 50ea7d1377
commit 41aa946ab3
2 changed files with 80 additions and 35 deletions

View File

@ -8,34 +8,34 @@ object HelpSelectorDialog: THelpSelectorDialog
ClientWidth = 500 ClientWidth = 500
OnClose = HelpSelectorDialogClose OnClose = HelpSelectorDialogClose
Position = poScreenCenter Position = poScreenCenter
LCLVersion = '1.3' LCLVersion = '1.7'
object NodesGroupBox: TGroupBox object NodesGroupBox: TGroupBox
Left = 6 Left = 6
Height = 239 Height = 237
Top = 6 Top = 6
Width = 488 Width = 488
Align = alClient Align = alClient
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'NodesGroupBox' Caption = 'NodesGroupBox'
ClientHeight = 221 ClientHeight = 220
ClientWidth = 484 ClientWidth = 484
TabOrder = 0 TabOrder = 0
object NodesListBox: TListBox object NodesTreeView: TTreeView
Left = 6 Left = 0
Height = 209 Height = 220
Top = 6 Top = 0
Width = 472 Width = 484
Align = alClient Align = alClient
BorderSpacing.Around = 6 DefaultItemHeight = 18
ItemHeight = 0
OnDblClick = NodesListBoxDblClick
TabOrder = 0 TabOrder = 0
OnDblClick = NodesTreeViewDblClick
OnSelectionChanged = NodesTreeViewSelectionChanged
end end
end end
object BtnPanel: TButtonPanel object BtnPanel: TButtonPanel
Left = 6 Left = 6
Height = 26 Height = 28
Top = 251 Top = 249
Width = 488 Width = 488
OKButton.Name = 'OKButton' OKButton.Name = 'OKButton'
OKButton.DefaultCaption = True OKButton.DefaultCaption = True

View File

@ -42,8 +42,8 @@ uses
// IDEIntf // IDEIntf
PropEdits, ObjectInspector, ProjectIntf, TextTools, PropEdits, ObjectInspector, ProjectIntf, TextTools,
IDEDialogs, LazHelpIntf, LazHelpHTML, HelpFPDoc, MacroIntf, IDEWindowIntf, IDEDialogs, LazHelpIntf, LazHelpHTML, HelpFPDoc, MacroIntf, IDEWindowIntf,
IDEMsgIntf, PackageIntf, LazIDEIntf, HelpIntfs, IDEHelpIntf, IDEMsgIntf, PackageIntf, LazIDEIntf, HelpIntfs, ComCtrls, IDEHelpIntf,
IDEExternToolIntf, IDEExternToolIntf, IDEImagesIntf,
// IDE // IDE
LazarusIDEStrConsts, TransferMacros, DialogProcs, IDEOptionDefs, LazarusIDEStrConsts, TransferMacros, DialogProcs, IDEOptionDefs,
ObjInspExt, EnvironmentOpts, AboutFrm, Project, MainBar, ObjInspExt, EnvironmentOpts, AboutFrm, Project, MainBar,
@ -250,16 +250,20 @@ type
THelpSelectorDialog = class(TForm) THelpSelectorDialog = class(TForm)
BtnPanel: TButtonPanel; BtnPanel: TButtonPanel;
NodesGroupBox: TGroupBox; NodesGroupBox: TGroupBox;
NodesListBox: TListBox; NodesTreeView: TTreeView;
procedure HelpSelectorDialogClose(Sender: TObject; var {%H-}CloseAction: TCloseAction); procedure HelpSelectorDialogClose(Sender: TObject; var {%H-}CloseAction: TCloseAction);
procedure NodesListBoxDblClick(Sender: TObject); procedure NodesTreeViewDblClick(Sender: TObject);
procedure NodesTreeViewSelectionChanged(Sender: TObject);
private private
FNodes: THelpNodeQueryList; FNodes: THelpNodeQueryList;
FImgIndexDB, FImgIndexNode: Integer;
procedure SetNodes(const AValue: THelpNodeQueryList); procedure SetNodes(const AValue: THelpNodeQueryList);
procedure FillNodesListBox; procedure FillNodesTV;
procedure UpdateButtons;
public public
constructor Create(TheOwner: TComponent); override; constructor Create(TheOwner: TComponent); override;
property Nodes: THelpNodeQueryList read FNodes write SetNodes; property Nodes: THelpNodeQueryList read FNodes write SetNodes;
function GetSelectedNodeQuery: THelpNodeQuery;
end; end;
{ Help Contexts for IDE help } { Help Contexts for IDE help }
@ -1024,34 +1028,64 @@ begin
IDEDialogLayoutList.SaveLayout(Self); IDEDialogLayoutList.SaveLayout(Self);
end; end;
procedure THelpSelectorDialog.NodesListBoxDblClick(Sender: TObject); procedure THelpSelectorDialog.NodesTreeViewDblClick(Sender: TObject);
begin begin
ModalResult := mrOK; ModalResult := mrOK;
end; end;
procedure THelpSelectorDialog.NodesTreeViewSelectionChanged(Sender: TObject);
begin
UpdateButtons;
end;
procedure THelpSelectorDialog.SetNodes(const AValue: THelpNodeQueryList); procedure THelpSelectorDialog.SetNodes(const AValue: THelpNodeQueryList);
begin begin
if FNodes=AValue then exit; if FNodes=AValue then exit;
FNodes:=AValue; FNodes:=AValue;
FillNodesListBox; FillNodesTV;
end; end;
procedure THelpSelectorDialog.FillNodesListBox; procedure THelpSelectorDialog.FillNodesTV;
var var
List: TStringList;
i: Integer; i: Integer;
NodeQuery: THelpNodeQuery; NodeQuery: THelpNodeQuery;
Node: THelpNode;
DB: THelpDatabase;
DBTVNode, TVNode: TTreeNode;
begin begin
List:=TStringList.Create; NodesTreeView.BeginUpdate;
if (Nodes<>nil) then begin try
for i:=0 to Nodes.Count-1 do begin TVNode:=nil;
NodeQuery:=Nodes[i]; NodesTreeView.Items.Clear;
List.Add(NodeQuery.AsString); if (Nodes<>nil) then begin
for i:=0 to Nodes.Count-1 do begin
NodeQuery:=Nodes[i];
Node:=NodeQuery.Node;
DB:=Node.Owner;
DBTVNode:=NodesTreeView.Items.FindTopLvlNode(DB.ID);
if DBTVNode=nil then
begin
DBTVNode:=NodesTreeView.Items.AddChild(nil,DB.ID);
DBTVNode.ImageIndex:=FImgIndexDB;
end;
TVNode:=NodesTreeView.Items.AddChild(DBTVNode,NodeQuery.AsString);
TVNode.ImageIndex:=FImgIndexNode;
TVNode.Data:=NodeQuery;
DBTVNode.Expand(true);
end;
end; end;
NodesTreeView.Selected:=TVNode;
finally
NodesTreeView.EndUpdate;
end; end;
NodesListBox.Items.Assign(List); end;
List.Free;
if NodesListBox.Count > 0 then NodesListBox.ItemIndex := 0; procedure THelpSelectorDialog.UpdateButtons;
begin
BtnPanel.OKButton.Enabled:=GetSelectedNodeQuery<>nil;
end; end;
constructor THelpSelectorDialog.Create(TheOwner: TComponent); constructor THelpSelectorDialog.Create(TheOwner: TComponent);
@ -1062,6 +1096,20 @@ begin
Caption := lisHelpSelectorDialog; Caption := lisHelpSelectorDialog;
NodesGroupBox.Caption:=lisSelectAHelpItem; NodesGroupBox.Caption:=lisSelectAHelpItem;
BtnPanel.OKButton.Caption:=lisMenuOk; BtnPanel.OKButton.Caption:=lisMenuOk;
NodesTreeView.Images:=IDEImages.Images_16;
FImgIndexDB:=IDEImages.LoadImage(16, 'item_package');
FImgIndexNode:=IDEImages.LoadImage(16, 'menu_help');
end;
function THelpSelectorDialog.GetSelectedNodeQuery: THelpNodeQuery;
var
TVNode: TTreeNode;
begin
Result:=nil;
TVNode:=NodesTreeView.Selected;
if (TVNode=nil) or (TVNode.Data=nil) then exit;
Result:=TObject(TVNode.Data) as THelpNodeQuery;
end; end;
{ TIDEHelpDatabases } { TIDEHelpDatabases }
@ -1073,7 +1121,6 @@ function TIDEHelpDatabases.ShowHelpSelector(Query: THelpQuery;
): TShowHelpResult; ): TShowHelpResult;
var var
Dialog: THelpSelectorDialog; Dialog: THelpSelectorDialog;
i: LongInt;
begin begin
Selection:=nil; Selection:=nil;
Result:=shrNone; Result:=shrNone;
@ -1081,11 +1128,9 @@ begin
try try
Dialog.Nodes:=Nodes; Dialog.Nodes:=Nodes;
if Dialog.ShowModal=mrOk then begin if Dialog.ShowModal=mrOk then begin
i:=Dialog.NodesListBox.ItemIndex; Selection:=Dialog.GetSelectedNodeQuery;
if i>=0 then begin if Selection<>nil then
Selection:=Nodes[i];
Result:=shrSuccess; Result:=shrSuccess;
end;
end else begin end else begin
Result:=shrCancel; Result:=shrCancel;
end; end;