lazarus/components/anchordocking/minide/unit1.pas
mattias 9cf9902754 moved anchordocking to components
git-svn-id: trunk@36005 -
2012-03-14 19:24:11 +00:00

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.