IDE: Update project inspector also when there is no active project.

git-svn-id: trunk@62813 -
This commit is contained in:
juha 2020-03-27 20:20:56 +00:00
parent de38b0140e
commit 2ba03b720e
3 changed files with 65 additions and 85 deletions

View File

@ -393,7 +393,7 @@ type
UpdatePackageCommandsStamp: TPackageCommandsStamp;
UpdateBookmarkCommandsStamp: TBookmarkCommandsStamp;
BookmarksStamp: Int64;
public
//public
procedure UpdateMainIDECommands(Sender: TObject);
procedure UpdateFileCommands(Sender: TObject);
procedure UpdateEditorCommands(Sender: TObject);
@ -4157,29 +4157,18 @@ begin
// project change build mode
ACmd := IDECommandList.FindIDECommand(ecProjectChangeBuildMode);
AHint := lisChangeBuildMode+' '+KeyValuesToCaptionStr(ACmd.ShortcutA,ACmd.ShortcutB,'(');
if Assigned(Project1) then
AHint :=
Trim(lisChangeBuildMode + ' ' + KeyValuesToCaptionStr(ACmd.ShortcutA, ACmd.ShortcutB, '(')) + sLineBreak +
Format('[%s]', [Project1.ActiveBuildMode.GetCaption])
else
AHint :=
Trim(lisChangeBuildMode + ' ' + KeyValuesToCaptionStr(ACmd.ShortcutA, ACmd.ShortcutB, '('));
AHint := AHint + sLineBreak + Project1.ActiveBuildMode.GetCaption;
ACmd.Hint := AHint;
if ProjInspector<>nil then
begin
ProjInspector.OptionsBitBtn.Hint := AHint;
ProjInspector.UpdateTitle;
end;
ProjInspector.OptionsBitBtn.Hint := AHint; //ProjInspector.UpdateTitle;
// run
ACmd := IDECommandList.FindIDECommand(ecRun);
AHint := lisRun+' '+KeyValuesToCaptionStr(ACmd.ShortcutA,ACmd.ShortcutB,'(');
if Assigned(Project1) and Assigned(Project1.RunParameterOptions.GetActiveMode) then
AHint :=
Trim(lisRun + ' ' + KeyValuesToCaptionStr(ACmd.ShortcutA, ACmd.ShortcutB, '(')) + sLineBreak +
Format('[%s]', [Project1.RunParameterOptions.GetActiveMode.Name])
else
AHint :=
Trim(lisRun + ' ' + KeyValuesToCaptionStr(ACmd.ShortcutA, ACmd.ShortcutB, '('));
AHint := AHint + sLineBreak + Project1.RunParameterOptions.GetActiveMode.Name;
ACmd.Hint := AHint;
end;

View File

@ -9,7 +9,9 @@ object ProjectInspectorForm: TProjectInspectorForm
Caption = 'ProjectInspectorForm'
ClientHeight = 456
ClientWidth = 299
OnActivate = FormActivate
OnCreate = FormCreate
OnDeactivate = FormDeactivate
OnDropFiles = FormDropFiles
LCLVersion = '2.1.0.0'
object ItemsTreeView: TTreeView
@ -31,7 +33,6 @@ object ProjectInspectorForm: TProjectInspectorForm
OnDragDrop = ItemsTreeViewDragDrop
OnDragOver = ItemsTreeViewDragOver
OnKeyDown = ItemsTreeViewKeyDown
OnSelectionChanged = ItemsTreeViewSelectionChanged
Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
end
object BtnPanel: TPanel

View File

