1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435 |
- {$mode objfpc}{$h+}
- unit GtkEditor;
- interface
- {__$define debug}
- uses sysutils, classes,
- glib, gdk, gtk, FPGtk, FPgtkExt,
- buttonrow, ObjectDef, SettingsRec;
- type
- TGtkEditorWindow = class (TFPgtkWindow)
- private
- FSettings : TSettingsRec;
- { widgets in the window }
- // visual arrangement
- LObjects, LProperties, LParams : TFPgtkScrollCList;
- BrObjects, BrProperties, BrParams : TButtonRow;
- PObject, PProperty, PParam : TFPgtkHPaned;
- FDefinition, FObject, FProperty : TFPgtkFrame;
- FParam : TFPgtkBox;
- // definition
- DUnitName, DGtkPrefix, DUsesList : TFPgtkentry;
- // object
- OName, OInherit, OGtkName, OGtkFuncName, OCreateParams : TFPgtkentry;
- OCreateObject, OWithPointer : TFPgtkToggleButton;
- // property
- PType : TFPgtkOptionMenu; // Or TFPgtkCombo
- Bladen : TFPgtkNotebook;
- BDefinition, BParameter, BRead, BWrite, BFunction, BCode : TFPgtkWidget;
- // definition
- PName, PPascalType, PGtkName : TFPgtkEntry;
- PSection : TFPgtkOptionMenu; // Or TFPgtkCombo
- // parameter
- ParamName, ParamPascalType : TFPgtkentry;
- ParamType : TFPgtkOptionmenu; // Or TFPgtkCombo
- ParamConvert : TFPgtkToggleButton;
- // read
- PRType : TFPgtkOptionMenu;
- PRGtkName : TFPgtkEntry;
- PRCode : TFPgtkScrollText;
- PRConvert : TFPgtkToggleButton;
- // write
- PWType : TFPgtkOptionMenu;
- PWGtkName : TFPgtkEntry;
- PWCode : TFPgtkScrollText;
- PWConvert : TFPgtkToggleButton;
- // function
- POverride, PVirtual, PDynamic,
- PAbstract, PCDecl, POverload,
- PReintroduce : TFPgtkTogglebutton;
- PFCode : TFPgtkScrollText;
- // Code
- PCode : TFPgtkScrollText;
- { CollectionItems that are currently shown }
- ciObject : TObjectItem;
- ciProperty : TPropertyItem;
- ciParameter : TParameterItem;
- { Defs Property }
- FDefs : TObjectDefs;
- { entry saving procedures/signals }
- // Definition
- procedure ChangedDUsesList (Sender:TFPgtkObject; data:pointer);
- procedure ChangedDUnitName (Sender:TFPgtkObject; data:pointer);
- procedure ChangedDGtkPrefix (Sender:TFPgtkObject; data:pointer);
- // Object
- procedure ChangedOName (Sender:TFPgtkObject; data:pointer);
- procedure ChangedOInherit (Sender:TFPgtkObject; data:pointer);
- procedure ChangedOGtkName (Sender:TFPgtkObject; data:pointer);
- procedure ChangedOGtkFuncName (Sender:TFPgtkObject; data:pointer);
- procedure ChangedOCreateParams (Sender:TFPgtkObject; data:pointer);
- procedure ChangedOCreateObject (Sender:TFPgtkObject; data:pointer);
- procedure ChangedOWithPointer (Sender:TFPgtkObject; data:pointer);
- // Property
- procedure ChangedPType (Sender:TFPgtkObject; data:pointer);
- procedure ChangedPName (Sender:TFPgtkObject; data:pointer);
- procedure ChangedPPascalType (Sender:TFPgtkObject; data:pointer);
- procedure ChangedPGtkName (Sender:TFPgtkObject; data:pointer);
- procedure ChangedPSection (Sender:TFPgtkObject; data:pointer);
- // parameter
- procedure ChangedParamName (Sender:TFPgtkObject; data:pointer);
- procedure ChangedParamPascalType (Sender:TFPgtkObject; data:pointer);
- procedure ChangedParamType (Sender:TFPgtkObject; data:pointer);
- procedure ChangedParamConvert (Sender:TFPgtkObject; data:pointer);
- // read
- procedure ChangedPRType (Sender:TFPgtkObject; data:pointer);
- procedure ChangedPRConvert (Sender:TFPgtkObject; data:pointer);
- // write
- procedure ChangedPWType (Sender:TFPgtkObject; data:pointer);
- procedure ChangedPWGtkName (Sender:TFPgtkObject; data:pointer);
- procedure ChangedPWCode (Sender:TFPgtkObject; data:pointer);
- procedure ChangedPWConvert (Sender:TFPgtkObject; data:pointer);
- // function
- procedure ChangedPFuncType (Sender:TFPgtkObject; data:pointer);
- // Code
- procedure ChangedPCode (Sender:TFPgtkObject; data:pointer);
- { Showing procedures }
- RefreshingParam, RefreshingProperty, RefreshingObject, RefreshingDefinition : boolean;
- PropPixs : array [0..13] of PGdkPixmap;
- PropMasks : array [0..13] of PGdkBitmap;
- procedure CreatePixMaps;
- procedure PropertyIcon (Item:TCollectionItem; var Pixmap:PGdkPixMap; var mask:PGdkBitmap);
- procedure EnDisablePages (pt : TPropType);
- procedure RefreshParam (Selected : TCollectionItem; NeedFocus:boolean);
- procedure RefreshProperty (Selected : TCollectionItem; NeedFocus:boolean);
- procedure RefreshObject (Selected : TCollectionItem; NeedFocus:boolean);
- procedure RefreshDefinition;
- procedure ObjectDisplayChanged;
- procedure PropertyDisplayChanged;
- procedure ParamDisplayChanged;
- procedure ComposeWindow;
- { File and menu handling }
- FFileName : string;
- HasAFile : boolean;
- FReopenList : TStrings;
- MenuEditObject, MenuEditProperty, MenuEditParameter,
- MenuFileReopen : TFPgtkMenuItem;
- AccelGroup : integer;
- procedure NewFilename (NewName : string);
- procedure BuildReopenList;
- procedure DataRead (filename : string);
- procedure DataWrite (filename : string);
- procedure Generate;
- { Menu signals }
- procedure FileNew (Sender : TFPgtkObject; data : pointer);
- procedure FileOpen (Sender : TFPgtkObject; data : pointer);
- procedure FileSave (Sender : TFPgtkObject; data : pointer);
- procedure FileSaveAs (Sender : TFPgtkObject; data : pointer);
- procedure FileExit (Sender : TFPgtkObject; data : pointer);
- procedure ToolsGenerate (Sender : TFPgtkObject; data : pointer);
- procedure ToolsOptions (Sender : TFPgtkObject; data : pointer);
- procedure HelpInfo (Sender : TFPgtkObject; data : pointer);
- procedure HelpAbout (Sender : TFPgtkObject; data : pointer);
- procedure ToolbarReopen (Sender : TFpgtkObject; data : pointer);
- { Dialog Procedures }
- procedure DialogSetFilename (Sender:TFPgtkWindow;
- aDialogResult:pointer; Action:integer; initiator:TFPgtkObject);
- procedure FileReopen (Sender : TFPgtkObject; data : pointer);
- { Settings procedures }
- procedure ReadSettings;
- procedure WriteSettings (Sender : TFPgtkObject; data : pointer);
- public
- constructor create;
- destructor Destroy; override;
- end;
- implementation
- uses XPMs, GtkDefTexts, inifiles, ProgWin;
- Type
- TRightLabel = class (TFPgtkLabel)
- public
- constructor create(aText : string);
- end;
- constructor TRightLabel.Create (aText : string);
- begin
- inherited create (aText);
- XAlign := 1;
- end;
- { TGtkEditorWindow }
- { *** Creation of window *** }
- const
- gtk_all = gtk_fill + gtk_expand + gtk_Shrink;
- gtk_NoExp = gtk_fill + gtk_shrink;
- constructor TGtkEditorWindow.Create;
- begin
- inherited Create (Gtk_Window_TopLevel);
- SetUSize (800, 500);
- MenuFileReopen := nil;
- MenuEditObject := nil;
- MenuEditProperty := nil;
- MenuEditParameter := nil;
- Title := sEditorTitle;
- ciObject := nil;
- ciProperty := nil;
- ciParameter := nil;
- FDefs := nil;
- CreatePixmaps;
- ComposeWindow;
- FReopenList := TStringList.Create;
- ReadSettings;
- ConnectDestroy (@WriteSettings, @FSettings);
- end;
- destructor TGtkEditorWindow.Destroy;
- begin
- FReopenList.Free;
- end;
- procedure TGtkEditorWindow.ComposeWindow;
- var b, b1 : TFPgtkBox;
- t : TFPgtkTable;
- m : TFPgtkMenuBar;
- mlist : TFPgtkItemGroup;
- F : TFPgtkFrame;
- tb : TFPgtkToolbar;
- //pm : TFPgtkPixmap;
- but : TFPgtkButton;
- AG : PGtkAccelGroup;
- begin
- AccelGroup := AccelGroupNew;
- AG := AccelGroups[AccelGroup];
- b := TFPgtkVBox.Create;
- Add (b);
- //writeln ('------->> Menu');
- MenuEditObject := NewSubMenu (smEditObject, '', '', nil, []);
- MenuEditProperty := NewSubMenu (smEditProperty, '', '', nil, []);
- MenuEditParameter := NewSubMenu (smEditParameter, '', '', nil, []);
- MenuFileReopen := NewSubMenu (smFileReopen, '', '', nil, []);
- m := NewMenuBar ([
- NewSubMenu (smFile, '', '', MakeAccelKeyDef(AG,Gdk_F,[amAlt]), [
- NewMenuItem (smFileNew, '', '', MakeAccelKeyDef(AG,Gdk_N,[amControl]), @FileNew, nil),
- NewMenuItem (smFileOpen, '', '', MakeAccelKeyDef(AG,Gdk_L,[amControl]), @FileOpen, nil),
- MenuFileReopen,
- NewMenuItem (smFileSave, '', '', MakeAccelKeyDef(AG,Gdk_S,[amControl]), @FileSave, nil),
- NewMenuItem (smFileSaveAs, '', '', MakeAccelKeyDef(AG,Gdk_A,[amControl]), @FileSaveAs, nil),
- NewLine,
- NewMenuItem (smFileExit, '', '', MakeAccelKeyDef(AG,Gdk_W,[amControl]), @FileExit, nil)]),
- NewSubMenu (smEdit, '', '', MakeAccelKeyDef(AG,Gdk_E,[amAlt]), [
- MenuEditObject, MenuEditProperty, MenuEditParameter]),
- NewSubMenu (smTools, '', '', MakeAccelKeyDef(AG,Gdk_T,[amAlt]), [
- NewMenuItem (smToolsGenerate, '', '', MakeAccelKeyDef(AG,Gdk_G,[amControl]), @ToolsGenerate, nil),
- NewMenuItem (smToolsOptions, '', '', MakeAccelKeyDef(AG,Gdk_O,[amControl]), @ToolsOptions, nil)]),
- NewSubMenu (smHelp, '', '', MakeAccelKeyDef(AG,Gdk_H,[amAlt]), [
- NewMenuItem (smHelpInfo, '', '', MakeAccelKeyDef(AG,Gdk_I,[amControl]), @HelpInfo, nil),
- NewMenuItem (smHelpAbout, '', '', MakeAccelKeyDef(AG,Gdk_B,[amControl]), @HelpAbout, nil)])
- ]);
- b.PackStart (m, false, false, 0);
- //writeln ('------->> Toolbar');
- tb := TFPgtkToolbar.Create;
- b.PackStart (tb, false, false, 0);
- b.Packstart (TFPgtkHSeparator.Create, false, false, 0);
- with tb do
- begin
- ButtonRelief := Gtk_Relief_None;
- AppendSpace;
- AppendItem ('', RemoveUnderscore(smFileNew), '', XPMFileNew, @FileNew, nil);
- AppendSpace;
- AppendItem ('', RemoveUnderscore(smFileOpen), '', XPMFileOpen, @FileOpen, nil);
- but := TFPgtkButton.Create;
- with but do
- begin
- ConnectClicked (@ToolbarReopen, nil);
- Add (TFPgtkArrow.Create(GTK_Arrow_Down, GTK_Shadow_Out));
- CanFocus := False;
- ReliefStyle := GTK_RELIEF_NONE;
- SetUsize (15, 22);
- end;
- AppendWidget (but, RemoveUnderscore(smFileReopen), '');
- AppendSpace;
- AppendItem ('', RemoveUnderscore(smFileSave), '', XPMFileSave, @FileSave, nil);
- AppendSpace;
- AppendItem ('', RemoveUnderscore(smToolsGenerate), '', XPMGenerate, @ToolsGenerate, nil);
- end;
- //writeln ('------->> Panels and lists');
- FDefinition := TFPgtkFrame.Create;
- FDefinition.Text := sComponent;
- b.PackStart (FDefinition, false, true, 0);
- PObject := TFPgtkHPaned.Create;
- b.packStart (PObject, true, true, 0);
- LObjects := TFPgtkScrollCList.Create (1);
- LObjects.SetUsize (120,40);
- b1 := TFPgtkVBox.Create;
- BrObjects := TButtonRow.Create;
- BrObjects.Title := 'Objects buttonrow';
- b1.PackEnd (BrObjects, false, false, 0);
- b1.PackEnd (LObjects);
- PObject.Add1 (b1);
- b := TFPgtkVBox.create;
- PObject.Add2 (b);
- FObject := TFPgtkFrame.Create;
- FObject.Text := SObject;
- b.PackStart (FObject, false, true, 0);
- PProperty := TFPgtkHPaned.Create;
- B.PackStart (PProperty, true, true, 0);
- LProperties := TFpgtkScrollCList.Create (2);
- LProperties.SetUSize (180,30);
- b1 := TFPgtkVBox.Create;
- BrProperties := TButtonRow.Create;
- BrProperties.Title := 'Properties buttonrow';
- b1.PackEnd (BrProperties, false, false, 0);
- b1.PackEnd (LProperties);
- PProperty.Add1 (b1);
- FProperty := TFPgtkFrame.Create;
- FProperty.Text := SProperty;
- PProperty.Add2 (FProperty);
- PProperty.ComputePosition (40, 20, 20);
- PObject.ComputePosition (40, 20, 20);
- //writeln ('------->> Definition');
- t := TFPgtkTable.create (6,1);
- t.ColSpacings := 3;
- t.attach (TFPgtkLabel.Create(sUnitName), 0,1, 0,1, gtk_NoExp, gtk_fill, 3,0);
- DUnitName := TFPgtkEntry.create;
- DUnitName.ConnectChanged (@ChangedDUnitName, nil);
- t.attach (DUnitName, 1,2, 0,1, gtk_all, gtk_fill, 0,0);
- t.attach (TFPgtkLabel.Create (sGtkPrefix), 2,3, 0,1, gtk_NoExp, gtk_fill, 3,0);
- DGtkPrefix := TFPgtkentry.create;
- DGtkPrefix.ConnectChanged (@ChangedDGtkPrefix, nil);
- t.attach (DGtkPrefix, 3,4, 0,1, gtk_all, gtk_fill, 0,0);
- t.attach (TFPgtkLabel.Create(sUsesList), 4,5, 0,1, gtk_NoExp, gtk_fill, 3,0);
- DUsesList := TFPgtkEntry.create;
- DUsesList.ConnectChanged (@ChangedDUsesList, nil);
- t.attach (DUsesList, 5,6, 0,1, gtk_all, gtk_fill, 0,0);
- FDefinition.Add (t);
- //writeln ('------->> Object');
- t := tFPgtkTable.Create (5,3);
- t.ColSpacings := 3;
- FObject.Add (t);
- t.attach (TRightLabel.create(sName), 0,1, 0,1, gtk_noExp, gtk_fill, 3,0);
- OName := TFPgtkentry.create;
- OName.ConnectChanged (@ChangedOName, nil);
- t.attach (OName, 1,2, 0,1);
- t.attach (TRightLabel.create(sInherits), 0,1, 1,2, gtk_noExp, gtk_fill, 3,0);
- OInherit := TFPgtkentry.create;
- OInherit.ConnectChanged (@ChangedOInherit, nil);
- t.attach (OInherit, 1,2, 1,2);
- t.attach (TRightLabel.create(sGtkName), 0,1, 2,3, gtk_noExp, gtk_fill, 3,0);
- OGtkName := TFPgtkentry.create;
- OGtkName.ConnectChanged (@ChangedOGtkName, nil);
- t.attach (OGtkName, 1,2, 2,3);
- t.SetOneColSpacing (1,7);
- OCreateObject := TFPgtkCheckedButton.createWithLabel (sCreateObject);
- OCreateObject.ConnectClicked (@ChangedOCreateObject, nil);
- t.attach (OCreateObject, 3,4, 0,1);
- OWithPointer := TFPgtkCheckedButton.createWithLabel (sWithPointer);
- OWithPointer.ConnectClicked (@ChangedOWithPointer, nil);
- t.attach (OWithPointer, 4,5, 0,1);
- t.attach (TRightLabel.create(sCreateParams), 2,3, 1,2, gtk_noExp, gtk_fill, 3,0);
- OCreateParams := TFPgtkentry.create;
- OCreateParams.ConnectChanged (@ChangedOCreateParams, nil);
- t.attach (OCreateParams, 3,5, 1,2, gtk_all, gtk_fill, 0,0);
- t.attach (TRightLabel.create(sGtkFunctionName), 2,3, 2,3, gtk_noExp, gtk_fill, 3,0);
- OGtkFuncName := TFPgtkentry.create;
- OGtkFuncName.ConnectChanged (@ChangedOGtkFuncName, nil);
- t.attach (OGtkFuncName, 3,5, 2,3, gtk_all, gtk_fill, 0,0);
- //writeln ('------->> Property');
- mlist := TFPgtkItemGroup.Create (TFPgtkMenuItem);
- b := TFPgtkVBox.Create;
- FProperty.Add (b);
- b1 := TFPgtkHBox.Create;
- b.PackStart (b1, false, true, 0);
- b1.PackStart (TFPgtkLabel.Create(sType), false, true, 3);
- mlist.FillFromArray ([sField, sProperty,sFunction,sProcedure,sSignal,sHelperproc,
- sHelperFunc,sSignalType,sDeclarations,sTypeDecl,sConstructor,
- sDestructor, sInitialization, sFinalization]);
- PType := TFPgtkOptionMenu.Create;
- with PType do
- begin
- menu := TFPgtkMenu.Create;
- setUsize (70, 26);
- AppendMenuItemGroup (menu, mlist, @ChangedPType, nil);
- end;
- mlist.Clear;
- b1.PackStart (PType, true, true,0);
- bladen := TFPgtkNotebook.Create;
- // bladen.Homogenous := True;
- // bladen.Scrollable := false;
- b.PackStart (bladen, true, true, 0);
- // defintion
- //writeln ('------->> Property Definition');
- t := TFPgtkTable.Create (2, 4);
- t.attach (TRightLabel.Create(sName), 0,1, 0,1, gtk_noExp, gtk_fill, 3,0);
- PName := TFPgtkEntry.create;
- PName.ConnectChanged (@ChangedPName, nil);
- t.attach (PName, 1,2, 0,1);
- t.attach (TRightLabel.Create(sPascalType), 0,1, 1,2, gtk_noExp, gtk_fill, 3,0);
- PPascalType := TFPgtkEntry.create;
- PPascalType.ConnectChanged (@ChangedPPascalType, nil);
- t.attach (PPascalType, 1,2, 1,2);
- t.attach (TRightLabel.Create(sSection), 0,1, 2,3, gtk_noExp, gtk_fill, 3,0);
- PSection := TFPgtkOptionMenu.create;
- mlist.FillFromArray ([sPrivate, sProtected, sPublic, sPublished]);
- with PSection do
- begin
- menu := TFPgtkMenu.Create;
- AppendMenuItemGroup (menu, mlist, @ChangedPSection, nil);
- setUsize (60,26);
- end;
- mlist.Clear;
- t.attach (PSection, 1,2, 2,3);
- t.attach (TRightLabel.Create(sGtkName), 0,1, 3,4, gtk_noExp, gtk_fill, 3,0);
- PGtkName := TFPgtkEntry.create;
- PGtkName.ConnectChanged (@ChangedPGtkName, nil);
- t.attach (PGtkName, 1,2, 3,4);
- b1 := TFPgtkVBox.Create;
- b1.Packstart (t, false, false, 0);
- BDefinition := b1;
- bladen.AppendPage (b1, TFPgtkLabel.Create(sDefinition));
- // parameter
- //writeln ('------->> Property Parameter');
- PParam := TFPgtkHPaned.Create;
- bladen.AppendPage (PParam, TFPgtkLabel.Create(sParameters));
- BParameter := PParam;
- LParams := TFPgtkScrollCList.Create(1);
- LParams.setusize (120,30);
- b1 := TFPgtkVBox.Create;
- BrParams := TButtonRow.Create;
- BrParams.Title := 'Parameters buttonrow';
- b1.PackEnd (BrParams, false, false, 0);
- b1.PackEnd (LParams);
- PParam.Add1 (b1);
- FParam := TFPgtkVBox.Create;
- PParam.Add2 (FParam);
- t := TFPgtkTable.Create (3,4);
- FParam.Packstart (t, false, false, 0);
- t.attach (TRightLabel.Create(sName), 0,1, 0,1, gtk_noExp, gtk_fill, 3,0);
- ParamName := TFPgtkentry.Create;
- ParamName.ConnectChanged (@ChangedParamName, nil);
- t.attach (ParamName, 1,3, 0,1);
- t.attach (TRightLabel.Create(sPascalType), 0,1, 1,2, gtk_noExp, gtk_fill, 3,0);
- ParamPascalType := TFPgtkentry.Create;
- ParamPascalType.ConnectChanged (@ChangedParamPascalType, nil);
- t.attach (ParamPascalType, 1,3, 1,2);
- t.attach (TRightLabel.Create(sType), 0,1, 2,3, gtk_noExp, gtk_fill, 3,0);
- ParamType := TFPgtkOptionmenu.Create;
- t.attach (ParamType, 1,3, 2,3);
- with ParamType do
- begin
- Menu := TFPgtkMenu.Create;
- mList.FillFromArray ([sNothing, sVar, sConst]);
- AppendMenuItemGroup (menu, mlist, @ChangedParamType, nil);
- setusize (50, 26);
- end;
- mlist.Clear;
- ParamConvert := TFPgtkCheckedButton.CreateWithLabel(sConvert);
- ParamConvert.ConnectClicked (@ChangedParamConvert, nil);
- t.attach (ParamConvert, 1,2, 3,4, gtk_noExp, gtk_Fill, 0,0);
- // Read
- //writeln ('------->> Property Read');
- t := TFPgtkTable.Create (3,3);
- bladen.AppendPage (t, TFPgtkLabel.Create(sRead));
- BRead := t;
- t.Attach (TRightLabel.Create(sType), 0,1, 0,1, gtk_noExp, gtk_fill, 3,0);
- PRtype := TFPgtkOptionMenu.Create;
- with PRType do
- begin
- Menu := TFPgtkMenu.Create;
- mlist.FillFromArray ([sGtkFunction, sObjectField, sObjectFunction,SField, sFunction,
- sNotImplemented, sGtkMacro, sExistingFunc]);
- AppendMenuItemGroup (Menu, mlist, @ChangedPRType, nil);
- SetUsize (60,26);
- end;
- mlist.Clear;
- t.attach (PRtype, 1,2, 0,1, gtk_all, gtk_noExp, 0,0);
- PRConvert := TFPgtkCheckedButton.CreateWithLabel (sConvert);
- PRConvert.ConnectClicked (@ChangedPRConvert, nil);
- PRConvert.TheLabel.XAlign := 0.0;
- t.attach (PRConvert, 2,3, 0,1, gtk_all, gtk_noExp, 0,0);
- t.Attach (TRightLabel.Create(sGtkName), 0,1, 1,2, gtk_noExp, gtk_fill, 3,0);
- PRGtkName := TFPgtkEntry.Create;
- PRGtkName.ConnectChanged (@ChangedPGtkName, nil);
- t.attach (PRGtkName, 1,3, 1,2, gtk_all, gtk_noExp, 0,0);
- t.Attach (TRightLabel.Create(sCode), 0,1, 2,3, gtk_noExp, gtk_fill, 3,0);
- PRCode := TFPgtkScrollText.Create;
- PRCode.TheText.ConnectChanged (@ChangedPCode, nil);
- t.attach (PRCode, 1,3, 2,3);
- // Write
- //writeln ('------->> Property Write');
- t := TFPgtkTable.Create (3,3);
- BWrite := t;
- bladen.AppendPage (t, TFPgtkLabel.Create(sWrite));
- t.Attach (TRightLabel.Create(sType), 0,1, 0,1, gtk_noExp, gtk_fill, 3,0);
- PWtype := TFPgtkOptionMenu.Create;
- with PWType do
- begin
- Menu := TFPgtkMenu.Create;
- mlist.FillFromArray ([sGtkProcedure, sObjectField, sObjectProcedure,SField, sProcedure,
- sNotImplemented, sGtkMacro, sExistingProc]);
- AppendMenuItemGroup (Menu, mlist, @ChangedPWType, nil);
- SetUsize (60,26);
- end;
- mlist.Clear;
- t.attach (PWtype, 1,2, 0,1, gtk_all, gtk_noExp, 0,0);
- PWConvert := TFPgtkCheckedButton.CreateWithLabel (sConvert);
- PWConvert.ConnectClicked (@ChangedPWConvert, nil);
- PWConvert.TheLabel.XAlign := 0.0;
- t.attach (PWConvert, 2,3, 0,1, gtk_all, gtk_noExp, 0,0);
- t.Attach (TRightLabel.Create(sGtkName), 0,1, 1,2, gtk_noExp, gtk_fill, 3,0);
- PWGtkName := TFPgtkEntry.Create;
- PWGtkName.ConnectChanged (@ChangedPWGtkName, nil);
- t.attach (PWGtkName, 1,3, 1,2, gtk_all, gtk_noExp, 0,0);
- t.Attach (TRightLabel.Create(sCode), 0,1, 2,3, gtk_noExp, gtk_fill, 3,0);
- PWCode := TFPgtkScrollText.Create;
- PWCode.TheText.ConnectChanged (@ChangedPWCode, nil);
- t.attach (PWCode, 1,3, 2,3);
- // Function
- //writeln ('------->> Property Function');
- t := TFPgtkTable.Create (2,2);
- BFunction := t;
- bladen.AppendPage (t, TFPgtkLabel.Create(sFunction));
- t.Attach (TFPgtkLabel.Create(sCode), 1,2, 0,1, gtk_NoExp, gtk_NoExp, 7,0);
- PFCode := TFPgtkScrollText.Create;
- PFCode.TheText.ConnectChanged (@ChangedPCode, nil);
- t.Attach (PFCode, 1,2, 1,2, gtk_all, gtk_all, 0,0);
- f := TFPgtkFrame.Create;
- f.Border := 3;
- f.Text := sTypes;
- t.Attach (f, 0,1, 0,2, gtk_NoExp, gtk_NoExp, 0,0);
- b1 := TFPgtkVBox.Create;
- f.Add (b1);
- b1.border := 2;
- POverride := TFPgtkCheckedButton.CreateWithLabel (sOverride);
- POverride.ConnectClicked (@ChangedPFuncType, inttopointer(0));
- b1.PackStart (POverride, false, false, 0);
- PVirtual := TFPgtkCheckedButton.CreateWithLabel (sVirtual);
- PVirtual.ConnectClicked (@ChangedPFuncType, inttopointer(1));
- b1.PackStart (PVirtual, false, false, 0);
- PDynamic := TFPgtkCheckedButton.CreateWithLabel (sDynamic);
- PDynamic.ConnectClicked (@ChangedPFuncType, inttopointer(2));
- b1.PackStart (PDynamic, false, false, 0);
- PAbstract := TFPgtkCheckedButton.CreateWithLabel (sAbstract);
- PAbstract.ConnectClicked (@ChangedPFuncType, inttopointer(3));
- b1.PackStart (PAbstract, false, false, 0);
- PCDecl := TFPgtkCheckedButton.CreateWithLabel (sCDecl);
- PCDecl.ConnectClicked (@ChangedPFuncType, inttopointer(4));
- b1.PackStart (PCDecl, false, false, 0);
- POverload := TFPgtkCheckedButton.CreateWithLabel (sOverload);
- POverload.ConnectClicked (@ChangedPFuncType, inttopointer(5));
- b1.PackStart (POverload, false, false, 0);
- PReintroduce := TFPgtkCheckedButton.CreateWithLabel (sReintroduce);
- PReintroduce.ConnectClicked (@ChangedPFuncType, inttopointer(6));
- b1.PackStart (PReintroduce, false, false, 0);
- // Code
- //writeln ('------->> Property Code');
- PCode := TFPgtkScrollText.Create;
- BCode := PCode;
- PCode.TheText.ConnectChanged (@ChangedPCode, nil);
- bladen.AppendPage (PCode, TFPgtkLabel.Create(sCode));
- // Configuring buttonrows
- //writeln ('------->> Configure Buttonrows');
- BrParams.Configure (LParams.CList, nil, @RefreshParam,
- MenuEditParameter.SubMenu,
- AG, Gdk_Mod1_Mask+Gdk_Shift_Mask);
- BrProperties.Configure (LProperties.Clist, @PropertyIcon, @RefreshProperty,
- MenuEditProperty.SubMenu,
- AG, Gdk_Control_Mask+Gdk_Shift_Mask);
- BrObjects.Configure (LObjects.CList, nil, @RefreshObject,
- MenuEditObject.SubMenu, AG, 0);
- //writeln ('------->> Einde ComposeWindow');
- end;
- { *** Procedures to show parts in the window (when selecting items) *** }
- { Showing procedures }
- procedure TGtkEditorWindow.RefreshDefinition;
- begin
- RefreshingDefinition := True;
- try
- if assigned (FDefs) then
- with FDefs do
- begin
- DUnitName.text := UnitName;
- DGtkPrefix.Text := GtkPrefix;
- DUsesList.Text := UsesList;
- BrObjects.ChangeCollection (Definition);
- end
- else
- begin
- DUnitName.text := '';
- DGtkPrefix.Text := '';
- DUsesList.Text := '';
- BrObjects.ChangeCollection (nil);
- end;
- finally
- RefreshingDefinition := False;
- end;
- end;
- procedure TGtkEditorWindow.RefreshObject (Selected : TCollectionItem; NeedFocus:boolean);
- begin
- RefreshingObject := True;
- try
- ciObject := TObjectItem(Selected);
- if assigned (ciObject) then
- with ciObject do
- begin
- FObject.Sensitive := true;
- OName.Text := Name;
- OInherit.Text := Inherit;
- OGtkName.Text := GtkName;
- OGtkFuncName.Text := GtkFuncName;
- OCreateParams.Text := CreateParams;
- OCreateObject.Active := CreateObject;
- OWithPointer.Active := WithPointer;
- BrProperties.ChangeCollection (Props);
- end
- else
- begin
- FObject.Sensitive := false;
- OName.Clear;
- OInherit.Clear;
- OGtkName.Clear;
- OGtkFuncName.Clear;
- OCreateParams.Clear;
- OCreateObject.Active := False;
- OWithPointer.Active := False;
- BrProperties.ChangeCollection (nil);
- end;
- if NeedFocus then
- with OName do
- begin
- SelectRegion (0, -1);
- GrabFocus;
- end;
- finally
- RefreshingObject := false;
- end;
- end;
- procedure TGtkEditorWindow.CreatePixmaps;
- procedure GdkPixmap (Data : array of string; var pm : PGdkPixmap; var bm : PGdkBitmap);
- var ppdata : ppgchar;
- begin
- ppdata := ArrayToPPgchar(Data);
- pm := gdk_pixmap_colormap_create_from_xpm_d (nil, Colormap, @bm, nil, ppdata);
- freemem (ppdata, sizeof (pchar) * (high(data)-low(data)+1));
- end;
- begin
- GdkPixmap (XPMPropField, PropPixs[0], PropMasks[0]);
- GdkPixmap (XPMPropProperty, PropPixs[1], PropMasks[1]);
- GdkPixmap (XPMPropFunction, PropPixs[2], PropMasks[2]);
- GdkPixmap (XPMPropProcedure, PropPixs[3], PropMasks[3]);
- GdkPixmap (XPMPropSignal, PropPixs[4], PropMasks[4]);
- GdkPixmap (XPMPropHelperProc, PropPixs[5], PropMasks[5]);
- GdkPixmap (XPMPropHelperFunc, PropPixs[6], PropMasks[6]);
- GdkPixmap (XPMPropSignalType, PropPixs[7], PropMasks[7]);
- GdkPixmap (XPMPropDeclar, PropPixs[8], PropMasks[8]);
- GdkPixmap (XPMPropTypeDecl, PropPixs[9], PropMasks[9]);
- GdkPixmap (XPMPropConstr, PropPixs[10], PropMasks[10]);
- GdkPixmap (XPMPropDestr, PropPixs[11], PropMasks[11]);
- GdkPixmap (XPMPropInitial, PropPixs[12], PropMasks[12]);
- GdkPixmap (XPMPropFinal, PropPixs[13], PropMasks[13]);
- end;
- procedure TGtkEditorWindow.PropertyIcon (Item:TCollectionItem; var Pixmap:PGdkPixMap; var mask:PGdkBitmap);
- var r : integer;
- begin
- r := ord((Item as TPropertyItem).propType);
- Pixmap := PropPixs[r];
- Mask := PropMasks[r];
- end;
- procedure TGtkEditorWindow.EnDisablePages (pt : TPropType);
- begin
- BDefinition.Visible := pt in [ptField,ptProperty,ptFunction,ptProcedure,ptSignal,
- ptHelperProc,ptHelperFunc,ptSignalType,ptDeclarations,ptTypeDecl,
- ptConstructor,ptDestructor];
- BParameter.visible := pt in [ptProperty,ptFunction,ptProcedure,
- ptHelperProc,ptHelperFunc,ptSignalType,ptConstructor,ptDestructor];
- BFunction.Visible := pt in [ptFunction,ptProcedure,ptHelperProc,ptHelperFunc,
- ptConstructor,ptDestructor];
- BRead.Visible := pt in [ptProperty];
- BWrite.Visible := pt in [ptProperty];
- BCode.visible := pt in [ptDeclarations,ptTypeDecl,ptInitialization,ptFinalization];
- end;
- procedure TGtkEditorWindow.RefreshProperty (Selected : TCollectionItem; NeedFocus:boolean);
- var r : byte;
- s : string;
- begin
- RefreshingProperty := True;
- try
- ciProperty := selected as TPropertyItem;
- if assigned (ciProperty) then
- with ciProperty do
- begin
- s := Code.Text;
- FProperty.Sensitive := true;
- r := ord (PropType);
- PType.SetHistory (r);
- EnDisablePages (PropType);
- // definition
- PName.Text := Name;
- PPascalType.Text := PascalType;
- PGtkName.Text := GtkName;
- PSection.SetHistory (Ord(Section));
- // read
- PRType.SetHistory (Ord(ReadFuncType));
- PRGtkName.Text := GtkName;
- PRCode.Text := s;
- PRConvert.Active := ReadConvert;
- // write
- PWType.SetHistory (Ord(WriteProcType));
- PWGtkName.Text := WriteGtkName;
- PWCode.Text := WriteCode.Text;
- PWConvert.Active := WriteConvert;
- // function
- POverride.active := ptOverride in ProcTypes;
- PVirtual.active := ptVirtual in ProcTypes;
- PDynamic.active := ptDynamic in ProcTypes;
- PAbstract.active := ptAbstract in ProcTypes;
- PCDecl.active := ptCDecl in ProcTypes;
- POverload.active := ptOverload in ProcTypes;
- PReintroduce.active := ptReintroduce in ProcTypes;
- PFCode.Text := s;
- // Code
- PCode.Text := s;
- // Parameters
- BrParams.ChangeCollection (Parameters);
- end
- else
- begin
- FProperty.Sensitive := false;
- PType.Clear;
- // definition
- PName.Clear;
- PPascalType.Clear;
- PGtkName.Clear;
- PSection.Clear;
- // read
- PRType.Clear;
- PRGtkName.Clear;
- PRCode.Clear;
- PRConvert.Active := false;
- // write
- PWType.Clear;
- PWGtkName.Clear;
- PWCode.Clear;
- PWConvert.Active := False;
- // function
- POverride.active := False;
- PVirtual.active := False;
- PDynamic.active := False;
- PAbstract.active := False;
- PCDecl.active := False;
- POverload.active := False;
- PReintroduce.active := False;
- PFCode.Clear;
- // Code
- PCode.Clear;
- // Parameters
- BrParams.ChangeCollection (nil);
- end;
- finally
- RefreshingProperty := false;
- end;
- if NeedFocus then
- with PName do
- begin
- Bladen.PageIndex := 0;
- SelectRegion (0, -1);
- GrabFocus;
- end;
- end;
- procedure TGtkEditorWindow.RefreshParam (Selected : TCollectionItem; NeedFocus:boolean);
- begin
- RefreshingParam := True;
- try
- ciParameter := Selected as TParameterItem;
- if assigned (ciParameter) then
- with ciParameter do
- begin
- FParam.Sensitive := true;
- ParamName.text := name;
- ParamPascalType.text := PascalType;
- self.ParamType.SetHistory (Ord(ParamType));
- ParamConvert.Active := Convert;
- end
- else
- begin
- FParam.Sensitive := false;
- ParamName.Clear;
- ParamPascalType.Clear;
- self.ParamType.Clear;
- ParamConvert.Active := False;
- end;
- if NeedFocus then
- with ParamName do
- begin
- selectRegion (0, -1);
- GrabFocus;
- end;
- finally
- RefreshingParam := False;
- end;
- end;
- procedure TGtkEditorWindow.ObjectDisplayChanged;
- begin
- with BrObjects do
- if (SelectedRow >= 0) and assigned(ciObject) then
- LObjects.Clist.CellText[SelectedRow,0] := ciObject.DisplayName;
- end;
- procedure TGtkEditorWindow.PropertyDisplayChanged;
- var r : integer;
- begin
- with BrProperties do
- if (SelectedRow >= 0) and assigned(ciProperty) then
- begin
- LProperties.CList.CellText[SelectedRow,1] := ciProperty.DisplayName;
- r := ord(ciProperty.PropType);
- LProperties.CList.SetPixMap (SelectedRow, 0, PropPixs[r], PropMasks[r]);
- end;
- end;
- procedure TGtkEditorWindow.ParamDisplayChanged;
- begin
- with BrParams do
- if (SelectedRow >= 0) and assigned(ciParameter) then
- LParams.CList.CellText[SelectedRow,0] := ciParameter.DisplayName;
- end;
- { entry saving procedures/signals }
- // Definition
- procedure TGtkEditorWindow.ChangedDUsesList (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingDefinition then Exit;
- if assigned (FDefs) then
- FDefs.UsesList := DUsesList.Text;
- end;
- procedure TGtkEditorWindow.ChangedDUnitName (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingDefinition then Exit;
- if assigned (FDefs) then
- FDefs.UnitName := DUnitName.Text;
- end;
- procedure TGtkEditorWindow.ChangedDGtkPrefix (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingDefinition then Exit;
- if assigned (FDefs) then
- FDefs.GtkPrefix := DGtkPrefix.Text;
- end;
- // Object
- procedure TGtkEditorWindow.ChangedOName (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingObject then Exit;
- if assigned(ciObject) then
- begin
- ciObject.Name := OName.Text;
- ObjectDisplayChanged;
- end;
- end;
- procedure TGtkEditorWindow.ChangedOInherit (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingObject then Exit;
- if assigned(ciObject) then
- ciObject.Inherit := OInherit.Text;
- end;
- procedure TGtkEditorWindow.ChangedOGtkName (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingObject then Exit;
- if assigned(ciObject) then
- ciObject.GtkName := OGtkName.Text;
- end;
- procedure TGtkEditorWindow.ChangedOGtkFuncName (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingObject then Exit;
- if assigned(ciObject) then
- ciObject.GtkFuncName := OGtkFuncName.Text;
- end;
- procedure TGtkEditorWindow.ChangedOCreateParams (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingObject then Exit;
- if assigned(ciObject) then
- ciObject.CreateParams := OCreateParams.Text;
- end;
- procedure TGtkEditorWindow.ChangedOCreateObject (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingObject then Exit;
- if assigned(ciObject) then
- ciObject.CreateObject := OCreateObject.active;
- end;
- procedure TGtkEditorWindow.ChangedOWithPointer (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingObject then Exit;
- if assigned(ciObject) then
- ciObject.WithPointer := OWithpointer.active;
- end;
- // Property
- procedure TGtkEditorWindow.ChangedPType (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- begin
- ciProperty.PropType := TPropType(Pointertoint(data));
- PropertyDisplayChanged;
- EnDisablePages (ciProperty.PropType);
- end;
- end;
- procedure TGtkEditorWindow.ChangedPName (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- begin
- ciProperty.Name := PName.Text;
- PropertyDisplayChanged;
- end;
- end;
- procedure TGtkEditorWindow.ChangedPPascalType (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- ciProperty.PascalType := PPascalType.Text;
- end;
- procedure TGtkEditorWindow.ChangedPGtkName (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- ciProperty.GtkName := (Sender as TFpgtkEntry).Text;
- end;
- procedure TGtkEditorWindow.ChangedPSection (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- begin
- ciProperty.Section := TInterfaceSection(Pointertoint(data));
- PropertyDisplayChanged;
- end;
- end;
- procedure TGtkEditorWindow.ChangedPCode (Sender:TFPgtkObject; data:pointer);
- var s : string;
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- s := (Sender as TFPgtkText).Text;
- ciProperty.Code.Text := s;
- end;
- // read
- procedure TGtkEditorWindow.ChangedPRType (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- ciProperty.ReadfuncType := TPropFuncType(Pointertoint(data));
- end;
- procedure TGtkEditorWindow.ChangedPRConvert (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- ciProperty.ReadConvert := PRConvert.Active;
- end;
- // write
- procedure TGtkEditorWindow.ChangedPWType (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- begin
- ciProperty.WriteProcType := TPropFuncType(Pointertoint(data));
- end;
- end;
- procedure TGtkEditorWindow.ChangedPWGtkName (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- ciProperty.WriteGtkName := PWGtkName.Text;
- end;
- procedure TGtkEditorWindow.ChangedPWCode (Sender:TFPgtkObject; data:pointer);
- var s : string;
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- begin
- s := PWCode.Text;
- ciProperty.WriteCode.Text := s;
- end;
- end;
- procedure TGtkEditorWindow.ChangedPWConvert (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- ciProperty.WriteConvert := PWConvert.active;
- end;
- // function
- procedure TGtkEditorWindow.ChangedPFuncType (Sender:TFPgtkObject; data:pointer);
- var pt : TProcType;
- begin
- if RefreshingProperty then Exit;
- if assigned(ciProperty) then
- with ciProperty do
- begin
- pt := TProcType(pointertoint(data));
- if (Sender as TFPgtkToggleButton).Active then
- ProcTypes := Proctypes + [pt]
- else
- ProcTypes := Proctypes - [pt];
- end;
- end;
- // parameter
- procedure TGtkEditorWindow.ChangedParamName (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingParam then Exit;
- if assigned (ciParameter) then
- begin
- ciParameter.Name := ParamName.Text;
- ParamDisplayChanged;
- end;
- end;
- procedure TGtkEditorWindow.ChangedParamPascalType (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingParam then Exit;
- if assigned (ciParameter) then
- ciParameter.PascalType := ParamPascalType.Text;
- end;
- procedure TGtkEditorWindow.ChangedParamType (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingParam then Exit;
- if assigned (ciParameter) then
- ciParameter.ParamType := TParamType (Pointertoint(data));
- end;
- procedure TGtkEditorWindow.ChangedParamConvert (Sender:TFPgtkObject; data:pointer);
- begin
- if RefreshingParam then Exit;
- if assigned (ciParameter) then
- ciParameter.Convert := ParamConvert.Active;
- end;
- { *** Menu procedures *** }
- procedure TGtkEditorWindow.BuildReopenList;
- var r : integer;
- mi : TFPgtkMenuItem;
- begin
- with FReopenList do
- begin
- while (count > FSettings.MRUCount) do
- Delete (0);
- with MenuFileReopen do
- begin
- if assigned(SubMenu) then
- SubMenu.Free;
- SubMenu := TFPgtkMenu.Create;
- with (submenu as TFPgtkMenu) do
- for r := FReopenList.count-1 downto 0 do
- begin
- mi := NewMenuItem (FReopenList[r], '', '', nil, @FileReopen, mi);
- Append (mi);
- end;
- end;
- end;
- end;
- procedure TGtkEditorWindow.NewFilename (NewName : string);
- var r : integer;
- begin
- if NewName = '' then
- Title := sEditorTitle
- else
- Title := sEditorTitle + ' - ' + NewName;
- FFilename := NewName;
- with FReopenList do
- begin
- r := IndexOf (NewName);
- if r >= 0 then
- Delete (r);
- Add (NewName);
- BuildReopenList;
- end;
- end;
- procedure TGtkEditorWindow.DataWrite (filename : string);
- var
- BinStream : TMemoryStream;
- StrStream : TFileStream;
- l : TStrings;
- begin
- StrStream := TFileStream.Create(filename, fmCreate);
- try
- case FSettings.FileFormat of
- ffComponentText :
- begin
- BinStream := TMemoryStream.Create;
- try
- BinStream.WriteComponent(FDefs);
- BinStream.Seek(0, soFromBeginning);
- ObjectBinaryToText(BinStream, StrStream);
- finally
- BinStream.Free
- end;
- end;
- ffComonentBin :
- StrStream.WriteComponent(FDefs);
- ffHomeText :
- begin
- l := TStringList.Create;
- try
- l.capacity := FDefs.definition.count * 5;
- FDefs.Save (l);
- l.SaveToStream (StrStream);
- finally
- l.Free;
- end;
- end;
- end;
- HasAFile := True;
- NewFilename (filename);
- finally
- StrStream.Free;
- end;
- end;
- procedure TGtkEditorWindow.DataRead (filename : string);
- var FStream : TFileStream;
- MStream : TMemoryStream;
- s : string[6];
- l : TStrings;
- begin
- if fileExists (filename) then
- begin
- FStream := TFileStream.Create(filename, fmOpenRead);
- try
- FStream.Readbuffer (s[1],6);
- s[0] := #6;
- FStream.Seek (0, soFromBeginning);
- if not assigned (FDefs) then
- FDefs := TObjectDefs.Create (nil);
- if s = 'object' then
- begin
- MStream := TMemoryStream.Create;
- try
- ObjectTextToBinary(FStream, MStream);
- MStream.Seek(0, soFromBeginning);
- MStream.ReadComponent(FDefs);
- finally
- MStream.Free;
- end;
- end
- else if s = 'defini' then
- begin
- l := TStringList.Create;
- try
- l.LoadFromStream (FStream);
- FDefs.Load (l);
- finally
- l.Free;
- end;
- end
- else
- FStream.ReadComponent (FDefs);
- finally
- FStream.Free;
- end;
- HasAFile := True;
- newFileName (filename);
- end
- else
- ShowMessage ('Error', 'Can''t find file "'+filename+'"');
- end;
- procedure TGtkEditorWindow.Generate;
- var TheFile : TStringList;
- Prog : TProgressWindow;
- begin
- TheFile := TStringList.Create;
- try
- TheFile.beginUpdate;
- if FSettings.ShowProgress then
- begin
- Prog := TProgressWindow.Create;
- try
- Prog.Show;
- FDefs.Write (TheFile, @(Prog.StepIt), @(Prog.SetMax));
- Prog.Hide;
- finally
- Prog.Free;
- end;
- end
- else
- FDefs.Write (TheFile, nil, nil);
- TheFile.EndUpdate;
- Thefile.SaveToFile (FDefs.UnitName+'.'+FSettings.Extention);
- finally
- TheFile.Free;
- end;
- end;
- { Menu signals }
- procedure TGtkEditorWindow.FileNew (Sender : TFPgtkObject; data : pointer);
- begin
- FDefs.Free;
- FDefs := TObjectDefs.Create (nil);
- FFileName := '';
- RefreshDefinition;
- end;
- procedure TGtkEditorWindow.DialogSetFilename (Sender:TFPgtkWindow;
- aDialogResult:pointer; Action:integer; initiator:TFPgtkObject);
- begin
- if Action = drOk then
- FFilename := (Sender as TFPgtkFileSelection).Filename;
- end;
- procedure TGtkEditorWindow.FileOpen (Sender : TFPgtkObject; data : pointer);
- var fs : TFPgtkFileSelection;
- begin
- fs := TFPgtkFileSelection.Create (gtk_window_dialog);
- with fs do
- begin
- Title := 'Select file to open';
- OKButton.ConnectClicked (@(fs.CloseWithResult), inttopointer(drOk));
- CancelButton.ConnectClicked (@(fs.CloseWindow), nil);
- Filename := FFilename;
- if execute (nil, nil, @DialogSetFilename) = drOk then
- begin
- DataRead (FFilename);
- RefreshDefinition;
- end;
- end;
- end;
- procedure TGtkEditorWindow.FileReopen (Sender : TFPgtkObject; data : pointer);
- begin
- with (Sender as TFPgtkMenuItem) do
- begin
- DataRead (Text);
- RefreshDefinition;
- end;
- end;
- procedure TGtkEditorWindow.ToolbarReopen (Sender : TFpgtkObject; data : pointer);
- begin
- (MenuFileReopen.submenu as TFPgtkMenu).Popup (0);
- end;
- procedure TGtkEditorWindow.FileSave (Sender : TFPgtkObject; data : pointer);
- begin
- if FFilename = '' then
- FileSaveAs (Sender, data)
- else
- DataWrite (FFilename);
- end;
- procedure TGtkEditorWindow.FileSaveAs (Sender : TFPgtkObject; data : pointer);
- var fs : TFPgtkFileSelection;
- begin
- fs := TFPgtkFileSelection.Create (gtk_window_dialog);
- with fs do
- begin
- Title := 'Give filename to save';
- OKButton.ConnectClicked (@(fs.CloseWithResult), inttopointer(drOk));
- CancelButton.ConnectClicked (@(fs.CloseWindow), nil);
- Filename := FFilename;
- if execute (nil, nil, @DialogSetFilename) = drOk then
- DataWrite (FFilename);
- end;
- end;
- procedure TGtkEditorWindow.FileExit (Sender : TFPgtkObject; data : pointer);
- begin
- If FSettings.SaveOnClose then
- FileSave (Sender, data);
- Close;
- end;
- procedure TGtkEditorWindow.ToolsGenerate (Sender : TFPgtkObject; data : pointer);
- begin
- Generate;
- end;
- procedure TGtkEditorWindow.ToolsOptions (Sender : TFPgtkObject; data : pointer);
- begin
- with TSettingsDialog.Create do
- Execute (nil, @FSettings, nil);
- end;
- procedure TGtkEditorWindow.HelpInfo (Sender : TFPgtkObject; data : pointer);
- begin
- ShowMessage (sInfoTitle, sInfoMessage);
- end;
- procedure TGtkEditorWindow.HelpAbout (Sender : TFPgtkObject; data : pointer);
- var d : TFPgtkDialog;
- b : TFPgtkButton;
- box : TFPgtkBox;
- AG : integer;
- begin
- d := TFPgtkDialog.Create;
- with d do
- begin
- title := sAboutTitle;
- box := TFPgtkVBox.Create;
- with Box do
- begin
- border := 15;
- PackStart (TFPgtkLabel.Create (sAbout1));
- PackStart (TFPgtkLabel.Create (sAbout2));
- PackStart (TFPgtkHSeparator.Create, false, false, 8);
- PackStart (TFPgtkLabel.Create (sAboutVersion));
- PackStart (TFPgtkLabel.Create (sAboutDesigner));
- end;
- vbox.Packstart (box, true, false, 0);
- with ActionArea do
- begin
- b := TFPgtkButton.CreateWithLabel (sOk);
- b.ConnectClicked (@(d.CloseWindow), nil);
- Packstart (b);
- end;
- AG := AccelGroupNew;
- AcceleratorAdd (AG, b, sgClicked, gdk_Return, 0, TGTKAccelFlags(0));
- AcceleratorAdd (AG, b, sgClicked, gdk_Cancel, 0, TGTKAccelFlags(0));
- Execute (nil, nil, nil);
- end;
- end;
- const
- secSettings = 'Settings';
- keySaveOnExit = 'SaveOnExit';
- keyFileFormat = 'TextFormat';
- keyMRUCount = 'MRUCount';
- keyExtention = 'Extention';
- keyProgressWindow = 'ShowProgress';
- secMRU = 'Last open files';
- keyFile = 'File';
- keyCount = 'Count';
- procedure TGtkEditorWindow.ReadSettings;
- var c, r : integer;
- s : string;
- begin
- with FSettings do
- with TMemInifile.Create(ChangeFileExt(paramstr(0), '.ini')) do
- try
- saveonclose := readbool (SecSettings, keySaveOnExit, true);
- Fileformat := TFileFormat(readinteger (secSettings, keyFileFormat, 2));
- Extention := readstring (secSettings, keyExtention, '.pp');
- MRUCount := readinteger (secSettings, keyMRUCount, 5);
- ShowProgress := readbool (SecSettings, keyProgressWindow, true);
- FReopenList.capacity := MRUCount;
- c := ReadInteger (secMRU, keyCount, 0);
- for r := 0 to c-1 do
- begin
- s := readstring(secMRU, keyFile+inttostr(r), '');
- if s <> '' then
- FReopenlist.Add (s);
- end;
- BuildReopenList;
- finally
- free;
- end;
- end;
- procedure TGtkEditorWindow.WriteSettings (Sender : TFPgtkObject; data : pointer);
- var r : integer;
- begin
- with PSettingsRec(data)^, TMemInifile.Create (ChangeFileExt(paramstr(0), '.ini')) do
- try
- writebool (SecSettings, keySaveOnExit, saveonclose);
- writeinteger (secSettings, keyFileFormat, Ord(FileFormat));
- writestring (secSettings, keyExtention, Extention);
- writeinteger (secSettings, keyMRUCount, MRUCount);
- writebool (SecSettings, keyProgressWindow, ShowProgress);
- writeinteger (secMRU, keyCount, FReopenlist.count);
- UpdateFile;
- for r := 0 to FReopenList.count-1 do
- writestring (secMRU, keyFile+inttostr(r), FReopenList[r]);
- finally
- free;
- end;
- end;
- end.
|