IDE: An experimental GUI for saving and switching desktops + other related changes. Define EnableDesktops.

git-svn-id: trunk@49457 -
This commit is contained in:
juha 2015-06-28 12:27:48 +00:00
parent 1fb779c4a5
commit 15df1a216f
10 changed files with 283 additions and 145 deletions

View File

@ -317,7 +317,8 @@ const
ecCodeToolsDefinesEd = ecFirstLazarus + 823;
ecExtToolSettings = ecFirstLazarus + 824;
ecManageExamples = ecFirstLazarus + 825;
ecManageDesktops = ecFirstLazarus + 825;
ecManageExamples = ecFirstLazarus + 826;
ecConfigBuildLazarus = ecFirstLazarus + 830;
ecBuildLazarus = ecFirstLazarus + 831;
ecBuildAdvancedLazarus = ecFirstLazarus + 832;

View File

@ -42,6 +42,7 @@ type
procedure SetHeight(const AValue: integer);
public
constructor Create(const TheName: string; TheList: TIDEDialogLayoutList);
procedure Assign(Source: TIDEDialogLayout);
function SizeValid: boolean;
property Width: integer read FWidth write SetWidth;
property Height: integer read FHeight write SetHeight;
@ -66,6 +67,7 @@ type
public
constructor Create;
destructor Destroy; override;
procedure Assign(Source: TIDEDialogLayoutList);
procedure ApplyLayout(ADialog: TControl;
DefaultWidth, DefaultHeight: integer;
UseAsMin: boolean = true);
@ -852,13 +854,20 @@ begin
FList:=TheList;
end;
procedure TIDEDialogLayout.Assign(Source: TIDEDialogLayout);
begin
FName := Source.FName;
FWidth := Source.FWidth;
FHeight := Source.FHeight;
FModified := True;
end;
function TIDEDialogLayout.SizeValid: boolean;
begin
Result:=(Width>10) and (Height>10);
end;
procedure TIDEDialogLayout.LoadFromConfig(Config: TConfigStorage;
const Path: string);
procedure TIDEDialogLayout.LoadFromConfig(Config: TConfigStorage; const Path: string);
begin
FName:=Config.GetValue(Path+'Name/Value','');
FWidth:=Config.GetValue(Path+'Size/Width',0);
@ -866,8 +875,7 @@ begin
Modified:=false;
end;
procedure TIDEDialogLayout.SaveToConfig(Config: TConfigStorage;
const Path: string);
procedure TIDEDialogLayout.SaveToConfig(Config: TConfigStorage; const Path: string);
begin
Config.SetValue(Path+'Name/Value',Name);
Config.SetValue(Path+'Size/Width',Width);
@ -902,6 +910,21 @@ begin
inherited Destroy;
end;
procedure TIDEDialogLayoutList.Assign(Source: TIDEDialogLayoutList);
var
i: Integer;
Layout: TIDEDialogLayout;
begin
FItemClass := Source.FItemClass;
Clear;
for i:=0 to Source.FItems.Count-1 do begin
Layout := TIDEDialogLayout.Create(Source.Items[i].Name, Self);
Layout.Assign(Source.Items[i]);
FItems.Add(Layout);
end;
FModified := True;
end;
procedure TIDEDialogLayoutList.ApplyLayout(ADialog: TControl;
DefaultWidth, DefaultHeight: integer; UseAsMin: boolean);
var

View File

