IDE: project inspector: multi selection for readd, delete, open, clear deps, set dep defaults

git-svn-id: trunk@45586 -
This commit is contained in:
mattias 2014-06-19 17:29:27 +00:00
parent 2fa4bf34b6
commit 44b1fcc42d
6 changed files with 213 additions and 171 deletions

View File

@ -578,7 +578,6 @@ type
procedure OnGetDesignerSelection(const ASelection: TPersistentSelectionList);
// project inspector
procedure ProjInspectorOpen(Sender: TObject);
function ProjInspectorAddUnitToProject(Sender: TObject;
AnUnitInfo: TUnitInfo): TModalresult;
function ProjInspectorRemoveFile(Sender: TObject;
@ -6427,7 +6426,6 @@ procedure TMainIDE.DoShowProjectInspector(Show: boolean);
begin
if ProjInspector=nil then begin
ProjInspector:=TProjectInspectorForm.Create(OwningComponent);
ProjInspector.OnOpen:=@ProjInspectorOpen;
ProjInspector.OnShowOptions:=@mnuProjectOptionsClicked;
ProjInspector.OnAddUnitToProject:=@ProjInspectorAddUnitToProject;
ProjInspector.OnAddDependency:=@PkgBoss.OnProjectInspectorAddDependency;
@ -12018,17 +12016,6 @@ begin
Result:=CheckCompOptsAndMainSrcForNewUnit(CompOpts);
end;
procedure TMainIDE.ProjInspectorOpen(Sender: TObject);
var
CurUnitInfo: TUnitInfo;
begin
CurUnitInfo:=ProjInspector.GetSelectedFile;
if CurUnitInfo<>nil then
DoOpenEditorFile(CurUnitInfo.Filename,-1,-1,[ofRegularFile])
else
PkgBoss.OnProjectInspectorOpen(Sender);
end;
{$IFNDEF EnableOldExtTools}
procedure TMainIDE.FPCMsgFilePoolLoadFile(aFilename: string; out s: string);
// Note: called by any thread

View File

@ -1,25 +1,25 @@
object ProjectInspectorForm: TProjectInspectorForm
Left = 393
Height = 474
Height = 456
Top = 104
Width = 425
Width = 299
ActiveControl = ItemsTreeView
AllowDropFiles = True
Caption = 'ProjectInspectorForm'
ClientHeight = 474
ClientWidth = 425
ClientHeight = 456
ClientWidth = 299
OnDropFiles = FormDropFiles
OnShow = ProjectInspectorFormShow
LCLVersion = '1.3'
object ItemsTreeView: TTreeView
Left = 0
Height = 396
Height = 378
Top = 78
Width = 425
Width = 299
Align = alClient
Anchors = [akTop, akLeft, akBottom]
BorderSpacing.Top = 2
DefaultItemHeight = 18
MultiSelect = True
PopupMenu = ItemsPopupMenu
ReadOnly = True
RightClickSelect = True
@ -28,16 +28,16 @@ object ProjectInspectorForm: TProjectInspectorForm
OnDblClick = ItemsTreeViewDblClick
OnKeyDown = ItemsTreeViewKeyDown
OnSelectionChanged = ItemsTreeViewSelectionChanged
Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
end
object BtnPanel: TPanel
Left = 0
Height = 28
Top = 48
Width = 425
Width = 299
Align = alTop
ClientHeight = 28
ClientWidth = 425
ClientWidth = 299
TabOrder = 1
object OpenButton: TSpeedButton
AnchorSideLeft.Control = BtnPanel
@ -102,7 +102,7 @@ object ProjectInspectorForm: TProjectInspectorForm
Left = 91
Height = 25
Top = 2
Width = 311
Width = 185
UseFormActivate = True
ButtonWidth = 23
NumGlyphs = 1
@ -119,7 +119,7 @@ object ProjectInspectorForm: TProjectInspectorForm
Left = 0
Height = 48
Top = 0
Width = 425
Width = 299
AutoSize = True
ButtonHeight = 46
ShowCaptions = True

View File

@ -80,7 +80,8 @@ type
ADependency: TPkgDependency): TModalResult of object;
TProjectInspectorFlag = (
pifNeedUpdateItems,
pifNeedUpdateFiles,
pifNeedUpdateDependencies,
pifNeedUpdateButtons,
pifNeedUpdateTitle
);
@ -134,7 +135,6 @@ type
procedure OpenButtonClick(Sender: TObject);
procedure OptionsBitBtnClick(Sender: TObject);
procedure HelpBitBtnClick(Sender: TObject);
procedure ProjectInspectorFormShow(Sender: TObject);
procedure ReAddMenuItemClick(Sender: TObject);
procedure RemoveBitBtnClick(Sender: TObject);
procedure RemoveNonExistingFilesMenuItemClick(Sender: TObject);
@ -145,7 +145,6 @@ type
FIdleConnected: boolean;
FOnAddDependency: TAddProjInspDepEvent;
FOnAddUnitToProject: TOnAddUnitToProject;
FOnOpen: TNotifyEvent;
FOnReAddDependency: TAddProjInspDepEvent;
FOnRemoveDependency: TRemoveProjInspDepEvent;
FOnRemoveFile: TRemoveProjInspFileEvent;
@ -183,8 +182,6 @@ type
procedure SetSortAlphabetically(const AValue: boolean);
procedure SetupComponents;
function OnTreeViewGetImageIndex(Str: String; Data: TObject; var AIsEnabled: Boolean): Integer;
procedure UpdateProjectFiles;
procedure UpdateRequiredPackages;
procedure OnProjectBeginUpdate(Sender: TObject);
procedure OnProjectEndUpdate(Sender: TObject; ProjectChanged: boolean);
procedure EnableI18NForSelectedLFM(TheEnable: boolean);
@ -199,15 +196,14 @@ type
function IsUpdateLocked: boolean; inline;
procedure UpdateAll(Immediately: boolean = false);
procedure UpdateTitle(Immediately: boolean = false);
procedure UpdateItems(Immediately: boolean = false);
procedure UpdateProjectFiles(Immediately: boolean = false);
procedure UpdateRequiredPackages(Immediately: boolean = false);
procedure UpdateButtons(Immediately: boolean = false);
procedure UpdatePending;
function CanUpdate(Flag: TProjectInspectorFlag): boolean;
function GetSelectedFile: TUnitInfo;
function GetSingleSelectedDependency: TPkgDependency;
public
property LazProject: TProject read FLazProject write SetLazProject;
property OnOpen: TNotifyEvent read FOnOpen write FOnOpen;
property OnShowOptions: TNotifyEvent read FOnShowOptions write FOnShowOptions;
property OnAddUnitToProject: TOnAddUnitToProject read FOnAddUnitToProject
write FOnAddUnitToProject;
@ -306,16 +302,27 @@ end;
procedure TProjectInspectorForm.ClearDependencyFilenameMenuItemClick(Sender: TObject);
var
CurDependency: TPkgDependency;
i: Integer;
TVNode: TTreeNode;
NodeData: TPINodeData;
Item: TObject;
begin
CurDependency:=GetSingleSelectedDependency;
if (CurDependency=nil) then exit;
if CurDependency.RequiredPackage=nil then exit;
if CurDependency.DefaultFilename='' then exit;
CurDependency.DefaultFilename:='';
CurDependency.PreferDefaultFilename:=false;
LazProject.Modified:=true;
UpdateRequiredPackages;
UpdateButtons;
BeginUpdate;
try
for i:=0 to ItemsTreeView.SelectionCount-1 do begin
TVNode:=ItemsTreeView.Selections[i];
if not GetNodeDataItem(TVNode,NodeData,Item) then continue;
if not (Item is TPkgDependency) then continue;
CurDependency:=TPkgDependency(Item);
if CurDependency.DefaultFilename='' then exit;
CurDependency.DefaultFilename:='';
CurDependency.PreferDefaultFilename:=false;
LazProject.Modified:=true;
UpdateRequiredPackages;
end;
finally
EndUpdate;
end;
end;
procedure TProjectInspectorForm.AddBitBtnClick(Sender: TObject);
@ -347,7 +354,7 @@ begin
end;
FNextSelectedPart:=NewFile;
end;
UpdateAll(false);
UpdateAll;
EndUpdate;
end;
@ -357,7 +364,7 @@ begin
if Assigned(OnAddDependency) then
OnAddDependency(Self,AddResult.Dependency);
FNextSelectedPart:=AddResult.Dependency;
UpdateItems(false);
UpdateRequiredPackages;
EndUpdate;
end;
@ -402,7 +409,7 @@ begin
if Assigned(OnAddUnitToProject) then begin
if OnAddUnitToProject(Self,NewFile)<>mrOk then break;
end;
UpdateAll(false);
UpdateAll;
end;
finally
EndUpdate;
@ -445,6 +452,9 @@ var
CanReAddCount: Integer;
SingleSelectedDep: TPkgDependency;
DepCount: Integer;
Dependency: TPkgDependency;
HasValidDep: Integer;
CanClearDep: Integer;
begin
ItemCnt:=0;
@ -455,6 +465,8 @@ begin
CanReAddCount:=0;
SingleSelectedDep:=nil;
DepCount:=0;
HasValidDep:=0;
CanClearDep:=0;
for i:=0 to ItemsTreeView.SelectionCount-1 do begin
TVNode:=ItemsTreeView.Selections[i];
if not GetNodeDataItem(TVNode,NodeData,Item) then continue;
@ -470,16 +482,21 @@ begin
inc(DisabledI18NForLFMCount);
end;
end else if Item is TPkgDependency then begin
inc(DepCount);
if DepCount=1 then
SingleSelectedDep:=TPkgDependency(Item)
else
SingleSelectedDep:=nil;
Dependency:=TPkgDependency(Item);
if NodeData.Removed then begin
inc(CanReAddCount);
end else begin
inc(DepCount);
if DepCount=1 then
SingleSelectedDep:=Dependency
else
SingleSelectedDep:=nil;
inc(CanRemoveCount);
inc(CanOpenCount);
if Dependency.RequiredPackage<>nil then
inc(HasValidDep);
if (Dependency.DefaultFilename<>'') then
inc(CanClearDep);
end;
end;
end;
@ -508,15 +525,16 @@ begin
(SingleSelectedDep.PrevRequiresDependency<>nil));
AddPopupMenuItem(lisPckEditMoveDependencyDown, @MoveDependencyDownClick,
(SingleSelectedDep.NextRequiresDependency<>nil));
end;
if HasValidDep>0 then begin
AddPopupMenuItem(lisPckEditStoreFileNameAsDefaultForThisDependency,
@SetDependencyDefaultFilenameMenuItemClick,
(SingleSelectedDep.RequiredPackage<>nil));
@SetDependencyDefaultFilenameMenuItemClick, true);
AddPopupMenuItem(lisPckEditStoreFileNameAsPreferredForThisDependency,
@SetDependencyPreferredFilenameMenuItemClick,
(SingleSelectedDep.RequiredPackage<>nil));
@SetDependencyPreferredFilenameMenuItemClick, true);
end;
if CanClearDep>0 then begin
AddPopupMenuItem(lisPckEditClearDefaultPreferredFilenameOfDependency,
@ClearDependencyFilenameMenuItemClick,
(SingleSelectedDep.DefaultFilename<>''));
@ClearDependencyFilenameMenuItemClick, true);
end;
while ItemsPopupMenu.Items.Count>ItemCnt do
@ -548,8 +566,34 @@ begin
end;
procedure TProjectInspectorForm.OpenButtonClick(Sender: TObject);
var
i: Integer;
TVNode: TTreeNode;
NodeData: TPINodeData;
Item: TObject;
CurFile: TUnitInfo;
CurDependency: TPkgDependency;
begin
if Assigned(OnOpen) then OnOpen(Self);
BeginUpdate;
try
for i:=0 to ItemsTreeView.SelectionCount-1 do begin
TVNode:=ItemsTreeView.Selections[i];
if not GetNodeDataItem(TVNode,NodeData,Item) then continue;
if Item is TUnitInfo then begin
CurFile:=TUnitInfo(Item);
if LazarusIDE.DoOpenEditorFile(CurFile.Filename,-1,-1,[ofAddToRecent])<>mrOk
then exit;
end else if Item is TPkgDependency then begin
CurDependency:=TPkgDependency(Item);
if PackageEditingInterface.DoOpenPackageWithName(
CurDependency.PackageName,[],false)<>mrOk
then
exit;
end;
end;
finally
EndUpdate;
end;
end;
procedure TProjectInspectorForm.OptionsBitBtnClick(Sender: TObject);
@ -562,21 +606,29 @@ begin
LazarusHelp.ShowHelpForIDEControl(Self);
end;
procedure TProjectInspectorForm.ProjectInspectorFormShow(Sender: TObject);
begin
UpdateAll(false);
end;
procedure TProjectInspectorForm.ReAddMenuItemClick(Sender: TObject);
var
Dependency: TPkgDependency;
i: Integer;
TVNode: TTreeNode;
NodeData: TPINodeData;
Item: TObject;
begin
Dependency:=GetSingleSelectedDependency;
if (Dependency=nil) or (not Dependency.Removed)
or (not CheckAddingDependency(LazProject,Dependency)) then exit;
BeginUpdate;
if Assigned(OnReAddDependency) then OnReAddDependency(Self,Dependency);
EndUpdate;
try
for i:=0 to ItemsTreeView.SelectionCount-1 do begin
TVNode:=ItemsTreeView.Selections[i];
if not GetNodeDataItem(TVNode,NodeData,Item) then continue;
if not NodeData.Removed then continue;
if not (Item is TPkgDependency) then continue;
Dependency:=TPkgDependency(Item);
if not CheckAddingDependency(LazProject,Dependency) then exit;
if Assigned(OnReAddDependency) then
OnReAddDependency(Self,Dependency);
end;
finally
EndUpdate;
end;
end;
procedure TProjectInspectorForm.RemoveBitBtnClick(Sender: TObject);
@ -649,19 +701,24 @@ var
HasChanged: Boolean;
begin
if LazProject.IsVirtual then exit;
HasChanged:=false;
AnUnitInfo:=LazProject.FirstPartOfProject;
while AnUnitInfo<>nil do begin
NextUnitInfo:=AnUnitInfo.NextPartOfProject;
if not (AnUnitInfo.IsVirtual or FileExistsUTF8(AnUnitInfo.Filename)) then begin
AnUnitInfo.IsPartOfProject:=false;
HasChanged:=true;
BeginUpdate;
try
HasChanged:=false;
AnUnitInfo:=LazProject.FirstPartOfProject;
while AnUnitInfo<>nil do begin
NextUnitInfo:=AnUnitInfo.NextPartOfProject;
if not (AnUnitInfo.IsVirtual or FileExistsUTF8(AnUnitInfo.Filename)) then begin
AnUnitInfo.IsPartOfProject:=false;
HasChanged:=true;
end;
AnUnitInfo:=NextUnitInfo;
end;
AnUnitInfo:=NextUnitInfo;
end;
if HasChanged then begin
LazProject.Modified:=true;
UpdateProjectFiles;
if HasChanged then begin
LazProject.Modified:=true;
UpdateProjectFiles;
end;
finally
EndUpdate;
end;
end;
@ -694,7 +751,7 @@ begin
FLazProject.OnBeginUpdate:=@OnProjectBeginUpdate;
FLazProject.OnEndUpdate:=@OnProjectEndUpdate;
end;
UpdateAll(false);
UpdateAll;
end;
procedure TProjectInspectorForm.SetShowDirectoryHierarchy(const AValue: boolean);
@ -721,18 +778,31 @@ procedure TProjectInspectorForm.SetDependencyDefaultFilename(AsPreferred: boolea
var
NewFilename: String;
CurDependency: TPkgDependency;
i: Integer;
TVNode: TTreeNode;
NodeData: TPINodeData;
Item: TObject;
begin
CurDependency:=GetSingleSelectedDependency;
if (CurDependency=nil) then exit;
if CurDependency.RequiredPackage=nil then exit;
NewFilename:=CurDependency.RequiredPackage.Filename;
if (NewFilename=CurDependency.DefaultFilename) // do not use CompareFilenames
and (CurDependency.PreferDefaultFilename=AsPreferred) then exit;
CurDependency.DefaultFilename:=NewFilename;
CurDependency.PreferDefaultFilename:=AsPreferred;
LazProject.Modified:=true;
UpdateRequiredPackages;
UpdateButtons;
BeginUpdate;
try
for i:=0 to ItemsTreeView.SelectionCount-1 do begin
TVNode:=ItemsTreeView.Selections[i];
if not GetNodeDataItem(TVNode,NodeData,Item) then continue;
if NodeData.Removed then continue;
if not (Item is TPkgDependency) then continue;
CurDependency:=TPkgDependency(Item);
if CurDependency.RequiredPackage=nil then continue;
NewFilename:=CurDependency.RequiredPackage.Filename;
if (NewFilename=CurDependency.DefaultFilename) // do not use CompareFilenames
and (CurDependency.PreferDefaultFilename=AsPreferred) then continue;
CurDependency.DefaultFilename:=NewFilename;
CurDependency.PreferDefaultFilename:=AsPreferred;
LazProject.Modified:=true;
UpdateRequiredPackages;
end;
finally
EndUpdate;
end;
end;
procedure TProjectInspectorForm.SetIdleConnected(AValue: boolean);
@ -841,13 +911,14 @@ begin
end;
end;
procedure TProjectInspectorForm.UpdateProjectFiles;
procedure TProjectInspectorForm.UpdateProjectFiles(Immediately: boolean);
var
CurFile: TUnitInfo;
FilesBranch: TTreeFilterBranch;
Filename: String;
ANodeData : TPINodeData;
begin
if not CanUpdate(pifNeedUpdateFiles) then exit;
ItemsTreeView.BeginUpdate;
try
FilesBranch:=FilterEdit.GetBranch(FFilesNode);
@ -873,15 +944,17 @@ begin
finally
ItemsTreeView.EndUpdate;
end;
UpdateButtons;
end;
procedure TProjectInspectorForm.UpdateRequiredPackages;
procedure TProjectInspectorForm.UpdateRequiredPackages(Immediately: boolean);
var
Dependency: TPkgDependency;
RequiredBranch, RemovedBranch: TTreeFilterBranch;
NodeText, AFilename: String;
ANodeData : TPINodeData;
begin
if not CanUpdate(pifNeedUpdateDependencies) then exit;
ItemsTreeView.BeginUpdate;
try
RequiredBranch:=FilterEdit.GetBranch(DependenciesNode);
@ -937,6 +1010,7 @@ begin
finally
ItemsTreeView.EndUpdate;
end;
UpdateButtons;
end;
procedure TProjectInspectorForm.OnProjectBeginUpdate(Sender: TObject);
@ -947,7 +1021,7 @@ end;
procedure TProjectInspectorForm.OnProjectEndUpdate(Sender: TObject;
ProjectChanged: boolean);
begin
UpdateAll(false);
UpdateAll;
EndUpdate;
end;
@ -984,16 +1058,6 @@ begin
UpdatePending;
end;
function TProjectInspectorForm.GetSelectedFile: TUnitInfo;
var
Item: TObject;
begin
Result:=nil;
Item:=GetNodeItem(GetNodeData(ItemsTreeView.Selected));
if Item is TUnitInfo then
Result:=TUnitInfo(Item);
end;
function TProjectInspectorForm.GetSingleSelectedDependency: TPkgDependency;
var
Item: TObject;
@ -1045,11 +1109,17 @@ end;
procedure TProjectInspectorForm.UpdateAll(Immediately: boolean);
begin
UpdateItems;
UpdateTitle;
UpdateButtons;
if Immediately then
UpdatePending;
ItemsTreeView.BeginUpdate;
try
UpdateTitle;
UpdateProjectFiles;
UpdateRequiredPackages;
UpdateButtons;
if Immediately then
UpdatePending;
finally
ItemsTreeView.EndUpdate;
end;
end;
procedure TProjectInspectorForm.UpdateTitle(Immediately: boolean);
@ -1068,18 +1138,6 @@ begin
end;
end;
procedure TProjectInspectorForm.UpdateItems(Immediately: boolean);
begin
if not CanUpdate(pifNeedUpdateItems) then exit;
ItemsTreeView.BeginUpdate;
try
UpdateProjectFiles;
UpdateRequiredPackages;
finally
ItemsTreeView.EndUpdate;
end;
end;
procedure TProjectInspectorForm.UpdateButtons(Immediately: boolean);
var
i: Integer;
@ -1126,13 +1184,20 @@ end;
procedure TProjectInspectorForm.UpdatePending;
begin
if pifNeedUpdateItems in FFlags then
UpdateItems(true);
if pifNeedUpdateTitle in FFlags then
UpdateTitle(true);
if pifNeedUpdateButtons in FFlags then
UpdateButtons(true);
IdleConnected:=false;
ItemsTreeView.BeginUpdate;
try
if pifNeedUpdateFiles in FFlags then
UpdateProjectFiles(true);
if pifNeedUpdateDependencies in FFlags then
UpdateRequiredPackages(true);
if pifNeedUpdateTitle in FFlags then
UpdateTitle(true);
if pifNeedUpdateButtons in FFlags then
UpdateButtons(true);
IdleConnected:=false;
finally
ItemsTreeView.EndUpdate;
end;
end;
function TProjectInspectorForm.CanUpdate(Flag: TProjectInspectorFlag): boolean;

View File

@ -96,7 +96,6 @@ type
function CheckProjectHasInstalledPackages(AProject: TProject; Interactive: boolean): TModalResult; virtual; abstract;
function CanOpenDesignerForm(AnUnitInfo: TUnitInfo;
Interactive: boolean): TModalResult; virtual; abstract;
function OnProjectInspectorOpen(Sender: TObject): boolean; virtual; abstract;
function OnProjectInspectorAddDependency(Sender: TObject;
ADependency: TPkgDependency): TModalResult; virtual; abstract;
function OnProjectInspectorRemoveDependency(Sender: TObject;

View File

@ -294,7 +294,7 @@ type
procedure SetupComponents;
function OnTreeViewGetImageIndex(Str: String; Data: TObject; var AIsEnabled: Boolean): Integer;
procedure UpdatePending;
function CanUpdate(Flag: TPEFlag): boolean;
function CanUpdate(Flag: TPEFlag; Immediately: boolean): boolean;
procedure UpdateTitle(Immediately: boolean = false);
procedure UpdateFiles(Immediately: boolean = false);
procedure UpdateRequiredPkgs(Immediately: boolean = false);
@ -2197,7 +2197,7 @@ procedure TPackageEditorForm.UpdateTitle(Immediately: boolean);
var
NewCaption: String;
begin
if not CanUpdate(pefNeedUpdateTitle) then exit;
if not CanUpdate(pefNeedUpdateTitle,Immediately) then exit;
NewCaption:=Format(lisPckEditPackage, [FLazPackage.Name]);
if LazPackage.Modified then
NewCaption:=NewCaption+'*';
@ -2216,7 +2216,7 @@ var
FileCount: Integer;
DepCount: Integer;
begin
if not CanUpdate(pefNeedUpdateButtons) then exit;
if not CanUpdate(pefNeedUpdateButtons,Immediately) then exit;
FileCount:=0;
DepCount:=0;
@ -2293,28 +2293,35 @@ end;
procedure TPackageEditorForm.UpdatePending;
begin
if pefNeedUpdateTitle in fFlags then
UpdateTitle(true);
if pefNeedUpdateFiles in fFlags then
UpdateFiles(true);
if pefNeedUpdateRequiredPkgs in fFlags then
UpdateRequiredPkgs(true);
if pefNeedUpdateProperties in fFlags then
UpdatePEProperties(true);
if pefNeedUpdateButtons in fFlags then
UpdateButtons(true);
if pefNeedUpdateApplyDependencyButton in fFlags then
UpdateApplyDependencyButton(true);
if pefNeedUpdateStatusBar in fFlags then
UpdateStatusBar(true);
ItemsTreeView.BeginUpdate;
try
if pefNeedUpdateTitle in fFlags then
UpdateTitle(true);
if pefNeedUpdateFiles in fFlags then
UpdateFiles(true);
if pefNeedUpdateRequiredPkgs in fFlags then
UpdateRequiredPkgs(true);
if pefNeedUpdateProperties in fFlags then
UpdatePEProperties(true);
if pefNeedUpdateButtons in fFlags then
UpdateButtons(true);
if pefNeedUpdateApplyDependencyButton in fFlags then
UpdateApplyDependencyButton(true);
if pefNeedUpdateStatusBar in fFlags then
UpdateStatusBar(true);
IdleConnected:=false;
finally
ItemsTreeView.EndUpdate;
end;
end;
function TPackageEditorForm.CanUpdate(Flag: TPEFlag): boolean;
function TPackageEditorForm.CanUpdate(Flag: TPEFlag; Immediately: boolean
): boolean;
begin
Result:=false;
if csDestroying in ComponentState then exit;
if LazPackage=nil then exit;
if fUpdateLock>0 then begin
if (fUpdateLock>0) and not Immediately then begin
Include(fFlags,Flag);
IdleConnected:=true;
Result:=false;
@ -2333,7 +2340,7 @@ var
NodeData: TPENodeData;
OldFilter : String;
begin
if not CanUpdate(pefNeedUpdateFiles) then exit;
if not CanUpdate(pefNeedUpdateFiles,Immediately) then exit;
OldFilter := FilterEdit.ForceFilter('');
@ -2397,7 +2404,7 @@ var
CurNodeText, aFilename, OldFilter: String;
NodeData: TPENodeData;
begin
if not CanUpdate(pefNeedUpdateRequiredPkgs) then exit;
if not CanUpdate(pefNeedUpdateRequiredPkgs,Immediately) then exit;
OldFilter := FilterEdit.ForceFilter('');
@ -2518,7 +2525,7 @@ var
HasRegisterProcCount: integer;
AddToUsesPkgSectionCount: integer;
begin
if not CanUpdate(pefNeedUpdateProperties) then exit;
if not CanUpdate(pefNeedUpdateProperties,Immediately) then exit;
FPlugins.Clear;
@ -2676,7 +2683,7 @@ var
NodeData: TPENodeData;
Item: TObject;
begin
if not CanUpdate(pefNeedUpdateApplyDependencyButton) then exit;
if not CanUpdate(pefNeedUpdateApplyDependencyButton,Immediately) then exit;
FSingleSelectedDependency:=nil;
for i:=0 to ItemsTreeView.SelectionCount-1 do begin
@ -2724,7 +2731,7 @@ procedure TPackageEditorForm.UpdateStatusBar(Immediately: boolean);
var
StatusText: String;
begin
if not CanUpdate(pefNeedUpdateStatusBar) then exit;
if not CanUpdate(pefNeedUpdateStatusBar,Immediately) then exit;
if LazPackage.IsVirtual and (not LazPackage.ReadOnly) then begin
StatusText:=Format(lisPckEditpackageNotSaved, [LazPackage.Name]);
@ -3847,7 +3854,7 @@ begin
mtConfirmation,[mbYes,mbNo],0)<>mrYes
then exit;
PackageEditors.RevertPackage(LazPackage);
UpdateAll(true);
UpdateAll(false);
end;
procedure TPackageEditorForm.DoPublishProject;

View File

@ -264,7 +264,6 @@ type
procedure AddProjectLCLDependency(AProject: TProject); override;
function AddProjectDependencies(AProject: TProject; const Packages: string;
OnlyTestIfPossible: boolean = false): TModalResult; override;
function OnProjectInspectorOpen(Sender: TObject): boolean; override;
function OnProjectInspectorAddDependency(Sender: TObject;
ADependency: TPkgDependency): TModalResult; override;
function OnProjectInspectorRemoveDependency(Sender: TObject;
@ -960,7 +959,7 @@ begin
if PackageEditors<>nil then
PackageEditors.UpdateAllEditors(false);
if ProjInspector<>nil then
ProjInspector.UpdateItems(false);
ProjInspector.UpdateRequiredPackages;
DoCallNotifyHandler(pihtGraphChanged,Self);
end;
end;
@ -4851,21 +4850,6 @@ begin
end;
end;
function TPkgManager.OnProjectInspectorOpen(Sender: TObject): boolean;
var
Dependency: TPkgDependency;
begin
Result:=false;
if (Sender=nil) or (not (Sender is TProjectInspectorForm)) then exit;
Dependency:=TProjectInspectorForm(Sender).GetSingleSelectedDependency;
if Dependency=nil then exit;
// user has selected a dependency -> open package
Result:=true;
if PackageGraph.OpenDependency(Dependency,false)<>lprSuccess then
exit;
DoOpenPackage(Dependency.RequiredPackage,[],false);
end;
function TPkgManager.OnProjectInspectorAddDependency(Sender: TObject;
ADependency: TPkgDependency): TModalResult;
begin