lazarus IDE integration :

- WSDL file import ( GUI ) menu   Project/Web Services Toolkit/Import WSDL File ...
  - WSDL Type Library Editor ( GUI ) Project/Web Services Toolkit/Type Library Editor...


git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@209 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2007-07-07 20:56:01 +00:00
parent 3c652269a1
commit 549deb3e6d
63 changed files with 7761 additions and 539 deletions

View File

@ -0,0 +1,387 @@
<?xml version="1.0"?>
<CONFIG>
<ProjectOptions>
<PathDelim Value="\"/>
<Version Value="5"/>
<General>
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="3"/>
</General>
<VersionInfo>
<ProjectVersion Value=""/>
</VersionInfo>
<PublishOptions>
<Version Value="2"/>
<IgnoreBinaries Value="False"/>
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
<RequiredPackages Count="1">
<Item1>
<PackageName Value="LCL"/>
</Item1>
</RequiredPackages>
<Units Count="39">
<Unit0>
<Filename Value="test_import.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="test_import"/>
<CursorPos X="1" Y="17"/>
<TopLine Value="1"/>
<UsageCount Value="73"/>
</Unit0>
<Unit1>
<Filename Value="..\wstimportdlg.pas"/>
<ComponentName Value="formImport"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="..\wstimportdlg.lrs"/>
<UnitName Value="wstimportdlg"/>
<CursorPos X="22" Y="256"/>
<TopLine Value="233"/>
<EditorIndex Value="0"/>
<UsageCount Value="73"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215\lcl\interfaces\win32\interfaces.pp"/>
<UnitName Value="Interfaces"/>
<CursorPos X="41" Y="11"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
</Unit2>
<Unit3>
<Filename Value="..\..\..\ws_helper\command_line_parser.pas"/>
<UnitName Value="command_line_parser"/>
<CursorPos X="1" Y="31"/>
<TopLine Value="16"/>
<UsageCount Value="7"/>
</Unit3>
<Unit4>
<Filename Value="..\..\..\ws_helper\pscanner.pp"/>
<UnitName Value="PScanner"/>
<CursorPos X="12" Y="76"/>
<TopLine Value="323"/>
<UsageCount Value="14"/>
</Unit4>
<Unit5>
<Filename Value="..\..\..\ws_helper\pascal_parser_intf.pas"/>
<UnitName Value="pascal_parser_intf"/>
<CursorPos X="1" Y="390"/>
<TopLine Value="375"/>
<EditorIndex Value="7"/>
<UsageCount Value="35"/>
<Loaded Value="True"/>
</Unit5>
<Unit6>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\win32\classes.pp"/>
<UnitName Value="Classes"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
</Unit6>
<Unit7>
<Filename Value="..\..\..\ws_helper\wsdl2pas_imp.pas"/>
<UnitName Value="wsdl2pas_imp"/>
<CursorPos X="18" Y="747"/>
<TopLine Value="736"/>
<EditorIndex Value="6"/>
<UsageCount Value="36"/>
<Loaded Value="True"/>
</Unit7>
<Unit8>
<Filename Value="..\..\..\ws_helper\logger_intf.pas"/>
<UnitName Value="logger_intf"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
</Unit8>
<Unit9>
<Filename Value="..\..\..\ws_helper\source_utils.pas"/>
<UnitName Value="source_utils"/>
<CursorPos X="14" Y="311"/>
<TopLine Value="291"/>
<EditorIndex Value="8"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit9>
<Unit10>
<Filename Value="..\..\..\ws_helper\generator.pas"/>
<UnitName Value="generator"/>
<CursorPos X="31" Y="1645"/>
<TopLine Value="1633"/>
<EditorIndex Value="5"/>
<UsageCount Value="36"/>
<Loaded Value="True"/>
</Unit10>
<Unit11>
<Filename Value="..\..\..\ws_helper\metadata_generator.pas"/>
<UnitName Value="metadata_generator"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="4"/>
<UsageCount Value="36"/>
<Loaded Value="True"/>
</Unit11>
<Unit12>
<Filename Value="..\..\..\binary_streamer.pas"/>
<UnitName Value="binary_streamer"/>
<CursorPos X="23" Y="21"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
</Unit12>
<Unit13>
<Filename Value="..\..\..\ws_helper\wst_resources_utils.pas"/>
<UnitName Value="wst_resources_utils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="36"/>
<Loaded Value="True"/>
</Unit13>
<Unit14>
<Filename Value="..\..\..\wst_rtti_filter\cursor_intf.pas"/>
<UnitName Value="cursor_intf"/>
<CursorPos X="1" Y="99"/>
<TopLine Value="77"/>
<UsageCount Value="16"/>
</Unit14>
<Unit15>
<Filename Value="..\..\..\wst_rtti_filter\dom_cursors.pas"/>
<UnitName Value="dom_cursors"/>
<CursorPos X="1" Y="227"/>
<TopLine Value="205"/>
<UsageCount Value="16"/>
</Unit15>
<Unit16>
<Filename Value="..\..\..\ws_helper\parserutils.pas"/>
<UnitName Value="parserutils"/>
<CursorPos X="9" Y="91"/>
<TopLine Value="39"/>
<UsageCount Value="11"/>
</Unit16>
<Unit17>
<Filename Value="..\..\..\wst_rtti_filter\rtti_filters.pas"/>
<UnitName Value="rtti_filters"/>
<CursorPos X="1" Y="565"/>
<TopLine Value="543"/>
<UsageCount Value="11"/>
</Unit17>
<Unit18>
<Filename Value="..\..\..\wst.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
</Unit18>
<Unit19>
<Filename Value="..\..\..\wst_delphi.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
</Unit19>
<Unit20>
<Filename Value="..\..\..\ws_helper\pastree.pp"/>
<UnitName Value="PasTree"/>
<CursorPos X="3" Y="663"/>
<TopLine Value="659"/>
<UsageCount Value="16"/>
</Unit20>
<Unit21>
<Filename Value="uform2.pas"/>
<ComponentName Value="Form2"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="uform2.lrs"/>
<UnitName Value="uform2"/>
<CursorPos X="5" Y="44"/>
<TopLine Value="19"/>
<EditorIndex Value="3"/>
<UsageCount Value="73"/>
<Loaded Value="True"/>
</Unit21>
<Unit22>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\heaptrc.pp"/>
<UnitName Value="heaptrc"/>
<CursorPos X="29" Y="46"/>
<TopLine Value="34"/>
<UsageCount Value="7"/>
</Unit22>
<Unit23>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\objpash.inc"/>
<CursorPos X="22" Y="149"/>
<TopLine Value="135"/>
<UsageCount Value="7"/>
</Unit23>
<Unit24>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\packages\fcl-base\src\inc\contnrs.pp"/>
<UnitName Value="contnrs"/>
<CursorPos X="15" Y="125"/>
<TopLine Value="111"/>
<UsageCount Value="7"/>
</Unit24>
<Unit25>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\sysutils\sysutils.inc"/>
<CursorPos X="1" Y="109"/>
<TopLine Value="95"/>
<UsageCount Value="7"/>
</Unit25>
<Unit26>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\objpas.inc"/>
<CursorPos X="66" Y="85"/>
<TopLine Value="58"/>
<UsageCount Value="11"/>
</Unit26>
<Unit27>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\wstrings.inc"/>
<CursorPos X="1" Y="188"/>
<TopLine Value="174"/>
<UsageCount Value="7"/>
</Unit27>
<Unit28>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\objpas\classes\lists.inc"/>
<CursorPos X="1" Y="388"/>
<TopLine Value="374"/>
<UsageCount Value="7"/>
</Unit28>
<Unit29>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215\fpc\2.1.5\source\rtl\inc\heap.inc"/>
<CursorPos X="1" Y="607"/>
<TopLine Value="595"/>
<UsageCount Value="11"/>
</Unit29>
<Unit30>
<Filename Value="..\..\..\ws_helper\pparser.pp"/>
<UnitName Value="PParser"/>
<CursorPos X="22" Y="49"/>
<TopLine Value="32"/>
<UsageCount Value="15"/>
</Unit30>
<Unit31>
<Filename Value="..\..\..\..\..\..\..\lazarus2204\lcl\include\screen.inc"/>
<CursorPos X="1" Y="471"/>
<TopLine Value="457"/>
<UsageCount Value="7"/>
</Unit31>
<Unit32>
<Filename Value="..\wst_register.pas"/>
<UnitName Value="wst_register"/>
<CursorPos X="12" Y="8"/>
<TopLine Value="1"/>
<EditorIndex Value="1"/>
<UsageCount Value="30"/>
<Loaded Value="True"/>
</Unit32>
<Unit33>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\lcl\graphics.pp"/>
<UnitName Value="Graphics"/>
<CursorPos X="15" Y="36"/>
<TopLine Value="26"/>
<UsageCount Value="8"/>
</Unit33>
<Unit34>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\heaptrc.pp"/>
<UnitName Value="heaptrc"/>
<CursorPos X="8" Y="115"/>
<TopLine Value="109"/>
<UsageCount Value="8"/>
</Unit34>
<Unit35>
<Filename Value="..\..\..\..\..\..\..\lazarus2204\lcl\interfaces\win32\win32memostrings.inc"/>
<CursorPos X="1" Y="74"/>
<TopLine Value="60"/>
<UsageCount Value="8"/>
</Unit35>
<Unit36>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="14" Y="242"/>
<TopLine Value="220"/>
<UsageCount Value="8"/>
</Unit36>
<Unit37>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="13" Y="233"/>
<TopLine Value="196"/>
<UsageCount Value="8"/>
</Unit37>
<Unit38>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\lcl\include\screen.inc"/>
<CursorPos X="1" Y="480"/>
<TopLine Value="465"/>
<UsageCount Value="10"/>
</Unit38>
</Units>
<JumpHistory Count="0" HistoryIndex="-1"/>
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>
<PathDelim Value="\"/>
<SearchPaths>
<OtherUnitFiles Value="..\;..\..\..\;..\..\..\ws_helper\;..\..\..\wst_rtti_filter\"/>
<UnitOutputDirectory Value="obj"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<IncludeAssertionCode Value="True"/>
<UseAnsiStrings Value="True"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<SmartLinkUnit Value="True"/>
<Generate Value="Faster"/>
<Optimizations>
<OptimizationLevel Value="2"/>
</Optimizations>
</CodeGeneration>
<Linking>
<Debugging>
<UseLineInfoUnit Value="False"/>
</Debugging>
<LinkSmart Value="True"/>
<Options>
<Win32>
<GraphicApplication Value="True"/>
</Win32>
</Options>
</Linking>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Debugging>
<BreakPoints Count="2">
<Item1>
<Source Value="..\..\..\ws_helper\wsdl2pas_imp.pas"/>
<Line Value="1359"/>
</Item1>
<Item2>
<Source Value="..\..\..\ws_helper\source_utils.pas"/>
<Line Value="207"/>
</Item2>
</BreakPoints>
<Watches Count="3">
<Item1>
<Expression Value="FName"/>
</Item1>
<Item2>
<Expression Value="FRefCount"/>
</Item2>
<Item3>
<Expression Value="Self"/>
</Item3>
</Watches>
<Exceptions Count="2">
<Item1>
<Name Value="ECodetoolError"/>
</Item1>
<Item2>
<Name Value="EFOpenError"/>
</Item2>
</Exceptions>
</Debugging>
</CONFIG>

View File

@ -0,0 +1,18 @@
program test_import;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms
{ add your units here }, wstimportdlg, uform2;
begin
Application.Initialize;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.

View File

@ -0,0 +1,22 @@
object Form2: TForm2
Left = 322
Height = 300
Top = 275
Width = 400
HorzScrollBar.Page = 399
VertScrollBar.Page = 299
ActiveControl = Button1
Caption = 'Form2'
ClientHeight = 300
ClientWidth = 400
object Button1: TButton
Left = 190
Height = 25
Top = 65
Width = 75
BorderSpacing.InnerBorder = 4
Caption = 'Button1'
OnClick = Button1Click
TabOrder = 0
end
end

View File

@ -0,0 +1,8 @@
LazarusResources.Add('TForm2','FORMDATA',[
'TPF0'#6'TForm2'#5'Form2'#4'Left'#3'B'#1#6'Height'#3','#1#3'Top'#3#19#1#5'Wid'
+'th'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Page'#3'+'#1#13
+'ActiveControl'#7#7'Button1'#7'Caption'#6#5'Form2'#12'ClientHeight'#3','#1#11
+'ClientWidth'#3#144#1#0#7'TButton'#7'Button1'#4'Left'#3#190#0#6'Height'#2#25
+#3'Top'#2'A'#5'Width'#2'K'#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#7
+'Button1'#7'OnClick'#7#12'Button1Click'#8'TabOrder'#2#0#0#0#0
]);

View File

@ -0,0 +1,48 @@
unit uform2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons;
type
{ TForm2 }
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form2: TForm2;
implementation
uses wstimportdlg;//, HeapTrc;
{ TForm2 }
procedure TForm2.Button1Click(Sender: TObject);
var
f : TformImport;
begin
f := TformImport.Create(nil);
try
f.ShowModal();
finally
f.Release();
end;
end;
initialization
//SetHeapTraceOutput('heapTrace.txt');
{$I uform2.lrs}
end.

View File

@ -0,0 +1,96 @@
<?xml version="1.0"?>
<CONFIG>
<Package Version="2">
<PathDelim Value="\"/>
<Name Value="wst_design"/>
<Author Value="Inoussa OUEDRAOGO"/>
<CompilerOptions>
<Version Value="5"/>
<PathDelim Value="\"/>
<SearchPaths>
<IncludeFiles Value="..\..\;..\..\ws_helper\;..\..\wst_rtti_filter\;..\..\type_lib_edtr\"/>
<OtherUnitFiles Value="..\..\;..\..\ws_helper\;..\..\wst_rtti_filter\;..\..\type_lib_edtr\"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<UseAnsiStrings Value="True"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<Generate Value="Faster"/>
</CodeGeneration>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Description Value="Web Services Toolkit Lazarus IDE design time package"/>
<Version Minor="1"/>
<Files Count="10">
<Item1>
<Filename Value="wstimportdlg.lfm"/>
<Type Value="LFM"/>
</Item1>
<Item2>
<Filename Value="wstimportdlg.lrs"/>
<Type Value="LRS"/>
</Item2>
<Item3>
<Filename Value="wstimportdlg.pas"/>
<UnitName Value="wstimportdlg"/>
</Item3>
<Item4>
<Filename Value="wst_register.pas"/>
<HasRegisterProc Value="True"/>
<UnitName Value="wst_register"/>
</Item4>
<Item5>
<Filename Value="..\..\type_lib_edtr\uwsttypelibraryedit.lfm"/>
<Type Value="LFM"/>
</Item5>
<Item6>
<Filename Value="..\..\type_lib_edtr\uwsttypelibraryedit.lrs"/>
<Type Value="LRS"/>
</Item6>
<Item7>
<Filename Value="..\..\type_lib_edtr\uwsttypelibraryedit.pas"/>
<UnitName Value="uwsttypelibraryedit"/>
</Item7>
<Item8>
<Filename Value="..\..\type_lib_edtr\uabout.lfm"/>
<Type Value="LFM"/>
</Item8>
<Item9>
<Filename Value="..\..\type_lib_edtr\uabout.lrs"/>
<Type Value="LRS"/>
</Item9>
<Item10>
<Filename Value="..\..\type_lib_edtr\uabout.pas"/>
<UnitName Value="uabout"/>
</Item10>
</Files>
<Type Value="DesignTime"/>
<RequiredPkgs Count="4">
<Item1>
<PackageName Value="SynEdit"/>
</Item1>
<Item2>
<PackageName Value="LCL"/>
</Item2>
<Item3>
<PackageName Value="IDEIntf"/>
</Item3>
<Item4>
<PackageName Value="FCL"/>
<MinVersion Major="1" Valid="True"/>
</Item4>
</RequiredPkgs>
<UsageOptions>
<UnitPath Value="$(PkgOutDir)\"/>
</UsageOptions>
<PublishOptions>
<Version Value="2"/>
<IgnoreBinaries Value="False"/>
</PublishOptions>
</Package>
</CONFIG>

View File

@ -0,0 +1,21 @@
{ Ce fichier a �t� automatiquement cr�� par Lazarus. Ne pas l'�diter !
Cette source est seulement employ�e pour compiler et installer le paquet.
}
unit wst_design;
interface
uses
wstimportdlg, wst_register, uwsttypelibraryedit, uabout, LazarusPackageIntf;
implementation
procedure Register;
begin
RegisterUnit ('wst_register', @wst_register.Register );
end;
initialization
RegisterPackage ('wst_design', @Register );
end.

View File

@ -0,0 +1,58 @@
unit wst_register;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
procedure Register();
implementation
uses MenuIntf, LazIDEIntf,
wstimportdlg, uwsttypelibraryedit;
procedure ShowImportDialog(Sender: TObject);
var
f : TformImport;
begin
f := TformImport.Create(nil);
try
if ( LazarusIDE.ActiveProject <> nil ) and
( LazarusIDE.ActiveProject.MainFile <> nil )
then begin
f.edtOutputDir.Text := ExtractFileDir(LazarusIDE.ActiveProject.MainFile.Filename);
end;
f.ShowModal();
finally
f.Release();
end;
end;
procedure ShowTypeLibraryDialog(Sender: TObject);
var
f : TfWstTypeLibraryEdit;
begin
f := TfWstTypeLibraryEdit.Create(nil);
try
f.ShowModal();
finally
f.Release();
end;
end;
var
itmWstSection : TIDEMenuSection;
procedure Register();
begin
itmWstSection := RegisterIDESubMenu(mnuProject,'itmWstSection','Web Services Toolkit',nil,nil);
RegisterIDEMenuCommand(itmWstSection,'itmWstImportWsdlFile','Import WSDL File ...',nil,@ShowImportDialog);
RegisterIDEMenuCommand(itmWstSection,'itmWstImportWsdlFile','Type Library Editor ...',nil,@ShowTypeLibraryDialog);
end;
end.

View File

@ -0,0 +1,233 @@
object formImport: TformImport
Left = 431
Height = 538
Top = 153
Width = 526
HorzScrollBar.Page = 525
VertScrollBar.Page = 537
ActiveControl = Button1
BorderStyle = bsSizeToolWin
Caption = 'WSDL Importer'
ClientHeight = 538
ClientWidth = 526
object Panel2: TPanel
Height = 490
Width = 526
Align = alClient
ClientHeight = 490
ClientWidth = 526
TabOrder = 1
object GroupBox1: TGroupBox
Left = 8
Height = 168
Top = 8
Width = 506
Anchors = [akTop, akLeft, akRight]
ClientHeight = 150
ClientWidth = 502
TabOrder = 0
object Label1: TLabel
Left = 9
Height = 14
Top = 4
Width = 186
Caption = 'Web Services Description File ( WSDL )'
ParentColor = False
end
object Label2: TLabel
Left = 9
Height = 14
Top = 69
Width = 81
Caption = 'Output directory'
ParentColor = False
end
object edtInputFile: TEdit
Left = 9
Height = 23
Top = 31
Width = 416
Anchors = [akTop, akLeft, akRight]
TabOrder = 0
end
object Button2: TButton
Left = 443
Height = 25
Top = 31
Width = 40
Action = actOpenFile
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
TabOrder = 1
end
object edtOutputDir: TEdit
Left = 9
Height = 23
Top = 88
Width = 416
Anchors = [akTop, akLeft, akRight]
TabOrder = 2
end
object Button3: TButton
Left = 443
Height = 25
Top = 88
Width = 40
Action = actOpenDir
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
TabOrder = 3
end
object edtAddToProject: TCheckBox
Left = 9
Height = 13
Top = 128
Width = 176
Caption = 'Add the generated files to project'
TabOrder = 4
end
end
object GroupBox2: TGroupBox
Left = 8
Height = 162
Top = 320
Width = 506
Anchors = [akTop, akLeft, akRight, akBottom]
Caption = ' Messages '
ClientHeight = 144
ClientWidth = 502
TabOrder = 2
object mmoLog: TMemo
Height = 144
Width = 502
Align = alClient
ReadOnly = True
ScrollBars = ssBoth
TabOrder = 0
end
end
object GroupBox3: TGroupBox
Left = 8
Height = 120
Top = 184
Width = 506
Anchors = [akTop, akLeft, akRight]
Caption = ' Options '
ClientHeight = 102
ClientWidth = 502
TabOrder = 1
object edtOptionIntf: TCheckBox
Left = 9
Height = 13
Top = 8
Width = 78
Caption = 'Interface file'
Checked = True
OnClick = edtOptionIntfClick
State = cbChecked
TabOrder = 0
end
object edtOptionProxy: TCheckBox
Left = 9
Height = 13
Top = 56
Width = 62
Caption = 'Proxy file'
Checked = True
State = cbChecked
TabOrder = 2
end
object edtOptionBinder: TCheckBox
Left = 294
Height = 13
Top = 8
Width = 105
Caption = 'Service Binder file'
TabOrder = 3
end
object edtOptionImp: TCheckBox
Left = 294
Height = 13
Top = 56
Width = 155
Caption = 'Implementation Skeletton file'
TabOrder = 4
end
object edtOptionIntfALL: TCheckBox
Left = 30
Height = 13
Top = 32
Width = 88
Caption = 'Parse all types'
OnClick = edtOptionIntfALLClick
TabOrder = 1
end
end
end
object Panel1: TPanel
Height = 48
Top = 490
Width = 526
Align = alBottom
ClientHeight = 48
ClientWidth = 526
TabOrder = 0
object Button1: TButton
Left = 351
Height = 25
Top = 8
Width = 75
Action = actOK
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
Default = True
TabOrder = 0
end
object Button4: TButton
Left = 439
Height = 25
Top = 8
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
end
object AL: TActionList
left = 104
top = 328
object actOK: TAction
Caption = 'OK'
DisableIfNoHandler = True
OnExecute = actOKExecute
OnUpdate = actOKUpdate
end
object actOpenFile: TAction
Caption = '...'
DisableIfNoHandler = True
OnExecute = actOpenFileExecute
end
object actOpenDir: TAction
Caption = '...'
DisableIfNoHandler = True
OnExecute = actOpenDirExecute
end
end
object OD: TOpenDialog
Title = 'Ouvrir un fichier existant'
Filter = 'WSDL Files ( *.wsdl )|*.wsdl'
FilterIndex = 0
Options = [ofFileMustExist, ofEnableSizing, ofViewDetail]
left = 160
top = 16
end
object SDD: TSelectDirectoryDialog
Title = 'Choisir un r�pertoire'
FilterIndex = 0
left = 224
top = 176
end
end

View File

@ -0,0 +1,65 @@
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
LazarusResources.Add('TformImport','FORMDATA',[
'TPF0'#11'TformImport'#10'formImport'#4'Left'#3#175#1#6'Height'#3#26#2#3'Top'
+#3#153#0#5'Width'#3#14#2#18'HorzScrollBar.Page'#3#13#2#18'VertScrollBar.Page'
+#3#25#2#13'ActiveControl'#7#7'Button1'#11'BorderStyle'#7#13'bsSizeToolWin'#7
+'Caption'#6#13'WSDL Importer'#12'ClientHeight'#3#26#2#11'ClientWidth'#3#14#2
+#0#6'TPanel'#6'Panel2'#6'Height'#3#234#1#5'Width'#3#14#2#5'Align'#7#8'alClie'
+'nt'#12'ClientHeight'#3#234#1#11'ClientWidth'#3#14#2#8'TabOrder'#2#1#0#9'TGr'
+'oupBox'#9'GroupBox1'#4'Left'#2#8#6'Height'#3#168#0#3'Top'#2#8#5'Width'#3#250
+#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#12'ClientHeight'#3#150#0#11
+'ClientWidth'#3#246#1#8'TabOrder'#2#0#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'He'
+'ight'#2#14#3'Top'#2#4#5'Width'#3#186#0#7'Caption'#6'&Web Services Descripti'
+'on File ( WSDL )'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#9#6'H'
+'eight'#2#14#3'Top'#2'E'#5'Width'#2'Q'#7'Caption'#6#16'Output directory'#11
+'ParentColor'#8#0#0#5'TEdit'#12'edtInputFile'#4'Left'#2#9#6'Height'#2#23#3'T'
+'op'#2#31#5'Width'#3#160#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'T'
+'abOrder'#2#0#0#0#7'TButton'#7'Button2'#4'Left'#3#187#1#6'Height'#2#25#3'Top'
+#2#31#5'Width'#2'('#6'Action'#7#11'actOpenFile'#7'Anchors'#11#5'akTop'#7'akR'
+'ight'#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#1#0#0#5'TEdit'#12'e'
+'dtOutputDir'#4'Left'#2#9#6'Height'#2#23#3'Top'#2'X'#5'Width'#3#160#1#7'Anch'
+'ors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#2#0#0#7'TButton'#7'Bu'
+'tton3'#4'Left'#3#187#1#6'Height'#2#25#3'Top'#2'X'#5'Width'#2'('#6'Action'#7
+#10'actOpenDir'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBo'
+'rder'#2#4#8'TabOrder'#2#3#0#0#9'TCheckBox'#15'edtAddToProject'#4'Left'#2#9#6
+'Height'#2#13#3'Top'#3#128#0#5'Width'#3#176#0#7'Caption'#6'"Add the generate'
+'d files to project'#8'TabOrder'#2#4#0#0#0#9'TGroupBox'#9'GroupBox2'#4'Left'
+#2#8#6'Height'#3#162#0#3'Top'#3'@'#1#5'Width'#3#250#1#7'Anchors'#11#5'akTop'
+#6'akLeft'#7'akRight'#8'akBottom'#0#7'Caption'#6#12' Messages '#12'ClientH'
+'eight'#3#144#0#11'ClientWidth'#3#246#1#8'TabOrder'#2#2#0#5'TMemo'#6'mmoLog'
+#6'Height'#3#144#0#5'Width'#3#246#1#5'Align'#7#8'alClient'#8'ReadOnly'#9#10
+'ScrollBars'#7#6'ssBoth'#8'TabOrder'#2#0#0#0#0#9'TGroupBox'#9'GroupBox3'#4'L'
+'eft'#2#8#6'Height'#2'x'#3'Top'#3#184#0#5'Width'#3#250#1#7'Anchors'#11#5'akT'
+'op'#6'akLeft'#7'akRight'#0#7'Caption'#6#11' Options '#12'ClientHeight'#2
+'f'#11'ClientWidth'#3#246#1#8'TabOrder'#2#1#0#9'TCheckBox'#13'edtOptionIntf'
+#4'Left'#2#9#6'Height'#2#13#3'Top'#2#8#5'Width'#2'N'#7'Caption'#6#14'Interfa'
+'ce file'#7'Checked'#9#7'OnClick'#7#18'edtOptionIntfClick'#5'State'#7#9'cbCh'
+'ecked'#8'TabOrder'#2#0#0#0#9'TCheckBox'#14'edtOptionProxy'#4'Left'#2#9#6'He'
+'ight'#2#13#3'Top'#2'8'#5'Width'#2'>'#7'Caption'#6#10'Proxy file'#7'Checked'
+#9#5'State'#7#9'cbChecked'#8'TabOrder'#2#2#0#0#9'TCheckBox'#15'edtOptionBind'
+'er'#4'Left'#3'&'#1#6'Height'#2#13#3'Top'#2#8#5'Width'#2'i'#7'Caption'#6#19
+'Service Binder file'#8'TabOrder'#2#3#0#0#9'TCheckBox'#12'edtOptionImp'#4'Le'
+'ft'#3'&'#1#6'Height'#2#13#3'Top'#2'8'#5'Width'#3#155#0#7'Caption'#6#29'Impl'
+'ementation Skeletton file'#8'TabOrder'#2#4#0#0#9'TCheckBox'#16'edtOptionInt'
+'fALL'#4'Left'#2#30#6'Height'#2#13#3'Top'#2' '#5'Width'#2'X'#7'Caption'#6#15
+'Parse all types'#7'OnClick'#7#21'edtOptionIntfALLClick'#8'TabOrder'#2#1#0#0
+#0#0#6'TPanel'#6'Panel1'#6'Height'#2'0'#3'Top'#3#234#1#5'Width'#3#14#2#5'Ali'
+'gn'#7#8'alBottom'#12'ClientHeight'#2'0'#11'ClientWidth'#3#14#2#8'TabOrder'#2
+#0#0#7'TButton'#7'Button1'#4'Left'#3'_'#1#6'Height'#2#25#3'Top'#2#8#5'Width'
+#2'K'#6'Action'#7#5'actOK'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpac'
+'ing.InnerBorder'#2#4#7'Default'#9#8'TabOrder'#2#0#0#0#7'TButton'#7'Button4'
+#4'Left'#3#183#1#6'Height'#2#25#3'Top'#2#8#5'Width'#2'K'#7'Anchors'#11#5'akT'
+'op'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Caption'#6
+#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#0#11'TActionList'#2'AL'#4
+'left'#2'h'#3'top'#3'H'#1#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18'Disabl'
+'eIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actOKUpdat'
+'e'#0#0#7'TAction'#11'actOpenFile'#7'Caption'#6#3'...'#18'DisableIfNoHandler'
+#9#9'OnExecute'#7#18'actOpenFileExecute'#0#0#7'TAction'#10'actOpenDir'#7'Cap'
+'tion'#6#3'...'#18'DisableIfNoHandler'#9#9'OnExecute'#7#17'actOpenDirExecute'
+#0#0#0#11'TOpenDialog'#2'OD'#5'Title'#6#26'Ouvrir un fichier existant'#6'Fil'
+'ter'#6#28'WSDL Files ( *.wsdl )|*.wsdl'#11'FilterIndex'#2#0#7'Options'#11#15
+'ofFileMustExist'#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#3#160#0#3'to'
+'p'#2#16#0#0#22'TSelectDirectoryDialog'#3'SDD'#5'Title'#6#21'Choisir un r'
+#233'pertoire'#11'FilterIndex'#2#0#4'left'#3#224#0#3'top'#3#176#0#0#0#0
]);

View File

@ -0,0 +1,308 @@
unit wstimportdlg;
{$mode objfpc}{$H+}
{$DEFINE WST_IDE}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls, Buttons, ActnList, logger_intf;
type
TGenOption = (
goInterface, goInterfaceALL,
goProxy, goImp, goBinder
);
TGenOptions = set of TGenOption;
TOnParserMessage = procedure (const AMsgType : TMessageType; const AMsg : string) of object;
{ TformImport }
TformImport = class(TForm)
actOpenDir: TAction;
actOpenFile: TAction;
actOK: TAction;
AL: TActionList;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
edtAddToProject : TCheckBox;
edtOptionIntfALL: TCheckBox;
edtOptionIntf: TCheckBox;
edtOptionProxy: TCheckBox;
edtOptionBinder: TCheckBox;
edtOptionImp: TCheckBox;
edtInputFile: TEdit;
edtOutputDir: TEdit;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Label1: TLabel;
Label2: TLabel;
mmoLog: TMemo;
OD: TOpenDialog;
Panel1: TPanel;
Panel2: TPanel;
SDD: TSelectDirectoryDialog;
procedure actOKExecute(Sender: TObject);
procedure actOKUpdate(Sender: TObject);
procedure actOpenDirExecute(Sender: TObject);
procedure actOpenFileExecute(Sender: TObject);
procedure edtOptionIntfALLClick(Sender: TObject);
procedure edtOptionIntfClick(Sender: TObject);
private
FStatusMessageTag : Integer;
procedure ShowStatusMessage(const AMsgType : TMessageType;const AMsg : string);
public
function GetOptions() : TGenOptions;
end;
var
formImport: TformImport;
implementation
uses DOM, XMLRead, pastree, pascal_parser_intf, wsdl2pas_imp, source_utils,
generator, metadata_generator, binary_streamer, wst_resources_utils
{$IFDEF WST_IDE},LazIDEIntf{$ENDIF};
type
TSourceType = goInterface .. goBinder;
TSourceTypes = set of TSourceType;
function ParseWsdlFile(
const AFileName : string;
const ANotifier : TOnParserMessage
):TwstPasTreeContainer;
var
locDoc : TXMLDocument;
prsr : TWsdlParser;
symName : string;
begin
Result := nil;
if FileExists(AFileName) then begin
symName := ChangeFileExt(ExtractFileName(AFileName),'');
if ( symName[Length(symName)] = '.' ) then begin
Delete(symName,Length(symName),1);
end;
prsr := nil;
ReadXMLFile(locDoc,AFileName);
try
Result := TwstPasTreeContainer.Create();
try
prsr := TWsdlParser.Create(locDoc,Result);
prsr.OnMessage := ANotifier;
prsr.Parse(pmAllTypes,symName);
except
FreeAndNil(Result);
raise;
end;
finally
FreeAndNil(prsr);
FreeAndNil(locDoc);
end;
end;
end;
type TOutputType = ( otMemory, otFileSystem );
function GenerateSource(
ASymbolTable : TwstPasTreeContainer;
AOptions : TSourceTypes;
const AOutputType : TOutputType;
const AOutPath : string;
const ANotifier : TOnParserMessage
) : ISourceManager;
procedure Notify(const AMsg : string);
begin
if Assigned(ANotifier) then begin
ANotifier(mtInfo, AMsg);
end;
end;
var
mtdaFS: TMemoryStream;
g : TBaseGenerator;
mg : TMetadataGenerator;
rsrcStrm : TMemoryStream;
begin
Result := CreateSourceManager();
rsrcStrm := nil;
mtdaFS := nil;
mg := nil;
g := Nil;
try
if ( ( [goInterface,goInterfaceALL] * AOptions ) <> [] ) then begin
Notify('Interface file generation...');
g := TInftGenerator.Create(ASymbolTable,Result);
g.Execute();
FreeAndNil(g);
end;
if ( goProxy in AOptions ) then begin
Notify('Proxy file generation...');
g := TProxyGenerator.Create(ASymbolTable,Result);
g.Execute();
FreeAndNil(g);
end;
if ( goBinder in AOptions ) then begin
Notify('Binder file generation...');
g := TBinderGenerator.Create(ASymbolTable,Result);
g.Execute();
FreeAndNil(g);
end;
if ( goImp in AOptions ) then begin
Notify('Implementation file generation...');
g := TImplementationGenerator.Create(ASymbolTable,Result);
g.Execute();
FreeAndNil(g);
end;
if ( AOutputType = otFileSystem ) and ( [goBinder,goProxy]*AOptions <> [] ) then begin
Notify('Metadata file generation...');
mtdaFS := TMemoryStream.Create();
mg := TMetadataGenerator.Create(ASymbolTable,CreateBinaryWriter(mtdaFS));
mg.Execute();
mtdaFS.SaveToFile(AOutPath + Format('%s.%s',[ASymbolTable.CurrentModule.Name,sWST_META]));
rsrcStrm := TMemoryStream.Create();
mtdaFS.Position := 0;
BinToWstRessource(UpperCase(ASymbolTable.CurrentModule.Name),mtdaFS,rsrcStrm);
rsrcStrm.SaveToFile(AOutPath + Format('%s.%s',[ASymbolTable.CurrentModule.Name,sWST_EXTENSION]));
end;
if ( AOutputType = otFileSystem ) then begin
Result.SaveToFile(AOutPath);
end;
finally
rsrcStrm.Free();
mg.Free();;
mtdaFS.Free();;
g.Free();
end;
end;
{ TformImport }
procedure TformImport.actOpenFileExecute(Sender: TObject);
begin
if OD.Execute() then begin
edtInputFile.Text := OD.FileName;
end;
end;
procedure TformImport.edtOptionIntfALLClick(Sender: TObject);
begin
if edtOptionIntfALL.Checked and ( not edtOptionIntf.Checked ) then
edtOptionIntf.Checked := True;
end;
procedure TformImport.edtOptionIntfClick(Sender: TObject);
begin
if ( not edtOptionIntf.Checked ) and edtOptionIntfALL.Checked then
edtOptionIntfALL.Checked := False;
end;
procedure TformImport.ShowStatusMessage(const AMsgType: TMessageType;const AMsg: string);
begin
mmoLog.Lines.Add(Format('%s : %s',[MessageTypeNames[AMsgType],AMsg]));
Inc(FStatusMessageTag);
if ( (FStatusMessageTag) > 23 ) then begin
FStatusMessageTag := 0;
Application.ProcessMessages();
end;
end;
function TformImport.GetOptions(): TGenOptions;
begin
Result := [];
if edtOptionIntf.Checked then begin
Result := Result + [goInterface];
if edtOptionIntfALL.Checked then begin
Result := Result + [goInterfaceALL];
end;
end;
if edtOptionProxy.Checked then
Include(Result,goProxy);
if edtOptionBinder.Checked then
Include(Result,goBinder);
if edtOptionImp.Checked then
Include(Result,goImp);
end;
procedure TformImport.actOpenDirExecute(Sender: TObject);
begin
if SDD.Execute() then begin
if not DirectoryExists(SDD.FileName) then
ForceDirectories(SDD.FileName);
edtOutputDir.Text := SDD.FileName;
end;
end;
procedure TformImport.actOKUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := FileExists(edtInputFile.Text) and
DirectoryExists(edtOutputDir.Text) and
( GetOptions() <> [] );
end;
procedure TformImport.actOKExecute(Sender: TObject);
var
tree : TwstPasTreeContainer;
oldCursor : TCursor;
srcMgnr : ISourceManager;
i : Integer;
{$IFDEF WST_IDE}
j, c : Integer;
srcItm : ISourceStream;
trueOpenFlags, openFlags : TOpenFlags;
destPath : string;
{$ENDIF}
begin
oldCursor := Screen.Cursor;
Screen.Cursor := crHourGlass;
try
tree := ParseWsdlFile(edtInputFile.Text,@ShowStatusMessage);
try
srcMgnr := GenerateSource(tree,GetOptions(),otFileSystem,edtOutputDir.Text,@ShowStatusMessage);
ShowStatusMessage(mtInfo,'');
{$IFDEF WST_IDE}
openFlags := [];
if edtAddToProject.Checked then begin
Include(openFlags,ofAddToProject);
end;
destPath := IncludeTrailingPathDelimiter(edtOutputDir.Text);
c := srcMgnr.GetCount();
for i := 0 to Pred(c) do begin
srcItm := srcMgnr.GetItem(i);
trueOpenFlags := openFlags;
for j := 0 to Pred(LazarusIDE.ActiveProject.FileCount) do begin
if AnsiSameText(srcItm.GetFileName(),ExtractFileName(LazarusIDE.ActiveProject.Files[j].Filename)) then
trueOpenFlags := trueOpenFlags - [ofAddToProject];
end;
LazarusIDE.DoOpenEditorFile(destPath + srcItm.GetFileName(),-1,trueOpenFlags);
end;
{$ENDIF}
finally
srcMgnr := nil;
tree.Free();
end;
finally
Screen.Cursor := oldCursor;
end;
ShowMessage('File parsed succefully.');
Self.Close();
ModalResult := mrOK;
end;
initialization
{$I wstimportdlg.lrs}
end.

