Componentes.Terceros.RemObj.../internal/5.0.23.613/1/Data Abstract for Delphi/Source/IDE/uDAGuideWizardForm.pas
david 2824855ea7 - Modificación del paquete RemObjects_Core_D10 para que sea un paquete de runtime/designtime (antes era designtime sólo)
- Recompilación en Delphi10 de todos los paquetes de RO para generar las DCU's en Lib\D10
- Recompilación en Delphi10 de todos los paquetes de DA para generar las DCU's en Lib\D10

git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.RemObjects@9 b6239004-a887-0f4b-9937-50029ccdca16
2007-09-10 14:06:19 +00:00

258 lines
8.2 KiB
ObjectPascal

unit uDAGuideWizardForm;
{----------------------------------------------------------------------------}
{ Data Abstract Library - IDE Library
{
{ compiler: Delphi 6 and up, Kylix 3 and up
{ platform: Win32, Linux
{
{ (c)opyright RemObjects Software. all rights reserved.
{
{ Using this code requires a valid license of the Data Abstract
{ which can be obtained at http://www.remobjects.com.
{----------------------------------------------------------------------------}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uROIDEPrjWizard, uEWWizard, StdCtrls, Buttons, ComCtrls,
ExtCtrls;
type
TDAGuideWizardForm = class(TEWWizardForm)
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
ts_SM: TTabSheet;
ts_Compile: TTabSheet;
ts_DataTables: TTabSheet;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
lbl_SMLaunching: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
lbl_CompileBuilding: TLabel;
Label19: TLabel;
lbl_CompileClickNext: TLabel;
lbl_CompileLaunching: TLabel;
Label18: TLabel;
Label20: TLabel;
Label21: TLabel;
lbl_DataTableClickNext: TLabel;
ts_FinishMulti: TTabSheet;
ts_FinishServer: TTabSheet;
Label25: TLabel;
Label26: TLabel;
Label28: TLabel;
lb_Link: TLabel;
Label30: TLabel;
Label31: TLabel;
Label22: TLabel;
Label23: TLabel;
Label24: TLabel;
lbl_SMClickNext: TLabel;
procedure lb_LinkClick(Sender: TObject);
private
fNewProjectInfo: TROIDENewProjectInfo;
fTempSchema, fTempConnections: string;
protected
procedure OnEnterPage(aPage:TTabSheet; aMovingForward:boolean); override;
procedure OnLeavePage(aPage:TTabSheet; aMovingForward:boolean); override;
public
constructor Create(aNewProjectInfo: TROIDENewProjectInfo); reintroduce;
destructor Destroy; override;
end;
var
DAGuideWizardForm: TDAGuideWizardForm;
implementation
uses
ShellAPI,
uROIDETools, ToolsAPI, uROClasses, uDAIDEMenu, uDAClasses, uDAInterfaces,
uDAEngine, uDARemoteDataAdapter, uDADataTableWizards;
procedure OnNewProject(aNewProjectInfo: TROIDENewProjectInfo);
begin
if Pos('DAGuideWizard', aNewProjectInfo.Wizard) <> 1 then exit;
//ShowMessage(Uppercase(aNewProjectInfo.TemplateName));
if not assigned(aNewProjectInfo.ClientProject) and (Uppercase(aNewProjectInfo.TemplateName) = 'LOCAL') then
aNewProjectInfo.ClientProject := aNewProjectInfo.ServerProject;
with TDAGuideWizardForm.Create(aNewProjectInfo) do try
ShowModal();
finally
Free;
end;
end;
{$R *.dfm}
{ TTDAGuideWizardForm }
constructor TDAGuideWizardForm.Create(aNewProjectInfo: TROIDENewProjectInfo);
begin
inherited Create(Application);
fNewProjectInfo := aNewProjectInfo;
fTempSchema := IncludeTrailingPathDelimiter(fNewProjectInfo.ProjectOptions.ProjectDir)+NewGuidAsString()+'.daSchema';
fTempConnections := ChangeFileExt(fTempSchema, '.daConnections');
end;
destructor TDAGuideWizardForm.Destroy;
begin
if FileExists(fTempSchema) then DeleteFile(fTempSchema);
if FileExists(fTempConnections) then DeleteFile(fTempConnections);
inherited;
end;
procedure TDAGuideWizardForm.lb_LinkClick(Sender: TObject);
begin
inherited;
ShellExecute(0, 'open', 'http://www.remobjects.com?da',nil, nil,SW_SHOWNORMAL);
end;
procedure TDAGuideWizardForm.OnEnterPage(aPage: TTabSheet; aMovingForward: boolean);
begin
inherited;
btn_Back.Enabled := false;
btn_Cancel.Visible := (aPage <> ts_FinishMulti) and (aPage <> ts_FinishServer);
btn_Next.Visible := btn_Cancel.Visible;
btn_Finish.Visible := not btn_Next.Visible;
SetForegroundWindow(Self.Handle);
end;
function FindFormEditor(aModule: IOTAModule): IOTAFormEditor;
var
i: integer;
lEditor: IOTAEditor;
begin
for i := 0 to aModule.ModuleFileCount-1 do begin
lEditor := aModule.ModuleFileEditors[i];
if Supports(lEditor, IOTAFormEditor, result) then exit;
end;
end;
function FindFormInProject(aProject: IOTAProject; aName: string): IOTAFormEditor;
var
i: integer;
lModule: IOTAModule;
begin
for i := 0 to aProject.GetModuleCount-1 do begin
if aProject.GetModule(i).Name = aName then begin
lModule := aProject.GetModule(i).OpenModule();
result := FindFormEditor(lModule);
exit;
end
end;
raise Exception.Create('Could not locate '+aName+' module in project.');
end;
function FindComponentOnForm(aForm: IOTAFormEditor; aName: string): TComponent;
var
lOTAComponent: IOTAComponent;
begin
lOTAComponent := aForm.FindComponent(aName);
if not assigned(lOTAComponent) then
raise Exception.Create('Could not locate '+aName+' component.');
result := (lOTAComponent as INTAComponent).GetComponent();
end;
procedure TDAGuideWizardForm.OnLeavePage(aPage: TTabSheet; aMovingForward: boolean);
var
lSMParams: string;
lServerDM, lService, lClientDM: IOTAFormEditor;
lConnectionManager: TDAConnectionManager;
lSchema: TDASchema;
lRemoteDataAdapter: TDARemoteDataAdapter;
begin
inherited;
try
if (aPage = ts_SM) and aMovingForward then begin
lbl_SMClickNext.Visible := false;
lbl_SMLaunching.Visible := true;
btn_Next.Enabled := false;
Application.ProcessMessages();
// locate forms & components
lServerDM := FindFormInProject(fNewProjectInfo.ServerProject, 'fServerDataModule');
lService := FindFormInProject(fNewProjectInfo.ServerProject, fNewProjectInfo.ProjectOptions.ServiceName+'_Impl');
lConnectionManager := FindComponentOnForm(lServerDM, 'ConnectionManager') as TDAConnectionManager;
lSchema := FindComponentOnForm(lService, 'Schema') as TDASchema;
// edit in SM
lConnectionManager.SaveToFile(fTempConnections);
lSchema.SaveToFile(fTempSchema);
lSMParams := Format('/ns /autosave /projectname:"%s" /schemafile:"%s" /connectionsfile:"%s" /platform:Delphi /schemawizard', [fNewProjectInfo.ProjectOptions.ProjectName, fTempSchema, fTempConnections]);
LaunchSchemaModeler(fNewProjectInfo.ProjectOptions.ProjectName, lSMParams, true);
lConnectionManager.LoadFromFile(fTempConnections);
lSchema.LoadFromFile(fTempSchema);
lServerDM.MarkModified();
lService.MarkModified();
if not assigned(fNewProjectInfo.ClientProject) then
NextPage := ts_FinishServer.PageIndex;
//else if DAPackage.Package.DTE.Solution.Projects.Count > 2 then
//fNextPage := pc_Pages.Pages.IndexOf(ts_FinishMultiProject);
btn_Next.Enabled := true;
end
else if (aPage = ts_Compile) and aMovingForward then begin
lbl_CompileClickNext.Visible := false;
lbl_CompileBuilding.Visible := true;
btn_Next.Enabled := false;
Application.ProcessMessages();
if not fNewProjectInfo.ServerProject.ProjectBuilder.BuildProject(cmOTAMake, true, true) then
raise Exception.Create('Failed to compile server project; please check error messages.');
lbl_CompileLaunching.Visible := true;
Application.ProcessMessages();
ShellExecute(0, 'open', pchar(GetProjectExe(fNewProjectInfo.ServerProject)), nil, nil, SW_SHOWNORMAL);
btn_Next.Enabled := false;
end
else if (aPage = ts_DataTables) and aMovingForward then begin
lbl_DataTableClickNext.Visible := false;
Application.ProcessMessages();
// locate forms & components
lClientDM := FindFormInProject(fNewProjectInfo.ClientProject, 'fClientDataModule');
lRemoteDataAdapter := FindComponentOnForm(lClientDM, 'RemoteDataAdapter') as TDARemoteDataAdapter;
lService := FindFormInProject(fNewProjectInfo.ServerProject, fNewProjectInfo.ProjectOptions.ServiceName+'_Impl');
lSchema := FindComponentOnForm(lService, 'Schema') as TDASchema;
// create DTs
lClientDM.Show();
TDataTableWizards.CreateDataTables(lClientDM, lRemoteDataAdapter, lSchema, Point(80,8));
lClientDM.MarkModified();
end;
except
Visible := false;
ModalResult := mrCancel;
raise;
end;
end;
initialization
RegisterGuideWizard(@OnNewProject);
finalization
UnregisterGuideWizard(@OnNewProject);
end.