IDE: install pkg set dlg: draw overlay icons, issue #22815

git-svn-id: trunk@38608 -
This commit is contained in:
mattias 2012-09-10 08:34:17 +00:00
parent 14e266b3ba
commit 160fa589a7
2 changed files with 47 additions and 5 deletions

View File

@ -69,6 +69,7 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
ShowLines = False ShowLines = False
ShowRoot = False ShowRoot = False
TabOrder = 0 TabOrder = 0
OnAdvancedCustomDrawItem = TreeViewAdvancedCustomDrawItem
OnDblClick = InstallTreeViewDblClick OnDblClick = InstallTreeViewDblClick
OnSelectionChanged = InstallTreeViewSelectionChanged OnSelectionChanged = InstallTreeViewSelectionChanged
Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoToolTips, tvoThemedDraw] Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoToolTips, tvoThemedDraw]
@ -123,6 +124,7 @@ object InstallPkgSetDialog: TInstallPkgSetDialog
ShowLines = False ShowLines = False
ShowRoot = False ShowRoot = False
TabOrder = 1 TabOrder = 1
OnAdvancedCustomDrawItem = TreeViewAdvancedCustomDrawItem
OnDblClick = AvailableTreeViewDblClick OnDblClick = AvailableTreeViewDblClick
OnKeyPress = AvailableTreeViewKeyPress OnKeyPress = AvailableTreeViewKeyPress
OnSelectionChanged = AvailableTreeViewSelectionChanged OnSelectionChanged = AvailableTreeViewSelectionChanged

View File

@ -40,9 +40,9 @@ interface
uses uses
Classes, SysUtils, contnrs, LCLProc, Forms, Controls, Graphics, Dialogs, Classes, SysUtils, contnrs, LCLProc, Forms, Controls, Graphics, Dialogs,
KeywordFuncLists, StdCtrls, Buttons, FileUtil, ExtCtrls, ComCtrls, EditBtn, KeywordFuncLists, StdCtrls, Buttons, FileUtil, ExtCtrls, ComCtrls, EditBtn,
LCLType, AVL_Tree, Laz2_XMLCfg, TreeFilterEdit, PackageIntf, IDEImagesIntf, LCLType, ImgList, AVL_Tree, Laz2_XMLCfg, TreeFilterEdit, PackageIntf,
IDEHelpIntf, IDEDialogs, LazarusIDEStrConsts, EnvironmentOpts, InputHistory, IDEImagesIntf, IDEHelpIntf, IDEDialogs, LazarusIDEStrConsts, EnvironmentOpts,
LazConf, IDEProcs, PackageDefs, PackageSystem, PackageLinks, InputHistory, LazConf, IDEProcs, PackageDefs, PackageSystem, PackageLinks,
IDEContextHelpEdit; IDEContextHelpEdit;
type type
@ -57,6 +57,7 @@ type
LPKFilename: string; LPKFilename: string;
InLazSrc: boolean; // lpk is in lazarus source directory InLazSrc: boolean; // lpk is in lazarus source directory
Installed: TPackageInstallType; Installed: TPackageInstallType;
Base: boolean; // is base package, can not be uninstalled
LPKParsed: boolean; LPKParsed: boolean;
Author: string; Author: string;
@ -90,6 +91,9 @@ type
SaveAndRebuildButton: TBitBtn; SaveAndRebuildButton: TBitBtn;
UninstallButton: TBitBtn; UninstallButton: TBitBtn;
procedure AddToInstallButtonClick(Sender: TObject); procedure AddToInstallButtonClick(Sender: TObject);
procedure TreeViewAdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
procedure AvailableTreeViewDblClick(Sender: TObject); procedure AvailableTreeViewDblClick(Sender: TObject);
procedure AvailableTreeViewKeyPress(Sender: TObject; var Key: char); procedure AvailableTreeViewKeyPress(Sender: TObject; var Key: char);
procedure AvailableTreeViewSelectionChanged(Sender: TObject); procedure AvailableTreeViewSelectionChanged(Sender: TObject);
@ -337,6 +341,39 @@ begin
AddToInstall; AddToInstall;
end; end;
procedure TInstallPkgSetDialog.TreeViewAdvancedCustomDrawItem(
Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState;
Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean);
var
Info: TIPSPkgInfo;
NodeRect: TRect;
x: Integer;
Images: TCustomImageList;
CurCanvas: TCanvas;
y: Integer;
Tree: TTreeView;
begin
Tree:=Sender as TTreeView;
if Stage=cdPostPaint then begin
Info:=FindPkgInfo(Node.Text);
if Info=nil then exit;
Images:=Tree.Images;
CurCanvas:=Tree.Canvas;
NodeRect:=Node.DisplayRect(False);
x:=Node.DisplayIconLeft+1;
y:=(NodeRect.Top+NodeRect.Bottom-Images.Height) div 2;
if Info.InLazSrc then
Images.Draw(CurCanvas,x,y,ImgIndexOverlayLazarusPackage);
if Info.Base then
Images.Draw(CurCanvas,x,y,ImgIndexOverlayBasePackage);
if Info.PkgType=lptRunTimeOnly then
Images.Draw(CurCanvas,x,y,ImgIndexOverlayRuntimePackage);
if Info.PkgType=lptDesignTime then
Images.Draw(CurCanvas,x,y,ImgIndexOverlayDesigntimePackage);
end;
end;
procedure TInstallPkgSetDialog.AvailableTreeViewDblClick(Sender: TObject); procedure TInstallPkgSetDialog.AvailableTreeViewDblClick(Sender: TObject);
begin begin
AddToInstall; AddToInstall;
@ -561,7 +598,6 @@ begin
Info.LPKFilename:=Link.GetEffectiveFilename; Info.LPKFilename:=Link.GetEffectiveFilename;
end else end else
exit; exit;
Info.InLazSrc:=FileIsInPath(Info.LPKFilename,EnvironmentOptions.GetParsedLazarusDirectory);
if OldInfo<>nil then begin if OldInfo<>nil then begin
if Info.LPKParsed if Info.LPKParsed
@ -574,6 +610,10 @@ begin
exit; exit;
end; end;
end; end;
Info.InLazSrc:=FileIsInPath(Info.LPKFilename,EnvironmentOptions.GetParsedLazarusDirectory);
Info.Base:=PackageGraph.IsStaticBasePackage(Info.ID.Name);
fAvailablePackages.Add(Info); fAvailablePackages.Add(Info);
end; end;
@ -672,7 +712,7 @@ begin
AddState(lisInstalled) AddState(lisInstalled)
else else
AddState(lisNotInstalled); AddState(lisNotInstalled);
if PackageGraph.IsStaticBasePackage(FSelectedPkg.ID.Name) then if FSelectedPkg.Base then
AddState(lisPckExplBase); AddState(lisPckExplBase);
AddState(LazPackageTypeIdents[FSelectedPkg.PkgType]); AddState(LazPackageTypeIdents[FSelectedPkg.PkgType]);
PkgInfoMemo.Lines.Add(InfoStr); PkgInfoMemo.Lines.Add(InfoStr);