Componentes.Terceros.Mustan.../official/1.7.0/Common Library/Source/MPCommonWizardHelpers.pas
david 778b05bf9f Importación inicial
- Mustangpeak Common Library - 1.7.0
  - EasyListview - 1.7.0

git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.Mustangpeak@2 60b41242-d4b9-2247-b156-4ccd40706241
2007-09-11 08:33:06 +00:00

1055 lines
30 KiB
ObjectPascal

unit MPCommonWizardHelpers;
//
// This unit is to be used in DesignTime packages and units ONLY
//
// Version 1.7.0
//
// The contents of this file are subject to the Mozilla Public License
// Version 1.1 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
//
// Alternatively, you may redistribute this library, use and/or modify it under the terms of the
// GNU Lesser General Public License as published by the Free Software Foundation;
// either version 2.1 of the License, or (at your option) any later version.
// You may obtain a copy of the LGPL at http://www.gnu.org/copyleft/.
//
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
// specific language governing rights and limitations under the License.
//
// The initial developer of this code is Jim Kueneman <jimdk@mindspring.com>
// Special thanks to the following in no particular order for their help/support/code
// Danijel Malik, Robert Lee, Werner Lehmann, Alexey Torgashin, Milan Vandrovec
//
//----------------------------------------------------------------------------
interface
{$include Compilers.Inc}
{$I ..\Include\Addins.inc}
uses
SysUtils,
Windows,
Controls,
ImgList,
ToolsApi,
Dialogs,
Menus,
{$IFDEF COMPILER_6_UP}
DesignIntf,
DesignEditors,
TreeIntf,
VCLEditors,
TypInfo,
Graphics,
{$ELSE}
DsgnIntf,
DsgnWnds,
{$IFDEF COMPILER_6_UP}
ParentageSupport, // Sprig support in DsnIDE5.dpk, D4 has no equivalent
{$ELSE}
{$IFDEF DELPHI_5}
ParentageSupport, // Sprig support in DsnIDE5.dpk, D4 has no equivalent
{$ENDIF}
{$ENDIF}
{$ENDIF}
Classes,
MPCommonWizardTemplates;
const
DELPHI_USES_UNITS: array[0..7] of string = (
'Windows',
'Messages',
'SysUtils',
'Classes',
'Controls',
'Forms',
'Dialogs',
'Graphics'
);
BUIDLER_INCLUDE: array[0..0] of string = (
'vcl.h'
);
type
{$IFNDEF COMPILER_7_UP}
// ***************************************************************************
// TOTAFile
// The implements the basic IOTAFile interface
// ***************************************************************************
TOTAFile = class(TInterfacedObject, IOTAFile)
FSource: string;
FAge: TDateTime;
public
constructor Create(const StringCode: String; const Age: TDateTime = -1);
function GetSource: string; virtual;
function GetAge: TDateTime; virtual;
end;
{$ENDIF}
{$IFNDEF COMPILER_5_UP}
TNotifierObject = class(TInterfacedObject)
public
procedure AfterSave;
procedure BeforeSave;
procedure Destroyed;
procedure Modified;
end;
{$ENDIF}
// ---------------------------------------------------------------------------
// OTAFile Module
// ---------------------------------------------------------------------------
TCommonOTAFile = class(TOTAFile, IOTAFile)
private
FAncestorIdent: string;
FFormIdent: string;
FModuleIdent: string;
FUsesIdent: TStringList;
public
property AncestorIdent: string read FAncestorIdent write FAncestorIdent;
property FormIdent: string read FFormIdent write FFormIdent;
property ModuleIdent: string read FModuleIdent write FModuleIdent;
property IncludeIdent: TStringList read FUsesIdent write FUsesIdent;
end;
TCommonOTAFileForm = class(TCommonOTAFile, IOTAFile)
private
public
function GetSource: string; override;
end;
// ---------------------------------------------------------------------------
// ModuleCreator Classes
// ---------------------------------------------------------------------------
// ***************************************************************************
// TCommonWizardModuleCreator
// Implements the basic functionality of IOTAModuleCreator
// ***************************************************************************
TCommonWizardModuleCreator = class(TInterfacedObject, IOTACreator, IOTAModuleCreator)
private
FAncestorName: string;
FFormName: string;
FMainForm: Boolean;
FShowForm: Boolean;
FShowSource: Boolean;
FUsesIdent: TStringList;
function GetIsDelphi: Boolean;
public
constructor Create; virtual;
destructor Destroy; override;
// Override to initalize the creator
procedure InitializeCreator; virtual;
// IOTACreator
function GetCreatorType: string; virtual;
function GetExisting: Boolean; virtual;
function GetFileSystem: string; virtual;
function GetOwner: IOTAModule; virtual;
function GetUnnamed: Boolean; virtual;
// IOTAModuleCreator
function GetAncestorName: string; virtual;
function GetImplFileName: string; virtual;
function GetIntfFileName: string;virtual;
function GetFormName: string; virtual;
function GetMainForm: Boolean; virtual;
function GetShowForm: Boolean; virtual;
function GetShowSource: Boolean; virtual;
function NewFormFile(const FormIdent, AncestorIdent: string): IOTAFile; virtual;
function NewImplSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile; virtual;
function NewIntfSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile; virtual;
procedure FormCreated(const FormEditor: IOTAFormEditor); virtual;
procedure LoadDefaultBuilderIncludeStrings(ClearFirst: Boolean);
procedure LoadDefaultDelphiUsesStrings(ClearFirst: Boolean);
property CreatorType: string read GetCreatorType;
property Existing: Boolean read GetExisting;
property FileSystem: string read GetFileSystem;
property Owner: IOTAModule read GetOwner;
property Unnamed: Boolean read GetUnnamed;
property AncestorName: string read GetAncestorName write FAncestorName;
property FormName: string read GetFormName write FFormName;
property ImplFileName: string read GetImplFileName;
property IntfFileName: string read GetIntfFileName;
property IsDelphi: Boolean read GetIsDelphi;
property MainForm: Boolean read GetMainForm write FMainForm;
property ShowForm: Boolean read GetShowForm write FShowForm;
property ShowSource: Boolean read GetShowSource write FShowSource;
property IncludeIdent: TStringList read FUsesIdent write FUsesIdent;
end;
TCommonWizardModuleCreatorClass = class of TCommonWizardModuleCreator;
// ***************************************************************************
// TCommonWizardEmptyUnitCreator
// The Creator that creates a basic unit for the project
// ***************************************************************************
TCommonWizardEmptyUnitCreator = class(TCommonWizardModuleCreator)
public
function GetCreatorType: string; override;
end;
// ***************************************************************************
// TCommonWizardEmptyFormCreator
// The Creator that creates a basic blank Form for the project
// ***************************************************************************
TCommonWizardEmptyFormCreator = class(TCommonWizardModuleCreator)
private
public
function GetCreatorType: string; override;
function NewImplSource(const ModuleIdent: string; const FormIdent: string; const AncestorIdent: string): IOTAFile; override;
end;
// ***************************************************************************
// TCommonWizardEmptyTextCreator
// The Creator that creates a basic text file for the project
// ***************************************************************************
TCommonWizardEmptyTextCreator = class(TCommonWizardModuleCreator)
public
function GetCreatorType: string; override;
end;
// ---------------------------------------------------------------------------
// Repository Wizard Classes
// ---------------------------------------------------------------------------
// ***************************************************************************
// TCommonWizardNotifierObject
//
// Use as basis for Wizards.
//
// ***************************************************************************
TCommonWizardNotifierObject = class(TNotifierObject,
{$IFDEF COMPILER_6_UP}IOTARepositoryWizard60, {$ENDIF}
{$IFDEF COMPILER_8_UP}IOTARepositoryWizard80, {$ENDIF}
IOTAWizard,
IOTARepositoryWizard,
IOTAProjectWizard)
private
FAuthor: string;
FCaption: string;
FComment: string;
FGlyphResourceID: string;
FPage: string;
FState: TWizardState;
FUniqueID: string;
{$IFDEF COMPILER_8_UP}
FGalleryCategory: IOTAGalleryCategory;
{$ENDIF COMPILER_8_UP}
protected
function GetGlpyhResourceID: string; virtual;
public
constructor Create;
// Override to load the wizard with the necessary information
procedure InitializeWizard; virtual;
// IOTAWizard
function GetIDString: string; virtual;
function GetName: string; virtual;
function GetState: TWizardState;
procedure Execute; virtual;
//
function GetAuthor: string;
function GetComment: string; virtual;
function GetPage: string; virtual;
{$IFDEF COMPILER_6_UP}
function GetGlyph: Cardinal;
{$ELSE}
function GetGlyph: HICON;
{$ENDIF}
{$IFDEF COMPILER_6_UP}
// IOTARepositoryWizard60
function GetDesigner: string;
{$ENDIF}
{$IFDEF COMPILER_8_UP}
// IOTARepositoryWizard80
function GetGalleryCategory: IOTAGalleryCategory; virtual;
function GetPersonality: string; virtual; abstract;
{$ENDIF}
{$IFDEF COMPILER_6_UP}
property Designer: string read GetDesigner;
{$ENDIF}
{$IFDEF COMPILER_8_UP}
property Personality: string read GetPersonality;
{$ENDIF}
// Set to the Author that will show up in the Details View of the Object
property Author: string read GetAuthor write FAuthor;
// Set to the Caption that will show up in the View of the Object
property Caption: string read GetName write FCaption;
// Set to the Comment that will show up in the Details View of the Object
property Comment: string read GetComment write FComment;
// Set to the Resource ID (in the a *.res file) that defines the icon for the object
{$IFDEF COMPILER_8_UP}
// Set the Gallery Category where the Wizard reside, it is the value returned from AddDelphiCategory or AddBuilderCategory
property GalleryCategory: IOTAGalleryCategory read GetGalleryCategory write FGalleryCategory;
{$ENDIF COMPILER_8_UP}
property GlyphResourceID: string read GetIDString write FGlyphResourceID;
// Set to the Page that Object will show up on when selecting File>New>Other...
property Page: string read GetPage write FPage;
// Set special attributes for the Wizard (enabled, checked etc)
property State: TWizardState read GetState write FState;
// Set to a unique string that will identify the Object to Delphi (i.e. "Mustangpeak.CommonWizards.Demo")
property UniqueID: string read GetIDString write FUniqueID;
end;
TCommonWizardModuleCreate = class(TCommonWizardNotifierObject,
{$IFDEF COMPILER_6_UP}IOTARepositoryWizard60, {$ENDIF}
{$IFDEF COMPILER_8_UP}IOTARepositoryWizard80, {$ENDIF}
IOTAWizard,
IOTARepositoryWizard,
IOTAProjectWizard)
private
FCreatorClass: TCommonWizardModuleCreatorClass;
public
procedure Execute; override;
property CreatorClass: TCommonWizardModuleCreatorClass read FCreatorClass write FCreatorClass;
end;
// ***************************************************************************
// TCommonWizardDelphiForm
// Wizard to Create a new Delphi Form
// ***************************************************************************
TCommonWizardDelphiForm = class(TCommonWizardModuleCreate,
{$IFDEF COMPILER_6_UP}IOTARepositoryWizard60, {$ENDIF}
{$IFDEF COMPILER_8_UP}IOTARepositoryWizard80, {$ENDIF}
IOTAWizard,
IOTARepositoryWizard,
IOTAProjectWizard)
protected
public
// IOTAWizard
{$IFDEF COMPILER_8_UP}
function GetPersonality: string; override;
{$ENDIF COMPILER_8_UP}
end;
TCommonWizardBuilderForm = class(TCommonWizardDelphiForm,
{$IFDEF COMPILER_6_UP}IOTARepositoryWizard60, {$ENDIF}
{$IFDEF COMPILER_8_UP}IOTARepositoryWizard80, {$ENDIF}
IOTAWizard,
IOTARepositoryWizard,
IOTAProjectWizard)
public
// IOTAWizard
{$IFDEF COMPILER_8_UP}
function GetPersonality: string; override;
{$ENDIF COMPILER_8_UP}
end;
{$IFDEF COMPILER_6_UP}
TPersistentHack = class(TPersistent);
// ***************************************************************************
// TImageIndexProperty
// Creates a property that implmements a customdraw dropdown list for
// ImageList index properties.
// ***************************************************************************
TCommonImageIndexProperty = class(TIntegerProperty, ICustomPropertyDrawing, ICustomPropertyListDrawing)
private
function GetImageList: TCustomImageList;
function GetImageListAt(ComponentIndex: Integer): TCustomImageList;
protected
function ExtractImageList(Inst: TPersistent; out ImageList: TCustomImageList): Boolean; virtual;
property ImageList: TCustomImageList read GetImageList;
public
function GetAttributes: TPropertyAttributes; override;
procedure GetValues(Proc: TGetStrProc); override;
function GetValue: string; override;
procedure SetValue(const Value: string); override;
procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas; var AWidth: Integer);
procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas; var AHeight: Integer);
procedure ListDrawValue(const Value: string; ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);
procedure PropDrawName(ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);
procedure PropDrawValue(ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);
end;
{$ENDIF COMPILER_6_UP}
function GetCurrentProjectGroup: IOTAProjectGroup;
function GetCurrentProject: IOTAProject;
{$IFDEF COMPILER_8_UP}
// These must be called in the initialization section of a unit
function AddDelphiCategory(CategoryID, CategoryCaption: string): IOTAGalleryCategory;
function AddBuilderCategory(CategoryID, CategoryCaption: string): IOTAGalleryCategory;
procedure RemoveCategory(Category: IOTAGalleryCategory);
function IsDelphiPersonality: Boolean;
{$ENDIF COMPILER_8_UP}
implementation
function GetCurrentProjectGroup: IOTAProjectGroup;
var
IModuleServices: IOTAModuleServices;
IModule: IOTAModule;
IProjectGroup: IOTAProjectGroup;
i: Integer;
begin
Result := nil;
IModuleServices := BorlandIDEServices as IOTAModuleServices;
for i := 0 to IModuleServices.ModuleCount - 1 do
begin
IModule := IModuleServices.Modules[i];
if IModule.QueryInterface(IOTAProjectGroup, IProjectGroup) = S_OK then
begin
Result := IProjectGroup;
Break;
end;
end;
end;
function GetCurrentProject: IOTAProject;
var
ProjectGroup: IOTAProjectGroup;
// i: Integer;
begin
Result := nil;
ProjectGroup := GetCurrentProjectGroup;
if Assigned(ProjectGroup) then
if ProjectGroup.ProjectCount > 0 then
Result := ProjectGroup.ActiveProject
end;
{$IFDEF COMPILER_8_UP}
function AddDelphiCategory(CategoryID, CategoryCaption: string): IOTAGalleryCategory;
var
Manager: IOTAGalleryCategoryManager;
ParentCategory: IOTAGalleryCategory;
begin
Result := nil;
Manager := BorlandIDEServices as IOTAGalleryCategoryManager;
if Assigned(Manager) then
begin
ParentCategory := Manager.FindCategory(sCategoryDelphiNew);
if Assigned(ParentCategory) then
Result := Manager.AddCategory(ParentCategory, CategoryID, CategoryCaption);
end
end;
function AddBuilderCategory(CategoryID, CategoryCaption: string): IOTAGalleryCategory;
var
Manager: IOTAGalleryCategoryManager;
ParentCategory: IOTAGalleryCategory;
begin
Result := nil;
Manager := BorlandIDEServices as IOTAGalleryCategoryManager;
if Assigned(Manager) then
begin
ParentCategory := Manager.FindCategory(sCategoryCBuilderNew);
if Assigned(ParentCategory) then
Result := Manager.AddCategory(ParentCategory, CategoryID, CategoryCaption);
end
end;
procedure RemoveCategory(Category: IOTAGalleryCategory);
var
Manager: IOTAGalleryCategoryManager;
begin
Manager := BorlandIDEServices as IOTAGalleryCategoryManager;
if Assigned(Manager) then
begin
if Assigned(Category) then
Manager.DeleteCategory(Category)
end
end;
function IsDelphiPersonality: Boolean;
var
Personalities: IOTAPersonalityServices;
begin
Personalities := BorlandIDEServices as IOTAPersonalityServices;
Result := Personalities.CurrentPersonality = sDelphiPersonality;
end;
{$ENDIF}
{$IFNDEF COMPILER_7_UP}
{ TOTAFile }
constructor TOTAFile.Create(const StringCode: String; const Age: TDateTime);
begin
FSource := StringCode;
FAge := Age;
end;
function TOTAFile.GetSource: string;
begin
Result := FSource;
end;
function TOTAFile.GetAge: TDateTime;
begin
Result := FAge;
end;
{$ENDIF}
{$IFNDEF COMPILER_5_UP}
{ TNotifierObject }
procedure TNotifierObject.AfterSave;
begin
// do nothing stub implementation
end;
procedure TNotifierObject.BeforeSave;
begin
// do nothing stub implementation
end;
procedure TNotifierObject.Destroyed;
begin
// do nothing stub implementation
end;
procedure TNotifierObject.Modified;
begin
// do nothing stub implementation
end;
{$ENDIF}
{ TCommonWizardDelphiForm }
{$IFDEF COMPILER_8_UP}
function TCommonWizardDelphiForm.GetPersonality: string;
begin
Result := sDelphiPersonality
end;
{$ENDIF COMPILER_8_UP}
{ TCommonWizardBuilderForm }
{$IFDEF COMPILER_8_UP}
function TCommonWizardBuilderForm.GetPersonality: string;
begin
Result := sCBuilderPersonality
end;
{$ENDIF COMPILER_8_UP}
{$IFDEF COMPILER_6_UP}
{ TImageIndexProperty}
function TCommonImageIndexProperty.ExtractImageList(Inst: TPersistent; out ImageList: TCustomImageList): Boolean;
var
P: PPropList;
I, C: Integer;
s: string;
begin
s := Inst.ClassName;
C := GetPropList(Inst.ClassInfo, P);
try
for I := 0 to C - 1 do
if (P[I].PropType^.Kind = tkClass) and GetTypeData(P[I].PropType^).ClassType.InheritsFrom(TCustomImageList) then
begin
Result := True;
ImageList := TCustomImageList(TypInfo.GetObjectProp(Inst, P[I]));
Exit;
end;
Result := False;
finally
FreeMem(P);
end;
end;
function TCommonImageIndexProperty.GetImageListAt(ComponentIndex: Integer): TCustomImageList;
var
Inst: TPersistent;
begin
Inst := GetComponent(ComponentIndex);
while Assigned(Inst) do
begin
if ExtractImageList(Inst, Result) then Exit;
Inst := TPersistentHack(Inst).GetOwner;
end;
Result := nil;
end;
function TCommonImageIndexProperty.GetImageList: TCustomImageList;
var
I, J: Integer;
ImgList: TCustomImageList;
begin
Result := nil;
for I := 0 to PropCount - 1 do
begin
ImgList := GetImageListAt(I);
if Assigned(ImgList) then
begin
for J := I + 1 to PropCount - 1 do
if GetImageListAt(J) <> ImgList then
begin
Result := nil;
Exit;
end;
Result := ImgList;
Exit;
end;
end;
end;
function TCommonImageIndexProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paValueList, paRevertable, paMultiSelect];
end;
function TCommonImageIndexProperty.GetValue: string;
begin
Result:= IntToStr(GetOrdValue);
end;
procedure TCommonImageIndexProperty.SetValue(const Value: string);
var
XValue: integer;
begin
try
XValue := StrToInt(Value);
SetOrdValue(XValue);
except
inherited SetValue(Value);
end;
end;
procedure TCommonImageIndexProperty.GetValues(Proc: TGetStrProc);
var
XImageList: TCustomImageList;
I: integer;
begin
XImageList:=GetImageList;
if Assigned(XImageList) then
for I := 0 to XImageList.Count - 1 do
Proc(IntToStr(i));
end;
procedure TCommonImageIndexProperty.ListMeasureWidth(const Value: string; ACanvas: TCanvas;
var AWidth: Integer);
begin
AWidth := AWidth + ACanvas.TextHeight('M');
if AWidth < 17 then AWidth := 17;
end;
procedure TCommonImageIndexProperty.ListMeasureHeight(const Value: string; ACanvas: TCanvas;
var AHeight: Integer);
var
ImageList: TCustomImageList;
begin
ImageList := GetImageList;
if Assigned(ImageList) then
AHeight := ImageList.Height + 4
else
AHeight := 20;
if AHeight < 17 then AHeight := 17;
end;
procedure TCommonImageIndexProperty.ListDrawValue(const Value: string; ACanvas: TCanvas;
const ARect: TRect; ASelected: Boolean);
var
ImageList: TCustomImageList;
XRight: Integer;
XOldPenColor, XOldBrushColor: TColor;
Index: TImageIndex;
begin
ImageList := GetImageList;
Index := StrToIntDef(Value, -1);
XRight := ARect.Left;
try
if Assigned(ImageList) and (Index >= 0) then
begin
XRight := ARect.Left + ImageList.Width + 4;
XOldPenColor := ACanvas.Pen.Color;
XOldBrushColor := ACanvas.Brush.Color;
ACanvas.Pen.Color := ACanvas.Brush.Color;
ACanvas.Rectangle(ARect.Left, ARect.Top, XRight, ARect.Bottom);
ImageList.DrawOverlay(ACanvas, ARect.Left + 2, ARect.Top + 2, Index, 0);
ACanvas.Brush.Color := XOldBrushColor;
ACanvas.Pen.Color := XOldPenColor;
end;
finally
DefaultPropertyListDrawValue(Value, ACanvas, Rect(XRight, ARect.Top, ARect.Right, ARect.Bottom), ASelected);
end;
end;
procedure TCommonImageIndexProperty.PropDrawName(ACanvas: TCanvas; const ARect: TRect;
ASelected: Boolean);
begin
DefaultPropertyDrawName(Self, ACanvas, ARect);
end;
procedure TCommonImageIndexProperty.PropDrawValue(ACanvas: TCanvas; const ARect: TRect;
ASelected: Boolean);
var
ImageList: TCustomImageList;
begin
ImageList := GetImageList;
if (GetVisualValue <> '') and Assigned(ImageList) and (ImageList.Height < 17) then
ListDrawValue(GetVisualValue, ACanvas, ARect, True{ASelected})
else
DefaultPropertyDrawValue(Self, ACanvas, ARect);
end;
{$ENDIF COMPILER_6_UP}
{ TCommonWizardNotifierObject }
constructor TCommonWizardNotifierObject.Create;
begin
inherited Create;
InitializeWizard;
end;
function TCommonWizardNotifierObject.GetAuthor: string;
begin
Result := FAuthor
end;
function TCommonWizardNotifierObject.GetComment: string;
begin
Result := FComment
end;
{$IFDEF COMPILER_8_UP}
function TCommonWizardNotifierObject.GetGalleryCategory: IOTAGalleryCategory;
begin
Result := FGalleryCategory
end;
{$ENDIF COMPILER_8_UP}
function TCommonWizardNotifierObject.GetGlpyhResourceID: string;
begin
Result := FGlyphResourceID
end;
function TCommonWizardNotifierObject.GetIDString: string;
begin
Result := FUniqueID
end;
function TCommonWizardNotifierObject.GetName: string;
begin
Result := FCaption
end;
function TCommonWizardNotifierObject.GetPage: string;
begin
Result := FPage
end;
function TCommonWizardNotifierObject.GetState: TWizardState;
begin
Result := FState
end;
{$IFDEF COMPILER_6_UP}
function TCommonWizardNotifierObject.GetGlyph: Cardinal;
begin
Result := LoadIcon(hInstance, PChar(GetGlpyhResourceID));
end;
{$ELSE}
function TCommonWizardNotifierObject.GetGlyph: HICON;
begin
Result := LoadIcon(hInstance, PChar(GetGlpyhResourceID));
end;
{$ENDIF}
{$IFDEF COMPILER_6_UP}
function TCommonWizardNotifierObject.GetDesigner: string;
begin
Result := dVCL
end;
{$ENDIF}
procedure TCommonWizardNotifierObject.InitializeWizard;
begin
// Override in descendent
end;
procedure TCommonWizardNotifierObject.Execute;
begin
// Override in descendent
end;
{ TCommonWizardModuleCreator }
constructor TCommonWizardModuleCreator.Create;
begin
inherited;
ShowSource := True;
ShowForm := True;
IncludeIdent := TStringList.Create;
if IsDelphi then
LoadDefaultDelphiUsesStrings(True)
else
LoadDefaultBuilderIncludeStrings(True);
InitializeCreator
end;
destructor TCommonWizardModuleCreator.Destroy;
begin
inherited;
IncludeIdent.Free
end;
function TCommonWizardModuleCreator.GetIsDelphi: Boolean;
begin
{$IFDEF CPPB}
Result := False;
{$ELSE}
{$IFDEF COMPILER_10_UP}
if IsDelphiPersonality then
Result := True
else
Result := False;
{$ELSE}
Result := True;
{$ENDIF}
{$ENDIF}
end;
procedure TCommonWizardModuleCreator.FormCreated(const FormEditor: IOTAFormEditor);
begin
end;
function TCommonWizardModuleCreator.GetAncestorName: string;
begin
Result := FAncestorName
end;
function TCommonWizardModuleCreator.GetCreatorType: string;
begin
Result := ''
end;
function TCommonWizardModuleCreator.GetExisting: Boolean;
begin
Result := False;
end;
function TCommonWizardModuleCreator.GetFileSystem: string;
begin
Result := '';
end;
function TCommonWizardModuleCreator.GetFormName: string;
begin
Result := FFormName
end;
function TCommonWizardModuleCreator.GetImplFileName: string;
begin
Result := ''
end;
function TCommonWizardModuleCreator.GetIntfFileName: string;
begin
Result := ''
end;
function TCommonWizardModuleCreator.GetMainForm: Boolean;
begin
Result := FMainForm
end;
function TCommonWizardModuleCreator.GetOwner: IOTAModule;
begin
Result := GetCurrentProjectGroup;
if Assigned(Result) then
Result := (Result as IOTAProjectGroup).ActiveProject
else
Result := GetCurrentProject
end;
function TCommonWizardModuleCreator.GetShowForm: Boolean;
begin
Result := FShowForm
end;
function TCommonWizardModuleCreator.GetShowSource: Boolean;
begin
Result := FShowSource
end;
function TCommonWizardModuleCreator.GetUnnamed: Boolean;
begin
Result := True
end;
function TCommonWizardModuleCreator.NewFormFile(const FormIdent,
AncestorIdent: string): IOTAFile;
begin
Result := nil
end;
function TCommonWizardModuleCreator.NewImplSource(const ModuleIdent,
FormIdent, AncestorIdent: string): IOTAFile;
begin
Result := nil
end;
function TCommonWizardModuleCreator.NewIntfSource(const ModuleIdent,
FormIdent, AncestorIdent: string): IOTAFile;
begin
Result := nil
end;
procedure TCommonWizardModuleCreator.LoadDefaultBuilderIncludeStrings(ClearFirst: Boolean);
var
i: Integer;
begin
if ClearFirst then
IncludeIdent.Clear;
for i := 0 to High(BUIDLER_INCLUDE) do
IncludeIdent.Add(BUIDLER_INCLUDE[i])
end;
procedure TCommonWizardModuleCreator.LoadDefaultDelphiUsesStrings(ClearFirst: Boolean);
var
i: Integer;
begin
if ClearFirst then
IncludeIdent.Clear;
for i := 0 to High(DELPHI_USES_UNITS) do
IncludeIdent.Add(DELPHI_USES_UNITS[i])
end;
procedure TCommonWizardModuleCreator.InitializeCreator;
begin
// Override in descendent
end;
{ TCommonWizardEmptyUnitCreator }
function TCommonWizardEmptyUnitCreator.GetCreatorType: string;
begin
Result := sUnit;
end;
{ TCommonWizardEmptyFormCreator }
function TCommonWizardEmptyFormCreator.GetCreatorType: string;
begin
Result := sForm
end;
function TCommonWizardEmptyFormCreator.NewImplSource(const ModuleIdent: string; const FormIdent: string; const AncestorIdent: string): IOTAFile;
var
OTAFile: TCommonOTAFileForm;
begin
Result := nil;
// Create the default source code for a new application
// Slip in the default ProjectName to the IOTAFile instance
OTAFile := TCommonOTAFileForm.Create(FormIdent);
OTAFile.ModuleIdent := ModuleIdent;
OTAFile.FormIdent := FormIdent;
OTAFile.AncestorIdent := AncestorIdent;
OTAFile.IncludeIdent := IncludeIdent;
Result := OTAFile as IOTAFile;
end;
{ TCommonWizardEmptyTextCreator }
function TCommonWizardEmptyTextCreator.GetCreatorType: string;
begin
Result := sText
end;
{ TCommonWizardModuleCreate }
procedure TCommonWizardModuleCreate.Execute;
var
Module: IOTAModule;
begin
if Assigned(CreatorClass) then
Module := (BorlandIDEServices as IOTAModuleServices).CreateModule(CreatorClass.Create)
else
beep(500, 50);
end;
{ TCommonOTAFileForm }
function TCommonOTAFileForm.GetSource: string;
var
UsesClause: string;
i: Integer;
IsBCB: Boolean;
begin
{$IFDEF CPPB}
Result := FILE_FORM_TEMPLATE_BCB;
IsBCB := True;
{$ELSE}
{$IFDEF COMPILER_10_UP}
if IsDelphiPersonality then
begin
Result := FILE_FORM_TEMPLATE_DELPHI;
IsBCB := False
end else
begin
Result := FILE_FORM_TEMPLATE_BCB;
IsBCB := True
end;
{$ELSE}
Result := FILE_FORM_TEMPLATE_DELPHI;
IsBCB := False;
{$ENDIF}
{$ENDIF}
Result := StringReplace(Result, '%FormIdent', FormIdent, [rfIgnoreCase, rfReplaceAll]);
Result := StringReplace(Result, '%AncestorIdent', AncestorIdent, [rfIgnoreCase, rfReplaceAll]);
Result := StringReplace(Result, '%ModuleIdent', ModuleIdent, [rfIgnoreCase, rfReplaceAll]);
UsesClause := '';
for i := 0 to IncludeIdent.Count - 1 do
begin
if i < IncludeIdent.Count - 1 then
begin
if IsBCB then
UsesClause := UsesClause + '#include "' + IncludeIdent[i] +'"' + #13#10
else begin
if i = 0 then
UsesClause := UsesClause + IncludeIdent[i] + ',' + #13#10
else
UsesClause := UsesClause + ' ' + IncludeIdent[i] + ',' + #13#10
end
end else
begin
if IsBCB then
UsesClause := UsesClause + '#include "' + IncludeIdent[i] +'"' + #13#10
else
UsesClause := UsesClause + ' ' + IncludeIdent[i] + ';' + #13#10
end
end;
Result := StringReplace(Result, '%IncludeList', UsesClause, [rfIgnoreCase, rfReplaceAll]);
end;
end.