mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-08 15:07:30 +01:00
IDE: Extend the Desktops button with "Save current desktop as" menu. Include the button in IDE CoolBar default config. Mostly by Ondrej Pokorny.
git-svn-id: trunk@49734 -
This commit is contained in:
parent
fceebc4be9
commit
aed70f5d1b
@ -49,12 +49,15 @@ type
|
||||
TShowDesktopsToolButton = class(TIDEToolButton)
|
||||
private
|
||||
procedure ChangeDesktop(Sender: TObject);
|
||||
procedure SaveAsDesktop(Sender: TObject);
|
||||
public
|
||||
procedure DoOnAdded; override;
|
||||
procedure RefreshMenu;
|
||||
end;
|
||||
|
||||
function ShowDesktopManagerDlg: TModalResult;
|
||||
function SaveCurrentDesktop(const aDesktopName: string; const aShowOverwriteDialog: Boolean): Boolean;
|
||||
procedure RefreshDesktopMenus;
|
||||
|
||||
implementation
|
||||
|
||||
@ -65,8 +68,6 @@ var
|
||||
theForm: TDesktopForm;
|
||||
xDesktopName: String;
|
||||
xDesktop: TDesktopOpt;
|
||||
I: Integer;
|
||||
xButtons: TIDEMenuCommandButtons;
|
||||
begin
|
||||
xDesktopName := '';
|
||||
theForm := TDesktopForm.Create(Nil);
|
||||
@ -78,10 +79,7 @@ begin
|
||||
theForm.Free;
|
||||
end;
|
||||
|
||||
xButtons := MainIDEBar.itmToolManageDesktops.ToolButtons;
|
||||
for I := 0 to xButtons.Count-1 do
|
||||
if xButtons[I] is TShowDesktopsToolButton then
|
||||
TShowDesktopsToolButton(xButtons[I]).RefreshMenu;
|
||||
RefreshDesktopMenus;
|
||||
|
||||
if xDesktopName <> '' then
|
||||
with EnvironmentOptions do
|
||||
@ -92,6 +90,48 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function SaveCurrentDesktop(const aDesktopName: string;
|
||||
const aShowOverwriteDialog: Boolean): Boolean;
|
||||
var
|
||||
dsk: TDesktopOpt;
|
||||
begin
|
||||
Result := False;
|
||||
if aDesktopName = '' then
|
||||
Exit;
|
||||
|
||||
with EnvironmentOptions do
|
||||
begin
|
||||
dsk := Desktops.Find(aDesktopName);
|
||||
if Assigned(dsk) and
|
||||
aShowOverwriteDialog and
|
||||
(MessageDlg(Format(dlgOverwriteDesktop, [aDesktopName]), mtWarning, mbYesNo, 0) <> mrYes)
|
||||
then
|
||||
Exit;
|
||||
|
||||
if not Assigned(dsk) then
|
||||
begin
|
||||
debugln(['TDesktopForm.SaveBitBtnClick: Adding ', aDesktopName]);
|
||||
dsk := TDesktopOpt.Create(aDesktopName, False);
|
||||
Desktops.Add(dsk);
|
||||
end;
|
||||
debugln(['TDesktopForm.SaveBitBtnClick: Assign from ', Desktop.Name, ' to ', dsk.Name]);
|
||||
Desktop.IDEWindowCreatorsLayoutList.StoreWindowPositions;
|
||||
dsk.Assign(Desktop);
|
||||
Result := True;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure RefreshDesktopMenus;
|
||||
var
|
||||
xButtons: TIDEMenuCommandButtons;
|
||||
I: Integer;
|
||||
begin
|
||||
xButtons := MainIDEBar.itmToolManageDesktops.ToolButtons;
|
||||
for I := 0 to xButtons.Count-1 do
|
||||
if xButtons[I] is TShowDesktopsToolButton then
|
||||
TShowDesktopsToolButton(xButtons[I]).RefreshMenu;
|
||||
end;
|
||||
|
||||
procedure TShowDesktopsToolButton.ChangeDesktop(Sender: TObject);
|
||||
var
|
||||
xDesktopName: string;
|
||||
@ -118,6 +158,8 @@ var
|
||||
xPM: TPopupMenu;
|
||||
i: Integer;
|
||||
xDesktop: TDesktopOpt;
|
||||
xMISaveAs: TMenuItem;
|
||||
xMI: TMenuItem;
|
||||
begin
|
||||
xPM := DropdownMenu;
|
||||
if xPM = nil then
|
||||
@ -129,6 +171,8 @@ begin
|
||||
|
||||
xPM.Items.Clear;
|
||||
|
||||
xMISaveAs := TMenuItem.Create(xPM);
|
||||
xMISaveAs.Caption := dlgSaveCurrentDesktopAs;
|
||||
// Saved desktops
|
||||
for i:=0 to EnvironmentOptions.Desktops.Count-1 do
|
||||
begin
|
||||
@ -138,7 +182,46 @@ begin
|
||||
xItem.Caption := xDesktop.Name;
|
||||
xItem.OnClick := @ChangeDesktop;
|
||||
xItem.DesktopName := xDesktop.Name;
|
||||
|
||||
xItem := TShowDesktopItem.Create(xPM);
|
||||
xMISaveAs.Add(xItem);
|
||||
xItem.Caption := xDesktop.Name;
|
||||
xItem.OnClick := @SaveAsDesktop;
|
||||
xItem.DesktopName := xDesktop.Name;
|
||||
end;
|
||||
|
||||
if xPM.Items.Count > 0 then
|
||||
xPM.Items.AddSeparator;
|
||||
xPM.Items.Add(xMISaveAs);
|
||||
|
||||
if xMISaveAs.Count > 0 then
|
||||
xMISaveAs.AddSeparator;
|
||||
xMI := TMenuItem.Create(xPM);
|
||||
xMISaveAs.Add(xMI);
|
||||
xMI.Caption := dlgNewDesktop;
|
||||
xMI.OnClick := @SaveAsDesktop;
|
||||
end;
|
||||
|
||||
procedure TShowDesktopsToolButton.SaveAsDesktop(Sender: TObject);
|
||||
var
|
||||
xDesktopName: string;
|
||||
xShowOverwriteDlg: Boolean;
|
||||
begin
|
||||
if Sender is TShowDesktopItem then
|
||||
begin
|
||||
xDesktopName := (Sender as TShowDesktopItem).DesktopName;
|
||||
xShowOverwriteDlg := False;
|
||||
end else
|
||||
begin
|
||||
if not InputQuery(dlgSaveCurrentDesktop, dlgDesktopName, xDesktopName)
|
||||
or (xDesktopName = '') // xDesktopName MUST NOT BE EMPTY !!!
|
||||
then
|
||||
Exit;
|
||||
xShowOverwriteDlg := True;
|
||||
end;
|
||||
|
||||
if SaveCurrentDesktop(xDesktopName, xShowOverwriteDlg) then
|
||||
RefreshDesktopMenus;
|
||||
end;
|
||||
|
||||
{ TDesktopForm }
|
||||
@ -430,7 +513,6 @@ end;
|
||||
|
||||
procedure TDesktopForm.SaveBitBtnClick(Sender: TObject);
|
||||
var
|
||||
dsk: TDesktopOpt;
|
||||
xDesktopName, xOldDesktopName: string;
|
||||
begin
|
||||
if DesktopListBox.ItemIndex >= 0 then
|
||||
@ -444,26 +526,8 @@ begin
|
||||
then
|
||||
Exit;
|
||||
|
||||
with EnvironmentOptions do
|
||||
begin
|
||||
dsk := Desktops.Find(xDesktopName);
|
||||
if Assigned(dsk) and
|
||||
(xOldDesktopName <> xDesktopName) and//ask only if manually inserted
|
||||
(MessageDlg(Format(dlgOverwriteDesktop, [xDesktopName]), mtWarning, mbYesNo, 0) <> mrYes)
|
||||
then
|
||||
Exit;
|
||||
|
||||
if not Assigned(dsk) then
|
||||
begin
|
||||
debugln(['TDesktopForm.SaveBitBtnClick: Adding ', xDesktopName]);
|
||||
dsk := TDesktopOpt.Create(xDesktopName, False);
|
||||
Desktops.Add(dsk);
|
||||
end;
|
||||
debugln(['TDesktopForm.SaveBitBtnClick: Assign from ', Desktop.Name, ' to ', dsk.Name]);
|
||||
Desktop.IDEWindowCreatorsLayoutList.StoreWindowPositions;
|
||||
dsk.Assign(Desktop);
|
||||
if SaveCurrentDesktop(xDesktopName, xOldDesktopName <> xDesktopName{ask only if manually inserted}) then
|
||||
RefreshList(xDesktopName);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TDesktopForm.SetDebugDesktopBitBtnClick(Sender: TObject);
|
||||
|
||||
@ -306,6 +306,8 @@ begin
|
||||
Add('IDEMainMenu/File/itmFileOpenSave/itmFileSaveAll');
|
||||
Add('---------------');
|
||||
Add('IDEMainMenu/View/itmViewMainWindows/itmViewToggleFormUnit');
|
||||
Add('---------------');
|
||||
Add('IDEMainMenu/Tools/itmSecondaryTools/itmToolManageDesktops');
|
||||
end;
|
||||
FIDECoolBarToolBars.Add(ToolBarOpts);
|
||||
|
||||
|
||||
@ -1261,9 +1261,11 @@ resourcestring
|
||||
dlgManageDesktops = 'Manage desktops';
|
||||
dlgSelectedDesktop = 'Selected desktop:';
|
||||
dlgSaveCurrentDesktop = 'Save current desktop';
|
||||
dlgSaveCurrentDesktopAs = 'Save current desktop as';
|
||||
dlgCloseAndUseSelectedDesktop = 'Close and use selected desktop';
|
||||
dlgReallyDeleteDesktop = 'Really delete desktop "%s"?';
|
||||
dlgRenameDesktop = 'Rename desktop';
|
||||
dlgNewDesktop = 'New desktop ...';
|
||||
dlgToggleSelectedDebugDesktop = 'Toggle as debug desktop';
|
||||
dlgDesktopName = 'Desktop name:';
|
||||
dlgOverwriteDesktop = 'Desktop with the name "%s" was found.'+sLineBreak+'Should the old desktop be overwritten?';
|
||||
|
||||
Loading…
Reference in New Issue
Block a user