View File

@ -138,12 +138,7 @@
<UsageCount Value="10"/>
</Unit13>
</Units>
<JumpHistory Count="1" HistoryIndex="0">
<Position1>
<Filename Value="mod_wst.lpr"/>
<Caret Line="39" Column="14" TopLine="23"/>
</Position1>
</JumpHistory>
<JumpHistory Count="0" HistoryIndex="-1"/>
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>

View File

@ -33,7 +33,7 @@
<CursorPos X="17" Y="32"/>
<TopLine Value="17"/>
<EditorIndex Value="0"/>
<UsageCount Value="20"/>
<UsageCount Value="23"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
@ -42,7 +42,7 @@
<CursorPos X="74" Y="92"/>
<TopLine Value="78"/>
<EditorIndex Value="2"/>
<UsageCount Value="10"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
@ -51,7 +51,7 @@
<CursorPos X="43" Y="179"/>
<TopLine Value="157"/>
<EditorIndex Value="4"/>
<UsageCount Value="10"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
@ -60,7 +60,7 @@
<CursorPos X="53" Y="43"/>
<TopLine Value="184"/>
<EditorIndex Value="6"/>
<UsageCount Value="10"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit3>
<Unit4>
@ -69,7 +69,7 @@
<CursorPos X="54" Y="32"/>
<TopLine Value="22"/>
<EditorIndex Value="1"/>
<UsageCount Value="10"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
@ -78,7 +78,7 @@
<CursorPos X="52" Y="4125"/>
<TopLine Value="4118"/>
<EditorIndex Value="5"/>
<UsageCount Value="10"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit5>
<Unit6>
@ -87,7 +87,7 @@
<CursorPos X="1" Y="96"/>
<TopLine Value="72"/>
<EditorIndex Value="3"/>
<UsageCount Value="10"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit6>
</Units>

View File

@ -38,7 +38,7 @@
<CursorPos X="40" Y="150"/>
<TopLine Value="133"/>
<EditorIndex Value="0"/>
<UsageCount Value="50"/>
<UsageCount Value="53"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
@ -47,7 +47,7 @@
<CursorPos X="1" Y="68"/>
<TopLine Value="54"/>
<EditorIndex Value="6"/>
<UsageCount Value="23"/>
<UsageCount Value="25"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
@ -56,7 +56,7 @@
<CursorPos X="29" Y="132"/>
<TopLine Value="101"/>
<EditorIndex Value="9"/>
<UsageCount Value="25"/>
<UsageCount Value="27"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
@ -65,7 +65,7 @@
<CursorPos X="3" Y="31"/>
<TopLine Value="9"/>
<EditorIndex Value="4"/>
<UsageCount Value="25"/>
<UsageCount Value="27"/>
<Loaded Value="True"/>
</Unit3>
<Unit4>
@ -74,7 +74,7 @@
<CursorPos X="3" Y="3"/>
<TopLine Value="1"/>
<EditorIndex Value="1"/>
<UsageCount Value="22"/>
<UsageCount Value="24"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
@ -90,7 +90,7 @@
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="3"/>
<UsageCount Value="25"/>
<UsageCount Value="27"/>
<Loaded Value="True"/>
</Unit6>
<Unit7>
@ -191,7 +191,7 @@
<CursorPos X="18" Y="139"/>
<TopLine Value="128"/>
<EditorIndex Value="5"/>
<UsageCount Value="36"/>
<UsageCount Value="39"/>
<Loaded Value="True"/>
</Unit21>
<Unit22>
@ -200,7 +200,7 @@
<CursorPos X="17" Y="23"/>
<TopLine Value="1"/>
<EditorIndex Value="8"/>
<UsageCount Value="18"/>
<UsageCount Value="20"/>
<Loaded Value="True"/>
</Unit22>
<Unit23>
@ -215,7 +215,7 @@
<CursorPos X="1" Y="1323"/>
<TopLine Value="1309"/>
<EditorIndex Value="7"/>
<UsageCount Value="18"/>
<UsageCount Value="20"/>
<Loaded Value="True"/>
</Unit24>
<Unit25>
@ -224,7 +224,7 @@
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="17"/>
<UsageCount Value="19"/>
<Loaded Value="True"/>
</Unit25>
<Unit26>

View File

@ -0,0 +1,41 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit common_gui_utils;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, ComCtrls;
function FindItem(const ACaption : string; AList : TListItems) : TListItem ;
implementation
function FindItem(const ACaption : string; AList : TListItems) : TListItem ;
var
i : Integer;
begin
for i := 0 to Pred(AList.Count) do begin
if AnsiSameText(ACaption,AList[i].Caption) then begin
Result := AList[i];
Exit;
end;
end;
Result := nil;
end;
end.

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit edit_helper;
{$mode objfpc}{$H+}
@ -27,7 +39,17 @@ type
function CreateEnum(AContainer : TwstPasTreeContainer) : TPasEnumType;
function CreateCompoundObject(ASymbolTable : TwstPasTreeContainer) : TPasClassType;
function CreateInterface(ASymbolTable : TwstPasTreeContainer) : TPasClassType;
function CreateMethod(
AOwner : TPasClassType;
ASymbolTable : TwstPasTreeContainer
) : TPasProcedure;
function CreateArgument(
AOwner : TPasProcedureType;
ASymbolTable : TwstPasTreeContainer
) : TPasArgument;
function HasEditor(AObject : TPasElement):Boolean;
function UpdateObject(
AObject : TPasElement;
@ -35,9 +57,15 @@ type
):Boolean;
procedure FillList(ALs : TStrings;AContainer : TwstPasTreeContainer);
procedure FillTypeList(
ALs : TStrings;
ASymbol : TwstPasTreeContainer
);
implementation
uses Contnrs, Forms, ufEnumedit, ufclassedit, uinterfaceedit;
uses Contnrs, Forms, ufEnumedit, ufclassedit, uinterfaceedit, uprocedit,
uargedit, umoduleedit, ubindingedit;
type
@ -124,6 +152,146 @@ type
):Boolean;override;
end;
{ TMethodUpdater }
TMethodUpdater = class(TObjectUpdater)
public
class function CanHandle(AObject : TObject):Boolean;override;
class function UpdateObject(
AObject : TPasElement;
ASymbolTable : TwstPasTreeContainer
):Boolean;override;
end;
{ TArgumentUpdater }
TArgumentUpdater = class(TObjectUpdater)
public
class function CanHandle(AObject : TObject):Boolean;override;
class function UpdateObject(
AObject : TPasElement;
ASymbolTable : TwstPasTreeContainer
):Boolean;override;
end;
{ TModuleUpdater }
TModuleUpdater = class(TObjectUpdater)
public
class function CanHandle(AObject : TObject):Boolean;override;
class function UpdateObject(
AObject : TPasElement;
ASymbolTable : TwstPasTreeContainer
):Boolean;override;
end;
{ TBindingUpdater }
TBindingUpdater = class(TObjectUpdater)
public
class function CanHandle(AObject : TObject):Boolean;override;
class function UpdateObject(
AObject : TPasElement;
ASymbolTable : TwstPasTreeContainer
):Boolean;override;
end;
{ TBindingUpdater }
class function TBindingUpdater.CanHandle(AObject: TObject): Boolean;
begin
Result := ( inherited CanHandle(AObject) ) and AObject.InheritsFrom(TwstBinding);
end;
class function TBindingUpdater.UpdateObject(
AObject: TPasElement;
ASymbolTable: TwstPasTreeContainer
): Boolean;
var
f : TfBindingEdit;
e : TwstBinding;
begin
e := AObject as TwstBinding;
f := TfBindingEdit.Create(Application);
try
Result := f.UpdateObject(e,etUpdate,ASymbolTable);
finally
f.Release();
end;
end;
{ TModuleUpdater }
class function TModuleUpdater.CanHandle(AObject: TObject): Boolean;
begin
Result := ( inherited CanHandle(AObject) ) and AObject.InheritsFrom(TPasModule);
end;
class function TModuleUpdater.UpdateObject(
AObject: TPasElement;
ASymbolTable: TwstPasTreeContainer
): Boolean;
var
f : TfModuleEdit;
e : TPasModule;
begin
e := AObject as TPasModule;
f := TfModuleEdit.Create(Application);
try
Result := f.UpdateObject(e,etUpdate,ASymbolTable);
finally
f.Release();
end;
end;
{ TArgumentUpdater }
class function TArgumentUpdater.CanHandle(AObject: TObject): Boolean;
begin
Result := ( inherited CanHandle(AObject) ) and AObject.InheritsFrom(TPasArgument);
end;
class function TArgumentUpdater.UpdateObject(
AObject : TPasElement;
ASymbolTable : TwstPasTreeContainer
): Boolean;
var
f : TfArgEdit;
e : TPasArgument;
begin
e := AObject as TPasArgument;
f := TfArgEdit.Create(Application);
try
Result := f.UpdateObject(e,etUpdate,ASymbolTable);
finally
f.Release();
end;
end;
{ TMethodUpdater }
class function TMethodUpdater.CanHandle(AObject: TObject): Boolean;
begin
Result := ( inherited CanHandle(AObject) ) and AObject.InheritsFrom(TPasProcedure);
end;
class function TMethodUpdater.UpdateObject(
AObject: TPasElement;
ASymbolTable: TwstPasTreeContainer
): Boolean;
var
f : TfProcEdit;
e : TPasProcedure;
begin
e := AObject as TPasProcedure;
f := TfProcEdit.Create(Application);
try
Result := f.UpdateObject(e,etUpdate,ASymbolTable);
finally
f.Release();
end;
end;
{ TInterfaceUpdater }
class function TInterfaceUpdater.CanHandle(AObject: TObject): Boolean;
@ -269,6 +437,40 @@ begin
end;
end;
function CreateMethod(
AOwner : TPasClassType;
ASymbolTable : TwstPasTreeContainer
) : TPasProcedure;
var
f : TfProcEdit;
begin
Result := TPasProcedure(ASymbolTable.CreateElement(TPasProcedure,'new_proc',AOwner,visPublic,'',0));
Result.ProcType := TPasProcedureType(ASymbolTable.CreateElement(TPasProcedureType,'',Result,visDefault,'',0));
AOwner.Members.Add(Result);
f := TfProcEdit.Create(Application);
try
f.UpdateObject(Result,etCreate,ASymbolTable);
finally
f.Release();
end;
end;
function CreateArgument(
AOwner : TPasProcedureType;
ASymbolTable : TwstPasTreeContainer
) : TPasArgument;
var
f : TfArgEdit;
begin
Result := TPasArgument(ASymbolTable.CreateElement(TPasArgument,'AValue',AOwner,visPublic,'',0));
Result.ArgType := ASymbolTable.FindElement('string') as TPasType;
f := TfArgEdit.Create(Application);
try
f.UpdateObject(Result,etCreate,ASymbolTable);
finally
f.Release();
end;
end;
{ TObjectUpdater }
@ -326,11 +528,56 @@ begin
end;
end;
procedure InternalFillTypeList(ALs : TStrings; AContainer : TwstPasTreeContainer);
var
i, j : Integer;
sym : TPasElement;
moduleList, decList : TList;
mdl : TPasModule;
begin
moduleList := AContainer.Package.Modules;
for i := 0 to Pred(moduleList.Count) do begin
mdl := TPasModule(moduleList[i]);
decList := mdl.InterfaceSection.Declarations;
for j := 0 to Pred(decList.Count) do begin
sym := TPasElement(decList[j]);
if sym.InheritsFrom(TPasType) then begin
if ( ALs.IndexOfObject(sym) = -1 ) then begin
ALs.AddObject(AContainer.GetExternalName(sym),sym);
end;
end;
end;
end;
end;
procedure FillTypeList(
ALs : TStrings;
ASymbol : TwstPasTreeContainer
);
var
locLST : TStringList;
begin
locLST := TStringList.Create();
try
locLST.Assign(ALs);
locLST.Duplicates := dupAccept;
InternalFillTypeList(locLST,ASymbol);
locLST.Sort();
ALs.Assign(locLST);
finally
FreeAndNil(locLST);
end;
end;
initialization
UpdaterRegistryInst := TUpdaterRegistry.Create();
UpdaterRegistryInst.RegisterHandler(TEnumUpdater);
UpdaterRegistryInst.RegisterHandler(TClassUpdater);
UpdaterRegistryInst.RegisterHandler(TInterfaceUpdater);
UpdaterRegistryInst.RegisterHandler(TMethodUpdater);
UpdaterRegistryInst.RegisterHandler(TArgumentUpdater);
UpdaterRegistryInst.RegisterHandler(TModuleUpdater);
UpdaterRegistryInst.RegisterHandler(TBindingUpdater);
finalization
FreeAndNil(UpdaterRegistryInst);

View File

@ -7,7 +7,7 @@
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="8"/>
<ActiveEditorIndexAtStart Value="1"/>
</General>
<VersionInfo>
<ProjectVersion Value=""/>
@ -32,27 +32,25 @@
<PackageName Value="LCL"/>
</Item2>
</RequiredPackages>
<Units Count="42">
<Units Count="69">
<Unit0>
<Filename Value="typ_lib_edtr.lpr"/>
<IsPartOfProject Value="True"/>
<CursorPos X="39" Y="13"/>
<CursorPos X="24" Y="11"/>
<TopLine Value="1"/>
<EditorIndex Value="17"/>
<UsageCount Value="112"/>
<Loaded Value="True"/>
<UsageCount Value="180"/>
</Unit0>
<Unit1>
<Filename Value="umain.pas"/>
<ComponentName Value="fMain"/>
<Filename Value="uwsttypelibraryedit.pas"/>
<ComponentName Value="fWstTypeLibraryEdit"/>
<HasResources Value="True"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="umain.lrs"/>
<UnitName Value="umain"/>
<CursorPos X="27" Y="103"/>
<TopLine Value="91"/>
<EditorIndex Value="6"/>
<UsageCount Value="112"/>
<ResourceFilename Value="uwsttypelibraryedit.lrs"/>
<UnitName Value="uwsttypelibraryedit"/>
<CursorPos X="1" Y="15"/>
<TopLine Value="1"/>
<EditorIndex Value="0"/>
<UsageCount Value="180"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
@ -60,28 +58,29 @@
<UnitName Value="parserdefs"/>
<CursorPos X="1" Y="35"/>
<TopLine Value="22"/>
<UsageCount Value="47"/>
<UsageCount Value="43"/>
</Unit2>
<Unit3>
<Filename Value="..\ws_helper\wsdl2pas_imp.pas"/>
<UnitName Value="wsdl2pas_imp"/>
<CursorPos X="1" Y="214"/>
<TopLine Value="205"/>
<EditorIndex Value="7"/>
<UsageCount Value="53"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="73"/>
<Bookmarks Count="1">
<Item0 X="1" Y="1265" ID="1"/>
<Item0 X="65" Y="748" ID="2"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit3>
<Unit4>
<Filename Value="wsdl_generator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="wsdl_generator"/>
<CursorPos X="60" Y="32"/>
<TopLine Value="11"/>
<EditorIndex Value="15"/>
<UsageCount Value="112"/>
<CursorPos X="2" Y="16"/>
<TopLine Value="3"/>
<EditorIndex Value="1"/>
<UsageCount Value="180"/>
<Bookmarks Count="1">
<Item0 X="49" Y="444" ID="1"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit4>
<Unit5>
@ -91,9 +90,9 @@
<IsPartOfProject Value="True"/>
<ResourceFilename Value="uabout.lrs"/>
<UnitName Value="uabout"/>
<CursorPos X="34" Y="13"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="112"/>
<UsageCount Value="180"/>
</Unit5>
<Unit6>
<Filename Value="ufenumedit.pas"/>
@ -102,41 +101,33 @@
<IsPartOfProject Value="True"/>
<ResourceFilename Value="ufenumedit.lrs"/>
<UnitName Value="ufEnumedit"/>
<CursorPos X="1" Y="133"/>
<TopLine Value="121"/>
<EditorIndex Value="4"/>
<UsageCount Value="112"/>
<Loaded Value="True"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="180"/>
</Unit6>
<Unit7>
<Filename Value="view_helper.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="view_helper"/>
<CursorPos X="31" Y="566"/>
<TopLine Value="560"/>
<EditorIndex Value="5"/>
<UsageCount Value="112"/>
<Loaded Value="True"/>
<CursorPos X="36" Y="14"/>
<TopLine Value="22"/>
<UsageCount Value="180"/>
</Unit7>
<Unit8>
<Filename Value="..\ws_helper\source_utils.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="source_utils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="40"/>
<EditorIndex Value="18"/>
<UsageCount Value="112"/>
<Loaded Value="True"/>
<CursorPos X="18" Y="20"/>
<TopLine Value="1"/>
<UsageCount Value="180"/>
</Unit8>
<Unit9>
<Filename Value="edit_helper.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="edit_helper"/>
<CursorPos X="15" Y="54"/>
<TopLine Value="32"/>
<EditorIndex Value="3"/>
<UsageCount Value="112"/>
<Loaded Value="True"/>
<CursorPos X="36" Y="68"/>
<TopLine Value="49"/>
<UsageCount Value="180"/>
</Unit9>
<Unit10>
<Filename Value="ufclassedit.pas"/>
@ -145,11 +136,9 @@
<IsPartOfProject Value="True"/>
<ResourceFilename Value="ufclassedit.lrs"/>
<UnitName Value="ufclassedit"/>
<CursorPos X="1" Y="129"/>
<TopLine Value="113"/>
<EditorIndex Value="0"/>
<UsageCount Value="112"/>
<Loaded Value="True"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="180"/>
</Unit10>
<Unit11>
<Filename Value="ufpropedit.pas"/>
@ -157,237 +146,446 @@
<IsPartOfProject Value="True"/>
<ResourceFilename Value="ufpropedit.lrs"/>
<UnitName Value="ufpropedit"/>
<CursorPos X="27" Y="201"/>
<TopLine Value="178"/>
<EditorIndex Value="14"/>
<UsageCount Value="112"/>
<Loaded Value="True"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="180"/>
</Unit11>
<Unit12>
<Filename Value="..\..\..\..\lazarus23_213\lcl\comctrls.pp"/>
<UnitName Value="ComCtrls"/>
<CursorPos X="15" Y="1781"/>
<TopLine Value="1768"/>
<UsageCount Value="6"/>
<UsageCount Value="2"/>
</Unit12>
<Unit13>
<Filename Value="..\..\..\..\lazarus23_213\lcl\include\listitems.inc"/>
<CursorPos X="53" Y="288"/>
<TopLine Value="270"/>
<UsageCount Value="2"/>
</Unit13>
<Unit14>
<Filename Value="umain.lfm"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="2"/>
<SyntaxHighlighter Value="LFM"/>
</Unit14>
<Unit15>
<Filename Value="..\ws_helper\parserutils.pas"/>
<UnitName Value="parserutils"/>
<CursorPos X="17" Y="20"/>
<TopLine Value="19"/>
<EditorIndex Value="2"/>
<UsageCount Value="38"/>
<Loaded Value="True"/>
</Unit15>
<Unit16>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="61"/>
</Unit13>
<Unit14>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\i386\i386.inc"/>
<CursorPos X="2" Y="1284"/>
<TopLine Value="1263"/>
<UsageCount Value="3"/>
</Unit16>
<Unit17>
<UsageCount Value="9"/>
</Unit14>
<Unit15>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\except.inc"/>
<CursorPos X="1" Y="223"/>
<TopLine Value="209"/>
<UsageCount Value="3"/>
</Unit17>
<Unit18>
<UsageCount Value="9"/>
</Unit15>
<Unit16>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\objpas.inc"/>
<CursorPos X="1" Y="152"/>
<TopLine Value="138"/>
<UsageCount Value="15"/>
</Unit18>
<Unit19>
<UsageCount Value="11"/>
</Unit16>
<Unit17>
<Filename Value="ufclassedit.lrs"/>
<CursorPos X="39" Y="2"/>
<TopLine Value="1"/>
<UsageCount Value="6"/>
</Unit19>
<Unit20>
<UsageCount Value="2"/>
</Unit17>
<Unit18>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\inc\wstrings.inc"/>
<CursorPos X="1" Y="317"/>
<TopLine Value="303"/>
<UsageCount Value="6"/>
</Unit20>
<Unit21>
<UsageCount Value="2"/>
</Unit18>
<Unit19>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="3" Y="2064"/>
<TopLine Value="2041"/>
<UsageCount Value="6"/>
</Unit21>
<Unit22>
<UsageCount Value="2"/>
</Unit19>
<Unit20>
<Filename Value="..\..\..\..\lazarus23_213\lcl\stdctrls.pp"/>
<UnitName Value="StdCtrls"/>
<CursorPos X="24" Y="362"/>
<TopLine Value="348"/>
<UsageCount Value="5"/>
</Unit22>
<Unit23>
<UsageCount Value="1"/>
</Unit20>
<Unit21>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="12" Y="64"/>
<TopLine Value="49"/>
<UsageCount Value="5"/>
</Unit23>
<Unit24>
<UsageCount Value="1"/>
</Unit21>
<Unit22>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\classes\stringl.inc"/>
<CursorPos X="15" Y="1071"/>
<TopLine Value="1056"/>
<UsageCount Value="5"/>
</Unit24>
<Unit25>
<UsageCount Value="1"/>
</Unit22>
<Unit23>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\types.pp"/>
<UnitName Value="types"/>
<CursorPos X="6" Y="15"/>
<TopLine Value="1"/>
<UsageCount Value="5"/>
</Unit25>
<Unit26>
<UsageCount Value="1"/>
</Unit23>
<Unit24>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="10" Y="104"/>
<TopLine Value="90"/>
<UsageCount Value="5"/>
</Unit26>
<Unit27>
<UsageCount Value="1"/>
</Unit24>
<Unit25>
<Filename Value="..\..\..\..\lazarus23_213\fpc\2.1.3\source\rtl\objpas\sysutils\sysstr.inc"/>
<CursorPos X="1" Y="689"/>
<TopLine Value="686"/>
<UsageCount Value="5"/>
</Unit27>
<Unit28>
<UsageCount Value="1"/>
</Unit25>
<Unit26>
<Filename Value="uinterfaceedit.pas"/>
<ComponentName Value="fInterfaceEdit"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="uinterfaceedit.lrs"/>
<UnitName Value="uinterfaceedit"/>
<CursorPos X="26" Y="36"/>
<TopLine Value="127"/>
<EditorIndex Value="1"/>
<UsageCount Value="76"/>
<Loaded Value="True"/>
</Unit28>
<Unit29>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="144"/>
</Unit26>
<Unit27>
<Filename Value="uinterfaceedit.lfm"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="5"/>
<UsageCount Value="1"/>
<SyntaxHighlighter Value="LFM"/>
</Unit29>
<Unit30>
</Unit27>
<Unit28>
<Filename Value="udm.pas"/>
<ComponentName Value="DM"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="udm.lrs"/>
<UnitName Value="udm"/>
<CursorPos X="68" Y="11"/>
<CursorPos X="15" Y="2"/>
<TopLine Value="1"/>
<UsageCount Value="71"/>
</Unit30>
<Unit31>
<UsageCount Value="139"/>
</Unit28>
<Unit29>
<Filename Value="..\..\..\..\lazarus23_213\lcl\include\treeview.inc"/>
<CursorPos X="25" Y="68"/>
<TopLine Value="61"/>
<UsageCount Value="10"/>
</Unit31>
<Unit32>
<UsageCount Value="6"/>
</Unit29>
<Unit30>
<Filename Value="..\ws_helper\pascal_parser_intf.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="pascal_parser_intf"/>
<CursorPos X="20" Y="540"/>
<TopLine Value="528"/>
<EditorIndex Value="12"/>
<UsageCount Value="34"/>
<Loaded Value="True"/>
</Unit32>
<Unit33>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="102"/>
</Unit30>
<Unit31>
<Filename Value="..\ws_helper\pparser.pp"/>
<IsPartOfProject Value="True"/>
<UnitName Value="PParser"/>
<CursorPos X="25" Y="22"/>
<TopLine Value="7"/>
<EditorIndex Value="16"/>
<UsageCount Value="34"/>
<Loaded Value="True"/>
</Unit33>
<Unit34>
<UsageCount Value="102"/>
</Unit31>
<Unit32>
<Filename Value="..\ws_helper\logger_intf.pas"/>
<UnitName Value="logger_intf"/>
<CursorPos X="5" Y="43"/>
<TopLine Value="29"/>
<EditorIndex Value="11"/>
<UsageCount Value="26"/>
<Loaded Value="True"/>
</Unit34>
<Unit35>
<CursorPos X="2" Y="12"/>
<TopLine Value="37"/>
<UsageCount Value="37"/>
</Unit32>
<Unit33>
<Filename Value="..\ws_helper\pastree.pp"/>
<IsPartOfProject Value="True"/>
<UnitName Value="PasTree"/>
<CursorPos X="1" Y="533"/>
<TopLine Value="521"/>
<EditorIndex Value="9"/>
<UsageCount Value="34"/>
<Loaded Value="True"/>
</Unit35>
<Unit36>
<CursorPos X="3" Y="75"/>
<TopLine Value="1"/>
<UsageCount Value="102"/>
</Unit33>
<Unit34>
<Filename Value="..\..\..\..\lazarus_23_215\lcl\include\treeview.inc"/>
<CursorPos X="35" Y="71"/>
<TopLine Value="58"/>
<UsageCount Value="9"/>
</Unit36>
<Unit37>
<UsageCount Value="5"/>
</Unit34>
<Unit35>
<Filename Value="..\..\..\..\lazarus23_213\lcl\include\customcheckbox.inc"/>
<CursorPos X="1" Y="120"/>
<TopLine Value="108"/>
<UsageCount Value="10"/>
</Unit37>
<Unit38>
<UsageCount Value="6"/>
</Unit35>
<Unit36>
<Filename Value="umain.lrs"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
</Unit38>
<Unit39>
<UsageCount Value="8"/>
</Unit36>
<Unit37>
<Filename Value="..\wst_rtti_filter\rtti_filters.pas"/>
<UnitName Value="rtti_filters"/>
<CursorPos X="3" Y="296"/>
<TopLine Value="305"/>
<EditorIndex Value="10"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
</Unit39>
<Unit40>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="24"/>
</Unit37>
<Unit38>
<Filename Value="..\ws_helper\generator.pas"/>
<UnitName Value="generator"/>
<CursorPos X="53" Y="2145"/>
<TopLine Value="2127"/>
<EditorIndex Value="13"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
</Unit40>
<Unit41>
<CursorPos X="1" Y="1"/>
<TopLine Value="10"/>
<UsageCount Value="24"/>
</Unit38>
<Unit39>
<Filename Value="..\wst_rtti_filter\dom_cursors.pas"/>
<UnitName Value="dom_cursors"/>
<CursorPos X="3" Y="17"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<EditorIndex Value="8"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
<UsageCount Value="21"/>
</Unit39>
<Unit40>
<Filename Value="..\ws_helper\command_line_parser.pas"/>
<UnitName Value="command_line_parser"/>
<CursorPos X="20" Y="31"/>
<TopLine Value="17"/>
<UsageCount Value="22"/>
</Unit40>
<Unit41>
<Filename Value="..\..\..\..\..\lazarus_23_215\lcl\forms.pp"/>
<UnitName Value="Forms"/>
<CursorPos X="44" Y="10"/>
<TopLine Value="1"/>
<UsageCount Value="8"/>
</Unit41>
<Unit42>
<Filename Value="..\ws_helper\pscanner.pp"/>
<UnitName Value="PScanner"/>
<CursorPos X="19" Y="505"/>
<TopLine Value="491"/>
<UsageCount Value="8"/>
</Unit42>
<Unit43>
<Filename Value="..\ws_helper\metadata_generator.pas"/>
<UnitName Value="metadata_generator"/>
<CursorPos X="11" Y="20"/>
<TopLine Value="14"/>
<UsageCount Value="8"/>
</Unit43>
<Unit44>
<Filename Value="..\ide\lazarus\wst_register.pas"/>
<UnitName Value="wst_register"/>
<CursorPos X="42" Y="6"/>
<TopLine Value="1"/>
<UsageCount Value="12"/>
</Unit44>
<Unit45>
<Filename Value="..\..\..\..\..\lazarus_23_215\ideintf\menuintf.pas"/>
<UnitName Value="MenuIntf"/>
<CursorPos X="53" Y="417"/>
<TopLine Value="409"/>
<UsageCount Value="9"/>
</Unit45>
<Unit46>
<Filename Value="..\ide\lazarus\wstimportdlg.pas"/>
<ComponentName Value="formImport"/>
<HasResources Value="True"/>
<UnitName Value="wstimportdlg"/>
<CursorPos X="42" Y="71"/>
<TopLine Value="52"/>
<UsageCount Value="12"/>
</Unit46>
<Unit47>
<Filename Value="..\..\..\..\..\lazarus_23_215\ideintf\lazideintf.pas"/>
<UnitName Value="LazIDEIntf"/>
<CursorPos X="33" Y="174"/>
<TopLine Value="162"/>
<UsageCount Value="8"/>
</Unit47>
<Unit48>
<Filename Value="..\..\..\..\..\lazarus_23_215\ideintf\projectintf.pas"/>
<UnitName Value="ProjectIntf"/>
<CursorPos X="3" Y="284"/>
<TopLine Value="262"/>
<UsageCount Value="8"/>
</Unit48>
<Unit49>
<Filename Value="..\..\..\..\..\lazarus_23_215\ideintf\idecommands.pas"/>
<UnitName Value="IDECommands"/>
<CursorPos X="47" Y="291"/>
<TopLine Value="279"/>
<UsageCount Value="8"/>
</Unit49>
<Unit50>
<Filename Value="uprocedit.pas"/>
<ComponentName Value="fProcEdit"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="uprocedit.lrs"/>
<UnitName Value="uprocedit"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="58"/>
</Unit50>
<Unit51>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\lcl\comctrls.pp"/>
<UnitName Value="ComCtrls"/>
<CursorPos X="4" Y="1660"/>
<TopLine Value="1660"/>
<UsageCount Value="8"/>
</Unit51>
<Unit52>
<Filename Value="common_gui_utils.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="common_gui_utils"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="56"/>
</Unit52>
<Unit53>
<Filename Value="..\..\..\..\..\DOCUME~1\ADMINI~1\LOCALS~1\Temp\DestBug.pas"/>
<UnitName Value="DestBug"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="8"/>
</Unit53>
<Unit54>
<Filename Value="uargedit.pas"/>
<ComponentName Value="fArgEdit"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="uargedit.lrs"/>
<UnitName Value="uargedit"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="49"/>
</Unit54>
<Unit55>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\lcl\interfaces\win32\win32wscontrols.pp"/>
<UnitName Value="Win32WSControls"/>
<CursorPos X="1" Y="226"/>
<TopLine Value="212"/>
<UsageCount Value="9"/>
</Unit55>
<Unit56>
<Filename Value="umain.lfm"/>
<CursorPos X="19" Y="1822"/>
<TopLine Value="1858"/>
<UsageCount Value="9"/>
<SyntaxHighlighter Value="LFM"/>
</Unit56>
<Unit57>
<Filename Value="umoduleedit.pas"/>
<ComponentName Value="fModuleEdit"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="umoduleedit.lrs"/>
<UnitName Value="umoduleedit"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="41"/>
</Unit57>
<Unit58>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\lcl\stdctrls.pp"/>
<UnitName Value="StdCtrls"/>
<CursorPos X="3" Y="1020"/>
<TopLine Value="1006"/>
<UsageCount Value="9"/>
</Unit58>
<Unit59>
<Filename Value="ubindingedit.pas"/>
<ComponentName Value="fBindingEdit"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="ubindingedit.lrs"/>
<UnitName Value="ubindingedit"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="31"/>
</Unit59>
<Unit60>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpash.inc"/>
<CursorPos X="26" Y="158"/>
<TopLine Value="135"/>
<UsageCount Value="10"/>
</Unit60>
<Unit61>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpas.inc"/>
<CursorPos X="11" Y="550"/>
<TopLine Value="645"/>
<UsageCount Value="10"/>
</Unit61>
<Unit62>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="14" Y="248"/>
<TopLine Value="226"/>
<UsageCount Value="10"/>
</Unit62>
<Unit63>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\classes\lists.inc"/>
<CursorPos X="3" Y="408"/>
<TopLine Value="406"/>
<UsageCount Value="10"/>
</Unit63>
<Unit64>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-base\src\inc\contnrs.pp"/>
<UnitName Value="contnrs"/>
<CursorPos X="3" Y="701"/>
<TopLine Value="698"/>
<UsageCount Value="10"/>
</Unit64>
<Unit65>
<Filename Value="ufrmsaveoption.pas"/>
<ComponentName Value="frmSaveOptions"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="ufrmsaveoption.lrs"/>
<UnitName Value="ufrmsaveoption"/>
<CursorPos X="42" Y="64"/>
<TopLine Value="42"/>
<UsageCount Value="27"/>
</Unit65>
<Unit66>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\lcl\dialogs.pp"/>
<UnitName Value="Dialogs"/>
<CursorPos X="3" Y="44"/>
<TopLine Value="27"/>
<UsageCount Value="10"/>
</Unit66>
<Unit67>
<Filename Value="..\..\..\..\..\lazarus_23_215XX\fpc\source\packages\fcl-xml\src\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="3" Y="1459"/>
<TopLine Value="1455"/>
<UsageCount Value="10"/>
</Unit67>
<Unit68>
<Filename Value="..\wst_rtti_filter\cursor_intf.pas"/>
<UnitName Value="cursor_intf"/>
<CursorPos X="2" Y="12"/>
<TopLine Value="1"/>
<UsageCount Value="10"/>
</Unit68>
</Units>
<JumpHistory Count="0" HistoryIndex="-1"/>
<JumpHistory Count="6" HistoryIndex="5">
<Position1>
<Filename Value="uwsttypelibraryedit.pas"/>
<Caret Line="13" Column="3" TopLine="1"/>
</Position1>
<Position2>
<Filename Value="uwsttypelibraryedit.pas"/>
<Caret Line="136" Column="52" TopLine="120"/>
</Position2>
<Position3>
<Filename Value="uwsttypelibraryedit.pas"/>
<Caret Line="135" Column="16" TopLine="112"/>
</Position3>
<Position4>
<Filename Value="uwsttypelibraryedit.pas"/>
<Caret Line="135" Column="16" TopLine="112"/>
</Position4>
<Position5>
<Filename Value="uwsttypelibraryedit.pas"/>
<Caret Line="23" Column="18" TopLine="1"/>
</Position5>
<Position6>
<Filename Value="wsdl_generator.pas"/>
<Caret Line="963" Column="5" TopLine="886"/>
</Position6>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>
@ -412,7 +610,6 @@
<Linking>
<Debugging>
<GenerateDebugInfo Value="True"/>
<UseHeaptrc Value="True"/>
</Debugging>
<Options>
<Win32>

