DTPEditor.Mod 90 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525
  1. MODULE DTPEditor; (** AUTHOR "PL"; PURPOSE "Simple DTP Editor"; *)
  2. IMPORT
  3. KernelLog, Modules, Commands, Files, WMRestorable, XML,
  4. WMStandardComponents, WMGraphics, WMComponents, WMRectangles, WMMessages, WMDialogs,
  5. WMEditors, Strings, Texts,
  6. WMWindowManager, WMPopups, Raster, XMLObjects, XMLParser, XMLScanner,
  7. DTPData, DTPView, DTPUtilities;
  8. CONST
  9. WINDOWWIDTH = 850;
  10. WINDOWHEIGHT = 700;
  11. (*
  12. SCREENWIDTH = 1280;
  13. SCREENHEIGHT = 1024;
  14. RULERSIZE = 20;
  15. HIGHLIGHT = 0FF8800FFH;
  16. ACTIVEFRAMECOLOR = 00000FFFFH;
  17. FRAMECOLOR = 00088FFFFH;
  18. BORDERCOLOR = 0FF00FFFFH;
  19. GUIDECOLOR = 000FFFFFFH;
  20. GRIDCOLOR = 0BABABAFFH;
  21. SUBGRIDCOLOR = 0DDDDDDFFH;
  22. ACTIVEBUTTONCOLOR = 088CCFF80H;
  23. *)
  24. TYPE
  25. pluginButtons = POINTER TO ARRAY OF WMStandardComponents.Button;
  26. KillerMsg = OBJECT
  27. END KillerMsg;
  28. Window* = OBJECT (WMComponents.FormWindow)
  29. VAR
  30. vc : WMComponents.VisualComponent;
  31. vScrollbar- : WMStandardComponents.Scrollbar;
  32. hScrollbar- : WMStandardComponents.Scrollbar;
  33. drawPanel* : DTPView.DrawPanel;
  34. styleEditor : DTPUtilities.StyleEditor;
  35. topToolbar, sideToolbar, workspace, pluginPanel : WMStandardComponents.Panel;
  36. masterLabel : WMStandardComponents.Label;
  37. filenameEdit, pageNumber, masterNumber : WMEditors.Editor;
  38. fileMenu, objectMenu, pageMenu, miscMenu : WMStandardComponents.Button;
  39. select, frame, cbutton : WMStandardComponents.Button;
  40. modePreview, modeMaster : WMStandardComponents.Button;
  41. popup : WMPopups.Popup;
  42. nDialog : NewDialog;
  43. nDiagOpen : BOOLEAN;
  44. scrollbar: BOOLEAN;
  45. currentDocument : DTPData.Document;
  46. cpage : DTPData.PageObject;
  47. cframe : DTPData.FrameObject;
  48. cguide : DTPData.GuideObject;
  49. plugName : ARRAY 32 OF CHAR;
  50. previewON, masterON, gridON : BOOLEAN;
  51. (* Plugin Buttons *)
  52. pbuttons : pluginButtons;
  53. numberOfPlugs : LONGINT;
  54. fileFormat : LONGINT;
  55. modified : BOOLEAN;
  56. fullScreen-: BOOLEAN;
  57. currentWidth, currentHeight: LONGINT;
  58. XMLdocLayout, XMLdocStyle, XMLdocContent: XML.Document;
  59. PROCEDURE CreatePluginButton(CONST pluginName: ARRAY OF CHAR): WMStandardComponents.Button;
  60. VAR button: WMStandardComponents.Button;
  61. BEGIN
  62. NEW(button); button.caption.SetAOC(pluginName); button.alignment.Set(WMComponents.AlignTop);
  63. button.onClick.Add(SetPluginHandler);
  64. (* button.clDefault.Set(01010C080H); *)
  65. button.isToggle.Set(TRUE);
  66. RETURN button;
  67. END CreatePluginButton;
  68. PROCEDURE LoadPlugins;
  69. VAR plugName : ARRAY 16 OF CHAR;
  70. plugList : PluginList;
  71. plugListEntry : PluginListEntry;
  72. i : LONGINT;
  73. (* button: WMStandardComponents.Button; *)
  74. BEGIN
  75. plugList := plugRegistry.GetPluginList();
  76. numberOfPlugs := plugRegistry.GetNumberOfPlugins();
  77. NEW(pbuttons, numberOfPlugs);
  78. KernelLog.String("DTPEditor Registered Plugins: "); KernelLog.Int(plugRegistry.GetNumberOfPlugins(), 0); KernelLog.Ln;
  79. plugListEntry := plugList.first; i := 0;
  80. (* Loop over plugs *)
  81. WHILE plugListEntry # NIL DO
  82. COPY(plugListEntry.pname, plugName);
  83. KernelLog.String("Initializing "); KernelLog.String(plugName); KernelLog.Ln;
  84. pbuttons[i] := CreatePluginButton(plugName);
  85. plugListEntry := plugListEntry.next; INC(i);
  86. END;
  87. (*
  88. plugName := "Rectangle";
  89. NEW(button); button.caption.SetAOC(plugName); button.alignment.Set(WMComponents.AlignTop);
  90. button.onClick.Add(SetPluginHandler);
  91. pbuttons[0] := button;
  92. plugName := "Image";
  93. NEW(button); button.caption.SetAOC(plugName); button.alignment.Set(WMComponents.AlignTop);
  94. button.onClick.Add(SetPluginHandler);
  95. pbuttons[1] := button;
  96. *)
  97. END LoadPlugins;
  98. PROCEDURE AddPlugins(): WMStandardComponents.Panel;
  99. VAR panel : WMStandardComponents.Panel;
  100. button: WMStandardComponents.Button;
  101. i : LONGINT;
  102. BEGIN
  103. NEW(panel); panel.alignment.Set(WMComponents.AlignTop); panel.bounds.SetHeight(30*numberOfPlugs);
  104. FOR i := 0 TO numberOfPlugs-1 DO
  105. button := pbuttons[i];
  106. panel.AddContent(button);
  107. END;
  108. RETURN panel;
  109. END AddPlugins;
  110. PROCEDURE CreateFormWindow() : WMComponents.VisualComponent;
  111. VAR
  112. panel, cpan : WMStandardComponents.Panel;
  113. button : WMStandardComponents.Button;
  114. label : WMStandardComponents.Label;
  115. manager : WMWindowManager.WindowManager;
  116. windowStyle : WMWindowManager.WindowStyle;
  117. panelColor : LONGINT;
  118. BEGIN
  119. manager := WMWindowManager.GetDefaultManager();
  120. windowStyle := manager.GetStyle();
  121. panelColor := windowStyle.bgColor;
  122. NEW(panel); panel.bounds.SetExtents(WINDOWWIDTH,WINDOWHEIGHT);
  123. panel.fillColor.Set(0FFFFFFFFH);
  124. panel.takesFocus.Set(TRUE);
  125. NEW(topToolbar); topToolbar.bounds.SetHeight(20);
  126. topToolbar.alignment.Set(WMComponents.AlignTop); topToolbar.fillColor.Set(panelColor);
  127. panel.AddContent(topToolbar);
  128. NEW(filenameEdit);
  129. filenameEdit.alignment.Set(WMComponents.AlignLeft);
  130. filenameEdit.multiLine.Set(FALSE); filenameEdit.bounds.SetWidth(200);
  131. topToolbar.AddContent(filenameEdit); filenameEdit.fillColor.Set(0FFFFFFFFH);
  132. filenameEdit.tv.textAlignV.Set(WMGraphics.AlignCenter);
  133. filenameEdit.tv.showBorder.Set(TRUE);
  134. filenameEdit.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  135. filenameEdit.onEnter.Add(LoadHandler);
  136. NEW(fileMenu); fileMenu.caption.SetAOC("Document"); fileMenu.alignment.Set(WMComponents.AlignLeft);
  137. fileMenu.SetExtPointerDownHandler(FileMenuHandler);fileMenu.bounds.SetWidth(80);
  138. topToolbar.AddContent(fileMenu);
  139. NEW(pageMenu); pageMenu.caption.SetAOC("Page"); pageMenu.alignment.Set(WMComponents.AlignLeft);
  140. pageMenu.SetExtPointerDownHandler(PageMenuHandler);
  141. topToolbar.AddContent(pageMenu);
  142. NEW(objectMenu); objectMenu.caption.SetAOC("Object"); objectMenu.alignment.Set(WMComponents.AlignLeft);
  143. objectMenu.SetExtPointerDownHandler(ObjectMenuHandler);
  144. topToolbar.AddContent(objectMenu);
  145. NEW(miscMenu); miscMenu.caption.SetAOC("Misc"); miscMenu.alignment.Set(WMComponents.AlignLeft);
  146. miscMenu.SetExtPointerDownHandler(MiscMenuHandler);
  147. topToolbar.AddContent(miscMenu);
  148. NEW(label); label.bounds.SetWidth(100); label.alignment.Set(WMComponents.AlignLeft);
  149. label.SetCaption(" "); label.fillColor.Set(panelColor);
  150. topToolbar.AddContent(label);
  151. (* (* linked masterpage *)
  152. NEW(masterLabel); masterLabel.bounds.SetWidth(100); masterLabel.alignment.Set(WMComponents.AlignLeft);
  153. masterLabel.SetCaption(" Linked Master:"); masterLabel.fillColor.Set(panelColor);
  154. topToolbar.AddContent(masterLabel);
  155. NEW(masterNumber);
  156. masterNumber.alignment.Set(WMComponents.AlignLeft);
  157. masterNumber.multiLine.Set(FALSE); masterNumber.bounds.SetWidth(150);
  158. masterNumber.fillColor.Set(0FFFFFFFFH);
  159. masterNumber.tv.textAlignV.Set(WMGraphics.AlignCenter);
  160. masterNumber.tv.showBorder.Set(TRUE);
  161. masterNumber.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  162. masterNumber.onEnter.Add(SetMasterHandler);
  163. masterNumber.SetAsString("none");
  164. topToolbar.AddContent(masterNumber);
  165. *)
  166. (* workspace *)
  167. NEW(workspace);
  168. workspace.alignment.Set(WMComponents.AlignClient);
  169. panel.AddContent(workspace);
  170. NEW(sideToolbar); sideToolbar.bounds.SetWidth(100);
  171. sideToolbar.alignment.Set(WMComponents.AlignLeft); sideToolbar.fillColor.Set(panelColor);
  172. workspace.AddContent(sideToolbar);
  173. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  174. label.SetCaption(" TOOLS"); label.fillColor.Set(panelColor);
  175. sideToolbar.AddContent(label);
  176. NEW(select); select.caption.SetAOC("Select"); select.alignment.Set(WMComponents.AlignTop);
  177. select.onClick.Add(SelectHandler);
  178. select.isToggle.Set(TRUE); select.SetPressed(TRUE);
  179. sideToolbar.AddContent(select);
  180. cbutton := select;
  181. (* cbutton.clDefault.Set(ACTIVEBUTTONCOLOR); *)
  182. (* cbutton.clDefault.Set(01010C080H); *)
  183. NEW(frame); frame.caption.SetAOC("Frame"); frame.alignment.Set(WMComponents.AlignTop);
  184. frame.onClick.Add(SetPluginHandler); (* frame.clDefault.Set(01010C080H); *)
  185. frame.isToggle.Set(TRUE);
  186. sideToolbar.AddContent(frame);
  187. (* ADD PLUGINS here *)
  188. pluginPanel := AddPlugins();
  189. sideToolbar.AddContent(pluginPanel);
  190. NEW(button); button.caption.SetAOC("## DEBUG ##"); button.alignment.Set(WMComponents.AlignTop);
  191. button.onClick.Add(TestHandler); button.clDefault.Set(000FF0080H);
  192. (* sideToolbar.AddContent(button); *)
  193. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  194. label.SetCaption(" VIEW"); label.fillColor.Set(panelColor);
  195. sideToolbar.AddContent(label);
  196. NEW(cpan); (* cpan.fillColor.Set(0FF0000FFH); *) cpan.bounds.SetWidth(100); cpan.bounds.SetHeight(40);
  197. cpan.alignment.Set(WMComponents.AlignTop);
  198. sideToolbar.AddContent(cpan);
  199. NEW(modeMaster); modeMaster.caption.SetAOC(" MasterPage"); modeMaster.alignment.Set(WMComponents.AlignTop);
  200. modeMaster.onClick.Add(MasterHandler);
  201. cpan.AddContent(modeMaster);
  202. NEW(modePreview); modePreview.caption.SetAOC(" PreviewMode"); modePreview.alignment.Set(WMComponents.AlignTop);
  203. modePreview.onClick.Add(PreviewHandler);
  204. cpan.AddContent(modePreview);
  205. (* linked masterpage *)
  206. NEW(masterLabel); masterLabel.bounds.SetHeight(16); masterLabel.alignment.Set(WMComponents.AlignTop);
  207. masterLabel.SetCaption(" Linked Master:"); masterLabel.fillColor.Set(panelColor);
  208. masterLabel.SetFont(WMGraphics.GetFont("Oberon", 10, {}));
  209. sideToolbar.AddContent(masterLabel);
  210. NEW(masterNumber);
  211. masterNumber.alignment.Set(WMComponents.AlignTop);
  212. masterNumber.multiLine.Set(FALSE); masterNumber.bounds.SetHeight(20);
  213. masterNumber.fillColor.Set(0FFFFFFFFH);
  214. masterNumber.tv.textAlignV.Set(WMGraphics.AlignCenter);
  215. masterNumber.tv.showBorder.Set(TRUE);
  216. masterNumber.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  217. masterNumber.onEnter.Add(SetMasterHandler);
  218. masterNumber.SetAsString("none");
  219. sideToolbar.AddContent(masterNumber);
  220. NEW(label); label.bounds.SetHeight(16); label.alignment.Set(WMComponents.AlignTop);
  221. label.SetFont(WMGraphics.GetFont("Oberon", 10, {}));
  222. label.SetCaption(" Page / Zoom:"); label.fillColor.Set(panelColor);
  223. sideToolbar.AddContent(label);
  224. (* |< << page >> >| *)
  225. NEW(cpan); (* cpan.fillColor.Set(0000000FFH); *) cpan.bounds.SetWidth(100); cpan.bounds.SetHeight(20);
  226. cpan.alignment.Set(WMComponents.AlignTop);
  227. sideToolbar.AddContent(cpan);
  228. NEW(button); button.caption.SetAOC("|<"); button.alignment.Set(WMComponents.AlignLeft);
  229. button.onClick.Add(FirstPageHandler); button.bounds.SetWidth(18);
  230. cpan.AddContent(button);
  231. NEW(button); button.caption.SetAOC("<<"); button.alignment.Set(WMComponents.AlignLeft);
  232. button.onClick.Add(PrevPageHandler); button.bounds.SetWidth(18);
  233. cpan.AddContent(button);
  234. NEW(pageNumber);
  235. pageNumber.alignment.Set(WMComponents.AlignLeft);
  236. pageNumber.multiLine.Set(FALSE); pageNumber.bounds.SetWidth(28);
  237. cpan.AddContent(pageNumber); pageNumber.fillColor.Set(0FFFFFFFFH);
  238. pageNumber.tv.textAlignV.Set(WMGraphics.AlignCenter);
  239. pageNumber.tv.showBorder.Set(TRUE);
  240. pageNumber.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  241. pageNumber.onEnter.Add(GoToPageHandler);
  242. pageNumber.SetAsString("0");
  243. NEW(button); button.caption.SetAOC(">>"); button.alignment.Set(WMComponents.AlignLeft);
  244. button.onClick.Add(NextPageHandler); button.bounds.SetWidth(18);
  245. cpan.AddContent(button);
  246. NEW(button); button.caption.SetAOC(">|"); button.alignment.Set(WMComponents.AlignLeft);
  247. button.onClick.Add(LastPageHandler); button.bounds.SetWidth(18);
  248. cpan.AddContent(button);
  249. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  250. label.SetCaption(" Zoom:"); label.fillColor.Set(panelColor);
  251. (* sideToolbar.AddContent(label); *)
  252. NEW(cpan); (* cpan.fillColor.Set(0000000FFH); *) cpan.bounds.SetHeight(20);
  253. cpan.alignment.Set(WMComponents.AlignTop);
  254. sideToolbar.AddContent(cpan);
  255. NEW(button); button.caption.SetAOC("-"); button.alignment.Set(WMComponents.AlignLeft);
  256. button.onClick.Add(ZoomUserHandler); button.bounds.SetWidth(50);
  257. cpan.AddContent(button);
  258. NEW(button); button.caption.SetAOC("+"); button.alignment.Set(WMComponents.AlignLeft);
  259. button.onClick.Add(ZoomUserHandler); button.bounds.SetWidth(50);
  260. cpan.AddContent(button);
  261. (* DrawPanel *)
  262. NEW(vScrollbar); vScrollbar.alignment.Set(WMComponents.AlignRight);
  263. workspace.AddContent(vScrollbar);
  264. NEW(hScrollbar); hScrollbar.alignment.Set(WMComponents.AlignBottom);
  265. hScrollbar.vertical.Set(FALSE);
  266. workspace.AddContent(hScrollbar);
  267. NEW(drawPanel); drawPanel.alignment.Set(WMComponents.AlignClient);
  268. (* Settings *)
  269. drawPanel.newPluginObject := CreateContent;
  270. drawPanel.ownerWindowSetFocus := SetActive;
  271. drawPanel.ownerWindowUpdatePageNumber := UpdatePageNumber;
  272. drawPanel.ownerWindowExitFullScreen := EscFullScreen;
  273. drawPanel.ShowGrid(gridON);
  274. drawPanel.SetScrollbars(hScrollbar, vScrollbar);
  275. workspace.AddContent(drawPanel);
  276. RETURN panel
  277. END CreateFormWindow;
  278. PROCEDURE &New*(c : WMRestorable.Context);
  279. VAR
  280. (* vc : WMComponents.VisualComponent;
  281. s : Strings.String; *)
  282. BEGIN
  283. IncCount;
  284. fileFormat := 0;
  285. previewON := FALSE; masterON := FALSE; gridON := TRUE;
  286. manager := WMWindowManager.GetDefaultManager();
  287. LoadPlugins;
  288. vc := CreateFormWindow();
  289. Init(vc.bounds.GetWidth(), vc.bounds.GetHeight(),FALSE);
  290. SetContent(vc);
  291. modified := FALSE;
  292. currentDocument := NIL;
  293. plugName := "none";
  294. IF c # NIL THEN
  295. (* restore the desktop *)
  296. WMRestorable.AddByContext(SELF, c);
  297. IF c.appData # NIL THEN
  298. (* xml := c.appData(XML.Element);
  299. s := xml.GetAttributeValue("fileFormat"); IF s # NIL THEN Strings.StrToInt(s^, fileFormat) END;
  300. s := xml.GetAttributeValue("firstLine");IF s # NIL THEN Strings.StrToInt(s^, fl) END;
  301. s := xml.GetAttributeValue("cursorPos");IF s # NIL THEN Strings.StrToInt(s^, cp) END;
  302. s := xml.GetAttributeValue("file");
  303. IF s # NIL THEN Load(s^, fileFormat) END;
  304. editor.tv.firstLine.Set(fl);
  305. editor.tv.cursor.SetPosition(cp) *)
  306. END
  307. ELSE WMWindowManager.DefaultAddWindow(SELF)
  308. END;
  309. SetTitle(Strings.NewString("DTPEditor"));
  310. (* NEW(props, SELF); props.Show; propertyOpen := TRUE; *)
  311. nDiagOpen := FALSE;
  312. scrollbar := TRUE;
  313. fullScreen := FALSE;
  314. END New;
  315. PROCEDURE CheckScrollbars*;
  316. BEGIN
  317. IF scrollbar THEN
  318. vScrollbar.visible.Set(TRUE); hScrollbar.visible.Set(TRUE)
  319. ELSE
  320. vScrollbar.visible.Set(FALSE); hScrollbar.visible.Set(FALSE)
  321. END
  322. END CheckScrollbars;
  323. PROCEDURE SetActive*;
  324. BEGIN
  325. manager:= WMWindowManager.GetDefaultManager();
  326. manager.SetFocus(SELF);
  327. drawPanel.SetFocus();
  328. END SetActive;
  329. PROCEDURE SetDocument(newdocument : DTPData.Document);
  330. BEGIN
  331. currentDocument := newdocument;
  332. END SetDocument;
  333. (*
  334. PROCEDURE GetDocument(): DTPData.Document;
  335. BEGIN
  336. RETURN currentDocument;
  337. END GetDocument;
  338. *)
  339. PROCEDURE SelectHandler(sender, data : ANY);
  340. VAR i : LONGINT;
  341. BEGIN
  342. drawPanel.selectionON := TRUE;
  343. (* cbutton.clDefault.Set(01010C080H); *) (* restore old Color *)
  344. (* reset toggles *)
  345. frame.SetPressed(FALSE);
  346. FOR i := 0 TO numberOfPlugs-1 DO
  347. pbuttons[i].SetPressed(FALSE);
  348. END;
  349. cbutton.Invalidate;
  350. cbutton := sender(WMStandardComponents.Button);
  351. (* cbutton.clDefault.Set(ACTIVEBUTTONCOLOR); *)
  352. cbutton.Invalidate;
  353. END SelectHandler;
  354. PROCEDURE SetPluginHandler(sender, data : ANY);
  355. VAR name, msg: ARRAY 32 OF CHAR;
  356. string: Strings.String;
  357. i : LONGINT;
  358. (* res : WORD; *)
  359. BEGIN
  360. drawPanel.selectionON := FALSE;
  361. msg := "";
  362. string := sender(WMStandardComponents.Button).caption.Get();
  363. drawPanel.activeTool := string;
  364. COPY(string^, name);
  365. COPY(name, plugName);
  366. KernelLog.String("Active Plugin: ");KernelLog.String(name); KernelLog.Ln;
  367. (* reset toggles *)
  368. select.SetPressed(FALSE);
  369. IF sender(WMStandardComponents.Button) # frame THEN frame.SetPressed(FALSE) END;
  370. FOR i := 0 TO numberOfPlugs-1 DO
  371. IF sender(WMStandardComponents.Button) # pbuttons[i] THEN
  372. pbuttons[i].SetPressed(FALSE)
  373. END
  374. END;
  375. (* cbutton.clDefault.Set(01010C080H); *)(* restore old Color *)
  376. cbutton.Invalidate;
  377. cbutton := sender(WMStandardComponents.Button);
  378. (* cbutton.clDefault.Set(ACTIVEBUTTONCOLOR); *)
  379. cbutton.Invalidate;
  380. (* (* set the current Plugin *)
  381. IF name = "Frame" THEN
  382. (* Commands.Call("DTPFrame.Set", {}, res, msg); *)
  383. (* drawPanel.newPluginObject := CreateContent(); *)
  384. ELSIF name = "Rectangle" THEN
  385. ELSIF name = "Image" THEN
  386. (* Commands.Call("DTPImage.Set", {}, res, msg); *)
  387. ELSE
  388. END;
  389. *)
  390. END SetPluginHandler;
  391. PROCEDURE CreateContent*():DTPData.ContentObject;
  392. VAR content : DTPData.ContentObject;
  393. BEGIN
  394. IF plugName = "Frame" THEN
  395. KernelLog.String("Create Content Object: Empty Frame"); KernelLog.Ln;
  396. content := DTPData.NewObject();
  397. ELSE
  398. content := plugRegistry.InstantiatePlugin(plugName);
  399. content.redrawProc := drawPanel.InvalidateCurrentFrame;
  400. content.updatePropsPosition := drawPanel.SetContentPropsPosition;
  401. KernelLog.String("Create Content Object: "); KernelLog.String(plugName); KernelLog.Ln;
  402. END;
  403. content.OnCreate;
  404. (* IF plugName = "Frame" THEN
  405. KernelLog.String("..Creating Frame.."); KernelLog.Ln;
  406. content := DTPFrame.NewObject();
  407. ELSIF plugName = "Rectangle" THEN
  408. KernelLog.String("..Creating Rectangle.."); KernelLog.Ln;
  409. content := plugRegistry.InstantiatePlugin("Rectangle");
  410. ELSIF plugName = "Image" THEN
  411. KernelLog.String("..Creating Image.."); KernelLog.Ln;
  412. content := plugRegistry.InstantiatePlugin("Image");
  413. ELSE
  414. END;
  415. *)
  416. RETURN content;
  417. END CreateContent;
  418. PROCEDURE TestHandler(sender, data : ANY);
  419. VAR str : ARRAY 16 OF CHAR;
  420. i: LONGINT;
  421. BEGIN
  422. IF currentDocument = NIL THEN
  423. KernelLog.String("##DEBUG: No Document present");
  424. ELSE
  425. Strings.FloatToStr(currentDocument.GetPageWidth(), 0,9,0, str);
  426. KernelLog.String("##DEBUG: current PageWidth: "); KernelLog.String(str); KernelLog.Ln;
  427. Strings.FloatToStr(currentDocument.GetPageHeight(), 0,9,0, str);
  428. KernelLog.String("##DEBUG: current PageHeight: "); KernelLog.String(str); KernelLog.Ln;
  429. Strings.FloatToStr(drawPanel.GetZoomFactor(), 0,9,0, str);
  430. KernelLog.String("##DEBUG: current zoomFactor: "); KernelLog.String(str); KernelLog.Ln;
  431. i := 0; cpage := currentDocument.GetCurrentPage();
  432. IF cpage # NIL THEN
  433. cframe := cpage.GetFirstFrame();
  434. WHILE cframe # NIL DO
  435. cframe := cframe.next;
  436. INC(i);
  437. END;
  438. KernelLog.String("##DEBUG: Frames on current page: "); KernelLog.Int(i, 0); KernelLog.Ln;
  439. END;
  440. END;
  441. (* drawPanel.ready := TRUE;
  442. drawPanel.Invalidate;
  443. *)
  444. END TestHandler;
  445. PROCEDURE MasterHandler(sender, data: ANY);
  446. BEGIN
  447. IF masterON THEN
  448. masterON := FALSE;
  449. modeMaster.caption.SetAOC("MasterPage");
  450. masterNumber.fillColor.Set(0FFFFFFFFH); masterNumber.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  451. masterLabel.caption.SetAOC(" Linked Master:");
  452. ELSE
  453. masterON := TRUE;
  454. modeMaster.caption.SetAOC("Document");
  455. masterNumber.fillColor.Set(0BBBBBBFFH); masterNumber.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  456. masterLabel.caption.SetAOC(" Master Name:");
  457. END;
  458. drawPanel.SetMasterEditMode(masterON);
  459. drawPanel.Invalidate;
  460. drawPanel.UpdateProps;
  461. drawPanel.UpdateContentProps;
  462. UpdatePageNumber;
  463. END MasterHandler;
  464. PROCEDURE PreviewHandler(sender, data: ANY);
  465. VAR
  466. BEGIN
  467. IF previewON THEN
  468. previewON := FALSE;
  469. modePreview.caption.SetAOC("PreviewMode");
  470. ELSE
  471. previewON := TRUE;
  472. modePreview.caption.SetAOC("EditMode");
  473. END;
  474. (* Remove Current Selection to avoid updating the Content Property Window *)
  475. IF ~masterON THEN
  476. cpage := currentDocument.GetCurrentPage();
  477. ELSE
  478. cpage := currentDocument.GetCurrentMasterPage();
  479. END;
  480. cpage.SetCurrentFrame(NIL);
  481. drawPanel.SetPreviewMode(previewON);
  482. drawPanel.UpdateProps;
  483. drawPanel.UpdateContentProps;
  484. drawPanel.Invalidate;
  485. SetActive;
  486. END PreviewHandler;
  487. PROCEDURE FileMenuHandler(x, y : LONGINT; keys : SET; VAR handled : BOOLEAN);
  488. VAR rectangle: WMRectangles.Rectangle;
  489. BEGIN
  490. NEW(popup);
  491. popup.Add("New", NewHandler);
  492. popup.Add("Open", LoadHandler);
  493. popup.Add("Save", StoreHandler);
  494. popup.Add("Export Page", ExportHandler);
  495. handled := TRUE;
  496. rectangle := fileMenu.bounds.Get();
  497. popup.Popup(bounds.l + rectangle.l, bounds.t + rectangle.b);
  498. END FileMenuHandler;
  499. PROCEDURE ObjectMenuHandler(x, y: LONGINT; keys: SET; VAR handled: BOOLEAN);
  500. VAR rectangle: WMRectangles.Rectangle;
  501. BEGIN
  502. NEW(popup);
  503. popup.Add("Cut", ObjectCutHandler);
  504. popup.Add("Copy", ObjectCopyHandler);
  505. popup.Add("Paste", ObjectPasteHandler);
  506. popup.Add("Delete", ObjectDeleteHandler);
  507. popup.Add("Move Front", ObjectToFrontHandler);
  508. popup.Add("Front Step", ObjectFrontStepHandler);
  509. popup.Add("Back Step", ObjectBackStepHandler);
  510. popup.Add("Move Back", ObjectToBackHandler);
  511. popup.Add("Select Previous", ObjectPrevHandler);
  512. popup.Add("Select Next", ObjectNextHandler);
  513. handled := TRUE;
  514. rectangle := objectMenu.bounds.Get();
  515. popup.Popup(bounds.l + rectangle.l, bounds.t + rectangle.b);
  516. END ObjectMenuHandler;
  517. PROCEDURE PageMenuHandler(x, y: LONGINT; keys: SET; VAR handled: BOOLEAN);
  518. VAR rectangle: WMRectangles.Rectangle;
  519. BEGIN
  520. NEW(popup);
  521. popup.Add("Insert Before", AddBeforePageHandler);
  522. popup.Add("Insert After", AddAfterPageHandler);
  523. popup.Add("Delete", DeletePageHandler);
  524. handled := TRUE;
  525. rectangle := pageMenu.bounds.Get();
  526. popup.Popup(bounds.l + rectangle.l, bounds.t + rectangle.b);
  527. END PageMenuHandler;
  528. PROCEDURE MiscMenuHandler(x, y: LONGINT; keys: SET; VAR handled: BOOLEAN);
  529. VAR rectangle: WMRectangles.Rectangle;
  530. BEGIN
  531. NEW(popup);
  532. popup.Add("StyleEditor", MiscStyleEditorHandler);
  533. popup.Add("Snap To Grid", SnapHandler);
  534. popup.Add("Toggle Grid", GridHandler);
  535. popup.Add("Show Properties", PropsHandler);
  536. popup.Add("FullScreen", FullScreenHandler);
  537. popup.Add("Zoom Fit Doc", ZoomHandler);
  538. popup.Add("Zoom Fit Width", ZoomHandler);
  539. popup.Add("Zoom Fit Height", ZoomHandler);
  540. popup.Add("Zoom Fit Frame", ZoomHandler);
  541. popup.Add("Zoom Orig. Size", ZoomHandler);
  542. (* popup.Add("Reload Plugins", PlugHandler); *)
  543. handled := TRUE;
  544. rectangle := miscMenu.bounds.Get();
  545. popup.Popup(bounds.l + rectangle.l, bounds.t + rectangle.b);
  546. END MiscMenuHandler;
  547. PROCEDURE ZoomHandler(sender, data: ANY);
  548. VAR button: WMStandardComponents.Button;
  549. tempString: Strings.String;
  550. BEGIN
  551. popup.Close;
  552. IF sender IS WMStandardComponents.Button THEN
  553. button := sender(WMStandardComponents.Button);
  554. tempString := button.caption.Get();
  555. IF (tempString^ = "Zoom Fit Doc") THEN
  556. drawPanel.SetZoomMode(0);
  557. ELSIF (tempString^ = "Zoom Fit Width") THEN
  558. drawPanel.SetZoomMode(1);
  559. ELSIF (tempString^ = "Zoom Fit Height") THEN
  560. drawPanel.SetZoomMode(2);
  561. ELSIF (tempString^ = "Zoom Fit Frame") THEN
  562. drawPanel.SetZoomMode(3);
  563. ELSIF (tempString^ = "Zoom Orig. Size") THEN
  564. drawPanel.SetZoomMode(4);
  565. ELSE
  566. drawPanel.SetZoomMode(0);
  567. END;
  568. END;
  569. END ZoomHandler;
  570. PROCEDURE ZoomUserHandler(sender, data: ANY);
  571. VAR button : WMStandardComponents.Button;
  572. tempString: Strings.String;
  573. BEGIN
  574. IF sender IS WMStandardComponents.Button THEN
  575. button := sender(WMStandardComponents.Button);
  576. tempString := button.caption.Get();
  577. IF (tempString^ = "-") THEN
  578. drawPanel.ZoomDecrease;
  579. drawPanel.SetZoomMode(5);
  580. ELSIF (tempString^ = "+") THEN
  581. drawPanel.ZoomIncrease;
  582. drawPanel.SetZoomMode(5);
  583. ELSE
  584. END;
  585. END;
  586. END ZoomUserHandler;
  587. PROCEDURE GridHandler(sender, data: ANY);
  588. BEGIN
  589. IF gridON THEN
  590. gridON := FALSE;
  591. drawPanel.ShowGrid(gridON);
  592. ELSE
  593. gridON := TRUE;
  594. drawPanel.ShowGrid(gridON);
  595. END;
  596. popup.Close;
  597. drawPanel.Invalidate;
  598. END GridHandler;
  599. PROCEDURE SnapHandler(sender, data: ANY);
  600. BEGIN
  601. drawPanel.SetSnap(~drawPanel.GetSnap());
  602. popup.Close;
  603. END SnapHandler;
  604. PROCEDURE FullScreenHandler*(sender, data: ANY);
  605. VAR rect : WMRectangles.Rectangle;
  606. height, width : LONGINT;
  607. view : WMWindowManager.ViewPort;
  608. BEGIN
  609. popup.Close;
  610. view := WMWindowManager.GetDefaultView();
  611. IF ~fullScreen THEN
  612. (* drawPanel.SetZoomMode(0); *)
  613. rect := bounds; fullScreen := TRUE;
  614. currentWidth := GetWidth(); currentHeight := GetHeight();
  615. (* width := SCREENWIDTH+160; height := SCREENHEIGHT+85; *)
  616. width := ENTIER(view.range.r - view.range.l) + ((bounds.r - bounds.l) - (drawPanel.bounds.GetWidth())) + 45;
  617. height := ENTIER(view.range.b - view.range.t) + ((bounds.b - bounds.t) - (drawPanel.bounds.GetHeight()) + 45);
  618. manager := WMWindowManager.GetDefaultManager();
  619. manager.SetWindowPos(SELF, ENTIER(view.range.l) - ((bounds.r - bounds.l) - (drawPanel.bounds.GetWidth()))- 15,
  620. ENTIER(view.range.t) - ((bounds.b - bounds.t) - (drawPanel.bounds.GetHeight())) - 15);
  621. manager.SetWindowSize(SELF, width, height);
  622. Resized(width, height);
  623. ELSE
  624. fullScreen := FALSE;
  625. width := currentWidth; height := currentHeight;
  626. manager := WMWindowManager.GetDefaultManager();
  627. manager.SetWindowSize(SELF, width, height);
  628. manager.SetWindowPos(SELF, ENTIER(view.range.l), ENTIER(view.range.t));
  629. Resized(width, height);
  630. END;
  631. drawPanel.Resized;
  632. END FullScreenHandler;
  633. PROCEDURE EscFullScreen*;
  634. VAR height, width : LONGINT;
  635. BEGIN
  636. IF fullScreen THEN
  637. fullScreen := FALSE;
  638. width := currentWidth; height := currentHeight;
  639. manager := WMWindowManager.GetDefaultManager();
  640. manager.SetWindowSize(SELF, width, height);
  641. manager.SetWindowPos(SELF, bounds.l+135, bounds.t+70);
  642. Resized(width, height);
  643. END;
  644. END EscFullScreen;
  645. PROCEDURE LoadHandler(sender, data : ANY);
  646. VAR filename : ARRAY 256 OF CHAR;
  647. BEGIN
  648. filenameEdit.GetAsString(filename);
  649. Load(filename, fileFormat);
  650. IF popup # NIL THEN popup.Close; END;
  651. END LoadHandler;
  652. PROCEDURE LoadCharacterStyle(cstyle : DTPData.CharacterStyleObject);
  653. VAR style : Texts.CharacterStyle;
  654. BEGIN
  655. NEW(style);
  656. COPY(cstyle.name, style.name);
  657. COPY(cstyle.family, style.family);
  658. style.style := cstyle.style;
  659. style.size := DTPUtilities.FloatToFixp(cstyle.size);
  660. style.leading := DTPUtilities.FloatToFixp(cstyle.leading);
  661. style.baselineShift := DTPUtilities.FloatToFixp(cstyle.baselineShift);
  662. style.color := cstyle.color;
  663. style.bgColor := cstyle.bgColor;
  664. style.tracking := DTPUtilities.FloatToFixp(cstyle.tracking);
  665. (* style.kerning := cstyle.kerning; *)
  666. style.scaleHorizontal := DTPUtilities.FloatToFixp(cstyle.scaleHorizontal);
  667. style.scaleVertical := DTPUtilities.FloatToFixp(cstyle.scaleVertical);
  668. Texts.AddCharacterStyle(style);
  669. END LoadCharacterStyle;
  670. PROCEDURE LoadParagraphStyle(pstyle : DTPData.ParagraphStyleObject);
  671. VAR style : Texts.ParagraphStyle;
  672. cstyle : Texts.CharacterStyle;
  673. BEGIN
  674. NEW(style);
  675. COPY(pstyle.name, style.name);
  676. style.alignment := pstyle.alignment;
  677. style.firstIndent := DTPUtilities.FloatToFixp(pstyle.firstIndent);
  678. style.leftIndent := DTPUtilities.FloatToFixp(pstyle.leftIndent);
  679. style.rightIndent := DTPUtilities.FloatToFixp(pstyle.rightIndent);
  680. style.spaceBefore := DTPUtilities.FloatToFixp(pstyle.spaceBefore);
  681. style.spaceAfter := DTPUtilities.FloatToFixp(pstyle.spaceAfter);
  682. NEW(cstyle);
  683. COPY(pstyle.charStyle.name, cstyle.name);
  684. COPY(pstyle.charStyle.family, cstyle.family);
  685. cstyle.style := pstyle.charStyle.style;
  686. cstyle.size := DTPUtilities.FloatToFixp(pstyle.charStyle.size);
  687. cstyle.leading := DTPUtilities.FloatToFixp(pstyle.charStyle.leading);
  688. cstyle.baselineShift := DTPUtilities.FloatToFixp(pstyle.charStyle.baselineShift);
  689. cstyle.color := pstyle.charStyle.color;
  690. cstyle.bgColor := pstyle.charStyle.bgColor;
  691. cstyle.tracking := DTPUtilities.FloatToFixp(pstyle.charStyle.tracking);
  692. (* cstyle.kerning := pstyle.charStyle.kerning; *)
  693. cstyle.scaleHorizontal := DTPUtilities.FloatToFixp(pstyle.charStyle.scaleHorizontal);
  694. cstyle.scaleVertical := DTPUtilities.FloatToFixp(pstyle.charStyle.scaleVertical);
  695. style.charStyle := cstyle;
  696. Texts.AddParagraphStyle(style);
  697. END LoadParagraphStyle;
  698. PROCEDURE Load(CONST filename : ARRAY OF CHAR; format : LONGINT);
  699. VAR tempString : ARRAY 256 OF CHAR;
  700. parser : XMLParser.Parser;
  701. scanner : XMLScanner.Scanner;
  702. reader : Files.Reader;
  703. f : Files.File;
  704. BEGIN
  705. fileFormat := format;
  706. filenameEdit.SetAsString(filename);
  707. (* Load Style File *)
  708. COPY(filename, tempString);
  709. Strings.Append(tempString, ".Style.XML");
  710. f := Files.Old(tempString);
  711. IF f = NIL THEN RETURN END;
  712. NEW(reader, f, 0);
  713. NEW(scanner, reader);
  714. NEW(parser, scanner);
  715. XMLdocStyle := parser.Parse();
  716. (* Load Content File *)
  717. COPY(filename, tempString);
  718. Strings.Append(tempString, ".Content.XML");
  719. f := Files.Old(tempString);
  720. IF f = NIL THEN RETURN END;
  721. NEW(reader, f, 0);
  722. NEW(scanner, reader);
  723. NEW(parser, scanner);
  724. XMLdocContent := parser.Parse();
  725. (* Load Layout File *)
  726. COPY(filename, tempString);
  727. Strings.Append(tempString, ".Layout.XML");
  728. f := Files.Old(tempString);
  729. IF f = NIL THEN RETURN END;
  730. NEW(reader, f, 0);
  731. NEW(scanner, reader);
  732. NEW(parser, scanner);
  733. XMLdocLayout := parser.Parse();
  734. BuildDocFromXML;
  735. modified := FALSE;
  736. END Load;
  737. PROCEDURE BuildDocFromXML;
  738. VAR built : DTPData.Document;
  739. root: XML.Element;
  740. cont, pagecont: XMLObjects.Enumerator;
  741. contptr, ptr: ANY; str, name : Strings.String;
  742. pStyle: DTPData.ParagraphStyleObject;
  743. cStyle: DTPData.CharacterStyleObject;
  744. content : DTPData.ContentObject;
  745. page : DTPData.PageObject; mpage: DTPData.MasterPageObject;
  746. frame : DTPData.FrameObject;
  747. tempReal: LONGREAL; tempInt, res : LONGINT; tempBool: BOOLEAN;
  748. mt, mb, ml, mr: REAL;
  749. BEGIN
  750. NEW(built, 0, 0, 0, 0, 0, 0, FALSE);
  751. (* build styleArray *)
  752. root := XMLdocStyle.GetRoot();
  753. cont := root.GetContents(); cont.Reset();
  754. WHILE cont.HasMoreElements() DO
  755. ptr := cont.GetNext();
  756. IF ptr IS XML.Element THEN
  757. str := ptr(XML.Element).GetName();
  758. (* KernelLog.String(str^); KernelLog.Ln; *)
  759. IF (str # NIL) & (str^ = "character-style") THEN (* character styles *)
  760. NEW(cStyle);
  761. str := ptr(XML.Element).GetAttributeValue("name"); IF str # NIL THEN COPY(str^, cStyle.name) END;
  762. str := ptr(XML.Element).GetAttributeValue("font-family"); IF str # NIL THEN COPY(str^, cStyle.family) END;
  763. str := ptr(XML.Element).GetAttributeValue("font-style");
  764. IF str # NIL THEN
  765. IF (str^ = "0") THEN cStyle.style := {};
  766. ELSIF (str^ = "1") THEN cStyle.style := {0};
  767. ELSIF (str^ = "2") THEN cStyle.style := {1};
  768. ELSIF (str^ = "3") THEN cStyle.style := {0,1};
  769. ELSE cStyle.style := {};
  770. END;
  771. END;
  772. str := ptr(XML.Element).GetAttributeValue("font-size"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.size := SHORT(tempReal); END;
  773. str := ptr(XML.Element).GetAttributeValue("leading"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.leading := SHORT(tempReal); END;
  774. str := ptr(XML.Element).GetAttributeValue("baseline-shift"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.baselineShift := SHORT(tempReal); END;
  775. str := ptr(XML.Element).GetAttributeValue("color"); IF str # NIL THEN Strings.HexStrToInt(str^, tempInt, res); cStyle.color := tempInt; END;
  776. str := ptr(XML.Element).GetAttributeValue("bgcolor"); IF str # NIL THEN Strings.HexStrToInt(str^, tempInt, res); cStyle.bgColor := tempInt; END;
  777. str := ptr(XML.Element).GetAttributeValue("tracking"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.tracking := SHORT(tempReal); END;
  778. str := ptr(XML.Element).GetAttributeValue("kerning"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.kerning := SHORT(tempReal); END;
  779. str := ptr(XML.Element).GetAttributeValue("h-scale"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.scaleHorizontal := SHORT(tempReal); END;
  780. str := ptr(XML.Element).GetAttributeValue("v-scale"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); cStyle.scaleVertical := SHORT(tempReal); END;
  781. built.AddStyle(cStyle);
  782. LoadCharacterStyle(cStyle); (* Load the Style into Texts *)
  783. ELSIF (str # NIL) & (str^ = "paragraph-style") THEN (* paragraph styles *)
  784. NEW(pStyle);
  785. str := ptr(XML.Element).GetAttributeValue("name"); IF str # NIL THEN COPY(str^, pStyle.name) END;
  786. str := ptr(XML.Element).GetAttributeValue("alignment"); IF str # NIL THEN Strings.StrToInt(str^, pStyle.alignment) END;
  787. str := ptr(XML.Element).GetAttributeValue("first-indent"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); pStyle.firstIndent := SHORT(tempReal); END;
  788. str := ptr(XML.Element).GetAttributeValue("left-indent"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); pStyle.leftIndent := SHORT(tempReal); END;
  789. str := ptr(XML.Element).GetAttributeValue("right-indent"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); pStyle.rightIndent := SHORT(tempReal); END;
  790. str := ptr(XML.Element).GetAttributeValue("space-before"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); pStyle.spaceBefore := SHORT(tempReal); END;
  791. str := ptr(XML.Element).GetAttributeValue("space-after"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); pStyle.spaceAfter := SHORT(tempReal); END;
  792. str := ptr(XML.Element).GetAttributeValue("character-style");
  793. IF str # NIL THEN
  794. cStyle := built.GetCharacterStyleByName(str^);
  795. IF cStyle # NIL THEN pStyle.charStyle := cStyle; END;
  796. END;
  797. built.AddStyle(pStyle);
  798. LoadParagraphStyle(pStyle);
  799. END;
  800. END;
  801. END;
  802. (* build contentArray *)
  803. root := XMLdocContent.GetRoot();
  804. cont := root.GetContents(); cont.Reset();
  805. WHILE cont.HasMoreElements() DO
  806. ptr := cont.GetNext(); contptr := ptr;
  807. IF ptr IS XML.Element THEN
  808. str := ptr(XML.Element).GetName();
  809. (* KernelLog.String(str^); KernelLog.Ln; *)
  810. IF (str # NIL) & (str^ = "node") THEN (* contents *)
  811. name := ptr(XML.Element).GetAttributeValue("name");
  812. pagecont := ptr(XML.Element).GetContents(); pagecont.Reset();
  813. WHILE pagecont.HasMoreElements() DO
  814. ptr := pagecont.GetNext();
  815. IF ptr IS XML.Element THEN
  816. str := ptr(XML.Element).GetAttributeValue("name");
  817. IF (str # NIL) & (str^ = "type") THEN
  818. str := ptr(XML.Element).GetAttributeValue("value");
  819. IF str # NIL THEN (* instantiate plugin *)
  820. (* KernelLog.String(str^); *)
  821. IF str^ = "Frame" THEN
  822. content := DTPData.NewObject();
  823. ELSE
  824. content := plugRegistry.InstantiatePlugin(str^);
  825. END;
  826. IF content # NIL THEN
  827. content.contentName := name;
  828. content.ownerDoc := built;
  829. content.redrawProc := drawPanel.InvalidateCurrentFrame;
  830. content.updatePropsPosition := drawPanel.SetContentPropsPosition;
  831. content.Load(contptr(XML.Element));
  832. built.AddContent(content);
  833. ELSE
  834. KernelLog.String("DTPEditor Load ERROR: plugin not found - cannot load object"); KernelLog.Ln;
  835. content := DTPData.NewObject();
  836. content.contentName := name;
  837. content.ownerDoc := built;
  838. content.redrawProc := drawPanel.InvalidateCurrentFrame;
  839. content.updatePropsPosition := drawPanel.SetContentPropsPosition;
  840. built.AddContent(content);
  841. END;
  842. END;
  843. END;
  844. END;
  845. END;
  846. END;
  847. END;
  848. END;
  849. (* Fix all Links in ContentArray *)
  850. built.FixContents;
  851. (* build layout & wire styles/contents *)
  852. root := XMLdocLayout.GetRoot();
  853. IF root # NIL THEN (* load document attributes *)
  854. str := root.GetAttributeValue("page-width"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); built.SetPageWidth(SHORT(tempReal)) END;
  855. str := root.GetAttributeValue("page-height"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); built.SetPageHeight(SHORT(tempReal)) END;
  856. str := root.GetAttributeValue("margin-top"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mt := SHORT(tempReal) END;
  857. str := root.GetAttributeValue("margin-bottom"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mb := SHORT(tempReal) END;
  858. str := root.GetAttributeValue("margin-left"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); ml := SHORT(tempReal) END;
  859. str := root.GetAttributeValue("margin-right"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mr := SHORT(tempReal) END;
  860. built.SetMargins(mt, mb, ml, mr);
  861. str := root.GetAttributeValue("facing-pages"); IF str # NIL THEN Strings.StrToBool(str^, tempBool); built.SetFacingPages(tempBool) END;
  862. END;
  863. cont := root.GetContents(); cont.Reset();
  864. WHILE cont.HasMoreElements() DO
  865. ptr := cont.GetNext();
  866. IF ptr IS XML.Element THEN
  867. str := ptr(XML.Element).GetName();
  868. (* KernelLog.String(str^); KernelLog.Ln; *)
  869. IF (str # NIL) & (str^ = "masterpage") THEN (* masterpage *)
  870. str := ptr(XML.Element).GetAttributeValue("name");
  871. built.AddMasterPage(TRUE); page := built.GetLastMasterPage();
  872. IF str # NIL THEN page(DTPData.MasterPageObject).mpageName := str; END;
  873. pagecont := ptr(XML.Element).GetContents(); pagecont.Reset();
  874. WHILE pagecont.HasMoreElements() DO
  875. ptr := pagecont.GetNext();
  876. IF ptr IS XML.Element THEN
  877. str := ptr(XML.Element).GetName();
  878. (* KernelLog.String(str^); KernelLog.Ln; *)
  879. IF (str # NIL) & (str^ = "guide") THEN (* guide *)
  880. str := ptr(XML.Element).GetAttributeValue("type");
  881. IF (str # NIL) & (str^ = "horizontal") THEN tempBool := TRUE ELSE tempBool := FALSE; END;
  882. str := ptr(XML.Element).GetAttributeValue("position"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); page.AddGuide(SHORT(tempReal), tempBool) END;
  883. ELSIF (str # NIL) & (str^ = "frame") THEN (* frame *)
  884. str := ptr(XML.Element).GetAttributeValue("x"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mt := SHORT(tempReal); END;
  885. str := ptr(XML.Element).GetAttributeValue("y"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mb := SHORT(tempReal); END;
  886. str := ptr(XML.Element).GetAttributeValue("width"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); ml := SHORT(tempReal); END;
  887. str := ptr(XML.Element).GetAttributeValue("height"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mr := SHORT(tempReal); END;
  888. page.AddFrame(mt, mb, ml, mr); frame := page.GetLastFrame();
  889. str := ptr(XML.Element).GetAttributeValue("name"); IF str # NIL THEN frame.SetName(str); END;
  890. str := ptr(XML.Element).GetAttributeValue("type"); IF str # NIL THEN frame.SetType(str); END;
  891. str := ptr(XML.Element).GetAttributeValue("textwrap"); IF (str # NIL) & (str^ = "1") THEN frame.SetWrap(TRUE); END;
  892. str := ptr(XML.Element).GetAttributeValue("twrap-top"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); mt := SHORT(tempReal); ELSE mt := 0 END;
  893. str := ptr(XML.Element).GetAttributeValue("twrap-bottom"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); mb := SHORT(tempReal); ELSE mb := 0 END;
  894. str := ptr(XML.Element).GetAttributeValue("twrap-left"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); ml := SHORT(tempReal); ELSE ml := 0 END;
  895. str := ptr(XML.Element).GetAttributeValue("twrap-right"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); mr := SHORT(tempReal); ELSE mr := 0 END;
  896. frame.SetWrapSize(mt, mb, ml, mr);
  897. str := ptr(XML.Element).GetAttributeValue("z-index"); IF str # NIL THEN Strings.StrToInt(str^, tempInt); END; (* not yet implemented *)
  898. str := ptr(XML.Element).GetAttributeValue("frame-content");
  899. IF str # NIL THEN
  900. content := built.GetContentByName(str^);
  901. IF content # NIL THEN
  902. frame.SetContent(content);
  903. END;
  904. END;
  905. END;
  906. END;
  907. END;
  908. page.currentFrame := NIL;
  909. ELSIF (str # NIL) & (str^ = "page") THEN (* page *)
  910. str := ptr(XML.Element).GetAttributeValue("masterpage");
  911. built.AddPage(TRUE); page := built.GetLastPage();
  912. IF str # NIL THEN
  913. mpage := built.GetMasterByName(str);
  914. page.masterpage := mpage;
  915. END;
  916. pagecont := ptr(XML.Element).GetContents(); pagecont.Reset();
  917. WHILE pagecont.HasMoreElements() DO
  918. ptr := pagecont.GetNext();
  919. IF ptr IS XML.Element THEN
  920. str := ptr(XML.Element).GetName();
  921. (* KernelLog.String(str^); KernelLog.Ln; *)
  922. IF (str # NIL) & (str^ = "guide") THEN (* guide *)
  923. str := ptr(XML.Element).GetAttributeValue("type");
  924. IF (str # NIL) & (str^ = "horizontal") THEN tempBool := TRUE ELSE tempBool := FALSE; END;
  925. str := ptr(XML.Element).GetAttributeValue("position"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); page.AddGuide(SHORT(tempReal), tempBool) END;
  926. ELSIF (str # NIL) & (str^ = "frame") THEN (* frame *)
  927. str := ptr(XML.Element).GetAttributeValue("x"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mt := SHORT(tempReal); END;
  928. str := ptr(XML.Element).GetAttributeValue("y"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mb := SHORT(tempReal); END;
  929. str := ptr(XML.Element).GetAttributeValue("width"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); ml := SHORT(tempReal); END;
  930. str := ptr(XML.Element).GetAttributeValue("height"); IF str # NIL THEN Strings.StrToFloat(str^, tempReal); mr := SHORT(tempReal); END;
  931. page.AddFrame(mt, mb, ml, mr); frame := page.GetLastFrame();
  932. str := ptr(XML.Element).GetAttributeValue("name"); IF str # NIL THEN frame.SetName(str); END;
  933. str := ptr(XML.Element).GetAttributeValue("type"); IF str # NIL THEN frame.SetType(str); END;
  934. str := ptr(XML.Element).GetAttributeValue("textwrap"); IF (str # NIL) & (str^ = "1") THEN frame.SetWrap(TRUE); END;
  935. str := ptr(XML.Element).GetAttributeValue("twrap-top"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); mt := SHORT(tempReal); ELSE mt := 0 END;
  936. str := ptr(XML.Element).GetAttributeValue("twrap-bottom"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); mb := SHORT(tempReal); ELSE mb := 0 END;
  937. str := ptr(XML.Element).GetAttributeValue("twrap-left"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); ml := SHORT(tempReal); ELSE ml := 0 END;
  938. str := ptr(XML.Element).GetAttributeValue("twrap-right"); IF (str # NIL) THEN Strings.StrToFloat(str^, tempReal); mr := SHORT(tempReal); ELSE mr := 0 END;
  939. frame.SetWrapSize(mt, mb, ml, mr);
  940. str := ptr(XML.Element).GetAttributeValue("z-index"); IF str # NIL THEN Strings.StrToInt(str^, tempInt); END; (* not yet implemented *)
  941. str := ptr(XML.Element).GetAttributeValue("frame-content");
  942. IF str # NIL THEN
  943. content := built.GetContentByName(str^);
  944. IF content # NIL THEN
  945. frame.SetContent(content);
  946. END;
  947. END;
  948. END;
  949. END;
  950. END;
  951. page.currentFrame := NIL;
  952. END;
  953. END;
  954. END;
  955. (* set current to the built Document *)
  956. SetDocument(built);
  957. drawPanel.SetDocument(built);
  958. drawPanel.ZoomFitDoc;
  959. FirstPageHandler(NIL, NIL);
  960. UpdatePageNumber;
  961. drawPanel.Resized;
  962. drawPanel.ready := TRUE;
  963. drawPanel.Invalidate;
  964. END BuildDocFromXML;
  965. PROCEDURE StoreHandler(sender, data : ANY);
  966. VAR filename : ARRAY 256 OF CHAR;
  967. BEGIN
  968. filenameEdit.GetAsString(filename);
  969. (* KernelLog.String("Saving file: "); KernelLog.String(filename); KernelLog.Ln; *)
  970. Store(filename, fileFormat);
  971. popup.Close;
  972. END StoreHandler;
  973. PROCEDURE Store(CONST filename : ARRAY OF CHAR; format : LONGINT);
  974. VAR tempString : ARRAY 256 OF CHAR;
  975. string : Strings.String;
  976. w : Files.Writer; f : Files.File;
  977. cStyles : DTPData.CStyles; pStyle : DTPData.ParagraphStyleObject;
  978. pStyles : DTPData.PStyles; cStyle : DTPData.CharacterStyleObject;
  979. contents : DTPData.Contents; content : DTPData.ContentObject;
  980. page : DTPData.PageObject;
  981. mpage: DTPData.MasterPageObject;
  982. frame : DTPData.FrameObject;
  983. guide : DTPData.GuideObject;
  984. i : LONGINT; style : SET;
  985. BEGIN
  986. filenameEdit.SetAsString(filename);
  987. (* -- Save Style File -- *)
  988. COPY(filename, tempString);
  989. Strings.Append(tempString, ".Style.XML");
  990. f := Files.New(tempString); IF f = NIL THEN RETURN END;
  991. Files.OpenWriter(w, f, 0);
  992. w.String('<?xml version="1.0" encoding="UTF-8"?>'); w.Ln;
  993. w.String("<styles>"); w.Ln;
  994. (* processing character styles *)
  995. cStyles := currentDocument.cStyles; i := 0;
  996. WHILE (i<currentDocument.nofCStyles) DO
  997. cStyle := cStyles[i];
  998. w.String('<character-style name="'); w.String(cStyle.name);
  999. w.String('" font-family="'); w.String(cStyle.family);
  1000. w.String('" font-style="'); style := cStyle.style;
  1001. IF (style = {}) THEN
  1002. w.Int(0, 0);
  1003. ELSIF (style = {0}) THEN
  1004. w.Int(1, 0);
  1005. ELSIF (style = {1}) THEN
  1006. w.Int(2, 0);
  1007. ELSIF (style = {0,1}) THEN
  1008. w.Int(3, 0);
  1009. ELSE
  1010. w.Int(0, 0);
  1011. END;
  1012. w.String('" font-size="'); Strings.FloatToStr(cStyle.size, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1013. w.String('" leading="'); Strings.FloatToStr(cStyle.leading, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1014. w.String('" baseline-shift="'); Strings.FloatToStr(cStyle.baselineShift, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1015. w.String('" color="'); w.Hex(cStyle.color, 8);
  1016. w.String('" bgcolor="'); w.Hex(cStyle.bgColor, 8);
  1017. w.String('" tracking="'); Strings.FloatToStr(cStyle.tracking, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1018. w.String('" kerning="'); Strings.FloatToStr(cStyle.kerning, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1019. w.String('" h-scale="'); Strings.FloatToStr(cStyle.scaleHorizontal, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1020. w.String('" v-scale="'); Strings.FloatToStr(cStyle.scaleVertical, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1021. w.String('" />'); w.Ln;
  1022. INC(i);
  1023. END;
  1024. (* processing paragraph styles *)
  1025. pStyles := currentDocument.pStyles; i := 0;
  1026. WHILE (i<currentDocument.nofPStyles) DO
  1027. pStyle := pStyles[i];
  1028. w.String('<paragraph-style name="'); w.String(pStyle.name);
  1029. w.String('" alignment="'); w.Int(pStyle.alignment, 0);
  1030. w.String('" first-indent="'); Strings.FloatToStr(pStyle.firstIndent, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1031. w.String('" left-indent="'); Strings.FloatToStr(pStyle.leftIndent, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1032. w.String('" right-indent="'); Strings.FloatToStr(pStyle.rightIndent, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1033. w.String('" space-before="'); Strings.FloatToStr(pStyle.spaceBefore, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1034. w.String('" space-after="'); Strings.FloatToStr(pStyle.spaceAfter, 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1035. w.String('" character-style="'); w.String(pStyle.charStyle.name);
  1036. w.String('" />'); w.Ln;
  1037. INC(i);
  1038. END;
  1039. (* do other styles if needed *)
  1040. w.String("</styles>"); w.Ln;
  1041. w.Update; Files.Register(f);
  1042. (* -- Save Content File -- *)
  1043. COPY(filename, tempString);
  1044. Strings.Append(tempString, ".Content.XML");
  1045. f := Files.New(tempString); IF f = NIL THEN RETURN END;
  1046. Files.OpenWriter(w, f, 0);
  1047. w.String('<?xml version="1.0" encoding="UTF-8"?>'); w.Ln;
  1048. w.String("<content>"); w.Ln;
  1049. (* processing character styles *)
  1050. contents := currentDocument.contents; i := 0;
  1051. WHILE (i<currentDocument.nofContents) DO
  1052. content := contents[i];
  1053. w.String('<node name="'); w.String(content.contentName^); w.String('">'); w.Ln;
  1054. (* Call Save in Plugin *)
  1055. content.Store(w);
  1056. w.String("</node>"); w.Ln;
  1057. INC(i);
  1058. END;
  1059. w.String("</content>"); w.Ln;
  1060. w.Update; Files.Register(f);
  1061. (* -- Save Layout File -- *)
  1062. COPY(filename, tempString);
  1063. Strings.Append(tempString, ".Layout.XML");
  1064. f := Files.New(tempString); IF f = NIL THEN RETURN END;
  1065. Files.OpenWriter(w, f, 0);
  1066. w.String('<?xml version="1.0" encoding="UTF-8"?>'); w.Ln;
  1067. w.String('<document page-width="'); Strings.FloatToStr(currentDocument.GetPageWidth(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1068. w.String('" page-height="'); Strings.FloatToStr(currentDocument.GetPageHeight(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1069. w.String('" margin-top="'); Strings.FloatToStr(currentDocument.GetMarginTop(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1070. w.String('" margin-bottom="'); Strings.FloatToStr(currentDocument.GetMarginBottom(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1071. w.String('" margin-left="'); Strings.FloatToStr(currentDocument.GetMarginLeft(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1072. w.String('" margin-right="'); Strings.FloatToStr(currentDocument.GetMarginRight(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1073. w.String('" facing-pages="'); Strings.BoolToStr(currentDocument.GetFacingPages(), tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1074. w.String('">'); w.Ln;
  1075. (* processing masterpages *)
  1076. page := currentDocument.GetFirstMasterPage();
  1077. (* KernelLog.Int(currentDocument.nofMPages, 0); *)
  1078. WHILE (page # NIL) DO
  1079. w.String('<masterpage name="'); w.String(page(DTPData.MasterPageObject).mpageName^); w.String('">'); w.Ln;
  1080. (* processing guides on masterpage *)
  1081. guide := page.GetFirstGuide();
  1082. WHILE (guide # NIL) DO
  1083. w.String('<guide type="'); IF guide.GetHorizontal() THEN w.String("horizontal"); ELSE w.String("vertical"); END;
  1084. w.String('" position="'); Strings.FloatToStr(guide.GetPosition(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1085. w.String('" />'); w.Ln;
  1086. guide := guide.next;
  1087. END;
  1088. (* processing frames on masterpage *)
  1089. frame := page.GetFirstFrame(); i := 0;
  1090. WHILE (frame # NIL) DO
  1091. w.String('<frame name="'); string := frame.GetName(); w.String(string^);
  1092. w.String('" type="'); string := frame.GetType(); w.String(string^);
  1093. w.String('" x="'); Strings.FloatToStr(frame.GetX(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1094. w.String('" y="'); Strings.FloatToStr(frame.GetY(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1095. w.String('" width="'); Strings.FloatToStr(frame.GetWidth(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1096. w.String('" height="'); Strings.FloatToStr(frame.GetHeight(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1097. w.String('" frame-content="'); content := frame.GetContent(); IF content # NIL THEN w.String(content.contentName^); ELSE w.String("none"); END;
  1098. w.String('" textwrap="'); IF frame.GetWrap() THEN w.String("1") ELSE w.String("0"); END;
  1099. w.String('" twrap-top="'); Strings.FloatToStr(frame.GetWrapTop(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1100. w.String('" twrap-bottom="'); Strings.FloatToStr(frame.GetWrapBottom(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1101. w.String('" twrap-left="'); Strings.FloatToStr(frame.GetWrapLeft(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1102. w.String('" twrap-right="'); Strings.FloatToStr(frame.GetWrapRight(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1103. w.String('" z-index="'); w.Int(i, 0);
  1104. w.String('" />'); w.Ln;
  1105. frame := frame.next;
  1106. INC(i);
  1107. END;
  1108. page := page(DTPData.MasterPageObject).next; w.String("</masterpage>"); w.Ln;
  1109. END;
  1110. (* processing pages *)
  1111. page := currentDocument.GetFirstPage();
  1112. WHILE (page # NIL) DO
  1113. w.String('<page masterpage="'); mpage := page.masterpage;
  1114. IF (mpage # NIL) THEN w.String(mpage.mpageName^); ELSE w.String("none"); END;
  1115. w.String('">'); w.Ln;
  1116. (* processing guides on masterpage *)
  1117. guide := page.GetFirstGuide();
  1118. WHILE (guide # NIL) DO
  1119. w.String('<guide type="'); IF guide.GetHorizontal() THEN w.String("horizontal"); ELSE w.String("vertical"); END;
  1120. w.String('" position="'); Strings.FloatToStr(guide.GetPosition(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1121. w.String('" />'); w.Ln;
  1122. guide := guide.next;
  1123. END;
  1124. (* processing frames on masterpage *)
  1125. frame := page.GetFirstFrame(); i := 0;
  1126. WHILE (frame # NIL) DO
  1127. w.String('<frame name="'); string := frame.GetName(); w.String(string^);
  1128. w.String('" type="'); string := frame.GetType(); w.String(string^);
  1129. w.String('" x="'); Strings.FloatToStr(frame.GetX(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1130. w.String('" y="'); Strings.FloatToStr(frame.GetY(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1131. w.String('" width="'); Strings.FloatToStr(frame.GetWidth(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1132. w.String('" height="'); Strings.FloatToStr(frame.GetHeight(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1133. w.String('" frame-content="'); content := frame.GetContent(); IF content # NIL THEN w.String(content.contentName^); ELSE w.String("none"); END;
  1134. w.String('" textwrap="'); IF frame.GetWrap() THEN w.String("1") ELSE w.String("0"); END;
  1135. w.String('" twrap-top="'); Strings.FloatToStr(frame.GetWrapTop(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1136. w.String('" twrap-bottom="'); Strings.FloatToStr(frame.GetWrapBottom(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1137. w.String('" twrap-left="'); Strings.FloatToStr(frame.GetWrapLeft(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1138. w.String('" twrap-right="'); Strings.FloatToStr(frame.GetWrapRight(), 0,4,0, tempString); Strings.TrimLeft(tempString, " "); w.String(tempString);
  1139. w.String('" z-index="'); w.Int(i, 0);
  1140. w.String('" />'); w.Ln;
  1141. frame := frame.next;
  1142. INC(i);
  1143. END;
  1144. page := page.next; w.String("</page>"); w.Ln;
  1145. END;
  1146. w.String("</document>"); w.Ln;
  1147. w.Update; Files.Register(f);
  1148. modified := FALSE;
  1149. END Store;
  1150. PROCEDURE ExportHandler(sender, data: ANY);
  1151. VAR expFileName: ARRAY 256 OF CHAR;
  1152. pixelPerMM : REAL;
  1153. renderCanvas: WMGraphics.BufferCanvas;
  1154. renderImg: Raster.Image;
  1155. res: WORD;
  1156. oldDocOriginX, oldDocOriginY : LONGINT;
  1157. oldZoomFactor: REAL;
  1158. oldZoomMode: LONGINT;
  1159. tempString: ARRAY 256 OF CHAR;
  1160. tempReal: LONGREAL;
  1161. wait: PleaseWaitWindow;
  1162. BEGIN
  1163. popup.Close;
  1164. IF (currentDocument # NIL) THEN
  1165. expFileName := "export.bmp";
  1166. pixelPerMM := 5;
  1167. IF WMDialogs.QueryString("Export as Image:", expFileName) = WMDialogs.ResOk THEN
  1168. Strings.FloatToStr(pixelPerMM, 0,4,0, tempString);
  1169. IF WMDialogs.QueryString("Export Image Resolution [pixel/mm]:", tempString) = WMDialogs.ResOk THEN
  1170. Strings.StrToFloat(tempString, tempReal); pixelPerMM := SHORT(tempReal);
  1171. NEW(wait); wait.SetColor(LONGINT(09999FFFFH)); wait.SetMessage("Rendering Image - please wait!");
  1172. wait.Show;
  1173. drawPanel.Render(TRUE);
  1174. IF ~previewON THEN (* change to preview *)
  1175. drawPanel.SetPreviewMode(TRUE);
  1176. END;
  1177. oldDocOriginX := drawPanel.GetOriginX(); (* store old values *)
  1178. oldDocOriginY := drawPanel.GetOriginY();
  1179. oldZoomFactor := drawPanel.GetZoomFactor();
  1180. oldZoomMode := drawPanel.zoomMode;
  1181. drawPanel.SetZoomUser(pixelPerMM); (* change values *)
  1182. drawPanel.SetZoomFactor(pixelPerMM);
  1183. drawPanel.SetRenderZoomMode(5);
  1184. drawPanel.SetOrigin(0, 0);
  1185. NEW(renderImg);
  1186. Raster.Create(renderImg, ENTIER(currentDocument.GetPageWidth()*pixelPerMM), ENTIER(currentDocument.GetPageHeight()*pixelPerMM), Raster.BGRA8888);
  1187. NEW(renderCanvas, renderImg);
  1188. drawPanel.DrawDocument(renderCanvas); (* document paper *)
  1189. drawPanel.DrawContent(renderCanvas); (* content objects (frames)(grid..) *)
  1190. (* Raster.Store(renderImg, expFileName, res); *)
  1191. WMGraphics.StoreImage(renderImg, expFileName, res);
  1192. drawPanel.SetOrigin(oldDocOriginX, oldDocOriginY); (* restore stored values *)
  1193. drawPanel.SetZoomFactor(oldZoomFactor);
  1194. drawPanel.SetZoomUser(oldZoomFactor);
  1195. drawPanel.SetRenderZoomMode(oldZoomMode);
  1196. (* drawPanel.Resized; *)
  1197. IF ~previewON THEN (* change to edit *)
  1198. drawPanel.SetPreviewMode(FALSE);
  1199. END;
  1200. IF res # -1 THEN
  1201. KernelLog.String("DTPEditor: Page exported as Image"); KernelLog.Ln;
  1202. END;
  1203. drawPanel.Render(FALSE);
  1204. wait.Hide;
  1205. drawPanel.Invalidate;
  1206. END;
  1207. END;
  1208. END;
  1209. END ExportHandler;
  1210. PROCEDURE NewHandler(sender, data : ANY);
  1211. BEGIN
  1212. CreateNew;
  1213. modified := FALSE;
  1214. END NewHandler;
  1215. PROCEDURE CreateNew;
  1216. BEGIN
  1217. IF ~nDiagOpen THEN
  1218. nDiagOpen := TRUE;
  1219. NEW(nDialog, SELF);
  1220. nDialog.Show;
  1221. END;
  1222. END CreateNew;
  1223. PROCEDURE CreateDoc(w, h, mt, mb, ml, mr : REAL; fp : BOOLEAN);
  1224. VAR document : DTPData.Document;
  1225. BEGIN
  1226. NEW(document, w, h, mt, mb, ml, mr, fp);
  1227. currentDocument := document;
  1228. (* add a page and masterpage on that document *)
  1229. currentDocument.AddPage(FALSE);
  1230. currentDocument.AddMasterPage(FALSE);
  1231. drawPanel.SetDocument(currentDocument);
  1232. LoadCharacterStyle(document.GetCharacterStyleByName("defaultCharacterStyle"));
  1233. LoadParagraphStyle(document.GetParagraphStyleByName("defaultParagraphStyle"));
  1234. UpdatePageNumber;
  1235. drawPanel.ready := TRUE;
  1236. drawPanel.Invalidate;
  1237. END CreateDoc;
  1238. PROCEDURE ObjectCutHandler(sender, data: ANY);
  1239. VAR
  1240. (* cpage: DTPData.PageObject;
  1241. cframe: DTPData.FrameObject;
  1242. cguide: DTPData.GuideObject;
  1243. *) BEGIN
  1244. IF currentDocument # NIL THEN
  1245. IF masterON THEN
  1246. cpage := currentDocument.GetCurrentMasterPage();
  1247. ELSE
  1248. cpage := currentDocument.GetCurrentPage();
  1249. END;
  1250. cframe := cpage.GetCurrentFrame();
  1251. cguide := cpage.GetCurrentGuide();
  1252. IF cframe # NIL THEN (* clone frame (to buffer) and remove current *)
  1253. DTPData.dollyFrame := cframe.Clone();
  1254. currentDocument.dollyGuide := NIL;
  1255. cpage.DeleteFrame();
  1256. ELSIF cguide # NIL THEN (* clone guide (to buffer) and remove current *)
  1257. currentDocument.dollyGuide := cguide.Clone();
  1258. DTPData.dollyFrame := NIL;
  1259. cpage.DeleteGuide();
  1260. END;
  1261. END;
  1262. popup.Close;
  1263. drawPanel.Invalidate;
  1264. drawPanel.UpdateProps;
  1265. drawPanel.UpdateContentProps;
  1266. END ObjectCutHandler;
  1267. PROCEDURE ObjectCopyHandler(sender, data: ANY);
  1268. VAR
  1269. (* cpage: DTPData.PageObject;
  1270. cframe: DTPData.FrameObject;
  1271. cguide: DTPData.GuideObject;
  1272. *) BEGIN
  1273. IF currentDocument # NIL THEN
  1274. IF masterON THEN
  1275. cpage := currentDocument.GetCurrentMasterPage();
  1276. ELSE
  1277. cpage := currentDocument.GetCurrentPage();
  1278. END;
  1279. cframe := cpage.GetCurrentFrame();
  1280. cguide := cpage.GetCurrentGuide();
  1281. IF cframe # NIL THEN (* clone frame to buffer *)
  1282. DTPData.dollyFrame := cframe.Clone();
  1283. currentDocument.dollyGuide := NIL;
  1284. ELSIF cguide # NIL THEN (* clone guide to buffer *)
  1285. currentDocument.dollyGuide := cguide.Clone();
  1286. DTPData.dollyFrame := NIL;
  1287. END;
  1288. END;
  1289. popup.Close;
  1290. END ObjectCopyHandler;
  1291. PROCEDURE ObjectPasteHandler(sender, data: ANY);
  1292. VAR
  1293. (* cpage: DTPData.PageObject;
  1294. cframe: DTPData.FrameObject;
  1295. cguide: DTPData.GuideObject;
  1296. *) newFrame: DTPData.FrameObject;
  1297. newContent: DTPData.ContentObject;
  1298. BEGIN
  1299. IF currentDocument # NIL THEN
  1300. IF masterON THEN
  1301. cpage := currentDocument.GetCurrentMasterPage();
  1302. ELSE
  1303. cpage := currentDocument.GetCurrentPage();
  1304. END;
  1305. cframe := DTPData.dollyFrame;
  1306. cguide := currentDocument.dollyGuide;
  1307. IF cframe # NIL THEN (* paste frame from buffer *)
  1308. newFrame := cframe.Clone();
  1309. newContent := newFrame.GetContent();
  1310. newContent.redrawProc := drawPanel.InvalidateCurrentFrame;
  1311. newContent.updatePropsPosition := drawPanel.SetContentPropsPosition;
  1312. newContent.Resize(drawPanel.GetZoomFactor());
  1313. newContent.SetSize(ENTIER(newFrame.GetWidth()*drawPanel.GetZoomFactor()), ENTIER(newFrame.GetHeight()*drawPanel.GetZoomFactor()));
  1314. cpage.InsertFrame(newFrame);
  1315. ELSIF cguide # NIL THEN (* paste guide from buffer *)
  1316. cpage.AddGuide(cguide.GetPosition(), cguide.GetHorizontal());
  1317. END;
  1318. END;
  1319. popup.Close;
  1320. drawPanel.Invalidate;
  1321. drawPanel.UpdateProps;
  1322. drawPanel.UpdateContentProps;
  1323. END ObjectPasteHandler;
  1324. PROCEDURE ObjectDeleteHandler(sender, data: ANY);
  1325. VAR
  1326. (* cpage: DTPData.PageObject;
  1327. cframe: DTPData.FrameObject;
  1328. cguide: DTPData.GuideObject;
  1329. *) ccontent: DTPData.ContentObject;
  1330. BEGIN
  1331. IF currentDocument # NIL THEN
  1332. IF masterON THEN
  1333. cpage := currentDocument.GetCurrentMasterPage();
  1334. ELSE
  1335. cpage := currentDocument.GetCurrentPage();
  1336. END;
  1337. cframe := cpage.GetCurrentFrame();
  1338. cguide := cpage.GetCurrentGuide();
  1339. IF cframe # NIL THEN (* delete current frame *)
  1340. ccontent := cframe.GetContent();
  1341. ccontent.OnDelete;
  1342. cpage.DeleteFrame;
  1343. ELSIF cguide # NIL THEN (* delete currend guide *)
  1344. cpage.DeleteGuide;
  1345. END;
  1346. END;
  1347. popup.Close;
  1348. drawPanel.Invalidate;
  1349. drawPanel.UpdateProps;
  1350. drawPanel.UpdateContentProps;
  1351. END ObjectDeleteHandler;
  1352. PROCEDURE ObjectToFrontHandler(sender, data: ANY);
  1353. VAR
  1354. (* cpage: DTPData.PageObject;
  1355. cframe: DTPData.FrameObject;
  1356. *) BEGIN
  1357. IF currentDocument # NIL THEN
  1358. IF masterON THEN
  1359. cpage := currentDocument.GetCurrentMasterPage();
  1360. ELSE
  1361. cpage := currentDocument.GetCurrentPage();
  1362. END;
  1363. cframe := cpage.GetCurrentFrame();
  1364. IF cframe # NIL THEN
  1365. cpage.Move2Front;
  1366. END;
  1367. END;
  1368. popup.Close;
  1369. drawPanel.Invalidate;
  1370. SetActive;
  1371. END ObjectToFrontHandler;
  1372. PROCEDURE ObjectFrontStepHandler(sender, data: ANY);
  1373. VAR
  1374. (* cpage: DTPData.PageObject;
  1375. cframe: DTPData.FrameObject;
  1376. *) BEGIN
  1377. IF currentDocument # NIL THEN
  1378. IF masterON THEN
  1379. cpage := currentDocument.GetCurrentMasterPage();
  1380. ELSE
  1381. cpage := currentDocument.GetCurrentPage();
  1382. END;
  1383. cframe := cpage.GetCurrentFrame();
  1384. IF cframe # NIL THEN
  1385. cpage.Move2FrontStep;
  1386. END;
  1387. END;
  1388. popup.Close;
  1389. drawPanel.Invalidate;
  1390. SetActive;
  1391. END ObjectFrontStepHandler;
  1392. PROCEDURE ObjectToBackHandler(sender, data: ANY);
  1393. VAR
  1394. (* cpage: DTPData.PageObject;
  1395. cframe: DTPData.FrameObject;
  1396. *) BEGIN
  1397. IF currentDocument # NIL THEN
  1398. IF masterON THEN
  1399. cpage := currentDocument.GetCurrentMasterPage();
  1400. ELSE
  1401. cpage := currentDocument.GetCurrentPage();
  1402. END;
  1403. cframe := cpage.GetCurrentFrame();
  1404. IF cframe # NIL THEN
  1405. cpage.Move2Back;
  1406. END;
  1407. END;
  1408. popup.Close;
  1409. drawPanel.Invalidate;
  1410. SetActive;
  1411. END ObjectToBackHandler;
  1412. PROCEDURE ObjectBackStepHandler(sender, data: ANY);
  1413. VAR
  1414. (* cpage: DTPData.PageObject;
  1415. cframe: DTPData.FrameObject;
  1416. *) BEGIN
  1417. IF currentDocument # NIL THEN
  1418. IF masterON THEN
  1419. cpage := currentDocument.GetCurrentMasterPage();
  1420. ELSE
  1421. cpage := currentDocument.GetCurrentPage();
  1422. END;
  1423. cframe := cpage.GetCurrentFrame();
  1424. IF cframe # NIL THEN
  1425. cpage.Move2BackStep;
  1426. END;
  1427. END;
  1428. popup.Close;
  1429. drawPanel.Invalidate;
  1430. SetActive;
  1431. END ObjectBackStepHandler;
  1432. PROCEDURE ObjectPrevHandler(sender, data: ANY);
  1433. VAR
  1434. (* cpage: DTPData.PageObject;
  1435. cframe: DTPData.FrameObject;
  1436. *) BEGIN
  1437. IF currentDocument # NIL THEN
  1438. IF masterON THEN
  1439. cpage := currentDocument.GetCurrentMasterPage();
  1440. ELSE
  1441. cpage := currentDocument.GetCurrentPage();
  1442. END;
  1443. cframe := cpage.GetCurrentFrame();
  1444. IF cframe = NIL THEN
  1445. cframe := cpage.GetLastFrame();
  1446. cpage.SetCurrentFrame(cframe);
  1447. ELSE
  1448. cpage.PrevFrame;
  1449. END;
  1450. END;
  1451. popup.Close;
  1452. drawPanel.Invalidate;
  1453. drawPanel.UpdateProps;
  1454. drawPanel.UpdateContentProps;
  1455. END ObjectPrevHandler;
  1456. PROCEDURE ObjectNextHandler(sender, data: ANY);
  1457. VAR
  1458. (* cpage: DTPData.PageObject;
  1459. cframe: DTPData.FrameObject;
  1460. *) BEGIN
  1461. IF currentDocument # NIL THEN
  1462. IF masterON THEN
  1463. cpage := currentDocument.GetCurrentMasterPage();
  1464. ELSE
  1465. cpage := currentDocument.GetCurrentPage();
  1466. END;
  1467. cframe := cpage.GetCurrentFrame();
  1468. IF cframe = NIL THEN
  1469. cframe := cpage.GetFirstFrame();
  1470. cpage.SetCurrentFrame(cframe);
  1471. ELSE
  1472. cpage.NextFrame;
  1473. END;
  1474. END;
  1475. popup.Close;
  1476. drawPanel.Invalidate;
  1477. drawPanel.UpdateProps;
  1478. drawPanel.UpdateContentProps;
  1479. END ObjectNextHandler;
  1480. PROCEDURE AddBeforePageHandler(sender, data: ANY);
  1481. BEGIN
  1482. IF currentDocument # NIL THEN
  1483. IF masterON THEN
  1484. currentDocument.AddMasterPage(FALSE);
  1485. ELSE
  1486. currentDocument.AddPage(FALSE);
  1487. END;
  1488. END;
  1489. popup.Close;
  1490. UpdatePageNumber;
  1491. drawPanel.Invalidate;
  1492. drawPanel.UpdateProps;
  1493. drawPanel.UpdateContentProps;
  1494. END AddBeforePageHandler;
  1495. PROCEDURE AddAfterPageHandler(sender, data: ANY);
  1496. BEGIN
  1497. IF currentDocument # NIL THEN
  1498. IF masterON THEN
  1499. currentDocument.AddMasterPage(TRUE);
  1500. ELSE
  1501. currentDocument.AddPage(TRUE);
  1502. END;
  1503. END;
  1504. popup.Close;
  1505. UpdatePageNumber;
  1506. drawPanel.Invalidate;
  1507. drawPanel.UpdateProps;
  1508. drawPanel.UpdateContentProps;
  1509. END AddAfterPageHandler;
  1510. PROCEDURE DeletePageHandler(sender, data: ANY);
  1511. VAR
  1512. BEGIN
  1513. IF currentDocument # NIL THEN
  1514. IF masterON THEN
  1515. currentDocument.DeleteMasterPage;
  1516. ELSE
  1517. currentDocument.DeletePage;
  1518. END;
  1519. END;
  1520. popup.Close;
  1521. UpdatePageNumber;
  1522. drawPanel.Invalidate;
  1523. drawPanel.UpdateProps;
  1524. drawPanel.UpdateContentProps;
  1525. END DeletePageHandler;
  1526. PROCEDURE NextPageHandler(sender, data: ANY);
  1527. BEGIN
  1528. IF currentDocument # NIL THEN
  1529. IF masterON THEN
  1530. currentDocument.NextMasterPage;
  1531. ELSE
  1532. currentDocument.NextPage;
  1533. END;
  1534. END;
  1535. UpdatePageNumber;
  1536. drawPanel.Invalidate;
  1537. drawPanel.UpdateProps;
  1538. drawPanel.UpdateContentProps;
  1539. drawPanel.Resized;
  1540. END NextPageHandler;
  1541. PROCEDURE PrevPageHandler(sender, data: ANY);
  1542. BEGIN
  1543. IF currentDocument # NIL THEN
  1544. IF masterON THEN
  1545. currentDocument.PrevMasterPage;
  1546. ELSE
  1547. currentDocument.PrevPage;
  1548. END;
  1549. END;
  1550. UpdatePageNumber;
  1551. drawPanel.Invalidate;
  1552. drawPanel.UpdateProps;
  1553. drawPanel.UpdateContentProps;
  1554. drawPanel.Resized;
  1555. END PrevPageHandler;
  1556. PROCEDURE LastPageHandler(sender, data: ANY);
  1557. BEGIN
  1558. IF currentDocument # NIL THEN
  1559. IF masterON THEN
  1560. currentDocument.LastMasterPage;
  1561. ELSE
  1562. currentDocument.LastPage;
  1563. END;
  1564. END;
  1565. UpdatePageNumber;
  1566. drawPanel.Invalidate;
  1567. drawPanel.UpdateProps;
  1568. drawPanel.UpdateContentProps;
  1569. drawPanel.Resized;
  1570. END LastPageHandler;
  1571. PROCEDURE FirstPageHandler(sender, data: ANY);
  1572. BEGIN
  1573. IF currentDocument # NIL THEN
  1574. IF masterON THEN
  1575. currentDocument.FirstMasterPage;
  1576. ELSE
  1577. currentDocument.FirstPage;
  1578. END;
  1579. END;
  1580. UpdatePageNumber;
  1581. drawPanel.Invalidate;
  1582. drawPanel.UpdateProps;
  1583. drawPanel.UpdateContentProps;
  1584. drawPanel.Resized;
  1585. END FirstPageHandler;
  1586. PROCEDURE GoToPageHandler(sender, data: ANY);
  1587. VAR gotoPage: ARRAY 8 OF CHAR;
  1588. gPage, i: LONGINT;
  1589. BEGIN
  1590. IF currentDocument # NIL THEN
  1591. pageNumber.GetAsString(gotoPage);
  1592. Strings.StrToInt(gotoPage, gPage);
  1593. IF masterON THEN
  1594. IF gPage > currentDocument.nofMPages THEN
  1595. gPage := currentDocument.nofMPages;
  1596. ELSIF gPage < 1 THEN
  1597. gPage := 1;
  1598. END;
  1599. currentDocument.FirstMasterPage; i := 0;
  1600. WHILE i < gPage DO
  1601. currentDocument.NextMasterPage;
  1602. INC(i);
  1603. END;
  1604. ELSE
  1605. IF gPage > currentDocument.nofPages THEN
  1606. gPage := currentDocument.nofPages;
  1607. ELSIF gPage < 1 THEN
  1608. gPage := 1;
  1609. END;
  1610. currentDocument.FirstPage; i := 0;
  1611. WHILE i < gPage DO
  1612. currentDocument.NextPage;
  1613. INC(i);
  1614. END;
  1615. END;
  1616. END;
  1617. UpdatePageNumber;
  1618. drawPanel.Invalidate;
  1619. drawPanel.UpdateProps;
  1620. drawPanel.UpdateContentProps;
  1621. END GoToPageHandler;
  1622. PROCEDURE UpdatePageNumber;
  1623. VAR pageNumberString : ARRAY 8 OF CHAR;
  1624. masterNumberString : Strings.String;
  1625. mpage : DTPData.MasterPageObject;
  1626. BEGIN
  1627. IF masterON THEN
  1628. Strings.IntToStr(currentDocument.GetCurrentMasterPageNumber(), pageNumberString);
  1629. mpage := currentDocument.GetCurrentMasterPage();
  1630. masterNumberString := mpage.GetName();
  1631. ELSE
  1632. Strings.IntToStr(currentDocument.GetCurrentPageNumber(), pageNumberString);
  1633. cpage := currentDocument.GetCurrentPage();
  1634. mpage := cpage.GetMasterPage();
  1635. IF mpage # NIL THEN
  1636. masterNumberString := mpage.GetName();
  1637. ELSE
  1638. masterNumberString := Strings.NewString("none");
  1639. END;
  1640. END;
  1641. pageNumber.SetAsString(pageNumberString);
  1642. masterNumber.SetAsString(masterNumberString^);
  1643. END UpdatePageNumber;
  1644. PROCEDURE MiscStyleEditorHandler(sender, data: ANY);
  1645. BEGIN
  1646. NEW(styleEditor);
  1647. styleEditor.UpdateProc := TextPropUpdateHandler;
  1648. styleEditor.LoadStyleList(currentDocument);
  1649. styleEditor.Show(200, 150);
  1650. popup.Close;
  1651. END MiscStyleEditorHandler;
  1652. PROCEDURE TextPropUpdateHandler*;
  1653. VAR cpage : DTPData.PageObject;
  1654. cframe : DTPData.FrameObject;
  1655. ccontent: DTPData.ContentObject;
  1656. BEGIN
  1657. IF currentDocument # NIL THEN
  1658. IF drawPanel.mpageMode THEN
  1659. cpage := currentDocument.GetCurrentMasterPage();
  1660. ELSE
  1661. cpage := currentDocument.GetCurrentPage();
  1662. END;
  1663. IF cpage # NIL THEN
  1664. cframe := cpage.GetCurrentFrame();
  1665. IF cframe # NIL THEN
  1666. ccontent := cframe.GetContent();
  1667. IF ccontent # NIL THEN
  1668. ccontent.Hide; ccontent.Show(drawPanel.propsX, drawPanel.propsY);
  1669. END;
  1670. END;
  1671. END;
  1672. drawPanel.Resized;
  1673. END;
  1674. END TextPropUpdateHandler;
  1675. PROCEDURE PropsHandler(sender, data: ANY);
  1676. VAR
  1677. BEGIN
  1678. (* NEW(props, SELF); *)
  1679. IF ~drawPanel.propertyOpen THEN
  1680. drawPanel.props.Show;
  1681. drawPanel.propertyOpen := TRUE;
  1682. popup.Close;
  1683. END;
  1684. END PropsHandler;
  1685. (*
  1686. PROCEDURE RefreshPlugins();
  1687. BEGIN
  1688. LoadPlugins;
  1689. pluginPanel := AddPlugins();
  1690. pluginPanel.visible.Set(TRUE);
  1691. (* sideToolbar.AddContent(pluginPanel); *)
  1692. sideToolbar.Invalidate;
  1693. END RefreshPlugins;
  1694. PROCEDURE PlugHandler(sender, data: ANY);
  1695. BEGIN
  1696. RefreshPlugins;
  1697. popup.Close;
  1698. END PlugHandler;
  1699. *)
  1700. PROCEDURE SetMasterHandler(sender, data: ANY);
  1701. VAR master: DTPData.MasterPageObject;
  1702. mastername: ARRAY 16 OF CHAR;
  1703. BEGIN
  1704. masterNumber.GetAsString(mastername);
  1705. IF masterON THEN (* set name for Masterpage *)
  1706. master := currentDocument.GetCurrentMasterPage();
  1707. master.SetName(Strings.NewString(mastername));
  1708. ELSE (* set masterpage for current doc page *)
  1709. master := currentDocument.GetMasterByName(Strings.NewString(mastername));
  1710. cpage := currentDocument.GetCurrentPage();
  1711. cpage.SetMasterPage(master);
  1712. drawPanel.Invalidate;
  1713. END;
  1714. UpdatePageNumber;
  1715. END SetMasterHandler;
  1716. PROCEDURE Close*;
  1717. BEGIN
  1718. Close^;
  1719. drawPanel.CloseContentProps;
  1720. IF styleEditor # NIL THEN styleEditor.Hide; END;
  1721. IF drawPanel.propertyOpen THEN drawPanel.props.Close END;
  1722. IF nDiagOpen THEN nDialog.Cancel(SELF, NIL) END;
  1723. DecCount
  1724. END Close;
  1725. END Window;
  1726. NewDialog* = OBJECT(WMComponents.FormWindow)
  1727. VAR content : WMComponents.VisualComponent;
  1728. result : LONGINT;
  1729. dhe, dwe, dmte, dmbe, dmle, dmre, dfpe : WMEditors.Editor;
  1730. dhs, dws, dmts, dmbs, dmls, dmrs, dfps : ARRAY 256 OF CHAR;
  1731. dhr, dwr, dmtr, dmbr, dmlr, dmrr, dfpr : LONGREAL;
  1732. fpCheck: DTPUtilities.Checkbox;
  1733. facep : BOOLEAN;
  1734. theCaller : Window;
  1735. PROCEDURE &New*(caller : Window);
  1736. BEGIN
  1737. theCaller := caller;
  1738. manager := WMWindowManager.GetDefaultManager();
  1739. CreateNewDialog;
  1740. Init(content.bounds.GetWidth(), content.bounds.GetHeight(), FALSE);
  1741. SetContent(content);
  1742. SetTitle(Strings.NewString("New Document"));
  1743. END New;
  1744. PROCEDURE CreateNewDialog;
  1745. VAR
  1746. (* NewDialog Stuff *)
  1747. (* newDialog : WMComponents.FormWindow; *)
  1748. panel, buttonPanel, paramPanel : WMStandardComponents.Panel;
  1749. cancel, ok : WMStandardComponents.Button;
  1750. labelPanel, editorsPanel : WMStandardComponents.Panel;
  1751. dh, dw, dmt, dmb, dml, dmr, dfp : WMStandardComponents.Label;
  1752. windowStyle : WMWindowManager.WindowStyle;
  1753. panelColor : LONGINT;
  1754. BEGIN
  1755. windowStyle := manager.GetStyle();
  1756. panelColor := windowStyle.bgColor;
  1757. NEW(panel); panel.bounds.SetExtents(300, 200); panel.fillColor.Set(panelColor);
  1758. panel.takesFocus.Set(TRUE);
  1759. NEW(buttonPanel); buttonPanel.bounds.SetHeight(40); buttonPanel.alignment.Set(WMComponents.AlignBottom);
  1760. panel.AddContent(buttonPanel);
  1761. NEW(ok); ok.caption.SetAOC("OK"); ok.alignment.Set(WMComponents.AlignRight);
  1762. buttonPanel.AddContent(ok);
  1763. (* add button handler *)
  1764. ok.onClick.Add(Ok);
  1765. NEW(cancel); cancel.caption.SetAOC("Cancel"); cancel.alignment.Set(WMComponents.AlignRight);
  1766. buttonPanel.AddContent(cancel);
  1767. cancel.onClick.Add(Cancel);
  1768. NEW(paramPanel); paramPanel.alignment.Set(WMComponents.AlignClient);
  1769. panel.AddContent(paramPanel);
  1770. NEW(editorsPanel); editorsPanel.bounds.SetWidth(100); editorsPanel.alignment.Set(WMComponents.AlignRight);
  1771. paramPanel.AddContent(editorsPanel);
  1772. NEW(labelPanel); labelPanel.alignment.Set(WMComponents.AlignClient);
  1773. paramPanel.AddContent(labelPanel);
  1774. NEW(dw); dw.bounds.SetHeight(20); dw.alignment.Set(WMComponents.AlignTop); dw.SetCaption(" Document Width [mm]:");
  1775. labelPanel.AddContent(dw);
  1776. NEW(dwe); dwe.bounds.SetHeight(20); dwe.alignment.Set(WMComponents.AlignTop);
  1777. dwe.tv.showBorder.Set(TRUE); dwe.multiLine.Set(FALSE); dwe.fillColor.Set(0FFFFFFFFH);
  1778. dwe.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1779. editorsPanel.AddContent(dwe); dwe.onEnter.Add(FocusNextField);
  1780. NEW(dh); dh.bounds.SetHeight(20); dh.alignment.Set(WMComponents.AlignTop); dh.SetCaption(" Document Height [mm]:");
  1781. labelPanel.AddContent(dh);
  1782. NEW(dhe); dhe.bounds.SetHeight(20); dhe.alignment.Set(WMComponents.AlignTop);
  1783. dhe.tv.showBorder.Set(TRUE); dhe.multiLine.Set(FALSE); dhe.fillColor.Set(0FFFFFFFFH);
  1784. dhe.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1785. editorsPanel.AddContent(dhe); dhe.onEnter.Add(FocusNextField);
  1786. NEW(dmt); dmt.bounds.SetHeight(20); dmt.alignment.Set(WMComponents.AlignTop); dmt.SetCaption(" Document Margin Top [mm]:");
  1787. labelPanel.AddContent(dmt);
  1788. NEW(dmte); dmte.bounds.SetHeight(20); dmte.alignment.Set(WMComponents.AlignTop);
  1789. dmte.tv.showBorder.Set(TRUE); dmte.multiLine.Set(FALSE); dmte.fillColor.Set(0FFFFFFFFH);
  1790. dmte.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1791. editorsPanel.AddContent(dmte); dmte.onEnter.Add(FocusNextField);
  1792. NEW(dmb); dmb.bounds.SetHeight(20); dmb.alignment.Set(WMComponents.AlignTop); dmb.SetCaption(" Document Margin Bottom [mm]:");
  1793. labelPanel.AddContent(dmb);
  1794. NEW(dmbe); dmbe.bounds.SetHeight(20); dmbe.alignment.Set(WMComponents.AlignTop);
  1795. dmbe.tv.showBorder.Set(TRUE); dmbe.multiLine.Set(FALSE); dmbe.fillColor.Set(0FFFFFFFFH);
  1796. dmbe.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1797. editorsPanel.AddContent(dmbe); dmbe.onEnter.Add(FocusNextField);
  1798. NEW(dml); dml.bounds.SetHeight(20); dml.alignment.Set(WMComponents.AlignTop); dml.SetCaption(" Document Margin Left [mm]:");
  1799. labelPanel.AddContent(dml);
  1800. NEW(dmle); dmle.bounds.SetHeight(20); dmle.alignment.Set(WMComponents.AlignTop);
  1801. dmle.tv.showBorder.Set(TRUE); dmle.multiLine.Set(FALSE); dmle.fillColor.Set(0FFFFFFFFH);
  1802. dmle.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1803. editorsPanel.AddContent(dmle); dmle.onEnter.Add(FocusNextField);
  1804. NEW(dmr); dmr.bounds.SetHeight(20); dmr.alignment.Set(WMComponents.AlignTop); dmr.SetCaption(" Document Margin Right [mm]:");
  1805. labelPanel.AddContent(dmr);
  1806. NEW(dmre); dmre.bounds.SetHeight(20); dmre.alignment.Set(WMComponents.AlignTop);
  1807. dmre.tv.showBorder.Set(TRUE); dmre.multiLine.Set(FALSE); dmre.fillColor.Set(0FFFFFFFFH);
  1808. dmre.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1809. editorsPanel.AddContent(dmre); dmre.onEnter.Add(FocusNextField);
  1810. NEW(dfp); dfp.bounds.SetHeight(20); dfp.alignment.Set(WMComponents.AlignTop); dfp.SetCaption(" Facing Pages:");
  1811. labelPanel.AddContent(dfp);
  1812. NEW(dfpe); dfpe.bounds.SetHeight(20); dfpe.alignment.Set(WMComponents.AlignTop);
  1813. dfpe.tv.showBorder.Set(TRUE); dfpe.multiLine.Set(FALSE); dfpe.fillColor.Set(0FFFFFFFFH);
  1814. dfpe.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1815. (* editorsPanel.AddContent(dfpe); *) dfpe.onEnter.Add(FocusNextField);
  1816. NEW(fpCheck); fpCheck.bounds.SetHeight(20); fpCheck.alignment.Set(WMComponents.AlignTop);
  1817. editorsPanel.AddContent(fpCheck); fpCheck.leftBorder := 0;
  1818. content := panel;
  1819. END CreateNewDialog;
  1820. PROCEDURE FocusNextField(sender, data: ANY);
  1821. BEGIN
  1822. IF (sender = dwe) THEN
  1823. dhe.tv.SetFocus;
  1824. ELSIF (sender = dhe) THEN
  1825. dmte.tv.SetFocus;
  1826. ELSIF (sender = dmte) THEN
  1827. dmbe.tv.SetFocus;
  1828. ELSIF (sender = dmbe) THEN
  1829. dmle.tv.SetFocus;
  1830. ELSIF (sender = dmle) THEN
  1831. dmre.tv.SetFocus;
  1832. ELSIF (sender = dmre) THEN
  1833. dwe.tv.SetFocus;
  1834. ELSIF (sender = dfpe) THEN
  1835. dwe.tv.SetFocus;
  1836. END;
  1837. END FocusNextField;
  1838. PROCEDURE Show*;
  1839. BEGIN
  1840. result := -1;
  1841. InitFieldValues;
  1842. WMWindowManager.ExtAddWindow(SELF, 300, 200,
  1843. {WMWindowManager.FlagFrame, WMWindowManager.FlagStayOnTop, WMWindowManager.FlagClose, WMWindowManager.FlagMinimize});
  1844. manager.SetFocus(SELF);
  1845. dwe.tv.SetFocus;
  1846. BEGIN {EXCLUSIVE}
  1847. AWAIT (result >= 0)
  1848. END;
  1849. manager.Remove(SELF);
  1850. IF result = 0 THEN (* OK pressed, fill in values *)
  1851. dhe.GetAsString(dhs);
  1852. dwe.GetAsString(dws);
  1853. dmte.GetAsString(dmts);
  1854. dmbe.GetAsString(dmbs);
  1855. dmle.GetAsString(dmls);
  1856. dmre.GetAsString(dmrs);
  1857. dfpe.GetAsString(dfps);
  1858. Strings.StrToFloat(dhs, dhr);
  1859. Strings.StrToFloat(dws, dwr);
  1860. Strings.StrToFloat(dmts, dmtr);
  1861. Strings.StrToFloat(dmbs, dmbr);
  1862. Strings.StrToFloat(dmls, dmlr);
  1863. Strings.StrToFloat(dmrs, dmrr);
  1864. Strings.StrToFloat(dfps, dfpr);
  1865. (* IF dfpr = 0 THEN facep := FALSE ELSE facep := TRUE END; *)
  1866. IF fpCheck.checked THEN facep:= TRUE ELSE facep:= FALSE END;
  1867. theCaller.CreateDoc(SHORT(dwr), SHORT(dhr), SHORT(dmtr), SHORT(dmbr), SHORT(dmlr), SHORT(dmrr), facep);
  1868. (* force redraw *)
  1869. theCaller.drawPanel.Invalidate;
  1870. END;
  1871. END Show;
  1872. PROCEDURE InitFieldValues;
  1873. VAR doc : DTPData.Document;
  1874. fieldContent : ARRAY 8 OF CHAR;
  1875. BEGIN
  1876. IF theCaller.currentDocument = NIL THEN (* no document open yet *)
  1877. dwe.SetAsString("210");
  1878. dhe.SetAsString("297");
  1879. dmte.SetAsString("12");
  1880. dmbe.SetAsString("12");
  1881. dmle.SetAsString("12");
  1882. dmre.SetAsString("12");
  1883. dfpe.SetAsString("0");
  1884. ELSE
  1885. doc := theCaller.currentDocument;
  1886. Strings.FloatToStr(doc.GetPageWidth(), 0,4,0, fieldContent);
  1887. dwe.SetAsString(fieldContent);
  1888. Strings.FloatToStr(doc.GetPageHeight(), 0,4,0, fieldContent);
  1889. dhe.SetAsString(fieldContent);
  1890. Strings.FloatToStr(doc.GetMarginTop(), 0,4,0, fieldContent);
  1891. dmte.SetAsString(fieldContent);
  1892. Strings.FloatToStr(doc.GetMarginBottom(), 0,4,0, fieldContent);
  1893. dmbe.SetAsString(fieldContent);
  1894. Strings.FloatToStr(doc.GetMarginLeft(), 0,4,0, fieldContent);
  1895. dmle.SetAsString(fieldContent);
  1896. Strings.FloatToStr(doc.GetMarginRight(), 0,4,0, fieldContent);
  1897. dmre.SetAsString(fieldContent);
  1898. IF doc.GetFacingPages() THEN fieldContent := "1" ELSE fieldContent := "0" END;
  1899. dfpe.SetAsString(fieldContent);
  1900. END;
  1901. END InitFieldValues;
  1902. PROCEDURE Ok(sender, data : ANY);
  1903. BEGIN {EXCLUSIVE}
  1904. result := 0;
  1905. theCaller.nDiagOpen := FALSE;
  1906. END Ok;
  1907. PROCEDURE Cancel(sender, data : ANY);
  1908. BEGIN {EXCLUSIVE}
  1909. result := 1;
  1910. theCaller.nDiagOpen := FALSE;
  1911. END Cancel;
  1912. END NewDialog;
  1913. PleaseWaitWindow* = OBJECT(WMComponents.FormWindow)
  1914. VAR
  1915. label : WMStandardComponents.Label;
  1916. status: WMStandardComponents.Label;
  1917. spacer: WMStandardComponents.Panel;
  1918. panel : WMStandardComponents.Panel;
  1919. container: WMStandardComponents.Panel;
  1920. button*: WMStandardComponents.Button;
  1921. mode: LONGINT; (* 0 = Text/Status only *)
  1922. (* 1 = Animated Bar *)
  1923. (* 2 = Status Bar *)
  1924. shown : BOOLEAN;
  1925. x, y : LONGINT;
  1926. progress : LONGINT;
  1927. (* abortProc: PROCEDURE {DELEGATE} ; *)
  1928. PROCEDURE CreateForm() : WMComponents.VisualComponent;
  1929. BEGIN
  1930. NEW(panel);
  1931. panel.bounds.SetExtents(350, 150);
  1932. NEW(spacer); spacer.alignment.Set(WMComponents.AlignTop);
  1933. spacer.bounds.SetHeight(40);
  1934. panel.AddContent(spacer);
  1935. NEW(label); label.alignment.Set(WMComponents.AlignTop);
  1936. label.bounds.SetHeight(20);
  1937. label.alignH.Set(1); label.alignV.Set(1);
  1938. label.caption.SetAOC("");
  1939. panel.AddContent(label);
  1940. NEW(spacer); spacer.alignment.Set(WMComponents.AlignBottom);
  1941. spacer.bounds.SetHeight(20);
  1942. panel.AddContent(spacer);
  1943. NEW(container); container.alignment.Set(WMComponents.AlignBottom);
  1944. container.bounds.SetHeight(20);
  1945. NEW(spacer); spacer.alignment.Set(WMComponents.AlignLeft);
  1946. spacer.bounds.SetWidth(110);
  1947. container.AddContent(spacer);
  1948. NEW(spacer); spacer.alignment.Set(WMComponents.AlignRight);
  1949. spacer.bounds.SetWidth(110);
  1950. container.AddContent(spacer);
  1951. NEW(button); button.caption.SetAOC("Cancel"); button.alignment.Set(WMComponents.AlignClient);
  1952. container.AddContent(button);
  1953. panel.AddContent(container);
  1954. NEW(spacer); spacer.alignment.Set(WMComponents.AlignBottom);
  1955. spacer.bounds.SetHeight(25);
  1956. panel.AddContent(spacer);
  1957. NEW(status); status.alignment.Set(WMComponents.AlignBottom);
  1958. status.bounds.SetHeight(20);
  1959. status.alignH.Set(1); status.alignV.Set(1);
  1960. status.caption.SetAOC("");
  1961. panel.AddContent(status);
  1962. RETURN panel;
  1963. END CreateForm;
  1964. PROCEDURE &New*;
  1965. VAR vc : WMComponents.VisualComponent;
  1966. BEGIN
  1967. mode := 0;
  1968. progress := 0;
  1969. x := 300; y := 200; shown := FALSE;
  1970. vc := CreateForm();
  1971. button.visible.Set(FALSE);
  1972. Init(vc.bounds.GetWidth(), vc.bounds.GetHeight(), FALSE);
  1973. SetContent(vc);
  1974. SetTitle(Strings.NewString(""));
  1975. END New;
  1976. PROCEDURE SetMessage(CONST msg: ARRAY OF CHAR);
  1977. BEGIN
  1978. label.caption.SetAOC(msg);
  1979. panel.Invalidate;
  1980. END SetMessage;
  1981. (*
  1982. PROCEDURE SetStatus(msg: ARRAY OF CHAR);
  1983. BEGIN
  1984. status.caption.SetAOC(msg);
  1985. panel.Invalidate;
  1986. END SetStatus;
  1987. PROCEDURE SetProgress(progress: LONGINT);
  1988. BEGIN
  1989. SELF.progress := progress;
  1990. END SetProgress;
  1991. PROCEDURE AbortHandler(sender, data: ANY);
  1992. BEGIN
  1993. IF abortProc # NIL THEN abortProc; END;
  1994. END AbortHandler;
  1995. *)
  1996. PROCEDURE SetColor(color: LONGINT);
  1997. BEGIN
  1998. panel.fillColor.Set(color);
  1999. label.fillColor.Set(color);
  2000. status.fillColor.Set(color);
  2001. END SetColor;
  2002. PROCEDURE Show*;
  2003. BEGIN
  2004. IF ~shown THEN
  2005. shown := TRUE;
  2006. manager := WMWindowManager.GetDefaultManager();
  2007. WMWindowManager.ExtAddWindow(SELF, x, y,
  2008. {WMWindowManager.FlagFrame, WMWindowManager.FlagStayOnTop, WMWindowManager.FlagClose, WMWindowManager.FlagMinimize});
  2009. END;
  2010. END Show;
  2011. PROCEDURE Hide*;
  2012. BEGIN
  2013. manager := WMWindowManager.GetDefaultManager();
  2014. manager.Remove(SELF); shown := FALSE;
  2015. END Hide;
  2016. BEGIN {ACTIVE}
  2017. IF shown THEN
  2018. END;
  2019. END PleaseWaitWindow;
  2020. (*
  2021. AnimBar = OBJECT(WMComponents.VisualComponent)
  2022. PROCEDURE Draw(canvas: WMGraphics.Canvas);
  2023. BEGIN
  2024. END Draw;
  2025. END AnimBar;
  2026. StatusBar = OBJECT(WMComponents.VisualComponent)
  2027. END StatusBar;
  2028. *)
  2029. (* --- Plugin Registry ----------------------------------- *)
  2030. PluginListEntry = OBJECT
  2031. VAR pname: ARRAY 16 OF CHAR;
  2032. next: PluginListEntry;
  2033. END PluginListEntry;
  2034. PluginList = OBJECT
  2035. VAR first: PluginListEntry;
  2036. PROCEDURE &Init*;
  2037. BEGIN
  2038. first := NIL;
  2039. END Init;
  2040. PROCEDURE Add(CONST name: ARRAY OF CHAR);
  2041. VAR nEntry : PluginListEntry;
  2042. BEGIN
  2043. NEW(nEntry); COPY(name, nEntry.pname); nEntry.next := first; first := nEntry;
  2044. END Add;
  2045. PROCEDURE Remove(CONST name: ARRAY OF CHAR);
  2046. VAR nEntry, oldEntry: PluginListEntry;
  2047. BEGIN
  2048. nEntry := first; oldEntry := NIL;
  2049. WHILE (nEntry # NIL) DO
  2050. IF (nEntry.pname = name) THEN (* remove *)
  2051. IF oldEntry = NIL THEN (* remove first *)
  2052. first := nEntry.next;
  2053. ELSE (* remove other *)
  2054. oldEntry.next := nEntry.next;
  2055. END;
  2056. END;
  2057. oldEntry := nEntry;
  2058. nEntry := nEntry.next;
  2059. END;
  2060. END Remove;
  2061. END PluginList;
  2062. PluginEntry = OBJECT
  2063. VAR
  2064. generator: DTPData.ContentFactory;
  2065. generatorName: Modules.Name;
  2066. END PluginEntry;
  2067. PluginRegistry* = OBJECT
  2068. VAR generators: XMLObjects.Dictionary;
  2069. plugList: PluginList;
  2070. PROCEDURE &Init*;
  2071. VAR arrDict: XMLObjects.ArrayDict;
  2072. BEGIN
  2073. NEW(arrDict); generators := arrDict;
  2074. NEW(plugList);
  2075. END Init;
  2076. PROCEDURE RegisterPlugin*(CONST name: ARRAY OF CHAR; generator: DTPData.ContentFactory);
  2077. VAR pe: PluginEntry; pp: ANY;
  2078. BEGIN
  2079. IF generator # Unassigned THEN
  2080. pp := generators.Get(name);
  2081. IF pp = NIL THEN
  2082. NEW(pe); pe.generator := generator;
  2083. generators.Add(name, pe);
  2084. plugList.Add(name);
  2085. ELSE
  2086. pp(PluginEntry).generator := generator; (* redefinition *)
  2087. END;
  2088. KernelLog.String("DTPEditor Plugin registered: "); KernelLog.String(name); KernelLog.Ln;
  2089. END;
  2090. END RegisterPlugin;
  2091. PROCEDURE RegisterPluginByName*(CONST name: ARRAY OF CHAR; CONST generatorName: Modules.Name);
  2092. VAR pe: PluginEntry; pp: ANY;
  2093. BEGIN
  2094. IF generatorName # "" THEN
  2095. pp := generators.Get(name);
  2096. IF pp = NIL THEN
  2097. NEW(pe); pe.generatorName := generatorName;
  2098. generators.Add(name, pe);
  2099. plugList.Add(name);
  2100. ELSE
  2101. pe(PluginEntry).generatorName := generatorName; (* redefinition *)
  2102. END;
  2103. KernelLog.String("DTPEditor Plugin registered: "); KernelLog.String(name); KernelLog.Ln;
  2104. END;
  2105. END RegisterPluginByName;
  2106. PROCEDURE UnregisterPlugin*(CONST name: ARRAY OF CHAR);
  2107. BEGIN
  2108. generators.Remove(name);
  2109. plugList.Remove(name);
  2110. END UnregisterPlugin;
  2111. PROCEDURE InstantiatePlugin*(CONST name: ARRAY OF CHAR): DTPData.ContentObject;
  2112. VAR
  2113. contentObject : DTPData.ContentObject; gen: DTPData.ContentFactory;
  2114. moduleName, procedureName : Modules.Name; msg : ARRAY 16 OF CHAR; res : WORD;
  2115. pp : ANY;
  2116. BEGIN
  2117. contentObject := NIL;
  2118. pp := generators.Get(name);
  2119. IF pp # NIL THEN
  2120. IF pp(PluginEntry).generator # NIL THEN
  2121. contentObject := pp(PluginEntry).generator();
  2122. ELSE
  2123. Commands.Split(pp(PluginEntry).generatorName, moduleName, procedureName, res, msg);
  2124. IF (res = Commands.Ok) THEN
  2125. GETPROCEDURE(moduleName, procedureName, gen);
  2126. IF gen # NIL THEN
  2127. contentObject := gen();
  2128. END;
  2129. END;
  2130. END;
  2131. END;
  2132. RETURN contentObject;
  2133. END InstantiatePlugin;
  2134. PROCEDURE GetNumberOfPlugins*(): LONGINT;
  2135. BEGIN
  2136. RETURN generators.GetNumberOfElements();
  2137. END GetNumberOfPlugins;
  2138. PROCEDURE GetPluginList*(): PluginList;
  2139. BEGIN
  2140. RETURN plugList;
  2141. END GetPluginList;
  2142. PROCEDURE GetPlugins*(): XMLObjects.Enumerator;
  2143. BEGIN
  2144. RETURN generators.GetEnumerator();
  2145. END GetPlugins;
  2146. END PluginRegistry;
  2147. (* MasterPages = POINTER TO ARRAY OF MasterPageObject;
  2148. ContentPages = POINTER TO ARRAY OF PageObject;
  2149. Styles = POINTER TO ARRAY OF StyleObject;
  2150. Contents = POINTER TO ARRAY OF DTPFrame.ContentObject;
  2151. *)
  2152. VAR
  2153. nofWindows : LONGINT;
  2154. plugRegistry*: PluginRegistry;
  2155. Unassigned: DTPData.ContentFactory;
  2156. (*
  2157. PROCEDURE Min(a, b: REAL): REAL;
  2158. BEGIN
  2159. IF a <= b THEN RETURN a ELSE RETURN b END;
  2160. END Min;
  2161. PROCEDURE Max(a, b: REAL): REAL;
  2162. BEGIN
  2163. IF a >= b THEN RETURN a ELSE RETURN b END;
  2164. END Max;
  2165. *)
  2166. PROCEDURE OpenNew*;
  2167. VAR instance : Window;
  2168. BEGIN
  2169. NEW(instance, NIL);
  2170. instance.CreateNew;
  2171. END OpenNew;
  2172. PROCEDURE OpenEmptyA4portrait*;
  2173. VAR instance : Window;
  2174. BEGIN
  2175. NEW(instance, NIL);
  2176. instance.CreateDoc(210, 297, 15, 15, 15, 15, FALSE);
  2177. END OpenEmptyA4portrait;
  2178. PROCEDURE OpenEmptyA4landscape*;
  2179. VAR instance : Window;
  2180. BEGIN
  2181. NEW(instance, NIL);
  2182. instance.CreateDoc(297, 210, 15, 15, 15, 15, FALSE);
  2183. END OpenEmptyA4landscape;
  2184. PROCEDURE OpenEmptyA5portrait*;
  2185. VAR instance : Window;
  2186. BEGIN
  2187. NEW(instance, NIL);
  2188. instance.CreateDoc(148, 210, 15, 15, 15, 15, FALSE);
  2189. END OpenEmptyA5portrait;
  2190. PROCEDURE OpenEmptyA5landscape*;
  2191. VAR instance : Window;
  2192. BEGIN
  2193. NEW(instance, NIL);
  2194. instance.CreateDoc(210, 148, 15, 15, 15, 15, FALSE);
  2195. END OpenEmptyA5landscape;
  2196. PROCEDURE OpenEmpty*(context : Commands.Context);
  2197. VAR instance : Window;
  2198. w, h, mt, mb, ml, mr : REAL; f : LONGINT; fp : BOOLEAN;
  2199. dstring : ARRAY 16 OF CHAR;
  2200. lreal : LONGREAL;
  2201. BEGIN
  2202. context.arg.SkipWhitespace; context.arg.Token(dstring);
  2203. Strings.StrToFloat(dstring, lreal); w := SHORT(lreal);
  2204. context.arg.SkipWhitespace; context.arg.Token(dstring);
  2205. Strings.StrToFloat(dstring, lreal); h := SHORT(lreal);
  2206. context.arg.SkipWhitespace; context.arg.Token(dstring);
  2207. Strings.StrToFloat(dstring, lreal); mt := SHORT(lreal);
  2208. context.arg.SkipWhitespace; context.arg.Token(dstring);
  2209. Strings.StrToFloat(dstring, lreal); mb := SHORT(lreal);
  2210. context.arg.SkipWhitespace; context.arg.Token(dstring);
  2211. Strings.StrToFloat(dstring, lreal); ml := SHORT(lreal);
  2212. context.arg.SkipWhitespace; context.arg.Token(dstring);
  2213. Strings.StrToFloat(dstring, lreal); mr := SHORT(lreal);
  2214. context.arg.SkipWhitespace; context.arg.Int(f, FALSE);
  2215. IF f = 0 THEN fp := FALSE ELSE fp:= TRUE END;
  2216. NEW(instance, NIL);
  2217. instance.CreateDoc(w, h, mt, mb, ml, mr, fp);
  2218. END OpenEmpty;
  2219. PROCEDURE Open*(context : Commands.Context);
  2220. VAR instance : Window; name : ARRAY 256 OF CHAR;
  2221. BEGIN
  2222. IF context.arg.GetString(name) THEN
  2223. NEW(instance, NIL);
  2224. instance.CreateDoc(10, 10, 0, 0, 0, 0, FALSE);
  2225. instance.Load(name, 0);
  2226. END;
  2227. END Open;
  2228. PROCEDURE Restore*(context : WMRestorable.Context);
  2229. VAR w : Window;
  2230. BEGIN
  2231. NEW(w, context)
  2232. END Restore;
  2233. PROCEDURE IncCount;
  2234. BEGIN {EXCLUSIVE}
  2235. INC(nofWindows)
  2236. END IncCount;
  2237. PROCEDURE DecCount;
  2238. BEGIN {EXCLUSIVE}
  2239. DEC(nofWindows)
  2240. END DecCount;
  2241. PROCEDURE Cleanup;
  2242. VAR die : KillerMsg;
  2243. msg : WMMessages.Message;
  2244. m : WMWindowManager.WindowManager;
  2245. BEGIN {EXCLUSIVE}
  2246. NEW(die);
  2247. msg.ext := die;
  2248. msg.msgType := WMMessages.MsgExt;
  2249. m := WMWindowManager.GetDefaultManager();
  2250. m.Broadcast(msg);
  2251. AWAIT(nofWindows = 0)
  2252. END Cleanup;
  2253. BEGIN
  2254. NEW(plugRegistry);
  2255. Modules.InstallTermHandler(Cleanup)
  2256. END DTPEditor.
  2257. --- DTP Stuff -----------------------------------
  2258. DTPRect.Register~
  2259. DTPImage.Register~
  2260. DTPText.Register~
  2261. DTPEditor.OpenNew ~
  2262. DTPEditor.OpenEmptyA4portrait ~
  2263. DTPEditor.OpenEmptyA5portrait ~
  2264. DTPEditor.OpenEmptyA4landscape ~
  2265. DTPEditor.OpenEmptyA5landscape ~
  2266. DTPEditor.OpenEmpty 100 100 5.5 5.5 7.5 7.5 0 ~
  2267. DTPEditor.OpenEmpty 297 420 15 15 15 15 0 ~
  2268. DTPEditor.OpenEmpty 320 240 10 10 10 10 0 ~
  2269. DTPEditor.OpenEmpty 126 178 10 10 10 10 0 ~
  2270. DTPEditor.Open myDTPdocument ~
  2271. SystemTools.Free DTPText DTPImage DTPRect DTPEditor DTPView DTPUtilities DTPData~
  2272. PC.Compile DTPData.Mod DTPUtilities.Mod DTPView.Mod DTPEditor.Mod DTPRect.Mod DTPImage.Mod DTPText.Mod~