@ -281,13 +281,16 @@ type
FEditorToolBarOptions: TEditorToolBarOptions;
// component palette
FComponentPaletteOptions: TCompPaletteOptions;
procedure SetConfig(aXMLCfg: TRttiXMLConfig; aConfigStore: TXMLOptionsStorage);
procedure InitLayoutList;
procedure Load(Path: String);
procedure Save(Path: String);
public
constructor Create;
constructor Create(aName: String);
destructor Destroy; override;
procedure Assign(Source: TDesktopOpt);
property Name: String read FName write FName;
property IDEDialogLayoutList: TIDEDialogLayoutList read FIDEDialogLayoutList;
@ -311,9 +314,10 @@ type
property IDECoolBarOptions: TIDECoolBarOptions read FIDECoolBarOptions;
property EditorToolBarOptions: TEditorToolBarOptions read FEditorToolBarOptions;
property ComponentPaletteOptions: TCompPaletteOptions read FComponentPaletteOptions;
end;
TEnvironmentOptions = class;
{ TDesktopOptList }
dtol = specialize TFPGObjectList<TDesktopOpt>;
@ -321,11 +325,15 @@ type
private
FXMLCfg: TRttiXMLConfig;
FConfigStore: TXMLOptionsStorage;
FEnvOpts: TEnvironmentOptions;
procedure SetConfig(aXMLCfg: TRttiXMLConfig; aConfigStore: TXMLOptionsStorage);
public
constructor Create(aEnvOpts: TEnvironmentOptions);
destructor Destroy; override;
procedure AddFromCfg(Path: String);
function IndexOf(aName: string): integer;
function Find(aName: string): TDesktopOpt;
procedure AddFromCfg(Path: String);
function Select(aName: string): Boolean;
end;
{ TEnvironmentOptions - class for storing environment options }
@ -747,6 +755,7 @@ type
property NewUnitTemplate: string read FNewUnitTemplate write FNewUnitTemplate;
property NewFormTemplate: string read FNewFormTemplate write FNewFormTemplate;
// Desktop
property Desktops: TDesktopOptList read FDesktops;
property Desktop: TDesktopOpt read GetDesktop;
end;
@ -864,12 +873,33 @@ end;
{ TDesktopOptList }
constructor TDesktopOptList.Create(aEnvOpts: TEnvironmentOptions);
begin
inherited Create;
FEnvOpts := aEnvOpts;
end;
destructor TDesktopOptList.Destroy;
begin
inherited Destroy;
end;
procedure TDesktopOptList.SetConfig(aXMLCfg: TRttiXMLConfig; aConfigStore: TXMLOptionsStorage);
begin
FXMLCfg := aXMLCfg;
FConfigStore := aConfigStore;
end;
procedure TDesktopOptList.AddFromCfg(Path: String);
var
dsk: TDesktopOpt;
begin
dsk := TDesktopOpt.Create;
dsk.SetConfig(FXMLCfg, FConfigStore);
dsk.Load(Path);
Add(dsk);
end;
function TDesktopOptList.IndexOf(aName: string): integer;
begin
Result:=Count-1;
@ -889,14 +919,14 @@ begin
Result:=nil;
end;
procedure TDesktopOptList.AddFromCfg(Path: String);
function TDesktopOptList.Select(aName: string): Boolean;
var
dsk: TDesktopOpt;
begin
dsk := TDesktopOpt.Create;
Add(dsk);
dsk.SetConfig(FXMLCfg, FConfigStore);
dsk.Load(Path);
dsk := Find(aName);
Result := Assigned(dsk);
if Result then
FEnvOpts.FDesktop := dsk;
end;
@ -904,6 +934,7 @@ end;
constructor TDesktopOpt.Create;
begin
inherited Create;
FSingleTaskBarButton:=false;
FHideIDEOnRun:=false;
FComponentPaletteVisible:=true;
@ -931,6 +962,12 @@ begin
IDEWindowIntf.IDEDialogLayoutList:=FIDEDialogLayoutList;
end;
constructor TDesktopOpt.Create(aName: String);
begin
Create; // constructor above.
FName:=aName;
end;
destructor TDesktopOpt.Destroy;
begin
if IDEWindowIntf.IDEDialogLayoutList=FIDEDialogLayoutList then
@ -942,6 +979,37 @@ begin
inherited Destroy;
end;
procedure TDesktopOpt.Assign(Source: TDesktopOpt);
begin
// Note: FName is not assigned.
// ToDo :
//FXMLCfg.Assign(Source.FXMLCfg);
//FConfigStore.Assign(Source.FConfigStore);
// window layout
FIDEDialogLayoutList.Assign(Source.FIDEDialogLayoutList);
FSingleTaskBarButton := Source.FSingleTaskBarButton;
FHideIDEOnRun := Source.FHideIDEOnRun;
FComponentPaletteVisible := Source.FComponentPaletteVisible;
FAutoAdjustIDEHeight := Source.FAutoAdjustIDEHeight;
FAutoAdjustIDEHeightFullCompPal := Source.FAutoAdjustIDEHeightFullCompPal;
// window menu
FIDENameForDesignedFormList := Source.FIDENameForDesignedFormList;
// CompletionWindow
FCompletionWindowWidth := Source.FCompletionWindowWidth;
FCompletionWindowHeight := Source.FCompletionWindowHeight;
// title
FIDETitleStartsWithProject := Source.FIDETitleStartsWithProject;
FIDETitleIncludesBuildMode := Source.FIDETitleIncludesBuildMode;
FIDEProjectDirectoryInIdeTitle := Source.FIDEProjectDirectoryInIdeTitle;
// IDE Coolbar
FIDECoolBarOptions.Assign(Source.FIDECoolBarOptions);
// Editor Toolbar
FEditorToolBarOptions.Assign(Source.FEditorToolBarOptions);
// component palette
FComponentPaletteOptions.Assign(Source.FComponentPaletteOptions);
end;
procedure TDesktopOpt.Load(Path: String);
begin
FName:=FXMLCfg.GetValue(Path+'Name', 'default');
@ -1171,7 +1239,7 @@ begin
FBuildMatrixOptions:=TBuildMatrixOptions.Create;
// Desktop collection (FDesktop will point to the active desktop).
FDesktops := TDesktopOptList.Create;
FDesktops := TDesktopOptList.Create(Self);
end;
destructor TEnvironmentOptions.Destroy;
@ -1365,7 +1433,7 @@ procedure TEnvironmentOptions.Load(OnlyDesktop: boolean);
end;
var
Path, CurPath: String;
Path, CurPath, ActiveDsk: String;
i, j: Integer;
Rec: PIDEOptionsGroupRec;
NodeName: String;
@ -1560,7 +1628,9 @@ begin
FDesktops.AddFromCfg(CurPath+'Desktop'+IntToStr(i+1)+'/');
Assert(FDesktops.Count>0, 'FDesktops.Count=0');
// Find active desktop
FDesktop:=FDesktops.Find(FXMLCfg.GetValue(CurPath+'Active','default'));
ActiveDsk := FXMLCfg.GetValue(CurPath+'Active','default');
FDesktop:=FDesktops.Find(ActiveDsk);
DebugLn(['TEnvironmentOptions.Load: New desktop, Count=',j,', Active=', ActiveDsk, ', Dsk name=', FDesktop.Name]);
end
else begin // Old path was under EnvironmentOptions/.
FDesktops.AddFromCfg(Path+'Desktop/');
@ -1833,7 +1903,8 @@ begin
CurPath:='Desktops/';
FXMLCfg.SetDeleteValue(CurPath+'Count', FDesktops.Count, 0);
FXMLCfg.SetDeleteValue(CurPath+'Active', FDesktop.Name, '');
for i := 0 to FDesktops.Count-1 do begin
for i := 0 to FDesktops.Count-1 do
begin
FDesktops[i].SetConfig(FXMLCfg, FConfigStore);
FDesktops[i].Save(CurPath+'Desktop'+IntToStr(i+1)+'/');
end;
@ -2258,8 +2329,7 @@ begin
// Can be Nil if desktops are not read from config files -> create a default desktop.
if not Assigned(FDesktop) then
begin
FDesktop := TDesktopOpt.Create;
FDesktop.Name := 'default';
FDesktop := TDesktopOpt.Create('default');
FDesktops.Add(FDesktop);
end;
Result := FDesktop;

