123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514 |
- MODULE DTPEditor; (** AUTHOR "PL"; PURPOSE "Simple DTP Editor"; *)
- IMPORT
- KernelLog, Modules, Commands, Files, WMRestorable, XML,
- WMStandardComponents, WMGraphics, WMComponents, WMRectangles, WMMessages, WMDialogs,
- WMEditors, Strings, Texts,
- WMWindowManager, WMPopups, Raster, XMLObjects, XMLParser, XMLScanner,
- DTPData, DTPView, DTPUtilities;
- CONST
- WINDOWWIDTH = 850;
- WINDOWHEIGHT = 700;
- (*
- SCREENWIDTH = 1280;
- SCREENHEIGHT = 1024;
- RULERSIZE = 20;
- HIGHLIGHT = 0FF8800FFH;
- ACTIVEFRAMECOLOR = 00000FFFFH;
- FRAMECOLOR = 00088FFFFH;
- BORDERCOLOR = 0FF00FFFFH;
- GUIDECOLOR = 000FFFFFFH;
- GRIDCOLOR = 0BABABAFFH;
- SUBGRIDCOLOR = 0DDDDDDFFH;
- ACTIVEBUTTONCOLOR = 088CCFF80H;
- *)
- TYPE
- pluginButtons = POINTER TO ARRAY OF WMStandardComponents.Button;
- KillerMsg = OBJECT
- END KillerMsg;
- Window* = OBJECT (WMComponents.FormWindow)
- VAR
- vc : WMComponents.VisualComponent;
- vScrollbar- : WMStandardComponents.Scrollbar;
- hScrollbar- : WMStandardComponents.Scrollbar;
- drawPanel* : DTPView.DrawPanel;
- styleEditor : DTPUtilities.StyleEditor;
- topToolbar, sideToolbar, workspace, pluginPanel : WMStandardComponents.Panel;
- masterLabel : WMStandardComponents.Label;
- filenameEdit, pageNumber, masterNumber : WMEditors.Editor;
- fileMenu, objectMenu, pageMenu, miscMenu : WMStandardComponents.Button;
- select, frame, cbutton : WMStandardComponents.Button;
- modePreview, modeMaster : WMStandardComponents.Button;
- popup : WMPopups.Popup;
- nDialog : NewDialog;
- nDiagOpen : BOOLEAN;
- scrollbar: BOOLEAN;
- currentDocument : DTPData.Document;
- cpage : DTPData.PageObject;
- cframe : DTPData.FrameObject;
- cguide : DTPData.GuideObject;
- plugName : ARRAY 32 OF CHAR;
- previewON, masterON, gridON : BOOLEAN;
- (* Plugin Buttons *)
- pbuttons : pluginButtons;
- numberOfPlugs : LONGINT;
- fileFormat : LONGINT;
- modified : BOOLEAN;
- fullScreen-: BOOLEAN;
- currentWidth, currentHeight: LONGINT;
- XMLdocLayout, XMLdocStyle, XMLdocContent: XML.Document;
- PROCEDURE CreatePluginButton(CONST pluginName: ARRAY OF CHAR): WMStandardComponents.Button;
- VAR button: WMStandardComponents.Button;
- BEGIN
- NEW(button); button.caption.SetAOC(pluginName); button.alignment.Set(WMComponents.AlignTop);
- button.onClick.Add(SetPluginHandler);
- (* button.clDefault.Set(01010C080H); *)
- button.isToggle.Set(TRUE);
- RETURN button;
- END CreatePluginButton;
- PROCEDURE LoadPlugins;
- VAR plugName : ARRAY 16 OF CHAR;
- plugList : PluginList;
- plugListEntry : PluginListEntry;
- i : LONGINT;
- (* button: WMStandardComponents.Button; *)
- BEGIN
- plugList := plugRegistry.GetPluginList();
- numberOfPlugs := plugRegistry.GetNumberOfPlugins();
- NEW(pbuttons, numberOfPlugs);
- KernelLog.String("DTPEditor Registered Plugins: "); KernelLog.Int(plugRegistry.GetNumberOfPlugins(), 0); KernelLog.Ln;
- plugListEntry := plugList.first; i := 0;
- (* Loop over plugs *)
- WHILE plugListEntry # NIL DO
- COPY(plugListEntry.pname, plugName);
- KernelLog.String("Initializing "); KernelLog.String(plugName); KernelLog.Ln;
- pbuttons[i] := CreatePluginButton(plugName);
- plugListEntry := plugListEntry.next; INC(i);
- END;
- (*
- plugName := "Rectangle";
- NEW(button); button.caption.SetAOC(plugName); button.alignment.Set(WMComponents.AlignTop);
- button.onClick.Add(SetPluginHandler);
- pbuttons[0] := button;
- plugName := "Image";
- NEW(button); button.caption.SetAOC(plugName); button.alignment.Set(WMComponents.AlignTop);
- button.onClick.Add(SetPluginHandler);
- pbuttons[1] := button;
- *)
- END LoadPlugins;
- PROCEDURE AddPlugins(): WMStandardComponents.Panel;
- VAR panel : WMStandardComponents.Panel;
- button: WMStandardComponents.Button;
- i : LONGINT;
- BEGIN
- NEW(panel); panel.alignment.Set(WMComponents.AlignTop); panel.bounds.SetHeight(30*numberOfPlugs);
- FOR i := 0 TO numberOfPlugs-1 DO
- button := pbuttons[i];
- panel.AddContent(button);
- END;
- RETURN panel;
- END AddPlugins;
- PROCEDURE CreateFormWindow() : WMComponents.VisualComponent;
- VAR
- panel, cpan : WMStandardComponents.Panel;
- button : WMStandardComponents.Button;
- label : WMStandardComponents.Label;
- manager : WMWindowManager.WindowManager;
- windowStyle : WMWindowManager.WindowStyle;
- panelColor : WMGraphics.Color;
- BEGIN
- manager := WMWindowManager.GetDefaultManager();
- windowStyle := manager.GetStyle();
- panelColor := windowStyle.bgColor;
- NEW(panel); panel.bounds.SetExtents(WINDOWWIDTH,WINDOWHEIGHT);
- panel.fillColor.Set(0FFFFFFFFH);
- panel.takesFocus.Set(TRUE);
- NEW(topToolbar); topToolbar.bounds.SetHeight(20);
- topToolbar.alignment.Set(WMComponents.AlignTop); topToolbar.fillColor.Set(panelColor);
- panel.AddContent(topToolbar);
- NEW(filenameEdit);
- filenameEdit.alignment.Set(WMComponents.AlignLeft);
- filenameEdit.multiLine.Set(FALSE); filenameEdit.bounds.SetWidth(200);
- topToolbar.AddContent(filenameEdit); filenameEdit.fillColor.Set(0FFFFFFFFH);
- filenameEdit.tv.textAlignV.Set(WMGraphics.AlignCenter);
- filenameEdit.tv.showBorder.Set(TRUE);
- filenameEdit.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
- filenameEdit.onEnter.Add(LoadHandler);
- NEW(fileMenu); fileMenu.caption.SetAOC("Document"); fileMenu.alignment.Set(WMComponents.AlignLeft);
- fileMenu.SetExtPointerDownHandler(FileMenuHandler);fileMenu.bounds.SetWidth(80);
- topToolbar.AddContent(fileMenu);
- NEW(pageMenu); pageMenu.caption.SetAOC("Page"); pageMenu.alignment.Set(WMComponents.AlignLeft);
- pageMenu.SetExtPointerDownHandler(PageMenuHandler);
- topToolbar.AddContent(pageMenu);
- NEW(objectMenu); objectMenu.caption.SetAOC("Object"); objectMenu.alignment.Set(WMComponents.AlignLeft);
- objectMenu.SetExtPointerDownHandler(ObjectMenuHandler);
- topToolbar.AddContent(objectMenu);
- NEW(miscMenu); miscMenu.caption.SetAOC("Misc"); miscMenu.alignment.Set(WMComponents.AlignLeft);
- miscMenu.SetExtPointerDownHandler(MiscMenuHandler);
- topToolbar.AddContent(miscMenu);
- NEW(label); label.bounds.SetWidth(100); label.alignment.Set(WMComponents.AlignLeft);
- label.SetCaption(" "); label.fillColor.Set(panelColor);
- topToolbar.AddContent(label);
- (* (* linked masterpage *)
- NEW(masterLabel); masterLabel.bounds.SetWidth(100); masterLabel.alignment.Set(WMComponents.AlignLeft);
- masterLabel.SetCaption(" Linked Master:"); masterLabel.fillColor.Set(panelColor);
- topToolbar.AddContent(masterLabel);
- NEW(masterNumber);
- masterNumber.alignment.Set(WMComponents.AlignLeft);
- masterNumber.multiLine.Set(FALSE); masterNumber.bounds.SetWidth(150);
- masterNumber.fillColor.Set(0FFFFFFFFH);
- masterNumber.tv.textAlignV.Set(WMGraphics.AlignCenter);
- masterNumber.tv.showBorder.Set(TRUE);
- masterNumber.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
- masterNumber.onEnter.Add(SetMasterHandler);
- masterNumber.SetAsString("none");
- topToolbar.AddContent(masterNumber);
- *)
- (* workspace *)
- NEW(workspace);
- workspace.alignment.Set(WMComponents.AlignClient);
- panel.AddContent(workspace);
- NEW(sideToolbar); sideToolbar.bounds.SetWidth(100);
- sideToolbar.alignment.Set(WMComponents.AlignLeft); sideToolbar.fillColor.Set(panelColor);
- workspace.AddContent(sideToolbar);
- NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
- label.SetCaption(" TOOLS"); label.fillColor.Set(panelColor);
- sideToolbar.AddContent(label);
- NEW(select); select.caption.SetAOC("Select"); select.alignment.Set(WMComponents.AlignTop);
- select.onClick.Add(SelectHandler);
- select.isToggle.Set(TRUE); select.SetPressed(TRUE);
- sideToolbar.AddContent(select);
- cbutton := select;
- (* cbutton.clDefault.Set(ACTIVEBUTTONCOLOR); *)
- (* cbutton.clDefault.Set(01010C080H); *)
- NEW(frame); frame.caption.SetAOC("Frame"); frame.alignment.Set(WMComponents.AlignTop);
- frame.onClick.Add(SetPluginHandler); (* frame.clDefault.Set(01010C080H); *)
- frame.isToggle.Set(TRUE);
- sideToolbar.AddContent(frame);
- (* ADD PLUGINS here *)
- pluginPanel := AddPlugins();
- sideToolbar.AddContent(pluginPanel);
- NEW(button); button.caption.SetAOC("## DEBUG ##"); button.alignment.Set(WMComponents.AlignTop);
- button.onClick.Add(TestHandler); button.clDefault.Set(000FF0080H);
- (* sideToolbar.AddContent(button); *)
- NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
- label.SetCaption(" VIEW"); label.fillColor.Set(panelColor);
- sideToolbar.AddContent(label);
- NEW(cpan); (* cpan.fillColor.Set(0FF0000FFH); *) cpan.bounds.SetWidth(100); cpan.bounds.SetHeight(40);
- cpan.alignment.Set(WMComponents.AlignTop);
- sideToolbar.AddContent(cpan);
- NEW(modeMaster); modeMaster.caption.SetAOC(" MasterPage"); modeMaster.alignment.Set(WMComponents.AlignTop);
- modeMaster.onClick.Add(MasterHandler);
- cpan.AddContent(modeMaster);
- NEW(modePreview); modePreview.caption.SetAOC(" PreviewMode"); modePreview.alignment.Set(WMComponents.AlignTop);
- modePreview.onClick.Add(PreviewHandler);
- cpan.AddContent(modePreview);
- (* linked masterpage *)
- NEW(masterLabel); masterLabel.bounds.SetHeight(16); masterLabel.alignment.Set(WMComponents.AlignTop);
- masterLabel.SetCaption(" Linked Master:"); masterLabel.fillColor.Set(panelColor);
- masterLabel.SetFont(WMGraphics.GetFont("Oberon", 10, {}));
- sideToolbar.AddContent(masterLabel);
- NEW(masterNumber);
- masterNumber.alignment.Set(WMComponents.AlignTop);
- masterNumber.multiLine.Set(FALSE); masterNumber.bounds.SetHeight(20);
- masterNumber.fillColor.Set(0FFFFFFFFH);
- masterNumber.tv.textAlignV.Set(WMGraphics.AlignCenter);
- masterNumber.tv.showBorder.Set(TRUE);
- masterNumber.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
- masterNumber.onEnter.Add(SetMasterHandler);
- masterNumber.SetAsString("none");
- sideToolbar.AddContent(masterNumber);
- NEW(label); label.bounds.SetHeight(16); label.alignment.Set(WMComponents.AlignTop);
- label.SetFont(WMGraphics.GetFont("Oberon", 10, {}));
- label.SetCaption(" Page / Zoom:"); label.fillColor.Set(panelColor);
- sideToolbar.AddContent(label);
- (* |< << page >> >| *)
- NEW(cpan); (* cpan.fillColor.Set(0000000FFH); *) cpan.bounds.SetWidth(100); cpan.bounds.SetHeight(20);
- cpan.alignment.Set(WMComponents.AlignTop);
- sideToolbar.AddContent(cpan);
- NEW(button); button.caption.SetAOC("|<"); button.alignment.Set(WMComponents.AlignLeft);
- button.onClick.Add(FirstPageHandler); button.bounds.SetWidth(18);
- cpan.AddContent(button);
- NEW(button); button.caption.SetAOC("<<"); button.alignment.Set(WMComponents.AlignLeft);
- button.onClick.Add(PrevPageHandler); button.bounds.SetWidth(18);
- cpan.AddContent(button);
- NEW(pageNumber);
- pageNumber.alignment.Set(WMComponents.AlignLeft);
- pageNumber.multiLine.Set(FALSE); pageNumber.bounds.SetWidth(28);
- cpan.AddContent(pageNumber); pageNumber.fillColor.Set(0FFFFFFFFH);
- pageNumber.tv.textAlignV.Set(WMGraphics.AlignCenter);
- pageNumber.tv.showBorder.Set(TRUE);
- pageNumber.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
- pageNumber.onEnter.Add(GoToPageHandler);
- pageNumber.SetAsString("0");
- NEW(button); button.caption.SetAOC(">>"); button.alignment.Set(WMComponents.AlignLeft);
- button.onClick.Add(NextPageHandler); button.bounds.SetWidth(18);
- cpan.AddContent(button);
- NEW(button); button.caption.SetAOC(">|"); button.alignment.Set(WMComponents.AlignLeft);
- button.onClick.Add(LastPageHandler); button.bounds.SetWidth(18);
- cpan.AddContent(button);
- NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
- label.SetCaption(" Zoom:"); label.fillColor.Set(panelColor);
- (* sideToolbar.AddContent(label); *)
- NEW(cpan); (* cpan.fillColor.Set(0000000FFH); *) cpan.bounds.SetHeight(20);
- cpan.alignment.Set(WMComponents.AlignTop);
- sideToolbar.AddContent(cpan);
- NEW(button); button.caption.SetAOC("-"); button.alignment.Set(WMComponents.AlignLeft);
- button.onClick.Add(ZoomUserHandler); button.bounds.SetWidth(50);
- cpan.AddContent(button);
- NEW(button); button.caption.SetAOC("+"); button.alignment.Set(WMComponents.AlignLeft);
- button.onClick.Add(ZoomUserHandler); button.bounds.SetWidth(50);
- cpan.AddContent(button);
- (* DrawPanel *)
- NEW(vScrollbar); vScrollbar.alignment.Set(WMComponents.AlignRight);
- workspace.AddContent(vScrollbar);
- NEW(hScrollbar); hScrollbar.alignment.Set(WMComponents.AlignBottom);
- hScrollbar.vertical.Set(FALSE);
- workspace.AddContent(hScrollbar);
- NEW(drawPanel); drawPanel.alignment.Set(WMComponents.AlignClient);
- (* Settings *)
- drawPanel.newPluginObject := CreateContent;
- drawPanel.ownerWindowSetFocus := SetActive;
- drawPanel.ownerWindowUpdatePageNumber := UpdatePageNumber;
- drawPanel.ownerWindowExitFullScreen := EscFullScreen;
- drawPanel.ShowGrid(gridON);
- drawPanel.SetScrollbars(hScrollbar, vScrollbar);
- workspace.AddContent(drawPanel);
- RETURN panel
- END CreateFormWindow;
- PROCEDURE &New*(c : WMRestorable.Context);
- VAR
- (* vc : WMComponents.VisualComponent;
- s : Strings.String; *)
- BEGIN
- IncCount;
- fileFormat := 0;
- previewON := FALSE; masterON := FALSE; gridON := TRUE;
- manager := WMWindowManager.GetDefaultManager();
- LoadPlugins;
- vc := CreateFormWindow();
- Init(vc.bounds.GetWidth(), vc.bounds.GetHeight(),FALSE);
- SetContent(vc);
- modified := FALSE;
- currentDocument := NIL;
- plugName := "none";
- IF c # NIL THEN
- (* restore the desktop *)
- WMRestorable.AddByContext(SELF, c);
- IF c.appData # NIL THEN
- (* xml := c.appData(XML.Element);
- s := xml.GetAttributeValue("fileFormat"); IF s # NIL THEN Strings.StrToInt(s^, fileFormat) END;
- s := xml.GetAttributeValue("firstLine");IF s # NIL THEN Strings.StrToInt(s^, fl) END;
- s := xml.GetAttributeValue("cursorPos");IF s # NIL THEN Strings.StrToInt(s^, cp) END;
- s := xml.GetAttributeValue("file");
- IF s # NIL THEN Load(s^, fileFormat) END;
- editor.tv.firstLine.Set(fl);
- editor.tv.cursor.SetPosition(cp) *)
- END
- ELSE WMWindowManager.DefaultAddWindow(SELF)
- END;
- SetTitle(Strings.NewString("DTPEditor"));
- (* NEW(props, SELF); props.Show; propertyOpen := TRUE; *)
- nDiagOpen := FALSE;
- scrollbar := TRUE;
- fullScreen := FALSE;
- END New;
- PROCEDURE CheckScrollbars*;
- BEGIN
- IF scrollbar THEN
- vScrollbar.visible.Set(TRUE); hScrollbar.visible.Set(TRUE)
- ELSE
- vScrollbar.visible.Set(FALSE); hScrollbar.visible.Set(FALSE)
- END
- END CheckScrollbars;
- PROCEDURE SetActive*;
- BEGIN
- manager:= WMWindowManager.GetDefaultManager();
- manager.SetFocus(SELF);
- drawPanel.SetFocus();
- END SetActive;
- PROCEDURE SetDocument(newdocument : DTPData.Document);
- BEGIN
- currentDocument := newdocument;
- END SetDocument;
- (*
- PROCEDURE GetDocument(): DTPData.Document;
- BEGIN
- RETURN currentDocument;
- END GetDocument;
- *)
- PROCEDURE SelectHandler(sender, data : ANY);
- VAR i : LONGINT;
- BEGIN
- drawPanel.selectionON := TRUE;
- (* cbutton.clDefault.Set(01010C080H); *) (* restore old Color *)
- (* reset toggles *)
- frame.SetPressed(FALSE);
- FOR i := 0 TO numberOfPlugs-1 DO
- pbuttons[i].SetPressed(FALSE);
- END;
- cbutton.Invalidate;
- cbutton := sender(WMStandardComponents.Button);
- (* cbutton.clDefault.Set(ACTIVEBUTTONCOLOR); *)
- cbutton.Invalidate;
- END SelectHandler;
- PROCEDURE SetPluginHandler(sender, data : ANY);
- VAR name, msg: ARRAY 32 OF CHAR;
- string: Strings.String;
- i : LONGINT;
- (* res : WORD; *)
- BEGIN
- drawPanel.selectionON := FALSE;
- msg := "";
- string := sender(WMStandardComponents.Button).caption.Get();
- drawPanel.activeTool := string;
- COPY(string^, name);
- COPY(name, plugName);
- KernelLog.String("Active Plugin: ");KernelLog.String(name); KernelLog.Ln;
- (* reset toggles *)
- select.SetPressed(FALSE);
- IF sender(WMStandardComponents.Button) # frame THEN frame.SetPressed(FALSE) END;
- FOR i := 0 TO numberOfPlugs-1 DO
- IF sender(WMStandardComponents.Button) # pbuttons[i] THEN
- pbuttons[i].SetPressed(FALSE)
- END
- END;
- (* cbutton.clDefault.Set(01010C080H); *)(* restore old Color *)
- cbutton.Invalidate;
- cbutton := sender(WMStandardComponents.Button);
- (* cbutton.clDefault.Set(ACTIVEBUTTONCOLOR); *)
- cbutton.Invalidate;
- (* (* set the current Plugin *)
- IF name = "Frame" THEN
- (* Commands.Call("DTPFrame.Set", {}, res, msg); *)
- (* drawPanel.newPluginObject := CreateContent(); *)
- ELSIF name = "Rectangle" THEN
- ELSIF name = "Image" THEN
- (* Commands.Call("DTPImage.Set", {}, res, msg); *)
- ELSE
- END;
- *)
- END SetPluginHandler;
- PROCEDURE CreateContent*():DTPData.ContentObject;
- VAR content : DTPData.ContentObject;
- BEGIN
- IF plugName = "Frame" THEN
- KernelLog.String("Create Content Object: Empty Frame"); KernelLog.Ln;
- content := DTPData.NewObject();
- ELSE
- content := plugRegistry.InstantiatePlugin(plugName);
- content.redrawProc := drawPanel.InvalidateCurrentFrame;
- content.updatePropsPosition := drawPanel.SetContentPropsPosition;
- KernelLog.String("Create Content Object: "); KernelLog.String(plugName); KernelLog.Ln;
- END;
- content.OnCreate;
- (* IF plugName = "Frame" THEN
- KernelLog.String("..Creating Frame.."); KernelLog.Ln;
- content := DTPFrame.NewObject();
- ELSIF plugName = "Rectangle" THEN
- KernelLog.String("..Creating Rectangle.."); KernelLog.Ln;
- content := plugRegistry.InstantiatePlugin("Rectangle");
- ELSIF plugName = "Image" THEN
- KernelLog.String("..Creating Image.."); KernelLog.Ln;
- content := plugRegistry.InstantiatePlugin("Image");
- ELSE
- END;
- *)
- RETURN content;
- END CreateContent;
- PROCEDURE TestHandler(sender, data : ANY);
- VAR str : ARRAY 16 OF CHAR;
- i: LONGINT;
- BEGIN
- IF currentDocument = NIL THEN
- KernelLog.String("##DEBUG: No Document present");
- ELSE
- Strings.FloatToStr(currentDocument.GetPageWidth(), 0,9,0, str);
- KernelLog.String("##DEBUG: current PageWidth: "); KernelLog.String(str); KernelLog.Ln;
- Strings.FloatToStr(currentDocument.GetPageHeight(), 0,9,0, str);
- KernelLog.String("##DEBUG: current PageHeight: "); KernelLog.String(str); KernelLog.Ln;
- Strings.FloatToStr(drawPanel.GetZoomFactor(), 0,9,0, str);
- KernelLog.String("##DEBUG: current zoomFactor: "); KernelLog.String(str); KernelLog.Ln;
- i := 0; cpage := currentDocument.GetCurrentPage();
- IF cpage # NIL THEN
- cframe := cpage.GetFirstFrame();
- WHILE cframe # NIL DO
- cframe := cframe.next;
- INC(i);
- END;
- KernelLog.String("##DEBUG: Frames on current page: "); KernelLog.Int(i, 0); KernelLog.Ln;
- END;
- END;
- (* drawPanel.ready := TRUE;
- drawPanel.Invalidate;
- *)
- END TestHandler;
- PROCEDURE MasterHandler(sender, data: ANY);
- BEGIN
- IF masterON THEN
- masterON := FALSE;
- modeMaster.caption.SetAOC("MasterPage");
- masterNumber.fillColor.Set(0FFFFFFFFH); masterNumber.tv.defaultTextBgColor.Set(0FFFFFFFFH);
- masterLabel.caption.SetAOC(" Linked Master:");
- ELSE
- masterON := TRUE;
- modeMaster.caption.SetAOC("Document");
- masterNumber.fillColor.Set(0BBBBBBFFH); masterNumber.tv.defaultTextBgColor.Set(0BBBBBBFFH);
- masterLabel.caption.SetAOC(" Master Name:");
- END;
- drawPanel.SetMasterEditMode(masterON);
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- UpdatePageNumber;
- END MasterHandler;
- PROCEDURE PreviewHandler(sender, data: ANY);
- VAR
- BEGIN
- IF previewON THEN
- previewON := FALSE;
- modePreview.caption.SetAOC("PreviewMode");
- ELSE
- previewON := TRUE;
- modePreview.caption.SetAOC("EditMode");
- END;
- (* Remove Current Selection to avoid updating the Content Property Window *)
- IF ~masterON THEN
- cpage := currentDocument.GetCurrentPage();
- ELSE
- cpage := currentDocument.GetCurrentMasterPage();
- END;
- cpage.SetCurrentFrame(NIL);
- drawPanel.SetPreviewMode(previewON);
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- drawPanel.Invalidate;
- SetActive;
- END PreviewHandler;
- PROCEDURE FileMenuHandler(x, y : LONGINT; keys : SET; VAR handled : BOOLEAN);
- VAR rectangle: WMRectangles.Rectangle;
- BEGIN
- NEW(popup);
- popup.Add("New", NewHandler);
- popup.Add("Open", LoadHandler);
- popup.Add("Save", StoreHandler);
- popup.Add("Export Page", ExportHandler);
- handled := TRUE;
- rectangle := fileMenu.bounds.Get();
- popup.Popup(bounds.l + rectangle.l, bounds.t + rectangle.b);
- END FileMenuHandler;
- PROCEDURE ObjectMenuHandler(x, y: LONGINT; keys: SET; VAR handled: BOOLEAN);
- VAR rectangle: WMRectangles.Rectangle;
- BEGIN
- NEW(popup);
- popup.Add("Cut", ObjectCutHandler);
- popup.Add("Copy", ObjectCopyHandler);
- popup.Add("Paste", ObjectPasteHandler);
- popup.Add("Delete", ObjectDeleteHandler);
- popup.Add("Move Front", ObjectToFrontHandler);
- popup.Add("Front Step", ObjectFrontStepHandler);
- popup.Add("Back Step", ObjectBackStepHandler);
- popup.Add("Move Back", ObjectToBackHandler);
- popup.Add("Select Previous", ObjectPrevHandler);
- popup.Add("Select Next", ObjectNextHandler);
- handled := TRUE;
- rectangle := objectMenu.bounds.Get();
- popup.Popup(bounds.l + rectangle.l, bounds.t + rectangle.b);
- END ObjectMenuHandler;
- PROCEDURE PageMenuHandler(x, y: LONGINT; keys: SET; VAR handled: BOOLEAN);
- VAR rectangle: WMRectangles.Rectangle;
- BEGIN
- NEW(popup);
- popup.Add("Insert Before", AddBeforePageHandler);
- popup.Add("Insert After", AddAfterPageHandler);
- popup.Add("Delete", DeletePageHandler);
- handled := TRUE;
- rectangle := pageMenu.bounds.Get();
- popup.Popup(bounds.l + rectangle.l, bounds.t + rectangle.b);
- END PageMenuHandler;
- PROCEDURE MiscMenuHandler(x, y: LONGINT; keys: SET; VAR handled: BOOLEAN);
- VAR rectangle: WMRectangles.Rectangle;
- BEGIN
- NEW(popup);
- popup.Add("StyleEditor", MiscStyleEditorHandler);
- popup.Add("Snap To Grid", SnapHandler);
- popup.Add("Toggle Grid", GridHandler);
- popup.Add("Show Properties", PropsHandler);
- popup.Add("FullScreen", FullScreenHandler);
- popup.Add("Zoom Fit Doc", ZoomHandler);
- popup.Add("Zoom Fit Width", ZoomHandler);
- popup.Add("Zoom Fit Height", ZoomHandler);
- popup.Add("Zoom Fit Frame", ZoomHandler);
- popup.Add("Zoom Orig. Size", ZoomHandler);
- (* popup.Add("Reload Plugins", PlugHandler); *)
- handled := TRUE;
- rectangle := miscMenu.bounds.Get();
- popup.Popup(bounds.l + rectangle.l, bounds.t + rectangle.b);
- END MiscMenuHandler;
- PROCEDURE ZoomHandler(sender, data: ANY);
- VAR button: WMStandardComponents.Button;
- tempString: Strings.String;
- BEGIN
- popup.Close;
- IF sender IS WMStandardComponents.Button THEN
- button := sender(WMStandardComponents.Button);
- tempString := button.caption.Get();
- IF (tempString^ = "Zoom Fit Doc") THEN
- drawPanel.SetZoomMode(0);
- ELSIF (tempString^ = "Zoom Fit Width") THEN
- drawPanel.SetZoomMode(1);
- ELSIF (tempString^ = "Zoom Fit Height") THEN
- drawPanel.SetZoomMode(2);
- ELSIF (tempString^ = "Zoom Fit Frame") THEN
- drawPanel.SetZoomMode(3);
- ELSIF (tempString^ = "Zoom Orig. Size") THEN
- drawPanel.SetZoomMode(4);
- ELSE
- drawPanel.SetZoomMode(0);
- END;
- END;
- END ZoomHandler;
- PROCEDURE ZoomUserHandler(sender, data: ANY);
- VAR button : WMStandardComponents.Button;
- tempString: Strings.String;
- BEGIN
- IF sender IS WMStandardComponents.Button THEN
- button := sender(WMStandardComponents.Button);
- tempString := button.caption.Get();
- IF (tempString^ = "-") THEN
- drawPanel.ZoomDecrease;
- drawPanel.SetZoomMode(5);
- ELSIF (tempString^ = "+") THEN
- drawPanel.ZoomIncrease;
- drawPanel.SetZoomMode(5);
- ELSE
- END;
- END;
- END ZoomUserHandler;
- PROCEDURE GridHandler(sender, data: ANY);
- BEGIN
- IF gridON THEN
- gridON := FALSE;
- drawPanel.ShowGrid(gridON);
- ELSE
- gridON := TRUE;
- drawPanel.ShowGrid(gridON);
- END;
- popup.Close;
- drawPanel.Invalidate;
- END GridHandler;
- PROCEDURE SnapHandler(sender, data: ANY);
- BEGIN
- drawPanel.SetSnap(~drawPanel.GetSnap());
- popup.Close;
- END SnapHandler;
- PROCEDURE FullScreenHandler*(sender, data: ANY);
- VAR rect : WMRectangles.Rectangle;
- height, width : LONGINT;
- view : WMWindowManager.ViewPort;
- BEGIN
- popup.Close;
- view := WMWindowManager.GetDefaultView();
- IF ~fullScreen THEN
- (* drawPanel.SetZoomMode(0); *)
- rect := bounds; fullScreen := TRUE;
- currentWidth := GetWidth(); currentHeight := GetHeight();
- (* width := SCREENWIDTH+160; height := SCREENHEIGHT+85; *)
- width := ENTIER(view.range.r - view.range.l) + ((bounds.r - bounds.l) - (drawPanel.bounds.GetWidth())) + 45;
- height := ENTIER(view.range.b - view.range.t) + ((bounds.b - bounds.t) - (drawPanel.bounds.GetHeight()) + 45);
- manager := WMWindowManager.GetDefaultManager();
- manager.SetWindowPos(SELF, ENTIER(view.range.l) - ((bounds.r - bounds.l) - (drawPanel.bounds.GetWidth()))- 15,
- ENTIER(view.range.t) - ((bounds.b - bounds.t) - (drawPanel.bounds.GetHeight())) - 15);
- manager.SetWindowSize(SELF, width, height);
- Resized(width, height);
- ELSE
- fullScreen := FALSE;
- width := currentWidth; height := currentHeight;
- manager := WMWindowManager.GetDefaultManager();
- manager.SetWindowSize(SELF, width, height);
- manager.SetWindowPos(SELF, ENTIER(view.range.l), ENTIER(view.range.t));
- Resized(width, height);
- END;
- drawPanel.Resized;
- END FullScreenHandler;
- PROCEDURE EscFullScreen*;
- VAR height, width : LONGINT;
- BEGIN
- IF fullScreen THEN
- fullScreen := FALSE;
- width := currentWidth; height := currentHeight;
- manager := WMWindowManager.GetDefaultManager();
- manager.SetWindowSize(SELF, width, height);
- manager.SetWindowPos(SELF, bounds.l+135, bounds.t+70);
- Resized(width, height);
- END;
- END EscFullScreen;
- PROCEDURE LoadHandler(sender, data : ANY);
- VAR filename : ARRAY 256 OF CHAR;
- BEGIN
- filenameEdit.GetAsString(filename);
- Load(filename, fileFormat);
- IF popup # NIL THEN popup.Close; END;
- END LoadHandler;
- PROCEDURE LoadCharacterStyle(cstyle : DTPData.CharacterStyleObject);
- VAR style : Texts.CharacterStyle;
- BEGIN
- NEW(style);
- COPY(cstyle.name, style.name);
- COPY(cstyle.family, style.family);
- style.style := cstyle.style;
- style.size := DTPUtilities.FloatToFixp(cstyle.size);
- style.leading := DTPUtilities.FloatToFixp(cstyle.leading);
- style.baselineShift := DTPUtilities.FloatToFixp(cstyle.baselineShift);
- style.color := cstyle.color;
- style.bgColor := cstyle.bgColor;
- style.tracking := DTPUtilities.FloatToFixp(cstyle.tracking);
- (* style.kerning := cstyle.kerning; *)
- style.scaleHorizontal := DTPUtilities.FloatToFixp(cstyle.scaleHorizontal);
- style.scaleVertical := DTPUtilities.FloatToFixp(cstyle.scaleVertical);
- Texts.AddCharacterStyle(style);
- END LoadCharacterStyle;
- PROCEDURE LoadParagraphStyle(pstyle : DTPData.ParagraphStyleObject);
- VAR style : Texts.ParagraphStyle;
- cstyle : Texts.CharacterStyle;
- BEGIN
- NEW(style);
- COPY(pstyle.name, style.name);
- style.alignment := pstyle.alignment;
- style.firstIndent := DTPUtilities.FloatToFixp(pstyle.firstIndent);
- style.leftIndent := DTPUtilities.FloatToFixp(pstyle.leftIndent);
- style.rightIndent := DTPUtilities.FloatToFixp(pstyle.rightIndent);
- style.spaceBefore := DTPUtilities.FloatToFixp(pstyle.spaceBefore);
- style.spaceAfter := DTPUtilities.FloatToFixp(pstyle.spaceAfter);
- NEW(cstyle);
- COPY(pstyle.charStyle.name, cstyle.name);
- COPY(pstyle.charStyle.family, cstyle.family);
- cstyle.style := pstyle.charStyle.style;
- cstyle.size := DTPUtilities.FloatToFixp(pstyle.charStyle.size);
- cstyle.leading := DTPUtilities.FloatToFixp(pstyle.charStyle.leading);
- cstyle.baselineShift := DTPUtilities.FloatToFixp(pstyle.charStyle.baselineShift);
- cstyle.color := pstyle.charStyle.color;
- cstyle.bgColor := pstyle.charStyle.bgColor;
- cstyle.tracking := DTPUtilities.FloatToFixp(pstyle.charStyle.tracking);
- (* cstyle.kerning := pstyle.charStyle.kerning; *)
- cstyle.scaleHorizontal := DTPUtilities.FloatToFixp(pstyle.charStyle.scaleHorizontal);
- cstyle.scaleVertical := DTPUtilities.FloatToFixp(pstyle.charStyle.scaleVertical);
- style.charStyle := cstyle;
- Texts.AddParagraphStyle(style);
- END LoadParagraphStyle;
- PROCEDURE Load(CONST filename : ARRAY OF CHAR; format : LONGINT);
- VAR tempString : ARRAY 256 OF CHAR;
- parser : XMLParser.Parser;
- scanner : XMLScanner.Scanner;
- reader : Files.Reader;
- f : Files.File;
- BEGIN
- fileFormat := format;
- filenameEdit.SetAsString(filename);
- (* Load Style File *)
- COPY(filename, tempString);
- Strings.Append(tempString, ".Style.XML");
- f := Files.Old(tempString);
- IF f = NIL THEN RETURN END;
- NEW(reader, f, 0);
- NEW(scanner, reader);
- NEW(parser, scanner);
- XMLdocStyle := parser.Parse();
- (* Load Content File *)
- COPY(filename, tempString);
- Strings.Append(tempString, ".Content.XML");
- f := Files.Old(tempString);
- IF f = NIL THEN RETURN END;
- NEW(reader, f, 0);
- NEW(scanner, reader);
- NEW(parser, scanner);
- XMLdocContent := parser.Parse();
- (* Load Layout File *)
- COPY(filename, tempString);
- Strings.Append(tempString, ".Layout.XML");
- f := Files.Old(tempString);
- IF f = NIL THEN RETURN END;
- NEW(reader, f, 0);
- NEW(scanner, reader);
- NEW(parser, scanner);
- XMLdocLayout := parser.Parse();
- BuildDocFromXML;
- modified := FALSE;
- END Load;
- PROCEDURE BuildDocFromXML;
- VAR built : DTPData.Document;
- root: XML.Element;
- cont, pagecont: XMLObjects.Enumerator;
- contptr, ptr: ANY; str, name : Strings.String;
- pStyle: DTPData.ParagraphStyleObject;
- cStyle: DTPData.CharacterStyleObject;
- content : DTPData.ContentObject;
- page : DTPData.PageObject; mpage: DTPData.MasterPageObject;
- frame : DTPData.FrameObject;
- tempReal: LONGREAL; tempInt: LONGINT; res: WORD; tempBool: BOOLEAN;
- mt, mb, ml, mr: REAL;
- BEGIN
- NEW(built, 0, 0, 0, 0, 0, 0, FALSE);
- (* build styleArray *)
- root := XMLdocStyle.GetRoot();
- cont := root.GetContents(); cont.Reset();
- WHILE cont.HasMoreElements() DO
- ptr := cont.GetNext();
- IF ptr IS XML.Element THEN
- str := ptr(XML.Element).GetName();
- (* KernelLog.String(str^); KernelLog.Ln; *)
- IF (str # NIL) & (str^ = "character-style") THEN (* character styles *)
- NEW(cStyle);
- str := ptr(XML.Element).GetAttributeValue("name"); IF str # NIL THEN COPY(str^, cStyle.name) END;
- str := ptr(XML.Element).GetAttributeValue("font-family"); IF str # NIL THEN COPY(str^, cStyle.family) END;
- str := ptr(XML.Element).GetAttributeValue("font-style");
- IF str # NIL THEN
- IF (str^ = "0") THEN cStyle.style := {};
- ELSIF (str^ = "1") THEN cStyle.style := {0};
- ELSIF (str^ = "2") THEN cStyle.style := {1};
- ELSIF (str^ = "3") THEN cStyle.style := {0,1};
- ELSE cStyle.style := {};
- END;
- END;
- str := ptr(XML.Element).GetAttributeValue("font-size"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.size := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("leading"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.leading := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("baseline-shift"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.baselineShift := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("color"); IF str # NIL THEN Strings.HexStrToInt(str^, tempInt, res); cStyle.color := tempInt; END;
- str := ptr(XML.Element).GetAttributeValue("bgcolor"); IF str # NIL THEN Strings.HexStrToInt(str^, tempInt, res); cStyle.bgColor := tempInt; END;
- str := ptr(XML.Element).GetAttributeValue("tracking"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.tracking := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("kerning"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.kerning := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("h-scale"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.scaleHorizontal := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("v-scale"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.scaleVertical := SHORT(tempReal); END;
- built.AddStyle(cStyle);
- LoadCharacterStyle(cStyle); (* Load the Style into Texts *)
- ELSIF (str # NIL) & (str^ = "paragraph-style") THEN (* paragraph styles *)
- NEW(pStyle);
- str := ptr(XML.Element).GetAttributeValue("name"); IF str # NIL THEN COPY(str^, pStyle.name) END;
- str := ptr(XML.Element).GetAttributeValue("alignment"); IF str # NIL THEN Strings.StrToInt(str^, pStyle.alignment) END;
- str := ptr(XML.Element).GetAttributeValue("first-indent"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); pStyle.firstIndent := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("left-indent"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); pStyle.leftIndent := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("right-indent"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); pStyle.rightIndent := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("space-before"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); pStyle.spaceBefore := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("space-after"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); pStyle.spaceAfter := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("character-style");
- IF str # NIL THEN
- cStyle := built.GetCharacterStyleByName(str^);
- IF cStyle # NIL THEN pStyle.charStyle := cStyle; END;
- END;
- built.AddStyle(pStyle);
- LoadParagraphStyle(pStyle);
- END;
- END;
- END;
- (* build contentArray *)
- root := XMLdocContent.GetRoot();
- cont := root.GetContents(); cont.Reset();
- WHILE cont.HasMoreElements() DO
- ptr := cont.GetNext(); contptr := ptr;
- IF ptr IS XML.Element THEN
- str := ptr(XML.Element).GetName();
- (* KernelLog.String(str^); KernelLog.Ln; *)
- IF (str # NIL) & (str^ = "node") THEN (* contents *)
- name := ptr(XML.Element).GetAttributeValue("name");
- pagecont := ptr(XML.Element).GetContents(); pagecont.Reset();
- WHILE pagecont.HasMoreElements() DO
- ptr := pagecont.GetNext();
- IF ptr IS XML.Element THEN
- str := ptr(XML.Element).GetAttributeValue("name");
- IF (str # NIL) & (str^ = "type") THEN
- str := ptr(XML.Element).GetAttributeValue("value");
- IF str # NIL THEN (* instantiate plugin *)
- (* KernelLog.String(str^); *)
- IF str^ = "Frame" THEN
- content := DTPData.NewObject();
- ELSE
- content := plugRegistry.InstantiatePlugin(str^);
- END;
- IF content # NIL THEN
- content.contentName := name;
- content.ownerDoc := built;
- content.redrawProc := drawPanel.InvalidateCurrentFrame;
- content.updatePropsPosition := drawPanel.SetContentPropsPosition;
- content.Load(contptr(XML.Element));
- built.AddContent(content);
- ELSE
- KernelLog.String("DTPEditor Load ERROR: plugin not found - cannot load object"); KernelLog.Ln;
- content := DTPData.NewObject();
- content.contentName := name;
- content.ownerDoc := built;
- content.redrawProc := drawPanel.InvalidateCurrentFrame;
- content.updatePropsPosition := drawPanel.SetContentPropsPosition;
- built.AddContent(content);
- END;
- END;
- END;
- END;
- END;
- END;
- END;
- END;
- (* Fix all Links in ContentArray *)
- built.FixContents;
- (* build layout & wire styles/contents *)
- root := XMLdocLayout.GetRoot();
- IF root # NIL THEN (* load document attributes *)
- str := root.GetAttributeValue("page-width"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); built.SetPageWidth(SHORT(tempReal)) END;
- str := root.GetAttributeValue("page-height"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); built.SetPageHeight(SHORT(tempReal)) END;
- str := root.GetAttributeValue("margin-top"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mt := SHORT(tempReal) END;
- str := root.GetAttributeValue("margin-bottom"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mb := SHORT(tempReal) END;
- str := root.GetAttributeValue("margin-left"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); ml := SHORT(tempReal) END;
- str := root.GetAttributeValue("margin-right"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mr := SHORT(tempReal) END;
- built.SetMargins(mt, mb, ml, mr);
- str := root.GetAttributeValue("facing-pages"); IF str # NIL THEN Strings.StrToBool(str^, tempBool); built.SetFacingPages(tempBool) END;
- END;
- cont := root.GetContents(); cont.Reset();
- WHILE cont.HasMoreElements() DO
- ptr := cont.GetNext();
- IF ptr IS XML.Element THEN
- str := ptr(XML.Element).GetName();
- (* KernelLog.String(str^); KernelLog.Ln; *)
- IF (str # NIL) & (str^ = "masterpage") THEN (* masterpage *)
- str := ptr(XML.Element).GetAttributeValue("name");
- built.AddMasterPage(TRUE); page := built.GetLastMasterPage();
- IF str # NIL THEN page(DTPData.MasterPageObject).mpageName := str; END;
- pagecont := ptr(XML.Element).GetContents(); pagecont.Reset();
- WHILE pagecont.HasMoreElements() DO
- ptr := pagecont.GetNext();
- IF ptr IS XML.Element THEN
- str := ptr(XML.Element).GetName();
- (* KernelLog.String(str^); KernelLog.Ln; *)
- IF (str # NIL) & (str^ = "guide") THEN (* guide *)
- str := ptr(XML.Element).GetAttributeValue("type");
- IF (str # NIL) & (str^ = "horizontal") THEN tempBool := TRUE ELSE tempBool := FALSE; END;
- str := ptr(XML.Element).GetAttributeValue("position"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); page.AddGuide(SHORT(tempReal), tempBool) END;
- ELSIF (str # NIL) & (str^ = "frame") THEN (* frame *)
- str := ptr(XML.Element).GetAttributeValue("x"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mt := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("y"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mb := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("width"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); ml := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("height"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mr := SHORT(tempReal); END;
- page.AddFrame(mt, mb, ml, mr); frame := page.GetLastFrame();
- str := ptr(XML.Element).GetAttributeValue("name"); IF str # NIL THEN frame.SetName(str); END;
- str := ptr(XML.Element).GetAttributeValue("type"); IF str # NIL THEN frame.SetType(str); END;
- str := ptr(XML.Element).GetAttributeValue("textwrap"); IF (str # NIL) & (str^ = "1") THEN frame.SetWrap(TRUE); END;
- str := ptr(XML.Element).GetAttributeValue("twrap-top"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); mt := SHORT(tempReal); ELSE mt := 0 END;
- str := ptr(XML.Element).GetAttributeValue("twrap-bottom"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); mb := SHORT(tempReal); ELSE mb := 0 END;
- str := ptr(XML.Element).GetAttributeValue("twrap-left"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); ml := SHORT(tempReal); ELSE ml := 0 END;
- str := ptr(XML.Element).GetAttributeValue("twrap-right"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); mr := SHORT(tempReal); ELSE mr := 0 END;
- frame.SetWrapSize(mt, mb, ml, mr);
- str := ptr(XML.Element).GetAttributeValue("z-index"); IF str # NIL THEN Strings.StrToInt(str^, tempInt); END; (* not yet implemented *)
- str := ptr(XML.Element).GetAttributeValue("frame-content");
- IF str # NIL THEN
- content := built.GetContentByName(str^);
- IF content # NIL THEN
- frame.SetContent(content);
- END;
- END;
- END;
- END;
- END;
- page.currentFrame := NIL;
- ELSIF (str # NIL) & (str^ = "page") THEN (* page *)
- str := ptr(XML.Element).GetAttributeValue("masterpage");
- built.AddPage(TRUE); page := built.GetLastPage();
- IF str # NIL THEN
- mpage := built.GetMasterByName(str);
- page.masterpage := mpage;
- END;
- pagecont := ptr(XML.Element).GetContents(); pagecont.Reset();
- WHILE pagecont.HasMoreElements() DO
- ptr := pagecont.GetNext();
- IF ptr IS XML.Element THEN
- str := ptr(XML.Element).GetName();
- (* KernelLog.String(str^); KernelLog.Ln; *)
- IF (str # NIL) & (str^ = "guide") THEN (* guide *)
- str := ptr(XML.Element).GetAttributeValue("type");
- IF (str # NIL) & (str^ = "horizontal") THEN tempBool := TRUE ELSE tempBool := FALSE; END;
- str := ptr(XML.Element).GetAttributeValue("position"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); page.AddGuide(SHORT(tempReal), tempBool) END;
- ELSIF (str # NIL) & (str^ = "frame") THEN (* frame *)
- str := ptr(XML.Element).GetAttributeValue("x"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mt := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("y"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mb := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("width"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); ml := SHORT(tempReal); END;
- str := ptr(XML.Element).GetAttributeValue("height"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mr := SHORT(tempReal); END;
- page.AddFrame(mt, mb, ml, mr); frame := page.GetLastFrame();
- str := ptr(XML.Element).GetAttributeValue("name"); IF str # NIL THEN frame.SetName(str); END;
- str := ptr(XML.Element).GetAttributeValue("type"); IF str # NIL THEN frame.SetType(str); END;
- str := ptr(XML.Element).GetAttributeValue("textwrap"); IF (str # NIL) & (str^ = "1") THEN frame.SetWrap(TRUE); END;
- str := ptr(XML.Element).GetAttributeValue("twrap-top"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); mt := SHORT(tempReal); ELSE mt := 0 END;
- str := ptr(XML.Element).GetAttributeValue("twrap-bottom"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); mb := SHORT(tempReal); ELSE mb := 0 END;
- str := ptr(XML.Element).GetAttributeValue("twrap-left"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); ml := SHORT(tempReal); ELSE ml := 0 END;
- str := ptr(XML.Element).GetAttributeValue("twrap-right"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); mr := SHORT(tempReal); ELSE mr := 0 END;
- frame.SetWrapSize(mt, mb, ml, mr);
- str := ptr(XML.Element).GetAttributeValue("z-index"); IF str # NIL THEN Strings.StrToInt(str^, tempInt); END; (* not yet implemented *)
- str := ptr(XML.Element).GetAttributeValue("frame-content");
- IF str # NIL THEN
- content := built.GetContentByName(str^);
- IF content # NIL THEN
- frame.SetContent(content);
- END;
- END;
- END;
- END;
- END;
- page.currentFrame := NIL;
- END;
- END;
- END;
- (* set current to the built Document *)
- SetDocument(built);
- drawPanel.SetDocument(built);
- drawPanel.ZoomFitDoc;
- FirstPageHandler(NIL, NIL);
- UpdatePageNumber;
- drawPanel.Resized;
- drawPanel.ready := TRUE;
- drawPanel.Invalidate;
- END BuildDocFromXML;
- PROCEDURE StoreHandler(sender, data : ANY);
- VAR filename : ARRAY 256 OF CHAR;
- BEGIN
- filenameEdit.GetAsString(filename);
- (* KernelLog.String("Saving file: "); KernelLog.String(filename); KernelLog.Ln; *)
- Store(filename, fileFormat);
- popup.Close;
- END StoreHandler;
- PROCEDURE Store(CONST filename : ARRAY OF CHAR; format : LONGINT);
- VAR tempString : ARRAY 256 OF CHAR;
- string : Strings.String;
- w : Files.Writer; f : Files.File;
- cStyles : DTPData.CStyles; pStyle : DTPData.ParagraphStyleObject;
- pStyles : DTPData.PStyles; cStyle : DTPData.CharacterStyleObject;
- contents : DTPData.Contents; content : DTPData.ContentObject;
- page : DTPData.PageObject;
- mpage: DTPData.MasterPageObject;
- frame : DTPData.FrameObject;
- guide : DTPData.GuideObject;
- i : LONGINT; style : SET;
- BEGIN
- filenameEdit.SetAsString(filename);
- (* -- Save Style File -- *)
- COPY(filename, tempString);
- Strings.Append(tempString, ".Style.XML");
- f := Files.New(tempString); IF f = NIL THEN RETURN END;
- Files.OpenWriter(w, f, 0);
- w.String('<?xml version="1.0" encoding="UTF-8"?>'); w.Ln;
- w.String("<styles>"); w.Ln;
- (* processing character styles *)
- cStyles := currentDocument.cStyles; i := 0;
- WHILE (i<currentDocument.nofCStyles) DO
- cStyle := cStyles[i];
- w.String('<character-style name="'); w.String(cStyle.name);
- w.String('" font-family="'); w.String(cStyle.family);
- w.String('" font-style="'); style := cStyle.style;
- IF (style = {}) THEN
- w.Int(0, 0);
- ELSIF (style = {0}) THEN
- w.Int(1, 0);
- ELSIF (style = {1}) THEN
- w.Int(2, 0);
- ELSIF (style = {0,1}) THEN
- w.Int(3, 0);
- ELSE
- w.Int(0, 0);
- END;
- w.String('" font-size="'); Strings.FloatToStr(cStyle.size, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" leading="'); Strings.FloatToStr(cStyle.leading, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" baseline-shift="'); Strings.FloatToStr(cStyle.baselineShift, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" color="'); w.Hex(cStyle.color, 8);
- w.String('" bgcolor="'); w.Hex(cStyle.bgColor, 8);
- w.String('" tracking="'); Strings.FloatToStr(cStyle.tracking, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" kerning="'); Strings.FloatToStr(cStyle.kerning, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" h-scale="'); Strings.FloatToStr(cStyle.scaleHorizontal, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" v-scale="'); Strings.FloatToStr(cStyle.scaleVertical, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" />'); w.Ln;
- INC(i);
- END;
- (* processing paragraph styles *)
- pStyles := currentDocument.pStyles; i := 0;
- WHILE (i<currentDocument.nofPStyles) DO
- pStyle := pStyles[i];
- w.String('<paragraph-style name="'); w.String(pStyle.name);
- w.String('" alignment="'); w.Int(pStyle.alignment, 0);
- w.String('" first-indent="'); Strings.FloatToStr(pStyle.firstIndent, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" left-indent="'); Strings.FloatToStr(pStyle.leftIndent, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" right-indent="'); Strings.FloatToStr(pStyle.rightIndent, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" space-before="'); Strings.FloatToStr(pStyle.spaceBefore, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" space-after="'); Strings.FloatToStr(pStyle.spaceAfter, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" character-style="'); w.String(pStyle.charStyle.name);
- w.String('" />'); w.Ln;
- INC(i);
- END;
- (* do other styles if needed *)
- w.String("</styles>"); w.Ln;
- w.Update; Files.Register(f);
- (* -- Save Content File -- *)
- COPY(filename, tempString);
- Strings.Append(tempString, ".Content.XML");
- f := Files.New(tempString); IF f = NIL THEN RETURN END;
- Files.OpenWriter(w, f, 0);
- w.String('<?xml version="1.0" encoding="UTF-8"?>'); w.Ln;
- w.String("<content>"); w.Ln;
- (* processing character styles *)
- contents := currentDocument.contents; i := 0;
- WHILE (i<currentDocument.nofContents) DO
- content := contents[i];
- w.String('<node name="'); w.String(content.contentName^); w.String('">'); w.Ln;
- (* Call Save in Plugin *)
- content.Store(w);
- w.String("</node>"); w.Ln;
- INC(i);
- END;
- w.String("</content>"); w.Ln;
- w.Update; Files.Register(f);
- (* -- Save Layout File -- *)
- COPY(filename, tempString);
- Strings.Append(tempString, ".Layout.XML");
- f := Files.New(tempString); IF f = NIL THEN RETURN END;
- Files.OpenWriter(w, f, 0);
- w.String('<?xml version="1.0" encoding="UTF-8"?>'); w.Ln;
- w.String('<document page-width="'); Strings.FloatToStr(currentDocument.GetPageWidth(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" page-height="'); Strings.FloatToStr(currentDocument.GetPageHeight(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" margin-top="'); Strings.FloatToStr(currentDocument.GetMarginTop(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" margin-bottom="'); Strings.FloatToStr(currentDocument.GetMarginBottom(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" margin-left="'); Strings.FloatToStr(currentDocument.GetMarginLeft(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" margin-right="'); Strings.FloatToStr(currentDocument.GetMarginRight(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" facing-pages="'); Strings.BoolToStr(currentDocument.GetFacingPages(), tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('">'); w.Ln;
- (* processing masterpages *)
- page := currentDocument.GetFirstMasterPage();
- (* KernelLog.Int(currentDocument.nofMPages, 0); *)
- WHILE (page # NIL) DO
- w.String('<masterpage name="'); w.String(page(DTPData.MasterPageObject).mpageName^); w.String('">'); w.Ln;
- (* processing guides on masterpage *)
- guide := page.GetFirstGuide();
- WHILE (guide # NIL) DO
- w.String('<guide type="'); IF guide.GetHorizontal() THEN w.String("horizontal"); ELSE w.String("vertical"); END;
- w.String('" position="'); Strings.FloatToStr(guide.GetPosition(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" />'); w.Ln;
- guide := guide.next;
- END;
- (* processing frames on masterpage *)
- frame := page.GetFirstFrame(); i := 0;
- WHILE (frame # NIL) DO
- w.String('<frame name="'); string := frame.GetName(); w.String(string^);
- w.String('" type="'); string := frame.GetType(); w.String(string^);
- w.String('" x="'); Strings.FloatToStr(frame.GetX(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" y="'); Strings.FloatToStr(frame.GetY(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" width="'); Strings.FloatToStr(frame.GetWidth(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" height="'); Strings.FloatToStr(frame.GetHeight(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" frame-content="'); content := frame.GetContent(); IF content # NIL THEN w.String(content.contentName^); ELSE w.String("none"); END;
- w.String('" textwrap="'); IF frame.GetWrap() THEN w.String("1") ELSE w.String("0"); END;
- w.String('" twrap-top="'); Strings.FloatToStr(frame.GetWrapTop(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" twrap-bottom="'); Strings.FloatToStr(frame.GetWrapBottom(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" twrap-left="'); Strings.FloatToStr(frame.GetWrapLeft(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" twrap-right="'); Strings.FloatToStr(frame.GetWrapRight(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" z-index="'); w.Int(i, 0);
- w.String('" />'); w.Ln;
- frame := frame.next;
- INC(i);
- END;
- page := page(DTPData.MasterPageObject).next; w.String("</masterpage>"); w.Ln;
- END;
- (* processing pages *)
- page := currentDocument.GetFirstPage();
- WHILE (page # NIL) DO
- w.String('<page masterpage="'); mpage := page.masterpage;
- IF (mpage # NIL) THEN w.String(mpage.mpageName^); ELSE w.String("none"); END;
- w.String('">'); w.Ln;
- (* processing guides on masterpage *)
- guide := page.GetFirstGuide();
- WHILE (guide # NIL) DO
- w.String('<guide type="'); IF guide.GetHorizontal() THEN w.String("horizontal"); ELSE w.String("vertical"); END;
- w.String('" position="'); Strings.FloatToStr(guide.GetPosition(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" />'); w.Ln;
- guide := guide.next;
- END;
- (* processing frames on masterpage *)
- frame := page.GetFirstFrame(); i := 0;
- WHILE (frame # NIL) DO
- w.String('<frame name="'); string := frame.GetName(); w.String(string^);
- w.String('" type="'); string := frame.GetType(); w.String(string^);
- w.String('" x="'); Strings.FloatToStr(frame.GetX(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" y="'); Strings.FloatToStr(frame.GetY(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" width="'); Strings.FloatToStr(frame.GetWidth(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" height="'); Strings.FloatToStr(frame.GetHeight(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" frame-content="'); content := frame.GetContent(); IF content # NIL THEN w.String(content.contentName^); ELSE w.String("none"); END;
- w.String('" textwrap="'); IF frame.GetWrap() THEN w.String("1") ELSE w.String("0"); END;
- w.String('" twrap-top="'); Strings.FloatToStr(frame.GetWrapTop(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" twrap-bottom="'); Strings.FloatToStr(frame.GetWrapBottom(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" twrap-left="'); Strings.FloatToStr(frame.GetWrapLeft(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" twrap-right="'); Strings.FloatToStr(frame.GetWrapRight(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
- w.String('" z-index="'); w.Int(i, 0);
- w.String('" />'); w.Ln;
- frame := frame.next;
- INC(i);
- END;
- page := page.next; w.String("</page>"); w.Ln;
- END;
- w.String("</document>"); w.Ln;
- w.Update; Files.Register(f);
- modified := FALSE;
- END Store;
- PROCEDURE ExportHandler(sender, data: ANY);
- VAR expFileName: ARRAY 256 OF CHAR;
- pixelPerMM : REAL;
- renderCanvas: WMGraphics.BufferCanvas;
- renderImg: Raster.Image;
- res: WORD;
- oldDocOriginX, oldDocOriginY : LONGINT;
- oldZoomFactor: REAL;
- oldZoomMode: LONGINT;
- tempString: ARRAY 256 OF CHAR;
- tempReal: LONGREAL;
- wait: PleaseWaitWindow;
- BEGIN
- popup.Close;
- IF (currentDocument # NIL) THEN
- expFileName := "export.bmp";
- pixelPerMM := 5;
- IF WMDialogs.QueryString("Export as Image:", expFileName) = WMDialogs.ResOk THEN
- Strings.FloatToStr(pixelPerMM, 0,4,0, tempString);
- IF WMDialogs.QueryString("Export Image Resolution [pixel/mm]:", tempString) = WMDialogs.ResOk THEN
- Strings.StrToFloat(tempString, tempReal); pixelPerMM := SHORT(tempReal);
- NEW(wait); wait.SetColor(LONGINT(09999FFFFH)); wait.SetMessage("Rendering Image - please wait!");
- wait.Show;
- drawPanel.Render(TRUE);
- IF ~previewON THEN (* change to preview *)
- drawPanel.SetPreviewMode(TRUE);
- END;
- oldDocOriginX := drawPanel.GetOriginX(); (* store old values *)
- oldDocOriginY := drawPanel.GetOriginY();
- oldZoomFactor := drawPanel.GetZoomFactor();
- oldZoomMode := drawPanel.zoomMode;
- drawPanel.SetZoomUser(pixelPerMM); (* change values *)
- drawPanel.SetZoomFactor(pixelPerMM);
- drawPanel.SetRenderZoomMode(5);
- drawPanel.SetOrigin(0, 0);
- NEW(renderImg);
- Raster.Create(renderImg, ENTIER(currentDocument.GetPageWidth()*pixelPerMM), ENTIER(currentDocument.GetPageHeight()*pixelPerMM), Raster.BGRA8888);
- NEW(renderCanvas, renderImg);
- drawPanel.DrawDocument(renderCanvas); (* document paper *)
- drawPanel.DrawContent(renderCanvas); (* content objects (frames)(grid..) *)
- (* Raster.Store(renderImg, expFileName, res); *)
- WMGraphics.StoreImage(renderImg, expFileName, res);
- drawPanel.SetOrigin(oldDocOriginX, oldDocOriginY); (* restore stored values *)
- drawPanel.SetZoomFactor(oldZoomFactor);
- drawPanel.SetZoomUser(oldZoomFactor);
- drawPanel.SetRenderZoomMode(oldZoomMode);
- (* drawPanel.Resized; *)
- IF ~previewON THEN (* change to edit *)
- drawPanel.SetPreviewMode(FALSE);
- END;
- IF res # -1 THEN
- KernelLog.String("DTPEditor: Page exported as Image"); KernelLog.Ln;
- END;
- drawPanel.Render(FALSE);
- wait.Hide;
- drawPanel.Invalidate;
- END;
- END;
- END;
- END ExportHandler;
- PROCEDURE NewHandler(sender, data : ANY);
- BEGIN
- CreateNew;
- modified := FALSE;
- END NewHandler;
- PROCEDURE CreateNew;
- BEGIN
- IF ~nDiagOpen THEN
- nDiagOpen := TRUE;
- NEW(nDialog, SELF);
- nDialog.Show;
- END;
- END CreateNew;
- PROCEDURE CreateDoc(w, h, mt, mb, ml, mr : REAL; fp : BOOLEAN);
- VAR document : DTPData.Document;
- BEGIN
- NEW(document, w, h, mt, mb, ml, mr, fp);
- currentDocument := document;
- (* add a page and masterpage on that document *)
- currentDocument.AddPage(FALSE);
- currentDocument.AddMasterPage(FALSE);
- drawPanel.SetDocument(currentDocument);
- LoadCharacterStyle(document.GetCharacterStyleByName("defaultCharacterStyle"));
- LoadParagraphStyle(document.GetParagraphStyleByName("defaultParagraphStyle"));
- UpdatePageNumber;
- drawPanel.ready := TRUE;
- drawPanel.Invalidate;
- END CreateDoc;
- PROCEDURE ObjectCutHandler(sender, data: ANY);
- VAR
- (* cpage: DTPData.PageObject;
- cframe: DTPData.FrameObject;
- cguide: DTPData.GuideObject;
- *) BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- cpage := currentDocument.GetCurrentMasterPage();
- ELSE
- cpage := currentDocument.GetCurrentPage();
- END;
- cframe := cpage.GetCurrentFrame();
- cguide := cpage.GetCurrentGuide();
- IF cframe # NIL THEN (* clone frame (to buffer) and remove current *)
- DTPData.dollyFrame := cframe.Clone();
- currentDocument.dollyGuide := NIL;
- cpage.DeleteFrame();
- ELSIF cguide # NIL THEN (* clone guide (to buffer) and remove current *)
- currentDocument.dollyGuide := cguide.Clone();
- DTPData.dollyFrame := NIL;
- cpage.DeleteGuide();
- END;
- END;
- popup.Close;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- END ObjectCutHandler;
- PROCEDURE ObjectCopyHandler(sender, data: ANY);
- VAR
- (* cpage: DTPData.PageObject;
- cframe: DTPData.FrameObject;
- cguide: DTPData.GuideObject;
- *) BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- cpage := currentDocument.GetCurrentMasterPage();
- ELSE
- cpage := currentDocument.GetCurrentPage();
- END;
- cframe := cpage.GetCurrentFrame();
- cguide := cpage.GetCurrentGuide();
- IF cframe # NIL THEN (* clone frame to buffer *)
- DTPData.dollyFrame := cframe.Clone();
- currentDocument.dollyGuide := NIL;
- ELSIF cguide # NIL THEN (* clone guide to buffer *)
- currentDocument.dollyGuide := cguide.Clone();
- DTPData.dollyFrame := NIL;
- END;
- END;
- popup.Close;
- END ObjectCopyHandler;
- PROCEDURE ObjectPasteHandler(sender, data: ANY);
- VAR
- (* cpage: DTPData.PageObject;
- cframe: DTPData.FrameObject;
- cguide: DTPData.GuideObject;
- *) newFrame: DTPData.FrameObject;
- newContent: DTPData.ContentObject;
- BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- cpage := currentDocument.GetCurrentMasterPage();
- ELSE
- cpage := currentDocument.GetCurrentPage();
- END;
- cframe := DTPData.dollyFrame;
- cguide := currentDocument.dollyGuide;
- IF cframe # NIL THEN (* paste frame from buffer *)
- newFrame := cframe.Clone();
- newContent := newFrame.GetContent();
- newContent.redrawProc := drawPanel.InvalidateCurrentFrame;
- newContent.updatePropsPosition := drawPanel.SetContentPropsPosition;
- newContent.Resize(drawPanel.GetZoomFactor());
- newContent.SetSize(ENTIER(newFrame.GetWidth()*drawPanel.GetZoomFactor()), ENTIER(newFrame.GetHeight()*drawPanel.GetZoomFactor()));
- cpage.InsertFrame(newFrame);
- ELSIF cguide # NIL THEN (* paste guide from buffer *)
- cpage.AddGuide(cguide.GetPosition(), cguide.GetHorizontal());
- END;
- END;
- popup.Close;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- END ObjectPasteHandler;
- PROCEDURE ObjectDeleteHandler(sender, data: ANY);
- VAR
- (* cpage: DTPData.PageObject;
- cframe: DTPData.FrameObject;
- cguide: DTPData.GuideObject;
- *) ccontent: DTPData.ContentObject;
- BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- cpage := currentDocument.GetCurrentMasterPage();
- ELSE
- cpage := currentDocument.GetCurrentPage();
- END;
- cframe := cpage.GetCurrentFrame();
- cguide := cpage.GetCurrentGuide();
- IF cframe # NIL THEN (* delete current frame *)
- ccontent := cframe.GetContent();
- ccontent.OnDelete;
- cpage.DeleteFrame;
- ELSIF cguide # NIL THEN (* delete currend guide *)
- cpage.DeleteGuide;
- END;
- END;
- popup.Close;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- END ObjectDeleteHandler;
- PROCEDURE ObjectToFrontHandler(sender, data: ANY);
- VAR
- (* cpage: DTPData.PageObject;
- cframe: DTPData.FrameObject;
- *) BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- cpage := currentDocument.GetCurrentMasterPage();
- ELSE
- cpage := currentDocument.GetCurrentPage();
- END;
- cframe := cpage.GetCurrentFrame();
- IF cframe # NIL THEN
- cpage.Move2Front;
- END;
- END;
- popup.Close;
- drawPanel.Invalidate;
- SetActive;
- END ObjectToFrontHandler;
- PROCEDURE ObjectFrontStepHandler(sender, data: ANY);
- VAR
- (* cpage: DTPData.PageObject;
- cframe: DTPData.FrameObject;
- *) BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- cpage := currentDocument.GetCurrentMasterPage();
- ELSE
- cpage := currentDocument.GetCurrentPage();
- END;
- cframe := cpage.GetCurrentFrame();
- IF cframe # NIL THEN
- cpage.Move2FrontStep;
- END;
- END;
- popup.Close;
- drawPanel.Invalidate;
- SetActive;
- END ObjectFrontStepHandler;
- PROCEDURE ObjectToBackHandler(sender, data: ANY);
- VAR
- (* cpage: DTPData.PageObject;
- cframe: DTPData.FrameObject;
- *) BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- cpage := currentDocument.GetCurrentMasterPage();
- ELSE
- cpage := currentDocument.GetCurrentPage();
- END;
- cframe := cpage.GetCurrentFrame();
- IF cframe # NIL THEN
- cpage.Move2Back;
- END;
- END;
- popup.Close;
- drawPanel.Invalidate;
- SetActive;
- END ObjectToBackHandler;
- PROCEDURE ObjectBackStepHandler(sender, data: ANY);
- VAR
- (* cpage: DTPData.PageObject;
- cframe: DTPData.FrameObject;
- *) BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- cpage := currentDocument.GetCurrentMasterPage();
- ELSE
- cpage := currentDocument.GetCurrentPage();
- END;
- cframe := cpage.GetCurrentFrame();
- IF cframe # NIL THEN
- cpage.Move2BackStep;
- END;
- END;
- popup.Close;
- drawPanel.Invalidate;
- SetActive;
- END ObjectBackStepHandler;
- PROCEDURE ObjectPrevHandler(sender, data: ANY);
- VAR
- (* cpage: DTPData.PageObject;
- cframe: DTPData.FrameObject;
- *) BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- cpage := currentDocument.GetCurrentMasterPage();
- ELSE
- cpage := currentDocument.GetCurrentPage();
- END;
- cframe := cpage.GetCurrentFrame();
- IF cframe = NIL THEN
- cframe := cpage.GetLastFrame();
- cpage.SetCurrentFrame(cframe);
- ELSE
- cpage.PrevFrame;
- END;
- END;
- popup.Close;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- END ObjectPrevHandler;
- PROCEDURE ObjectNextHandler(sender, data: ANY);
- VAR
- (* cpage: DTPData.PageObject;
- cframe: DTPData.FrameObject;
- *) BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- cpage := currentDocument.GetCurrentMasterPage();
- ELSE
- cpage := currentDocument.GetCurrentPage();
- END;
- cframe := cpage.GetCurrentFrame();
- IF cframe = NIL THEN
- cframe := cpage.GetFirstFrame();
- cpage.SetCurrentFrame(cframe);
- ELSE
- cpage.NextFrame;
- END;
- END;
- popup.Close;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- END ObjectNextHandler;
- PROCEDURE AddBeforePageHandler(sender, data: ANY);
- BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- currentDocument.AddMasterPage(FALSE);
- ELSE
- currentDocument.AddPage(FALSE);
- END;
- END;
- popup.Close;
- UpdatePageNumber;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- END AddBeforePageHandler;
- PROCEDURE AddAfterPageHandler(sender, data: ANY);
- BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- currentDocument.AddMasterPage(TRUE);
- ELSE
- currentDocument.AddPage(TRUE);
- END;
- END;
- popup.Close;
- UpdatePageNumber;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- END AddAfterPageHandler;
- PROCEDURE DeletePageHandler(sender, data: ANY);
- VAR
- BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- currentDocument.DeleteMasterPage;
- ELSE
- currentDocument.DeletePage;
- END;
- END;
- popup.Close;
- UpdatePageNumber;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- END DeletePageHandler;
- PROCEDURE NextPageHandler(sender, data: ANY);
- BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- currentDocument.NextMasterPage;
- ELSE
- currentDocument.NextPage;
- END;
- END;
- UpdatePageNumber;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- drawPanel.Resized;
- END NextPageHandler;
- PROCEDURE PrevPageHandler(sender, data: ANY);
- BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- currentDocument.PrevMasterPage;
- ELSE
- currentDocument.PrevPage;
- END;
- END;
- UpdatePageNumber;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- drawPanel.Resized;
- END PrevPageHandler;
- PROCEDURE LastPageHandler(sender, data: ANY);
- BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- currentDocument.LastMasterPage;
- ELSE
- currentDocument.LastPage;
- END;
- END;
- UpdatePageNumber;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- drawPanel.Resized;
- END LastPageHandler;
- PROCEDURE FirstPageHandler(sender, data: ANY);
- BEGIN
- IF currentDocument # NIL THEN
- IF masterON THEN
- currentDocument.FirstMasterPage;
- ELSE
- currentDocument.FirstPage;
- END;
- END;
- UpdatePageNumber;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- drawPanel.Resized;
- END FirstPageHandler;
- PROCEDURE GoToPageHandler(sender, data: ANY);
- VAR gotoPage: ARRAY 8 OF CHAR;
- gPage, i: LONGINT;
- BEGIN
- IF currentDocument # NIL THEN
- pageNumber.GetAsString(gotoPage);
- Strings.StrToInt(gotoPage, gPage);
- IF masterON THEN
- IF gPage > currentDocument.nofMPages THEN
- gPage := currentDocument.nofMPages;
- ELSIF gPage < 1 THEN
- gPage := 1;
- END;
- currentDocument.FirstMasterPage; i := 0;
- WHILE i < gPage DO
- currentDocument.NextMasterPage;
- INC(i);
- END;
- ELSE
- IF gPage > currentDocument.nofPages THEN
- gPage := currentDocument.nofPages;
- ELSIF gPage < 1 THEN
- gPage := 1;
- END;
- currentDocument.FirstPage; i := 0;
- WHILE i < gPage DO
- currentDocument.NextPage;
- INC(i);
- END;
- END;
- END;
- UpdatePageNumber;
- drawPanel.Invalidate;
- drawPanel.UpdateProps;
- drawPanel.UpdateContentProps;
- END GoToPageHandler;
- PROCEDURE UpdatePageNumber;
- VAR pageNumberString : ARRAY 8 OF CHAR;
- masterNumberString : Strings.String;
- mpage : DTPData.MasterPageObject;
- BEGIN
- IF masterON THEN
- Strings.IntToStr(currentDocument.GetCurrentMasterPageNumber(), pageNumberString);
- mpage := currentDocument.GetCurrentMasterPage();
- masterNumberString := mpage.GetName();
- ELSE
- Strings.IntToStr(currentDocument.GetCurrentPageNumber(), pageNumberString);
- cpage := currentDocument.GetCurrentPage();
- mpage := cpage.GetMasterPage();
- IF mpage # NIL THEN
- masterNumberString := mpage.GetName();
- ELSE
- masterNumberString := Strings.NewString("none");
- END;
- END;
- pageNumber.SetAsString(pageNumberString);
- masterNumber.SetAsString(masterNumberString^);
- END UpdatePageNumber;
- PROCEDURE MiscStyleEditorHandler(sender, data: ANY);
- BEGIN
- NEW(styleEditor);
- styleEditor.UpdateProc := TextPropUpdateHandler;
- styleEditor.LoadStyleList(currentDocument);
- styleEditor.Show(200, 150);
- popup.Close;
- END MiscStyleEditorHandler;
- PROCEDURE TextPropUpdateHandler*;
- VAR cpage : DTPData.PageObject;
- cframe : DTPData.FrameObject;
- ccontent: DTPData.ContentObject;
- BEGIN
- IF currentDocument # NIL THEN
- IF drawPanel.mpageMode THEN
- cpage := currentDocument.GetCurrentMasterPage();
- ELSE
- cpage := currentDocument.GetCurrentPage();
- END;
- IF cpage # NIL THEN
- cframe := cpage.GetCurrentFrame();
- IF cframe # NIL THEN
- ccontent := cframe.GetContent();
- IF ccontent # NIL THEN
- ccontent.Hide; ccontent.Show(drawPanel.propsX, drawPanel.propsY);
- END;
- END;
- END;
- drawPanel.Resized;
- END;
- END TextPropUpdateHandler;
- PROCEDURE PropsHandler(sender, data: ANY);
- VAR
- BEGIN
- (* NEW(props, SELF); *)
- IF ~drawPanel.propertyOpen THEN
- drawPanel.props.Show;
- drawPanel.propertyOpen := TRUE;
- popup.Close;
- END;
- END PropsHandler;
- (*
- PROCEDURE RefreshPlugins();
- BEGIN
- LoadPlugins;
- pluginPanel := AddPlugins();
- pluginPanel.visible.Set(TRUE);
- (* sideToolbar.AddContent(pluginPanel); *)
- sideToolbar.Invalidate;
- END RefreshPlugins;
- PROCEDURE PlugHandler(sender, data: ANY);
- BEGIN
- RefreshPlugins;
- popup.Close;
- END PlugHandler;
- *)
- PROCEDURE SetMasterHandler(sender, data: ANY);
- VAR master: DTPData.MasterPageObject;
- mastername: ARRAY 16 OF CHAR;
- BEGIN
- masterNumber.GetAsString(mastername);
- IF masterON THEN (* set name for Masterpage *)
- master := currentDocument.GetCurrentMasterPage();
- master.SetName(Strings.NewString(mastername));
- ELSE (* set masterpage for current doc page *)
- master := currentDocument.GetMasterByName(Strings.NewString(mastername));
- cpage := currentDocument.GetCurrentPage();
- cpage.SetMasterPage(master);
- drawPanel.Invalidate;
- END;
- UpdatePageNumber;
- END SetMasterHandler;
- PROCEDURE Close*;
- BEGIN
- Close^;
- drawPanel.CloseContentProps;
- IF styleEditor # NIL THEN styleEditor.Hide; END;
- IF drawPanel.propertyOpen THEN drawPanel.props.Close END;
- IF nDiagOpen THEN nDialog.Cancel(SELF, NIL) END;
- DecCount
- END Close;
- END Window;
- NewDialog* = OBJECT(WMComponents.FormWindow)
- VAR content : WMComponents.VisualComponent;
- result : LONGINT;
- dhe, dwe, dmte, dmbe, dmle, dmre, dfpe : WMEditors.Editor;
- dhs, dws, dmts, dmbs, dmls, dmrs, dfps : ARRAY 256 OF CHAR;
- dhr, dwr, dmtr, dmbr, dmlr, dmrr, dfpr : LONGREAL;
- fpCheck: DTPUtilities.Checkbox;
- facep : BOOLEAN;
- theCaller : Window;
- PROCEDURE &New*(caller : Window);
- BEGIN
- theCaller := caller;
- manager := WMWindowManager.GetDefaultManager();
- CreateNewDialog;
- Init(content.bounds.GetWidth(), content.bounds.GetHeight(), FALSE);
- SetContent(content);
- SetTitle(Strings.NewString("New Document"));
- END New;
- PROCEDURE CreateNewDialog;
- VAR
- (* NewDialog Stuff *)
- (* newDialog : WMComponents.FormWindow; *)
- panel, buttonPanel, paramPanel : WMStandardComponents.Panel;
- cancel, ok : WMStandardComponents.Button;
- labelPanel, editorsPanel : WMStandardComponents.Panel;
- dh, dw, dmt, dmb, dml, dmr, dfp : WMStandardComponents.Label;
- windowStyle : WMWindowManager.WindowStyle;
- panelColor : WMGraphics.Color;
- BEGIN
- windowStyle := manager.GetStyle();
- panelColor := windowStyle.bgColor;
- NEW(panel); panel.bounds.SetExtents(300, 200); panel.fillColor.Set(panelColor);
- panel.takesFocus.Set(TRUE);
- NEW(buttonPanel); buttonPanel.bounds.SetHeight(40); buttonPanel.alignment.Set(WMComponents.AlignBottom);
- panel.AddContent(buttonPanel);
- NEW(ok); ok.caption.SetAOC("OK"); ok.alignment.Set(WMComponents.AlignRight);
- buttonPanel.AddContent(ok);
- (* add button handler *)
- ok.onClick.Add(Ok);
- NEW(cancel); cancel.caption.SetAOC("Cancel"); cancel.alignment.Set(WMComponents.AlignRight);
- buttonPanel.AddContent(cancel);
- cancel.onClick.Add(Cancel);
- NEW(paramPanel); paramPanel.alignment.Set(WMComponents.AlignClient);
- panel.AddContent(paramPanel);
- NEW(editorsPanel); editorsPanel.bounds.SetWidth(100); editorsPanel.alignment.Set(WMComponents.AlignRight);
- paramPanel.AddContent(editorsPanel);
- NEW(labelPanel); labelPanel.alignment.Set(WMComponents.AlignClient);
- paramPanel.AddContent(labelPanel);
- NEW(dw); dw.bounds.SetHeight(20); dw.alignment.Set(WMComponents.AlignTop); dw.SetCaption(" Document Width [mm]:");
- labelPanel.AddContent(dw);
- NEW(dwe); dwe.bounds.SetHeight(20); dwe.alignment.Set(WMComponents.AlignTop);
- dwe.tv.showBorder.Set(TRUE); dwe.multiLine.Set(FALSE); dwe.fillColor.Set(0FFFFFFFFH);
- dwe.tv.textAlignV.Set(WMGraphics.AlignCenter);
- editorsPanel.AddContent(dwe); dwe.onEnter.Add(FocusNextField);
- NEW(dh); dh.bounds.SetHeight(20); dh.alignment.Set(WMComponents.AlignTop); dh.SetCaption(" Document Height [mm]:");
- labelPanel.AddContent(dh);
- NEW(dhe); dhe.bounds.SetHeight(20); dhe.alignment.Set(WMComponents.AlignTop);
- dhe.tv.showBorder.Set(TRUE); dhe.multiLine.Set(FALSE); dhe.fillColor.Set(0FFFFFFFFH);
- dhe.tv.textAlignV.Set(WMGraphics.AlignCenter);
- editorsPanel.AddContent(dhe); dhe.onEnter.Add(FocusNextField);
- NEW(dmt); dmt.bounds.SetHeight(20); dmt.alignment.Set(WMComponents.AlignTop); dmt.SetCaption(" Document Margin Top [mm]:");
- labelPanel.AddContent(dmt);
- NEW(dmte); dmte.bounds.SetHeight(20); dmte.alignment.Set(WMComponents.AlignTop);
- dmte.tv.showBorder.Set(TRUE); dmte.multiLine.Set(FALSE); dmte.fillColor.Set(0FFFFFFFFH);
- dmte.tv.textAlignV.Set(WMGraphics.AlignCenter);
- editorsPanel.AddContent(dmte); dmte.onEnter.Add(FocusNextField);
- NEW(dmb); dmb.bounds.SetHeight(20); dmb.alignment.Set(WMComponents.AlignTop); dmb.SetCaption(" Document Margin Bottom [mm]:");
- labelPanel.AddContent(dmb);
- NEW(dmbe); dmbe.bounds.SetHeight(20); dmbe.alignment.Set(WMComponents.AlignTop);
- dmbe.tv.showBorder.Set(TRUE); dmbe.multiLine.Set(FALSE); dmbe.fillColor.Set(0FFFFFFFFH);
- dmbe.tv.textAlignV.Set(WMGraphics.AlignCenter);
- editorsPanel.AddContent(dmbe); dmbe.onEnter.Add(FocusNextField);
- NEW(dml); dml.bounds.SetHeight(20); dml.alignment.Set(WMComponents.AlignTop); dml.SetCaption(" Document Margin Left [mm]:");
- labelPanel.AddContent(dml);
- NEW(dmle); dmle.bounds.SetHeight(20); dmle.alignment.Set(WMComponents.AlignTop);
- dmle.tv.showBorder.Set(TRUE); dmle.multiLine.Set(FALSE); dmle.fillColor.Set(0FFFFFFFFH);
- dmle.tv.textAlignV.Set(WMGraphics.AlignCenter);
- editorsPanel.AddContent(dmle); dmle.onEnter.Add(FocusNextField);
- NEW(dmr); dmr.bounds.SetHeight(20); dmr.alignment.Set(WMComponents.AlignTop); dmr.SetCaption(" Document Margin Right [mm]:");
- labelPanel.AddContent(dmr);
- NEW(dmre); dmre.bounds.SetHeight(20); dmre.alignment.Set(WMComponents.AlignTop);
- dmre.tv.showBorder.Set(TRUE); dmre.multiLine.Set(FALSE); dmre.fillColor.Set(0FFFFFFFFH);
- dmre.tv.textAlignV.Set(WMGraphics.AlignCenter);
- editorsPanel.AddContent(dmre); dmre.onEnter.Add(FocusNextField);
- NEW(dfp); dfp.bounds.SetHeight(20); dfp.alignment.Set(WMComponents.AlignTop); dfp.SetCaption(" Facing Pages:");
- labelPanel.AddContent(dfp);
- NEW(dfpe); dfpe.bounds.SetHeight(20); dfpe.alignment.Set(WMComponents.AlignTop);
- dfpe.tv.showBorder.Set(TRUE); dfpe.multiLine.Set(FALSE); dfpe.fillColor.Set(0FFFFFFFFH);
- dfpe.tv.textAlignV.Set(WMGraphics.AlignCenter);
- (* editorsPanel.AddContent(dfpe); *) dfpe.onEnter.Add(FocusNextField);
- NEW(fpCheck); fpCheck.bounds.SetHeight(20); fpCheck.alignment.Set(WMComponents.AlignTop);
- editorsPanel.AddContent(fpCheck); fpCheck.leftBorder := 0;
- content := panel;
- END CreateNewDialog;
- PROCEDURE FocusNextField(sender, data: ANY);
- BEGIN
- IF (sender = dwe) THEN
- dhe.tv.SetFocus;
- ELSIF (sender = dhe) THEN
- dmte.tv.SetFocus;
- ELSIF (sender = dmte) THEN
- dmbe.tv.SetFocus;
- ELSIF (sender = dmbe) THEN
- dmle.tv.SetFocus;
- ELSIF (sender = dmle) THEN
- dmre.tv.SetFocus;
- ELSIF (sender = dmre) THEN
- dwe.tv.SetFocus;
- ELSIF (sender = dfpe) THEN
- dwe.tv.SetFocus;
- END;
- END FocusNextField;
- PROCEDURE Show*;
- BEGIN
- result := -1;
- InitFieldValues;
- WMWindowManager.ExtAddWindow(SELF, 300, 200,
- {WMWindowManager.FlagFrame, WMWindowManager.FlagStayOnTop, WMWindowManager.FlagClose, WMWindowManager.FlagMinimize});
- manager.SetFocus(SELF);
- dwe.tv.SetFocus;
- BEGIN {EXCLUSIVE}
- AWAIT (result >= 0)
- END;
- manager.Remove(SELF);
- IF result = 0 THEN (* OK pressed, fill in values *)
- dhe.GetAsString(dhs);
- dwe.GetAsString(dws);
- dmte.GetAsString(dmts);
- dmbe.GetAsString(dmbs);
- dmle.GetAsString(dmls);
- dmre.GetAsString(dmrs);
- dfpe.GetAsString(dfps);
- Strings.StrToFloat(dhs, dhr);
- Strings.StrToFloat(dws, dwr);
- Strings.StrToFloat(dmts, dmtr);
- Strings.StrToFloat(dmbs, dmbr);
- Strings.StrToFloat(dmls, dmlr);
- Strings.StrToFloat(dmrs, dmrr);
- Strings.StrToFloat(dfps, dfpr);
- (* IF dfpr = 0 THEN facep := FALSE ELSE facep := TRUE END; *)
- IF fpCheck.checked THEN facep:= TRUE ELSE facep:= FALSE END;
- theCaller.CreateDoc(SHORT(dwr), SHORT(dhr), SHORT(dmtr), SHORT(dmbr), SHORT(dmlr), SHORT(dmrr), facep);
- (* force redraw *)
- theCaller.drawPanel.Invalidate;
- END;
- END Show;
- PROCEDURE InitFieldValues;
- VAR doc : DTPData.Document;
- fieldContent : ARRAY 8 OF CHAR;
- BEGIN
- IF theCaller.currentDocument = NIL THEN (* no document open yet *)
- dwe.SetAsString("210");
- dhe.SetAsString("297");
- dmte.SetAsString("12");
- dmbe.SetAsString("12");
- dmle.SetAsString("12");
- dmre.SetAsString("12");
- dfpe.SetAsString("0");
- ELSE
- doc := theCaller.currentDocument;
- Strings.FloatToStr(doc.GetPageWidth(), 0,4,0, fieldContent);
- dwe.SetAsString(fieldContent);
- Strings.FloatToStr(doc.GetPageHeight(), 0,4,0, fieldContent);
- dhe.SetAsString(fieldContent);
- Strings.FloatToStr(doc.GetMarginTop(), 0,4,0, fieldContent);
- dmte.SetAsString(fieldContent);
- Strings.FloatToStr(doc.GetMarginBottom(), 0,4,0, fieldContent);
- dmbe.SetAsString(fieldContent);
- Strings.FloatToStr(doc.GetMarginLeft(), 0,4,0, fieldContent);
- dmle.SetAsString(fieldContent);
- Strings.FloatToStr(doc.GetMarginRight(), 0,4,0, fieldContent);
- dmre.SetAsString(fieldContent);
- IF doc.GetFacingPages() THEN fieldContent := "1" ELSE fieldContent := "0" END;
- dfpe.SetAsString(fieldContent);
- END;
- END InitFieldValues;
- PROCEDURE Ok(sender, data : ANY);
- BEGIN {EXCLUSIVE}
- result := 0;
- theCaller.nDiagOpen := FALSE;
- END Ok;
- PROCEDURE Cancel(sender, data : ANY);
- BEGIN {EXCLUSIVE}
- result := 1;
- theCaller.nDiagOpen := FALSE;
- END Cancel;
- END NewDialog;
- PleaseWaitWindow* = OBJECT(WMComponents.FormWindow)
- VAR
- label : WMStandardComponents.Label;
- status: WMStandardComponents.Label;
- spacer: WMStandardComponents.Panel;
- panel : WMStandardComponents.Panel;
- container: WMStandardComponents.Panel;
- button*: WMStandardComponents.Button;
- mode: LONGINT; (* 0 = Text/Status only *)
- (* 1 = Animated Bar *)
- (* 2 = Status Bar *)
- shown : BOOLEAN;
- x, y : LONGINT;
- progress : LONGINT;
- (* abortProc: PROCEDURE {DELEGATE} ; *)
- PROCEDURE CreateForm() : WMComponents.VisualComponent;
- BEGIN
- NEW(panel);
- panel.bounds.SetExtents(350, 150);
- NEW(spacer); spacer.alignment.Set(WMComponents.AlignTop);
- spacer.bounds.SetHeight(40);
- panel.AddContent(spacer);
- NEW(label); label.alignment.Set(WMComponents.AlignTop);
- label.bounds.SetHeight(20);
- label.alignH.Set(1); label.alignV.Set(1);
- label.caption.SetAOC("");
- panel.AddContent(label);
- NEW(spacer); spacer.alignment.Set(WMComponents.AlignBottom);
- spacer.bounds.SetHeight(20);
- panel.AddContent(spacer);
- NEW(container); container.alignment.Set(WMComponents.AlignBottom);
- container.bounds.SetHeight(20);
- NEW(spacer); spacer.alignment.Set(WMComponents.AlignLeft);
- spacer.bounds.SetWidth(110);
- container.AddContent(spacer);
- NEW(spacer); spacer.alignment.Set(WMComponents.AlignRight);
- spacer.bounds.SetWidth(110);
- container.AddContent(spacer);
- NEW(button); button.caption.SetAOC("Cancel"); button.alignment.Set(WMComponents.AlignClient);
- container.AddContent(button);
- panel.AddContent(container);
- NEW(spacer); spacer.alignment.Set(WMComponents.AlignBottom);
- spacer.bounds.SetHeight(25);
- panel.AddContent(spacer);
- NEW(status); status.alignment.Set(WMComponents.AlignBottom);
- status.bounds.SetHeight(20);
- status.alignH.Set(1); status.alignV.Set(1);
- status.caption.SetAOC("");
- panel.AddContent(status);
- RETURN panel;
- END CreateForm;
- PROCEDURE &New*;
- VAR vc : WMComponents.VisualComponent;
- BEGIN
- mode := 0;
- progress := 0;
- x := 300; y := 200; shown := FALSE;
- vc := CreateForm();
- button.visible.Set(FALSE);
- Init(vc.bounds.GetWidth(), vc.bounds.GetHeight(), FALSE);
- SetContent(vc);
- SetTitle(Strings.NewString(""));
- END New;
- PROCEDURE SetMessage(CONST msg: ARRAY OF CHAR);
- BEGIN
- label.caption.SetAOC(msg);
- panel.Invalidate;
- END SetMessage;
- (*
- PROCEDURE SetStatus(msg: ARRAY OF CHAR);
- BEGIN
- status.caption.SetAOC(msg);
- panel.Invalidate;
- END SetStatus;
- PROCEDURE SetProgress(progress: LONGINT);
- BEGIN
- SELF.progress := progress;
- END SetProgress;
- PROCEDURE AbortHandler(sender, data: ANY);
- BEGIN
- IF abortProc # NIL THEN abortProc; END;
- END AbortHandler;
- *)
- PROCEDURE SetColor(color: LONGINT);
- BEGIN
- panel.fillColor.Set(color);
- label.fillColor.Set(color);
- status.fillColor.Set(color);
- END SetColor;
- PROCEDURE Show*;
- BEGIN
- IF ~shown THEN
- shown := TRUE;
- manager := WMWindowManager.GetDefaultManager();
- WMWindowManager.ExtAddWindow(SELF, x, y,
- {WMWindowManager.FlagFrame, WMWindowManager.FlagStayOnTop, WMWindowManager.FlagClose, WMWindowManager.FlagMinimize});
- END;
- END Show;
- PROCEDURE Hide*;
- BEGIN
- manager := WMWindowManager.GetDefaultManager();
- manager.Remove(SELF); shown := FALSE;
- END Hide;
- BEGIN {ACTIVE}
- IF shown THEN
- END;
- END PleaseWaitWindow;
- (*
- AnimBar = OBJECT(WMComponents.VisualComponent)
- PROCEDURE Draw(canvas: WMGraphics.Canvas);
- BEGIN
- END Draw;
- END AnimBar;
- StatusBar = OBJECT(WMComponents.VisualComponent)
- END StatusBar;
- *)
- (* --- Plugin Registry ----------------------------------- *)
- PluginListEntry = OBJECT
- VAR pname: ARRAY 16 OF CHAR;
- next: PluginListEntry;
- END PluginListEntry;
- PluginList = OBJECT
- VAR first: PluginListEntry;
- PROCEDURE &Init*;
- BEGIN
- first := NIL;
- END Init;
- PROCEDURE Add(CONST name: ARRAY OF CHAR);
- VAR nEntry : PluginListEntry;
- BEGIN
- NEW(nEntry); COPY(name, nEntry.pname); nEntry.next := first; first := nEntry;
- END Add;
- PROCEDURE Remove(CONST name: ARRAY OF CHAR);
- VAR nEntry, oldEntry: PluginListEntry;
- BEGIN
- nEntry := first; oldEntry := NIL;
- WHILE (nEntry # NIL) DO
- IF (nEntry.pname = name) THEN (* remove *)
- IF oldEntry = NIL THEN (* remove first *)
- first := nEntry.next;
- ELSE (* remove other *)
- oldEntry.next := nEntry.next;
- END;
- END;
- oldEntry := nEntry;
- nEntry := nEntry.next;
- END;
- END Remove;
- END PluginList;
- PluginEntry = OBJECT
- VAR
- generator: DTPData.ContentFactory;
- generatorName: Modules.Name;
- END PluginEntry;
- PluginRegistry* = OBJECT
- VAR generators: XMLObjects.Dictionary;
- plugList: PluginList;
- PROCEDURE &Init*;
- VAR arrDict: XMLObjects.ArrayDict;
- BEGIN
- NEW(arrDict); generators := arrDict;
- NEW(plugList);
- END Init;
- PROCEDURE RegisterPlugin*(CONST name: ARRAY OF CHAR; generator: DTPData.ContentFactory);
- VAR pe: PluginEntry; pp: ANY;
- BEGIN
- IF generator # Unassigned THEN
- pp := generators.Get(name);
- IF pp = NIL THEN
- NEW(pe); pe.generator := generator;
- generators.Add(name, pe);
- plugList.Add(name);
- ELSE
- pp(PluginEntry).generator := generator; (* redefinition *)
- END;
- KernelLog.String("DTPEditor Plugin registered: "); KernelLog.String(name); KernelLog.Ln;
- END;
- END RegisterPlugin;
- PROCEDURE RegisterPluginByName*(CONST name: ARRAY OF CHAR; CONST generatorName: Modules.Name);
- VAR pe: PluginEntry; pp: ANY;
- BEGIN
- IF generatorName # "" THEN
- pp := generators.Get(name);
- IF pp = NIL THEN
- NEW(pe); pe.generatorName := generatorName;
- generators.Add(name, pe);
- plugList.Add(name);
- ELSE
- pe(PluginEntry).generatorName := generatorName; (* redefinition *)
- END;
- KernelLog.String("DTPEditor Plugin registered: "); KernelLog.String(name); KernelLog.Ln;
- END;
- END RegisterPluginByName;
- PROCEDURE UnregisterPlugin*(CONST name: ARRAY OF CHAR);
- BEGIN
- generators.Remove(name);
- plugList.Remove(name);
- END UnregisterPlugin;
- PROCEDURE InstantiatePlugin*(CONST name: ARRAY OF CHAR): DTPData.ContentObject;
- VAR
- contentObject : DTPData.ContentObject; gen: DTPData.ContentFactory;
- moduleName, procedureName : Modules.Name; msg : ARRAY 16 OF CHAR; res : WORD;
- pp : ANY;
- BEGIN
- contentObject := NIL;
- pp := generators.Get(name);
- IF pp # NIL THEN
- IF pp(PluginEntry).generator # NIL THEN
- contentObject := pp(PluginEntry).generator();
- ELSE
- Commands.Split(pp(PluginEntry).generatorName, moduleName, procedureName, res, msg);
- IF (res = Commands.Ok) THEN
- GETPROCEDURE(moduleName, procedureName, gen);
- IF gen # NIL THEN
- contentObject := gen();
- END;
- END;
- END;
- END;
- RETURN contentObject;
- END InstantiatePlugin;
- PROCEDURE GetNumberOfPlugins*(): LONGINT;
- BEGIN
- RETURN generators.GetNumberOfElements();
- END GetNumberOfPlugins;
- PROCEDURE GetPluginList*(): PluginList;
- BEGIN
- RETURN plugList;
- END GetPluginList;
- PROCEDURE GetPlugins*(): XMLObjects.Enumerator;
- BEGIN
- RETURN generators.GetEnumerator();
- END GetPlugins;
- END PluginRegistry;
- (* MasterPages = POINTER TO ARRAY OF MasterPageObject;
- ContentPages = POINTER TO ARRAY OF PageObject;
- Styles = POINTER TO ARRAY OF StyleObject;
- Contents = POINTER TO ARRAY OF DTPFrame.ContentObject;
- *)
- VAR
- nofWindows : LONGINT;
- plugRegistry*: PluginRegistry;
- Unassigned: DTPData.ContentFactory;
- PROCEDURE OpenNew*;
- VAR instance : Window;
- BEGIN
- NEW(instance, NIL);
- instance.CreateNew;
- END OpenNew;
- PROCEDURE OpenEmptyA4portrait*;
- VAR instance : Window;
- BEGIN
- NEW(instance, NIL);
- instance.CreateDoc(210, 297, 15, 15, 15, 15, FALSE);
- END OpenEmptyA4portrait;
- PROCEDURE OpenEmptyA4landscape*;
- VAR instance : Window;
- BEGIN
- NEW(instance, NIL);
- instance.CreateDoc(297, 210, 15, 15, 15, 15, FALSE);
- END OpenEmptyA4landscape;
- PROCEDURE OpenEmptyA5portrait*;
- VAR instance : Window;
- BEGIN
- NEW(instance, NIL);
- instance.CreateDoc(148, 210, 15, 15, 15, 15, FALSE);
- END OpenEmptyA5portrait;
- PROCEDURE OpenEmptyA5landscape*;
- VAR instance : Window;
- BEGIN
- NEW(instance, NIL);
- instance.CreateDoc(210, 148, 15, 15, 15, 15, FALSE);
- END OpenEmptyA5landscape;
- PROCEDURE OpenEmpty*(context : Commands.Context);
- VAR instance : Window;
- w, h, mt, mb, ml, mr : REAL; f : LONGINT; fp : BOOLEAN;
- dstring : ARRAY 16 OF CHAR;
- lreal : LONGREAL;
- BEGIN
- context.arg.SkipWhitespace; context.arg.Token(dstring);
- Strings.StrToFloat(dstring, lreal); w := SHORT(lreal);
- context.arg.SkipWhitespace; context.arg.Token(dstring);
- Strings.StrToFloat(dstring, lreal); h := SHORT(lreal);
- context.arg.SkipWhitespace; context.arg.Token(dstring);
- Strings.StrToFloat(dstring, lreal); mt := SHORT(lreal);
- context.arg.SkipWhitespace; context.arg.Token(dstring);
- Strings.StrToFloat(dstring, lreal); mb := SHORT(lreal);
- context.arg.SkipWhitespace; context.arg.Token(dstring);
- Strings.StrToFloat(dstring, lreal); ml := SHORT(lreal);
- context.arg.SkipWhitespace; context.arg.Token(dstring);
- Strings.StrToFloat(dstring, lreal); mr := SHORT(lreal);
- context.arg.SkipWhitespace; context.arg.Int(f, FALSE);
- IF f = 0 THEN fp := FALSE ELSE fp:= TRUE END;
- NEW(instance, NIL);
- instance.CreateDoc(w, h, mt, mb, ml, mr, fp);
- END OpenEmpty;
- PROCEDURE Open*(context : Commands.Context);
- VAR instance : Window; name : ARRAY 256 OF CHAR;
- BEGIN
- IF context.arg.GetString(name) THEN
- NEW(instance, NIL);
- instance.CreateDoc(10, 10, 0, 0, 0, 0, FALSE);
- instance.Load(name, 0);
- END;
- END Open;
- PROCEDURE Restore*(context : WMRestorable.Context);
- VAR w : Window;
- BEGIN
- NEW(w, context)
- END Restore;
- PROCEDURE IncCount;
- BEGIN {EXCLUSIVE}
- INC(nofWindows)
- END IncCount;
- PROCEDURE DecCount;
- BEGIN {EXCLUSIVE}
- DEC(nofWindows)
- END DecCount;
- PROCEDURE Cleanup;
- VAR die : KillerMsg;
- msg : WMMessages.Message;
- m : WMWindowManager.WindowManager;
- BEGIN {EXCLUSIVE}
- NEW(die);
- msg.ext := die;
- msg.msgType := WMMessages.MsgExt;
- m := WMWindowManager.GetDefaultManager();
- m.Broadcast(msg);
- AWAIT(nofWindows = 0)
- END Cleanup;
- BEGIN
- NEW(plugRegistry);
- Modules.InstallTermHandler(Cleanup)
- END DTPEditor.
- --- DTP Stuff -----------------------------------
- DTPRect.Register~
- DTPImage.Register~
- DTPText.Register~
- DTPEditor.OpenNew ~
- DTPEditor.OpenEmptyA4portrait ~
- DTPEditor.OpenEmptyA5portrait ~
- DTPEditor.OpenEmptyA4landscape ~
- DTPEditor.OpenEmptyA5landscape ~
- DTPEditor.OpenEmpty 100 100 5.5 5.5 7.5 7.5 0 ~
- DTPEditor.OpenEmpty 297 420 15 15 15 15 0 ~
- DTPEditor.OpenEmpty 320 240 10 10 10 10 0 ~
- DTPEditor.OpenEmpty 126 178 10 10 10 10 0 ~
- DTPEditor.Open myDTPdocument ~
- System.Free DTPText DTPImage DTPRect DTPEditor DTPView DTPUtilities DTPData~
- PC.Compile DTPData.Mod DTPUtilities.Mod DTPView.Mod DTPEditor.Mod DTPRect.Mod DTPImage.Mod DTPText.Mod~
|