diff --git a/components/ideintf/idecommands.pas b/components/ideintf/idecommands.pas index 9418546578..f68c54e4ea 100644 --- a/components/ideintf/idecommands.pas +++ b/components/ideintf/idecommands.pas @@ -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; diff --git a/components/ideintf/idewindowintf.pas b/components/ideintf/idewindowintf.pas index f34a3d4dc2..6890631bb9 100644 --- a/components/ideintf/idewindowintf.pas +++ b/components/ideintf/idewindowintf.pas @@ -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 diff --git a/ide/environmentopts.pp b/ide/environmentopts.pp index c05155a5ba..ff56fdf476 100644 --- a/ide/environmentopts.pp +++ b/ide/environmentopts.pp @@ -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; @@ -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; diff --git a/ide/frames/desktop_options.lfm b/ide/frames/desktop_options.lfm index 77f5bf7ac2..aa77cf74fd 100644 --- a/ide/frames/desktop_options.lfm +++ b/ide/frames/desktop_options.lfm @@ -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] diff --git a/ide/frames/desktop_options.pas b/ide/frames/desktop_options.pas index b33b0d9698..4216dfbf51 100644 --- a/ide/frames/desktop_options.pas +++ b/ide/frames/desktop_options.pas @@ -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 diff --git a/ide/idecoolbardata.pas b/ide/idecoolbardata.pas index 7b0b8ece3c..2c03753d02 100644 --- a/ide/idecoolbardata.pas +++ b/ide/idecoolbardata.pas @@ -61,7 +61,11 @@ type end; - TIDEToolBarOptionList = specialize TFPGObjectList; + { TIDEToolBarOptionList } + Ttbo = specialize TFPGObjectList; + 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; diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 420345d2a2..09be1a9671 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -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'; diff --git a/ide/main.pp b/ide/main.pp index dc9522d2c4..01efe5297b 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -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(); diff --git a/ide/mainbar.pas b/ide/mainbar.pas index 8b68e896c1..6ae04e668a 100644 --- a/ide/mainbar.pas +++ b/ide/mainbar.pas @@ -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; diff --git a/ide/mainbase.pas b/ide/mainbase.pas index 59787f11ad..6c88911c6e 100644 --- a/ide/mainbase.pas +++ b/ide/mainbase.pas @@ -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);