mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-10-31 03:01:28 +01:00 
			
		
		
		
	IDE: Desktops: save ObjectInspector grid splitter and info panel properties.
git-svn-id: trunk@56913 -
This commit is contained in:
		
							parent
							
								
									56bdf66786
								
							
						
					
					
						commit
						129140c672
					
				| @ -1,19 +1,19 @@ | ||||
| object ObjectInspectorDlg: TObjectInspectorDlg | ||||
|   Left = 338 | ||||
|   Height = 669 | ||||
|   Top = 162 | ||||
|   Width = 300 | ||||
|   Left = -3 | ||||
|   Height = 702 | ||||
|   Top = 169 | ||||
|   Width = 273 | ||||
|   BorderStyle = bsSizeToolWin | ||||
|   Caption = 'ObjectInspectorDlg' | ||||
|   ClientHeight = 669 | ||||
|   ClientWidth = 300 | ||||
|   ClientHeight = 702 | ||||
|   ClientWidth = 273 | ||||
|   KeyPreview = True | ||||
|   LCLVersion = '1.7' | ||||
|   LCLVersion = '1.9.0.0' | ||||
|   object StatusBar: TStatusBar | ||||
|     Left = 0 | ||||
|     Height = 19 | ||||
|     Top = 650 | ||||
|     Width = 300 | ||||
|     Height = 23 | ||||
|     Top = 679 | ||||
|     Width = 273 | ||||
|     Panels = <     | ||||
|       item | ||||
|         Width = 100 | ||||
| @ -24,11 +24,11 @@ object ObjectInspectorDlg: TObjectInspectorDlg | ||||
|   end | ||||
|   object AvailPersistentComboBox: TComboBox | ||||
|     Left = 0 | ||||
|     Height = 28 | ||||
|     Height = 23 | ||||
|     Top = 0 | ||||
|     Width = 300 | ||||
|     Width = 273 | ||||
|     Align = alTop | ||||
|     ItemHeight = 14 | ||||
|     ItemHeight = 15 | ||||
|     OnCloseUp = AvailComboBoxCloseUp | ||||
|     Style = csDropDownList | ||||
|     TabOrder = 0 | ||||
| @ -36,22 +36,22 @@ object ObjectInspectorDlg: TObjectInspectorDlg | ||||
|   object ComponentPanel: TPanel | ||||
|     Left = 0 | ||||
|     Height = 184 | ||||
|     Top = 28 | ||||
|     Width = 300 | ||||
|     Top = 23 | ||||
|     Width = 273 | ||||
|     Align = alTop | ||||
|     BevelOuter = bvNone | ||||
|     ClientHeight = 184 | ||||
|     ClientWidth = 300 | ||||
|     ClientWidth = 273 | ||||
|     TabOrder = 2 | ||||
|     object CompFilterEdit: TTreeFilterEdit | ||||
|       AnchorSideLeft.Control = CompFilterLabel | ||||
|       AnchorSideLeft.Side = asrBottom | ||||
|       AnchorSideTop.Control = CompFilterLabel | ||||
|       AnchorSideTop.Side = asrCenter | ||||
|       Left = 84 | ||||
|       Height = 28 | ||||
|       Top = 0 | ||||
|       Width = 213 | ||||
|       Left = 77 | ||||
|       Height = 23 | ||||
|       Top = 3 | ||||
|       Width = 193 | ||||
|       ButtonWidth = 23 | ||||
|       NumGlyphs = 1 | ||||
|       Anchors = [akTop, akLeft, akRight] | ||||
| @ -61,9 +61,9 @@ object ObjectInspectorDlg: TObjectInspectorDlg | ||||
|     end | ||||
|     object CompFilterLabel: TLabel | ||||
|       Left = 3 | ||||
|       Height = 14 | ||||
|       Height = 15 | ||||
|       Top = 7 | ||||
|       Width = 76 | ||||
|       Width = 69 | ||||
|       Caption = 'Co&mponents' | ||||
|       FocusControl = CompFilterEdit | ||||
|       ParentColor = False | ||||
| @ -72,7 +72,7 @@ object ObjectInspectorDlg: TObjectInspectorDlg | ||||
|   object MainPopupMenu: TPopupMenu | ||||
|     OnPopup = MainPopupMenuPopup | ||||
|     OnClose = MainPopupMenuClose | ||||
|     left = 32 | ||||
|     top = 64 | ||||
|     Left = 32 | ||||
|     Top = 64 | ||||
|   end | ||||
| end | ||||
|  | ||||
| @ -872,11 +872,6 @@ function dbgs(States: TOIPropertyGridStates): string; overload; | ||||
| function GetChangeParentCandidates(PropertyEditorHook: TPropertyEditorHook; | ||||
|   Selection: TPersistentSelectionList): TFPList; | ||||
| 
 | ||||
