mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-27 20:29:16 +02:00
IDE: Enhanced desktops drop-down menu with "Toggle debug desktop". Add icons, actions and shortcuts. By Ondrej Pokorny.
git-svn-id: trunk@49810 -
This commit is contained in:
parent
59d2985bbc
commit
9572033709
@ -1,7 +1,7 @@
|
||||
object DesktopForm: TDesktopForm
|
||||
Left = 684
|
||||
Left = 300
|
||||
Height = 288
|
||||
Top = 378
|
||||
Top = 316
|
||||
Width = 277
|
||||
BorderIcons = [biSystemMenu]
|
||||
Caption = 'DesktopForm'
|
||||
@ -82,7 +82,7 @@ object DesktopForm: TDesktopForm
|
||||
object SaveTB: TToolButton
|
||||
Left = 1
|
||||
Top = 0
|
||||
Caption = 'SaveTB'
|
||||
Action = SaveAction
|
||||
OnClick = SaveBitBtnClick
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
@ -98,7 +98,7 @@ object DesktopForm: TDesktopForm
|
||||
object SetActiveDesktopTB: TToolButton
|
||||
Left = 1
|
||||
Top = 27
|
||||
Caption = 'SetActiveDesktopTB'
|
||||
Action = SetActiveDesktopAction
|
||||
OnClick = SetActiveDesktopBitBtnClick
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
@ -106,7 +106,7 @@ object DesktopForm: TDesktopForm
|
||||
object SetDebugDesktopTB: TToolButton
|
||||
Left = 1
|
||||
Top = 49
|
||||
Caption = 'SetDebugDesktopTB'
|
||||
Action = SetDebugDesktopAction
|
||||
OnClick = SetDebugDesktopBitBtnClick
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
@ -114,7 +114,7 @@ object DesktopForm: TDesktopForm
|
||||
object RenameTB: TToolButton
|
||||
Left = 1
|
||||
Top = 71
|
||||
Caption = 'RenameTB'
|
||||
Action = RenameAction
|
||||
OnClick = RenameBitBtnClick
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
@ -122,7 +122,7 @@ object DesktopForm: TDesktopForm
|
||||
object DeleteTB: TToolButton
|
||||
Left = 1
|
||||
Top = 93
|
||||
Caption = 'DeleteTB'
|
||||
Action = DeleteAction
|
||||
OnClick = DeleteBitBtnClick
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
@ -146,7 +146,7 @@ object DesktopForm: TDesktopForm
|
||||
object ImportTB: TToolButton
|
||||
Left = 1
|
||||
Top = 186
|
||||
Caption = 'ImportTB'
|
||||
Action = ImportAction
|
||||
OnClick = ImportBitBtnClick
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
@ -155,7 +155,7 @@ object DesktopForm: TDesktopForm
|
||||
Tag = -1
|
||||
Left = 1
|
||||
Top = 115
|
||||
Caption = 'MoveUpTB'
|
||||
Action = MoveUpAction
|
||||
OnClick = MoveUpTBClick
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
@ -164,7 +164,7 @@ object DesktopForm: TDesktopForm
|
||||
Tag = 1
|
||||
Left = 1
|
||||
Top = 137
|
||||
Caption = 'MoveDownTB'
|
||||
Action = MoveDownAction
|
||||
OnClick = MoveUpTBClick
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
@ -174,12 +174,68 @@ object DesktopForm: TDesktopForm
|
||||
left = 48
|
||||
top = 24
|
||||
object ExportItem: TMenuItem
|
||||
Caption = 'Export selected'
|
||||
Action = ExportAction
|
||||
OnClick = ExportBitBtnClick
|
||||
end
|
||||
object ExportAllItem: TMenuItem
|
||||
Caption = 'Export all'
|
||||
Action = ExportAllAction
|
||||
OnClick = ExportAllBitBtnClick
|
||||
end
|
||||
end
|
||||
object ActionList1: TActionList
|
||||
left = 108
|
||||
top = 28
|
||||
object SaveAction: TAction
|
||||
Caption = 'SaveAction'
|
||||
OnExecute = SaveBitBtnClick
|
||||
ShortCut = 16467
|
||||
end
|
||||
object SetActiveDesktopAction: TAction
|
||||
Caption = 'SetActiveDesktopAction'
|
||||
OnExecute = SetActiveDesktopBitBtnClick
|
||||
ShortCut = 16397
|
||||
end
|
||||
object SetDebugDesktopAction: TAction
|
||||
Caption = 'SetDebugDesktopAction'
|
||||
OnExecute = SetDebugDesktopBitBtnClick
|
||||
ShortCut = 16452
|
||||
end
|
||||
object RenameAction: TAction
|
||||
Caption = 'RenameAction'
|
||||
OnExecute = RenameBitBtnClick
|
||||
ShortCut = 16466
|
||||
end
|
||||
object DeleteAction: TAction
|
||||
Caption = 'DeleteAction'
|
||||
OnExecute = DeleteBitBtnClick
|
||||
ShortCut = 16430
|
||||
end
|
||||
object MoveUpAction: TAction
|
||||
Tag = -1
|
||||
Caption = 'MoveUpAction'
|
||||
OnExecute = MoveUpTBClick
|
||||
ShortCut = 16422
|
||||
end
|
||||
object MoveDownAction: TAction
|
||||
Tag = 1
|
||||
Caption = 'MoveDownAction'
|
||||
OnExecute = MoveUpTBClick
|
||||
ShortCut = 16424
|
||||
end
|
||||
object ExportAction: TAction
|
||||
Caption = 'ExportAction'
|
||||
OnExecute = ExportBitBtnClick
|
||||
ShortCut = 16453
|
||||
end
|
||||
object ExportAllAction: TAction
|
||||
Caption = 'ExportAllAction'
|
||||
OnExecute = ExportAllBitBtnClick
|
||||
ShortCut = 24645
|
||||
end
|
||||
object ImportAction: TAction
|
||||
Caption = 'ImportAction'
|
||||
OnExecute = ImportBitBtnClick
|
||||
ShortCut = 16457
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -9,13 +9,24 @@ uses
|
||||
Buttons, ButtonPanel, IDEImagesIntf,
|
||||
LCLType, LazarusIDEStrConsts, LCLProc, EnvironmentOpts,
|
||||
IDEWindowIntf, IDEOptionsIntf, IDEOptionDefs, Laz2_XMLCfg, InputHistory,
|
||||
MenuIntf, Menus, ComCtrls;
|
||||
MenuIntf, Menus, ComCtrls, ActnList;
|
||||
|
||||
type
|
||||
|
||||
{ TDesktopForm }
|
||||
|
||||
TDesktopForm = class(TForm)
|
||||
ImportAction: TAction;
|
||||
ExportAction: TAction;
|
||||
ExportAllAction: TAction;
|
||||
MoveUpAction: TAction;
|
||||
MoveDownAction: TAction;
|
||||
DeleteAction: TAction;
|
||||
RenameAction: TAction;
|
||||
SetDebugDesktopAction: TAction;
|
||||
SetActiveDesktopAction: TAction;
|
||||
SaveAction: TAction;
|
||||
ActionList1: TActionList;
|
||||
AutoSaveActiveDesktopCheckBox: TCheckBox;
|
||||
ButtonPanel1: TButtonPanel;
|
||||
LblGrayedInfo: TLabel;
|
||||
@ -68,6 +79,7 @@ type
|
||||
procedure ChangeDesktop(Sender: TObject);
|
||||
class procedure DoChangeDesktop({%H-}Data: PtrInt);
|
||||
procedure SaveAsDesktop(Sender: TObject);
|
||||
procedure ToggleAsDebugDesktop(Sender: TObject);
|
||||
procedure MenuOnPopup(Sender: TObject);
|
||||
|
||||
procedure RefreshMenu;
|
||||
@ -77,6 +89,7 @@ type
|
||||
|
||||
function ShowDesktopManagerDlg: TModalResult;
|
||||
function SaveCurrentDesktop(const aDesktopName: string; const aShowOverwriteDialog: Boolean): Boolean;
|
||||
function ToggleDebugDesktop(const aDesktopName: string; const aShowIncompatibleDialog: Boolean): Boolean;
|
||||
|
||||
implementation
|
||||
|
||||
@ -145,6 +158,30 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function ToggleDebugDesktop(const aDesktopName: string;
|
||||
const aShowIncompatibleDialog: Boolean): Boolean;
|
||||
var
|
||||
xDsk: TDesktopOpt;
|
||||
begin
|
||||
Result := False;
|
||||
xDsk := EnvironmentOptions.Desktops.Find(aDesktopName);
|
||||
if not Assigned(xDsk) then
|
||||
Exit;
|
||||
|
||||
if not xDsk.Compatible then
|
||||
begin
|
||||
if aShowIncompatibleDialog then
|
||||
MessageDlg(dlgCannotUseDockedUndockedDesktop, mtError, [mbOK], 0);
|
||||
Exit;
|
||||
end;
|
||||
|
||||
if EnvironmentOptions.DebugDesktopName = aDesktopName then
|
||||
EnvironmentOptions.DebugDesktopName := ''
|
||||
else
|
||||
EnvironmentOptions.DebugDesktopName := aDesktopName;
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
procedure TShowDesktopsToolButton.ChangeDesktop(Sender: TObject);
|
||||
begin
|
||||
DoChangeDesktopName := (Sender as TShowDesktopItem).DesktopName;
|
||||
@ -215,32 +252,38 @@ var
|
||||
xPM: TPopupMenu;
|
||||
i: Integer;
|
||||
xDesktop: TDesktopOpt;
|
||||
xMISaveAs: TMenuItem;
|
||||
xMI: TMenuItem;
|
||||
xMISaveAs, xMISaveAsNew, xMIToggleDebug: TMenuItem;
|
||||
begin
|
||||
xPM := DropdownMenu;
|
||||
xPM.Items.Clear;
|
||||
|
||||
xMISaveAs := TMenuItem.Create(xPM);
|
||||
xMISaveAs.Caption := dlgSaveCurrentDesktopAs;
|
||||
xMISaveAs.ImageIndex := IDEImages.LoadImage(16, 'laz_save');
|
||||
xMIToggleDebug := TMenuItem.Create(xPM);
|
||||
xMIToggleDebug.Caption := dlgToggleDebugDesktop;
|
||||
xMIToggleDebug.ImageIndex := IDEImages.LoadImage(16, 'menu_run');
|
||||
// Saved desktops
|
||||
for i:=0 to EnvironmentOptions.Desktops.Count-1 do
|
||||
begin
|
||||
xDesktop := EnvironmentOptions.Desktops[i];
|
||||
_AddItem(xDesktop, xPM.Items, @ChangeDesktop, False);
|
||||
_AddItem(xDesktop, xMISaveAs, @SaveAsDesktop, True);
|
||||
_AddItem(xDesktop, xMIToggleDebug, @ToggleAsDebugDesktop, False);
|
||||
end;
|
||||
|
||||
if xPM.Items.Count > 0 then
|
||||
xPM.Items.AddSeparator;
|
||||
xPM.Items.Add(xMISaveAs);
|
||||
xPM.Items.Add(xMIToggleDebug);
|
||||
|
||||
if xMISaveAs.Count > 0 then
|
||||
xMISaveAs.AddSeparator;
|
||||
xMI := TMenuItem.Create(xPM);
|
||||
xMISaveAs.Add(xMI);
|
||||
xMI.Caption := dlgNewDesktop;
|
||||
xMI.OnClick := @SaveAsDesktop;
|
||||
xMISaveAsNew := TMenuItem.Create(xPM);
|
||||
xMISaveAs.Add(xMISaveAsNew);
|
||||
xMISaveAsNew.Caption := dlgNewDesktop;
|
||||
xMISaveAsNew.OnClick := @SaveAsDesktop;
|
||||
xMISaveAsNew.ImageIndex := IDEImages.LoadImage(16, 'menu_saveas');
|
||||
end;
|
||||
|
||||
procedure TShowDesktopsToolButton.SaveAsDesktop(Sender: TObject);
|
||||
@ -264,6 +307,11 @@ begin
|
||||
SaveCurrentDesktop(xDesktopName, xShowOverwriteDlg);
|
||||
end;
|
||||
|
||||
procedure TShowDesktopsToolButton.ToggleAsDebugDesktop(Sender: TObject);
|
||||
begin
|
||||
ToggleDebugDesktop((Sender as TShowDesktopItem).DesktopName, True);
|
||||
end;
|
||||
|
||||
{ TDesktopForm }
|
||||
|
||||
procedure TDesktopForm.FormCreate(Sender: TObject);
|
||||
@ -278,26 +326,26 @@ begin
|
||||
// buttons captions & text
|
||||
ToolBar1.Images := IDEImages.Images_16;
|
||||
Caption := dlgManageDesktops;
|
||||
SaveTB.Hint := dlgSaveCurrentDesktopAs;
|
||||
SaveTB.ImageIndex := IDEImages.LoadImage(16, 'laz_save');
|
||||
DeleteTB.Hint := lisDelete;
|
||||
DeleteTB.ImageIndex := IDEImages.LoadImage(16, 'laz_cancel');
|
||||
RenameTB.Hint := lisRename;
|
||||
RenameTB.ImageIndex := IDEImages.LoadImage(16, 'laz_edit');
|
||||
ExportTB.Hint := lisExport;
|
||||
SaveAction.Hint := dlgSaveCurrentDesktopAs;
|
||||
SaveAction.ImageIndex := IDEImages.LoadImage(16, 'laz_save');
|
||||
DeleteAction.Hint := lisDelete;
|
||||
DeleteAction.ImageIndex := IDEImages.LoadImage(16, 'laz_cancel');
|
||||
RenameAction.Hint := lisRename;
|
||||
RenameAction.ImageIndex := IDEImages.LoadImage(16, 'laz_edit');
|
||||
ExportAction.Hint := lisExport;
|
||||
ExportTB.ImageIndex := IDEImages.LoadImage(16, 'laz_export');
|
||||
ExportItem.Caption := lisExportSelected;
|
||||
ExportAllItem.Caption := lisExportAll;
|
||||
ImportTB.Hint := lisImport;
|
||||
ImportTB.ImageIndex := IDEImages.LoadImage(16, 'laz_open');
|
||||
MoveUpTB.Hint := lisMenuEditorMoveUp;
|
||||
MoveUpTB.ImageIndex := IDEImages.LoadImage(16, 'arrow_up');
|
||||
MoveDownTB.Hint := lisMenuEditorMoveDown;
|
||||
MoveDownTB.ImageIndex := IDEImages.LoadImage(16, 'arrow_down');
|
||||
SetActiveDesktopTB.Hint := dlgSetActiveDesktop;
|
||||
SetActiveDesktopTB.ImageIndex := IDEImages.LoadImage(16, 'laz_tick');
|
||||
SetDebugDesktopTB.Hint := dlgToggleSelectedDebugDesktop;
|
||||
SetDebugDesktopTB.ImageIndex := IDEImages.LoadImage(16, 'menu_run');
|
||||
ExportAction.Caption := lisExportSelected;
|
||||
ExportAllAction.Caption := lisExportAll;
|
||||
ImportAction.Hint := lisImport;
|
||||
ImportAction.ImageIndex := IDEImages.LoadImage(16, 'laz_open');
|
||||
MoveUpAction.Hint := lisMenuEditorMoveUp;
|
||||
MoveUpAction.ImageIndex := IDEImages.LoadImage(16, 'arrow_up');
|
||||
MoveDownAction.Hint := lisMenuEditorMoveDown;
|
||||
MoveDownAction.ImageIndex := IDEImages.LoadImage(16, 'arrow_down');
|
||||
SetActiveDesktopAction.Hint := dlgSetActiveDesktop;
|
||||
SetActiveDesktopAction.ImageIndex := IDEImages.LoadImage(16, 'laz_tick');
|
||||
SetDebugDesktopAction.Hint := dlgToggleDebugDesktop;
|
||||
SetDebugDesktopAction.ImageIndex := IDEImages.LoadImage(16, 'menu_run');
|
||||
ButtonPanel1.CloseButton.Caption := lisClose;
|
||||
AutoSaveActiveDesktopCheckBox.Caption := dlgAutoSaveActiveDesktop;
|
||||
AutoSaveActiveDesktopCheckBox.Hint := dlgAutoSaveActiveDesktopHint;
|
||||
@ -689,13 +737,13 @@ end;
|
||||
procedure TDesktopForm.DesktopListBoxSelectionChange(Sender: TObject;
|
||||
User: boolean);
|
||||
begin
|
||||
DeleteTB.Enabled := DesktopListBox.ItemIndex>=0;
|
||||
RenameTB.Enabled := DeleteTB.Enabled;
|
||||
SetDebugDesktopTB.Enabled := DeleteTB.Enabled;
|
||||
MoveUpTB.Enabled := DeleteTB.Enabled;
|
||||
MoveDownTB.Enabled := DeleteTB.Enabled;
|
||||
ExportItem.Enabled := DeleteTB.Enabled;
|
||||
ExportAllItem.Enabled := DesktopListBox.Items.Count>0;
|
||||
DeleteAction.Enabled := DesktopListBox.ItemIndex>=0;
|
||||
RenameAction.Enabled := DeleteAction.Enabled;
|
||||
SetDebugDesktopAction.Enabled := DeleteAction.Enabled;
|
||||
MoveUpAction.Enabled := DeleteAction.Enabled;
|
||||
MoveDownAction.Enabled := DeleteAction.Enabled;
|
||||
ExportAction.Enabled := DeleteAction.Enabled;
|
||||
ExportAllAction.Enabled := DesktopListBox.Items.Count>0;
|
||||
ExportTB.Enabled := ExportItem.Enabled or ExportAllItem.Enabled;
|
||||
end;
|
||||
|
||||
@ -758,18 +806,8 @@ begin
|
||||
if DesktopListBox.ItemIndex = -1 then
|
||||
Exit;
|
||||
|
||||
if not EnvironmentOptions.Desktops[DesktopListBox.ItemIndex].Compatible then
|
||||
begin
|
||||
MessageDlg(dlgCannotUseDockedUndockedDesktop, mtError, [mbOK], 0);
|
||||
Exit;
|
||||
end;
|
||||
|
||||
xDesktopName := DesktopListBox.Items[DesktopListBox.ItemIndex];
|
||||
if EnvironmentOptions.DebugDesktopName = xDesktopName then
|
||||
EnvironmentOptions.DebugDesktopName := ''
|
||||
else
|
||||
EnvironmentOptions.DebugDesktopName := xDesktopName;
|
||||
|
||||
ToggleDebugDesktop(xDesktopName, True);
|
||||
RefreshList(xDesktopName);
|
||||
end;
|
||||
|
||||
|
@ -1267,7 +1267,7 @@ resourcestring
|
||||
dlgRenameDesktop = 'Rename desktop';
|
||||
dlgNewDesktop = 'New desktop ...';
|
||||
dlgSetActiveDesktop = 'Set active';
|
||||
dlgToggleSelectedDebugDesktop = 'Toggle as debug desktop';
|
||||
dlgToggleDebugDesktop = 'Toggle as debug desktop';
|
||||
dlgDesktopName = 'Desktop name';
|
||||
dlgOverwriteDesktop = 'Desktop with the name "%s" was found.'+sLineBreak+'Should the old desktop be overwritten?';
|
||||
dlgDebugDesktop = 'debug';
|
||||
|
Loading…
Reference in New Issue
Block a user