8
Classes, SysUtils, LCLProc, FileUtil, Forms, Controls, Graphics, Dialogs,
9
Menus, ExtCtrls, Buttons, ComCtrls, SimpleFrm,
10
AnchorDocking, AnchorDockStorage, XMLPropStorage, AnchorDockOptionsDlg;
16
TMainIDE = class(TForm)
17
ImageList1: TImageList;
19
ComponentPalette: TPageControl;
22
LoadLayoutMenuItem: TMenuItem;
23
SaveLayoutAsMenuItem: TMenuItem;
24
NewFileMenuItem: TMenuItem;
25
OpenFileMenuItem: TMenuItem;
29
QuitMenuItem: TMenuItem;
30
FileMenuItem: TMenuItem;
33
SaveLayoutToolButton: TToolButton;
34
LoadLayoutToolButton: TToolButton;
35
ViewDbgOutToolButton: TToolButton;
36
ViewProjInspToolButton: TToolButton;
37
ViewFPDocEditorToolButton: TToolButton;
38
ViewMessagesToolButton: TToolButton;
39
ViewOIToolButton: TToolButton;
40
ViewCodeExplToolButton: TToolButton;
41
ViewSrcEdit2ToolButton: TToolButton;
42
ViewSrcEditor1ToolButton: TToolButton;
43
procedure FileMenuItemClick(Sender: TObject);
44
procedure FormCreate(Sender: TObject);
45
procedure LoadLayoutMenuItemClick(Sender: TObject);
46
procedure LoadLayoutToolButtonClick(Sender: TObject);
47
procedure QuitMenuItemClick(Sender: TObject);
48
procedure SaveLayoutAsMenuItemClick(Sender: TObject);
49
procedure SaveLayoutToolButtonClick(Sender: TObject);
50
procedure ViewCodeExplToolButtonClick(Sender: TObject);
51
procedure ViewDbgOutToolButtonClick(Sender: TObject);
52
procedure ViewFPDocEditorToolButtonClick(Sender: TObject);
53
procedure ViewMessagesToolButtonClick(Sender: TObject);
54
procedure ViewOIToolButtonClick(Sender: TObject);
55
procedure ViewProjInspToolButtonClick(Sender: TObject);
56
procedure ViewSrcEdit2ToolButtonClick(Sender: TObject);
57
procedure ViewSrcEditor1ToolButtonClick(Sender: TObject);
59
procedure DockMasterCreateControl(Sender: TObject; aName: string; var
60
AControl: TControl; DoDisableAutoSizing: boolean);
62
procedure ShowForm(AForm: TCustomForm; FormEnableAutosizing: boolean);
63
procedure SaveLayout(Filename: string);
64
procedure LoadLayout(Filename: string);
76
procedure TMainIDE.FileMenuItemClick(Sender: TObject);
81
procedure TMainIDE.DockMasterCreateControl(Sender: TObject; aName: string; var
82
AControl: TControl; DoDisableAutoSizing: boolean);
84
procedure CreateForm(Caption: string; NewBounds: TRect);
86
AControl:=CreateSimpleForm(aName,Caption,NewBounds,DoDisableAutoSizing);
90
// first check if the form already exists
91
// the LCL Screen has a list of all existing forms.
92
// Note: Remember that the LCL allows as form names only standard
93
// pascal identifiers and compares them case insensitive
94
AControl:=Screen.FindForm(aName);
95
if AControl<>nil then begin
96
// if it already exists, just disable autosizing if requested
97
if DoDisableAutoSizing then
98
AControl.DisableAutoSizing;
100
// if the form does not yet exist, create it
101
if aName='CodeExplorer' then
102
CreateForm('Code Explorer',Bounds(700,230,100,250))
103
else if aName='FPDocEditor' then
104
CreateForm('FPDoc Editor',Bounds(200,720,300,100))
105
else if aName='Messages' then
106
CreateForm('Messages',Bounds(230,650,350,100))
107
else if aName='ObjectInspector' then
108
CreateForm('Object Inspector',Bounds(10,200,100,350))
109
else if aName='SourceEditor1' then
110
CreateForm('Source Editor 1',Bounds(230,200,400,400))
111
else if aName='SourceEditor2' then
112
CreateForm('Source Editor 2',Bounds(260,230,350,350))
113
else if aName='ProjectInspector' then
114
CreateForm('Project Inspector',Bounds(10,230,150,250))
115
else if aName='DebugOutput' then
116
CreateForm('Debug Output',Bounds(400,400,350,150));
119
procedure TMainIDE.FormCreate(Sender: TObject);
121
ViewOIToolButton.Hint:='View Object Inspector';
122
ViewCodeExplToolButton.Hint:='View Code Explorer';
123
ViewSrcEditor1ToolButton.Hint:='View Source Editor 1';
124
ViewSrcEdit2ToolButton.Hint:='View Source Editor 2';
125
ViewFPDocEditorToolButton.Hint:='View FPDoc Editor';
126
ViewMessagesToolButton.Hint:='View Messages';
127
ViewProjInspToolButton.Hint:='View Project Inspector';
128
ViewDbgOutToolButton.Hint:='View Debug Output';
129
SaveLayoutToolButton.Hint:='Save Layout to layout.xml';
130
LoadLayoutToolButton.Hint:='Load layout from layout.xml';
132
DockMaster.MakeDockSite(Self,[akBottom],admrpChild);
133
DockMaster.OnCreateControl:=@DockMasterCreateControl;
134
DockMaster.OnShowOptions:=@ShowAnchorDockOptions;
136
SetBounds(100,50,600,80);
137
ViewSrcEditor1ToolButtonClick(Self);
138
ViewMessagesToolButtonClick(Self);
139
ViewOIToolButtonClick(Self);
140
ViewFPDocEditorToolButtonClick(Self);
143
procedure TMainIDE.LoadLayoutMenuItemClick(Sender: TObject);
147
Dlg:=TOpenDialog.Create(nil);
149
Dlg.InitialDir:=GetCurrentDirUTF8;
150
Dlg.Title:='Open layout file ...';
151
Dlg.Filter:='*.xml|*.xml';
152
Dlg.Options:=Dlg.Options+[ofFileMustExist];
153
if not Dlg.Execute then exit;
154
LoadLayout(Dlg.FileName);
160
procedure TMainIDE.LoadLayoutToolButtonClick(Sender: TObject);
162
LoadLayout('layout.xml');
165
procedure TMainIDE.QuitMenuItemClick(Sender: TObject);
170
procedure TMainIDE.SaveLayoutAsMenuItemClick(Sender: TObject);
175
Dlg:=TSaveDialog.Create(nil);
177
Dlg.InitialDir:=GetCurrentDirUTF8;
178
Dlg.Title:='Save layout as ...';
179
Dlg.Filter:='*.xml|*.xml';
180
Dlg.Options:=Dlg.Options+[ofPathMustExist,ofHideReadOnly,ofOverwritePrompt];
181
if not Dlg.Execute then exit;
182
Filename:=Dlg.FileName;
183
if ExtractFileExt(Filename)='' then
184
Filename:=Filename+'.xml';
185
SaveLayout(FileName);
191
procedure TMainIDE.SaveLayoutToolButtonClick(Sender: TObject);
193
SaveLayout('layout.xml');
196
procedure TMainIDE.ViewCodeExplToolButtonClick(Sender: TObject);
198
DockMaster.ShowControl('CodeExplorer',true);
201
procedure TMainIDE.ViewDbgOutToolButtonClick(Sender: TObject);
203
DockMaster.ShowControl('DebugOutput',true);
206
procedure TMainIDE.ViewFPDocEditorToolButtonClick(Sender: TObject);
208
DockMaster.ShowControl('FPDocEditor',true);
211
procedure TMainIDE.ViewMessagesToolButtonClick(Sender: TObject);
213
DockMaster.ShowControl('Messages',true);
216
procedure TMainIDE.ViewOIToolButtonClick(Sender: TObject);
218
DockMaster.ShowControl('ObjectInspector',true);
221
procedure TMainIDE.ViewProjInspToolButtonClick(Sender: TObject);
223
DockMaster.ShowControl('ProjectInspector',true);
226
procedure TMainIDE.ViewSrcEdit2ToolButtonClick(Sender: TObject);
228
DockMaster.ShowControl('SourceEditor2',true);
231
procedure TMainIDE.ViewSrcEditor1ToolButtonClick(Sender: TObject);
233
DockMaster.ShowControl('SourceEditor1',true);
236
procedure TMainIDE.ShowForm(AForm: TCustomForm; FormEnableAutosizing: boolean);
238
DockMaster.MakeDockable(AForm);
239
if FormEnableAutosizing then
240
AForm.EnableAutoSizing;
243
procedure TMainIDE.SaveLayout(Filename: string);
245
XMLConfig: TXMLConfigStorage;
248
// create a new xml config file
249
XMLConfig:=TXMLConfigStorage.Create(Filename,false);
251
// save the current layout of all forms
252
DockMaster.SaveLayoutToConfig(XMLConfig);
253
XMLConfig.WriteToDisk;
258
on E: Exception do begin
260
'Error saving layout to file '+Filename+':'#13+E.Message,mtError,
266
procedure TMainIDE.LoadLayout(Filename: string);
268
XMLConfig: TXMLConfigStorage;
271
// load the xml config file
272
XMLConfig:=TXMLConfigStorage.Create(Filename,True);
274
// restore the layout
275
// this will close unneeded forms and call OnCreateControl for all needed
276
DockMaster.LoadLayoutFromConfig(XMLConfig,true);
281
on E: Exception do begin
283
'Error loading layout from file '+Filename+':'#13+E.Message,mtError,