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

View File

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

View File

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