mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-02 14:32:36 +02:00
291 lines
8.2 KiB
ObjectPascal
291 lines
8.2 KiB
ObjectPascal
unit Unit1;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, LCLProc, FileUtil, Forms, Controls, Graphics, Dialogs,
|
|
Menus, ExtCtrls, Buttons, ComCtrls, SimpleFrm,
|
|
AnchorDocking, AnchorDockStorage, XMLPropStorage, AnchorDockOptionsDlg;
|
|
|
|
type
|
|
|
|
{ TMainIDE }
|
|
|
|
TMainIDE = class(TForm)
|
|
ImageList1: TImageList;
|
|
MainMenu1: TMainMenu;
|
|
ComponentPalette: TPageControl;
|
|
MenuItem1: TMenuItem;
|
|
MenuItem2: TMenuItem;
|
|
LoadLayoutMenuItem: TMenuItem;
|
|
SaveLayoutAsMenuItem: TMenuItem;
|
|
NewFileMenuItem: TMenuItem;
|
|
OpenFileMenuItem: TMenuItem;
|
|
Page1: TTabSheet;
|
|
Page2: TTabSheet;
|
|
BtnPanel: TPanel;
|
|
QuitMenuItem: TMenuItem;
|
|
FileMenuItem: TMenuItem;
|
|
ToolBar1: TToolBar;
|
|
ToolBar2: TToolBar;
|
|
SaveLayoutToolButton: TToolButton;
|
|
LoadLayoutToolButton: TToolButton;
|
|
ViewDbgOutToolButton: TToolButton;
|
|
ViewProjInspToolButton: TToolButton;
|
|
ViewFPDocEditorToolButton: TToolButton;
|
|
ViewMessagesToolButton: TToolButton;
|
|
ViewOIToolButton: TToolButton;
|
|
ViewCodeExplToolButton: TToolButton;
|
|
ViewSrcEdit2ToolButton: TToolButton;
|
|
ViewSrcEditor1ToolButton: TToolButton;
|
|
procedure FileMenuItemClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure LoadLayoutMenuItemClick(Sender: TObject);
|
|
procedure LoadLayoutToolButtonClick(Sender: TObject);
|
|
procedure QuitMenuItemClick(Sender: TObject);
|
|
procedure SaveLayoutAsMenuItemClick(Sender: TObject);
|
|
procedure SaveLayoutToolButtonClick(Sender: TObject);
|
|
procedure ViewCodeExplToolButtonClick(Sender: TObject);
|
|
procedure ViewDbgOutToolButtonClick(Sender: TObject);
|
|
procedure ViewFPDocEditorToolButtonClick(Sender: TObject);
|
|
procedure ViewMessagesToolButtonClick(Sender: TObject);
|
|
procedure ViewOIToolButtonClick(Sender: TObject);
|
|
procedure ViewProjInspToolButtonClick(Sender: TObject);
|
|
procedure ViewSrcEdit2ToolButtonClick(Sender: TObject);
|
|
procedure ViewSrcEditor1ToolButtonClick(Sender: TObject);
|
|
private
|
|
procedure DockMasterCreateControl(Sender: TObject; aName: string; var
|
|
AControl: TControl; DoDisableAutoSizing: boolean);
|
|
public
|
|
procedure ShowForm(AForm: TCustomForm; FormEnableAutosizing: boolean);
|
|
procedure SaveLayout(Filename: string);
|
|
procedure LoadLayout(Filename: string);
|
|
end;
|
|
|
|
var
|
|
MainIDE: TMainIDE;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
{ TMainIDE }
|
|
|
|
procedure TMainIDE.FileMenuItemClick(Sender: TObject);
|
|
begin
|
|
close;
|
|
end;
|
|
|
|
procedure TMainIDE.DockMasterCreateControl(Sender: TObject; aName: string; var
|
|
AControl: TControl; DoDisableAutoSizing: boolean);
|
|
|
|
procedure CreateForm(Caption: string; NewBounds: TRect);
|
|
begin
|
|
AControl:=CreateSimpleForm(aName,Caption,NewBounds,DoDisableAutoSizing);
|
|
end;
|
|
|
|
begin
|
|
// first check if the form already exists
|
|
// the LCL Screen has a list of all existing forms.
|
|
// Note: Remember that the LCL allows as form names only standard
|
|
// pascal identifiers and compares them case insensitive
|
|
AControl:=Screen.FindForm(aName);
|
|
if AControl<>nil then begin
|
|
// if it already exists, just disable autosizing if requested
|
|
if DoDisableAutoSizing then
|
|
AControl.DisableAutoSizing;
|
|
end;
|
|
// if the form does not yet exist, create it
|
|
if aName='CodeExplorer' then
|
|
CreateForm('Code Explorer',Bounds(700,230,100,250))
|
|
else if aName='FPDocEditor' then
|
|
CreateForm('FPDoc Editor',Bounds(200,720,300,100))
|
|
else if aName='Messages' then
|
|
CreateForm('Messages',Bounds(230,650,350,100))
|
|
else if aName='ObjectInspector' then
|
|
CreateForm('Object Inspector',Bounds(10,200,100,350))
|
|
else if aName='SourceEditor1' then
|
|
CreateForm('Source Editor 1',Bounds(230,200,400,400))
|
|
else if aName='SourceEditor2' then
|
|
CreateForm('Source Editor 2',Bounds(260,230,350,350))
|
|
else if aName='ProjectInspector' then
|
|
CreateForm('Project Inspector',Bounds(10,230,150,250))
|
|
else if aName='DebugOutput' then
|
|
CreateForm('Debug Output',Bounds(400,400,350,150));
|
|
end;
|
|
|
|
procedure TMainIDE.FormCreate(Sender: TObject);
|
|
begin
|
|
ViewOIToolButton.Hint:='View Object Inspector';
|
|
ViewCodeExplToolButton.Hint:='View Code Explorer';
|
|
ViewSrcEditor1ToolButton.Hint:='View Source Editor 1';
|
|
ViewSrcEdit2ToolButton.Hint:='View Source Editor 2';
|
|
ViewFPDocEditorToolButton.Hint:='View FPDoc Editor';
|
|
ViewMessagesToolButton.Hint:='View Messages';
|
|
ViewProjInspToolButton.Hint:='View Project Inspector';
|
|
ViewDbgOutToolButton.Hint:='View Debug Output';
|
|
SaveLayoutToolButton.Hint:='Save Layout to layout.xml';
|
|
LoadLayoutToolButton.Hint:='Load layout from layout.xml';
|
|
|
|
DockMaster.MakeDockSite(Self,[akBottom],admrpChild);
|
|
DockMaster.OnCreateControl:=@DockMasterCreateControl;
|
|
DockMaster.OnShowOptions:=@ShowAnchorDockOptions;
|
|
|
|
SetBounds(100,50,600,80);
|
|
ViewSrcEditor1ToolButtonClick(Self);
|
|
ViewMessagesToolButtonClick(Self);
|
|
ViewOIToolButtonClick(Self);
|
|
ViewFPDocEditorToolButtonClick(Self);
|
|
end;
|
|
|
|
procedure TMainIDE.LoadLayoutMenuItemClick(Sender: TObject);
|
|
var
|
|
Dlg: TOpenDialog;
|
|
begin
|
|
Dlg:=TOpenDialog.Create(nil);
|
|
try
|
|
Dlg.InitialDir:=GetCurrentDirUTF8;
|
|
Dlg.Title:='Open layout file ...';
|
|
Dlg.Filter:='*.xml|*.xml';
|
|
Dlg.Options:=Dlg.Options+[ofFileMustExist];
|
|
if not Dlg.Execute then exit;
|
|
LoadLayout(Dlg.FileName);
|
|
finally
|
|
Dlg.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainIDE.LoadLayoutToolButtonClick(Sender: TObject);
|
|
begin
|
|
LoadLayout('layout.xml');
|
|
end;
|
|
|
|
procedure TMainIDE.QuitMenuItemClick(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
procedure TMainIDE.SaveLayoutAsMenuItemClick(Sender: TObject);
|
|
var
|
|
Dlg: TSaveDialog;
|
|
Filename: String;
|
|
begin
|
|
Dlg:=TSaveDialog.Create(nil);
|
|
try
|
|
Dlg.InitialDir:=GetCurrentDirUTF8;
|
|
Dlg.Title:='Save layout as ...';
|
|
Dlg.Filter:='*.xml|*.xml';
|
|
Dlg.Options:=Dlg.Options+[ofPathMustExist,ofHideReadOnly,ofOverwritePrompt];
|
|
if not Dlg.Execute then exit;
|
|
Filename:=Dlg.FileName;
|
|
if ExtractFileExt(Filename)='' then
|
|
Filename:=Filename+'.xml';
|
|
SaveLayout(FileName);
|
|
finally
|
|
Dlg.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainIDE.SaveLayoutToolButtonClick(Sender: TObject);
|
|
begin
|
|
SaveLayout('layout.xml');
|
|
end;
|
|
|
|
procedure TMainIDE.ViewCodeExplToolButtonClick(Sender: TObject);
|
|
begin
|
|
DockMaster.ShowControl('CodeExplorer',true);
|
|
end;
|
|
|
|
procedure TMainIDE.ViewDbgOutToolButtonClick(Sender: TObject);
|
|
begin
|
|
DockMaster.ShowControl('DebugOutput',true);
|
|
end;
|
|
|
|
procedure TMainIDE.ViewFPDocEditorToolButtonClick(Sender: TObject);
|
|
begin
|
|
DockMaster.ShowControl('FPDocEditor',true);
|
|
end;
|
|
|
|
procedure TMainIDE.ViewMessagesToolButtonClick(Sender: TObject);
|
|
begin
|
|
DockMaster.ShowControl('Messages',true);
|
|
end;
|
|
|
|
procedure TMainIDE.ViewOIToolButtonClick(Sender: TObject);
|
|
begin
|
|
DockMaster.ShowControl('ObjectInspector',true);
|
|
end;
|
|
|
|
procedure TMainIDE.ViewProjInspToolButtonClick(Sender: TObject);
|
|
begin
|
|
DockMaster.ShowControl('ProjectInspector',true);
|
|
end;
|
|
|
|
procedure TMainIDE.ViewSrcEdit2ToolButtonClick(Sender: TObject);
|
|
begin
|
|
DockMaster.ShowControl('SourceEditor2',true);
|
|
end;
|
|
|
|
procedure TMainIDE.ViewSrcEditor1ToolButtonClick(Sender: TObject);
|
|
begin
|
|
DockMaster.ShowControl('SourceEditor1',true);
|
|
end;
|
|
|
|
procedure TMainIDE.ShowForm(AForm: TCustomForm; FormEnableAutosizing: boolean);
|
|
begin
|
|
DockMaster.MakeDockable(AForm);
|
|
if FormEnableAutosizing then
|
|
AForm.EnableAutoSizing;
|
|
end;
|
|
|
|
procedure TMainIDE.SaveLayout(Filename: string);
|
|
var
|
|
XMLConfig: TXMLConfigStorage;
|
|
begin
|
|
try
|
|
// create a new xml config file
|
|
XMLConfig:=TXMLConfigStorage.Create(Filename,false);
|
|
try
|
|
// save the current layout of all forms
|
|
DockMaster.SaveLayoutToConfig(XMLConfig);
|
|
XMLConfig.WriteToDisk;
|
|
finally
|
|
XMLConfig.Free;
|
|
end;
|
|
except
|
|
on E: Exception do begin
|
|
MessageDlg('Error',
|
|
'Error saving layout to file '+Filename+':'#13+E.Message,mtError,
|
|
[mbCancel],0);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainIDE.LoadLayout(Filename: string);
|
|
var
|
|
XMLConfig: TXMLConfigStorage;
|
|
begin
|
|
try
|
|
// load the xml config file
|
|
XMLConfig:=TXMLConfigStorage.Create(Filename,True);
|
|
try
|
|
// restore the layout
|
|
// this will close unneeded forms and call OnCreateControl for all needed
|
|
DockMaster.LoadLayoutFromConfig(XMLConfig,true);
|
|
finally
|
|
XMLConfig.Free;
|
|
end;
|
|
except
|
|
on E: Exception do begin
|
|
MessageDlg('Error',
|
|
'Error loading layout from file '+Filename+':'#13+E.Message,mtError,
|
|
[mbCancel],0);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|