@ -114,7 +114,9 @@ type
procedure CopyMoveToDirMenuItemClick(Sender: TObject);
procedure DirectoryHierarchyButtonClick(Sender: TObject);
procedure FilterEditKeyDown(Sender: TObject; var Key: Word; {%H-}Shift: TShiftState);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
procedure ItemsPopupMenuPopup(Sender: TObject);
procedure ItemsTreeViewAdvancedCustomDrawItem(Sender: TCustomTreeView;
@ -191,11 +193,15 @@ type
procedure SetSortAlphabetically(const AValue: boolean);
procedure SetupComponents;
function OnTreeViewGetImageIndex({%H-}Str: String; Data: TObject; var {%H-}AIsEnabled: Boolean): Integer;
procedure OnProjectBeginUpdate(Sender: TObject);
procedure OnProjectEndUpdate(Sender: TObject; ProjectChanged: boolean);
procedure ProjectBeginUpdate(Sender: TObject);
procedure ProjectEndUpdate(Sender: TObject; ProjectChanged: boolean);
procedure EnableI18NForSelectedLFM(TheEnable: boolean);
procedure DoOnPackageListAvailable(Sender: TObject);
function FindOnlinePackageLink(const ADependency: TPkgDependency): TPackageLink;
function CanUpdate(Flag: TProjectInspectorFlag): boolean;
procedure UpdateProjectFiles;
procedure UpdateButtons;
procedure UpdatePending;
protected
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure IdleHandler(Sender: TObject; var {%H-}Done: Boolean);
@ -204,11 +210,7 @@ type
destructor Destroy; override;
function IsUpdateLocked: boolean; inline;
procedure UpdateTitle;
procedure UpdateProjectFiles;
procedure UpdateRequiredPackages;
procedure UpdateButtons;
procedure UpdatePending;
function CanUpdate(Flag: TProjectInspectorFlag): boolean;
function GetSingleSelectedDependency: TPkgDependency;
function TreeViewToInspector(TV: TTreeView): TProjectInspectorForm;
public
@ -579,6 +581,17 @@ begin
OPMInterface.OnPackageListAvailable := @DoOnPackageListAvailable;
end;
procedure TProjectInspectorForm.FormActivate(Sender: TObject);
begin
ItemsTreeView.OnSelectionChanged := @ItemsTreeViewSelectionChanged;
end;
procedure TProjectInspectorForm.FormDeactivate(Sender: TObject);
begin
// Prevent calling handler when the tree gets updated with a project.
ItemsTreeView.OnSelectionChanged := Nil;
end;
procedure TProjectInspectorForm.FormDropFiles(Sender: TObject;
const FileNames: array of String);
var
@ -972,18 +985,19 @@ end;
procedure TProjectInspectorForm.SetLazProject(const AValue: TProject);
begin
if FLazProject=AValue then exit;
if FLazProject<>nil then begin
if FLazProject<>nil then begin // Old Project
dec(FUpdateLock,LazProject.UpdateLock);
FLazProject.OnBeginUpdate:=nil;
FLazProject.OnEndUpdate:=nil;
end;
FLazProject:=AValue;
if FLazProject<>nil then begin
if FLazProject<>nil then begin // New Project
inc(FUpdateLock,LazProject.UpdateLock);
FLazProject.OnBeginUpdate:=@OnProjectBeginUpdate;
FLazProject.OnEndUpdate:=@OnProjectEndUpdate;
end;
UpdateAll;
FLazProject.OnBeginUpdate:=@ProjectBeginUpdate;
FLazProject.OnEndUpdate:=@ProjectEndUpdate;
end
else // Only update when no project. ProjectEndUpdate will update a project.
UpdateAll;
end;
procedure TProjectInspectorForm.SetShowDirectoryHierarchy(const AValue: boolean);
@ -1190,7 +1204,6 @@ begin
finally
ItemsTreeView.EndUpdate;
end;
UpdateButtons;
end;
procedure TProjectInspectorForm.UpdateRequiredPackages;
@ -1265,13 +1278,12 @@ begin
UpdateButtons;
end;
procedure TProjectInspectorForm.OnProjectBeginUpdate(Sender: TObject);
procedure TProjectInspectorForm.ProjectBeginUpdate(Sender: TObject);
begin
BeginUpdate;
end;
procedure TProjectInspectorForm.OnProjectEndUpdate(Sender: TObject;
ProjectChanged: boolean);
procedure TProjectInspectorForm.ProjectEndUpdate(Sender: TObject; ProjectChanged: boolean);
begin
if ProjectChanged then
UpdateAll;
@ -1353,11 +1365,10 @@ end;
procedure TProjectInspectorForm.IdleHandler(Sender: TObject; var Done: Boolean);
begin
if IsUpdateLocked then begin
IdleConnected:=false;
exit;
end;
UpdatePending;
if IsUpdateLocked then
IdleConnected:=false
else
UpdatePending;
end;
function TProjectInspectorForm.GetSingleSelectedDependency: TPkgDependency;
@ -1495,17 +1506,12 @@ end;
procedure TProjectInspectorForm.UpdateAll(Immediately: boolean);
begin
ItemsTreeView.BeginUpdate;
try
UpdateTitle;
UpdateProjectFiles;
UpdateRequiredPackages;
UpdateButtons;
if Immediately then
UpdatePending;
finally
ItemsTreeView.EndUpdate;
end;
UpdateTitle;
UpdateProjectFiles;
UpdateRequiredPackages;
UpdateButtons;
if Immediately then
UpdatePending;
end;
procedure TProjectInspectorForm.UpdateTitle;
@ -1514,13 +1520,10 @@ var
IconStream: TStream;
begin
if not CanUpdate(pifNeedUpdateTitle) then exit;
Icon.Clear;
if LazProject=nil then
begin
Caption:=lisMenuProjectInspector;
end else
begin
Caption:=lisMenuProjectInspector
else begin
NewCaption:=LazProject.GetTitle;
if NewCaption='' then
NewCaption:=ExtractFilenameOnly(LazProject.ProjectInfoFile);
@ -1553,12 +1556,10 @@ var
CanOpenCount: Integer;
begin
if not CanUpdate(pifNeedUpdateButtons) then exit;
if LazProject<>nil then begin
AddBitBtn.Enabled:=true;
CanRemoveCount:=0;
CanOpenCount:=0;
CanRemoveCount:=0;
CanOpenCount:=0;
if Assigned(LazProject) then
begin
for i:=0 to ItemsTreeView.SelectionCount-1 do begin
TVNode:=ItemsTreeView.Selections[i];
if not GetNodeDataItem(TVNode,NodeData,Item) then continue;
@ -1574,41 +1575,30 @@ begin
end;
end;
end;
RemoveBitBtn.Enabled:=(CanRemoveCount>0);
OpenButton.Enabled:=(CanOpenCount>0);
OptionsBitBtn.Enabled:=true;
end else begin
AddBitBtn.Enabled:=false;
RemoveBitBtn.Enabled:=false;
OpenButton.Enabled:=false;
OptionsBitBtn.Enabled:=false;
end;
AddBitBtn.Enabled:=Assigned(LazProject);
RemoveBitBtn.Enabled:=(CanRemoveCount>0);
OpenButton.Enabled:=(CanOpenCount>0);
OptionsBitBtn.Enabled:=Assigned(LazProject);
end;
procedure TProjectInspectorForm.UpdatePending;
begin
ItemsTreeView.BeginUpdate;
try
if pifNeedUpdateFiles in FFlags then
UpdateProjectFiles;
if pifNeedUpdateDependencies in FFlags then
UpdateRequiredPackages;
if pifNeedUpdateTitle in FFlags then
UpdateTitle;
if pifNeedUpdateButtons in FFlags then
UpdateButtons;
IdleConnected:=false;
finally
ItemsTreeView.EndUpdate;
end;
if pifNeedUpdateFiles in FFlags then
UpdateProjectFiles;
if pifNeedUpdateDependencies in FFlags then
UpdateRequiredPackages;
if pifNeedUpdateTitle in FFlags then
UpdateTitle;
if pifNeedUpdateButtons in FFlags then
UpdateButtons;
IdleConnected:=false;
end;
function TProjectInspectorForm.CanUpdate(Flag: TProjectInspectorFlag): boolean;
begin
Result:=false;
if csDestroying in ComponentState then exit;
if LazProject=nil then exit;
if IsUpdateLocked then begin
Include(fFlags,Flag);
IdleConnected:=true;