You've already forked lazarus-ccr
Type library editor : array editor
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@219 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
129
wst/trunk/type_lib_edtr/ufarrayedit.lfm
Normal file
129
wst/trunk/type_lib_edtr/ufarrayedit.lfm
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
object fArrayEdit: TfArrayEdit
|
||||||
|
Left = 327
|
||||||
|
Height = 361
|
||||||
|
Top = 131
|
||||||
|
Width = 392
|
||||||
|
HorzScrollBar.Page = 391
|
||||||
|
VertScrollBar.Page = 360
|
||||||
|
ActiveControl = Button1
|
||||||
|
BorderStyle = bsSizeToolWin
|
||||||
|
Caption = 'fArrayEdit'
|
||||||
|
ClientHeight = 361
|
||||||
|
ClientWidth = 392
|
||||||
|
Position = poMainFormCenter
|
||||||
|
object Panel1: TPanel
|
||||||
|
Height = 50
|
||||||
|
Top = 311
|
||||||
|
Width = 392
|
||||||
|
Align = alBottom
|
||||||
|
ClientHeight = 50
|
||||||
|
ClientWidth = 392
|
||||||
|
TabOrder = 0
|
||||||
|
object Button1: TButton
|
||||||
|
Left = 216
|
||||||
|
Height = 25
|
||||||
|
Top = 9
|
||||||
|
Width = 75
|
||||||
|
Action = actOK
|
||||||
|
Anchors = [akTop, akRight]
|
||||||
|
BorderSpacing.InnerBorder = 4
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object Button2: TButton
|
||||||
|
Left = 304
|
||||||
|
Height = 25
|
||||||
|
Top = 9
|
||||||
|
Width = 75
|
||||||
|
Anchors = [akTop, akRight]
|
||||||
|
BorderSpacing.InnerBorder = 4
|
||||||
|
Cancel = True
|
||||||
|
Caption = 'Cancel'
|
||||||
|
ModalResult = 2
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object PageControl1: TPageControl
|
||||||
|
Height = 311
|
||||||
|
Width = 392
|
||||||
|
ActivePage = TabSheet1
|
||||||
|
Align = alClient
|
||||||
|
TabIndex = 0
|
||||||
|
TabOrder = 1
|
||||||
|
object TabSheet1: TTabSheet
|
||||||
|
Caption = 'Array definition'
|
||||||
|
ClientHeight = 285
|
||||||
|
ClientWidth = 384
|
||||||
|
object Label1: TLabel
|
||||||
|
Left = 19
|
||||||
|
Height = 14
|
||||||
|
Top = 21
|
||||||
|
Width = 28
|
||||||
|
Caption = 'Name'
|
||||||
|
ParentColor = False
|
||||||
|
end
|
||||||
|
object Label2: TLabel
|
||||||
|
Left = 19
|
||||||
|
Height = 14
|
||||||
|
Top = 102
|
||||||
|
Width = 66
|
||||||
|
Caption = 'Element Type'
|
||||||
|
ParentColor = False
|
||||||
|
end
|
||||||
|
object Label3: TLabel
|
||||||
|
Left = 19
|
||||||
|
Height = 14
|
||||||
|
Top = 170
|
||||||
|
Width = 69
|
||||||
|
Caption = 'Element Name'
|
||||||
|
ParentColor = False
|
||||||
|
end
|
||||||
|
object edtName: TEdit
|
||||||
|
Left = 20
|
||||||
|
Height = 23
|
||||||
|
Top = 42
|
||||||
|
Width = 345
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object edtElementType: TComboBox
|
||||||
|
Left = 19
|
||||||
|
Height = 21
|
||||||
|
Top = 122
|
||||||
|
Width = 345
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
|
AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending]
|
||||||
|
ItemHeight = 13
|
||||||
|
MaxLength = 0
|
||||||
|
Style = csDropDownList
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
object edtEmbedded: TCheckBox
|
||||||
|
Left = 19
|
||||||
|
Height = 13
|
||||||
|
Top = 242
|
||||||
|
Width = 71
|
||||||
|
Caption = 'Embedded'
|
||||||
|
TabOrder = 2
|
||||||
|
end
|
||||||
|
object edtElementName: TEdit
|
||||||
|
Left = 19
|
||||||
|
Height = 23
|
||||||
|
Top = 186
|
||||||
|
Width = 345
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
|
TabOrder = 3
|
||||||
|
Text = 'Item'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object AL: TActionList
|
||||||
|
left = 215
|
||||||
|
top = 185
|
||||||
|
object actOK: TAction
|
||||||
|
Caption = 'OK'
|
||||||
|
DisableIfNoHandler = True
|
||||||
|
OnExecute = actOKExecute
|
||||||
|
OnUpdate = actOKUpdate
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
37
wst/trunk/type_lib_edtr/ufarrayedit.lrs
Normal file
37
wst/trunk/type_lib_edtr/ufarrayedit.lrs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{ Ceci est un fichier ressource g�n�r� automatiquement par Lazarus }
|
||||||
|
|
||||||
|
LazarusResources.Add('TfArrayEdit','FORMDATA',[
|
||||||
|
'TPF0'#11'TfArrayEdit'#10'fArrayEdit'#4'Left'#3'G'#1#6'Height'#3'i'#1#3'Top'#3
|
||||||
|
+#131#0#5'Width'#3#136#1#18'HorzScrollBar.Page'#3#135#1#18'VertScrollBar.Page'
|
||||||
|
+#3'h'#1#13'ActiveControl'#7#7'Button1'#11'BorderStyle'#7#13'bsSizeToolWin'#7
|
||||||
|
+'Caption'#6#10'fArrayEdit'#12'ClientHeight'#3'i'#1#11'ClientWidth'#3#136#1#8
|
||||||
|
+'Position'#7#16'poMainFormCenter'#0#6'TPanel'#6'Panel1'#6'Height'#2'2'#3'Top'
|
||||||
|
+#3'7'#1#5'Width'#3#136#1#5'Align'#7#8'alBottom'#12'ClientHeight'#2'2'#11'Cli'
|
||||||
|
+'entWidth'#3#136#1#8'TabOrder'#2#0#0#7'TButton'#7'Button1'#4'Left'#3#216#0#6
|
||||||
|
+'Height'#2#25#3'Top'#2#9#5'Width'#2'K'#6'Action'#7#5'actOK'#7'Anchors'#11#5
|
||||||
|
+'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#8'TabOrder'#2#0#0#0#7
|
||||||
|
+'TButton'#7'Button2'#4'Left'#3'0'#1#6'Height'#2#25#3'Top'#2#9#5'Width'#2'K'#7
|
||||||
|
+'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBorder'#2#4#6'Cance'
|
||||||
|
+'l'#9#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#0#12'TP'
|
||||||
|
+'ageControl'#12'PageControl1'#6'Height'#3'7'#1#5'Width'#3#136#1#10'ActivePag'
|
||||||
|
+'e'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'TabOrder'#2#1#0#9
|
||||||
|
+'TTabSheet'#9'TabSheet1'#7'Caption'#6#16'Array definition'#12'ClientHeight'#3
|
||||||
|
+#29#1#11'ClientWidth'#3#128#1#0#6'TLabel'#6'Label1'#4'Left'#2#19#6'Height'#2
|
||||||
|
+#14#3'Top'#2#21#5'Width'#2#28#7'Caption'#6#4'Name'#11'ParentColor'#8#0#0#6'T'
|
||||||
|
+'Label'#6'Label2'#4'Left'#2#19#6'Height'#2#14#3'Top'#2'f'#5'Width'#2'B'#7'Ca'
|
||||||
|
+'ption'#6#12'Element Type'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'
|
||||||
|
+#2#19#6'Height'#2#14#3'Top'#3#170#0#5'Width'#2'E'#7'Caption'#6#12'Element Na'
|
||||||
|
+'me'#11'ParentColor'#8#0#0#5'TEdit'#7'edtName'#4'Left'#2#20#6'Height'#2#23#3
|
||||||
|
+'Top'#2'*'#5'Width'#3'Y'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'T'
|
||||||
|
+'abOrder'#2#0#0#0#9'TComboBox'#14'edtElementType'#4'Left'#2#19#6'Height'#2#21
|
||||||
|
+#3'Top'#2'z'#5'Width'#3'Y'#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#16
|
||||||
|
+'AutoCompleteText'#11#22'cbactEndOfLineComplete'#20'cbactSearchAscending'#0
|
||||||
|
+#10'ItemHeight'#2#13#9'MaxLength'#2#0#5'Style'#7#14'csDropDownList'#8'TabOrd'
|
||||||
|
+'er'#2#1#0#0#9'TCheckBox'#11'edtEmbedded'#4'Left'#2#19#6'Height'#2#13#3'Top'
|
||||||
|
+#3#242#0#5'Width'#2'G'#7'Caption'#6#8'Embedded'#8'TabOrder'#2#2#0#0#5'TEdit'
|
||||||
|
+#14'edtElementName'#4'Left'#2#19#6'Height'#2#23#3'Top'#3#186#0#5'Width'#3'Y'
|
||||||
|
+#1#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#8'TabOrder'#2#3#4'Text'#6#4
|
||||||
|
+'Item'#0#0#0#0#11'TActionList'#2'AL'#4'left'#3#215#0#3'top'#3#185#0#0#7'TAct'
|
||||||
|
+'ion'#5'actOK'#7'Caption'#6#2'OK'#18'DisableIfNoHandler'#9#9'OnExecute'#7#12
|
||||||
|
+'actOKExecute'#8'OnUpdate'#7#11'actOKUpdate'#0#0#0#0
|
||||||
|
]);
|
158
wst/trunk/type_lib_edtr/ufarrayedit.pas
Normal file
158
wst/trunk/type_lib_edtr/ufarrayedit.pas
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
unit ufarrayedit;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
||||||
|
ComCtrls, StdCtrls, ActnList,
|
||||||
|
pastree, pascal_parser_intf, edit_helper;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TfArrayEdit }
|
||||||
|
|
||||||
|
TfArrayEdit = class(TForm)
|
||||||
|
actOK : TAction;
|
||||||
|
AL : TActionList;
|
||||||
|
Button1 : TButton;
|
||||||
|
Button2 : TButton;
|
||||||
|
edtEmbedded : TCheckBox;
|
||||||
|
edtElementName : TEdit;
|
||||||
|
edtElementType : TComboBox;
|
||||||
|
edtName : TEdit;
|
||||||
|
Label1 : TLabel;
|
||||||
|
Label2 : TLabel;
|
||||||
|
Label3 : TLabel;
|
||||||
|
PageControl1 : TPageControl;
|
||||||
|
Panel1 : TPanel;
|
||||||
|
TabSheet1 : TTabSheet;
|
||||||
|
procedure actOKExecute(Sender : TObject);
|
||||||
|
procedure actOKUpdate(Sender : TObject);
|
||||||
|
private
|
||||||
|
FUpdateType : TEditType;
|
||||||
|
FObject : TPasArrayType;
|
||||||
|
FSymbolTable : TwstPasTreeContainer;
|
||||||
|
private
|
||||||
|
property UpdateType : TEditType read FUpdateType;
|
||||||
|
private
|
||||||
|
procedure LoadFromObject();
|
||||||
|
procedure SaveToObject();
|
||||||
|
public
|
||||||
|
function UpdateObject(
|
||||||
|
var AObject : TPasArrayType;
|
||||||
|
const AUpdateType : TEditType;
|
||||||
|
ASymbolTable : TwstPasTreeContainer
|
||||||
|
) : Boolean;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
fArrayEdit : TfArrayEdit;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
uses parserutils;
|
||||||
|
|
||||||
|
{ TfArrayEdit }
|
||||||
|
|
||||||
|
procedure TfArrayEdit.actOKUpdate(Sender : TObject);
|
||||||
|
var
|
||||||
|
internalName : string;
|
||||||
|
begin
|
||||||
|
internalName := ExtractIdentifier(edtName.Text);
|
||||||
|
TAction(Sender).Enabled :=
|
||||||
|
( not IsStrEmpty(internalName) ) and
|
||||||
|
( not IsStrEmpty(ExtractIdentifier(edtElementName.Text)) ) and
|
||||||
|
( edtElementType.ItemIndex >= 0 ) ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfArrayEdit.actOKExecute(Sender : TObject);
|
||||||
|
begin
|
||||||
|
ModalResult := mrOK;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfArrayEdit.LoadFromObject();
|
||||||
|
begin
|
||||||
|
edtElementType.Clear();
|
||||||
|
edtElementType.Items.BeginUpdate();
|
||||||
|
try
|
||||||
|
edtElementType.Items.Clear();
|
||||||
|
FillTypeList(edtElementType.Items,FSymbolTable);
|
||||||
|
finally
|
||||||
|
edtElementType.Items.EndUpdate();
|
||||||
|
end;
|
||||||
|
if Assigned(FObject) then begin
|
||||||
|
Self.Caption := FSymbolTable.GetExternalName(FObject);
|
||||||
|
edtName.Text := FSymbolTable.GetExternalName(FObject);
|
||||||
|
edtElementName.Text := FSymbolTable.GetArrayItemExternalName(FObject);
|
||||||
|
edtElementType.ItemIndex := edtElementType.Items.IndexOf(FSymbolTable.GetExternalName(FObject.ElType));
|
||||||
|
edtEmbedded.Checked := ( FSymbolTable.GetArrayStyle(FObject) = asEmbeded );
|
||||||
|
end else begin
|
||||||
|
Self.Caption := 'NewArray';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfArrayEdit.SaveToObject();
|
||||||
|
var
|
||||||
|
locObj : TPasArrayType;
|
||||||
|
typExtName, typIntName : string;
|
||||||
|
eltExtName, eltIntName : string;
|
||||||
|
eltType : TPasType;
|
||||||
|
arrStyle : TArrayStyle;
|
||||||
|
begin
|
||||||
|
locObj := nil;
|
||||||
|
typExtName := ExtractIdentifier(edtName.Text);
|
||||||
|
typIntName := MakeInternalSymbolNameFrom(typExtName);
|
||||||
|
eltExtName := ExtractIdentifier(edtElementName.Text);
|
||||||
|
eltIntName := MakeInternalSymbolNameFrom(eltExtName);
|
||||||
|
if edtEmbedded.Checked then
|
||||||
|
arrStyle := asEmbeded
|
||||||
|
else
|
||||||
|
arrStyle := asScoped;
|
||||||
|
eltType := edtElementType.Items.Objects[edtElementType.ItemIndex] as TPasType;
|
||||||
|
if ( UpdateType = etCreate ) then begin
|
||||||
|
locObj := FSymbolTable.CreateArray(typIntName,eltType,eltExtName,eltIntName,arrStyle);
|
||||||
|
FSymbolTable.CurrentModule.InterfaceSection.Declarations.Add(locObj);
|
||||||
|
FSymbolTable.CurrentModule.InterfaceSection.Types.Add(locObj);
|
||||||
|
FSymbolTable.CurrentModule.InterfaceSection.Classes.Add(locObj);
|
||||||
|
FreeAndNil(FObject);
|
||||||
|
FObject := locObj;
|
||||||
|
end else begin
|
||||||
|
locObj := FObject;
|
||||||
|
if ( eltType <> locObj.ElType ) then begin
|
||||||
|
if ( locObj.ElType <> nil ) then
|
||||||
|
locObj.ElType.Release();
|
||||||
|
locObj.ElType := eltType;
|
||||||
|
locObj.ElType.AddRef();
|
||||||
|
end;
|
||||||
|
locObj.Name := typIntName;
|
||||||
|
FSymbolTable.SetArrayStyle(locObj,arrStyle);
|
||||||
|
FSymbolTable.SetArrayItemExternalName(locObj,eltExtName);
|
||||||
|
end;
|
||||||
|
FSymbolTable.RegisterExternalAlias(locObj,typExtName);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TfArrayEdit.UpdateObject(
|
||||||
|
var AObject : TPasArrayType;
|
||||||
|
const AUpdateType : TEditType;
|
||||||
|
ASymbolTable : TwstPasTreeContainer
|
||||||
|
) : Boolean;
|
||||||
|
begin
|
||||||
|
FSymbolTable := ASymbolTable;
|
||||||
|
FUpdateType := AUpdateType;
|
||||||
|
FObject := AObject;
|
||||||
|
LoadFromObject();
|
||||||
|
Result := ( ShowModal() = mrOK );
|
||||||
|
if Result then begin
|
||||||
|
SaveToObject();
|
||||||
|
if ( AUpdateType = etCreate ) then begin
|
||||||
|
AObject := FObject;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
{$I ufarrayedit.lrs}
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
Reference in New Issue
Block a user