summaryrefslogtreecommitdiff
path: root/extras/lazarus_ide/fpguilazideintf.pas
diff options
context:
space:
mode:
Diffstat (limited to 'extras/lazarus_ide/fpguilazideintf.pas')
-rw-r--r--extras/lazarus_ide/fpguilazideintf.pas191
1 files changed, 167 insertions, 24 deletions
diff --git a/extras/lazarus_ide/fpguilazideintf.pas b/extras/lazarus_ide/fpguilazideintf.pas
index 306d3d44..9c797ec2 100644
--- a/extras/lazarus_ide/fpguilazideintf.pas
+++ b/extras/lazarus_ide/fpguilazideintf.pas
@@ -1,5 +1,5 @@
{
- Copyright (C) 2009 by Graeme Geldenhuys
+ Copyright (C) 2009-2015 by Graeme Geldenhuys
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
@@ -20,8 +20,9 @@
This unit adds a new project type to the Lazarus IDE.
New Project Type:
- fpGUI Application - A Free Pascal program for fpGUI Toolkit.
-
+ fpGUI Application - A pure fpGUI Toolkit based application.
+ fpGUI+Agg2D Application - An fpGUI application with a TAgg2D instance.
+
}
unit fpGUILazIDEIntf;
@@ -41,25 +42,38 @@ type
function GetLocalizedName: string; override;
function GetLocalizedDescription: string; override;
function InitProject(AProject: TLazProject): TModalResult; override;
-// function CreateStartFiles(AProject: TLazProject): TModalResult; override;
end;
+ TfpGUIAgg2dApplicationDescriptor = class(TProjectDescriptor)
+ public
+ constructor Create; override;
+ function GetLocalizedName: string; override;
+ function GetLocalizedDescription: string; override;
+ function InitProject(AProject: TLazProject): TModalResult; override;
+ end;
var
ProjectDescriptorfpGUIApplication: TfpGUIApplicationDescriptor;
+ ProjectDescriptorfpGUIAgg2dApplication: TfpGUIAgg2dApplicationDescriptor;
+
procedure Register;
implementation
+const
+ le: string = LineEnding;
+
procedure Register;
begin
ProjectDescriptorfpGUIApplication := TfpGUIApplicationDescriptor.Create;
RegisterProjectDescriptor(ProjectDescriptorfpGUIApplication);
-end;
+ ProjectDescriptorfpGUIAgg2dApplication := TfpGUIAgg2dApplicationDescriptor.Create;
+ RegisterProjectDescriptor(ProjectDescriptorfpGUIAgg2dApplication);
+end;
{ TfpGUIApplicationDescriptor }
@@ -75,18 +89,13 @@ begin
end;
function TfpGUIApplicationDescriptor.GetLocalizedDescription: string;
-var
- le: string;
begin
- le := System.LineEnding;
Result := 'fpGUI Toolkit Application'+le+le
- +'An application based on the fpGUI Toolkit.'+le
- +'The program file is automatically maintained by Lazarus.';
+ +'An application based purely on the fpGUI Toolkit.';
end;
function TfpGUIApplicationDescriptor.InitProject(AProject: TLazProject): TModalResult;
var
- le: string;
NewSource: String;
MainFile: TLazProjectFile;
begin
@@ -98,7 +107,6 @@ begin
AProject.MainFileID := 0;
// create program source
- le := LineEnding;
NewSource := 'program Project1;'+le
+le
+'{$mode objfpc}{$H+}'+le
@@ -143,7 +151,7 @@ begin
+' frm: TMainForm;'+le
+'begin'+le
+' fpgApplication.Initialize;'+le
- +' frm := TMainForm.Create(nil);'+le
+ +' fpgApplication.CreateForm(TMainForm, frm);'+le
+' try'+le
+' frm.Show;'+le
+' fpgApplication.Run;'+le
@@ -157,27 +165,162 @@ begin
+'end.'+le
+le;
-
AProject.MainFile.SetSourceText(NewSource);
-
- // add
AProject.AddPackageDependency('fpgui_toolkit');
-
// compiler options
AProject.LazCompilerOptions.UseLineInfoUnit := True;
-// AProject.LazCompilerOptions.CustomOptions := '-FUunits';
Result := mrOK;
end;
-{
-function TfpGUIApplicationDescriptor.CreateStartFiles(AProject: TLazProject): TModalResult;
+{ TfpGUIAgg2dApplicationDescriptor }
+
+constructor TfpGUIAgg2dApplicationDescriptor.Create;
begin
- LazarusIDE.DoNewEditorFile(FileDescriptorfpGUIUnit,'','',
- [nfIsPartOfProject,nfOpenInEditor,nfCreateDefaultSrc]);
- Result:=mrOK;
+ inherited Create;
+ Name := 'fpGUI+Agg2D Application';
+end;
+
+function TfpGUIAgg2dApplicationDescriptor.GetLocalizedName: string;
+begin
+ Result := 'fpGUI+Agg2D Application';
+end;
+
+function TfpGUIAgg2dApplicationDescriptor.GetLocalizedDescription: string;
+begin
+ Result := 'fpGUI+Agg2D Application'+le+le
+ +'An application based on the fpGUI Toolkit'+le
+ +'and uses Agg2D to render to an image buffer. Great '
+ +'for quick demos.';
+end;
+
+function TfpGUIAgg2dApplicationDescriptor.InitProject(AProject: TLazProject): TModalResult;
+var
+ NewSource: String;
+ MainFile: TLazProjectFile;
+begin
+ inherited InitProject(AProject);
+
+ MainFile := AProject.CreateProjectFile('project1.lpr');
+ MainFile.IsPartOfProject := true;
+ AProject.AddFile(MainFile, false);
+ AProject.MainFileID := 0;
+
+ // create program source
+ NewSource := 'program Project1;'+le
+ +le
+ +'uses'+le
+ +' {$IFDEF UNIX}{$IFDEF UseCThreads}'+le
+ +' cthreads,'+le
+ +' {$ENDIF}{$ENDIF}'+le
+ +' Classes, SysUtils,'+le
+ +' fpg_base, fpg_main, fpg_form, Agg2D;'+le
+ +le
+ +'type'+le
+ +''+le
+ +' TMainForm = class(TfpgForm)'+le
+ +' private'+le
+ +' {@VFD_HEAD_BEGIN: MainForm}'+le
+ +' {@VFD_HEAD_END: MainForm}'+le
+ +' FImg: TfpgImage;'+le
+ +' FAgg2D: TAgg2D;'+le
+ +' procedure InitComposedImage;'+le
+ +' procedure FormCreate(Sender: TObject);'+le
+ +' procedure DoAggPainting;'+le
+ +' procedure FormPaint(Sender: TObject);'+le
+ +' public'+le
+ +' destructor Destroy; override;'+le
+ +' procedure AfterCreate; override;'+le
+ +' end;'+le
+ +le
+ +'{@VFD_NEWFORM_DECL}'+le
+ +le
+ +le
+ +le
+ +'{@VFD_NEWFORM_IMPL}'+le
+ +''+le
+ +'procedure TMainForm.DoAggPainting;'+le
+ +'begin'+le
+ +' // **** DO YOUR AGG2D PAINTING HERE ****'+le
+ +le
+ +' // Paint composedimage white'+le
+ +' FAgg2D.ClearAll(255, 255, 255);'+le
+ +' // So some advanced painting to the ComposedImage'+le
+ +' FAgg2D.LineWidth(10);'+le
+ +' FAgg2D.LineColor($32, $cd, $32);'+le
+ +' FAgg2D.FillColor($ff, $d7, $00);'+le
+ +' FAgg2D.Star(100, 100, 30, 70, 55, 5);'+le
+ +'end;'+le
+ +le
+ +'procedure TMainForm.InitComposedImage;'+le
+ +'begin'+le
+ +' FImg := TfpgImage.Create;'+le
+ +' FImg.AllocateImage(32, Width, Height);'+le
+ +' FAgg2D.Attach(FImg);'+le
+ +'end;'+le
+ +le
+ +'procedure TMainForm.FormCreate(Sender: TObject);'+le
+ +'begin'+le
+ +' FAgg2D := TAgg2D.Create(self);'+le
+ +' InitComposedImage;'+le
+ +' DoAggPainting;'+le
+ +'end;'+le
+ +le
+ +'procedure TMainForm.FormPaint(Sender: TObject);'+le
+ +'begin'+le
+ +' // Finalise image internals, then paint it to the Window'+le
+ +' FImg.UpdateImage;'+le
+ +' Canvas.DrawImage(0, 0, FImg);'+le
+ +'end;'+le
+ +le
+ +'destructor TMainForm.Destroy;'+le
+ +'begin'+le
+ +' FAgg2D.Free;'+le
+ +' FImg.Free;'+le
+ +' inherited Destroy;'+le
+ +'end;'+le
+ +le
+ +'procedure TMainForm.AfterCreate;'+le
+ +'begin'+le
+ +' {%region ''Auto-generated GUI code''}'+le
+ +' {@VFD_BODY_BEGIN: MainForm}'+le
+ +' Name := ''MainForm'';'+le
+ +' SetPosition(316, 186, 501, 450);'+le
+ +' WindowTitle := ''TAgg2D.Attach() demo'';'+le
+ +' Hint := '''';'+le
+ +' WindowPosition := wpOneThirdDown;'+le
+ +' OnPaint := @FormPaint;'+le
+ +' OnCreate := @FormCreate;'+le
+ +' {@VFD_BODY_END: MainForm}'+le
+ +' {%endregion}'+le
+ +'end;'+le
+ +le
+ +le
+ +'procedure MainProc;'+le
+ +'var'+le
+ +' frm: TMainForm;'+le
+ +'begin'+le
+ +' fpgApplication.Initialize;'+le
+ +' fpgApplication.CreateForm(TMainForm, frm);'+le
+ +' try'+le
+ +' frm.Show;'+le
+ +' fpgApplication.Run;'+le
+ +' finally'+le
+ +' frm.Free;'+le
+ +' end;'+le
+ +'end;'+le
+ +le
+ +'begin'+le
+ +' MainProc;'+le
+ +'end.'+le;
+
+ AProject.MainFile.SetSourceText(NewSource);
+ AProject.AddPackageDependency('fpgui_toolkit');
+ // compiler options
+ AProject.LazCompilerOptions.UseLineInfoUnit := True;
+
+ Result := mrOK;
end;
-}
end.