2
0

DTPEditor.Mod 90 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514
  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 : WMGraphics.Color;
  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: LONGINT; res: WORD; 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 : WMGraphics.Color;
  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. PROCEDURE OpenNew*;
  2157. VAR instance : Window;
  2158. BEGIN
  2159. NEW(instance, NIL);
  2160. instance.CreateNew;
  2161. END OpenNew;
  2162. PROCEDURE OpenEmptyA4portrait*;
  2163. VAR instance : Window;
  2164. BEGIN
  2165. NEW(instance, NIL);
  2166. instance.CreateDoc(210, 297, 15, 15, 15, 15, FALSE);
  2167. END OpenEmptyA4portrait;
  2168. PROCEDURE OpenEmptyA4landscape*;
  2169. VAR instance : Window;
  2170. BEGIN
  2171. NEW(instance, NIL);
  2172. instance.CreateDoc(297, 210, 15, 15, 15, 15, FALSE);
  2173. END OpenEmptyA4landscape;
  2174. PROCEDURE OpenEmptyA5portrait*;
  2175. VAR instance : Window;
  2176. BEGIN
  2177. NEW(instance, NIL);
  2178. instance.CreateDoc(148, 210, 15, 15, 15, 15, FALSE);
  2179. END OpenEmptyA5portrait;
  2180. PROCEDURE OpenEmptyA5landscape*;
  2181. VAR instance : Window;
  2182. BEGIN
  2183. NEW(instance, NIL);
  2184. instance.CreateDoc(210, 148, 15, 15, 15, 15, FALSE);
  2185. END OpenEmptyA5landscape;
  2186. PROCEDURE OpenEmpty*(context : Commands.Context);
  2187. VAR instance : Window;
  2188. w, h, mt, mb, ml, mr : REAL; f : LONGINT; fp : BOOLEAN;
  2189. dstring : ARRAY 16 OF CHAR;
  2190. lreal : LONGREAL;
  2191. BEGIN
  2192. context.arg.SkipWhitespace; context.arg.Token(dstring);
  2193. Strings.StrToFloat(dstring, lreal); w := SHORT(lreal);
  2194. context.arg.SkipWhitespace; context.arg.Token(dstring);
  2195. Strings.StrToFloat(dstring, lreal); h := SHORT(lreal);
  2196. context.arg.SkipWhitespace; context.arg.Token(dstring);
  2197. Strings.StrToFloat(dstring, lreal); mt := SHORT(lreal);
  2198. context.arg.SkipWhitespace; context.arg.Token(dstring);
  2199. Strings.StrToFloat(dstring, lreal); mb := SHORT(lreal);
  2200. context.arg.SkipWhitespace; context.arg.Token(dstring);
  2201. Strings.StrToFloat(dstring, lreal); ml := SHORT(lreal);
  2202. context.arg.SkipWhitespace; context.arg.Token(dstring);
  2203. Strings.StrToFloat(dstring, lreal); mr := SHORT(lreal);
  2204. context.arg.SkipWhitespace; context.arg.Int(f, FALSE);
  2205. IF f = 0 THEN fp := FALSE ELSE fp:= TRUE END;
  2206. NEW(instance, NIL);
  2207. instance.CreateDoc(w, h, mt, mb, ml, mr, fp);
  2208. END OpenEmpty;
  2209. PROCEDURE Open*(context : Commands.Context);
  2210. VAR instance : Window; name : ARRAY 256 OF CHAR;
  2211. BEGIN
  2212. IF context.arg.GetString(name) THEN
  2213. NEW(instance, NIL);
  2214. instance.CreateDoc(10, 10, 0, 0, 0, 0, FALSE);
  2215. instance.Load(name, 0);
  2216. END;
  2217. END Open;
  2218. PROCEDURE Restore*(context : WMRestorable.Context);
  2219. VAR w : Window;
  2220. BEGIN
  2221. NEW(w, context)
  2222. END Restore;
  2223. PROCEDURE IncCount;
  2224. BEGIN {EXCLUSIVE}
  2225. INC(nofWindows)
  2226. END IncCount;
  2227. PROCEDURE DecCount;
  2228. BEGIN {EXCLUSIVE}
  2229. DEC(nofWindows)
  2230. END DecCount;
  2231. PROCEDURE Cleanup;
  2232. VAR die : KillerMsg;
  2233. msg : WMMessages.Message;
  2234. m : WMWindowManager.WindowManager;
  2235. BEGIN {EXCLUSIVE}
  2236. NEW(die);
  2237. msg.ext := die;
  2238. msg.msgType := WMMessages.MsgExt;
  2239. m := WMWindowManager.GetDefaultManager();
  2240. m.Broadcast(msg);
  2241. AWAIT(nofWindows = 0)
  2242. END Cleanup;
  2243. BEGIN
  2244. NEW(plugRegistry);
  2245. Modules.InstallTermHandler(Cleanup)
  2246. END DTPEditor.
  2247. --- DTP Stuff -----------------------------------
  2248. DTPRect.Register~
  2249. DTPImage.Register~
  2250. DTPText.Register~
  2251. DTPEditor.OpenNew ~
  2252. DTPEditor.OpenEmptyA4portrait ~
  2253. DTPEditor.OpenEmptyA5portrait ~
  2254. DTPEditor.OpenEmptyA4landscape ~
  2255. DTPEditor.OpenEmptyA5landscape ~
  2256. DTPEditor.OpenEmpty 100 100 5.5 5.5 7.5 7.5 0 ~
  2257. DTPEditor.OpenEmpty 297 420 15 15 15 15 0 ~
  2258. DTPEditor.OpenEmpty 320 240 10 10 10 10 0 ~
  2259. DTPEditor.OpenEmpty 126 178 10 10 10 10 0 ~
  2260. DTPEditor.Open myDTPdocument ~
  2261. System.Free DTPText DTPImage DTPRect DTPEditor DTPView DTPUtilities DTPData~
  2262. PC.Compile DTPData.Mod DTPUtilities.Mod DTPView.Mod DTPEditor.Mod DTPRect.Mod DTPImage.Mod DTPText.Mod~