| implementation | ||||
| 
 | ||||
| {$R *.lfm} | ||||
| {$R images\ideintf_images.res} | ||||
| 
 | ||||
| const | ||||
|   DefaultOIPageNames: array[TObjectInspectorPage] of shortstring = ( | ||||
|     'PropertyPage', | ||||
| @ -891,6 +886,11 @@ const | ||||
|     'RestrictedGrid' | ||||
|     ); | ||||
| 
 | ||||
| implementation | ||||
| 
 | ||||
| {$R *.lfm} | ||||
| {$R images\ideintf_images.res} | ||||
| 
 | ||||
| function SortGridRows(Item1, Item2 : pointer) : integer; | ||||
| begin | ||||
|   Result:=SysUtils.CompareText(TOIPropertyGridRow(Item1).Name, | ||||
|  | ||||
| @ -13,7 +13,7 @@ uses | ||||
|   // IdeIntf | ||||
|   IDEImagesIntf, ToolBarIntf, IDEWindowIntf, | ||||
|   // IDE | ||||
|   LazarusIDEStrConsts, EnvironmentOpts, IDEOptionDefs, InputHistory; | ||||
|   LazarusIDEStrConsts, EnvironmentOpts, IDEOptionDefs, InputHistory, MainIntf; | ||||
| 
 | ||||
| type | ||||
| 
 | ||||
| @ -163,7 +163,9 @@ begin | ||||
|     else | ||||
|       Desktops.Insert(dskIndex, dsk); | ||||
|     debugln(['TDesktopForm.SaveBitBtnClick: Assign from active desktop to ', aDesktopName]); | ||||
|     Desktop.ImportSettingsFromIDE; | ||||
|     if ObjectInspector1<>nil then | ||||
|       EnvironmentOptions.ObjectInspectorOptions.Assign(ObjectInspector1); | ||||
|     Desktop.ImportSettingsFromIDE(EnvironmentOptions); | ||||
|     dsk.Assign(Desktop); | ||||
|     ActiveDesktopName := aDesktopName; | ||||
|     Result := True; | ||||
|  | ||||
| @ -52,7 +52,7 @@ uses | ||||
|   // IDE | ||||
|   IDEProcs, DialogProcs, LazarusIDEStrConsts, IDETranslations, LazConf, | ||||
|   IDEOptionDefs, TransferMacros, ModeMatrixOpts, Debugger, | ||||
|   IdeCoolbarData, EditorToolbarStatic; | ||||
|   IdeCoolbarData, EditorToolbarStatic, math; | ||||
| 
 | ||||
| const | ||||
|   EnvOptsVersion: integer = 110; | ||||
| @ -287,6 +287,7 @@ type | ||||
|   TEnvOptParseTypes = set of TEnvOptParseType; | ||||
| 
 | ||||
| type | ||||
|   TEnvironmentOptions = class; | ||||
| 
 | ||||
|   TLastOpenPackagesList = class(TStringList) | ||||
|   public | ||||
| @ -325,6 +326,30 @@ type | ||||
|   end; | ||||
|   TDesktopOptClass = class of TCustomDesktopOpt; | ||||
| 
 | ||||
|   TDesktopOIOptions = class(TPersistent) | ||||
|   private | ||||
|     FInfoBoxHeight: integer; | ||||
|     FShowInfoBox: boolean; | ||||
|     FSplitterX: array[TObjectInspectorPage] of Integer; | ||||
| 
 | ||||
|     function GetSplitterX(const APage: TObjectInspectorPage): Integer; | ||||
|     procedure SetSplitterX(const APage: TObjectInspectorPage; | ||||
|       const ASplitterX: Integer); | ||||
|   protected | ||||
|     procedure AssignTo(Dest: TPersistent); override; | ||||
|   public | ||||
|     constructor Create; | ||||
| 
 | ||||
|     procedure ImportSettingsFromIDE(const AOptions: TEnvironmentOptions); | ||||
|     procedure ExportSettingsToIDE(const AOptions: TEnvironmentOptions); | ||||
|     procedure Load(XMLConfig: TXMLConfig; Path: String); | ||||
|     procedure Save(XMLConfig: TXMLConfig; Path: String); | ||||
| 
 | ||||
|     property SplitterX[const APage: TObjectInspectorPage]: Integer read GetSplitterX write SetSplitterX; | ||||
|     property ShowInfoBox: boolean read FShowInfoBox write FShowInfoBox; | ||||
|     property InfoBoxHeight: integer read FInfoBoxHeight write FInfoBoxHeight; | ||||
|   end; | ||||
| 
 | ||||
|   { TDesktopOpt } | ||||
| 
 | ||||
|   TDesktopOpt = class(TCustomDesktopOpt) | ||||
| @ -332,6 +357,7 @@ type | ||||
|     // window layout | ||||
|     FIDEWindowCreatorsLayoutList: TSimpleWindowLayoutList; | ||||
|     FIDEDialogLayoutList: TIDEDialogLayoutList; | ||||
|     FObjectInspectorOptions: TDesktopOIOptions; | ||||
|     FSingleTaskBarButton: boolean; | ||||
|     FHideIDEOnRun: boolean; | ||||
|     FAutoAdjustIDEHeight: boolean; | ||||
| @ -366,8 +392,8 @@ type | ||||
|   public | ||||
|     procedure Load(Path: String); override; | ||||
|     procedure Save(Path: String); override; | ||||
|     procedure ImportSettingsFromIDE; | ||||
|     procedure ExportSettingsToIDE; | ||||
|     procedure ImportSettingsFromIDE(const AOptions: TEnvironmentOptions); | ||||
|     procedure ExportSettingsToIDE(const AOptions: TEnvironmentOptions); | ||||
|     procedure RestoreDesktop; | ||||
| 
 | ||||
|     property IDEWindowCreatorsLayoutList: TSimpleWindowLayoutList read FIDEWindowCreatorsLayoutList write FIDEWindowCreatorsLayoutList; | ||||
| @ -390,6 +416,7 @@ type | ||||
|     property IDECoolBarOptions: TIDECoolBarOptions read FIDECoolBarOptions; | ||||
|     property EditorToolBarOptions: TEditorToolBarOptions read FEditorToolBarOptions; | ||||
|     property ComponentPaletteOptions: TCompPaletteOptions read FComponentPaletteOptions; | ||||
|     property ObjectInspectorOptions: TDesktopOIOptions read FObjectInspectorOptions; | ||||
|   end; | ||||
| 
 | ||||
|   { TUnsupportedDesktopOpt } | ||||
| @ -403,8 +430,6 @@ type | ||||
|     procedure Save(Path: String); override; | ||||
|   end; | ||||
| 
 | ||||
|   TEnvironmentOptions = class; | ||||
| 
 | ||||
|   { TDesktopOptList } | ||||
| 
 | ||||
|   TDesktopOptList = class(TObjectList) | ||||
| @ -1046,6 +1071,98 @@ begin | ||||
|   WriteStr(Result, u); | ||||
| end; | ||||
| 
 | ||||
| { TDesktopOIOptions } | ||||
| 
 | ||||
| constructor TDesktopOIOptions.Create; | ||||
| var | ||||
|   I: TObjectInspectorPage; | ||||
| begin | ||||
|   FInfoBoxHeight := -1; | ||||
|   FShowInfoBox := True; | ||||
|   for I in TObjectInspectorPage do | ||||
|     SplitterX[I] := -1; | ||||
| end; | ||||
| 
 | ||||
| procedure TDesktopOIOptions.AssignTo(Dest: TPersistent); | ||||
| var | ||||
|   DDest: TDesktopOIOptions; | ||||
|   I: TObjectInspectorPage; | ||||
| begin | ||||
|   if Dest is TDesktopOIOptions then | ||||
|   begin | ||||
|     DDest := TDesktopOIOptions(Dest); | ||||
| 
 | ||||
|     for I in TObjectInspectorPage do | ||||
|       DDest.SplitterX[I] := SplitterX[I]; | ||||
|     DDest.ShowInfoBox := ShowInfoBox; | ||||
|     DDest.InfoBoxHeight := InfoBoxHeight; | ||||
|   end else | ||||
|     inherited AssignTo(Dest); | ||||
| end; | ||||
| 
 | ||||
| function TDesktopOIOptions.GetSplitterX(const APage: TObjectInspectorPage | ||||
|   ): Integer; | ||||
| begin | ||||
|   Result := FSplitterX[APage]; | ||||
| end; | ||||
| 
 | ||||
| procedure TDesktopOIOptions.ImportSettingsFromIDE( | ||||
|   const AOptions: TEnvironmentOptions); | ||||
| var | ||||
|   I: TObjectInspectorPage; | ||||
|   o: TOIOptions; | ||||
| begin | ||||
|   o := AOptions.ObjectInspectorOptions; | ||||
|   for I in TObjectInspectorPage do | ||||
|     FSplitterX[I] := o.GridSplitterX[I]; | ||||
| 
 | ||||
|   ShowInfoBox := o.ShowInfoBox; | ||||
|   InfoBoxHeight := o.InfoBoxHeight; | ||||
| end; | ||||
| 
 | ||||
| procedure TDesktopOIOptions.Load(XMLConfig: TXMLConfig; Path: String); | ||||
| var | ||||
|   I: TObjectInspectorPage; | ||||
| begin | ||||
|   Path := Path + 'ObjectInspector'; | ||||
|   for I in TObjectInspectorPage do | ||||
|     FSplitterX[I] := XMLConfig.GetValue(Path+'SplitterX/'+DefaultOIPageNames[I]+'/Value',-1); | ||||
|   ShowInfoBox := XMLConfig.GetValue(Path+'ShowInfoBox/Value',True); | ||||
|   InfoBoxHeight := XMLConfig.GetValue(Path+'InfoBoxHeight/Value',-1); | ||||
| end; | ||||
| 
 | ||||
| procedure TDesktopOIOptions.Save(XMLConfig: TXMLConfig; Path: String); | ||||
| var | ||||
|   I: TObjectInspectorPage; | ||||
| begin | ||||
|   Path := Path + 'ObjectInspector'; | ||||
|   for I in TObjectInspectorPage do | ||||
|     XMLConfig.SetDeleteValue(Path+'SplitterX/'+DefaultOIPageNames[I]+'/Value',FSplitterX[I],-1); | ||||
|   XMLConfig.SetDeleteValue(Path+'ShowInfoBox/Value',ShowInfoBox,True); | ||||
|   XMLConfig.SetDeleteValue(Path+'InfoBoxHeight/Value',InfoBoxHeight,-1); | ||||
| end; | ||||
| 
 | ||||
| procedure TDesktopOIOptions.SetSplitterX(const APage: TObjectInspectorPage; | ||||
|   const ASplitterX: Integer); | ||||
| begin | ||||
|   FSplitterX[APage] := ASplitterX; | ||||
| end; | ||||
| 
 | ||||
| procedure TDesktopOIOptions.ExportSettingsToIDE( | ||||
|   const AOptions: TEnvironmentOptions); | ||||
| var | ||||
|   I: TObjectInspectorPage; | ||||
|   o: TOIOptions; | ||||
| begin | ||||
|   o := AOptions.ObjectInspectorOptions; | ||||
|   for I in TObjectInspectorPage do | ||||
|     if FSplitterX[I]>=0 then | ||||
|       o.GridSplitterX[I] := Max(10, FSplitterX[I]); | ||||
| 
 | ||||
|   o.ShowInfoBox := ShowInfoBox; | ||||
|   o.InfoBoxHeight := InfoBoxHeight; | ||||
| end; | ||||
| 
 | ||||
| { TUnsupportedDesktopOpt } | ||||
| 
 | ||||
| destructor TUnsupportedDesktopOpt.Destroy; | ||||
| @ -1257,6 +1374,8 @@ begin | ||||
|   FEditorToolBarOptions:=TEditorToolBarOptions.Create; | ||||
|   // component palette | ||||
|   FComponentPaletteOptions:=TCompPaletteOptions.Create; | ||||
|   // object inspector | ||||
|   FObjectInspectorOptions:=TDesktopOIOptions.Create; | ||||
|   // Windows layout | ||||
|   InitLayoutList; | ||||
| 
 | ||||
| @ -1272,6 +1391,7 @@ begin | ||||
|   FreeAndNil(FEditorToolBarOptions); | ||||
|   FreeAndNil(FIDECoolBarOptions); | ||||
|   FreeAndNil(FDockedOpt); | ||||
|   FreeAndNil(FObjectInspectorOptions); | ||||
| 
 | ||||
|   FreeAndNil(FIDEDialogLayoutList); | ||||
|   FreeAndNil(FIDEWindowCreatorsLayoutList); | ||||
| @ -1319,6 +1439,8 @@ begin | ||||
|   FEditorToolBarOptions.Assign(Source.FEditorToolBarOptions); | ||||
|   // component palette | ||||
|   FComponentPaletteOptions.Assign(Source.FComponentPaletteOptions); | ||||
|   // object inspector | ||||
|   FObjectInspectorOptions.Assign(Source.FObjectInspectorOptions); | ||||
| 
 | ||||
|   if IsCompatible and Assigned(FDockedOpt) then | ||||
|     FDockedOpt.Assign(Source.FDockedOpt); | ||||
| @ -1354,6 +1476,8 @@ begin | ||||
|   FEditorToolBarOptions.Load(FXMLCfg, Path); | ||||
|   // component palette | ||||
|   FComponentPaletteOptions.Load(FXMLCfg, Path); | ||||
|   // Object Inspector | ||||
|   FObjectInspectorOptions.Load(FXMLCfg, Path); | ||||
| 
 | ||||
|   if Assigned(FDockedOpt) then | ||||
|     FDockedOpt.Load(Path, FXMLCfg); | ||||
| @ -1366,11 +1490,13 @@ begin | ||||
|     FDockedOpt.RestoreDesktop; | ||||
| end; | ||||
| 
 | ||||
| procedure TDesktopOpt.ImportSettingsFromIDE; | ||||
| procedure TDesktopOpt.ImportSettingsFromIDE(const AOptions: TEnvironmentOptions | ||||
|   ); | ||||
| begin | ||||
|   IDEWindowIntf.IDEWindowCreators.SimpleLayoutStorage.StoreWindowPositions; | ||||
|   FIDEDialogLayoutList.Assign(IDEWindowIntf.IDEDialogLayoutList); | ||||
|   FIDEWindowCreatorsLayoutList.CopyItemsFrom(IDEWindowIntf.IDEWindowCreators.SimpleLayoutStorage); | ||||
|   FObjectInspectorOptions.ImportSettingsFromIDE(AOptions); | ||||
| 
 | ||||
|   if Assigned(FDockedOpt) then | ||||
|     FDockedOpt.ImportSettingsFromIDE; | ||||
| @ -1409,18 +1535,21 @@ begin | ||||
|   FEditorToolBarOptions.Save(FXMLCfg, Path); | ||||
|   // component palette | ||||
|   FComponentPaletteOptions.Save(FXMLCfg, Path); | ||||
|   // Object Inspector | ||||
|   FObjectInspectorOptions.Save(FXMLCfg, Path); | ||||
| 
 | ||||
|   if Assigned(FDockedOpt) then | ||||
|     FDockedOpt.Save(Path, FXMLCfg); | ||||
| end; | ||||
| 
 | ||||
| procedure TDesktopOpt.ExportSettingsToIDE; | ||||
| procedure TDesktopOpt.ExportSettingsToIDE(const AOptions: TEnvironmentOptions); | ||||
| begin | ||||
|   if Assigned(FDockedOpt) then | ||||
|     FDockedOpt.ExportSettingsToIDE; | ||||
| 
 | ||||
|   IDEWindowIntf.IDEDialogLayoutList.Assign(FIDEDialogLayoutList); | ||||
|   IDEWindowIntf.IDEWindowCreators.SimpleLayoutStorage.CopyItemsFrom(FIDEWindowCreatorsLayoutList); | ||||
|   FObjectInspectorOptions.ExportSettingsToIDE(AOptions); | ||||
| end; | ||||
| 
 | ||||
| procedure InitLayoutHelper(const FormID: string); | ||||
| @ -1640,7 +1769,7 @@ begin | ||||
|   try | ||||
|     if AutoSaveActiveDesktop and Assigned(DebugDesktop) then | ||||
|     begin | ||||
|       Desktop.ImportSettingsFromIDE; | ||||
|       Desktop.ImportSettingsFromIDE(Self); | ||||
|       DebugDesktop.Assign(Desktop); | ||||
|     end; | ||||
| 
 | ||||
| @ -1674,7 +1803,7 @@ begin | ||||
|   begin | ||||
|     FLastDesktopBeforeDebug := TDesktopOpt.Create(ActiveDesktopName); | ||||
|     if AutoSaveActiveDesktop then | ||||
|       Desktop.ImportSettingsFromIDE; | ||||
|       Desktop.ImportSettingsFromIDE(Self); | ||||
|     FLastDesktopBeforeDebug.Assign(Desktop, False); | ||||
|     EnvironmentOptions.UseDesktop(DebugDesktop); | ||||
|   end; | ||||
| @ -2096,7 +2225,7 @@ begin | ||||
|     end; | ||||
| 
 | ||||
|     Desktop.Assign(ActiveDesktop, False); | ||||
|     Desktop.ExportSettingsToIDE; | ||||
|     Desktop.ExportSettingsToIDE(Self); | ||||
| 
 | ||||
|     FileUpdated; | ||||
|   except | ||||
| @ -2399,7 +2528,7 @@ begin | ||||
|     and (Application.MainForm<>nil) and Application.MainForm.Visible then | ||||
|     begin | ||||
|       //save active desktop | ||||
|       Desktop.ImportSettingsFromIDE; | ||||
|       Desktop.ImportSettingsFromIDE(Self); | ||||
|       ActiveDesktop.Assign(Desktop); | ||||
| 
 | ||||
|       if Assigned(FLastDesktopBeforeDebug) then//are we in debug session? | ||||
| @ -2890,8 +3019,8 @@ begin | ||||
|   ActiveDesktopName := ADesktop.Name; | ||||
|   if ADesktop.AssociatedDebugDesktopName<>'' then | ||||
|     DebugDesktopName := ADesktop.AssociatedDebugDesktopName; | ||||
|   Desktop.ExportSettingsToIDE(Self); | ||||
|   DoAfterWrite(False);  //this is needed to get the EditorToolBar refreshed!!! - needed only here in UseDesktop() | ||||
|   Desktop.ExportSettingsToIDE; | ||||
|   Desktop.RestoreDesktop; | ||||
| 
 | ||||
|   //set focus back to the previously focused control | ||||
|  | ||||
| @ -4656,7 +4656,8 @@ procedure TMainIDE.SaveDesktopSettings(TheEnvironmentOptions: TEnvironmentOption | ||||
| begin | ||||
|   if ConsoleVerbosity>0 then | ||||
|     DebugLn(['Hint: (lazarus) TMainIDE.SaveDesktopSettings']); | ||||
|   EnvironmentOptions.Desktop.ImportSettingsFromIDE; | ||||
| 
 | ||||
|   EnvironmentOptions.Desktop.ImportSettingsFromIDE(TheEnvironmentOptions); | ||||
| 
 | ||||
|   if ObjectInspector1<>nil then | ||||
|     TheEnvironmentOptions.ObjectInspectorOptions.Assign(ObjectInspector1); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 ondrej
						ondrej