View File

@ -8,14 +8,14 @@ uses
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms
, umain, view_helper, source_utils, uabout, ufEnumedit,
, uwsttypelibraryedit, view_helper, source_utils, uabout, ufEnumedit,
edit_helper, ufclassedit, wsdl_generator, ufpropedit, uinterfaceedit, udm,
pascal_parser_intf, PasTree, PParser;
pascal_parser_intf, PasTree, PParser, uprocedit, common_gui_utils, uargedit,
umoduleedit, ubindingedit, ufrmsaveoption;
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TfMain, fMain);
Application.CreateForm (TfWstTypeLibraryEdit, fWstTypeLibraryEdit );
Application.Run;
end.

View File

@ -18,7 +18,6 @@ object fAbout: TfAbout
Top = 24
Width = 211
Caption = 'Web Services Toolkit for FPC/Lazarus'
Color = clNone
Font.Style = [fsBold]
ParentColor = False
end
@ -28,7 +27,6 @@ object fAbout: TfAbout
Top = 56
Width = 113
Caption = 'Type Librarry Editor'
Color = clNone
Font.Style = [fsBold, fsItalic]
ParentColor = False
end
@ -38,7 +36,6 @@ object fAbout: TfAbout
Top = 112
Width = 200
Caption = 'Copyright (c) 2007 Inoussa OUEDRAOGO'
Color = clNone
ParentColor = False
end
object Button1: TButton

View File

@ -7,13 +7,12 @@ LazarusResources.Add('TfAbout','FORMDATA',[
+'derStyle'#7#8'bsDialog'#7'Caption'#6#5'About'#12'ClientHeight'#3#182#0#11'C'
+'lientWidth'#3'+'#1#8'Position'#7#15'poDesktopCenter'#0#6'TLabel'#6'Label1'#4
+'Left'#2','#6'Height'#2#14#3'Top'#2#24#5'Width'#3#211#0#7'Caption'#6'$Web Se'
+'rvices Toolkit for FPC/Lazarus'#5'Color'#7#6'clNone'#10'Font.Style'#11#6'fs'
+'Bold'#0#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2']'#6'Height'#2
+#14#3'Top'#2'8'#5'Width'#2'q'#7'Caption'#6#20'Type Librarry Editor'#5'Color'
+#7#6'clNone'#10'Font.Style'#11#6'fsBold'#8'fsItalic'#0#11'ParentColor'#8#0#0
+#6'TLabel'#6'Label3'#4'Left'#2'1'#6'Height'#2#14#3'Top'#2'p'#5'Width'#3#200#0
+#7'Caption'#6'$Copyright (c) 2007 Inoussa OUEDRAOGO'#5'Color'#7#6'clNone'#11
+'ParentColor'#8#0#0#7'TButton'#7'Button1'#4'Left'#2'p'#6'Height'#2#25#3'Top'
+#3#142#0#5'Width'#2'K'#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#2'OK'
+#11'ModalResult'#2#1#8'TabOrder'#2#0#0#0#0
+'rvices Toolkit for FPC/Lazarus'#10'Font.Style'#11#6'fsBold'#0#11'ParentColo'
+'r'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2']'#6'Height'#2#14#3'Top'#2'8'#5'Widt'
+'h'#2'q'#7'Caption'#6#20'Type Librarry Editor'#10'Font.Style'#11#6'fsBold'#8
+'fsItalic'#0#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2'1'#6'Height'
+#2#14#3'Top'#2'p'#5'Width'#3#200#0#7'Caption'#6'$Copyright (c) 2007 Inoussa '
+'OUEDRAOGO'#11'ParentColor'#8#0#0#7'TButton'#7'Button1'#4'Left'#2'p'#6'Heigh'
+'t'#2#25#3'Top'#3#142#0#5'Width'#2'K'#25'BorderSpacing.InnerBorder'#2#4#7'Ca'
+'ption'#6#2'OK'#11'ModalResult'#2#1#8'TabOrder'#2#0#0#0#0
]);

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit uabout;
{$mode objfpc}{$H+}

View File

@ -0,0 +1,133 @@
object fArgEdit: TfArgEdit
Left = 755
Height = 393
Top = 180
Width = 400
HorzScrollBar.Page = 399
VertScrollBar.Page = 392
ActiveControl = Button1
BorderStyle = bsSizeToolWin
Caption = 'fArgEdit'
ClientHeight = 393
ClientWidth = 400
Position = poMainFormCenter
object Panel1: TPanel
Height = 50
Top = 343
Width = 400
Align = alBottom
ClientHeight = 50
ClientWidth = 400
TabOrder = 0
object Button1: TButton
Left = 224
Height = 25
Top = 11
Width = 75
Action = actOK
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
Default = True
TabOrder = 0
end
object Button2: TButton
Left = 312
Height = 25
Top = 10
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
end
object PageControl1: TPageControl
Height = 343
Width = 400
ActivePage = TabSheet1
Align = alClient
TabIndex = 0
TabOrder = 1
object TabSheet1: TTabSheet
Caption = 'Argument'
ClientHeight = 317
ClientWidth = 392
object Label1: TLabel
Left = 20
Height = 14
Top = 26
Width = 28
Caption = 'Name'
ParentColor = False
end
object Label2: TLabel
Left = 20
Height = 14
Top = 95
Width = 25
Caption = 'Type'
ParentColor = False
end
object edtName: TEdit
Left = 20
Height = 23
Top = 47
Width = 352
Anchors = [akTop, akLeft, akRight]
TabOrder = 0
Text = 'edtName'
end
object edtType: TComboBox
Left = 20
Height = 21
Top = 114
Width = 352
Anchors = [akTop, akLeft, akRight]
AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending]
ItemHeight = 13
MaxLength = 0
Style = csDropDownList
TabOrder = 1
end
object edtModifier: TRadioGroup
Left = 20
Height = 133
Top = 157
Width = 352
Anchors = [akTop, akLeft, akRight, akBottom]
AutoFill = True
Caption = ' Modifier '
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 2
ClientHeight = 115
ClientWidth = 348
Columns = 2
Items.Strings = (
'Default'
'Const'
'Var'
'Out'
)
TabOrder = 2
end
end
end
object AL: TActionList
left = 152
top = 213
object actOK: TAction
Caption = 'OK'
DisableIfNoHandler = True
OnExecute = actOKExecute
OnUpdate = actOKUpdate
end
end
end

View File

@ -0,0 +1,39 @@
LazarusResources.Add('TfArgEdit','FORMDATA',[
'TPF0'#9'TfArgEdit'#8'fArgEdit'#4'Left'#3#243#2#6'Height'#3#137#1#3'Top'#3#180
+#0#5'Width'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Page'#3
+#136#1#13'ActiveControl'#7#7'Button1'#11'BorderStyle'#7#13'bsSizeToolWin'#7
+'Caption'#6#8'fArgEdit'#12'ClientHeight'#3#137#1#11'ClientWidth'#3#144#1#8'P'
+'osition'#7#16'poMainFormCenter'#0#6'TPanel'#6'Panel1'#6'Height'#2'2'#3'Top'
+#3'W'#1#5'Width'#3#144#1#5'Align'#7#8'alBottom'#12'ClientHeight'#2'2'#11'Cli'
+'entWidth'#3#144#1#8'TabOrder'#2#0#0#7'TButton'#7'Button1'#4'Left'#3#224#0#6
+'Height'#2#25#3'Top'#2#11#5'Width'#2'K'#6'Action'#7#5'actOK'#7'Anchors'#11#5
+'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#7'Default'#9#8'TabOrd'
+'er'#2#0#0#0#7'TButton'#7'Button2'#4'Left'#3'8'#1#6'Height'#2#25#3'Top'#2#10
+#5'Width'#2'K'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBor'
+'der'#2#4#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'
+#2#1#0#0#0#12'TPageControl'#12'PageControl1'#6'Height'#3'W'#1#5'Width'#3#144
+#1#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'Ta'
+'bOrder'#2#1#0#9'TTabSheet'#9'TabSheet1'#7'Caption'#6#8'Argument'#12'ClientH'
+'eight'#3'='#1#11'ClientWidth'#3#136#1#0#6'TLabel'#6'Label1'#4'Left'#2#20#6
+'Height'#2#14#3'Top'#2#26#5'Width'#2#28#7'Caption'#6#4'Name'#11'ParentColor'
+#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#20#6'Height'#2#14#3'Top'#2'_'#5'Width'#2
+#25#7'Caption'#6#4'Type'#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2
+#20#6'Height'#2#23#3'Top'#2'/'#5'Width'#3'`'#1#7'Anchors'#11#5'akTop'#6'akLe'
+'ft'#7'akRight'#0#8'TabOrder'#2#0#4'Text'#6#7'edtName'#0#0#9'TComboBox'#7'ed'
+'tType'#4'Left'#2#20#6'Height'#2#21#3'Top'#2'r'#5'Width'#3'`'#1#7'Anchors'#11
+#5'akTop'#6'akLeft'#7'akRight'#0#16'AutoCompleteText'#11#22'cbactEndOfLineCo'
+'mplete'#20'cbactSearchAscending'#0#10'ItemHeight'#2#13#9'MaxLength'#2#0#5'S'
+'tyle'#7#14'csDropDownList'#8'TabOrder'#2#1#0#0#11'TRadioGroup'#11'edtModifi'
+'er'#4'Left'#2#20#6'Height'#3#133#0#3'Top'#3#157#0#5'Width'#3'`'#1#7'Anchors'
+#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8'AutoFill'#9#7'Caption'#6#12
+' Modifier '#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottom'
+'Spacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResiz'
+'e'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildS'
+'izing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'
+#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBot'
+'tom'#27'ChildSizing.ControlsPerLine'#2#2#12'ClientHeight'#2's'#11'ClientWid'
+'th'#3'\'#1#7'Columns'#2#2#13'Items.Strings'#1#6#7'Default'#6#5'Const'#6#3'V'
+'ar'#6#3'Out'#0#8'TabOrder'#2#2#0#0#0#0#11'TActionList'#2'AL'#4'left'#3#152#0
+#3'top'#3#213#0#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18'DisableIfNoHandl'
+'er'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#0#0
]);

View File

@ -0,0 +1,157 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit uargedit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
ComCtrls, StdCtrls, ActnList,
pastree, pascal_parser_intf, edit_helper, Buttons;
type
{ TfArgEdit }
TfArgEdit = class(TForm)
actOK: TAction;
AL: TActionList;
Button1: TButton;
Button2: TButton;
edtType: TComboBox;
edtName: TEdit;
Label1: TLabel;
Label2: TLabel;
PageControl1: TPageControl;
Panel1: TPanel;
edtModifier: TRadioGroup;
TabSheet1: TTabSheet;
procedure actOKExecute(Sender: TObject);
procedure actOKUpdate(Sender: TObject);
private
FUpdateType : TEditType;
FObject : TPasArgument;
FSymbolTable : TwstPasTreeContainer;
private
property UpdateType : TEditType read FUpdateType;
private
procedure LoadFromObject();
procedure SaveToObject();
public
function UpdateObject(
var AObject : TPasArgument;
const AUpdateType : TEditType;
ASymbolTable : TwstPasTreeContainer
) : Boolean;
end;
var
fArgEdit: TfArgEdit;
implementation
uses parserutils;
{ TfArgEdit }
procedure TfArgEdit.actOKUpdate(Sender: TObject);
var
b : Boolean;
i : Integer;
locArg : TPasArgument;
argList : TList;
begin
b := ( not IsStrEmpty(edtName.Text) ) and
( edtType.ItemIndex > -1 );
if b then begin
argList := TPasProcedureType(FObject.Parent).Args;
for i := 0 to Pred(argList.Count) do begin
locArg := TPasArgument(argList[i]);
if ( locArg <> FObject ) and
( AnsiSameText(locArg.Name,FObject.Name) or
AnsiSameText(FSymbolTable.GetExternalName(locArg),FSymbolTable.GetExternalName(FObject))
)
then begin
b := False;
Break;
end;
end;
end;
TAction(Sender).Enabled := b;
end;
procedure TfArgEdit.actOKExecute(Sender: TObject);
begin
ModalResult := mrOK;
end;
procedure TfArgEdit.LoadFromObject();
begin
edtName.Text := FSymbolTable.GetExternalName(FObject);
edtModifier.ItemIndex := Ord(FObject.Access);
Caption := edtName.Caption;
edtType.Items.BeginUpdate();
try
edtType.Items.Clear();
FillTypeList(edtType.Items,FSymbolTable);
edtType.ItemIndex := edtType.Items.IndexOfObject(FObject.ArgType);
finally
edtType.Items.EndUpdate();
end;
end;
procedure TfArgEdit.SaveToObject();
var
locObj : TPasArgument;
typExtName, typIntName : string;
propType : TPasType;
begin
locObj := nil;
typExtName := ExtractIdentifier(edtName.Text);
typIntName := MakeInternalSymbolNameFrom(typExtName);
propType := edtType.Items.Objects[edtType.ItemIndex] as TPasType;
locObj := FObject;
if ( propType <> locObj.ArgType ) then begin
if ( locObj.ArgType <> nil ) then
locObj.ArgType.Release();
locObj.ArgType := propType;
locObj.ArgType.AddRef();
end;
locObj.Name := typIntName;
FSymbolTable.RegisterExternalAlias(locObj,typExtName);
locObj.Access := TArgumentAccess(edtModifier.ItemIndex);
end;
function TfArgEdit.UpdateObject(
var AObject: TPasArgument;
const AUpdateType: TEditType;
ASymbolTable: TwstPasTreeContainer
): Boolean;
begin
FSymbolTable := ASymbolTable;
FUpdateType := AUpdateType;
FObject := AObject;
LoadFromObject();
Result := ( ShowModal() = mrOK );
if Result then begin
SaveToObject();
AObject := FObject;
end;
end;
initialization
{$I uargedit.lrs}
end.

View File

@ -0,0 +1,127 @@
object fBindingEdit: TfBindingEdit
Left = 759
Height = 354
Top = 90
Width = 400
HorzScrollBar.Page = 399
VertScrollBar.Page = 353
ActiveControl = edtName
BorderStyle = bsSizeToolWin
Caption = 'fBindingEdit'
ClientHeight = 354
ClientWidth = 400
Position = poMainFormCenter
object Panel1: TPanel
Height = 50
Top = 304
Width = 400
Align = alBottom
ClientHeight = 50
ClientWidth = 400
TabOrder = 0
object Button1: TButton
Left = 224
Height = 25
Top = 10
Width = 75
Action = actOK
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
Default = True
TabOrder = 0
end
object Button2: TButton
Left = 312
Height = 25
Top = 10
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
end
object PageControl1: TPageControl
Height = 304
Width = 400
ActivePage = TabSheet1
Align = alClient
TabIndex = 0
TabOrder = 1
object TabSheet1: TTabSheet
Caption = 'Interface Binding'
ClientHeight = 278
ClientWidth = 392
object Label1: TLabel
Left = 12
Height = 14
Top = 26
Width = 28
Caption = 'Name'
ParentColor = False
end
object Label2: TLabel
Left = 12
Height = 14
Top = 98
Width = 40
Caption = 'Address'
ParentColor = False
end
object edtName: TEdit
Left = 12
Height = 23
Top = 50
Width = 360
Anchors = [akTop, akLeft, akRight]
TabOrder = 0
Text = 'edtName'
end
object edtAddress: TEdit
Left = 12
Height = 23
Top = 114
Width = 360
Anchors = [akTop, akLeft, akRight]
TabOrder = 1
Text = 'edtAddress'
end
object edtStyle: TRadioGroup
Left = 12
Height = 92
Top = 165
Width = 360
AutoFill = True
Caption = ' Style '
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 2
ClientHeight = 74
ClientWidth = 356
Columns = 2
Items.Strings = (
'Document'
'RPC'
)
TabOrder = 2
end
end
end
object AL: TActionList
left = 85
top = 100
object actOK: TAction
Caption = 'OK'
DisableIfNoHandler = True
OnExecute = actOKExecute
OnUpdate = actOKUpdate
end
end
end

View File

@ -0,0 +1,39 @@
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
LazarusResources.Add('TfBindingEdit','FORMDATA',[
'TPF0'#13'TfBindingEdit'#12'fBindingEdit'#4'Left'#3#247#2#6'Height'#3'b'#1#3
+'Top'#2'Z'#5'Width'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.'
+'Page'#3'a'#1#13'ActiveControl'#7#7'edtName'#11'BorderStyle'#7#13'bsSizeTool'
+'Win'#7'Caption'#6#12'fBindingEdit'#12'ClientHeight'#3'b'#1#11'ClientWidth'#3
+#144#1#8'Position'#7#16'poMainFormCenter'#0#6'TPanel'#6'Panel1'#6'Height'#2
+'2'#3'Top'#3'0'#1#5'Width'#3#144#1#5'Align'#7#8'alBottom'#12'ClientHeight'#2
+'2'#11'ClientWidth'#3#144#1#8'TabOrder'#2#0#0#7'TButton'#7'Button1'#4'Left'#3
+#224#0#6'Height'#2#25#3'Top'#2#10#5'Width'#2'K'#6'Action'#7#5'actOK'#7'Ancho'
+'rs'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#7'Default'#9
+#8'TabOrder'#2#0#0#0#7'TButton'#7'Button2'#4'Left'#3'8'#1#6'Height'#2#25#3'T'
+'op'#2#10#5'Width'#2'K'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing'
+'.InnerBorder'#2#4#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8
+'TabOrder'#2#1#0#0#0#12'TPageControl'#12'PageControl1'#6'Height'#3'0'#1#5'Wi'
+'dth'#3#144#1#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabInde'
+'x'#2#0#8'TabOrder'#2#1#0#9'TTabSheet'#9'TabSheet1'#7'Caption'#6#17'Interfac'
+'e Binding'#12'ClientHeight'#3#22#1#11'ClientWidth'#3#136#1#0#6'TLabel'#6'La'
+'bel1'#4'Left'#2#12#6'Height'#2#14#3'Top'#2#26#5'Width'#2#28#7'Caption'#6#4
+'Name'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#12#6'Height'#2#14
+#3'Top'#2'b'#5'Width'#2'('#7'Caption'#6#7'Address'#11'ParentColor'#8#0#0#5'T'
+'Edit'#7'edtName'#4'Left'#2#12#6'Height'#2#23#3'Top'#2'2'#5'Width'#3'h'#1#7
+'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#0#4'Text'#6#7'edt'
+'Name'#0#0#5'TEdit'#10'edtAddress'#4'Left'#2#12#6'Height'#2#23#3'Top'#2'r'#5
+'Width'#3'h'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#1
+#4'Text'#6#10'edtAddress'#0#0#11'TRadioGroup'#8'edtStyle'#4'Left'#2#12#6'Hei'
+'ght'#2'\'#3'Top'#3#165#0#5'Width'#3'h'#1#8'AutoFill'#9#7'Caption'#6#9' Sty'
+'le '#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'
+#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'Chi'
+'ldSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.Shr'
+'inkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crs'
+'ScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27
+'ChildSizing.ControlsPerLine'#2#2#12'ClientHeight'#2'J'#11'ClientWidth'#3'd'
+#1#7'Columns'#2#2#13'Items.Strings'#1#6#8'Document'#6#3'RPC'#0#8'TabOrder'#2
+#2#0#0#0#0#11'TActionList'#2'AL'#4'left'#2'U'#3'top'#2'd'#0#7'TAction'#5'act'
+'OK'#7'Caption'#6#2'OK'#18'DisableIfNoHandler'#9#9'OnExecute'#7#12'actOKExec'
+'ute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#0#0
]);

View File

@ -0,0 +1,120 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit ubindingedit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
ComCtrls, StdCtrls, ActnList,
pastree, pascal_parser_intf,
edit_helper;
type
{ TfBindingEdit }
TfBindingEdit = class(TForm)
actOK: TAction;
AL: TActionList;
Button1: TButton;
Button2: TButton;
edtName: TEdit;
edtAddress: TEdit;
Label1: TLabel;
Label2: TLabel;
PageControl1: TPageControl;
Panel1: TPanel;
edtStyle: TRadioGroup;
TabSheet1: TTabSheet;
procedure actOKExecute(Sender: TObject);
procedure actOKUpdate(Sender: TObject);
private
FUpdateType : TEditType;
FObject : TwstBinding;
FSymbolTable : TwstPasTreeContainer;
private
property UpdateType : TEditType read FUpdateType;
private
procedure LoadFromObject();
procedure SaveToObject();
public
function UpdateObject(
var AObject : TwstBinding;
const AUpdateType : TEditType;
ASymbolTable : TwstPasTreeContainer
):Boolean;
end;
var
fBindingEdit: TfBindingEdit;
implementation
uses parserutils;
{ TfBindingEdit }
procedure TfBindingEdit.actOKUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := ( not IsStrEmpty(edtName.Text) ) and ( edtStyle.ItemIndex >= 0 );
end;
procedure TfBindingEdit.actOKExecute(Sender: TObject);
begin
ModalResult := mrOK;
end;
procedure TfBindingEdit.LoadFromObject();
var
i : Integer;
begin
edtName.Text := FSymbolTable.GetExternalName(FObject);
Caption := edtName.Text;
edtAddress.Text := FObject.Address;
i := Ord(FObject.BindingStyle);
if ( i > Pred(edtStyle.Items.Count) ) then
i := Pred(edtStyle.Items.Count);
edtStyle.ItemIndex := i;
end;
procedure TfBindingEdit.SaveToObject();
begin
FObject.Name := ExtractIdentifier(edtName.Text);
FObject.Address := Trim(edtAddress.Text);
FObject.BindingStyle := TBindingStyle(edtStyle.ItemIndex);
end;
function TfBindingEdit.UpdateObject(
var AObject: TwstBinding;
const AUpdateType: TEditType;
ASymbolTable: TwstPasTreeContainer
): Boolean;
begin
Assert(Assigned(ASymbolTable));
FSymbolTable := ASymbolTable;
FUpdateType := AUpdateType;
FObject := AObject;
LoadFromObject();
Result := ( ShowModal() = mrOK );
if Result then begin
SaveToObject();
end;
end;
initialization
{$I ubindingedit.lrs}
end.

View File

@ -7,7 +7,7 @@ object DM: TDM
left = 208
top = 200
Bitmap = {
6C690A0000001000000010000000DB0300002F2A2058504D202A2F0D0A737461
6C690B0000001000000010000000DB0300002F2A2058504D202A2F0D0A737461
7469632063686172202A20706B675F70726F6A6563745F78706D5B5D203D207B
0D0A2231382031382033322031222C0D0A22200963204E6F6E65222C0D0A222E
09632023413041304130222C0D0A222B09632023383038303830222C0D0A2240
@ -636,7 +636,82 @@ object DM: TDM
3E3D2A2E2020222C0D0A22202E2E263B403E2C2C3E403B262E2E20222C0D0A22
202E4025262A3D2D2D3D2A2625402E20222C0D0A2220202E402E2E232424232E
2E402E2020222C0D0A222020202E2E202E2B2B2E202E2E202020222C0D0A2220
20202020202E2E2E2E202020202020227D3B0D0A
20202020202E2E2E2E202020202020227D3B0D0A490900002F2A2058504D202A
2F0D0A7374617469632063686172202A2063655F696D706C656D656E74617469
6F6E5F78706D5B5D203D207B0D0A223136203136203130312032222C0D0A2220
200963204E6F6E65222C0D0A222E2009632023414441444144222C0D0A222B20
09632023394339423942222C0D0A22402009632023373937383738222C0D0A22
232009632023373637363736222C0D0A22242009632023364236423642222C0D
0A22252009632023384538453845222C0D0A2226200963202341334132413222
2C0D0A222A2009632023384438433842222C0D0A223D20096320233931393139
31222C0D0A222D2009632023383538353835222C0D0A223B2009632023374137
413741222C0D0A223E2009632023373137313731222C0D0A222C200963202336
3836383638222C0D0A22272009632023393039303930222C0D0A222920096320
23413041303946222C0D0A22212009632023393639343933222C0D0A227E2009
632023413041304130222C0D0A227B2009632023394139413941222C0D0A225D
2009632023393239323932222C0D0A225E2009632023383938393839222C0D0A
222F2009632023374637463746222C0D0A22282009632023373737373737222C
0D0A225F2009632023373037303730222C0D0A223A2009632023393439343934
222C0D0A223C2009632023394139383938222C0D0A225B200963202339333846
3844222C0D0A227D2009632023413641364136222C0D0A227C20096320234132
41324132222C0D0A22312009632023394239423942222C0D0A22322009632023
384238423842222C0D0A22332009632023374437443744222C0D0A2234200963
2023363936393639222C0D0A22352009632023414341434143222C0D0A223620
09632023424242414241222C0D0A22372009632023413039433942222C0D0A22
382009632023423142314231222C0D0A22392009632023414241424142222C0D
0A22302009632023413541354135222C0D0A2261200963202341344134413422
2C0D0A22622009632023394439443944222C0D0A226320096320233936393639
36222C0D0A22642009632023384438443844222C0D0A22652009632023383738
373837222C0D0A22662009632023383238323832222C0D0A2267200963202337
4337433743222C0D0A22682009632023373337333733222C0D0A226920096320
23363536353635222C0D0A226A2009632023384638463846222C0D0A226B2009
632023423542354235222C0D0A226C2009632023393339333933222C0D0A226D
2009632023394339433943222C0D0A226E2009632023413141314131222C0D0A
226F2009632023393839383938222C0D0A22702009632023373637363737222C
0D0A22712009632023383337443741222C0D0A22722009632023374336333534
222C0D0A22732009632023393939393939222C0D0A2274200963202339423942
3941222C0D0A22752009632023423342334233222C0D0A227620096320234138
41384138222C0D0A22772009632023394639463946222C0D0A22782009632023
393539353935222C0D0A22792009632023383338333833222C0D0A227A200963
2023384638373834222C0D0A22412009632023383736433543222C0D0A224220
09632023384338333831222C0D0A22432009632023384536463542222C0D0A22
442009632023413741374137222C0D0A22452009632023384538373834222C0D
0A22462009632023383536463631222C0D0A2247200963202339413930384322
2C0D0A22482009632023393437323543222C0D0A224920096320234237423342
31222C0D0A224A2009632023423539373835222C0D0A224B2009632023373437
343734222C0D0A224C2009632023383138303830222C0D0A224D200963202339
3138373832222C0D0A224E2009632023383836423541222C0D0A224F20096320
23394539333846222C0D0A22502009632023393237303543222C0D0A22512009
632023423642314146222C0D0A22522009632023424539433838222C0D0A2253
2009632023433141383938222C0D0A22542009632023363036303630222C0D0A
22552009632023393138383835222C0D0A22562009632023383935453435222C
0D0A22572009632023394238463841222C0D0A22582009632023393537323544
222C0D0A22592009632023423641464143222C0D0A225A200963202342463944
3839222C0D0A22602009632023433941423941222C0D0A22202E096320233944
39333931222C0D0A222E2E09632023393436343438222C0D0A222B2E09632023
414341364133222C0D0A22402E09632023433039453841222C0D0A22232E0963
2023433841413938222C0D0A22242E09632023423342304146222C0D0A22252E
09632023424439413835222C0D0A22262E09632023434442304130222C0D0A22
2A2E09632023434241453944222C0D0A22202020202020202020202020202020
2020202020202020202020202020202020222C0D0A2220202020202020202020
202020202020202020202E2020202020202020202020222C0D0A222020202020
20202020202020202020202B204020232024202520202020202020222C0D0A22
20202020202020202020202026202A203D202D203B203E202C20272020202020
222C0D0A222020202020202020292021207E207B205D205E202F2028205F2024
203A202020222C0D0A22202020203C205B207D207D207C2031203A2032202D20
332023205F2034203520222C0D0A223620372038203920302061207C20622063
206420652066206720682069206A20222C0D0A22352036206B206C2065206D20
6E2062206F2027205E2066207020712072206320222C0D0A227320742075207C
207620762077207B207820252079207A204120422043202020222C0D0A222E20
2D206420762044207E2031203A206520452046204720482049204A202020222C
0D0A2220206E204B2023206C203D204C204D204E204F20502051205220202053
202020222C0D0A22202020206D2054203420552056205720582059205A202020
6020202020202020222C0D0A2220202020202078205420202E2E2E2B2E402E20
20232E20202020202020202020222C0D0A2220202020202020203920242E252E
2020262E2020202020202020202020202020222C0D0A22202020202020202020
2020202A2E202020202020202020202020202020202020222C0D0A2220202020
20202020202020202020202020202020202020202020202020202020227D3B0D
0A
}
end
end

View File

