12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525 |
- 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 : LONGINT;
- 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, res : LONGINT; 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 : LONGINT;
- 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 Min(a, b: REAL): REAL;
- BEGIN
- IF a <= b THEN RETURN a ELSE RETURN b END;
- END Min;
- PROCEDURE Max(a, b: REAL): REAL;
- BEGIN
- IF a >= b THEN RETURN a ELSE RETURN b END;
- END Max;
- *)
- 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 ~
- SystemTools.Free DTPText DTPImage DTPRect DTPEditor DTPView DTPUtilities DTPData~
- PC.Compile DTPData.Mod DTPUtilities.Mod DTPView.Mod DTPEditor.Mod DTPRect.Mod DTPImage.Mod DTPText.Mod~
|