View File

@ -14,9 +14,9 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = AutoSaveProjectCheckBox
AnchorSideTop.Side = asrBottom
Left = 6
Height = 20
Top = 383
Width = 189
Height = 17
Top = 347
Width = 164
BorderSpacing.Left = 6
BorderSpacing.Top = 6
Caption = 'AutoSaveIntervalInSecsLabel'
@ -29,9 +29,9 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = PanelGlyphsButtonsOptions
AnchorSideTop.Side = asrCenter
Left = 6
Height = 20
Top = 206
Width = 73
Height = 17
Top = 184
Width = 64
BorderSpacing.Left = 6
Caption = 'lblButtons'
Font.Style = [fsBold]
@ -43,9 +43,9 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = PanelGlyphsMenusOptions
AnchorSideTop.Side = asrCenter
Left = 6
Height = 20
Top = 233
Width = 64
Height = 17
Top = 210
Width = 56
BorderSpacing.Left = 6
Caption = 'lblMenus'
Font.Style = [fsBold]
@ -57,9 +57,9 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = lblCheckAndAutoSave
AnchorSideTop.Side = asrBottom
Left = 6
Height = 24
Top = 281
Width = 296
Height = 22
Top = 253
Width = 260
BorderSpacing.Left = 6
Caption = 'CheckDiskChangesWithLoadingCheckBox'
ParentShowHint = False
@ -71,9 +71,9 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = ShowHintsForMainSpeedButtonsCheckBox
AnchorSideTop.Side = asrBottom
Left = 6
Height = 24
Top = 151
Width = 303
Height = 22
Top = 133
Width = 266
BorderSpacing.Left = 6
Caption = 'ShowHintsForComponentPaletteCheckBox'
TabOrder = 1
@ -83,9 +83,9 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = lblHints
AnchorSideTop.Side = asrBottom
Left = 6
Height = 24
Top = 127
Width = 304
Height = 22
Top = 111
Width = 268
BorderSpacing.Left = 6
Caption = 'ShowHintsForMainSpeedButtonsCheckBox'
TabOrder = 2
@ -97,14 +97,14 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 6
Height = 28
Top = 23
Height = 23
Top = 20
Width = 584
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 6
BorderSpacing.Top = 3
BorderSpacing.Right = 6
ItemHeight = 20
ItemHeight = 17
ParentShowHint = False
ShowHint = True
Style = csDropDownList
@ -117,13 +117,13 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 6
Height = 28
Top = 409
Height = 23
Top = 370
Width = 584
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Around = 6
Enabled = False
ItemHeight = 20
ItemHeight = 17
Items.Strings = (
'1200'
'600'
@ -138,9 +138,9 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = AutoSaveEditorFilesCheckBox
AnchorSideTop.Side = asrBottom
Left = 6
Height = 24
Top = 353
Width = 197
Height = 22
Top = 319
Width = 174
BorderSpacing.Left = 6
Caption = 'AutoSaveProjectCheckBox'
Enabled = False
@ -154,9 +154,9 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = AskSavingOnlySessionCheckBox
AnchorSideTop.Side = asrBottom
Left = 6
Height = 24
Top = 329
Width = 220
Height = 22
Top = 297
Width = 193
BorderSpacing.Left = 6
Caption = 'AutoSaveEditorFilesCheckBox'
Enabled = False
@ -165,40 +165,40 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
TabOrder = 6
Visible = False
end
object LoadDesktopSettingsFromFileButton: TButton
AnchorSideLeft.Control = SaveDesktopSettingsToFileButton
object ImportDesktopButton: TButton
AnchorSideLeft.Control = ExportDesktopButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = SaveDesktopSettingsToFileButton
AnchorSideTop.Control = ExportDesktopButton
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 299
Height = 30
Top = 466
Height = 29
Top = 419
Width = 291
Anchors = [akTop, akLeft, akRight]
AutoSize = True
BorderSpacing.Left = 6
BorderSpacing.Right = 6
Caption = 'LoadDesktopSettingsFromFileButton'
OnClick = LoadDesktopSettingsFromFileButtonClick
Caption = 'Import desktop'
OnClick = ImportDesktopButtonClick
TabOrder = 7
end
object SaveDesktopSettingsToFileButton: TButton
object ExportDesktopButton: TButton
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = lblDesktopFiles
AnchorSideTop.Control = lblImportExport
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = lblCenter
Left = 6
Height = 30
Top = 466
Height = 29
Top = 419
Width = 287
Anchors = [akTop, akLeft, akRight]
AutoSize = True
BorderSpacing.Left = 6
BorderSpacing.Top = 3
BorderSpacing.Right = 3
Caption = 'SaveDesktopSettingsToFileButton'
OnClick = SaveDesktopSettingsToFileButtonClick
Caption = 'Export desktop'
OnClick = ExportDesktopButtonClick
TabOrder = 8
end
object PanelGlyphsButtonsOptions: TPanel
@ -208,10 +208,10 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 85
Height = 24
Top = 204
Width = 505
Left = 76
Height = 23
Top = 181
Width = 514
Anchors = [akTop, akLeft, akRight]
AutoSize = True
BorderSpacing.Left = 6
@ -220,15 +220,15 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
BevelOuter = bvNone
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 3
ClientHeight = 24
ClientWidth = 505
ClientHeight = 23
ClientWidth = 514
TabOrder = 9
object rbBtnGlyphShowSystem: TRadioButton
AnchorSideRight.Side = asrBottom
Left = 0
Height = 24
Height = 23
Top = 0
Width = 181
Width = 161
Caption = 'rbBtnGlyphShowSystem'
Checked = True
TabOrder = 0
@ -236,18 +236,18 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
end
object rbBtnGlyphShowNever: TRadioButton
AnchorSideLeft.Side = asrCenter
Left = 181
Height = 24
Left = 161
Height = 23
Top = 0
Width = 173
Width = 154
Caption = 'rbBtnGlyphShowNever'
TabOrder = 1
end
object rbBtnGlyphShowAlways: TRadioButton
Left = 354
Height = 24
Left = 315
Height = 23
Top = 0
Width = 180
Width = 159
Caption = 'rbBtnGlyphShowAlways'
TabOrder = 2
end
@ -258,10 +258,10 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 85
Height = 24
Top = 231
Width = 505
Left = 76
Height = 23
Top = 207
Width = 514
Anchors = [akTop, akLeft, akRight]
AutoSize = True
BorderSpacing.Top = 3
@ -269,16 +269,16 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
BevelOuter = bvNone
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 3
ClientHeight = 24
ClientWidth = 505
ClientHeight = 23
ClientWidth = 514
TabOrder = 10
object rbMenuGlyphShowSystem: TRadioButton
AnchorSideRight.Control = PanelGlyphsMenusOptions
AnchorSideRight.Side = asrBottom
Left = 0
Height = 24
Height = 23
Top = 0
Width = 196
Width = 174
Caption = 'rbMenuGlyphShowSystem'
Checked = True
TabOrder = 0
@ -286,18 +286,18 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
end
object rbMenuGlyphShowNever: TRadioButton
AnchorSideLeft.Side = asrCenter
Left = 196
Height = 24
Left = 174
Height = 23
Top = 0
Width = 188
Width = 167
Caption = 'rbMenuGlyphShowNever'
TabOrder = 1
end
object rbMenuGlyphShowAlways: TRadioButton
Left = 384
Height = 24
Left = 341
Height = 23
Top = 0
Width = 195
Width = 172
Caption = 'rbMenuGlyphShowAlways'
TabOrder = 2
end
@ -305,11 +305,11 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
object lblCenter: TLabel
AnchorSideLeft.Control = Owner
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = lblDesktopFiles
AnchorSideTop.Control = lblImportExport
AnchorSideTop.Side = asrBottom
Left = 296
Height = 5
Top = 463
Top = 416
Width = 5
AutoSize = False
ParentColor = False
@ -319,9 +319,9 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = CheckDiskChangesWithLoadingCheckBox
AnchorSideTop.Side = asrBottom
Left = 6
Height = 24
Top = 305
Width = 234
Height = 22
Top = 275
Width = 207
BorderSpacing.Left = 6
Caption = 'AskSavingOnlySessionCheckBox'
ParentShowHint = False
@ -333,9 +333,9 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = lblMouseAction
AnchorSideTop.Side = asrBottom
Left = 6
Height = 24
Top = 77
Width = 207
Height = 22
Top = 66
Width = 183
BorderSpacing.Left = 6
Caption = 'PreferDoubleClickCheckBox'
ParentShowHint = False
@ -345,10 +345,10 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
object lblLanguage: TDividerBevel
AnchorSideTop.Control = Owner
Left = 0
Height = 20
Height = 17
Top = 0
Width = 590
Caption = 'lblLanguage'
Caption = 'Language'
Anchors = [akTop, akLeft, akRight]
Font.Style = [fsBold]
ParentColor = False
@ -358,24 +358,24 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = PanelGlyphsMenusOptions
AnchorSideTop.Side = asrBottom
Left = 0
Height = 20
Top = 261
Height = 17
Top = 236
Width = 597
Caption = 'lblCheckAndAutoSave'
Caption = 'Check and Auto Save Files'
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
Font.Style = [fsBold]
ParentColor = False
ParentFont = False
end
object lblDesktopFiles: TDividerBevel
object lblImportExport: TDividerBevel
AnchorSideTop.Control = AutoSaveIntervalInSecsComboBox
AnchorSideTop.Side = asrBottom
Left = 0
Height = 20
Top = 443
Height = 17
Top = 399
Width = 597
Caption = 'lblDesktopFiles'
Caption = 'Import / Export'
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
Font.Style = [fsBold]
@ -386,10 +386,10 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = ShowHintsForComponentPaletteCheckBox
AnchorSideTop.Side = asrBottom
Left = 0
Height = 20
Top = 181
Height = 17
Top = 161
Width = 597
Caption = 'lblGlyphs'
Caption = 'Show Glyphs for'
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
Font.Style = [fsBold]
@ -400,10 +400,10 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = PreferDoubleClickCheckBox
AnchorSideTop.Side = asrBottom
Left = 0
Height = 20
Top = 107
Height = 17
Top = 94
Width = 597
Caption = 'lblHints'
Caption = 'Hints'
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
Font.Style = [fsBold]
@ -414,10 +414,10 @@ object DesktopOptionsFrame: TDesktopOptionsFrame
AnchorSideTop.Control = LanguageComboBox
AnchorSideTop.Side = asrBottom
Left = 0
Height = 20
Top = 57
Height = 17
Top = 49
Width = 597
Caption = 'lblMouseAction'
Caption = 'Mouse Action'
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
Font.Style = [fsBold]

View File

@ -25,8 +25,8 @@ unit desktop_options;
interface
uses
Classes, SysUtils, FileUtil, Forms, StdCtrls, Dialogs, LCLProc,
ExtCtrls, EnvironmentOpts, LazarusIDEStrConsts, IDETranslations, InputHistory,
Classes, SysUtils, FileUtil, Forms, StdCtrls, Dialogs, LCLProc, ExtCtrls,
Buttons, EnvironmentOpts, LazarusIDEStrConsts, IDETranslations, InputHistory,
IDEProcs, IDEOptionsIntf, IDEWindowIntf, IDEUtils, DividerBevel;
type
@ -40,7 +40,7 @@ type
AutoSaveIntervalInSecsLabel: TLabel;
AutoSaveProjectCheckBox: TCheckBox;
lblCheckAndAutoSave: TDividerBevel;
lblDesktopFiles: TDividerBevel;
lblImportExport: TDividerBevel;
lblGlyphs: TDividerBevel;
lblHints: TDividerBevel;
lblLanguage: TDividerBevel;
@ -51,7 +51,7 @@ type
lblCenter: TLabel;
lblMenus: TLabel;
LanguageComboBox: TComboBox;
LoadDesktopSettingsFromFileButton: TButton;
ImportDesktopButton: TButton;
PanelGlyphsButtonsOptions: TPanel;
PanelGlyphsMenusOptions: TPanel;
rbMenuGlyphShowAlways: TRadioButton;
@ -60,11 +60,11 @@ type
rbBtnGlyphShowAlways: TRadioButton;
rbBtnGlyphShowNever: TRadioButton;
rbBtnGlyphShowSystem: TRadioButton;
SaveDesktopSettingsToFileButton: TButton;
ExportDesktopButton: TButton;
ShowHintsForComponentPaletteCheckBox: TCheckBox;
ShowHintsForMainSpeedButtonsCheckBox: TCheckBox;
procedure SaveDesktopSettingsToFileButtonClick(Sender: TObject);
procedure LoadDesktopSettingsFromFileButtonClick(Sender: TObject);
procedure ExportDesktopButtonClick(Sender: TObject);
procedure ImportDesktopButtonClick(Sender: TObject);
private
function LangIDToCaption(const LangID: string): string;
function CaptionToLangID(const ACaption: string): string;
@ -146,9 +146,9 @@ begin
AutoSaveIntervalInSecsLabel.Caption := dlgIntvInSec;
// desktop files
lblDesktopFiles.Caption := dlgDesktopFiles;
SaveDesktopSettingsToFileButton.Caption := dlgSaveDFile;
LoadDesktopSettingsFromFileButton.Caption := dlgLoadDFile;
lblImportExport.Caption := lisImportExport;
ExportDesktopButton.Caption := dlgExportDesktop;
ImportDesktopButton.Caption := dlgImportDesktop;
end;
procedure TDesktopOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
@ -229,19 +229,19 @@ begin
end;
end;
procedure TDesktopOptionsFrame.SaveDesktopSettingsToFileButtonClick(Sender: TObject);
procedure TDesktopOptionsFrame.ExportDesktopButtonClick(Sender: TObject);
var
AnEnvironmentOptions: TEnvironmentOptions;
SaveDialog: TSaveDialog;
AFilename: String;
begin
//debugln('TEnvironmentOptionsDialog.SaveDesktopSettingsToFileButtonClick A');
//debugln('TDesktopOptionsFrame.ExportDesktopButtonClick A');
SaveDialog := TSaveDialog.Create(nil);
try
try
InputHistories.ApplyFileDialogSettings(SaveDialog);
SaveDialog.Filter:=dlgFilterLazarusDesktopSettings+' (*.lds)|*.lds'
+'|'+dlgFilterXML+' (*.xml)|*.xml'
//+'|'+dlgFilterXML+' (*.xml)|*.xml'
+'|'+dlgFilterAll+' ('+GetAllFilesMask+')|' + GetAllFilesMask;
if SaveDialog.Execute then
begin
@ -253,7 +253,7 @@ begin
AnEnvironmentOptions.Filename := AFilename;
DoSaveSettings(AnEnvironmentOptions);
AnEnvironmentOptions.Save(true);
ShowMessage(lisSavedSuccessfully);
ShowMessageFmt(lisSuccessfullyExported, [SaveDialog.Filename]);
finally
AnEnvironmentOptions.Free;
end;
@ -262,7 +262,7 @@ begin
except
on E: Exception do
begin
DebugLn('ERROR: [TEnvironmentOptionsDialog.SaveDesktopSettingsToFileButtonClick] ', E.Message);
DebugLn('ERROR: [TDesktopOptionsFrame.ExportDesktopButtonClick] ', E.Message);
end;
end;
finally
@ -270,18 +270,18 @@ begin
end;
end;
procedure TDesktopOptionsFrame.LoadDesktopSettingsFromFileButtonClick(Sender: TObject);
procedure TDesktopOptionsFrame.ImportDesktopButtonClick(Sender: TObject);
var
AnEnvironmentOptions: TEnvironmentOptions;
OpenDialog: TOpenDialog;
begin
//debugln('TEnvironmentOptionsDialog.LoadDesktopSettingsFromFileButtonClick A');
//debugln('TDesktopOptionsFrame.ImportDesktopButtonClick A');
OpenDialog := TOpenDialog.Create(nil);
try
try
InputHistories.ApplyFileDialogSettings(OpenDialog);
OpenDialog.Filter:=dlgFilterLazarusDesktopSettings+' (*.lds)|*.lds'
+'|'+dlgFilterXML+' (*.xml)|*.xml'
//+'|'+dlgFilterXML+' (*.xml)|*.xml'
+'|'+dlgFilterAll+' ('+GetAllFilesMask+')|' + GetAllFilesMask;
if OpenDialog.Execute then
begin
@ -292,7 +292,7 @@ begin
DoLoadSettings(AnEnvironmentOptions);
if IDEDockMaster=nil then
IDEWindowCreators.RestoreSimpleLayout;
ShowMessage(lisLoadedSuccessfully);
ShowMessageFmt(lisSuccessfullyImported, [OpenDialog.Filename]);
finally
AnEnvironmentOptions.Free;
end;
@ -302,7 +302,7 @@ begin
on E: Exception do
begin
// ToDo
DebugLn('ERROR: [TEnvironmentOptionsDialog.SaveDesktopSettingsToFileButtonClick] ', E.Message);
DebugLn('ERROR: [TDesktopOptionsFrame.ImportDesktopButtonClick] ', E.Message);
end;
end;
finally

View File

@ -61,7 +61,11 @@ type
end;
TIDEToolBarOptionList = specialize TFPGObjectList<TIDEToolBarOptions>;
{ TIDEToolBarOptionList }
Ttbo = specialize TFPGObjectList<TIDEToolBarOptions>;
TIDEToolBarOptionList = class(Ttbo)
procedure Assign(Source: TIDEToolBarOptionList);
end;
{ TIDECoolBarOptions }
TIDECoolBarOptions = class
@ -77,6 +81,7 @@ type
constructor Create;
destructor Destroy; override;
procedure Clear;
procedure Assign(Source: TIDECoolBarOptions);
function EqualToolbars(Opts: TIDECoolBarOptions): boolean;
procedure Load(XMLConfig: TXMLConfig; Path: String);
procedure Save(XMLConfig: TXMLConfig; Path: String);
@ -238,6 +243,22 @@ begin
XMLConfig.SetDeleteValue(SubPath + 'Button' + IntToStr(I+1) + '/Name', ButtonNames[I], '');
end;
{ TIDEToolBarOptionList }
procedure TIDEToolBarOptionList.Assign(Source: TIDEToolBarOptionList);
var
tbo: TIDEToolBarOptions;
i: Integer;
begin
Clear;
for i := 0 to Source.Count-1 do
begin
tbo := TIDEToolBarOptions.Create;
tbo.Assign(Source[i]);
Add(tbo);
end;
end;
{ TIDECoolBarOptions }
constructor TIDECoolBarOptions.Create;
begin
@ -256,6 +277,16 @@ begin
FIDECoolBarToolBars.Clear;
end;
procedure TIDECoolBarOptions.Assign(Source: TIDECoolBarOptions);
begin
FIDECoolBarVisible := Source.FIDECoolBarVisible;
FIDECoolBarWidth := Source.FIDECoolBarWidth;
FIDECoolBarGrabStyle := Source.FIDECoolBarGrabStyle;
FIDECoolBarGrabWidth := Source.FIDECoolBarGrabWidth;
FIDECoolBarBorderStyle := Source.FIDECoolBarBorderStyle;
FIDECoolBarToolBars.Assign(Source.FIDECoolBarToolBars);
end;
function TIDECoolBarOptions.EqualToolbars(Opts: TIDECoolBarOptions): boolean;
var
I: Integer;

View File

@ -1232,9 +1232,9 @@ resourcestring
lisIfOnlySessionInfoChangedThenAsk = 'If only the session info changed, ask about saving it.';
dlgEdFiles = 'Editor Files';
dlgIntvInSec = 'Interval in secs';
dlgDesktopFiles = 'Desktop Files';
dlgSaveDFile = 'Save desktop settings to file';
dlgLoadDFile = 'Load desktop settings from file';
dlgExportDesktop = 'Export desktop';
dlgImportDesktop = 'Import desktop';
dlgSaveCurrentDesktop = 'Save current desktop';
dlgDesktopHints = 'Hints';
dlgDesktopButtons = 'Buttons - ';
dlgDesktopMenus = 'Menus - ';
@ -1244,8 +1244,6 @@ resourcestring
dlgPreferDoubleClickOverSingleClick = 'Prefer double-click over single-click';
dlgCurrentlyRespectedByMessagesWindow = 'Currently respected by messages window, '
+'jump history and search results.';
lisSavedSuccessfully = 'Saved successfully';
lisLoadedSuccessfully = 'Loaded successfully';
// Window options
dlgShowingWindows = 'Showing Windows';
@ -3139,6 +3137,7 @@ resourcestring
lisMenuCodeToolsDefinesEditor = 'CodeTools Defines Editor ...';
lisMenuRescanFPCSourceDirectory = 'Rescan FPC Source Directory';
srkmecMakeResourceString = 'Make Resource String';
lisDesktops = 'Desktops ...';
lisKMDiffEditorFiles = 'Diff Editor Files';
lisKMConvertDFMFileToLFM = 'Convert DFM File to LFM';
lisKMConvertDelphiUnitToLazarusUnit = 'Convert Delphi Unit to Lazarus Unit';

View File

@ -146,7 +146,7 @@ uses
CodeTemplatesDlg, CodeBrowser, FindUnitDlg, InspectChksumChangedDlg,
IdeOptionsDlg, EditDefineTree, PublishModule, EnvironmentOpts, TransferMacros,
KeyMapping, IDETranslations, IDEProcs, ExtToolDialog, ExtToolEditDlg,
JumpHistoryView, ExampleManager,
JumpHistoryView, DesktopManager, ExampleManager,
BuildLazDialog, BuildProfileManager, BuildManager, CheckCompOptsForNewUnitDlg,
MiscOptions, InputHistory, UnitDependencies,
IDEFPCInfo, IDEInfoDlg, IDEInfoNeedBuild, ProcessList, InitialSetupDlgs,
@ -356,6 +356,7 @@ type
procedure mnuToolConvertDelphiProjectClicked(Sender: TObject);
procedure mnuToolConvertDelphiPackageClicked(Sender: TObject);
procedure mnuToolConvertEncodingClicked(Sender: TObject);
procedure mnuToolManageDesktopsClicked(Sender: TObject);
procedure mnuToolManageExamplesClicked(Sender: TObject);
procedure mnuToolBuildLazarusClicked(Sender: TObject);
procedure mnuToolBuildAdvancedLazarusClicked(Sender: TObject);
@ -2735,6 +2736,11 @@ begin
itmEnvCodeToolsDefinesEditor.OnClick := @mnuEnvCodeToolsDefinesEditorClicked;
itmToolConfigure.OnClick := @mnuToolConfigureUserExtToolsClicked;
itmToolManageDesktops.OnClick := @mnuToolManageDesktopsClicked;
{$IFnDEF EnableDesktops}
itmToolManageDesktops.Visible := False;
{$ENDIF}
itmToolManageExamples.OnClick := @mnuToolManageExamplesClicked;
itmToolDiff.OnClick := @mnuToolDiffClicked;
itmToolCheckLFM.OnClick := @mnuToolCheckLFMClicked;
@ -2743,7 +2749,6 @@ begin
itmToolConvertDelphiProject.OnClick := @mnuToolConvertDelphiProjectClicked;
itmToolConvertDelphiPackage.OnClick := @mnuToolConvertDelphiPackageClicked;
itmToolConvertEncoding.OnClick := @mnuToolConvertEncodingClicked;
itmToolManageExamples.OnClick := @mnuToolManageExamplesClicked;
itmToolBuildLazarus.OnClick := @mnuToolBuildLazarusClicked;
itmToolConfigureBuildLazarus.OnClick := @mnuToolConfigBuildLazClicked;
// Set initial caption for Build Lazarus item. Will be changed in BuildLazDialog.
@ -4551,6 +4556,11 @@ begin
ShowConvertEncodingDlg;
end;
procedure TMainIDE.mnuToolManageDesktopsClicked(Sender: TObject);
begin
ShowDesktopManagerDlg;
end;
procedure TMainIDE.mnuToolManageExamplesClicked(Sender: TObject);
begin
DoExampleManager();

View File

@ -332,6 +332,8 @@ type
//itmCustomTools: TIDEMenuSection;
itmToolConfigure: TIDEMenuCommand;
//itmSecondaryTools: TIDEMenuSection;
itmToolManageDesktops: TIDEMenuCommand;
itmToolManageExamples: TIDEMenuCommand;
itmToolDiff: TIDEMenuCommand;
//itmDelphiConversion: TIDEMenuSection;
itmToolCheckLFM: TIDEMenuCommand;
@ -341,7 +343,6 @@ type
itmToolConvertDFMtoLFM: TIDEMenuCommand;
itmToolConvertEncoding: TIDEMenuCommand;
//itmBuildingLazarus: TIDEMenuSection;
itmToolManageExamples: TIDEMenuCommand;
itmToolBuildLazarus: TIDEMenuCommand;
itmToolConfigureBuildLazarus: TIDEMenuCommand;

View File

@ -1011,6 +1011,7 @@ begin
CreateMenuSeparatorSection(mnuTools,itmSecondaryTools,'itmSecondaryTools');
ParentMI:=itmSecondaryTools;
CreateMenuItem(ParentMI,itmToolManageDesktops,'itmToolManageDesktops', lisDesktops);
CreateMenuItem(ParentMI,itmToolManageExamples,'itmToolManageExamples',lisMenuExampleProjects, 'camera');
CreateMenuItem(ParentMI,itmToolDiff,'itmToolDiff',lisMenuCompareFiles, 'menu_tool_diff');
@ -1294,6 +1295,9 @@ begin
itmEnvCodeToolsDefinesEditor.Command:=GetCommand(ecCodeToolsDefinesEd);
itmToolConfigure.Command:=GetCommand(ecExtToolSettings);
itmToolManageDesktops.Command:=GetCommand(ecManageDesktops);
itmToolManageExamples.Command:=GetCommand(ecManageExamples);
itmToolDiff.Command:=GetCommand(ecDiff);
itmToolConvertDFMtoLFM.Command:=GetCommand(ecConvertDFM2LFM);
@ -1302,7 +1306,6 @@ begin
itmToolConvertDelphiProject.Command:=GetCommand(ecConvertDelphiProject);
itmToolConvertDelphiPackage.Command:=GetCommand(ecConvertDelphiPackage);
itmToolConvertEncoding.Command:=GetCommand(ecConvertEncoding);
itmToolManageExamples.Command:=GetCommand(ecManageExamples);
itmToolBuildLazarus.Command:=GetCommand(ecBuildLazarus);
itmToolConfigureBuildLazarus.Command:=GetCommand(ecConfigBuildLazarus);