@ -3,24 +3,24 @@
LazarusResources.Add('TDM','FORMDATA',[
'TPF0'#3'TDM'#2'DM'#6'Height'#3','#1#16'HorizontalOffset'#3'}'#1#14'VerticalO'
+'ffset'#3#236#0#5'Width'#3#144#1#0#10'TImageList'#2'IM'#4'left'#3#208#0#3'to'
+'p'#3#200#0#6'Bitmap'#10#180'N'#0#0'li'#10#0#0#0#16#0#0#0#16#0#0#0#219#3#0#0
+'/* XPM */'#13#10'static char * pkg_project_xpm[] = {'#13#10'"18 18 32 1",'
+#13#10'" '#9'c None",'#13#10'".'#9'c #A0A0A0",'#13#10'"+'#9'c #808080",'#13
+#10'"@'#9'c #404000",'#13#10'"#'#9'c #FFFFFF",'#13#10'"$'#9'c #DCDCDC",'#13
+#10'"%'#9'c #C0C0FF",'#13#10'"&'#9'c #C3C3C3",'#13#10'"*'#9'c #8080FF",'#13
+#10'"='#9'c #585858",'#13#10'"-'#9'c #303030",'#13#10'";'#9'c #008080",'#13
+#10'">'#9'c #004040",'#13#10'",'#9'c #FFC0C0",'#13#10'"'''#9'c #0000FF",'#13
+#10'")'#9'c #FFDCA8",'#13#10'"!'#9'c #C05800",'#13#10'"~'#9'c #FF8000",'#13
+#10'"{'#9'c #FFA858",'#13#10'"]'#9'c #808000",'#13#10'"^'#9'c #FF00FF",'#13
+#10'"/'#9'c #C000C0",'#13#10'"('#9'c #800080",'#13#10'"_'#9'c #00C0C0",'#13
+#10'":'#9'c #C0FFC0",'#13#10'"<'#9'c #00C000",'#13#10'"['#9'c #008000",'#13
+#10'"}'#9'c #800000",'#13#10'"|'#9'c #004000",'#13#10'"1'#9'c #FF0000",'#13
+#10'"2'#9'c #C00000",'#13#10'"3'#9'c #C0C000",'#13#10'" ....+++@ ",'
+#13#10'" .######.+ ",'#13#10'" .######.$+ ",'#13#10'" .#%%.#'
+'#&$#+ ",'#13#10'" .%%%**#&.==- ",'#13#10'" .*;*;>###$&@ ",'#13#10
+'" $*;=>>##$$$= ",'#13#10'" ,,,==>>''###)$= ",'#13#10'" !~{=-=>=])#$$'
+'= ",'#13#10'" !^/(&_:<[$)))= ",'#13#10'" !!}}<<[=|#$$$= ",'#13#10'" '
+'12-<][=|$),)= ",'#13#10'" .#<[[||$$$&= ",'#13#10'" +)#)@)$)),)= ",'
+'p'#3#200#0#6'Bitmap'#10#1'X'#0#0'li'#11#0#0#0#16#0#0#0#16#0#0#0#219#3#0#0'/'
+'* XPM */'#13#10'static char * pkg_project_xpm[] = {'#13#10'"18 18 32 1",'#13
+#10'" '#9'c None",'#13#10'".'#9'c #A0A0A0",'#13#10'"+'#9'c #808080",'#13#10
+'"@'#9'c #404000",'#13#10'"#'#9'c #FFFFFF",'#13#10'"$'#9'c #DCDCDC",'#13#10
+'"%'#9'c #C0C0FF",'#13#10'"&'#9'c #C3C3C3",'#13#10'"*'#9'c #8080FF",'#13#10
+'"='#9'c #585858",'#13#10'"-'#9'c #303030",'#13#10'";'#9'c #008080",'#13#10
+'">'#9'c #004040",'#13#10'",'#9'c #FFC0C0",'#13#10'"'''#9'c #0000FF",'#13#10
+'")'#9'c #FFDCA8",'#13#10'"!'#9'c #C05800",'#13#10'"~'#9'c #FF8000",'#13#10
+'"{'#9'c #FFA858",'#13#10'"]'#9'c #808000",'#13#10'"^'#9'c #FF00FF",'#13#10
+'"/'#9'c #C000C0",'#13#10'"('#9'c #800080",'#13#10'"_'#9'c #00C0C0",'#13#10
+'":'#9'c #C0FFC0",'#13#10'"<'#9'c #00C000",'#13#10'"['#9'c #008000",'#13#10
+'"}'#9'c #800000",'#13#10'"|'#9'c #004000",'#13#10'"1'#9'c #FF0000",'#13#10
+'"2'#9'c #C00000",'#13#10'"3'#9'c #C0C000",'#13#10'" ....+++@ ",'#13
+#10'" .######.+ ",'#13#10'" .######.$+ ",'#13#10'" .#%%.##&$'
+'#+ ",'#13#10'" .%%%**#&.==- ",'#13#10'" .*;*;>###$&@ ",'#13#10'" '
+' $*;=>>##$$$= ",'#13#10'" ,,,==>>''###)$= ",'#13#10'" !~{=-=>=])#$$= '
+' ",'#13#10'" !^/(&_:<[$)))= ",'#13#10'" !!}}<<[=|#$$$= ",'#13#10'" 12'
+'-<][=|$),)= ",'#13#10'" .#<[[||$$$&= ",'#13#10'" +)#)@)$)),)= ",'
+#13#10'" .$#$$)$&,3,= ",'#13#10'" @++++=]=+=+@ ",'#13#10'" '
+' ",'#13#10'" "};'#13#10'Z'#13#0#0'/* XPM */'#13#10
+'static char * pkg_include_xpm[] = {'#13#10'"18 18 154 2",'#13#10'" '#9'c N'
@ -391,5 +391,51 @@ LazarusResources.Add('TDM','FORMDATA',[
+'"..#=>*. .*>=#..",'#13#10'".+$-,'' '',-$+.",'#13#10'".+$-,'' '',-$+.'
+'",'#13#10'"..#=>*. .*>=#..",'#13#10'" .*=>*''''*>=*. ",'#13#10'" ..&;@>,'
+',>@;&.. ",'#13#10'" .@%&*=--=*&%@. ",'#13#10'" .@..#$$#..@. ",'#13#10'" '
+' .. .++. .. ",'#13#10'" .... "};'#13#10#0#0#0
+' .. .++. .. ",'#13#10'" .... "};'#13#10'I'#9#0#0'/* XPM */'#13
+#10'static char * ce_implementation_xpm[] = {'#13#10'"16 16 101 2",'#13#10'"'
+' '#9'c None",'#13#10'". '#9'c #ADADAD",'#13#10'"+ '#9'c #9C9B9B",'#13#10'"'
+'@ '#9'c #797878",'#13#10'"# '#9'c #767676",'#13#10'"$ '#9'c #6B6B6B",'#13#10
+'"% '#9'c #8E8E8E",'#13#10'"& '#9'c #A3A2A2",'#13#10'"* '#9'c #8D8C8B",'#13
+#10'"= '#9'c #919191",'#13#10'"- '#9'c #858585",'#13#10'"; '#9'c #7A7A7A",'
+#13#10'"> '#9'c #717171",'#13#10'", '#9'c #686868",'#13#10'"'' '#9'c #909090'
+'",'#13#10'") '#9'c #A0A09F",'#13#10'"! '#9'c #969493",'#13#10'"~ '#9'c #A0A'
+'0A0",'#13#10'"{ '#9'c #9A9A9A",'#13#10'"] '#9'c #929292",'#13#10'"^ '#9'c #'
+'898989",'#13#10'"/ '#9'c #7F7F7F",'#13#10'"( '#9'c #777777",'#13#10'"_ '#9
+'c #707070",'#13#10'": '#9'c #949494",'#13#10'"< '#9'c #9A9898",'#13#10'"[ '
+#9'c #938F8D",'#13#10'"} '#9'c #A6A6A6",'#13#10'"| '#9'c #A2A2A2",'#13#10'"1'
+' '#9'c #9B9B9B",'#13#10'"2 '#9'c #8B8B8B",'#13#10'"3 '#9'c #7D7D7D",'#13#10
+'"4 '#9'c #696969",'#13#10'"5 '#9'c #ACACAC",'#13#10'"6 '#9'c #BBBABA",'#13
+#10'"7 '#9'c #A09C9B",'#13#10'"8 '#9'c #B1B1B1",'#13#10'"9 '#9'c #ABABAB",'
+#13#10'"0 '#9'c #A5A5A5",'#13#10'"a '#9'c #A4A4A4",'#13#10'"b '#9'c #9D9D9D"'
+','#13#10'"c '#9'c #969696",'#13#10'"d '#9'c #8D8D8D",'#13#10'"e '#9'c #8787'
+'87",'#13#10'"f '#9'c #828282",'#13#10'"g '#9'c #7C7C7C",'#13#10'"h '#9'c #7'
+'37373",'#13#10'"i '#9'c #656565",'#13#10'"j '#9'c #8F8F8F",'#13#10'"k '#9'c'
+' #B5B5B5",'#13#10'"l '#9'c #939393",'#13#10'"m '#9'c #9C9C9C",'#13#10'"n '#9
+'c #A1A1A1",'#13#10'"o '#9'c #989898",'#13#10'"p '#9'c #767677",'#13#10'"q '
+#9'c #837D7A",'#13#10'"r '#9'c #7C6354",'#13#10'"s '#9'c #999999",'#13#10'"t'
+' '#9'c #9B9B9A",'#13#10'"u '#9'c #B3B3B3",'#13#10'"v '#9'c #A8A8A8",'#13#10
+'"w '#9'c #9F9F9F",'#13#10'"x '#9'c #959595",'#13#10'"y '#9'c #838383",'#13
+#10'"z '#9'c #8F8784",'#13#10'"A '#9'c #876C5C",'#13#10'"B '#9'c #8C8381",'
+#13#10'"C '#9'c #8E6F5B",'#13#10'"D '#9'c #A7A7A7",'#13#10'"E '#9'c #8E8784"'
+','#13#10'"F '#9'c #856F61",'#13#10'"G '#9'c #9A908C",'#13#10'"H '#9'c #9472'
+'5C",'#13#10'"I '#9'c #B7B3B1",'#13#10'"J '#9'c #B59785",'#13#10'"K '#9'c #7'
+'47474",'#13#10'"L '#9'c #818080",'#13#10'"M '#9'c #918782",'#13#10'"N '#9'c'
+' #886B5A",'#13#10'"O '#9'c #9E938F",'#13#10'"P '#9'c #92705C",'#13#10'"Q '#9
+'c #B6B1AF",'#13#10'"R '#9'c #BE9C88",'#13#10'"S '#9'c #C1A898",'#13#10'"T '
+#9'c #606060",'#13#10'"U '#9'c #918885",'#13#10'"V '#9'c #895E45",'#13#10'"W'
+' '#9'c #9B8F8A",'#13#10'"X '#9'c #95725D",'#13#10'"Y '#9'c #B6AFAC",'#13#10
+'"Z '#9'c #BF9D89",'#13#10'"` '#9'c #C9AB9A",'#13#10'" .'#9'c #9D9391",'#13
+#10'"..'#9'c #946448",'#13#10'"+.'#9'c #ACA6A3",'#13#10'"@.'#9'c #C09E8A",'
+#13#10'"#.'#9'c #C8AA98",'#13#10'"$.'#9'c #B3B0AF",'#13#10'"%.'#9'c #BD9A85"'
+','#13#10'"&.'#9'c #CDB0A0",'#13#10'"*.'#9'c #CBAE9D",'#13#10'" '
+' ",'#13#10'" . ",'#13#10'" '
+' + @ # $ % ",'#13#10'" & * = - ; > , '' "'
+','#13#10'" ) ! ~ { ] ^ / ( _ $ : ",'#13#10'" < [ } } | 1 : 2 - '
+'3 # _ 4 5 ",'#13#10'"6 7 8 9 0 a | b c d e f g h i j ",'#13#10'"5 6 k l e m'
+' n b o '' ^ f p q r c ",'#13#10'"s t u | v v w { x % y z A B C ",'#13#10
+'". - d v D ~ 1 : e E F G H I J ",'#13#10'" n K # l = L M N O P Q R S '
+' ",'#13#10'" m T 4 U V W X Y Z ` ",'#13#10'" x T ...+.@. '
+'#. ",'#13#10'" 9 $.%. &. ",'#13#10'" '
+' *. ",'#13#10'" "};'#13#10
+#0#0#0
]);

View File

@ -1,7 +1,7 @@
object fClassEdit: TfClassEdit
Left = 754
Left = 702
Height = 547
Top = 162
Top = 150
Width = 518
HorzScrollBar.Page = 517
VertScrollBar.Page = 546
@ -60,7 +60,6 @@ object fClassEdit: TfClassEdit
Top = 18
Width = 28
Caption = 'Name'
Color = clNone
ParentColor = False
end
object Label2: TLabel
@ -69,7 +68,6 @@ object fClassEdit: TfClassEdit
Top = 59
Width = 67
Caption = 'Inheritts from'
Color = clNone
ParentColor = False
end
object edtName: TEdit
@ -119,26 +117,29 @@ object fClassEdit: TfClassEdit
Left = 4
Height = 25
Top = 421
Width = 91
Width = 100
Action = actPropAdd
Anchors = [akLeft, akBottom]
BorderSpacing.InnerBorder = 4
TabOrder = 2
end
object Button4: TButton
Left = 100
Left = 116
Height = 25
Top = 421
Width = 91
Width = 100
Action = actPropEdit
Anchors = [akLeft, akBottom]
BorderSpacing.InnerBorder = 4
TabOrder = 3
end
object Button5: TButton
Left = 196
Left = 228
Height = 25
Top = 421
Width = 91
Width = 100
Action = actPropDelete
Anchors = [akLeft, akBottom]
BorderSpacing.InnerBorder = 4
TabOrder = 4
end
@ -148,6 +149,7 @@ object fClassEdit: TfClassEdit
Top = 59
Width = 406
AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending]
ItemHeight = 13
MaxLength = 0
Style = csDropDownList
TabOrder = 5
@ -155,8 +157,8 @@ object fClassEdit: TfClassEdit
end
end
object ActionList1: TActionList
left = 275
top = 147
left = 232
top = 200
object actOK: TAction
Caption = 'OK'
DisableIfNoHandler = True

View File

@ -1,8 +1,6 @@
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
LazarusResources.Add('TfClassEdit','FORMDATA',[
'TPF0'#11'TfClassEdit'#10'fClassEdit'#4'Left'#3#242#2#6'Height'#3'#'#2#3'Top'
+#3#162#0#5'Width'#3#6#2#18'HorzScrollBar.Page'#3#5#2#18'VertScrollBar.Page'#3
'TPF0'#11'TfClassEdit'#10'fClassEdit'#4'Left'#3#190#2#6'Height'#3'#'#2#3'Top'
+#3#150#0#5'Width'#3#6#2#18'HorzScrollBar.Page'#3#5#2#18'VertScrollBar.Page'#3
+'"'#2#13'ActiveControl'#7#7'Button1'#11'BorderStyle'#7#13'bsSizeToolWin'#7'C'
+'aption'#6#10'fClassEdit'#12'ClientHeight'#3'#'#2#11'ClientWidth'#3#6#2#8'Po'
+'sition'#7#15'poDesktopCenter'#0#6'TPanel'#6'Panel1'#6'Height'#2'2'#3'Top'#3
@ -17,40 +15,41 @@ LazarusResources.Add('TfClassEdit','FORMDATA',[
+#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'TabOrder'#2#1#0#9'TTa'
+'bSheet'#9'TabSheet1'#7'Caption'#6#15'Compound Object'#12'ClientHeight'#3#215
+#1#11'ClientWidth'#3#254#1#0#6'TLabel'#6'Label1'#4'Left'#2#4#6'Height'#2#14#3
+'Top'#2#18#5'Width'#2#28#7'Caption'#6#4'Name'#5'Color'#7#6'clNone'#11'Parent'
+'Color'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#4#6'Height'#2#14#3'Top'#2';'#5'W'
+'idth'#2'C'#7'Caption'#6#14'Inheritts from'#5'Color'#7#6'clNone'#11'ParentCo'
+'lor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2'\'#6'Height'#2#23#3'Top'#2#18#5'Wi'
+'dth'#3#150#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#0#0
+#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#4#6'Height'#3'8'#1#3'Top'#2'b'#5'Widt'
+'h'#3#239#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#7'Capt'
+'ion'#6#14' Properties '#12'ClientHeight'#3'&'#1#11'ClientWidth'#3#235#1#8
+'TabOrder'#2#1#0#9'TListView'#7'edtProp'#6'Height'#3'&'#1#5'Width'#3#235#1#5
+'Align'#7#8'alClient'#11'BorderWidth'#2#2#7'Columns'#14#1#8'AutoSize'#9#7'Ca'
+'ption'#6#4'Name'#5'Width'#3#210#0#0#1#7'Caption'#6#4'Type'#5'Width'#3#200#0
+#0#1#7'Caption'#6#8'Attrbute'#0#0#9'PopupMenu'#7#10'PopupMenu1'#9'RowSelect'
+#9#8'TabOrder'#2#0#9'ViewStyle'#7#8'vsReport'#10'OnDblClick'#7#15'edtPropDbl'
+'Click'#0#0#0#7'TButton'#7'Button3'#4'Left'#2#4#6'Height'#2#25#3'Top'#3#165#1
+#5'Width'#2'['#6'Action'#7#10'actPropAdd'#25'BorderSpacing.InnerBorder'#2#4#8
+'TabOrder'#2#2#0#0#7'TButton'#7'Button4'#4'Left'#2'd'#6'Height'#2#25#3'Top'#3
+#165#1#5'Width'#2'['#6'Action'#7#11'actPropEdit'#25'BorderSpacing.InnerBorde'
+'r'#2#4#8'TabOrder'#2#3#0#0#7'TButton'#7'Button5'#4'Left'#3#196#0#6'Height'#2
+#25#3'Top'#3#165#1#5'Width'#2'['#6'Action'#7#13'actPropDelete'#25'BorderSpac'
+'ing.InnerBorder'#2#4#8'TabOrder'#2#4#0#0#9'TComboBox'#9'edtParent'#4'Left'#2
+'Top'#2#18#5'Width'#2#28#7'Caption'#6#4'Name'#11'ParentColor'#8#0#0#6'TLabel'
+#6'Label2'#4'Left'#2#4#6'Height'#2#14#3'Top'#2';'#5'Width'#2'C'#7'Caption'#6
+#14'Inheritts from'#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2'\'#6
+'Height'#2#23#3'Top'#2#18#5'Width'#3#150#1#7'Anchors'#11#5'akTop'#6'akLeft'#7
+'akRight'#0#8'TabOrder'#2#0#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#4#6'Heig'
+'ht'#3'8'#1#3'Top'#2'b'#5'Width'#3#239#1#7'Anchors'#11#5'akTop'#6'akLeft'#7
+'akRight'#8'akBottom'#0#7'Caption'#6#14' Properties '#12'ClientHeight'#3'&'
+#1#11'ClientWidth'#3#235#1#8'TabOrder'#2#1#0#9'TListView'#7'edtProp'#6'Heigh'
+'t'#3'&'#1#5'Width'#3#235#1#5'Align'#7#8'alClient'#11'BorderWidth'#2#2#7'Col'
+'umns'#14#1#8'AutoSize'#9#7'Caption'#6#4'Name'#5'Width'#3#210#0#0#1#7'Captio'
+'n'#6#4'Type'#5'Width'#3#200#0#0#1#7'Caption'#6#8'Attrbute'#0#0#9'PopupMenu'
+#7#10'PopupMenu1'#9'RowSelect'#9#8'TabOrder'#2#0#9'ViewStyle'#7#8'vsReport'
+#10'OnDblClick'#7#15'edtPropDblClick'#0#0#0#7'TButton'#7'Button3'#4'Left'#2#4
+#6'Height'#2#25#3'Top'#3#165#1#5'Width'#2'd'#6'Action'#7#10'actPropAdd'#7'An'
+'chors'#11#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOr'
+'der'#2#2#0#0#7'TButton'#7'Button4'#4'Left'#2't'#6'Height'#2#25#3'Top'#3#165
+#1#5'Width'#2'd'#6'Action'#7#11'actPropEdit'#7'Anchors'#11#6'akLeft'#8'akBot'
+'tom'#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#3#0#0#7'TButton'#7'B'
+'utton5'#4'Left'#3#228#0#6'Height'#2#25#3'Top'#3#165#1#5'Width'#2'd'#6'Actio'
+'n'#7#13'actPropDelete'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#25'BorderSpaci'
+'ng.InnerBorder'#2#4#8'TabOrder'#2#4#0#0#9'TComboBox'#9'edtParent'#4'Left'#2
+'\'#6'Height'#2#21#3'Top'#2';'#5'Width'#3#150#1#16'AutoCompleteText'#11#22'c'
+'bactEndOfLineComplete'#20'cbactSearchAscending'#0#9'MaxLength'#2#0#5'Style'
+#7#14'csDropDownList'#8'TabOrder'#2#5#0#0#0#0#11'TActionList'#11'ActionList1'
+#4'left'#3#19#1#3'top'#3#147#0#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18'D'
+'isableIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actOK'
+'Update'#0#0#7'TAction'#10'actPropAdd'#7'Caption'#6#12'New Property'#18'Disa'
+'bleIfNoHandler'#9#9'OnExecute'#7#17'actPropAddExecute'#0#0#7'TAction'#11'ac'
+'tPropEdit'#7'Caption'#6#13'Edit Property'#18'DisableIfNoHandler'#9#9'OnExec'
+'ute'#7#18'actPropEditExecute'#8'OnUpdate'#7#17'actPropEditUpdate'#0#0#7'TAc'
+'tion'#13'actPropDelete'#7'Caption'#6#15'Delete Property'#18'DisableIfNoHand'
+'ler'#9#9'OnExecute'#7#20'actPropDeleteExecute'#8'OnUpdate'#7#17'actPropEdit'
+'Update'#0#0#0#10'TPopupMenu'#10'PopupMenu1'#4'left'#2'i'#3'top'#3#186#0#0#9
+'TMenuItem'#9'MenuItem1'#6'Action'#7#10'actPropAdd'#7'OnClick'#7#17'actPropA'
+'ddExecute'#0#0#9'TMenuItem'#9'MenuItem2'#6'Action'#7#11'actPropEdit'#7'OnCl'
+'ick'#7#18'actPropEditExecute'#0#0#9'TMenuItem'#9'MenuItem3'#6'Action'#7#13
+'actPropDelete'#7'OnClick'#7#20'actPropDeleteExecute'#0#0#0#0
+'bactEndOfLineComplete'#20'cbactSearchAscending'#0#10'ItemHeight'#2#13#9'Max'
+'Length'#2#0#5'Style'#7#14'csDropDownList'#8'TabOrder'#2#5#0#0#0#0#11'TActio'
+'nList'#11'ActionList1'#4'left'#3#232#0#3'top'#3#200#0#0#7'TAction'#5'actOK'
+#7'Caption'#6#2'OK'#18'DisableIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'
+#8'OnUpdate'#7#11'actOKUpdate'#0#0#7'TAction'#10'actPropAdd'#7'Caption'#6#12
+'New Property'#18'DisableIfNoHandler'#9#9'OnExecute'#7#17'actPropAddExecute'
+#0#0#7'TAction'#11'actPropEdit'#7'Caption'#6#13'Edit Property'#18'DisableIfN'
+'oHandler'#9#9'OnExecute'#7#18'actPropEditExecute'#8'OnUpdate'#7#17'actPropE'
+'ditUpdate'#0#0#7'TAction'#13'actPropDelete'#7'Caption'#6#15'Delete Property'
+#18'DisableIfNoHandler'#9#9'OnExecute'#7#20'actPropDeleteExecute'#8'OnUpdate'
+#7#17'actPropEditUpdate'#0#0#0#10'TPopupMenu'#10'PopupMenu1'#4'left'#2'i'#3
+'top'#3#186#0#0#9'TMenuItem'#9'MenuItem1'#6'Action'#7#10'actPropAdd'#7'OnCli'
+'ck'#7#17'actPropAddExecute'#0#0#9'TMenuItem'#9'MenuItem2'#6'Action'#7#11'ac'
+'tPropEdit'#7'OnClick'#7#18'actPropEditExecute'#0#0#9'TMenuItem'#9'MenuItem3'
+#6'Action'#7#13'actPropDelete'#7'OnClick'#7#20'actPropDeleteExecute'#0#0#0#0
]);

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit ufclassedit;
{$mode objfpc}{$H+}
@ -7,7 +19,7 @@ interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ActnList,
ExtCtrls, ComCtrls, Buttons, StdCtrls,
pastree, pascal_parser_intf, //parserdefs,
pastree, pascal_parser_intf,
edit_helper, Menus;
type
@ -70,20 +82,8 @@ var
fClassEdit: TfClassEdit;
implementation
uses parserutils, ufpropedit;
uses parserutils, ufpropedit, common_gui_utils;
function FindItem(const ACaption : string; AList : TListItems) : TListItem ;
var
i : Integer;
begin
for i := 0 to Pred(AList.Count) do begin
if AnsiSameText(ACaption,AList[i].Caption) then begin
Result := AList[i];
Exit;
end;
end;
Result := nil;
end;
{ TfClassEdit }

View File

@ -10,6 +10,7 @@ object fEnumEdit: TfEnumEdit
Caption = 'fEnumEdit'
ClientHeight = 368
ClientWidth = 400
Position = poMainFormCenter
object PC: TPageControl
Height = 318
Width = 400
@ -27,7 +28,6 @@ object fEnumEdit: TfEnumEdit
Top = 18
Width = 28
Caption = 'Name'
Color = clNone
ParentColor = False
end
object edtName: TEdit

View File

@ -2,28 +2,28 @@ LazarusResources.Add('TfEnumEdit','FORMDATA',[
'TPF0'#10'TfEnumEdit'#9'fEnumEdit'#4'Left'#3'u'#1#6'Height'#3'p'#1#3'Top'#3
+#215#0#5'Width'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Page'
+#3'o'#1#13'ActiveControl'#7#7'edtName'#11'BorderStyle'#7#13'bsSizeToolWin'#7
+'Caption'#6#9'fEnumEdit'#12'ClientHeight'#3'p'#1#11'ClientWidth'#3#144#1#0#12
+'TPageControl'#2'PC'#6'Height'#3'>'#1#5'Width'#3#144#1#10'ActivePage'#7#9'Ta'
+'bSheet1'#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'TabOrder'#2#0#0#9'TTabShe'
+'et'#9'TabSheet1'#7'Caption'#6#11'Enumeration'#12'ClientHeight'#3'$'#1#11'Cl'
+'ientWidth'#3#136#1#0#6'TLabel'#6'Label1'#4'Left'#2#4#6'Height'#2#14#3'Top'#2
+#18#5'Width'#2#28#7'Caption'#6#4'Name'#5'Color'#7#6'clNone'#11'ParentColor'#8
+#0#0#5'TEdit'#7'edtName'#4'Left'#2'D'#6'Height'#2#23#3'Top'#2#18#5'Width'#3
+'8'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#0#0#0#9'TG'
+'roupBox'#9'GroupBox1'#4'Left'#2#4#6'Height'#3#231#0#3'Top'#2'3'#5'Width'#3
+'y'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#7'Caption'#6
+#9' Items '#12'ClientHeight'#3#213#0#11'ClientWidth'#3'u'#1#8'TabOrder'#2#1
+#0#5'TMemo'#8'edtItems'#6'Height'#3#213#0#5'Width'#3'u'#1#5'Align'#7#8'alCli'
+'ent'#10'ScrollBars'#7#6'ssBoth'#8'TabOrder'#2#0#0#0#0#0#0#6'TPanel'#6'Panel'
+'1'#6'Height'#2'2'#3'Top'#3'>'#1#5'Width'#3#144#1#5'Align'#7#8'alBottom'#12
+'ClientHeight'#2'2'#11'ClientWidth'#3#144#1#8'TabOrder'#2#1#0#7'TButton'#7'B'
+'utton1'#4'Left'#3'8'#1#6'Height'#2#25#3'Top'#2#10#5'Width'#2'K'#7'Anchors'
+#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Ca'
+'ption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#0#0#0#7'TButton'#7'But'
+'ton2'#4'Left'#3#222#0#6'Height'#2#25#3'Top'#2#10#5'Width'#2'K'#6'Action'#7#5
+'actOK'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4
+#7'Default'#9#8'TabOrder'#2#1#0#0#0#11'TActionList'#11'ActionList1'#4'left'#3
+#248#0#3'top'#2'x'#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18'DisableIfNoHa'
+'ndler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#0
+#0
+'Caption'#6#9'fEnumEdit'#12'ClientHeight'#3'p'#1#11'ClientWidth'#3#144#1#8'P'
+'osition'#7#16'poMainFormCenter'#0#12'TPageControl'#2'PC'#6'Height'#3'>'#1#5
+'Width'#3#144#1#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabIn'
+'dex'#2#0#8'TabOrder'#2#0#0#9'TTabSheet'#9'TabSheet1'#7'Caption'#6#11'Enumer'
+'ation'#12'ClientHeight'#3'$'#1#11'ClientWidth'#3#136#1#0#6'TLabel'#6'Label1'
+#4'Left'#2#4#6'Height'#2#14#3'Top'#2#18#5'Width'#2#28#7'Caption'#6#4'Name'#11
+'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2'D'#6'Height'#2#23#3'Top'#2
+#18#5'Width'#3'8'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'
+#2#0#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#4#6'Height'#3#231#0#3'Top'#2'3'
+#5'Width'#3'y'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#7
+'Caption'#6#9' Items '#12'ClientHeight'#3#213#0#11'ClientWidth'#3'u'#1#8'T'
+'abOrder'#2#1#0#5'TMemo'#8'edtItems'#6'Height'#3#213#0#5'Width'#3'u'#1#5'Ali'
+'gn'#7#8'alClient'#10'ScrollBars'#7#6'ssBoth'#8'TabOrder'#2#0#0#0#0#0#0#6'TP'
+'anel'#6'Panel1'#6'Height'#2'2'#3'Top'#3'>'#1#5'Width'#3#144#1#5'Align'#7#8
+'alBottom'#12'ClientHeight'#2'2'#11'ClientWidth'#3#144#1#8'TabOrder'#2#1#0#7
+'TButton'#7'Button1'#4'Left'#3'8'#1#6'Height'#2#25#3'Top'#2#10#5'Width'#2'K'
+#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#6'Can'
+'cel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#0#0#0#7'TBu'
+'tton'#7'Button2'#4'Left'#3#222#0#6'Height'#2#25#3'Top'#2#10#5'Width'#2'K'#6
+'Action'#7#5'actOK'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.Inn'
+'erBorder'#2#4#7'Default'#9#8'TabOrder'#2#1#0#0#0#11'TActionList'#11'ActionL'
+'ist1'#4'left'#3#248#0#3'top'#2'x'#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'
+#18'DisableIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'a'
+'ctOKUpdate'#0#0#0#0
]);

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit ufEnumedit;
{$mode objfpc}{$H+}

View File

@ -1,7 +1,7 @@
object fPropEdit: TfPropEdit
Left = 474
Left = 306
Height = 272
Top = 186
Top = 266
Width = 324
HorzScrollBar.Page = 323
VertScrollBar.Page = 271
@ -61,7 +61,6 @@ object fPropEdit: TfPropEdit
Top = 24
Width = 28
Caption = 'Name'
Color = clNone
ParentColor = False
end
object Label2: TLabel
@ -70,7 +69,6 @@ object fPropEdit: TfPropEdit
Top = 98
Width = 25
Caption = 'Type'
Color = clNone
ParentColor = False
end
object edtName: TEdit
@ -86,6 +84,7 @@ object fPropEdit: TfPropEdit
Top = 116
Width = 272
AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending]
ItemHeight = 13
MaxLength = 0
Style = csDropDownList
TabOrder = 1

View File

@ -1,10 +1,10 @@
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
LazarusResources.Add('TfPropEdit','FORMDATA',[
'TPF0'#10'TfPropEdit'#9'fPropEdit'#4'Left'#3#218#1#6'Height'#3#16#1#3'Top'#3
+#186#0#5'Width'#3'D'#1#18'HorzScrollBar.Page'#3'C'#1#18'VertScrollBar.Page'#3
+#15#1#13'ActiveControl'#7#7'Button1'#11'BorderIcons'#11#12'biSystemMenu'#0#11
+'BorderStyle'#7#8'bsDialog'#7'Caption'#6#9'fPropEdit'#12'ClientHeight'#3#16#1
'TPF0'#10'TfPropEdit'#9'fPropEdit'#4'Left'#3'2'#1#6'Height'#3#16#1#3'Top'#3#10
+#1#5'Width'#3'D'#1#18'HorzScrollBar.Page'#3'C'#1#18'VertScrollBar.Page'#3#15
+#1#13'ActiveControl'#7#7'Button1'#11'BorderIcons'#11#12'biSystemMenu'#0#11'B'
+'orderStyle'#7#8'bsDialog'#7'Caption'#6#9'fPropEdit'#12'ClientHeight'#3#16#1
+#11'ClientWidth'#3'D'#1#8'Position'#7#15'poDesktopCenter'#0#6'TPanel'#6'Pane'
+'l1'#6'Height'#2'2'#3'Top'#3#222#0#5'Width'#3'D'#1#5'Align'#7#8'alBottom'#12
+'ClientHeight'#2'2'#11'ClientWidth'#3'D'#1#8'TabOrder'#2#0#0#7'TButton'#7'Bu'
@ -18,16 +18,15 @@ LazarusResources.Add('TfPropEdit','FORMDATA',[
+'ient'#8'TabIndex'#2#0#8'TabOrder'#2#1#0#9'TTabSheet'#9'TabSheet1'#7'Caption'
+#6#8'Property'#12'ClientHeight'#3#196#0#11'ClientWidth'#3'<'#1#0#6'TLabel'#6
+'Label1'#4'Left'#2#20#6'Height'#2#14#3'Top'#2#24#5'Width'#2#28#7'Caption'#6#4
+'Name'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'
+#2#20#6'Height'#2#14#3'Top'#2'b'#5'Width'#2#25#7'Caption'#6#4'Type'#5'Color'
+#7#6'clNone'#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2#20#6'Height'
+#2#23#3'Top'#2'*'#5'Width'#3#16#1#8'TabOrder'#2#0#0#0#9'TComboBox'#7'edtType'
+#4'Left'#2#20#6'Height'#2#21#3'Top'#2't'#5'Width'#3#16#1#16'AutoCompleteText'
+#11#22'cbactEndOfLineComplete'#20'cbactSearchAscending'#0#9'MaxLength'#2#0#5
+'Style'#7#14'csDropDownList'#8'TabOrder'#2#1#0#0#9'TCheckBox'#12'edtAttribut'
+'e'#4'Left'#2#20#6'Height'#2#13#3'Top'#3#170#0#5'Width'#2'e'#7'Caption'#6#18
+'Attribute Property'#8'TabOrder'#2#2#0#0#0#0#11'TActionList'#11'ActionList1'
+#4'left'#2'h'#3'top'#2'h'#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18'Disabl'
+'eIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actOKUpdat'
+'e'#0#0#0#0
+'Name'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#20#6'Height'#2#14
+#3'Top'#2'b'#5'Width'#2#25#7'Caption'#6#4'Type'#11'ParentColor'#8#0#0#5'TEdi'
+'t'#7'edtName'#4'Left'#2#20#6'Height'#2#23#3'Top'#2'*'#5'Width'#3#16#1#8'Tab'
+'Order'#2#0#0#0#9'TComboBox'#7'edtType'#4'Left'#2#20#6'Height'#2#21#3'Top'#2
+'t'#5'Width'#3#16#1#16'AutoCompleteText'#11#22'cbactEndOfLineComplete'#20'cb'
+'actSearchAscending'#0#10'ItemHeight'#2#13#9'MaxLength'#2#0#5'Style'#7#14'cs'
+'DropDownList'#8'TabOrder'#2#1#0#0#9'TCheckBox'#12'edtAttribute'#4'Left'#2#20
+#6'Height'#2#13#3'Top'#3#170#0#5'Width'#2'e'#7'Caption'#6#18'Attribute Prope'
+'rty'#8'TabOrder'#2#2#0#0#0#0#11'TActionList'#11'ActionList1'#4'left'#2'h'#3
+'top'#2'h'#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18'DisableIfNoHandler'#9
+#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#0#0
]);

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit ufpropedit;
{$mode objfpc}{$H+}
@ -84,47 +96,6 @@ begin
end;
end;
procedure InternalFillList(ALs : TStrings; AContainer : TwstPasTreeContainer);
var
i, j : Integer;
sym : TPasElement;
moduleList, decList : TList;
mdl : TPasModule;
begin
moduleList := AContainer.Package.Modules;
for i := 0 to Pred(moduleList.Count) do begin
mdl := TPasModule(moduleList[i]);
decList := mdl.InterfaceSection.Declarations;
for j := 0 to Pred(decList.Count) do begin
sym := TPasElement(decList[i]);
if sym.InheritsFrom(TPasType) then begin
if ( ALs.IndexOfObject(sym) = -1 ) then begin
ALs.AddObject(AContainer.GetExternalName(sym),sym);
end;
end;
end;
end;
end;
procedure FillList(
ALs : TStrings;
ASymbol : TwstPasTreeContainer
);
var
locLST : TStringList;
begin
locLST := TStringList.Create();
try
locLST.Assign(ALs);
locLST.Duplicates := dupAccept;
InternalFillList(locLST,ASymbol);
locLST.Sort();
ALs.Assign(locLST);
finally
FreeAndNil(locLST);
end;
end;
{ TfPropEdit }
procedure TfPropEdit.actOKUpdate(Sender: TObject);
@ -150,7 +121,7 @@ begin
edtType.Items.BeginUpdate();
try
edtType.Items.Clear();
FillList(edtType.Items,FSymbolTable);
FillTypeList(edtType.Items,FSymbolTable);
finally
edtType.Items.EndUpdate();
end;

View File

@ -0,0 +1,143 @@
object frmSaveOptions: TfrmSaveOptions
Left = 775
Height = 292
Top = 93
Width = 402
HorzScrollBar.Page = 401
VertScrollBar.Page = 291
ActiveControl = edtInterface
BorderStyle = bsSizeToolWin
Caption = 'Export file options ...'
ClientHeight = 292
ClientWidth = 402
Position = poMainFormCenter
object Panel1: TPanel
Height = 50
Top = 242
Width = 402
Align = alBottom
ClientHeight = 50
ClientWidth = 402
TabOrder = 0
object Button1: TButton
Left = 312
Height = 25
Top = 14
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 0
end
object Button2: TButton
Left = 224
Height = 25
Top = 14
Width = 75
Action = actOK
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
Default = True
TabOrder = 1
end
end
object Panel2: TPanel
Height = 242
Width = 402
Align = alClient
ClientHeight = 242
ClientWidth = 402
TabOrder = 1
object Label1: TLabel
Left = 16
Height = 14
Top = 16
Width = 81
Caption = 'Output directory'
ParentColor = False
end
object GroupBox1: TGroupBox
Left = 16
Height = 134
Top = 80
Width = 369
Anchors = [akTop, akLeft, akRight, akBottom]
Caption = ' File type '
ClientHeight = 116
ClientWidth = 365
TabOrder = 0
object edtInterface: TCheckBox
Left = 14
Height = 13
Top = 16
Width = 62
Caption = 'Interface'
TabOrder = 0
end
object edtProxy: TCheckBox
Left = 14
Height = 13
Top = 72
Width = 46
Anchors = [akLeft, akBottom]
Caption = 'Proxy'
TabOrder = 1
end
object edtImplementation: TCheckBox
Left = 245
Height = 13
Top = 14
Width = 91
Anchors = [akTop, akRight]
Caption = 'Implementation'
TabOrder = 2
end
object edtBinder: TCheckBox
Left = 245
Height = 13
Top = 72
Width = 50
Anchors = [akRight, akBottom]
Caption = 'Binder'
TabOrder = 3
end
end
object edtOutputDir: TEdit
Left = 16
Height = 23
Top = 38
Width = 336
Anchors = [akTop, akLeft, akRight]
TabOrder = 1
end
object btnSelectDir: TButton
Left = 362
Height = 25
Top = 36
Width = 25
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
Caption = '...'
OnClick = btnSelectDirClick
TabOrder = 2
end
end
object AL: TActionList
left = 144
top = 160
object actOK: TAction
Caption = 'OK'
DisableIfNoHandler = True
OnExecute = actOKExecute
OnUpdate = actOKUpdate
end
end
object SD: TSelectDirectoryDialog
Title = 'Choisir un r�pertoire'
FilterIndex = 0
left = 101
top = 142
end
end

View File

@ -0,0 +1,41 @@
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
LazarusResources.Add('TfrmSaveOptions','FORMDATA',[
'TPF0'#15'TfrmSaveOptions'#14'frmSaveOptions'#4'Left'#3#7#3#6'Height'#3'$'#1#3
+'Top'#2']'#5'Width'#3#146#1#18'HorzScrollBar.Page'#3#145#1#18'VertScrollBar.'
+'Page'#3'#'#1#13'ActiveControl'#7#12'edtInterface'#11'BorderStyle'#7#13'bsSi'
+'zeToolWin'#7'Caption'#6#23'Export file options ...'#12'ClientHeight'#3'$'#1
+#11'ClientWidth'#3#146#1#8'Position'#7#16'poMainFormCenter'#0#6'TPanel'#6'Pa'
+'nel1'#6'Height'#2'2'#3'Top'#3#242#0#5'Width'#3#146#1#5'Align'#7#8'alBottom'
+#12'ClientHeight'#2'2'#11'ClientWidth'#3#146#1#8'TabOrder'#2#0#0#7'TButton'#7
+'Button1'#4'Left'#3'8'#1#6'Height'#2#25#3'Top'#2#14#5'Width'#2'K'#7'Anchors'
+#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Ca'
+'ption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#0#0#0#7'TButton'#7'But'
+'ton2'#4'Left'#3#224#0#6'Height'#2#25#3'Top'#2#14#5'Width'#2'K'#6'Action'#7#5
+'actOK'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4
+#7'Default'#9#8'TabOrder'#2#1#0#0#0#6'TPanel'#6'Panel2'#6'Height'#3#242#0#5
+'Width'#3#146#1#5'Align'#7#8'alClient'#12'ClientHeight'#3#242#0#11'ClientWid'
+'th'#3#146#1#8'TabOrder'#2#1#0#6'TLabel'#6'Label1'#4'Left'#2#16#6'Height'#2
+#14#3'Top'#2#16#5'Width'#2'Q'#7'Caption'#6#16'Output directory'#11'ParentCol'
+'or'#8#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#16#6'Height'#3#134#0#3'Top'#2
+'P'#5'Width'#3'q'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0
+#7'Caption'#6#13' File type '#12'ClientHeight'#2't'#11'ClientWidth'#3'm'#1
+#8'TabOrder'#2#0#0#9'TCheckBox'#12'edtInterface'#4'Left'#2#14#6'Height'#2#13
+#3'Top'#2#16#5'Width'#2'>'#7'Caption'#6#9'Interface'#8'TabOrder'#2#0#0#0#9'T'
+'CheckBox'#8'edtProxy'#4'Left'#2#14#6'Height'#2#13#3'Top'#2'H'#5'Width'#2'.'
+#7'Anchors'#11#6'akLeft'#8'akBottom'#0#7'Caption'#6#5'Proxy'#8'TabOrder'#2#1
+#0#0#9'TCheckBox'#17'edtImplementation'#4'Left'#3#245#0#6'Height'#2#13#3'Top'
+#2#14#5'Width'#2'['#7'Anchors'#11#5'akTop'#7'akRight'#0#7'Caption'#6#14'Impl'
+'ementation'#8'TabOrder'#2#2#0#0#9'TCheckBox'#9'edtBinder'#4'Left'#3#245#0#6
+'Height'#2#13#3'Top'#2'H'#5'Width'#2'2'#7'Anchors'#11#7'akRight'#8'akBottom'
+#0#7'Caption'#6#6'Binder'#8'TabOrder'#2#3#0#0#0#5'TEdit'#12'edtOutputDir'#4
+'Left'#2#16#6'Height'#2#23#3'Top'#2'&'#5'Width'#3'P'#1#7'Anchors'#11#5'akTop'
+#6'akLeft'#7'akRight'#0#8'TabOrder'#2#1#0#0#7'TButton'#12'btnSelectDir'#4'Le'
+'ft'#3'j'#1#6'Height'#2#25#3'Top'#2'$'#5'Width'#2#25#7'Anchors'#11#5'akTop'#7
+'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#3'...'#7'OnClick'
+#7#17'btnSelectDirClick'#8'TabOrder'#2#2#0#0#0#11'TActionList'#2'AL'#4'left'
+#3#144#0#3'top'#3#160#0#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18'DisableI'
+'fNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actOKUpdate'
+#0#0#0#22'TSelectDirectoryDialog'#2'SD'#5'Title'#6#21'Choisir un r'#233'pert'
+'oire'#11'FilterIndex'#2#0#4'left'#2'e'#3'top'#3#142#0#0#0#0
]);

View File

@ -0,0 +1,75 @@
unit ufrmsaveoption;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, ActnList;
type
{ TfrmSaveOptions }
TfrmSaveOptions = class (TForm )
actOK : TAction;
AL : TActionList;
Button1 : TButton;
Button2 : TButton;
btnSelectDir : TButton;
edtInterface : TCheckBox;
edtProxy : TCheckBox;
edtImplementation : TCheckBox;
edtBinder : TCheckBox;
edtOutputDir : TEdit;
GroupBox1 : TGroupBox;
Label1 : TLabel;
Panel1 : TPanel;
Panel2 : TPanel;
SD : TSelectDirectoryDialog;
procedure actOKExecute (Sender : TObject );
procedure actOKUpdate (Sender : TObject );
procedure btnSelectDirClick (Sender : TObject );
private
{ private declarations }
public
{ public declarations }
end;
var
frmSaveOptions : TfrmSaveOptions;
implementation
{ TfrmSaveOptions }
procedure TfrmSaveOptions.actOKUpdate (Sender : TObject );
begin
TAction(Sender).Enabled :=
( Trim(edtOutputDir.Text) <> '' ) and
( edtInterface.Checked or edtProxy.Checked or
edtImplementation.Checked or edtBinder.Checked
);
end;
procedure TfrmSaveOptions.btnSelectDirClick (Sender : TObject );
begin
SD.FileName := edtOutputDir.Text;
if SD.Execute() then begin
edtOutputDir.Text := SD.FileName;
end;
end;
procedure TfrmSaveOptions.actOKExecute (Sender : TObject );
begin
ForceDirectories(edtOutputDir.Text);
ModalResult := mrOK;
end;
initialization
{$I ufrmsaveoption.lrs}
end.

View File

@ -1,7 +1,7 @@
object fInterfaceEdit: TfInterfaceEdit
Left = 627
Left = 340
Height = 564
Top = 101
Top = 122
Width = 531
HorzScrollBar.Page = 530
VertScrollBar.Page = 563
@ -61,7 +61,6 @@ object fInterfaceEdit: TfInterfaceEdit
Top = 26
Width = 28
Caption = 'Name'
Color = clNone
ParentColor = False
end
object edtName: TEdit
@ -74,32 +73,116 @@ object fInterfaceEdit: TfInterfaceEdit
end
object GroupBox1: TGroupBox
Left = 20
Height = 384
Height = 368
Top = 74
Width = 484
Anchors = [akTop, akLeft, akRight, akBottom]
Caption = ' Methods '
ClientHeight = 366
ClientHeight = 350
ClientWidth = 480
TabOrder = 1
object trvMethods: TTreeView
Height = 366
Height = 350
Width = 480
Align = alClient
DefaultItemHeight = 15
PopupMenu = PopupMenu1
TabOrder = 0
end
end
object Button3: TButton
Left = 20
Height = 25
Top = 450
Width = 99
Action = actNewMethod
BorderSpacing.InnerBorder = 4
TabOrder = 2
end
object Button4: TButton
Left = 132
Height = 25
Top = 450
Width = 107
Action = actUpdateOperation
BorderSpacing.InnerBorder = 4
TabOrder = 3
end
object Button5: TButton
Left = 252
Height = 25
Top = 450
Width = 104
Action = actDeleteOperation
BorderSpacing.InnerBorder = 4
TabOrder = 4
end
object Button6: TButton
Left = 396
Height = 25
Top = 450
Width = 107
Action = actBindingEdit
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
TabOrder = 5
end
end
end
object AL: TActionList
left = 130
top = 201
top = 200
object actOK: TAction
Caption = 'OK'
DisableIfNoHandler = True
OnExecute = actOKExecute
OnUpdate = actOKUpdate
end
object actNewMethod: TAction
Caption = 'New operation'
DisableIfNoHandler = True
OnExecute = actNewMethodExecute
end
object actUpdateOperation: TAction
Caption = 'Edit Operation'
DisableIfNoHandler = True
OnExecute = actUpdateOperationExecute
OnUpdate = actUpdateOperationUpdate
end
object actDeleteOperation: TAction
Caption = 'Delete Operation'
DisableIfNoHandler = True
OnExecute = actDeleteOperationExecute
OnUpdate = actUpdateOperationUpdate
end
object actBindingEdit: TAction
Caption = 'Edit Binding'
DisableIfNoHandler = True
OnExecute = actBindingEditExecute
OnUpdate = actBindingEditUpdate
end
end
object PopupMenu1: TPopupMenu
left = 84
top = 233
object MenuItem1: TMenuItem
Action = actNewMethod
OnClick = actNewMethodExecute
end
object MenuItem2: TMenuItem
Action = actUpdateOperation
OnClick = actUpdateOperationExecute
end
object MenuItem3: TMenuItem
Action = actDeleteOperation
OnClick = actDeleteOperationExecute
end
object MenuItem4: TMenuItem
Caption = '-'
end
object MenuItem5: TMenuItem
Action = actBindingEdit
OnClick = actBindingEditExecute
end
end
end

View File

@ -1,6 +1,6 @@
LazarusResources.Add('TfInterfaceEdit','FORMDATA',[
'TPF0'#15'TfInterfaceEdit'#14'fInterfaceEdit'#4'Left'#3's'#2#6'Height'#3'4'#2
+#3'Top'#2'e'#5'Width'#3#19#2#18'HorzScrollBar.Page'#3#18#2#18'VertScrollBar.'
'TPF0'#15'TfInterfaceEdit'#14'fInterfaceEdit'#4'Left'#3'T'#1#6'Height'#3'4'#2
+#3'Top'#2'z'#5'Width'#3#19#2#18'HorzScrollBar.Page'#3#18#2#18'VertScrollBar.'
+'Page'#3'3'#2#13'ActiveControl'#7#7'Button1'#11'BorderStyle'#7#13'bsSizeTool'
+'Win'#7'Caption'#6#14'fInterfaceEdit'#12'ClientHeight'#3'4'#2#11'ClientWidth'
+#3#19#2#8'OnCreate'#7#10'FormCreate'#8'Position'#7#15'poDesktopCenter'#0#6'T'
@ -16,15 +16,40 @@ LazarusResources.Add('TfInterfaceEdit','FORMDATA',[
+'lient'#8'TabIndex'#2#0#8'TabOrder'#2#1#0#9'TTabSheet'#9'TabSheet1'#7'Captio'
+'n'#6#20'Interface definition'#12'ClientHeight'#3#232#1#11'ClientWidth'#3#11
+#2#0#6'TLabel'#6'Label1'#4'Left'#2#20#6'Height'#2#14#3'Top'#2#26#5'Width'#2
+#28#7'Caption'#6#4'Name'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#5'TEdit'
+#7'edtName'#4'Left'#2'<'#6'Height'#2#23#3'Top'#2#26#5'Width'#3#187#1#7'Ancho'
+'rs'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#0#0#0#9'TGroupBox'#9'G'
+'roupBox1'#4'Left'#2#20#6'Height'#3#128#1#3'Top'#2'J'#5'Width'#3#228#1#7'Anc'
+'hors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#7'Caption'#6#11' Meth'
+'ods '#12'ClientHeight'#3'n'#1#11'ClientWidth'#3#224#1#8'TabOrder'#2#1#0#9
+'TTreeView'#10'trvMethods'#6'Height'#3'n'#1#5'Width'#3#224#1#5'Align'#7#8'al'
+'Client'#17'DefaultItemHeight'#2#15#8'TabOrder'#2#0#0#0#0#0#0#11'TActionList'
+#2'AL'#4'left'#3#130#0#3'top'#3#201#0#0#7'TAction'#5'actOK'#7'Caption'#6#2'O'
+'K'#18'DisableIfNoHandler'#9#9'OnExecute'#7#12'actOKExecute'#8'OnUpdate'#7#11
+'actOKUpdate'#0#0#0#0
+#28#7'Caption'#6#4'Name'#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2
+'<'#6'Height'#2#23#3'Top'#2#26#5'Width'#3#187#1#7'Anchors'#11#5'akTop'#6'akL'
+'eft'#7'akRight'#0#8'TabOrder'#2#0#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#20
+#6'Height'#3'p'#1#3'Top'#2'J'#5'Width'#3#228#1#7'Anchors'#11#5'akTop'#6'akLe'
+'ft'#7'akRight'#8'akBottom'#0#7'Caption'#6#11' Methods '#12'ClientHeight'#3
+'^'#1#11'ClientWidth'#3#224#1#8'TabOrder'#2#1#0#9'TTreeView'#10'trvMethods'#6
+'Height'#3'^'#1#5'Width'#3#224#1#5'Align'#7#8'alClient'#17'DefaultItemHeight'
+#2#15#9'PopupMenu'#7#10'PopupMenu1'#8'TabOrder'#2#0#0#0#0#7'TButton'#7'Butto'
+'n3'#4'Left'#2#20#6'Height'#2#25#3'Top'#3#194#1#5'Width'#2'c'#6'Action'#7#12
+'actNewMethod'#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#2#0#0#7'TButt'
+'on'#7'Button4'#4'Left'#3#132#0#6'Height'#2#25#3'Top'#3#194#1#5'Width'#2'k'#6
+'Action'#7#18'actUpdateOperation'#25'BorderSpacing.InnerBorder'#2#4#8'TabOrd'
+'er'#2#3#0#0#7'TButton'#7'Button5'#4'Left'#3#252#0#6'Height'#2#25#3'Top'#3
+#194#1#5'Width'#2'h'#6'Action'#7#18'actDeleteOperation'#25'BorderSpacing.Inn'
+'erBorder'#2#4#8'TabOrder'#2#4#0#0#7'TButton'#7'Button6'#4'Left'#3#140#1#6'H'
+'eight'#2#25#3'Top'#3#194#1#5'Width'#2'k'#6'Action'#7#14'actBindingEdit'#7'A'
+'nchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrd'
+'er'#2#5#0#0#0#0#11'TActionList'#2'AL'#4'left'#3#130#0#3'top'#3#200#0#0#7'TA'
+'ction'#5'actOK'#7'Caption'#6#2'OK'#18'DisableIfNoHandler'#9#9'OnExecute'#7
+#12'actOKExecute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#7'TAction'#12'actNewMeth'
+'od'#7'Caption'#6#13'New operation'#18'DisableIfNoHandler'#9#9'OnExecute'#7
+#19'actNewMethodExecute'#0#0#7'TAction'#18'actUpdateOperation'#7'Caption'#6
+#14'Edit Operation'#18'DisableIfNoHandler'#9#9'OnExecute'#7#25'actUpdateOper'
+'ationExecute'#8'OnUpdate'#7#24'actUpdateOperationUpdate'#0#0#7'TAction'#18
+'actDeleteOperation'#7'Caption'#6#16'Delete Operation'#18'DisableIfNoHandler'
+#9#9'OnExecute'#7#25'actDeleteOperationExecute'#8'OnUpdate'#7#24'actUpdateOp'
+'erationUpdate'#0#0#7'TAction'#14'actBindingEdit'#7'Caption'#6#12'Edit Bindi'
+'ng'#18'DisableIfNoHandler'#9#9'OnExecute'#7#21'actBindingEditExecute'#8'OnU'
+'pdate'#7#20'actBindingEditUpdate'#0#0#0#10'TPopupMenu'#10'PopupMenu1'#4'lef'
+'t'#2'T'#3'top'#3#233#0#0#9'TMenuItem'#9'MenuItem1'#6'Action'#7#12'actNewMet'
+'hod'#7'OnClick'#7#19'actNewMethodExecute'#0#0#9'TMenuItem'#9'MenuItem2'#6'A'
+'ction'#7#18'actUpdateOperation'#7'OnClick'#7#25'actUpdateOperationExecute'#0
+#0#9'TMenuItem'#9'MenuItem3'#6'Action'#7#18'actDeleteOperation'#7'OnClick'#7
+#25'actDeleteOperationExecute'#0#0#9'TMenuItem'#9'MenuItem4'#7'Caption'#6#1
+'-'#0#0#9'TMenuItem'#9'MenuItem5'#6'Action'#7#14'actBindingEdit'#7'OnClick'#7
+#21'actBindingEditExecute'#0#0#0#0
]);

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit uinterfaceedit;
{$mode objfpc}{$H+}
@ -8,26 +20,46 @@ uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ActnList,
ExtCtrls, ComCtrls, StdCtrls, Buttons,
pastree, pascal_parser_intf,
edit_helper;
edit_helper, Menus;
type
{ TfInterfaceEdit }
TfInterfaceEdit = class(TForm)
actDeleteOperation: TAction;
actBindingEdit: TAction;
actUpdateOperation: TAction;
actNewMethod: TAction;
actOK: TAction;
AL: TActionList;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
edtName: TEdit;
GroupBox1: TGroupBox;
Label1: TLabel;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
MenuItem4: TMenuItem;
MenuItem5: TMenuItem;
PC: TPageControl;
Panel1: TPanel;
PopupMenu1: TPopupMenu;
TabSheet1: TTabSheet;
trvMethods: TTreeView;
procedure actBindingEditExecute(Sender: TObject);
procedure actBindingEditUpdate(Sender: TObject);
procedure actDeleteOperationExecute(Sender: TObject);
procedure actNewMethodExecute(Sender: TObject);
procedure actOKExecute(Sender: TObject);
procedure actOKUpdate(Sender: TObject);
procedure actUpdateOperationExecute(Sender: TObject);
procedure actUpdateOperationUpdate(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FUpdateType : TEditType;
@ -60,6 +92,32 @@ begin
TAction(Sender).Enabled := not IsStrEmpty(ExtractIdentifier(edtName.Text));
end;
procedure TfInterfaceEdit.actUpdateOperationExecute(Sender: TObject);
var
node, newNode : TTreeNode;
locObj : TPasProcedure;
begin
node := trvMethods.Selected;
locObj := TPasProcedure(node.Data);
edit_helper.UpdateObject(locObj,FSymbolTable);
trvMethods.BeginUpdate();
try
newNode := FindPainter(locObj).Paint(FSymbolTable,locObj,node.Parent);
newNode.MoveTo(node,naInsert);
node.Free();
finally
trvMethods.EndUpdate();
end;
end;
procedure TfInterfaceEdit.actUpdateOperationUpdate(Sender: TObject);
begin
TAction(Sender).Enabled :=
( trvMethods.Selected <> nil ) and
( trvMethods.Selected.Data <> nil ) and
( TPasElement(trvMethods.Selected.Data).InheritsFrom(TPasProcedure) );
end;
procedure TfInterfaceEdit.FormCreate(Sender: TObject);
begin
trvMethods.Images := DM.IM;
@ -70,6 +128,60 @@ begin
ModalResult := mrOK;
end;
procedure TfInterfaceEdit.actNewMethodExecute(Sender: TObject);
var
prp : TPasProcedure;
begin
prp := CreateMethod(FObject,FSymbolTable);
if Assigned(prp) then begin
LoadMethod(prp);
end;
end;
procedure TfInterfaceEdit.actDeleteOperationExecute(Sender: TObject);
var
node : TTreeNode;
locObj : TPasProcedure;
begin
node := trvMethods.Selected;
locObj := TPasProcedure(node.Data);
node.Data := nil;
trvMethods.BeginUpdate();
try
node.Free();
locObj.Release();
node.Free();
finally
trvMethods.EndUpdate();
end;
end;
procedure TfInterfaceEdit.actBindingEditUpdate(Sender: TObject);
begin
TAction(Sender).Enabled :=
( trvMethods.Selected <> nil ) and
( trvMethods.Selected.Data <> nil ) and
( TPasElement(trvMethods.Selected.Data).InheritsFrom(TwstBinding) );
end;
procedure TfInterfaceEdit.actBindingEditExecute(Sender: TObject);
var
node, newNode : TTreeNode;
locObj : TwstBinding;
begin
node := trvMethods.Selected;
locObj := TwstBinding(node.Data);
edit_helper.UpdateObject(locObj,FSymbolTable);
trvMethods.BeginUpdate();
try
newNode := FindPainter(locObj).Paint(FSymbolTable,locObj,node.Parent);
newNode.MoveTo(node,naInsert);
node.Free();
finally
trvMethods.EndUpdate();
end;
end;
procedure TfInterfaceEdit.LoadMethod(AMthDef: TPasProcedure);
var
topNode : TTreeNode;
@ -83,6 +195,8 @@ var
i : Integer;
mthd : TPasProcedure;
extName : string;
bindingsNode : TTreeNode;
b : TwstBinding;
begin
edtName.Text := '';
trvMethods.BeginUpdate();
@ -102,6 +216,16 @@ begin
end else begin
Self.Caption := 'New';
end;
i := 0;
bindingsNode := trvMethods.Items.AddChild(nil,'Bindings');
while True do begin
b := FSymbolTable.FindBinding(FObject,i);
if ( b = nil ) then
Break;
Inc(i);
FindPainter(b).Paint(FSymbolTable,b,bindingsNode);
end;
trvMethods.Items[0].Expand(False);
finally
trvMethods.EndUpdate();
@ -111,11 +235,18 @@ end;
procedure TfInterfaceEdit.SaveToObject();
var
typExtName, typIntName : string;
b : TwstBinding;
begin
typExtName := ExtractIdentifier(edtName.Text);
typIntName := MakeInternalSymbolNameFrom(typExtName);
FObject.Name := typIntName;
FSymbolTable.RegisterExternalAlias(FObject,typExtName);
b := FSymbolTable.FindBinding(FObject,0);
if ( b = nil ) then begin
FSymbolTable.AddBinding(Format('%sBinding',[typExtName]),FObject);
end else begin
b.Name := Format('%sBinding',[typExtName]);
end
end;
function TfInterfaceEdit.UpdateObject(
@ -126,6 +257,7 @@ function TfInterfaceEdit.UpdateObject(
var
intName : string;
i : Integer;
b : TwstBinding;
begin
Assert(Assigned(ASymbolTable));
FSymbolTable := ASymbolTable;
@ -142,6 +274,7 @@ begin
FObject.ObjKind := okInterface;
FSymbolTable.CurrentModule.InterfaceSection.Declarations.Add(FObject);
FSymbolTable.CurrentModule.InterfaceSection.Types.Add(FObject);
FSymbolTable.AddBinding(Format('%sBinding',[FObject.Name]),FObject);
end;
try
LoadFromObject();
@ -154,6 +287,9 @@ begin
end;
except
if ( FUpdateType = etCreate ) then begin
b := FSymbolTable.FindBinding(FObject,0);
if ( b <> nil ) then
FSymbolTable.DeleteBinding(b);
FSymbolTable.CurrentModule.InterfaceSection.Declarations.Extract(FObject);
FSymbolTable.CurrentModule.InterfaceSection.Types.Extract(FObject);
FObject.Release();

View File

@ -0,0 +1,101 @@
object fModuleEdit: TfModuleEdit
Left = 750
Height = 300
Top = 92
Width = 400
HorzScrollBar.Page = 399
VertScrollBar.Page = 299
ActiveControl = Button1
BorderStyle = bsSizeToolWin
Caption = 'fModuleEdit'
ClientHeight = 300
ClientWidth = 400
Position = poMainFormCenter
object Panel1: TPanel
Height = 50
Top = 250
Width = 400
Align = alBottom
ClientHeight = 50
ClientWidth = 400
TabOrder = 0
object Button1: TButton
Left = 224
Height = 25
Top = 14
Width = 75
Action = actOK
BorderSpacing.InnerBorder = 4
Default = True
TabOrder = 0
end
object Button2: TButton
Left = 312
Height = 25
Top = 14
Width = 75
BorderSpacing.InnerBorder = 4
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
end
object PageControl1: TPageControl
Height = 250
Width = 400
ActivePage = TabSheet1
Align = alClient
TabIndex = 0
TabOrder = 1
object TabSheet1: TTabSheet
Caption = 'Module'
ClientHeight = 224
ClientWidth = 392
object Label1: TLabel
Left = 20
Height = 14
Top = 39
Width = 28
Caption = 'Name'
ParentColor = False
end
object Label2: TLabel
Left = 20
Height = 14
Top = 127
Width = 56
Caption = 'Namespace'
ParentColor = False
end
object edtName: TEdit
Left = 20
Height = 23
Top = 55
Width = 352
Anchors = [akTop, akLeft, akRight]
TabOrder = 0
Text = 'edtName'
end
object edtNamespace: TEdit
Left = 20
Height = 23
Top = 143
Width = 352
Anchors = [akTop, akLeft, akRight]
TabOrder = 1
Text = 'edtNamespace'
end
end
end
object AL: TActionList
left = 115
top = 126
object actOK: TAction
Caption = 'OK'
DisableIfNoHandler = True
OnExecute = actOKExecute
OnUpdate = actOKUpdate
end
end
end

View File

@ -0,0 +1,27 @@
LazarusResources.Add('TfModuleEdit','FORMDATA',[
'TPF0'#12'TfModuleEdit'#11'fModuleEdit'#4'Left'#3#238#2#6'Height'#3','#1#3'To'
+'p'#2'\'#5'Width'#3#144#1#18'HorzScrollBar.Page'#3#143#1#18'VertScrollBar.Pa'
+'ge'#3'+'#1#13'ActiveControl'#7#7'Button1'#11'BorderStyle'#7#13'bsSizeToolWi'
+'n'#7'Caption'#6#11'fModuleEdit'#12'ClientHeight'#3','#1#11'ClientWidth'#3
+#144#1#8'Position'#7#16'poMainFormCenter'#0#6'TPanel'#6'Panel1'#6'Height'#2
+'2'#3'Top'#3#250#0#5'Width'#3#144#1#5'Align'#7#8'alBottom'#12'ClientHeight'#2
+'2'#11'ClientWidth'#3#144#1#8'TabOrder'#2#0#0#7'TButton'#7'Button1'#4'Left'#3
+#224#0#6'Height'#2#25#3'Top'#2#14#5'Width'#2'K'#6'Action'#7#5'actOK'#25'Bord'
+'erSpacing.InnerBorder'#2#4#7'Default'#9#8'TabOrder'#2#0#0#0#7'TButton'#7'Bu'
+'tton2'#4'Left'#3'8'#1#6'Height'#2#25#3'Top'#2#14#5'Width'#2'K'#25'BorderSpa'
+'cing.InnerBorder'#2#4#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2
+#8'TabOrder'#2#1#0#0#0#12'TPageControl'#12'PageControl1'#6'Height'#3#250#0#5
+'Width'#3#144#1#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabIn'
+'dex'#2#0#8'TabOrder'#2#1#0#9'TTabSheet'#9'TabSheet1'#7'Caption'#6#6'Module'
+#12'ClientHeight'#3#224#0#11'ClientWidth'#3#136#1#0#6'TLabel'#6'Label1'#4'Le'
+'ft'#2#20#6'Height'#2#14#3'Top'#2''''#5'Width'#2#28#7'Caption'#6#4'Name'#11
+'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#20#6'Height'#2#14#3'Top'#2
+''#5'Width'#2'8'#7'Caption'#6#9'Namespace'#11'ParentColor'#8#0#0#5'TEdit'#7
+'edtName'#4'Left'#2#20#6'Height'#2#23#3'Top'#2'7'#5'Width'#3'`'#1#7'Anchors'
+#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#0#4'Text'#6#7'edtName'#0#0
+#5'TEdit'#12'edtNamespace'#4'Left'#2#20#6'Height'#2#23#3'Top'#3#143#0#5'Widt'
+'h'#3'`'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#1#4'T'
+'ext'#6#12'edtNamespace'#0#0#0#0#11'TActionList'#2'AL'#4'left'#2's'#3'top'#2
+'~'#0#7'TAction'#5'actOK'#7'Caption'#6#2'OK'#18'DisableIfNoHandler'#9#9'OnEx'
+'ecute'#7#12'actOKExecute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#0#0
]);

View File

@ -0,0 +1,111 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit umoduleedit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
ComCtrls, StdCtrls, ActnList,
pastree, pascal_parser_intf,
edit_helper;
type
{ TfModuleEdit }
TfModuleEdit = class(TForm)
actOK: TAction;
AL: TActionList;
Button1: TButton;
Button2: TButton;
edtName: TEdit;
edtNamespace: TEdit;
Label1: TLabel;
Label2: TLabel;
PageControl1: TPageControl;
Panel1: TPanel;
TabSheet1: TTabSheet;
procedure actOKExecute(Sender: TObject);
procedure actOKUpdate(Sender: TObject);
private
FUpdateType : TEditType;
FObject : TPasModule;
FSymbolTable : TwstPasTreeContainer;
private
property UpdateType : TEditType read FUpdateType;
private
procedure LoadFromObject();
procedure SaveToObject();
public
function UpdateObject(
var AObject : TPasModule;
const AUpdateType : TEditType;
ASymbolTable : TwstPasTreeContainer
):Boolean;
end;
var
fModuleEdit: TfModuleEdit;
implementation
uses parserutils;
{ TfModuleEdit }
procedure TfModuleEdit.actOKUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := not ( IsStrEmpty(edtName.Text) or IsStrEmpty(edtNamespace.Text));
end;
procedure TfModuleEdit.LoadFromObject();
begin
edtName.Text := FSymbolTable.GetExternalName(FObject);
edtNamespace.Text := FSymbolTable.GetExternalName(FObject);
end;
procedure TfModuleEdit.SaveToObject();
begin
FObject.Name := ExtractIdentifier(edtName.Text);
FSymbolTable.RegisterExternalAlias(FObject,Trim(edtNamespace.Text));
end;
function TfModuleEdit.UpdateObject(
var AObject: TPasModule;
const AUpdateType: TEditType;
ASymbolTable: TwstPasTreeContainer
): Boolean;
begin
Assert(Assigned(ASymbolTable));
FSymbolTable := ASymbolTable;
FUpdateType := AUpdateType;
FObject := AObject;
LoadFromObject();
Result := ( ShowModal() = mrOK );
if Result then begin
SaveToObject();
end;
end;
procedure TfModuleEdit.actOKExecute(Sender: TObject);
begin
ModalResult := mrOK;
end;
initialization
{$I umoduleedit.lrs}
end.

View File

@ -0,0 +1,193 @@
object fProcEdit: TfProcEdit
Left = 290
Height = 543
Top = 118
Width = 522
HorzScrollBar.Page = 521
VertScrollBar.Page = 542
ActiveControl = edtName
BorderStyle = bsSizeToolWin
Caption = 'fProcEdit'
ClientHeight = 543
ClientWidth = 522
Position = poMainFormCenter
object PageControl1: TPageControl
Height = 493
Width = 522
ActivePage = TabSheet1
Align = alClient
TabIndex = 0
TabOrder = 0
object TabSheet1: TTabSheet
Caption = '&Operation'
ClientHeight = 467
ClientWidth = 514
object Label1: TLabel
Left = 12
Height = 14
Top = 26
Width = 28
Caption = 'Name'
ParentColor = False
end
object edtName: TEdit
Left = 112
Height = 23
Top = 26
Width = 388
Anchors = [akTop, akLeft, akRight]
TabOrder = 0
Text = 'edtName'
end
object GroupBox1: TGroupBox
Left = 11
Height = 304
Top = 114
Width = 489
Anchors = [akTop, akLeft, akRight, akBottom]
Caption = ' Parametters '
ClientHeight = 286
ClientWidth = 485
TabOrder = 3
object edtParams: TListView
Height = 286
Width = 485
Align = alClient
Columns = <
item
Caption = 'Name'
Width = 180
end
item
Caption = 'Type'
Width = 190
end
item
Caption = 'Modifier'
Width = 60
end
item
end>
RowSelect = True
TabOrder = 0
ViewStyle = vsReport
end
end
object edtFunction: TCheckBox
Left = 12
Height = 13
Top = 74
Width = 96
Caption = 'Function returns'
OnClick = edtFunctionClick
OnEditingDone = edtFunctionEditingDone
TabOrder = 1
end
object edtResultType: TComboBox
Left = 112
Height = 21
Top = 74
Width = 388
Anchors = [akTop, akLeft, akRight]
AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending]
ItemHeight = 13
MaxLength = 0
Style = csDropDownList
TabOrder = 2
end
object Button3: TButton
Left = 12
Height = 25
Top = 429
Width = 108
Action = actNewArg
Anchors = [akLeft, akBottom]
BorderSpacing.InnerBorder = 4
TabOrder = 4
end
object Button4: TButton
Left = 132
Height = 25
Top = 429
Width = 108
Action = actUpdateArgument
Anchors = [akLeft, akBottom]
BorderSpacing.InnerBorder = 4
TabOrder = 5
end
object Button5: TButton
Left = 248
Height = 25
Top = 429
Width = 108
Action = actDeleteArgument
Anchors = [akLeft, akBottom]
BorderSpacing.InnerBorder = 4
TabOrder = 6
end
end
end
object Panel1: TPanel
Height = 50
Top = 493
Width = 522
Align = alBottom
ClientHeight = 50
ClientWidth = 522
TabOrder = 1
object Button1: TButton
Left = 344
Height = 25
Top = 11
Width = 75
Action = actOk
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
Default = True
TabOrder = 0
end
object Button2: TButton
Left = 432
Height = 25
Top = 11
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.InnerBorder = 4
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
end
object AL: TActionList
left = 198
top = 241
object actOk: TAction
Caption = 'OK'
DisableIfNoHandler = True
OnExecute = actOkExecute
OnUpdate = actOkUpdate
end
object actNewArg: TAction
Caption = 'New Argument'
DisableIfNoHandler = True
OnExecute = actNewArgExecute
end
object actUpdateArgument: TAction
Caption = 'Edit Argument'
DisableIfNoHandler = True
OnExecute = actUpdateArgumentExecute
OnUpdate = actUpdateArgumentUpdate
end
object actDeleteArgument: TAction
Caption = 'Delete Argument'
DisableIfNoHandler = True
OnExecute = actDeleteArgumentExecute
OnUpdate = actUpdateArgumentUpdate
end
end
object PopupMenu1: TPopupMenu
left = 83
top = 217
end
end

View File

@ -0,0 +1,55 @@
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
LazarusResources.Add('TfProcEdit','FORMDATA',[
'TPF0'#10'TfProcEdit'#9'fProcEdit'#4'Left'#3'"'#1#6'Height'#3#31#2#3'Top'#2'v'
+#5'Width'#3#10#2#18'HorzScrollBar.Page'#3#9#2#18'VertScrollBar.Page'#3#30#2
+#13'ActiveControl'#7#7'edtName'#11'BorderStyle'#7#13'bsSizeToolWin'#7'Captio'
+'n'#6#9'fProcEdit'#12'ClientHeight'#3#31#2#11'ClientWidth'#3#10#2#8'Position'
+#7#16'poMainFormCenter'#0#12'TPageControl'#12'PageControl1'#6'Height'#3#237#1
+#5'Width'#3#10#2#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabI'
+'ndex'#2#0#8'TabOrder'#2#0#0#9'TTabSheet'#9'TabSheet1'#7'Caption'#6#10'&Oper'
+'ation'#12'ClientHeight'#3#211#1#11'ClientWidth'#3#2#2#0#6'TLabel'#6'Label1'
+#4'Left'#2#12#6'Height'#2#14#3'Top'#2#26#5'Width'#2#28#7'Caption'#6#4'Name'
+#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2'p'#6'Height'#2#23#3'Top'
+#2#26#5'Width'#3#132#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOr'
+'der'#2#0#4'Text'#6#7'edtName'#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#11#6
+'Height'#3'0'#1#3'Top'#2'r'#5'Width'#3#233#1#7'Anchors'#11#5'akTop'#6'akLeft'
+#7'akRight'#8'akBottom'#0#7'Caption'#6#15' Parametters '#12'ClientHeight'#3
+#30#1#11'ClientWidth'#3#229#1#8'TabOrder'#2#3#0#9'TListView'#9'edtParams'#6
+'Height'#3#30#1#5'Width'#3#229#1#5'Align'#7#8'alClient'#7'Columns'#14#1#7'Ca'
+'ption'#6#4'Name'#5'Width'#3#180#0#0#1#7'Caption'#6#4'Type'#5'Width'#3#190#0
+#0#1#7'Caption'#6#8'Modifier'#5'Width'#2'<'#0#1#0#0#9'RowSelect'#9#8'TabOrde'
+'r'#2#0#9'ViewStyle'#7#8'vsReport'#0#0#0#9'TCheckBox'#11'edtFunction'#4'Left'
+#2#12#6'Height'#2#13#3'Top'#2'J'#5'Width'#2'`'#7'Caption'#6#16'Function retu'
+'rns'#7'OnClick'#7#16'edtFunctionClick'#13'OnEditingDone'#7#22'edtFunctionEd'
+'itingDone'#8'TabOrder'#2#1#0#0#9'TComboBox'#13'edtResultType'#4'Left'#2'p'#6
+'Height'#2#21#3'Top'#2'J'#5'Width'#3#132#1#7'Anchors'#11#5'akTop'#6'akLeft'#7
+'akRight'#0#16'AutoCompleteText'#11#22'cbactEndOfLineComplete'#20'cbactSearc'
+'hAscending'#0#10'ItemHeight'#2#13#9'MaxLength'#2#0#5'Style'#7#14'csDropDown'
+'List'#8'TabOrder'#2#2#0#0#7'TButton'#7'Button3'#4'Left'#2#12#6'Height'#2#25
+#3'Top'#3#173#1#5'Width'#2'l'#6'Action'#7#9'actNewArg'#7'Anchors'#11#6'akLef'
+'t'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#4#0#0#7'TB'
+'utton'#7'Button4'#4'Left'#3#132#0#6'Height'#2#25#3'Top'#3#173#1#5'Width'#2
+'l'#6'Action'#7#17'actUpdateArgument'#7'Anchors'#11#6'akLeft'#8'akBottom'#0
+#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#5#0#0#7'TButton'#7'Button5'
+#4'Left'#3#248#0#6'Height'#2#25#3'Top'#3#173#1#5'Width'#2'l'#6'Action'#7#17
+'actDeleteArgument'#7'Anchors'#11#6'akLeft'#8'akBottom'#0#25'BorderSpacing.I'
+'nnerBorder'#2#4#8'TabOrder'#2#6#0#0#0#0#6'TPanel'#6'Panel1'#6'Height'#2'2'#3
+'Top'#3#237#1#5'Width'#3#10#2#5'Align'#7#8'alBottom'#12'ClientHeight'#2'2'#11
+'ClientWidth'#3#10#2#8'TabOrder'#2#1#0#7'TButton'#7'Button1'#4'Left'#3'X'#1#6
+'Height'#2#25#3'Top'#2#11#5'Width'#2'K'#6'Action'#7#5'actOk'#7'Anchors'#11#5
+'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#7'Default'#9#8'TabOrd'
+'er'#2#0#0#0#7'TButton'#7'Button2'#4'Left'#3#176#1#6'Height'#2#25#3'Top'#2#11
+#5'Width'#2'K'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBor'
+'der'#2#4#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'
+#2#1#0#0#0#11'TActionList'#2'AL'#4'left'#3#198#0#3'top'#3#241#0#0#7'TAction'
+#5'actOk'#7'Caption'#6#2'OK'#18'DisableIfNoHandler'#9#9'OnExecute'#7#12'actO'
+'kExecute'#8'OnUpdate'#7#11'actOkUpdate'#0#0#7'TAction'#9'actNewArg'#7'Capti'
+'on'#6#12'New Argument'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16'actNewArg'
+'Execute'#0#0#7'TAction'#17'actUpdateArgument'#7'Caption'#6#13'Edit Argument'
+#18'DisableIfNoHandler'#9#9'OnExecute'#7#24'actUpdateArgumentExecute'#8'OnUp'
+'date'#7#23'actUpdateArgumentUpdate'#0#0#7'TAction'#17'actDeleteArgument'#7
+'Caption'#6#15'Delete Argument'#18'DisableIfNoHandler'#9#9'OnExecute'#7#24'a'
+'ctDeleteArgumentExecute'#8'OnUpdate'#7#23'actUpdateArgumentUpdate'#0#0#0#10
+'TPopupMenu'#10'PopupMenu1'#4'left'#2'S'#3'top'#3#217#0#0#0#0
]);

View File

@ -0,0 +1,348 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit uprocedit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls,
ExtCtrls, StdCtrls, ActnList, Menus,
pastree, pascal_parser_intf,
edit_helper, Buttons;
type
{ TfProcEdit }
TfProcEdit = class(TForm)
actDeleteArgument: TAction;
actUpdateArgument: TAction;
actNewArg: TAction;
actOk: TAction;
AL: TActionList;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
edtFunction: TCheckBox;
edtResultType: TComboBox;
edtName: TEdit;
GroupBox1: TGroupBox;
Label1: TLabel;
edtParams: TListView;
PageControl1: TPageControl;
Panel1: TPanel;
PopupMenu1: TPopupMenu;
TabSheet1: TTabSheet;
procedure actDeleteArgumentExecute(Sender: TObject);
procedure actNewArgExecute(Sender: TObject);
procedure actOkExecute(Sender: TObject);
procedure actOkUpdate(Sender: TObject);
procedure actUpdateArgumentExecute(Sender: TObject);
procedure actUpdateArgumentUpdate(Sender: TObject);
procedure edtFunctionClick(Sender: TObject);
procedure edtFunctionEditingDone(Sender: TObject);
private
FUpdateType : TEditType;
FObject : TPasProcedure;
FSymbolTable : TwstPasTreeContainer;
FOldReturnType : TPasType;
private
property UpdateType : TEditType read FUpdateType;
private
procedure PrepareResultCombo();
procedure LoadArgument(AArg : TPasArgument);
procedure LoadFromObject();
procedure SaveToObject();
public
function UpdateObject(
var AObject : TPasProcedure;
const AUpdateType : TEditType;
ASymbolTable : TwstPasTreeContainer
):Boolean;
end;
var
fProcEdit: TfProcEdit;
implementation
uses parserutils, common_gui_utils;
{ TfProcEdit }
procedure TfProcEdit.actOkExecute(Sender: TObject);
begin
ModalResult := mrOK;
end;
procedure TfProcEdit.actNewArgExecute(Sender: TObject);
var
prp : TPasArgument;
begin
prp := CreateArgument(FObject.ProcType,FSymbolTable);
if Assigned(prp) then begin
if ( FObject.ProcType.Args.IndexOf(prp) = -1 ) then begin
FObject.ProcType.Args.Add(prp);
end;
LoadArgument(prp);
end;
end;
procedure TfProcEdit.actDeleteArgumentExecute(Sender: TObject);
var
prop : TPasArgument;
begin
prop := TPasArgument(edtParams.ItemFocused.Data);
FObject.ProcType.Args.Extract(prop);
prop.Release();
edtParams.ItemFocused.Free();
end;
procedure TfProcEdit.actOkUpdate(Sender: TObject);
var
b : Boolean;
i : Integer;
locProc : TPasProcedure;
memberList : TList;
begin
b := ( not IsStrEmpty(edtName.Text) ) and
( ( not edtFunction.Checked ) or ( edtResultType.ItemIndex > -1 ) );
if b then begin
memberList := TPasClassType(FObject.Parent).Members;
for i := 0 to Pred(memberList.Count) do begin
if TPasElement(memberList[i]).InheritsFrom(TPasProcedure) then begin
locProc := TPasProcedure(memberList[i]);
if ( locProc <> FObject ) and
( AnsiSameText(locProc.Name,FObject.Name) or
AnsiSameText(FSymbolTable.GetExternalName(locProc),FSymbolTable.GetExternalName(FObject))
)
then begin
b := False;
Break;
end;
end;
end;
end;
TAction(Sender).Enabled := b;
end;
procedure TfProcEdit.actUpdateArgumentExecute(Sender: TObject);
var
prp : TPasArgument;
itm : TListItem;
begin
itm := edtParams.ItemFocused;
if Assigned(itm) then begin
prp := TPasArgument(itm.Data);
if edit_helper.UpdateObject(prp,FSymbolTable) then begin
itm.Free();
LoadArgument(prp);
end;
end;
end;
procedure TfProcEdit.actUpdateArgumentUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Assigned(edtParams.ItemFocused);
end;
procedure TfProcEdit.edtFunctionClick(Sender: TObject);
begin
//edtResultType.Enabled := edtFunction.Checked;
end;
procedure TfProcEdit.edtFunctionEditingDone(Sender: TObject);
begin
edtResultType.Enabled := edtFunction.Checked;
end;
procedure TfProcEdit.PrepareResultCombo();
begin
edtResultType.Items.BeginUpdate();
try
FillTypeList(edtResultType.Items,FSymbolTable);
finally
edtResultType.Items.EndUpdate();
end;
end;
procedure TfProcEdit.LoadArgument(AArg: TPasArgument);
var
itm : TListItem;
extName : string;
begin
extName := FSymbolTable.GetExternalName(AArg);
itm := FindItem(extName,edtParams.Items);
if ( itm = nil ) then begin
itm := edtParams.Items.Add();
end;
itm.Caption := extName;
itm.SubItems.Add(FSymbolTable.GetExternalName(AArg.ArgType));
itm.SubItems.Add(AccessNames[AArg.Access]);
itm.Data := AArg;
end;
procedure TfProcEdit.LoadFromObject();
var
i : Integer;
prp : TPasArgument;
extName : string;
argList : TList;
begin
edtName.Text := '';
edtParams.Clear();
if Assigned(FObject) then begin
extName := FSymbolTable.GetExternalName(FObject);
Self.Caption := extName;
edtName.Text := extName;
edtFunction.Checked := FObject.InheritsFrom(TPasFunction);
edtResultType.Enabled := edtFunction.Checked;
if FObject.InheritsFrom(TPasFunction) then begin
edtResultType.ItemIndex := edtResultType.Items.IndexOfObject(TPasFunctionType(FObject.ProcType).ResultEl.ResultType);
end;
argList := FObject.ProcType.Args;
for i := 0 to Pred(argList.Count) do begin
prp := TPasArgument(argList[i]);
LoadArgument(prp);
end;
end else begin
Self.Caption := 'New';
end;
end;
procedure TfProcEdit.SaveToObject();
procedure CopyArgs(AFrom,ATo : TPasProcedureType);
var
argList : TList;
arg, newArg : TPasArgument;
k, ck : Integer;
begin
argList := AFrom.Args;
ck := argList.Count;
for k := 0 to Pred(ck) do begin
arg := TPasArgument(argList[k]);
newArg := TPasArgument(FSymbolTable.CreateElement(TPasArgument,arg.Name,ATo,visDefault,'',0));
ATo.Args.Add(newArg);
newArg.Access := arg.Access;
newArg.ArgType := arg.ArgType;
newArg.ArgType.AddRef();
newArg.Value := arg.Value;
end;
end;
procedure CreateFunctionObject();
var
prt : TPasClassType;
newObj : TPasFunction;
newObjType : TPasFunctionType;
begin
prt := FObject.Parent as TPasClassType;
prt.Members.Extract(FObject);
try
newObj := TPasFunction(FSymbolTable.CreateElement(TPasFunction,FObject.Name,prt,visPublic,'',0));
prt.Members.Add(newObj);
newObjType := FSymbolTable.CreateFunctionType('','result',newObj,False,'',0);
newObj.ProcType := newObjType;
CopyArgs(FObject.ProcType,newObjType);
newObjType.ResultEl.ResultType := edtResultType.Items.Objects[edtResultType.ItemIndex] as TPasType;
newObjType.ResultEl.ResultType.AddRef();
finally
FObject.Release();
FObject := newObj;
end;
end;
procedure CreateProcObject();
var
prt : TPasClassType;
newObj : TPasProcedure;
newObjType : TPasProcedureType;
begin
prt := FObject.Parent as TPasClassType;
prt.Members.Extract(FObject);
try
newObj := TPasProcedure(FSymbolTable.CreateElement(TPasProcedure,FObject.Name,prt,visPublic,'',0));
prt.Members.Add(newObj);
newObjType := TPasProcedureType(FSymbolTable.CreateElement(TPasProcedureType,'',newObj,visDefault,'',0));
newObj.ProcType := newObjType;
CopyArgs(FObject.ProcType,newObjType);
finally
FObject.Release();
FObject := newObj;
end;
end;
procedure CheckObjectType();
begin
if FObject.InheritsFrom(TPasFunction) then begin
if ( FOldReturnType <> nil ) and
( FOldReturnType <> TPasFunctionType(FObject.ProcType).ResultEl.ResultType )
then begin
FOldReturnType.Release();
end;
end;
if edtFunction.Checked and ( not FObject.InheritsFrom(TPasFunction) ) then begin
CreateFunctionObject();
end else if ( not edtFunction.Checked ) and ( FObject.InheritsFrom(TPasFunction) ) then begin
CreateProcObject();
end;
end;
var
typExtName, typIntName : string;
locObj : TPasProcedure;
begin
CheckObjectType();
typExtName := ExtractIdentifier(edtName.Text);
typIntName := MakeInternalSymbolNameFrom(typExtName);
locObj := FObject;
locObj.Name := typIntName;
FSymbolTable.RegisterExternalAlias(locObj,typExtName);
end;
function TfProcEdit.UpdateObject(
var AObject : TPasProcedure;
const AUpdateType : TEditType;
ASymbolTable : TwstPasTreeContainer
): Boolean;
begin
Assert(Assigned(ASymbolTable));
Assert(Assigned(AObject));
FSymbolTable := ASymbolTable;
FUpdateType := AUpdateType;
FObject := AObject;
if FObject.InheritsFrom(TPasFunction) then
FOldReturnType := TPasFunctionType(FObject.ProcType).ResultEl.ResultType;
PrepareResultCombo();
LoadFromObject();
Result := ( ShowModal() = mrOK );
if Result then begin
try
SaveToObject();
AObject := FObject;
except
Result := False;
raise;
end;
end;
end;
initialization
{$I uprocedit.lrs}
end.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,356 @@
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
LazarusResources.Add('TfWstTypeLibraryEdit','FORMDATA',[
'TPF0'#20'TfWstTypeLibraryEdit'#19'fWstTypeLibraryEdit'#4'Left'#3#142#0#6'Hei'
+'ght'#3#132#2#3'Top'#3#192#0#5'Width'#3'A'#3#18'HorzScrollBar.Page'#3'@'#3#18
+'VertScrollBar.Page'#3'o'#2#13'ActiveControl'#7#9'trvSchema'#7'Caption'#6'+['
+'Web Services Toolkit ] Type Library Editor'#12'ClientHeight'#3'p'#2#11'Clie'
+'ntWidth'#3'A'#3#4'Menu'#7#9'MainMenu1'#7'OnClose'#7#9'FormClose'#6'OnShow'#7
+#8'FormShow'#8'Position'#7#15'poDesktopCenter'#0#10'TStatusBar'#2'SB'#6'Heig'
+'ht'#2#23#3'Top'#3'Y'#2#5'Width'#3'A'#3#6'Panels'#14#1#5'Width'#3#200#0#0#1#5
+'Width'#2'2'#0#0#11'SimplePanel'#8#0#0#6'TPanel'#6'Panel1'#6'Height'#3'Y'#2#5
+'Width'#3':'#1#5'Align'#7#6'alLeft'#12'ClientHeight'#3'Y'#2#11'ClientWidth'#3
+':'#1#8'TabOrder'#2#0#0#9'TTreeView'#9'trvSchema'#4'Left'#2#1#6'Height'#3'W'
+#2#3'Top'#2#1#5'Width'#3'8'#1#5'Align'#7#8'alClient'#17'DefaultItemHeight'#2
+#15#9'PopupMenu'#7#10'PopupMenu1'#8'TabOrder'#2#0#0#0#0#6'TPanel'#6'Panel2'#4
+'Left'#3'B'#1#6'Height'#3'Y'#2#5'Width'#3#255#1#5'Align'#7#8'alClient'#12'Cl'
+'ientHeight'#3'Y'#2#11'ClientWidth'#3#255#1#8'TabOrder'#2#1#0#12'TPageContro'
+'l'#2'PC'#4'Left'#2#1#6'Height'#3'W'#2#3'Top'#2#1#5'Width'#3#253#1#10'Active'
+'Page'#7#11'tsInterface'#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'TabOrder'#2
+#0#0#9'TTabSheet'#11'tsInterface'#7'Caption'#6#10'&Interface'#12'ClientHeigh'
+'t'#3'='#2#11'ClientWidth'#3#245#1#0#8'TSynEdit'#12'srcInterface'#6'Height'#3
+'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHA'
+'RSET'#10'Font.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Co'
+'urier'#10'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'Popu'
+'pMenu2'#8'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#17'Gutter.DigitCou'
+'nt'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCodeFolding'#9#23'Gutter'
+'.CodeFoldingWidth'#2#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1
+#7'Command'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7
+'Command'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7
+'Command'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1
+#7'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7
+'Command'#2#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7
+'Command'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7
+'Command'#2#6#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7
+'Command'#2#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7
+'Command'#2#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7
+'Command'#2#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'C'
+'ommand'#2#13#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7
+'Command'#2#7#8'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'C'
+'ommand'#2#15#8'ShortCut'#3'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7
+'Command'#2#8#8'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'C'
+'ommand'#2#16#8'ShortCut'#3'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7
+'Command'#3#223#0#8'ShortCut'#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0
+#1#7'Command'#3'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2
+'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCu'
+'t'#2#8#0#1#7'Command'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'S'
+'hortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command'
+#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7
+'Command'#3#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@'
+#0#1#7'Command'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3
+'M@'#0#1#7'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'Short'
+'Cut'#3'T@'#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8
+'ShortCut'#3'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251
+#1#8'ShortCut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'
+#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Comm'
+'and'#3'-'#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7
+'Command'#3'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0
+#1#7'Command'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5'
+'@'#0#1#7'Command'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'
+#3'7@'#0#1#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'Short'
+'Cut'#3'9@'#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8
+'ShortCut'#3'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'
+#1#8'ShortCut'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3
+'d'#1#8'ShortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Comman'
+'d'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'C'
+'ommand'#3'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0
+#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3
,'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'
+#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#0#0#0#9'T'
+'TabSheet'#6'tsWSDL'#7'Caption'#6#5'&WSDL'#12'ClientHeight'#3'='#2#11'Client'
+'Width'#3#245#1#0#8'TSynEdit'#7'srcWSDL'#6'Height'#3'='#2#5'Width'#3#245#1#5
+'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color'#7#7
+'clBlack'#11'Font.Height'#2#233#9'Font.Name'#6#7'Courier'#10'Font.Pitch'#7#7
+'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8'TabOrder'#2#0#23
+'BookMarkOptions.Xoffset'#2'6'#22'Gutter.ShowLineNumbers'#9#23'Gutter.CodeFo'
+'ldingWidth'#2#14#11'Highlighter'#7#10'SynXMLSyn1'#10'Keystrokes'#14#1#7'Com'
+'mand'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Comm'
+'and'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Co'
+'mmand'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7
+'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'C'
+'ommand'#2#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'C'
+'ommand'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7
+'Command'#2#6#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7
+'Command'#2#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7
+'Command'#2#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7
+'Command'#2#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'C'
+'ommand'#2#13#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7
+'Command'#2#7#8'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'C'
+'ommand'#2#15#8'ShortCut'#3'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7
+'Command'#2#8#8'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'C'
+'ommand'#2#16#8'ShortCut'#3'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7
+'Command'#3#223#0#8'ShortCut'#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0
+#1#7'Command'#3'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2
+'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCu'
+'t'#2#8#0#1#7'Command'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'S'
+'hortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command'
+#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7
+'Command'#3#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@'
+#0#1#7'Command'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3
+'M@'#0#1#7'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'Short'
+'Cut'#3'T@'#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8
+'ShortCut'#3'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251
+#1#8'ShortCut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'
+#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Comm'
+'and'#3'-'#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7
+'Command'#3'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0
+#1#7'Command'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5'
+'@'#0#1#7'Command'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'
+#3'7@'#0#1#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'Short'
+'Cut'#3'9@'#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8
+'ShortCut'#3'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'
+#1#8'ShortCut'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3
+'d'#1#8'ShortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Comman'
+'d'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'C'
+'ommand'#3'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0
+#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3
+'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'
+#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#0#0#0#9'T'
+'TabSheet'#7'tsProxy'#7'Caption'#6#6'&Proxy'#12'ClientHeight'#3'='#2#11'Clie'
+'ntWidth'#3#245#1#0#8'TSynEdit'#8'srcProxy'#6'Height'#3'='#2#5'Width'#3#245#1
+#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color'#7
+#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Courier'#10'Font.Pitch'#7
+#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8'TabOrder'#2#0
+#23'BookMarkOptions.Xoffset'#2'Q'#24'BookMarkOptions.OnChange'#13#17'Gutter.'
+'DigitCount'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCodeFolding'#9#15
+'Gutter.OnChange'#13#23'Gutter.CodeFoldingWidth'#2#14#11'Highlighter'#7#10'S'
+'ynPasSyn1'#10'Keystrokes'#14#1#7'Command'#2#3#8'ShortCut'#2'&'#0#1#7'Comman'
+'d'#2'g'#8'ShortCut'#3'& '#0#1#7'Command'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Co'
+'mmand'#2#4#8'ShortCut'#2'('#0#1#7'Command'#2'h'#8'ShortCut'#3'( '#0#1#7'Com'
+'mand'#3#212#0#8'ShortCut'#3'(@'#0#1#7'Command'#2#1#8'ShortCut'#2'%'#0#1#7'C'
+'ommand'#2'e'#8'ShortCut'#3'% '#0#1#7'Command'#2#5#8'ShortCut'#3'%@'#0#1#7'C'
,'ommand'#2'i'#8'ShortCut'#3'%`'#0#1#7'Command'#2#2#8'ShortCut'#2''''#0#1#7'C'
+'ommand'#2'f'#8'ShortCut'#3''' '#0#1#7'Command'#2#6#8'ShortCut'#3'''@'#0#1#7
+'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7'Command'#2#10#8'ShortCut'#2'"'#0#1#7
+'Command'#2'n'#8'ShortCut'#3'" '#0#1#7'Command'#2#14#8'ShortCut'#3'"@'#0#1#7
+'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7'Command'#2#9#8'ShortCut'#2'!'#0#1#7'C'
+'ommand'#2'm'#8'ShortCut'#3'! '#0#1#7'Command'#2#13#8'ShortCut'#3'!@'#0#1#7
+'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7'Command'#2#7#8'ShortCut'#2'$'#0#1#7'C'
+'ommand'#2'k'#8'ShortCut'#3'$ '#0#1#7'Command'#2#15#8'ShortCut'#3'$@'#0#1#7
+'Command'#2's'#8'ShortCut'#3'$`'#0#1#7'Command'#2#8#8'ShortCut'#2'#'#0#1#7'C'
+'ommand'#2'l'#8'ShortCut'#3'# '#0#1#7'Command'#2#16#8'ShortCut'#3'#@'#0#1#7
+'Command'#2't'#8'ShortCut'#3'#`'#0#1#7'Command'#3#223#0#8'ShortCut'#2'-'#0#1
+#7'Command'#3#201#0#8'ShortCut'#3'-@'#0#1#7'Command'#3'\'#2#8'ShortCut'#3'- '
+#0#1#7'Command'#3#246#1#8'ShortCut'#2'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3
+'. '#0#1#7'Command'#3#245#1#8'ShortCut'#2#8#0#1#7'Command'#3#245#1#8'ShortCu'
+'t'#3#8' '#0#1#7'Command'#3#248#1#8'ShortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8
+'ShortCut'#4#8#128#0#0#0#1#7'Command'#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'C'
+'ommand'#3#253#1#8'ShortCut'#2#13#0#1#7'Command'#3#199#0#8'ShortCut'#3'A@'#0
+#1#7'Command'#3#201#0#8'ShortCut'#3'C@'#0#1#7'Command'#3'b'#2#8'ShortCut'#3
+'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3'M@'#0#1#7'Command'#3#254#1#8'Short'
+'Cut'#3'N@'#0#1#7'Command'#3#247#1#8'ShortCut'#3'T@'#0#1#7'Command'#3'c'#2#8
+'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8'ShortCut'#3'V@'#0#1#7'Command'#3'['
+#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251#1#8'ShortCut'#3'Y@'#0#1#7'Command'
+#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Com'
+'mand'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Command'#3'-'#1#8'ShortCut'#3'0@'#0#1#7
+'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7'Command'#3'/'#1#8'ShortCut'#3'2@'#0
+#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0#1#7'Command'#3'1'#1#8'ShortCut'#3'4'
+'@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5@'#0#1#7'Command'#3'3'#1#8'ShortCut'
+#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'#3'7@'#0#1#7'Command'#3'5'#1#8'Short'
+'Cut'#3'8@'#0#1#7'Command'#3'6'#1#8'ShortCut'#3'9@'#0#1#7'Command'#3'_'#1#8
+'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8'ShortCut'#3'1`'#0#1#7'Command'#3'a'
+#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'#1#8'ShortCut'#3'3`'#0#1#7'Command'#3
+'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3'd'#1#8'ShortCut'#3'5`'#0#1#7'Comman'
+'d'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Command'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'C'
+'ommand'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'Command'#3'h'#1#8'ShortCut'#3'9`'#0#1
+#7'Command'#3#231#0#8'ShortCut'#3'N`'#0#1#7'Command'#3#232#0#8'ShortCut'#3'C'
+'`'#0#1#7'Command'#3#233#0#8'ShortCut'#3'L`'#0#1#7'Command'#3'd'#2#8'ShortCu'
+'t'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'#3#9' '#0#1#7'Command'#3#250#0#8'Sh'
+'ortCut'#3'B`'#0#0#8'ReadOnly'#9#22'SelectedColor.OnChange'#13#0#0#0#9'TTabS'
+'heet'#5'tsImp'#7'Caption'#6#24'Im&plementation Skeleton'#12'ClientHeight'#3
+'='#2#11'ClientWidth'#3#245#1#0#8'TSynEdit'#6'srcImp'#6'Height'#3'='#2#5'Wid'
+'th'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'F'
+'ont.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Courier'#10
+'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8
+'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#24'BookMarkOptions.OnChange'
+#13#17'Gutter.DigitCount'#2#5#22'Gutter.ShowLineNumbers'#9#22'Gutter.ShowCod'
+'eFolding'#9#15'Gutter.OnChange'#13#23'Gutter.CodeFoldingWidth'#2#14#11'High'
+'lighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1#7'Command'#2#3#8'ShortCut'#2
+'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Command'#3#211#0#8'ShortCut'
+#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Command'#2'h'#8'ShortCut'#3
+'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7'Command'#2#1#8'ShortCut'
+#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'Command'#2#5#8'ShortCut'#3
+'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'Command'#2#2#8'ShortCut'#2
+''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7'Command'#2#6#8'ShortCut'#3
+'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7'Command'#2#10#8'ShortCut'
+#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7'Command'#2#14#8'ShortCut'#3
+'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7'Command'#2#9#8'ShortCut'#2
+'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'Command'#2#13#8'ShortCut'#3
+'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7'Command'#2#7#8'ShortCut'#2
+'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'Command'#2#15#8'ShortCut'#3
+'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7'Command'#2#8#8'ShortCut'#2
+'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'Command'#2#16#8'ShortCut'#3
+'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7'Command'#3#223#0#8'ShortCut'
+#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0#1#7'Command'#3'\'#2#8'Short'
+'Cut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2'.'#0#1#7'Command'#3'['#2#8
,'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCut'#2#8#0#1#7'Command'#3#245
+#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'ShortCut'#3#8'@'#0#1#7'Comman'
+'d'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command'#3'Z'#2#8'ShortCut'#4#8#160
+#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7'Command'#3#199#0#8'ShortC'
+'ut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@'#0#1#7'Command'#3'b'#2#8
+'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3'M@'#0#1#7'Command'#3
+#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'ShortCut'#3'T@'#0#1#7'Comm'
+'and'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8'ShortCut'#3'V@'#0#1#7
+'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251#1#8'ShortCut'#3'Y@'#0
+#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'#3'Y'#2#8'ShortCut'#3
+'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Command'#3'-'#1#8'ShortCu'
+'t'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7'Command'#3'/'#1#8'Sh'
+'ortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0#1#7'Command'#3'1'#1
+#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5@'#0#1#7'Command'#3
+'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'#3'7@'#0#1#7'Comman'
+'d'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'ShortCut'#3'9@'#0#1#7'C'
+'ommand'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8'ShortCut'#3'1`'#0#1
+#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'#1#8'ShortCut'#3'3`'
+#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3'd'#1#8'ShortCut'#3
+'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Command'#3'f'#1#8'ShortCu'
+'t'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'Command'#3'h'#1#8'Sh'
+'ortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0#1#7'Command'#3#232
+#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3'L`'#0#1#7'Command'
+#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'#3#9' '#0#1#7'Comma'
+'nd'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#22'SelectedColor.OnChange'
+#13#0#0#0#9'TTabSheet'#8'tsBinder'#7'Caption'#6#7'&Binder'#12'ClientHeight'#3
+'='#2#11'ClientWidth'#3#245#1#0#8'TSynEdit'#9'srcBinder'#6'Height'#3'='#2#5
+'Width'#3#245#1#5'Align'#7#8'alClient'#12'Font.CharSet'#7#12'ANSI_CHARSET'#10
+'Font.Color'#7#7'clBlack'#11'Font.Height'#2#236#9'Font.Name'#6#7'Courier'#10
+'Font.Pitch'#7#7'fpFixed'#11'ParentColor'#8#9'PopupMenu'#7#10'PopupMenu2'#8
+'TabOrder'#2#0#23'BookMarkOptions.Xoffset'#2'Q'#24'BookMarkOptions.OnChange'
+#13#15'Gutter.AutoSize'#9#17'Gutter.DigitCount'#2#5#22'Gutter.ShowLineNumber'
+'s'#9#22'Gutter.ShowCodeFolding'#9#15'Gutter.OnChange'#13#23'Gutter.CodeFold'
+'ingWidth'#2#14#11'Highlighter'#7#10'SynPasSyn1'#10'Keystrokes'#14#1#7'Comma'
+'nd'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Comman'
+'d'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Comm'
+'and'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7
+'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'C'
+'ommand'#2#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'C'
+'ommand'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7
+'Command'#2#6#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7
+'Command'#2#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7
+'Command'#2#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7
+'Command'#2#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'C'
+'ommand'#2#13#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7
+'Command'#2#7#8'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'C'
+'ommand'#2#15#8'ShortCut'#3'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7
+'Command'#2#8#8'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'C'
+'ommand'#2#16#8'ShortCut'#3'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7
+'Command'#3#223#0#8'ShortCut'#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0
+#1#7'Command'#3'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2
+'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCu'
+'t'#2#8#0#1#7'Command'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'S'
+'hortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command'
+#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7
+'Command'#3#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@'
+#0#1#7'Command'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3
+'M@'#0#1#7'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'Short'
+'Cut'#3'T@'#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8
+'ShortCut'#3'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251
+#1#8'ShortCut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'
+#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Comm'
+'and'#3'-'#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7
+'Command'#3'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0
,#1#7'Command'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5'
+'@'#0#1#7'Command'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'
+#3'7@'#0#1#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'Short'
+'Cut'#3'9@'#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8
+'ShortCut'#3'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'
+#1#8'ShortCut'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3
+'d'#1#8'ShortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Comman'
+'d'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'C'
+'ommand'#3'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0
+#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3
+'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'
+#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#8'ReadOnly'#9#22'Select'
+'edColor.OnChange'#13#0#0#0#9'TTabSheet'#5'tsLog'#7'Caption'#6#4'&Log'#12'Cl'
+'ientHeight'#3'='#2#11'ClientWidth'#3#245#1#0#5'TMemo'#6'mmoLog'#6'Height'#3
+'='#2#5'Width'#3#245#1#5'Align'#7#8'alClient'#13'Lines.Strings'#1#6#0#0#10'S'
+'crollBars'#7#6'ssBoth'#8'TabOrder'#2#0#0#0#0#0#0#9'TSplitter'#9'Splitter1'#4
+'Left'#3':'#1#6'Height'#3'Y'#2#5'Width'#2#8#5'Color'#7#7'clBlack'#11'ParentC'
+'olor'#8#0#0#9'TMainMenu'#9'MainMenu1'#4'left'#3'`'#1#3'top'#2'p'#0#9'TMenuI'
+'tem'#9'MenuItem1'#7'Caption'#6#6'&Files'#0#9'TMenuItem'#10'MenuItem16'#6'Ac'
+'tion'#7#10'actNewFile'#7'OnClick'#7#17'actNewFileExecute'#0#0#9'TMenuItem'#9
+'MenuItem2'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuItem5'#6'Action'#7#11'a'
+'ctOpenFile'#7'OnClick'#7#18'actOpenFileExecute'#0#0#9'TMenuItem'#9'MenuItem'
+'3'#6'Action'#7#9'actExport'#7'OnClick'#7#16'actExportExecute'#0#0#9'TMenuIt'
+'em'#9'MenuItem7'#6'Action'#7#7'actSave'#7'OnClick'#7#14'actSaveExecute'#0#0
+#9'TMenuItem'#10'MenuItem32'#6'Action'#7#9'actSaveAs'#7'OnClick'#7#16'actSav'
+'eAsExecute'#0#0#9'TMenuItem'#10'MenuItem17'#7'Caption'#6#1'-'#0#0#9'TMenuIt'
+'em'#9'MenuItem4'#6'Action'#7#7'actExit'#7'OnClick'#7#14'actExitExecute'#0#0
+#0#9'TMenuItem'#10'MenuItem14'#7'Caption'#6#5'&View'#0#9'TMenuItem'#10'MenuI'
+'tem15'#6'Action'#7#14'actRefreshView'#7'OnClick'#7#21'actRefreshViewExecute'
+#0#0#9'TMenuItem'#10'MenuItem29'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#10'MenuI'
+'tem30'#6'Action'#7#13'actFullExpand'#7'OnClick'#7#20'actFullExpandExecute'#0
+#0#9'TMenuItem'#10'MenuItem31'#6'Action'#7#15'actFullCollapse'#7'OnClick'#7
+#22'actFullCollapseExecute'#0#0#0#9'TMenuItem'#10'MenuItem10'#7'Caption'#6#8
+'&Edition'#0#9'TMenuItem'#10'MenuItem11'#6'Action'#7#13'actEnumCreate'#7'OnC'
+'lick'#7#20'actEnumCreateExecute'#0#0#9'TMenuItem'#10'MenuItem23'#6'Action'#7
+#17'actCompoundCreate'#7'OnClick'#7#24'actCompoundCreateExecute'#0#0#9'TMenu'
+'Item'#10'MenuItem25'#6'Action'#7#13'actIntfCreate'#7'OnClick'#7#20'actIntfC'
+'reateExecute'#0#0#9'TMenuItem'#10'MenuItem12'#7'Caption'#6#1'-'#0#0#9'TMenu'
+'Item'#10'MenuItem13'#6'Action'#7#15'actUpdateObject'#7'Caption'#6#13'Update'
+' Object'#7'OnClick'#7#22'actUpdateObjectExecute'#0#0#0#9'TMenuItem'#9'MenuI'
+'tem6'#6'Action'#7#8'actAbout'#7'Caption'#6#6'&About'#7'OnClick'#7#15'actAbo'
+'utExecute'#0#0#0#11'TActionList'#2'AL'#4'left'#3'X'#1#3'top'#2'8'#0#7'TActi'
+'on'#11'actOpenFile'#7'Caption'#6#9'Open File'#18'DisableIfNoHandler'#9#9'On'
+'Execute'#7#18'actOpenFileExecute'#0#0#7'TAction'#7'actExit'#7'Caption'#6#4
+'Exit'#18'DisableIfNoHandler'#9#9'OnExecute'#7#14'actExitExecute'#0#0#7'TAct'
+'ion'#9'actExport'#7'Caption'#6#24'Save generated files ...'#18'DisableIfNoH'
+'andler'#9#9'OnExecute'#7#16'actExportExecute'#8'OnUpdate'#7#15'actExportUpd'
+'ate'#0#0#7'TAction'#8'actAbout'#7'Caption'#6#5'About'#18'DisableIfNoHandler'
+#9#9'OnExecute'#7#15'actAboutExecute'#0#0#7'TAction'#9'actSaveAs'#7'Caption'
+#6#11'Save As ...'#18'DisableIfNoHandler'#9#9'OnExecute'#7#16'actSaveAsExecu'
+'te'#8'OnUpdate'#7#15'actExportUpdate'#0#0#7'TAction'#13'actEnumCreate'#7'Ca'
+'ption'#6#18'Create Enumeration'#18'DisableIfNoHandler'#9#9'OnExecute'#7#20
+'actEnumCreateExecute'#0#0#7'TAction'#15'actUpdateObject'#7'Caption'#6#6'Upd'
+'ate'#18'DisableIfNoHandler'#9#9'OnExecute'#7#22'actUpdateObjectExecute'#8'O'
+'nUpdate'#7#21'actUpdateObjectUpdate'#0#0#7'TAction'#14'actRefreshView'#7'Ca'
+'ption'#6#14'&Refresh Views'#18'DisableIfNoHandler'#9#9'OnExecute'#7#21'actR'
+'efreshViewExecute'#0#0#7'TAction'#10'actNewFile'#7'Caption'#6#8'New File'#18
+'DisableIfNoHandler'#9#9'OnExecute'#7#17'actNewFileExecute'#0#0#7'TAction'#17
+'actCompoundCreate'#7'Caption'#6#20'Create Compound Type'#18'DisableIfNoHand'
+'ler'#9#9'OnExecute'#7#24'actCompoundCreateExecute'#0#0#7'TAction'#13'actInt'
+'fCreate'#7'Caption'#6#16'Create Interface'#18'DisableIfNoHandler'#9#9'OnExe'
+'cute'#7#20'actIntfCreateExecute'#0#0#7'TAction'#13'actFullExpand'#7'Caption'
+#6#11'Full expand'#18'DisableIfNoHandler'#9#9'OnExecute'#7#20'actFullExpandE'
+'xecute'#0#0#7'TAction'#15'actFullCollapse'#7'Caption'#6#13'Full Collapse'#18
,'DisableIfNoHandler'#9#9'OnExecute'#7#22'actFullCollapseExecute'#0#0#7'TActi'
+'on'#7'actSave'#7'Caption'#6#4'Save'#18'DisableIfNoHandler'#9#9'OnExecute'#7
+#14'actSaveExecute'#0#0#0#11'TOpenDialog'#2'OD'#5'Title'#6#26'Ouvrir un fich'
+'ier existant'#6'Filter'#6#25'WDSL files(*.WSDL)|*.WSDL'#11'FilterIndex'#2#0
+#10'InitialDir'#6#2'.\'#7'Options'#11#15'ofPathMustExist'#15'ofFileMustExist'
+#14'ofEnableSizing'#12'ofViewDetail'#0#4'left'#3#153#1#3'top'#2'X'#0#0#10'TS'
+'ynPasSyn'#10'SynPasSyn1'#7'Enabled'#8#23'CommentAttri.Foreground'#7#6'clBlu'
+'e'#18'CommentAttri.Style'#11#6'fsBold'#0#22'StringAttri.Foreground'#7#8'clM'
+'aroon'#17'SymbolAttri.Style'#11#6'fsBold'#0#25'DirectiveAttri.Foreground'#7
+#7'clGreen'#20'DirectiveAttri.Style'#11#6'fsBold'#0#14'NestedComments'#9#4'l'
+'eft'#3#183#1#3'top'#2'h'#0#0#11'TSaveDialog'#2'SD'#5'Title'#6#27'Enregistre'
+'r le fichier sous'#10'DefaultExt'#6#5'.WSDL'#6'Filter'#6#25'WDSL files(*.WS'
+'DL)|*.WSDL'#11'FilterIndex'#2#0#7'Options'#11#15'ofPathMustExist'#14'ofEnab'
+'leSizing'#12'ofViewDetail'#0#4'left'#3#242#1#3'top'#3#176#0#0#0#10'TPopupMe'
+'nu'#10'PopupMenu1'#4'left'#3#128#1#3'top'#3#8#1#0#9'TMenuItem'#10'MenuItem2'
+'8'#6'Action'#7#13'actFullExpand'#7'OnClick'#7#20'actFullExpandExecute'#0#0#9
+'TMenuItem'#10'MenuItem27'#6'Action'#7#15'actFullCollapse'#7'OnClick'#7#22'a'
+'ctFullCollapseExecute'#0#0#9'TMenuItem'#10'MenuItem26'#7'Caption'#6#1'-'#0#0
+#9'TMenuItem'#9'MenuItem8'#6'Action'#7#13'actEnumCreate'#7'OnClick'#7#20'act'
+'EnumCreateExecute'#0#0#9'TMenuItem'#10'MenuItem21'#6'Action'#7#17'actCompou'
+'ndCreate'#7'OnClick'#7#24'actCompoundCreateExecute'#0#0#9'TMenuItem'#10'Men'
+'uItem24'#6'Action'#7#13'actIntfCreate'#7'OnClick'#7#20'actIntfCreateExecute'
+#0#0#9'TMenuItem'#10'MenuItem22'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#9'MenuIt'
+'em9'#6'Action'#7#15'actUpdateObject'#7'OnClick'#7#22'actUpdateObjectExecute'
+#0#0#0#10'TPopupMenu'#10'PopupMenu2'#4'left'#3#16#2#3'top'#3#235#0#0#9'TMenu'
+'Item'#10'MenuItem18'#6'Action'#7#14'actRefreshView'#7'OnClick'#7#21'actRefr'
+'eshViewExecute'#0#0#9'TMenuItem'#10'MenuItem19'#7'Caption'#6#1'-'#0#0#9'TMe'
+'nuItem'#10'MenuItem20'#6'Action'#7#9'actExport'#7'OnClick'#7#16'actExportEx'
+'ecute'#0#0#0#10'TSynXMLSyn'#10'SynXMLSyn1'#13'DefaultFilter'#6#30'Documents'
+' WSDL (*.wsdl)|*.wsdl'#7'Enabled'#8#23'ElementAttri.Foreground'#7#6'clNavy'
+#30'AttributeValueAttri.Foreground'#7#8'clPurple'#16'WantBracesParsed'#8#4'l'
+'eft'#3#210#1#3'top'#3#252#0#0#0#0
]);

View File

@ -0,0 +1,727 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit uwsttypelibraryedit;
{$DEFINE WST_IDE}
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls,
ExtCtrls, Menus, ActnList,
pastree, pascal_parser_intf, logger_intf,
SynHighlighterPas, SynEdit, StdCtrls, SynHighlighterXML
{$IFDEF WST_IDE},ProjectIntf{$ENDIF};
type
{ TfWstTypeLibraryEdit }
TfWstTypeLibraryEdit = class(TForm)
actExit: TAction;
actExport: TAction;
actAbout: TAction;
actEnumCreate: TAction;
actCompoundCreate: TAction;
actIntfCreate: TAction;
actFullExpand: TAction;
actFullCollapse: TAction;
actSave : TAction;
actNewFile: TAction;
actRefreshView: TAction;
actUpdateObject: TAction;
actSaveAs: TAction;
actOpenFile: TAction;
AL: TActionList;
MainMenu1: TMainMenu;
MenuItem10: TMenuItem;
MenuItem11: TMenuItem;
MenuItem12: TMenuItem;
MenuItem13: TMenuItem;
MenuItem14: TMenuItem;
MenuItem15: TMenuItem;
MenuItem16: TMenuItem;
MenuItem17: TMenuItem;
MenuItem18: TMenuItem;
MenuItem19: TMenuItem;
MenuItem20: TMenuItem;
MenuItem21: TMenuItem;
MenuItem22: TMenuItem;
MenuItem23: TMenuItem;
MenuItem24: TMenuItem;
MenuItem25: TMenuItem;
MenuItem26: TMenuItem;
MenuItem27: TMenuItem;
MenuItem28: TMenuItem;
MenuItem29: TMenuItem;
MenuItem30: TMenuItem;
MenuItem31: TMenuItem;
MenuItem32: TMenuItem;
MenuItem5: TMenuItem;
MenuItem6: TMenuItem;
MenuItem7 : TMenuItem;
MenuItem8: TMenuItem;
MenuItem9: TMenuItem;
mmoLog: TMemo;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
MenuItem4: TMenuItem;
OD: TOpenDialog;
PC: TPageControl;
Panel1: TPanel;
Panel2: TPanel;
PopupMenu1: TPopupMenu;
PopupMenu2: TPopupMenu;
SD: TSaveDialog;
Splitter1: TSplitter;
srcInterface: TSynEdit;
SB: TStatusBar;
srcImp: TSynEdit;
srcBinder: TSynEdit;
srcProxy: TSynEdit;
srcWSDL: TSynEdit;
SynPasSyn1: TSynPasSyn;
SynXMLSyn1: TSynXMLSyn;
tsWSDL: TTabSheet;
tsLog: TTabSheet;
tsImp: TTabSheet;
tsBinder: TTabSheet;
tsInterface: TTabSheet;
tsProxy: TTabSheet;
trvSchema: TTreeView;
procedure actAboutExecute(Sender: TObject);
procedure actCompoundCreateExecute(Sender: TObject);
procedure actEnumCreateExecute(Sender: TObject);
procedure actExitExecute(Sender: TObject);
procedure actExportExecute(Sender: TObject);
procedure actExportUpdate(Sender: TObject);
procedure actFullCollapseExecute(Sender: TObject);
procedure actFullExpandExecute(Sender: TObject);
procedure actIntfCreateExecute(Sender: TObject);
procedure actNewFileExecute(Sender: TObject);
procedure actOpenFileExecute(Sender: TObject);
procedure actRefreshViewExecute(Sender: TObject);
procedure actSaveAsExecute(Sender: TObject);
procedure actSaveExecute (Sender : TObject );
procedure actUpdateObjectExecute(Sender: TObject);
procedure actUpdateObjectUpdate(Sender: TObject);
procedure FormClose (Sender : TObject; var CloseAction : TCloseAction );
procedure FormShow(Sender: TObject);
private
FSymbolTable : TwstPasTreeContainer;
FStatusMessageTag : PtrInt;
FCurrentFileName : string;
{$IFDEF WST_IDE}FProjectLibrary : TLazProjectFile;{$ENDIF}
private
function GetTypeNode() : TTreeNode;
function GetInterfaceNode() : TTreeNode;
private
procedure ShowStatusMessage(const AMsgType : TMessageType;const AMsg : string);
procedure RenderSymbols();
procedure RenderSources();
procedure RenderWSDL();
procedure OpenFile(const AFileName : string; const AContent : TStream = nil);
procedure SaveToFile(const AFileName : string);
public
constructor Create(AOwner : TComponent);override;
destructor Destroy();override;
end;
var
fWstTypeLibraryEdit: TfWstTypeLibraryEdit;
implementation
uses view_helper, DOM, XMLRead, XMLWrite, //HeapTrc,
wsdl2pas_imp, source_utils, command_line_parser, generator, metadata_generator,
binary_streamer, wst_resources_utils, wsdl_generator,
uabout, edit_helper, udm, ufrmsaveoption
{$IFDEF WST_IDE},LazIDEIntf,IDEMsgIntf{$ENDIF};
{$IFDEF WST_IDE}
function GetCurrentProjectLibraryFile():TLazProjectFile;
var
i, c : Integer;
begin
Result := nil;
c := LazarusIDE.ActiveProject.FileCount;
for i := 0 to Pred(c) do begin
if AnsiSameText('.wsdl',ExtractFileExt(LazarusIDE.ActiveProject.Files[i].Filename)) then begin
Result := LazarusIDE.ActiveProject.Files[i];
Break;
end;
end;
end;
{$ENDIF}
const
DEF_FILE_NAME = 'library1';
sWST_META = 'wst_meta';
type
TSourceType = cloInterface .. cloBinder;
TSourceTypes = set of TSourceType;
function ParseWsdlFile(
const AFileName : string;
AContent : TStream;
const ANotifier : TOnParserMessage
):TwstPasTreeContainer;overload;
var
locDoc : TXMLDocument;
prsr : TWsdlParser;
symName : string;
begin
Result := nil;
symName := ChangeFileExt(ExtractFileName(AFileName),'');
if ( symName[Length(symName)] = '.' ) then begin
Delete(symName,Length(symName),1);
end;
prsr := nil;
ReadXMLFile(locDoc,AContent);
try
Result := TwstPasTreeContainer.Create();
try
prsr := TWsdlParser.Create(locDoc,Result);
prsr.OnMessage := ANotifier;
prsr.Parse(pmAllTypes,symName);
except
FreeAndNil(Result);
raise;
end;
finally
FreeAndNil(prsr);
FreeAndNil(locDoc);
end;
end;
function ParseWsdlFile(
const AFileName : string;
const ANotifier : TOnParserMessage
):TwstPasTreeContainer;overload;
var
locContent : TMemoryStream;
begin
Result := nil;
if FileExists(AFileName) then begin
locContent := TMemoryStream.Create();
try
locContent.LoadFromFile(AFileName);
locContent.Position := 0;
Result := ParseWsdlFile(AFileName,locContent,ANotifier);
finally
FreeAndNil(locContent);
end;
end;
end;
type TOutputType = ( otMemory, otFileSystem );
function GenerateSource(
ASymbolTable : TwstPasTreeContainer;
AOptions : TSourceTypes;
const AOutputType : TOutputType;
const AOutPath : string;
const ANotifier : TOnParserMessage
) : ISourceManager;
procedure Notify(const AMsg : string);
begin
if Assigned(ANotifier) then begin
ANotifier(mtInfo, AMsg);
end;
end;
var
mtdaFS: TMemoryStream;
g : TBaseGenerator;
mg : TMetadataGenerator;
rsrcStrm : TMemoryStream;
begin
Result := CreateSourceManager();
rsrcStrm := nil;
mtdaFS := nil;
mg := nil;
g := Nil;
try
if ( cloInterface in AOptions ) then begin
Notify('Interface file generation...');
g := TInftGenerator.Create(ASymbolTable,Result);
g.Execute();
FreeAndNil(g);
end;
if ( cloProxy in AOptions ) then begin
Notify('Proxy file generation...');
g := TProxyGenerator.Create(ASymbolTable,Result);
g.Execute();
FreeAndNil(g);
end;
if ( cloBinder in AOptions ) then begin
Notify('Binder file generation...');
g := TBinderGenerator.Create(ASymbolTable,Result);
g.Execute();
FreeAndNil(g);
end;
if ( cloImp in AOptions ) then begin
Notify('Implementation file generation...');
g := TImplementationGenerator.Create(ASymbolTable,Result);
g.Execute();
FreeAndNil(g);
end;
if ( AOutputType = otFileSystem ) and ( [cloBinder,cloProxy]*AOptions <> [] ) then begin
Notify('Metadata file generation...');
mtdaFS := TMemoryStream.Create();
mg := TMetadataGenerator.Create(ASymbolTable,CreateBinaryWriter(mtdaFS));
mg.Execute();
mtdaFS.SaveToFile(AOutPath + Format('%s.%s',[ASymbolTable.CurrentModule.Name,sWST_META]));
rsrcStrm := TMemoryStream.Create();
mtdaFS.Position := 0;
BinToWstRessource(UpperCase(ASymbolTable.CurrentModule.Name),mtdaFS,rsrcStrm);
rsrcStrm.SaveToFile(AOutPath + Format('%s.%s',[ASymbolTable.CurrentModule.Name,sWST_EXTENSION]));
end;
if ( AOutputType = otFileSystem ) then begin
Result.SaveToFile(AOutPath);
end;
finally
rsrcStrm.Free();
mg.Free();;
mtdaFS.Free();;
g.Free();
end;
end;
procedure GenerateWSDL_ToStream(ASymbol : TwstPasTreeContainer; ADest : TStream);
var
doc : TXMLDocument;
begin
doc := TXMLDocument.Create();
try
GenerateWSDL(ASymbol,doc);
WriteXML(doc,ADest);
finally
FreeAndNil(doc);
end;
end;
function CreateSymbolTable(const AName : string):TwstPasTreeContainer ;
begin
Result := TwstPasTreeContainer.Create();
try
CreateWstInterfaceSymbolTable(Result);
Result.CreateElement(TPasModule,AName,Result.Package,visDefault,'',0);
Result.CurrentModule.InterfaceSection := TPasSection(Result.CreateElement(TPasSection,'',Result.CurrentModule,visDefault,'',0));
except
FreeAndNil(Result);
raise;
end;
end;
{ TfWstTypeLibraryEdit }
procedure TfWstTypeLibraryEdit.actOpenFileExecute(Sender: TObject);
begin
if OD.Execute() then begin
OpenFile(OD.FileName);
end;
end;
procedure TfWstTypeLibraryEdit.actRefreshViewExecute(Sender: TObject);
begin
RenderSymbols();
end;
procedure TfWstTypeLibraryEdit.actSaveAsExecute(Sender: TObject);
begin
if SD.Execute() then begin
SaveToFile(SD.FileName);
FCurrentFileName := SD.FileName;
end;
end;
procedure TfWstTypeLibraryEdit.actSaveExecute (Sender : TObject );
begin
if FileExists(FCurrentFileName) then
SaveToFile(FCurrentFileName)
else
actSaveAs.Execute() ;
end;
procedure TfWstTypeLibraryEdit.actUpdateObjectExecute(Sender: TObject);
var
o : TPasElement;
nd, nd_1 : TTreeNode;
begin
nd := trvSchema.Selected;
if Assigned(nd) and Assigned(nd.Data) then begin
o := TPasElement(nd.Data);
if HasEditor(o) then begin
UpdateObject(o,FSymbolTable);
nd_1 := nd;
trvSchema.BeginUpdate();
try
nd := FindPainter(o).Paint(FSymbolTable,o,GetTypeNode());
nd.MoveTo(nd_1,naInsertBehind);
FreeAndNil(nd_1);
finally
trvSchema.EndUpdate();
end;
end;
end;
end;
procedure TfWstTypeLibraryEdit.actUpdateObjectUpdate(Sender: TObject);
begin
TAction(Sender).Enabled :=
Assigned(trvSchema.Selected) and
Assigned(trvSchema.Selected.Data) and
HasEditor(TPasElement(trvSchema.Selected.Data));
end;
procedure TfWstTypeLibraryEdit.FormClose (Sender : TObject; var CloseAction : TCloseAction );
var
dlgRes : Integer;
{$IFDEF WST_IDE}
prjFile : TLazProjectFile;
{$ENDIF}
begin
dlgRes := MessageDlg(Self.Caption,'Save the file before exit ?',mtConfirmation,mbYesNo,0);
if ( dlgRes = mrYes ) then begin
actSave.Execute();
end;
{$IFDEF WST_IDE}
if ( FProjectLibrary = nil ) then begin
prjFile := GetCurrentProjectLibraryFile();
if ( prjFile = nil ) then begin
dlgRes := MessageDlg(Self.Caption,'Add this type library to the current project ?',mtConfirmation,mbYesNo,0);
if ( dlgRes = mrYes ) then begin
LazarusIDE.DoOpenEditorFile(FCurrentFileName,-1,[ofAddToProject]);
end;
end;
end;
{$ENDIF}
end;
procedure TfWstTypeLibraryEdit.FormShow(Sender: TObject);
{$IFDEF WST_IDE}
var
prjFile : TLazProjectFile;
locContent : TMemoryStream;
{$ENDIF}
begin
{$IFDEF WST_IDE}
prjFile := GetCurrentProjectLibraryFile();
if ( prjFile <> nil ) then begin
locContent := TMemoryStream.Create();
try
locContent.LoadFromFile(prjFile.FileName);
if ( locContent.Size > 0 ) then begin
locContent.Position := 0;
IDEMessagesWindow.AddMsg(Format('Parsing %s...',[prjFile.Filename]),ExtractFileDir(prjFile.Filename),0);
OpenFile(prjFile.Filename,locContent);
IDEMessagesWindow.AddMsg(Format('File Parsed %s.',[prjFile.Filename]),ExtractFileDir(prjFile.Filename),0);
FProjectLibrary := prjFile;
end;
finally
FreeAndNil(locContent);
end;
end;
{$ENDIF}
RenderSymbols();
end;
function TfWstTypeLibraryEdit.GetTypeNode(): TTreeNode;
begin
Result := trvSchema.TopItem.GetFirstChild().Items[1];
end;
function TfWstTypeLibraryEdit.GetInterfaceNode(): TTreeNode;
begin
Result := trvSchema.TopItem.GetFirstChild().Items[2];
end;
procedure TfWstTypeLibraryEdit.ShowStatusMessage(const AMsgType : TMessageType;const AMsg: string);
begin
mmoLog.Lines.Add(Format('%s : %s',[MessageTypeNames[AMsgType],AMsg]));
SB.Panels[1].Text := AMsg;
Inc(FStatusMessageTag);
if ( (FStatusMessageTag) > 23 ) then begin
FStatusMessageTag := 0;
Application.ProcessMessages();
end;
end;
procedure TfWstTypeLibraryEdit.actExitExecute(Sender: TObject);
begin
Close();
end;
procedure TfWstTypeLibraryEdit.actAboutExecute(Sender: TObject);
var
fa : TfAbout;
begin
fa := TfAbout.Create(Self);
try
fa.ShowModal();
finally
fa.Release();
end;
end;
procedure TfWstTypeLibraryEdit.actCompoundCreateExecute(Sender: TObject);
var
e : TPasClassType;
begin
e := CreateCompoundObject(FSymbolTable);
if Assigned(e) then begin
FindPainter(e).Paint(FSymbolTable,e,GetTypeNode());
end;
end;
procedure TfWstTypeLibraryEdit.actEnumCreateExecute(Sender: TObject);
var
e : TPasEnumType;
begin
e := CreateEnum(FSymbolTable);
if Assigned(e) then begin
FindPainter(e).Paint(FSymbolTable,e,GetTypeNode());
end;
end;
procedure TfWstTypeLibraryEdit.actExportExecute(Sender: TObject);
var
curLok : IInterface;
saveOpts : TComandLineOptions;
f : TfrmSaveOptions;
begin
f := TfrmSaveOptions.Create(nil);
try
if ( f.ShowModal() = mrOK ) then begin
saveOpts := [];
if f.edtBinder.Checked then
Include(saveOpts,cloBinder);
if f.edtInterface.Checked then
Include(saveOpts,cloInterface);
if f.edtImplementation.Checked then
Include(saveOpts,cloImp);
if f.edtProxy.Checked then
Include(saveOpts,cloProxy);
curLok := SetCursorHourGlass();
GenerateSource(
FSymbolTable,
saveOpts,
otFileSystem,
IncludeTrailingBackslash(f.edtOutputDir.Text),
nil
);
curLok := nil;
end;
finally
f.Release();
end;
end;
procedure TfWstTypeLibraryEdit.actExportUpdate(Sender: TObject);
begin
//TAction(Sender).Enabled := Assigned(FSymbolTable) and ( FSymbolTable.CurrentModule.InterfaceSection.Declarations.Count > 0 );
end;
procedure TfWstTypeLibraryEdit.actFullCollapseExecute(Sender: TObject);
begin
trvSchema.FullCollapse();
end;
procedure TfWstTypeLibraryEdit.actFullExpandExecute(Sender: TObject);
begin
trvSchema.FullExpand();
end;
procedure TfWstTypeLibraryEdit.actIntfCreateExecute(Sender: TObject);
var
e : TPasClassType;
begin
e := CreateInterface(FSymbolTable);
if Assigned(e) then begin
FindPainter(e).Paint(FSymbolTable,e,GetInterfaceNode());
end;
end;
procedure TfWstTypeLibraryEdit.actNewFileExecute(Sender: TObject);
var
res : Integer;
begin
res := MessageDlg(Application.Title,'Save the current file before ?',mtConfirmation,mbYesNoCancel,0,mbYes);
if ( res = mrCancel ) then begin
Exit;
end;
if ( res = mrYes ) then begin
actSave.Execute();
end;
FCurrentFileName := DEF_FILE_NAME;
{$IFDEF WST_IDE}
FProjectLibrary := nil;
{$ENDIF}
FreeAndNil(FSymbolTable);
FSymbolTable := CreateSymbolTable(ExtractFileName(FCurrentFileName));
RenderSymbols();
end;
procedure TfWstTypeLibraryEdit.RenderSymbols();
var
objPtr : ISymbolPainter;
nd : TTreeNode;
begin
trvSchema.BeginUpdate();
try
trvSchema.Items.Clear();
srcInterface.ClearAll();
nd := trvSchema.Items.AddFirst(nil,'Type Library Editor');
nd.ImageIndex := -1;
nd.StateIndex := -1;
nd.SelectedIndex := -1;
if Assigned(FSymbolTable) then begin
objPtr := FindPainter(FSymbolTable.Package);
if Assigned(objPtr) then begin
objPtr.Paint(FSymbolTable,FSymbolTable.Package,trvSchema.TopItem);
end;
RenderSources();
RenderWSDL();
end;
trvSchema.Items[0].Expand(False);
trvSchema.Items[0].Items[0].Expand(False);
finally
trvSchema.EndUpdate();
end;
ShowStatusMessage(mtInfo,'');
end;
procedure TfWstTypeLibraryEdit.RenderSources();
procedure LoadText(const AList : TStrings; ASrc : ISourceStream);
var
srcItemSV : ISavableSourceStream;
begin
if Supports(ASrc,ISavableSourceStream,srcItemSV) then begin
srcItemSV.GetStream().Position := 0;
AList.LoadFromStream(srcItemSV.GetStream());
end;
end;
var
srcMngr : ISourceManager;
begin
if Assigned(FSymbolTable) then begin
if ( FSymbolTable.CurrentModule.InterfaceSection.Declarations.Count > 0 ) then begin
srcMngr := GenerateSource(FSymbolTable,[cloInterface,cloProxy,cloBinder,cloImp],otMemory,'',@ShowStatusMessage);
if Assigned(srcMngr) and ( srcMngr.GetCount() > 0 ) then begin
LoadText(srcInterface.Lines,srcMngr.GetItem(0));
LoadText(srcProxy.Lines,srcMngr.GetItem(1));
LoadText(srcBinder.Lines,srcMngr.GetItem(2));
LoadText(srcImp.Lines,srcMngr.GetItem(3));
end;
end else begin
srcInterface.ClearAll();
srcProxy.ClearAll();
srcBinder.ClearAll();
srcImp.ClearAll();
end;
end;
ShowStatusMessage(mtInfo,'');
end;
procedure TfWstTypeLibraryEdit.RenderWSDL();
var
mstrm : TMemoryStream;
begin
mstrm := TMemoryStream.Create();
try
GenerateWSDL_ToStream(FSymbolTable,mstrm);
mstrm.Position := 0;
srcWSDL.Lines.LoadFromStream(mstrm);
finally
FreeAndNil(mstrm);
end;
end;
procedure TfWstTypeLibraryEdit.OpenFile (const AFileName : string; const AContent : TStream);
var
tmpTable : TwstPasTreeContainer;
curLok : IInterface;
begin
{$IFDEF WST_IDE}
FProjectLibrary := nil;
{$ENDIF}
FCurrentFileName := '';
mmoLog.Clear();
PC.ActivePage := tsLog;
curLok := SetCursorHourGlass();
if ( AContent = nil ) then
tmpTable := ParseWsdlFile(AFileName,@ShowStatusMessage)
else
tmpTable := ParseWsdlFile(AFileName,AContent,@ShowStatusMessage);
if Assigned(tmpTable) then begin
FCurrentFileName := AFileName;
trvSchema.Items.Clear();
FreeAndNil(FSymbolTable);
FSymbolTable := tmpTable;
RenderSymbols();
PC.ActivePage := tsInterface;
end;
curLok := nil;
end;
procedure TfWstTypeLibraryEdit.SaveToFile (const AFileName : string );
var
mstrm : TMemoryStream;
begin
mstrm := TMemoryStream.Create();
try
GenerateWSDL_ToStream(FSymbolTable,mstrm);
mstrm.SaveToFile(AFileName);
finally
FreeAndNil(mstrm);
end;
end;
constructor TfWstTypeLibraryEdit.Create(AOwner: TComponent);
begin
if ( DM = nil ) then begin
DM := TDM.Create(Application);
end;
inherited Create(AOwner);
FSymbolTable := CreateSymbolTable(ExtractFileName(DEF_FILE_NAME));
trvSchema.Images := DM.IM;
end;
destructor TfWstTypeLibraryEdit.Destroy();
begin
trvSchema.Items.Clear();
FreeAndNil(FSymbolTable);
inherited Destroy();
FreeAndNil(DM);
end;
initialization
//SetHeapTraceOutput('heap_trace.txt');
{$I uwsttypelibraryedit.lrs}
end.

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit view_helper;
{$mode objfpc}{$H+}
@ -32,11 +44,12 @@ const
IMG_CONST = 2;
IMG_TYPE_DEF = 4;
IMG_INTF_DEF = 5;
IMG_PROP_DEF = 6;
//IMG_PROP_DEF = 6;
IMG_ENUM = 6;
IMG_CONST_ITEM = 7;
IMG_ENUM_ITEM = 8;
IMG_PROC_ITEM = 9;
IMG_BINDING_ITEM = 10;
type
@ -260,6 +273,43 @@ type
public
class function CanHandle(AObj : TObject):Boolean;override;
end;
{ TBindingPainter }
TBindingPainter = class(TAbstractSymbolPainter)
protected
function Paint(
AContainer : TwstPasTreeContainer;
AObj : TPasElement;
AParent : TTreeNode
):TTreeNode;override;
public
class function CanHandle(AObj : TObject):Boolean;override;
end;
{ TBindingPainter }
function TBindingPainter.Paint(
AContainer: TwstPasTreeContainer;
AObj: TPasElement;
AParent: TTreeNode
): TTreeNode;
var
locObj : TwstBinding;
begin
locObj := TwstBinding(AObj);
Result := inherited Paint(AContainer, locObj, AParent);
Result.ImageIndex := IMG_BINDING_ITEM;
Result.StateIndex := IMG_BINDING_ITEM;
Result.SelectedIndex := IMG_BINDING_ITEM;
AddChildNode(Result,BindingStyleNames[locObj.BindingStyle]);
AddChildNode(Result,locObj.Address);
end;
class function TBindingPainter.CanHandle(AObj: TObject): Boolean;
begin
Result := ( inherited CanHandle(AObj) ) and AObj.InheritsFrom(TwstBinding);
end;
{ TPasNativeSimpleTypePainter }
@ -299,7 +349,7 @@ var
i , c: Integer;
locObj : TPasModule;
objPtr : ISymbolPainter;
constNode, typNode, intfNode : TTreeNode;
{constNode,} typNode, intfNode : TTreeNode;
objItm : TPasElement;
decList : TList;
begin
@ -308,10 +358,10 @@ begin
Result.ImageIndex := IMG_TABLE;
Result.StateIndex := IMG_TABLE;
Result.SelectedIndex := IMG_TABLE;
constNode := AddChildNode(Result,'Const');
{constNode := AddChildNode(Result,'Const');
constNode.ImageIndex := IMG_CONST;
constNode.StateIndex := IMG_CONST;
constNode.SelectedIndex := IMG_CONST;
constNode.SelectedIndex := IMG_CONST;}
typNode := AddChildNode(Result,'Type');
typNode.ImageIndex := IMG_TYPES;
typNode.StateIndex := IMG_TYPES;
@ -327,13 +377,6 @@ begin
objPtr.Paint(AContainer,objItm,intfNode)
else
objPtr.Paint(AContainer,objItm,typNode);
{if objItm.InheritsFrom(TpasTypeDefinition) then begin
objPtr.Paint(objItm,typNode);
end else if objItm.InheritsFrom(TInterfaceDefinition) then begin
objPtr.Paint(objItm,intfNode);
end else if objItm.InheritsFrom(TAbstractConstantDefinition) then begin
objPtr.Paint(objItm,constNode);
end;}
end;
end;
end;
@ -373,7 +416,10 @@ begin
AddChildNode(Result,ss);
end;
if locMthd.InheritsFrom(TPasFunction) then begin
AddChildNode(Result,'>> ' + AContainer.GetExternalName(TPasFunctionType(locMthd.ProcType).ResultEl));
AddChildNode(
Result,
'>> ' + AContainer.GetExternalName(TPasFunctionType(locMthd.ProcType).ResultEl)
);
end;
end;
@ -389,33 +435,13 @@ function TInterfaceDefinitionPainter.Paint(
AObj : TPasElement;
AParent: TTreeNode
): TTreeNode;
{ function PaintMethod(AIntfNode : TTreeNode; AMthd : TMethodDefinition):TTreeNode ;
var
j : Integer;
ss : string;
pmr : TParameterDefinition;
begin
Result := AddChildNode(AIntfNode,AMthd.ExternalName);
Result.Data := AMthd;
Result.ImageIndex := IMG_PROC_ITEM;
Result.StateIndex := IMG_PROC_ITEM;
Result.SelectedIndex := IMG_PROC_ITEM;
for j := 0 to Pred(AMthd.ParameterCount) do begin
pmr := AMthd.Parameter[j];
ss := ParameterModifierMAP[pmr.Modifier];
if ( Length(ss) > 0 ) then begin
ss := ss + ' ' + pmr.ExternalName;
end;
AddChildNode(Result,ss);
end;
end; }
var
locObj : TPasClassType;
locMthd : TPasProcedure;
i : Integer;
memberList : TList;
bindingsNode : TTreeNode;
b : TwstBinding;
begin
locObj := AObj as TPasClassType;
Result := inherited Paint(AContainer, locObj, AParent);
@ -429,6 +455,15 @@ begin
FindPainter(locMthd).Paint(AContainer,locMthd,Result);
end;
end;
i := 0;
bindingsNode := AddChildNode(Result,'Bindings >');
while True do begin
b := AContainer.FindBinding(locObj,i);
if ( b = nil ) then
Break;
Inc(i);
FindPainter(b).Paint(AContainer,b,bindingsNode);
end;
end;
class function TInterfaceDefinitionPainter.CanHandle(AObj : TObject): Boolean;
@ -672,7 +707,8 @@ initialization
FPainterRegistryInst.RegisterHandler(TAbstractConstantDefinitionPainter);
FPainterRegistryInst.RegisterHandler(TInterfaceDefinitionPainter);
FPainterRegistryInst.RegisterHandler(TMethodDefinitionPainter);
FPainterRegistryInst.RegisterHandler(TPasNativeSimpleTypePainter)
FPainterRegistryInst.RegisterHandler(TPasNativeSimpleTypePainter);
FPainterRegistryInst.RegisterHandler(TBindingPainter)
finalization
FreeAndNil(FPainterRegistryInst);

View File

@ -20,7 +20,7 @@ interface
uses
Classes, SysUtils, TypInfo,
DOM,
pastree, pascal_parser_intf; //parserdefs;
pastree, pascal_parser_intf;
type
@ -127,15 +127,15 @@ const
sWSDL_NS = 'http://schemas.xmlsoap.org/wsdl/';
sSOAP_NS = 'http://schemas.xmlsoap.org/wsdl/soap/';
sSOAP = 'soap';
sSOAP_ENC_NS = 'http://schemas.xmlsoap.org/soap/encoding/';
//sSOAP_ENC_NS = 'http://schemas.xmlsoap.org/soap/encoding/';
sXMLNS = 'xmlns';
sXSD_NS = 'http://www.w3.org/2001/XMLSchema';
sXSD = 'xsd';
sTNS = 'tns';
sSOAP_ACTION = 'soapAction';
sSOAP_ENCODED = 'encoded';
sSOAP_ENCODING_STYLE = 'encodingStyle';
//sSOAP_ENCODED = 'encoded';
//sSOAP_ENCODING_STYLE = 'encodingStyle';
sSOAP_RPC = 'rpc';
sSOAP_TRANSPORT = 'http://schemas.xmlsoap.org/soap/http';
sSOAP_USE = 'use';
@ -146,9 +146,11 @@ const
sBINDING = 'binding';
sBODY = 'body';
sCOMPLEX_TYPE = 'complexType';
sDOCUMENT = 'document';
sELEMENT = 'element';
sENUMERATION = 'enumeration';
sEXTENSION = 'extension';
sGUID = 'GUID';
sITEM = 'item';
sLOCATION = 'location';
sMIN_OCCURS = 'minOccurs';
@ -164,7 +166,7 @@ const
sTRANSPORT = 'transport';
sTYPE = 'type';
sUNBOUNDED = 'unbounded';
sUSE = 'use';
//sUSE = 'use';
sVALUE = 'value';
sWSDL_DEFINITIONS = 'definitions';
@ -183,7 +185,35 @@ const
var
WsdlTypeHandlerRegistryInst : IWsdlTypeHandlerRegistry;
function GetTypeNameSpace(
AContainer : TwstPasTreeContainer;
AType : TPasElement
) : string;
var
locElt : TPasElement;
begin
Result := '';
locElt := AType;
if ( locElt <> nil ) then begin
if locElt.InheritsFrom(TPasUnresolvedTypeRef) then
locElt := AContainer.FindElement(AContainer.GetExternalName(locElt));
if ( locElt <> nil ) and
( not locElt.InheritsFrom(TPasUnresolvedTypeRef) ) and
//locElt.InheritsFrom(TPasType) and
( locElt.Parent <> nil ) and
( locElt.Parent.Parent <> nil )
then begin
Result := AContainer.GetExternalName(locElt.Parent.Parent);
end;
end;
Result := Trim(Result);
if ( Length(Result) = 0 ) then
Result := AContainer.GetExternalName(AContainer.CurrentModule);
end;
type
{ TWsdlTypeHandlerRegistry }
@ -407,11 +437,17 @@ procedure GenerateWSDL(ASymbolTable : TwstPasTreeContainer; ADoc : TDOMDocument)
end;
var
prtTypeNode : TDOMElement;
prtTypeNode, docNode : TDOMElement;
j, k : Integer;
po : TPasProcedure;
begin
prtTypeNode := CreateElement(sWSDL_PORT_TYPE,ARootNode,ADoc);
if ( Length(AContract.InterfaceGUID) > 0 ) then begin
docNode := CreateElement(sDOCUMENT,prtTypeNode,ADoc);
CreateElement(sGUID,docNode,ADoc).SetAttribute(sVALUE,AContract.InterfaceGUID);
end else begin
docNode := nil;
end;
prtTypeNode.SetAttribute(sWSDL_NAME,ASymbolTable.GetExternalName(AContract));
k := AContract.Members.Count;
if ( k > 0 ) then begin
@ -429,13 +465,17 @@ procedure GenerateWSDL(ASymbolTable : TwstPasTreeContainer; ADoc : TDOMDocument)
procedure GenerateOperation(AOperation : TPasProcedure; ABndngNode : TDOMElement);
var
opNode, inNode, outNode, bdyNode : TDOMElement;
strBuff : string;
strBuff, strSoapActBuffer : string;
encdStyl{,encdStylURI} : string;
begin
strBuff := Format('%s:%s',[sSOAP,sWSDL_OPERATION]);
opNode := CreateElement(sWSDL_OPERATION,ABndngNode,ADoc);
opNode.SetAttribute(sWSDL_NAME,ASymbolTable.GetExternalName(AOperation));
CreateElement(strBuff,opNode,ADoc).SetAttribute(sSOAP_ACTION,Format('%s/%s%s',[ASymbolTable.GetExternalName(ASymbolTable.CurrentModule),ASymbolTable.GetExternalName(ABinding.Intf),ASymbolTable.GetExternalName(AOperation)]));
strSoapActBuffer := Trim(ASymbolTable.Properties.GetValue(AOperation,sTRANSPORT + '_' + sSOAP_ACTION));
{if ( Length(strSoapActBuffer) = 0 ) then begin
strSoapActBuffer := Format('%s/%s/%s',[ASymbolTable.GetExternalName(ASymbolTable.CurrentModule),ASymbolTable.GetExternalName(ABinding.Intf),ASymbolTable.GetExternalName(AOperation)]);
end;}
CreateElement(strBuff,opNode,ADoc).SetAttribute(sSOAP_ACTION,strSoapActBuffer);
inNode := CreateElement(sWSDL_INPUT,opNode,ADoc);
strBuff := Format('%s:%s',[sSOAP,sBODY]);
bdyNode := CreateElement(strBuff,inNode,ADoc);
@ -645,7 +685,7 @@ begin
then begin
typeCategory := tcSimpleContent;
derivationNode := CreateElement(Format('%s:%s',[sXSD,sEXTENSION]),cplxNode,AWsdlDocument);
s := Trim(GetNameSpaceShortName(AContainer.GetExternalName(trueParent.Parent.Parent),AWsdlDocument));
s := Trim(GetNameSpaceShortName(GetTypeNameSpace(AContainer,trueParent),AWsdlDocument));
if ( Length(s) > 0 ) then begin
s := s + ':';
end;
@ -694,7 +734,7 @@ begin
propNode.SetAttribute(sNAME,AContainer.GetExternalName(p));
propTypItm := p.VarType;
if Assigned(propTypItm) then begin
prop_ns_shortName := GetNameSpaceShortName(AContainer.GetExternalName(propTypItm.Parent.Parent),AWsdlDocument);
prop_ns_shortName := GetNameSpaceShortName(GetTypeNameSpace(AContainer,propTypItm),AWsdlDocument);
propNode.SetAttribute(sTYPE,Format('%s:%s',[prop_ns_shortName,AContainer.GetExternalName(propTypItm)]));
if AContainer.IsAttributeProperty(p) then begin
if AnsiSameText('Has',Copy(p.StoredAccessorName,1,3)) then
@ -717,7 +757,8 @@ end;
class function TClassTypeDefinition_TypeHandler.CanHandle(ASymbol: TClass): Boolean;
begin
Result := inherited CanHandle(ASymbol) and ASymbol.InheritsFrom(TPasClassType);
Result := inherited CanHandle(ASymbol) and
( ASymbol.InheritsFrom(TPasClassType) and ( TPasClassType(ASymbol).ObjKind = okClass ));
end;
{ TEnumTypeHandler }
@ -736,7 +777,7 @@ var
begin
typItm := ASymbol as TPasEnumType;
if Assigned(typItm) then begin
unitExternalName := AContainer.GetExternalName(ASymbol.Parent.Parent);
unitExternalName := GetTypeNameSpace(AContainer,ASymbol);
if FindAttributeByValueInNode(unitExternalName,AWsdlDocument.DocumentElement,ns_shortName) then begin
ns_shortName := Copy(ns_shortName,Length(sXMLNS+':')+1,MaxInt);
end else begin
@ -813,7 +854,7 @@ begin
if not Assigned(typItm) then
Exit;
if Assigned(typItm) then begin
unitExternalName := AContainer.GetExternalName(typItm.Parent.Parent);
unitExternalName := GetTypeNameSpace(AContainer,typItm);
GetNameSpaceShortName(unitExternalName);
defTypesNode := AWsdlDocument.DocumentElement.FindNode(sWSDL_TYPES) as TDOMElement;
Assert(Assigned(defTypesNode));
@ -830,7 +871,7 @@ begin
propNode := CreateElement(s,sqcNode,AWsdlDocument);
propNode.SetAttribute(sNAME,sITEM);
if Assigned(propTypItm) then begin
prop_ns_shortName := GetNameSpaceShortName(AContainer.GetExternalName(propTypItm.Parent.Parent));
prop_ns_shortName := GetNameSpaceShortName(GetTypeNameSpace(AContainer,propTypItm));// AContainer.GetExternalName(propTypItm.Parent.Parent));
propNode.SetAttribute(sTYPE,Format('%s:%s',[prop_ns_shortName,AContainer.GetExternalName(propTypItm)]));
propNode.SetAttribute(sMIN_OCCURS,'0');
propNode.SetAttribute(sMAX_OCCURS,sUNBOUNDED);
@ -885,7 +926,7 @@ var
begin
typItm := ASymbol as TPasAliasType;
if Assigned(typItm) then begin
unitExternalName := AContainer.GetExternalName(ASymbol.Parent.Parent);
unitExternalName := GetTypeNameSpace(AContainer,ASymbol);
if FindAttributeByValueInNode(unitExternalName,AWsdlDocument.DocumentElement,ns_shortName) then begin
ns_shortName := Copy(ns_shortName,Length(sXMLNS+':')+1,MaxInt);
end else begin
@ -900,7 +941,7 @@ begin
resNode := CreateElement(s,defSchemaNode,AWsdlDocument);
resNode.SetAttribute(sNAME, AContainer.GetExternalName(typItm)) ;
baseUnitExternalName := AContainer.GetExternalName(typItm.DestType.Parent.Parent);
baseUnitExternalName := GetTypeNameSpace(AContainer,typItm.DestType);
s := GetNameSpaceShortName(baseUnitExternalName,AWsdlDocument);
s := Format('%s:%s',[s,AContainer.GetExternalName(typItm.DestType)]);
resNode.SetAttribute(sTYPE,s) ;

View File

@ -1631,7 +1631,7 @@ var
var
k : Integer;
p : TPasProperty;
pt : TPasElement;
//pt : TPasElement;
begin
if ( locPropCount > 0 ) then begin
Indent();
@ -1639,14 +1639,14 @@ var
IncIndent();
for k := 0 to Pred(locPropCount) do begin
p := TPasProperty(locPropList[k]);
if p.VarType.InheritsFrom(TPasUnresolvedTypeRef) then begin
{if p.VarType.InheritsFrom(TPasUnresolvedTypeRef) then begin
pt := SymbolTable.FindElement(SymbolTable.GetExternalName(p.VarType));
if ( pt <> nil ) and pt.InheritsFrom(TPasType) and ( pt <> p.VarType ) then begin
p.VarType.Release();
p.VarType := pt as TPasType;
p.VarType.AddRef();
end;
end;
end;}
WritePropertyField(p);
end;
DecIndent();

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit logger_intf;
{$mode objfpc}{$H+}

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit pascal_parser_intf;
{$mode objfpc}{$H+}
@ -22,22 +34,29 @@ const
type
TBindingStyle = ( bsDocument, bsRPC, bsUnknown );
const
BindingStyleNames : array[TBindingStyle] of string = ( 'Document', 'RPC', 'Unknown' );
type
TArrayStyle = ( asScoped, asEmbeded );
ESymbolException = class(Exception)
end;
{ TwstBinding }
TwstBinding = class
TwstBinding = class(TPasElement)
private
FAddress: string;
FBindingStyle: TBindingStyle;
FIntf: TPasClassType;
FName: string;
public
constructor Create(const AName : string; AIntf : TPasClassType);
constructor Create(
const AName : string;
AIntf : TPasClassType;
AParent: TPasElement
);
destructor Destroy();override;
property Name : string read FName;
property Intf : TPasClassType read FIntf;
property Address : string read FAddress write FAddress;
property BindingStyle : TBindingStyle read FBindingStyle write FBindingStyle;
@ -98,7 +117,9 @@ type
property CurrentModule : TPasModule read FCurrentModule;
function AddBinding(const AName : string; AIntf : TPasClassType):TwstBinding;
function FindBinding(const AName : string):TwstBinding;
procedure DeleteBinding(ABinding : TwstBinding);
function FindBinding(const AName : string):TwstBinding;overload;
function FindBinding(const AIntf : TPasClassType; const AOrder : Integer = 0):TwstBinding;overload;
property BindingCount : Integer read GetBindingCount;
property Binding[AIndex : Integer] : TwstBinding read GetBinding;
property Properties : TPropertyHolder read FProperties;
@ -128,8 +149,16 @@ type
property BoxedType : TPasNativeSimpleContentClassType read FBoxedType;
end;
function GetParameterIndex(AProcType : TPasProcedureType; const AParamName : string) : Integer;
function FindParameter(AProcType : TPasProcedureType; const AParamName : string) : TPasArgument;
function GetParameterIndex(
AProcType : TPasProcedureType;
const AParamName : string;
const AStartPos : Integer = 0
) : Integer;
function FindParameter(
AProcType : TPasProcedureType;
const AParamName : string;
const AStartPos : Integer = 0
) : TPasArgument;
function FindMember(AClass : TPasClassType; const AName : string) : TPasElement ;
function GetElementCount(AList : TList; AElementClass : TPTreeElement):Integer ;
@ -307,13 +336,21 @@ begin
end;
end;
function GetParameterIndex(AProcType : TPasProcedureType; const AParamName : string) : Integer;
function GetParameterIndex(
AProcType : TPasProcedureType;
const AParamName : string;
const AStartPos : Integer
) : Integer;
var
pl : TList;
i : Integer;
begin
pl := AProcType.Args;
for i := 0 to Pred(pl.Count) do begin
if ( AStartPos >= 0 ) then
i := AStartPos
else
i := 0;
for i := i to Pred(pl.Count) do begin
if AnsiSameText(AParamName,TPasArgument(pl[i]).Name) then begin
Result := i;
Exit;
@ -322,11 +359,15 @@ begin
Result := -1;
end;
function FindParameter(AProcType : TPasProcedureType; const AParamName : string) : TPasArgument;
function FindParameter(
AProcType : TPasProcedureType;
const AParamName : string;
const AStartPos : Integer
) : TPasArgument;
var
i : Integer;
begin
i := GetParameterIndex(AProcType,AParamName);
i := GetParameterIndex(AProcType,AParamName,i);
if ( i >= 0 ) then begin
Result := TPasArgument(AProcType.Args[i]);
end else begin
@ -564,10 +605,16 @@ begin
if Assigned(Result) then begin
raise Exception.CreateFmt('Duplicated binding : "%s"',[AName]);
end;
Result := TwstBinding.Create(AName, AIntf);
Result := TwstBinding.Create(AName, AIntf, AIntf.Parent);
FBindingList.Add(Result);
end;
procedure TwstPasTreeContainer.DeleteBinding(ABinding: TwstBinding);
begin
FBindingList.Extract(ABinding);
ABinding.Release();
end;
function TwstPasTreeContainer.FindBinding(const AName: string): TwstBinding;
var
i : Integer;
@ -581,6 +628,24 @@ begin
Result := nil;
end;
function TwstPasTreeContainer.FindBinding(const AIntf: TPasClassType; const AOrder : Integer): TwstBinding;
var
i, c, ordr : Integer;
begin
ordr := AOrder;
c := BindingCount;
for i := 0 to Pred(c) do begin
Result := Binding[i];
if ( Result.Intf = AIntf ) then begin
if ( ordr <= 0 ) then
Exit
else
Dec(ordr);
end;
end;
Result := nil;
end;
procedure TwstPasTreeContainer.RegisterExternalAlias(
AObject : TPasElement;
const AExternalName : String
@ -623,9 +688,14 @@ end;
{ TwstBinding }
constructor TwstBinding.Create(const AName : string; AIntf: TPasClassType);
constructor TwstBinding.Create(
const AName : string;
AIntf : TPasClassType;
AParent: TPasElement
);
begin
Assert((not IsStrEmpty(AName)) and Assigned(AIntf) and ( AIntf.ObjKind = okInterface ));
inherited Create(AName,AParent);
FIntf := AIntf;
FIntf.AddRef();
end;
@ -708,11 +778,14 @@ procedure TPasNativeSimpleType.SetBoxedType(
ABoxedType : TPasNativeSimpleContentClassType
);
begin
if ( FBoxedType <> nil ) then begin
FBoxedType.Release();
if ( FBoxedType <> ABoxedType ) then begin
if ( FBoxedType <> nil ) then begin
FBoxedType.Release();
end;
FBoxedType := ABoxedType;
if ( FBoxedType <> nil ) then
FBoxedType.AddRef();
end;
FBoxedType := ABoxedType;
FBoxedType.AddRef();
end;
end.

View File

@ -123,6 +123,7 @@ type
function GetItem(const AIndex:Integer):ISourceStream;
Public
constructor Create();
destructor Destroy();override;
End;
function CreateSourceManager():ISourceManager;
@ -201,6 +202,14 @@ begin
FList := TInterfaceList.Create() as IInterfaceList;
end;
destructor TSourceManager.Destroy();
begin
if ( FList <> nil ) then
FList.Clear();
FList := nil;
inherited Destroy();
end;
{ TSourceStream }
function TSourceStream.GetFileName(): string;

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit wsdl2pas_imp;
{$mode objfpc}{$H+}
@ -7,7 +19,7 @@ interface
uses
Classes, SysUtils, DOM,
cursor_intf, rtti_filters,
pparser, pastree, pascal_parser_intf, logger_intf;
pastree, pascal_parser_intf, logger_intf;
type
@ -170,6 +182,7 @@ const
s_element : WideString = 'element';
s_enumeration : WideString = 'enumeration';
s_extension : WideString = 'extension';
s_guid : WideString = 'GUID';
s_input : WideString = 'input';
s_item : WideString = 'item';
s_location : WideString = 'location';
@ -724,6 +737,37 @@ var
end;
end;
function ParseIntfGuid() : string;
var
nd : TDOMNode;
tmpCrs : IObjectCursor;
begin
Result := '';
tmpCrs := CreateCursorOn(
CreateChildrenCursor(ANode,cetRttiNode),
ParseFilter(CreateQualifiedNameFilterStr(s_document,FWsdlShortNames),TDOMNodeRttiExposer)
);
tmpCrs.Reset();
if tmpCrs.MoveNext() then begin
nd := (tmpCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
if nd.HasChildNodes() then begin
tmpCrs := CreateCursorOn(
CreateChildrenCursor(nd,cetRttiNode),
ParseFilter(Format('%s=%s',[s_NODE_NAME,QuotedStr(s_guid)]),TDOMNodeRttiExposer)
);
tmpCrs.Reset();
if tmpCrs.MoveNext() then begin
nd := (tmpCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
if nd.HasAttributes() then begin
nd := nd.Attributes.GetNamedItem(s_value);
if Assigned(nd) then
Result := Trim(nd.NodeValue);
end;
end;
end;
end;
end;
var
locIntf : TPasClassType;
locAttCursor : IObjectCursor;
@ -732,7 +776,9 @@ var
locMthd : TPasProcedure;
inft_guid : TGuid;
ansiStrBuffer : ansistring;
elt : TPasElement;
begin
locIntf := nil;
locAttCursor := CreateAttributesCursor(ANode,cetRttiNode);
locCursor := CreateCursorOn(locAttCursor,ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_name)]),TDOMNodeRttiExposer));
locCursor.Reset();
@ -740,45 +786,39 @@ begin
raise EWslParserException.CreateFmt('PortType Attribute not found : "%s"',[s_name]);
locObj := locCursor.GetCurrent() as TDOMNodeRttiExposer;
ansiStrBuffer := locObj.NodeValue;
locIntf := TPasClassType(SymbolTable.CreateElement(TPasClassType,ansiStrBuffer,SymbolTable.CurrentModule.InterfaceSection,visDefault,'',0));
FModule.InterfaceSection.Declarations.Add(locIntf);
FModule.InterfaceSection.Types.Add(locIntf);
FModule.InterfaceSection.Classes.Add(locIntf);
locIntf.ObjKind := okInterface;
Result := locIntf;
if ( CreateGUID(inft_guid) = 0 ) then
locIntf.InterfaceGUID := GUIDToString(inft_guid);
locCursor := CreateChildrenCursor(ANode,cetRttiNode);
if Assigned(locCursor) then begin
locOpCursor := CreateCursorOn(locCursor,ParseFilter(CreateQualifiedNameFilterStr(s_operation,FWsdlShortNames),TDOMNodeRttiExposer));
locOpCursor.Reset();
locBindingOperationCursor := ExtractBindingOperationCursor();
while locOpCursor.MoveNext() do begin
locObj := locOpCursor.GetCurrent() as TDOMNodeRttiExposer;
locMthd := ParseOperation(locIntf,locObj.InnerObject,ABindingStyle);
if Assigned(locMthd) then begin
ParseOperationAttributes(locBindingOperationCursor,locMthd);
elt := SymbolTable.FindElementInModule(ansiStrBuffer,SymbolTable.CurrentModule);
if ( elt = nil ) then begin
locIntf := TPasClassType(SymbolTable.CreateElement(TPasClassType,ansiStrBuffer,SymbolTable.CurrentModule.InterfaceSection,visDefault,'',0));
FModule.InterfaceSection.Declarations.Add(locIntf);
FModule.InterfaceSection.Types.Add(locIntf);
FModule.InterfaceSection.Classes.Add(locIntf);
locIntf.ObjKind := okInterface;
Result := locIntf;
locIntf.InterfaceGUID := ParseIntfGuid();
if IsStrEmpty(locIntf.InterfaceGUID) and ( CreateGUID(inft_guid) = 0 ) then
locIntf.InterfaceGUID := GUIDToString(inft_guid);
locCursor := CreateChildrenCursor(ANode,cetRttiNode);
if Assigned(locCursor) then begin
locOpCursor := CreateCursorOn(locCursor,ParseFilter(CreateQualifiedNameFilterStr(s_operation,FWsdlShortNames),TDOMNodeRttiExposer));
locOpCursor.Reset();
locBindingOperationCursor := ExtractBindingOperationCursor();
while locOpCursor.MoveNext() do begin
locObj := locOpCursor.GetCurrent() as TDOMNodeRttiExposer;
locMthd := ParseOperation(locIntf,locObj.InnerObject,ABindingStyle);
if Assigned(locMthd) then begin
ParseOperationAttributes(locBindingOperationCursor,locMthd);
end;
end;
end;
end else begin
if elt.InheritsFrom(TPasClassType) and ( TPasClassType(elt).ObjKind = okInterface ) then begin
Result := TPasClassType(elt);
end else begin
raise EWslParserException.CreateFmt('Invalid element definition : "%s".',[elt.Name]);
end;
end;
end;
type
{ TPasEmentCrack }
TPasEmentCrack = class(TPasElement)
protected
procedure SetName(const AName : string);
end;
{ TPasEmentCrack }
procedure TPasEmentCrack.SetName(const AName: string);
begin
Name := AName;
end;
function TWsdlParser.ParseOperation(
AOwner : TPasClassType;
ANode : TDOMNode;
@ -848,6 +888,7 @@ function TWsdlParser.ParseOperation(
except
on e : Exception do begin
DoOnMessage(mtError, e.Message + ' ' + AName + ' ' + ATypeOrElement);
raise;
end;
end;
end;
@ -939,7 +980,7 @@ function TWsdlParser.ParseOperation(
prmTypeInternalName := '_' + prmTypeInternalName;
end;
SymbolTable.RegisterExternalAlias(prmTypeDef,SymbolTable.GetExternalName(prmTypeDef));
TPasEmentCrack(prmTypeDef).SetName(prmTypeInternalName);
prmTypeDef.Name := prmTypeInternalName;
end;
end;
end;
@ -960,6 +1001,7 @@ function TWsdlParser.ParseOperation(
locFunc : TPasFunction;
locFuncType : TPasFunctionType;
j : Integer;
arg_a, arg_b : TPasArgument;
begin
if ExtractMsgName(s_output,outMsg) then begin
outMsgNode := FindMessageNode(outMsg);
@ -1010,6 +1052,7 @@ function TWsdlParser.ParseOperation(
prmDef := TPasArgument(SymbolTable.CreateElement(TPasArgument,prmInternameName,tmpMthdType,visDefault,'',0));
tmpMthdType.Args.Add(prmDef);
prmDef.ArgType := GetDataType(prmTypeName,prmTypeType);
prmDef.ArgType.AddRef();
prmDef.Access := argOut;
if prmHasInternameName then begin
SymbolTable.RegisterExternalAlias(prmDef,prmName);
@ -1020,6 +1063,8 @@ function TWsdlParser.ParseOperation(
end else begin
prmInternameName := '_' + prmInternameName;
prmDef := TPasArgument(SymbolTable.CreateElement(TPasArgument,prmInternameName,tmpMthdType,visDefault,'',0));
prmDef.ArgType := GetDataType(prmTypeName,prmTypeType);
prmDef.ArgType.AddRef();
prmDef.Access := argOut;
tmpMthdType.Args.Add(prmDef);
SymbolTable.RegisterExternalAlias(prmDef,prmName);
@ -1038,17 +1083,21 @@ function TWsdlParser.ParseOperation(
then begin
locProcType := tmpMthd.ProcType;
locFunc := TPasFunction(SymbolTable.CreateElement(TPasFunction,tmpMthd.Name,AOwner,visDefault,'',0));
locFuncType := SymbolTable.CreateFunctionType('','Result',locFunc,True,'',0);
locFuncType := SymbolTable.CreateFunctionType('','Result',locFunc,False,'',0);
locFunc.ProcType := locFuncType;
for j := 0 to ( locProcType.Args.Count - 2 ) do begin
locFuncType.Args.Add(locProcType.Args[j]);
arg_a := TPasArgument(locProcType.Args[j]);
arg_b := TPasArgument(SymbolTable.CreateElement(TPasArgument,arg_a.Name,locFuncType,visDefault,'',0));
locFuncType.Args.Add(arg_b);
arg_b.Access := arg_a.Access;
arg_b.ArgType := arg_a.ArgType;
arg_b.ArgType.AddRef();
end;
j := locProcType.Args.Count - 1;
locFuncType.ResultEl.ResultType := TPasType(TPasArgument(locProcType.Args[j]).ArgType);
SymbolTable.RegisterExternalAlias(locFuncType.ResultEl,SymbolTable.GetExternalName(TPasArgument(locProcType.Args[j])));
arg_a := TPasArgument(locProcType.Args[j]);
locFuncType.ResultEl.ResultType := arg_a.ArgType;
SymbolTable.RegisterExternalAlias(locFuncType.ResultEl,SymbolTable.GetExternalName(arg_a));
locFuncType.ResultEl.ResultType.AddRef();
TPasArgument(locProcType.Args[j]).Release();
tmpMthdType.Args.Clear();
tmpMthd.Release();
tmpMthd := locFunc;
end;
@ -1241,7 +1290,7 @@ begin
end;
if Assigned(Result) then begin
if Assigned(frwType) and AnsiSameText(SymbolTable.GetExternalName(Result),SymbolTable.GetExternalName(frwType)) then begin
TPasEmentCrack(Result).SetName(frwType.Name);
Result.Name := frwType.Name;
SymbolTable.RegisterExternalAlias(Result,SymbolTable.GetExternalName(frwType));
end;
end else begin
@ -1368,8 +1417,8 @@ procedure TWsdlParser.Parse(const AMode : TParserMode; const AModuleName : strin
if ( sym <> symNew ) then begin
FModule.InterfaceSection.Declarations.Extract(sym);
FModule.InterfaceSection.Types.Extract(sym);
TPasEmentCrack(symNew).SetName(sym.Name);
GetLogger().Log(mtInfo,'forward type paring %s = %s',[sym.Name, symNew.Name]);
symNew.Name := sym.Name;
DoOnMessage(mtInfo,Format('forward type paring %s; %d %d',[symNew.Name,c, typeList.Count]));
//sym.Release();
end;
i := 0; //Dec(i);
@ -1424,6 +1473,7 @@ begin
if ( AMode = pmAllTypes ) then begin
ParseTypes();
end;
ParseForwardDeclarations();
ExtractNameSpace();
SymbolTable.SetCurrentModule(FModule);
@ -1801,7 +1851,7 @@ var
if locIsRefElement then begin
locTypeInternalName := locTypeName;
locTypeInternalName := locTypeInternalName + '_Type';
TPasEmentCrack(locType).SetName(locTypeInternalName);
locType.Name := locTypeInternalName;
FSymbols.RegisterExternalAlias(locType,locTypeName);
end;
end else begin

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit cursor_intf;
{$mode objfpc}{$H+}

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit dom_cursors;
{$mode objfpc}{$H+}

View File

@ -1,3 +1,15 @@
{
This file is part of the Web Service Toolkit
Copyright (c) 2007 by Inoussa OUEDRAOGO
This file is provide under modified LGPL licence
( the files COPYING.modifiedLGPL and COPYING.LGPL).
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
unit rtti_filters;
{$mode objfpc}{$H+}