DTPView.Mod 92 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423
  1. MODULE DTPView; (** AUTHOR "PL"; PURPOSE "View for simple DTP Editor"; *)
  2. IMPORT
  3. WMStandardComponents, WMGraphics, Inputs,
  4. WMComponents, WMRectangles, WMEditors, Strings,
  5. WMWindowManager, DTPData, DTPUtilities; (* , DTPFrame *)
  6. CONST
  7. RULERSIZE = 20;
  8. HIGHLIGHT = LONGINT(0FF8800FFH);
  9. ACTIVEFRAMECOLOR = 00000FFFFH;
  10. FRAMECOLOR = 00088FFFFH;
  11. MASTERFRAMECOLOR = 000FF88FFH;
  12. BORDERCOLOR = LONGINT(0FF00FFFFH);
  13. GUIDECOLOR = 000FFFFFFH;
  14. GRIDCOLOR = LONGINT(0BABABAFFH);
  15. SUBGRIDCOLOR = LONGINT(0DDDDDDFFH);
  16. point = 0.3527777778; (* 1/72 inch *)
  17. VAR
  18. TYPE
  19. DrawPanel* = OBJECT(WMComponents.VisualComponent)
  20. VAR
  21. (* parentWindow : Window; *)
  22. document : DTPData.Document;
  23. cpage: DTPData.PageObject;
  24. cframe, activeFrame*: DTPData.FrameObject;
  25. cguide: DTPData.GuideObject;
  26. ccontent: DTPData.ContentObject;
  27. ready* : BOOLEAN;
  28. vScrollbar- : WMStandardComponents.Scrollbar;
  29. hScrollbar- : WMStandardComponents.Scrollbar;
  30. zoomFactor : REAL; quality : BOOLEAN;
  31. zoomUser : REAL;
  32. zoomMode- : LONGINT; (* 0 : ZoomFitDoc *)
  33. (* 1 : ZoomFitWidth *)
  34. (* 2 : ZoomFitHeight *)
  35. (* 3 : ZoomFitFrame *)
  36. (* 4 : ZoomFitOriginal *)
  37. (* 5 : ZoomFitUser *)
  38. docOriginX, docOriginY : LONGINT; snapDistance: REAL;
  39. showGrid, snapToGrid : BOOLEAN; gridDistance : REAL; gridDivision : LONGINT;
  40. wheelMode- : LONGINT;
  41. previewMode* : BOOLEAN;
  42. mpageMode* : BOOLEAN;
  43. render : BOOLEAN;
  44. selectionON* : BOOLEAN;
  45. snapOnCreate: BOOLEAN;
  46. activeTool*: Strings.String;
  47. x0, y0, x1, y1, dx, dy, gx, gy, vx0, vy0, vx1, vy1: LONGINT;
  48. fx0, fy0, fx1, fy1, tx0, ty0, tx1, ty1: REAL;
  49. res, res2: LONGINT;
  50. down, move, resize, addobject, addguide, moveguide, oldpointer: BOOLEAN;
  51. prevPointerInfo: WMWindowManager.PointerInfo;
  52. oldPointerInfo: LONGINT;
  53. plugPointer: BOOLEAN;
  54. manager : WMWindowManager.WindowManager;
  55. oldfx0, oldfy0, oldfx1, oldfy1: REAL;
  56. props*: PropertyWindow;
  57. propertyOpen*: BOOLEAN;
  58. propsX*, propsY*: LONGINT;
  59. (* nObj*: NewObjectDialog;
  60. newObjOpen*: BOOLEAN;
  61. *)
  62. (* DELEGATES *)
  63. newPluginObject* : PROCEDURE {DELEGATE} (): DTPData.ContentObject;
  64. ownerWindowSetFocus* : PROCEDURE {DELEGATE};
  65. ownerWindowUpdatePageNumber* : PROCEDURE {DELEGATE};
  66. ownerWindowExitFullScreen*: PROCEDURE {DELEGATE};
  67. PROCEDURE &Init*;
  68. BEGIN
  69. Init^;
  70. ready := FALSE;
  71. document := NIL;
  72. (* default values *)
  73. fillColor.Set(0888888FFH);
  74. docOriginX := 30; docOriginY := 30;
  75. propsX := 820; propsY := 350;
  76. showGrid := TRUE; snapToGrid := FALSE; gridDistance := 50; gridDivision := 10;
  77. previewMode := FALSE;
  78. down := FALSE; move := FALSE; resize := FALSE; addguide := FALSE; moveguide := FALSE; addobject := FALSE;
  79. takesFocus.Set(TRUE); oldpointer := TRUE; plugPointer := FALSE;
  80. snapDistance := 2.0;
  81. zoomMode := 0;
  82. selectionON := TRUE;
  83. snapOnCreate := FALSE;
  84. quality := TRUE;
  85. render := FALSE;
  86. needsTab.Set(TRUE);
  87. wheelMode := 0;
  88. NEW(props, SELF); props.Show; propertyOpen := TRUE;
  89. (* newObjOpen := FALSE; *)
  90. manager := WMWindowManager.GetDefaultManager();
  91. END Init;
  92. PROCEDURE PropertyChanged*(sender, property : ANY);
  93. BEGIN
  94. IF property = fillColor THEN Invalidate
  95. ELSE PropertyChanged^(sender, property)
  96. END;
  97. END PropertyChanged;
  98. PROCEDURE Resized*;
  99. VAR
  100. cpage: DTPData.PageObject;
  101. cframe: DTPData.FrameObject;
  102. ccontent : DTPData.ContentObject;
  103. BEGIN
  104. IF document = NIL THEN
  105. RETURN
  106. END;
  107. CASE zoomMode OF (* zoom current view *)
  108. 0: ZoomFitDoc;
  109. | 1: ZoomFitWidth;
  110. | 2: ZoomFitHeight;
  111. | 3: ZoomFitFrame;
  112. | 4: ZoomFitOriginal;
  113. | 5: ZoomFitUser;
  114. ELSE
  115. END;
  116. cpage := document.GetCurrentMasterPage();
  117. IF (cpage # NIL) THEN
  118. cframe := cpage.GetFirstFrame();
  119. WHILE (cframe # NIL) DO
  120. ccontent := cframe.GetContent();
  121. IF ccontent # NIL THEN
  122. ccontent.Resize(zoomFactor);
  123. ccontent.SetSize(ENTIER(cframe.GetWidth()*zoomFactor), ENTIER(cframe.GetHeight()*zoomFactor));
  124. END;
  125. cframe := cframe.next;
  126. END;
  127. END;
  128. cpage := document.GetCurrentPage();
  129. IF (cpage # NIL) THEN
  130. cframe := cpage.GetFirstFrame();
  131. WHILE (cframe # NIL) DO
  132. (* tempString := cframe.GetName(); *)
  133. (* KernelLog.String("Setting: "); KernelLog.String(tempString^); KernelLog.Int(ENTIER(cframe.GetWidth()*zoomFactor), 0); KernelLog.Int(ENTIER(cframe.GetHeight()*zoomFactor), 0); KernelLog.Ln; *)
  134. ccontent := cframe.GetContent();
  135. IF ccontent # NIL THEN
  136. ccontent.Resize(zoomFactor);
  137. ccontent.SetSize(ENTIER(cframe.GetWidth()*zoomFactor), ENTIER(cframe.GetHeight()*zoomFactor));
  138. END;
  139. cframe := cframe.next;
  140. END;
  141. END;
  142. Invalidate;
  143. END Resized;
  144. PROCEDURE Render*(state : BOOLEAN);
  145. BEGIN
  146. render := state;
  147. END Render;
  148. PROCEDURE RecacheProperties*;
  149. BEGIN
  150. RecacheProperties^;
  151. Invalidate;
  152. END RecacheProperties;
  153. PROCEDURE SetScrollbars*(hScrollbar, vScrollbar : WMStandardComponents.Scrollbar);
  154. BEGIN
  155. Acquire;
  156. IF hScrollbar # NIL THEN hScrollbar.onPositionChanged.Remove(ScrollbarsChanged) END;
  157. IF vScrollbar # NIL THEN vScrollbar.onPositionChanged.Remove(ScrollbarsChanged) END;
  158. SELF.hScrollbar := hScrollbar; SELF.vScrollbar := vScrollbar;
  159. hScrollbar.onPositionChanged.Add(ScrollbarsChanged);
  160. vScrollbar.onPositionChanged.Add(ScrollbarsChanged);
  161. UpdateScrollbars;
  162. Release;
  163. END SetScrollbars;
  164. PROCEDURE ScrollbarsChanged*(sender, data : ANY);
  165. BEGIN
  166. IF document # NIL THEN
  167. IF ~IsCallFromSequencer() THEN sequencer.ScheduleEvent(SELF.ScrollbarsChanged, sender, data)
  168. ELSE
  169. IF sender = vScrollbar THEN
  170. docOriginY := -ENTIER(vScrollbar.pos.Get()/100*(zoomFactor*document.GetPageHeight()+50)) + 30;
  171. (* KernelLog.Int(docOriginY, 0); KernelLog.Ln; *)
  172. ELSIF sender = hScrollbar THEN
  173. docOriginX := -ENTIER(hScrollbar.pos.Get()/100*(zoomFactor*document.GetPageWidth()+50)) + 30;
  174. (* KernelLog.Int(docOriginX, 0); KernelLog.Ln; *)
  175. END;
  176. Invalidate;
  177. END;
  178. END;
  179. END ScrollbarsChanged;
  180. PROCEDURE UpdateScrollbars;
  181. BEGIN
  182. IF document # NIL THEN
  183. IF vScrollbar # NIL THEN
  184. (* vScrollbar.max.Set(ENTIER(document.GetPageHeight()*zoomFactor)); *)
  185. (* vScrollbar.pageSize.Set(bounds.GetHeight()); *)
  186. vScrollbar.pos.Set(docOriginY);
  187. END;
  188. IF hScrollbar # NIL THEN
  189. (* hScrollbar.visible.Set(layout.textWidth > bounds.GetWidth()); *)
  190. (* hScrollbar.max.Set(ENTIER(document.GetPageWidth()*zoomFactor)); *)
  191. (* hScrollbar.pageSize.Set(bounds.GetWidth()); *)
  192. hScrollbar.pos.Set(docOriginX);
  193. END;
  194. END;
  195. END UpdateScrollbars;
  196. PROCEDURE SetDocument*(doc: DTPData.Document);
  197. BEGIN
  198. document := doc;
  199. (* IF (document.GetPageWidth() > 0) & (document.GetPageHeight() > 0) & THEN
  200. ready := TRUE;
  201. END;
  202. *) END SetDocument;
  203. PROCEDURE GetDocument*(): DTPData.Document;
  204. BEGIN
  205. RETURN document;
  206. END GetDocument;
  207. PROCEDURE SetZoomMode*(mode : LONGINT);
  208. BEGIN
  209. zoomMode := mode;
  210. Resized;
  211. Invalidate;
  212. zoomUser := zoomFactor;
  213. END SetZoomMode;
  214. PROCEDURE SetRenderZoomMode*(mode: LONGINT);
  215. VAR (* tempString: Strings.String; *)
  216. cpage: DTPData.PageObject;
  217. cframe: DTPData.FrameObject;
  218. ccontent : DTPData.ContentObject;
  219. BEGIN
  220. zoomMode := mode;
  221. CASE zoomMode OF (* zoom current view *)
  222. 0: ZoomFitDoc;
  223. | 1: ZoomFitWidth;
  224. | 2: ZoomFitHeight;
  225. | 3: ZoomFitFrame;
  226. | 4: ZoomFitOriginal;
  227. | 5: ZoomFitUser;
  228. ELSE
  229. END;
  230. cpage := document.GetCurrentMasterPage();
  231. IF (cpage # NIL) THEN
  232. cframe := cpage.GetFirstFrame();
  233. WHILE (cframe # NIL) DO
  234. ccontent := cframe.GetContent();
  235. IF ccontent # NIL THEN
  236. ccontent.Resize(zoomFactor);
  237. ccontent.SetSize(ENTIER(cframe.GetWidth()*zoomFactor), ENTIER(cframe.GetHeight()*zoomFactor));
  238. END;
  239. cframe := cframe.next;
  240. END;
  241. END;
  242. cpage := document.GetCurrentPage();
  243. IF (cpage # NIL) THEN
  244. cframe := cpage.GetFirstFrame();
  245. WHILE (cframe # NIL) DO
  246. (* tempString := cframe.GetName(); *)
  247. (* KernelLog.String("Setting: "); KernelLog.String(tempString^); KernelLog.Int(ENTIER(cframe.GetWidth()*zoomFactor), 0); KernelLog.Int(ENTIER(cframe.GetHeight()*zoomFactor), 0); KernelLog.Ln; *)
  248. ccontent := cframe.GetContent();
  249. IF ccontent # NIL THEN
  250. ccontent.Resize(zoomFactor);
  251. ccontent.SetSize(ENTIER(cframe.GetWidth()*zoomFactor), ENTIER(cframe.GetHeight()*zoomFactor));
  252. END;
  253. cframe := cframe.next;
  254. END;
  255. END;
  256. (* Invalidate; *)
  257. END SetRenderZoomMode;
  258. PROCEDURE ZoomFitHeight*;
  259. VAR drawPanelW, drawPanelH : REAL;
  260. docW, docH : REAL;
  261. BEGIN
  262. docW := document.GetPageWidth();
  263. docH := document.GetPageHeight();
  264. drawPanelW := bounds.GetWidth();
  265. drawPanelH := bounds.GetHeight();
  266. zoomFactor := (drawPanelH - 2*RULERSIZE)/docH;
  267. END ZoomFitHeight;
  268. PROCEDURE ZoomFitWidth*;
  269. VAR drawPanelW, drawPanelH : REAL;
  270. docW, docH : REAL;
  271. BEGIN
  272. docW := document.GetPageWidth();
  273. docH := document.GetPageHeight();
  274. drawPanelW := bounds.GetWidth();
  275. drawPanelH := bounds.GetHeight();
  276. zoomFactor := (drawPanelW - 2*RULERSIZE)/docW;
  277. END ZoomFitWidth;
  278. PROCEDURE ZoomFitDoc*;
  279. VAR drawPanelW, drawPanelH : REAL;
  280. docW, docH : REAL;
  281. ratioPanel, ratioDoc : REAL;
  282. BEGIN
  283. docW := document.GetPageWidth();
  284. docH := document.GetPageHeight();
  285. drawPanelW := bounds.GetWidth();
  286. drawPanelH := bounds.GetHeight();
  287. ratioPanel := (drawPanelW-RULERSIZE) / (drawPanelH-RULERSIZE);
  288. ratioDoc := docW / docH;
  289. IF ratioDoc > ratioPanel THEN
  290. zoomFactor := (drawPanelW-2*RULERSIZE)/docW; (* zoom fit width *)
  291. ELSE
  292. zoomFactor := (drawPanelH-2*RULERSIZE)/docH; (* zoom fit height *)
  293. END
  294. END ZoomFitDoc;
  295. PROCEDURE ZoomFitFrame*;
  296. VAR drawPanelW, drawPanelH : REAL;
  297. frameW, frameH : REAL;
  298. cpage : DTPData.PageObject;
  299. BEGIN
  300. IF (document # NIL) THEN
  301. IF mpageMode THEN
  302. cpage := document.GetCurrentMasterPage();
  303. ELSE
  304. cpage := document.GetCurrentPage();
  305. END;
  306. IF (cpage # NIL) & (cpage.currentFrame # NIL) THEN
  307. frameW := cpage.currentFrame.GetWidth();
  308. frameH := cpage.currentFrame.GetHeight();
  309. drawPanelW := bounds.GetWidth();
  310. drawPanelH := bounds.GetHeight();
  311. IF frameW > frameH THEN
  312. zoomFactor := (drawPanelW-2*RULERSIZE)/frameW;
  313. ELSE
  314. zoomFactor := (drawPanelH-2*RULERSIZE)/frameH;
  315. END;
  316. docOriginX := ENTIER(30-cpage.currentFrame.GetX()*zoomFactor);
  317. docOriginY := ENTIER(30-cpage.currentFrame.GetY()*zoomFactor);
  318. (* KernelLog.Int(docOriginX, 0); KernelLog.Ln; *)
  319. END;
  320. zoomUser := zoomFactor;
  321. SetZoomMode(5);
  322. END;
  323. END ZoomFitFrame;
  324. PROCEDURE ZoomFitUser*;
  325. BEGIN
  326. zoomFactor := zoomUser;
  327. END ZoomFitUser;
  328. PROCEDURE ZoomFitOriginal*;
  329. BEGIN
  330. zoomFactor := 1/point;
  331. END ZoomFitOriginal;
  332. PROCEDURE ZoomIncrease*;
  333. VAR (* tempString : ARRAY 64 OF CHAR; *)
  334. BEGIN
  335. zoomUser := 1.1*zoomFactor;
  336. (* Strings.FloatToStr(zoomUser, 0,4,0,tempString); KernelLog.String(tempString); *)
  337. (* ZoomFitUser; *)
  338. END ZoomIncrease;
  339. PROCEDURE ZoomDecrease*;
  340. VAR (* tempString : ARRAY 64 OF CHAR; *)
  341. BEGIN
  342. zoomUser := 0.9*zoomFactor;
  343. (* Strings.FloatToStr(zoomUser, 0,4,0,tempString); KernelLog.String(tempString); *)
  344. (* ZoomFitUser; *)
  345. END ZoomDecrease;
  346. PROCEDURE SetZoomUser*(factor: REAL);
  347. BEGIN
  348. zoomUser := factor;
  349. END SetZoomUser;
  350. PROCEDURE SetZoomFactor*(factor : REAL);
  351. BEGIN
  352. zoomFactor := factor;
  353. END SetZoomFactor;
  354. PROCEDURE GetZoomFactor*() : REAL;
  355. BEGIN
  356. RETURN zoomFactor
  357. END GetZoomFactor;
  358. PROCEDURE SetOrigin*(x, y : LONGINT);
  359. BEGIN
  360. docOriginX := x;
  361. docOriginY := y;
  362. END SetOrigin;
  363. PROCEDURE GetOriginX*(): LONGINT;
  364. BEGIN
  365. RETURN docOriginX
  366. END GetOriginX;
  367. PROCEDURE GetOriginY*(): LONGINT;
  368. BEGIN
  369. RETURN docOriginY
  370. END GetOriginY;
  371. PROCEDURE SetSnapDistance*(distance: REAL);
  372. BEGIN
  373. snapDistance := distance;
  374. END SetSnapDistance;
  375. PROCEDURE GetSnapDistance*(): REAL;
  376. BEGIN
  377. RETURN snapDistance;
  378. END GetSnapDistance;
  379. PROCEDURE SetSnap*(s2grid: BOOLEAN);
  380. BEGIN
  381. snapToGrid := s2grid;
  382. END SetSnap;
  383. PROCEDURE GetSnap*(): BOOLEAN;
  384. BEGIN
  385. RETURN snapToGrid;
  386. END GetSnap;
  387. PROCEDURE SetPreviewMode*(prevMode : BOOLEAN);
  388. BEGIN
  389. previewMode := prevMode;
  390. END SetPreviewMode;
  391. PROCEDURE GetPreviewMode*() : BOOLEAN;
  392. BEGIN
  393. RETURN previewMode;
  394. END GetPreviewMode;
  395. PROCEDURE SetMasterEditMode*(masterMode: BOOLEAN);
  396. BEGIN
  397. mpageMode := masterMode;
  398. END SetMasterEditMode;
  399. PROCEDURE GetMasterEditMode*(): BOOLEAN;
  400. BEGIN
  401. RETURN mpageMode;
  402. END GetMasterEditMode;
  403. PROCEDURE ShowGrid*(sGrid : BOOLEAN);
  404. BEGIN
  405. showGrid := sGrid;
  406. END ShowGrid;
  407. PROCEDURE SetGrid*(gDist : REAL; gDiv : LONGINT);
  408. BEGIN
  409. gridDistance := gDist;
  410. gridDivision := gDiv;
  411. END SetGrid;
  412. PROCEDURE WheelMove*(dz: LONGINT);
  413. BEGIN
  414. IF ~previewMode THEN
  415. IF wheelMode = 0 THEN (* wheel zoom *)
  416. zoomMode := 5;
  417. zoomUser := (1+dz/30)*zoomFactor;
  418. (* ZoomFitUser; *)
  419. Resized;
  420. Invalidate;
  421. ELSIF wheelMode = 1 THEN (* wheel scroll vertical *)
  422. ELSIF wheelMode = 2 THEN (* wheel scroll horizontal *)
  423. ELSE
  424. END;
  425. END;
  426. END WheelMove;
  427. PROCEDURE PointerDown*(x, y : LONGINT; keys : SET);
  428. VAR
  429. (* cpage: DTPData.PageObject;
  430. cframe: DTPData.FrameObject;
  431. cguide: DTPData.GuideObject;
  432. *)
  433. fx, fy: REAL;
  434. px, py, pw, ph: LONGINT;
  435. horizontal: BOOLEAN;
  436. snapLeft, snapTop, snapRight, snapBottom : BOOLEAN;
  437. BEGIN
  438. down := 0 IN keys;
  439. IF document # NIL THEN
  440. IF mpageMode THEN
  441. cpage := document.GetCurrentMasterPage();
  442. ELSE
  443. cpage := document.GetCurrentPage();
  444. END;
  445. IF ~previewMode THEN (* Document Edit Mode *)
  446. x0 := x; y0 := y;
  447. IF WillSnap((x-docOriginX)/zoomFactor, (y-docOriginY)/zoomFactor, (x-docOriginX)/zoomFactor, (y-docOriginY)/zoomFactor, snapLeft, snapTop, snapRight, snapBottom, fx, fy) THEN
  448. IF snapLeft OR snapRight THEN tx0 := fx ELSE tx0 := -1; END;
  449. IF snapTop OR snapBottom THEN ty0 := fy ELSE ty0 := -1; END;
  450. snapOnCreate := TRUE;
  451. END;
  452. IF ~selectionON THEN (* plugin Selected *)
  453. cframe := cpage.GetCurrentFrame();
  454. (* click inside Frame Bounds *)
  455. IF (cframe # NIL) & WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(ENTIER(cframe.GetX()*zoomFactor)+docOriginX, ENTIER(cframe.GetY()*zoomFactor)+docOriginY, ENTIER((cframe.GetX()+cframe.GetWidth())*zoomFactor)+docOriginX, ENTIER((cframe.GetY()+cframe.GetHeight())*zoomFactor)+docOriginY)) THEN
  456. ccontent := cframe.GetContent();
  457. ccontent.FocusReceived;
  458. ccontent.PointerDown(x-ENTIER(cframe.GetX()*zoomFactor)-docOriginX, y-ENTIER(cframe.GetY()*zoomFactor)-docOriginY, keys);
  459. addobject := FALSE;
  460. ELSE
  461. addobject := TRUE;
  462. IF ccontent # NIL THEN
  463. ccontent.FocusLost();
  464. END;
  465. END;
  466. props.SetInactive;
  467. props.InitValues;
  468. ELSE (* selectiontool *)
  469. cframe := cpage.GetCurrentFrame();
  470. cguide := cpage.GetCurrentGuide();
  471. IF ccontent # NIL THEN (* Plugin Focus Lost *)
  472. ccontent.FocusLost;
  473. END;
  474. IF cframe # NIL THEN
  475. px := ENTIER(cframe.GetX()*zoomFactor)+docOriginX;
  476. py := ENTIER(cframe.GetY()*zoomFactor)+docOriginY;
  477. pw := ENTIER(cframe.GetWidth()*zoomFactor);
  478. ph := ENTIER(cframe.GetHeight()*zoomFactor);
  479. IF WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(px+2, py+2, px+pw-2, py+ph-2)) THEN
  480. move := TRUE; quality := FALSE;
  481. dx := px - x;
  482. dy := py - y;
  483. ELSE
  484. (* resize *)
  485. res := IsInFrameHandle(x, y);
  486. IF res >= 0 THEN
  487. fx0 := ENTIER(cframe.GetX()*zoomFactor)+docOriginX;
  488. fy0 := ENTIER(cframe.GetY()*zoomFactor)+docOriginY;
  489. fx1 := ENTIER(cframe.GetWidth()*zoomFactor)+fx0;
  490. fy1 := ENTIER(cframe.GetHeight()*zoomFactor)+fy0;
  491. resize := TRUE; quality := FALSE;
  492. END;
  493. END;
  494. ELSIF cguide # NIL THEN
  495. horizontal := cguide.GetHorizontal();
  496. IF horizontal THEN
  497. IF (y1<(cguide.GetPosition()*zoomFactor+docOriginY+1)) & (y1>(cguide.GetPosition()*zoomFactor+docOriginY-1)) THEN
  498. moveguide := TRUE;
  499. END;
  500. ELSE
  501. IF (x1<(cguide.GetPosition()*zoomFactor+docOriginX+1)) & (x1>(cguide.GetPosition()*zoomFactor+docOriginX-1)) THEN
  502. moveguide := TRUE;
  503. END;
  504. END;
  505. END;
  506. (* add guide *)
  507. res2 := IsInRuler(x, y);
  508. IF res2 >= 0 THEN
  509. addguide := TRUE;
  510. END;
  511. END;
  512. UpdateProps;
  513. ELSE (* preview Mode *)
  514. IF 0 IN keys THEN
  515. document.NextPage;
  516. Resized;
  517. Invalidate;
  518. ELSIF 2 IN keys THEN
  519. document.PrevPage;
  520. Resized;
  521. Invalidate;
  522. END;
  523. ownerWindowUpdatePageNumber;
  524. END;
  525. END;
  526. END PointerDown;
  527. PROCEDURE PointerMove*(x, y : LONGINT; keys : SET);
  528. VAR
  529. (* cpage: DTPData.PageObject;
  530. cframe: DTPData.FrameObject;
  531. cguide: DTPData.GuideObject;
  532. *) fx, fy, tx, ty: REAL;
  533. xs, ys, xe, ye, w, h: LONGINT;
  534. oldx1, oldy1 : LONGINT;
  535. pointerres: LONGINT;
  536. manager: WMWindowManager.WindowManager;
  537. snapLeft, snapTop, snapRight, snapBottom : BOOLEAN;
  538. BEGIN
  539. IF document # NIL THEN
  540. IF mpageMode THEN
  541. cpage := document.GetCurrentMasterPage();
  542. ELSE
  543. cpage := document.GetCurrentPage();
  544. END;
  545. IF ~previewMode THEN (* Document Edit Mode *)
  546. cframe := cpage.GetCurrentFrame();
  547. cguide := cpage.GetCurrentGuide();
  548. oldx1 := x1; oldy1:= y1;
  549. x1 := x; y1 := y;
  550. IF selectionON THEN (* selection tool *)
  551. IF move THEN (* move frame *)
  552. quality := FALSE;
  553. IF WillSnap((x+dx-docOriginX)/zoomFactor, (y+dy-docOriginY)/zoomFactor, (x+dx-docOriginX)/zoomFactor+cframe.GetWidth(), (y+dy-docOriginY)/zoomFactor+cframe.GetHeight(), snapLeft, snapTop, snapRight, snapBottom, tx, ty) THEN (* snap upper/left & lower/right*)
  554. IF snapLeft THEN fx := tx;
  555. ELSIF snapRight THEN fx := tx-cframe.GetWidth();
  556. ELSE fx := (x+dx-docOriginX)/zoomFactor; END;
  557. IF snapTop THEN fy := ty;
  558. ELSIF snapBottom THEN fy := ty-cframe.GetHeight();
  559. ELSE fy := (y+dy-docOriginY)/zoomFactor; END;
  560. cframe.SetPosition(fx, fy);
  561. ELSE
  562. fx := (x + dx - docOriginX)/zoomFactor;
  563. fy := (y + dy - docOriginY)/zoomFactor;
  564. cframe.SetPosition(fx, fy);
  565. END;
  566. x1 := ENTIER(fx*zoomFactor)-dx+docOriginX; y1 := ENTIER(fy*zoomFactor)-dy+docOriginY;
  567. InvalidateRect(WMRectangles.MakeRect(MIN(x1, oldx1)+dx-10, MIN(oldy1, y1)+dy-10, ENTIER(cframe.GetWidth()*zoomFactor)+MAX(x1, oldx1)+dx+10, ENTIER(cframe.GetHeight()*zoomFactor)+MAX(y1, oldy1)+dy+10));
  568. ELSIF resize THEN (* resize frame *)
  569. quality := FALSE;
  570. xs := ENTIER(cframe.GetX()*zoomFactor)+docOriginX;
  571. ys := ENTIER(cframe.GetY()*zoomFactor)+docOriginY;
  572. w := ENTIER(cframe.GetWidth()*zoomFactor);
  573. h := ENTIER(cframe.GetHeight()*zoomFactor);
  574. xe := xs + w; ye := ys +h;
  575. CASE res OF
  576. 0: cframe.SetExtent((x-docOriginX)/zoomFactor, cframe.GetY(), (fx1-x)/zoomFactor, cframe.GetHeight());
  577. | 1: cframe.SetExtent((x-docOriginX)/zoomFactor, (y-docOriginY)/zoomFactor, (fx1-x)/zoomFactor, (fy1-y)/zoomFactor);
  578. | 2: cframe.SetExtent(cframe.GetX(), (y-docOriginY)/zoomFactor, cframe.GetWidth(), (fy1-y)/zoomFactor);
  579. | 3: cframe.SetExtent(cframe.GetX(), (y-docOriginY)/zoomFactor, (x-fx0)/zoomFactor, (fy1-y)/zoomFactor);
  580. | 4: fx := (x-xs)/zoomFactor; fy := cframe.GetHeight();
  581. IF WillSnap((x-docOriginX)/zoomFactor, (y-docOriginY)/zoomFactor, (x-docOriginX)/zoomFactor, (y-docOriginY)/zoomFactor, snapLeft, snapTop, snapRight, snapBottom, tx, ty) THEN
  582. IF snapLeft OR snapRight THEN fx := tx-cframe.GetX(); END;
  583. END; cframe.SetSize(fx, fy);
  584. cframe.SetSize(fx, fy);
  585. | 5: fx := (x-xs)/zoomFactor; fy := (y-ys)/zoomFactor;
  586. IF WillSnap((x-docOriginX)/zoomFactor, (y-docOriginY)/zoomFactor, (x-docOriginX)/zoomFactor, (y-docOriginY)/zoomFactor, snapLeft, snapTop, snapRight, snapBottom, tx, ty) THEN
  587. IF snapLeft OR snapRight THEN fx := tx-cframe.GetX(); END;
  588. IF snapTop OR snapBottom THEN fy := ty-cframe.GetY(); END;
  589. END; cframe.SetSize(fx, fy);
  590. | 6: fx := cframe.GetWidth(); fy := (y-ys)/zoomFactor;
  591. IF WillSnap((x-docOriginX)/zoomFactor, (y-docOriginY)/zoomFactor, (x-docOriginX)/zoomFactor, (y-docOriginY)/zoomFactor, snapLeft, snapTop, snapRight, snapBottom, tx, ty) THEN
  592. IF snapTop OR snapBottom THEN fy := ty-cframe.GetY(); END;
  593. END; cframe.SetSize(fx, fy);
  594. | 7: cframe.SetExtent((x-docOriginX)/zoomFactor, cframe.GetY(), (fx1-x)/zoomFactor, (y-fy0)/zoomFactor);
  595. ELSE
  596. END;
  597. ccontent := cframe.GetContent(); ccontent.SetSize(ENTIER(cframe.GetWidth()*zoomFactor), ENTIER(cframe.GetHeight()*zoomFactor));
  598. InvalidateRect(WMRectangles.MakeRect(ENTIER(MIN(cframe.GetX(), MIN(oldfx0, oldfx1))*zoomFactor)+docOriginX-10, ENTIER(MIN(cframe.GetY(), MIN(oldfy0, oldfy1))*zoomFactor)+docOriginY-10, ENTIER(MAX((cframe.GetX()+cframe.GetWidth()), MAX(oldfx1, oldfx0))*zoomFactor)+docOriginX+15, ENTIER(MAX(cframe.GetY()+cframe.GetHeight(), MAX(oldfy1, oldfy0))*zoomFactor)+docOriginY+15));
  599. oldfx0 := cframe.GetX(); oldfy0 := cframe.GetY(); oldfx1:= cframe.GetX()+cframe.GetWidth(); oldfy1:= cframe.GetY()+cframe.GetHeight();
  600. ELSIF moveguide THEN (* move guide *)
  601. IF cguide.GetHorizontal() THEN
  602. IF WillSnap(0, (y-docOriginY)/zoomFactor, 1,(y-docOriginY)/zoomFactor, snapLeft, snapTop, snapRight, snapBottom, tx, ty) THEN
  603. IF snapTop THEN cguide.SetPosition(ty); (* snap guide *)
  604. ELSE cguide.SetPosition((y-docOriginY)/zoomFactor); END;
  605. END;
  606. oldy1 := gy; gy := y;
  607. InvalidateRect(WMRectangles.MakeRect(0, MIN(oldy1, gy)-10, ENTIER(document.GetPageWidth()*zoomFactor)+docOriginX, MAX(oldy1, gy)+10));
  608. ELSE
  609. IF WillSnap((x-docOriginX)/zoomFactor, 0, (x-docOriginX)/zoomFactor,1, snapLeft, snapTop, snapRight, snapBottom, tx, ty) THEN
  610. IF snapLeft THEN cguide.SetPosition(tx); (* snap guide *)
  611. ELSE cguide.SetPosition((x-docOriginX)/zoomFactor); END;
  612. END;
  613. oldx1 := gx; gx := x;
  614. InvalidateRect(WMRectangles.MakeRect(MIN(oldx1, gx)-10, 0, MAX(oldx1, gx)+10, ENTIER(document.GetPageHeight()*zoomFactor)+docOriginX));
  615. END;
  616. ELSIF addguide THEN (* create new guide object *)
  617. oldx1 := gx; gx := x;
  618. IF res2 = 0 THEN (* Horizontal guide *)
  619. InvalidateRect(WMRectangles.MakeRect(0, MIN(oldy1, gy)-10, ENTIER(document.GetPageWidth()*zoomFactor)+docOriginX, MAX(oldy1, gy)+10));
  620. ELSE (* Vertical guide *)
  621. InvalidateRect(WMRectangles.MakeRect(MIN(oldx1, gx)-10, 0, MAX(oldx1, gx)+10, ENTIER(document.GetPageHeight()*zoomFactor)+docOriginX));
  622. END;
  623. ELSE
  624. END;
  625. manager := WMWindowManager.GetDefaultManager();
  626. IF cframe # NIL THEN
  627. (* change pointerinfo *)
  628. pointerres := IsInFrameHandle(x, y);
  629. CASE pointerres OF
  630. 0: IF (oldPointerInfo # 0) & ~down THEN
  631. oldPointerInfo := 0;
  632. SetPointerInfo(manager.pointerLeftRight); END;
  633. | 1: IF (oldPointerInfo # 1) & ~down THEN
  634. oldPointerInfo := 1;
  635. SetPointerInfo(manager.pointerULDR); END;
  636. | 2: IF (oldPointerInfo # 2) & ~down THEN
  637. oldPointerInfo := 2;
  638. SetPointerInfo(manager.pointerUpDown); END;
  639. | 3: IF (oldPointerInfo # 3) & ~down THEN
  640. oldPointerInfo := 3;
  641. SetPointerInfo(manager.pointerURDL); END;
  642. | 4: IF (oldPointerInfo # 4) & ~down THEN
  643. oldPointerInfo := 4;
  644. SetPointerInfo(manager.pointerLeftRight); END;
  645. | 5: IF (oldPointerInfo # 5) & ~down THEN
  646. oldPointerInfo := 5;
  647. SetPointerInfo(manager.pointerULDR); END;
  648. | 6: IF (oldPointerInfo # 6) & ~down THEN
  649. oldPointerInfo := 6;
  650. SetPointerInfo(manager.pointerUpDown); END;
  651. | 7: IF (oldPointerInfo # 7) & ~down THEN
  652. oldPointerInfo := 7;
  653. SetPointerInfo(manager.pointerURDL); END;
  654. | 8: IF (oldPointerInfo # 8) & ~down THEN
  655. oldPointerInfo := 8;
  656. SetPointerInfo(manager.pointerMove); END;
  657. ELSE
  658. IF (oldPointerInfo # -1) & ~down THEN
  659. SetPointerInfo(manager.pointerStandard); oldPointerInfo := -1;
  660. END;
  661. END;
  662. ELSIF cguide # NIL THEN
  663. IF cguide.GetHorizontal() THEN
  664. IF (y>(cguide.GetPosition()*zoomFactor)+docOriginY-1) & (y<(cguide.GetPosition()*zoomFactor)+docOriginY+1) THEN
  665. IF (x<(document.GetPageWidth()*zoomFactor)+docOriginX) & (x>docOriginX) & ~down THEN
  666. SetPointerInfo(manager.pointerUpDown);
  667. END;
  668. ELSIF ~down THEN
  669. SetPointerInfo(manager.pointerStandard);
  670. END;
  671. ELSE
  672. IF (x>(cguide.GetPosition()*zoomFactor)+docOriginX-1) & (x<(cguide.GetPosition()*zoomFactor)+docOriginX+1) THEN
  673. IF (y<(document.GetPageHeight()*zoomFactor)+docOriginY) & (y>docOriginY) & ~down THEN
  674. SetPointerInfo(manager.pointerLeftRight);
  675. END;
  676. ELSIF ~down THEN
  677. SetPointerInfo(manager.pointerStandard);
  678. END;
  679. END;
  680. ELSE
  681. (* fix pointer *)
  682. IF GetPointerInfo() # manager.pointerStandard THEN
  683. SetPointerInfo(manager.pointerStandard);
  684. END;
  685. END;
  686. ELSE (* plugin selected *)
  687. IF down THEN
  688. IF addobject THEN (* on create new content object *)
  689. InvalidateRect(WMRectangles.MakeRect(MIN(vx0, vx1)-10, MIN(vy0, vy1)-10, MAX(vx0, vx1)+10, MAX(vy0, vy1)+10));
  690. ELSE
  691. IF (cframe # NIL) & WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(ENTIER(cframe.GetX()*zoomFactor)+docOriginX, ENTIER(cframe.GetY()*zoomFactor)+docOriginY, ENTIER((cframe.GetX()+cframe.GetWidth())*zoomFactor)+docOriginX, ENTIER((cframe.GetY()+cframe.GetHeight())*zoomFactor)+docOriginY)) THEN
  692. ccontent := cframe.GetContent();
  693. ccontent.PointerMove(x-ENTIER(cframe.GetX()*zoomFactor)-docOriginX, y-ENTIER(cframe.GetY()*zoomFactor)-docOriginY, keys);
  694. END;
  695. END;
  696. ELSE
  697. manager := WMWindowManager.GetDefaultManager();
  698. IF (cframe # NIL) & WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(ENTIER(cframe.GetX()*zoomFactor)+docOriginX, ENTIER(cframe.GetY()*zoomFactor)+docOriginY, ENTIER((cframe.GetX()+cframe.GetWidth())*zoomFactor)+docOriginX, ENTIER((cframe.GetY()+cframe.GetHeight())*zoomFactor)+docOriginY)) THEN
  699. ccontent := cframe.GetContent();
  700. ccontent.PointerMove(x-ENTIER(cframe.GetX()*zoomFactor)-docOriginX, y-ENTIER(cframe.GetY()*zoomFactor)-docOriginY, keys);
  701. (* Set Plugin Pointer *)
  702. IF ~plugPointer THEN
  703. plugPointer := TRUE;
  704. SetPointerInfo(ccontent.GetPluginPointer());
  705. END;
  706. ELSE
  707. (* Set Normal Pointer *)
  708. IF plugPointer THEN
  709. plugPointer := FALSE;
  710. SetPointerInfo(manager.pointerStandard);
  711. END;
  712. END;
  713. END;
  714. END;
  715. IF down THEN
  716. (* Invalidate; *)
  717. IF propertyOpen THEN
  718. quality := FALSE;
  719. UpdateProps;
  720. quality := TRUE;
  721. END;
  722. ELSE
  723. UpdateCoordinates;
  724. END;
  725. ELSE (* preview Mode *)
  726. END;
  727. END;
  728. END PointerMove;
  729. PROCEDURE PointerUp*(x, y : LONGINT; keys : SET);
  730. VAR string, tempString, tempString2: ARRAY 32 OF CHAR;
  731. content, activeContent: DTPData.ContentObject;
  732. resguide: DTPData.GuideObject;
  733. resframe: DTPData.FrameObject;
  734. horizontal : BOOLEAN;
  735. fx, fy, fw, fh: REAL;
  736. px, py, pw, ph: LONGINT;
  737. snapL, snapT, snapR, snapB: BOOLEAN;
  738. BEGIN
  739. down := 0 IN keys;
  740. IF document # NIL THEN
  741. IF mpageMode THEN
  742. cpage := document.GetCurrentMasterPage();
  743. ELSE
  744. cpage := document.GetCurrentPage();
  745. END;
  746. cframe := cpage.GetCurrentFrame();
  747. IF ~previewMode THEN (* Document Edit Mode *)
  748. IF ~selectionON THEN (* -- create Object -- *)
  749. IF (x0 = x1) & (y0 = y1) THEN (* not dragged only clicked *)
  750. IF (cframe # NIL) & WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(ENTIER(cframe.GetX()*zoomFactor)+docOriginX, ENTIER(cframe.GetY()*zoomFactor)+docOriginY, ENTIER((cframe.GetX()+cframe.GetWidth())*zoomFactor)+docOriginX, ENTIER((cframe.GetY()+cframe.GetHeight())*zoomFactor)+docOriginY)) THEN
  751. ccontent := cframe.GetContent();
  752. ccontent.PointerUp(x-ENTIER(cframe.GetX()*zoomFactor)-docOriginX, y-ENTIER(cframe.GetY()*zoomFactor)-docOriginY, keys);
  753. ELSE
  754. (* (* input dialog frame size *) (* disable pointerevent?? *)
  755. IF ~newObjOpen THEN
  756. newObjOpen := TRUE;
  757. NEW(nObj, SELF);
  758. dRes := nObj.Show(fw, fh);
  759. IF dRes THEN
  760. cpage.AddFrame((x0-docOriginX)/zoomFactor, (y0-docOriginY)/zoomFactor, fw, fh);
  761. END;
  762. END;
  763. *) END;
  764. ELSE (* dragged *)
  765. IF addobject THEN
  766. IF (cpage # NIL) THEN (* create frame *)
  767. (* fx := (MIN(x0,x1)-docOriginX)/zoomFactor;
  768. fy := (MIN(y0,y1)-docOriginY)/zoomFactor;
  769. fw := (MAX(x0,x1)-MIN(x0,x1))/zoomFactor;
  770. fh := (MAX(y0,y1)-MIN(y0,y1))/zoomFactor;
  771. *)
  772. fx := (x0-docOriginX)/zoomFactor;
  773. fy := (y0-docOriginY)/zoomFactor;
  774. fw := (x1-x0)/zoomFactor;
  775. fh := (y1-y0)/zoomFactor;
  776. IF snapOnCreate THEN
  777. IF tx0 > -1 THEN fx := tx0; fw := (x1-docOriginX)/zoomFactor - tx0; END;
  778. IF ty0 > -1 THEN fy := ty0; fh := (y1-docOriginY)/zoomFactor - ty0; END;
  779. snapOnCreate := FALSE;
  780. tx0 := -1; ty0 := -1;
  781. END;
  782. IF WillSnap((x-docOriginX)/zoomFactor, (y-docOriginY)/zoomFactor, (x-docOriginX)/zoomFactor, (y-docOriginY)/zoomFactor, snapL, snapT, snapR, snapB, tx1, ty1) THEN
  783. IF snapL OR snapR THEN fw := tx1-fx END;
  784. IF snapT OR snapB THEN fh := ty1-fy END;
  785. END;
  786. cpage.AddFrame(fx, fy, fw, fh);
  787. (* create content & add it *)
  788. content := newPluginObject();
  789. content.SetSize(ENTIER(fw*zoomFactor), ENTIER(fh*zoomFactor));
  790. content.Resize(zoomFactor);
  791. cframe := cpage.GetCurrentFrame();
  792. cframe.FixExtent();
  793. COPY(activeTool^, string);
  794. IF string = "Frame" THEN string := "Empty" END;
  795. Strings.Append(string, "Frame"); COPY(string, tempString2);
  796. Strings.IntToStr(document.objectCounter, tempString);
  797. Strings.Append(string, tempString);
  798. WHILE document.GetContentByName(string) # NIL DO (* find next free name *)
  799. INC(document.objectCounter);
  800. Strings.IntToStr(document.objectCounter, tempString);
  801. COPY(tempString2, string);
  802. Strings.Append(string, tempString);
  803. END;
  804. cframe.SetName(Strings.NewString(string));
  805. cframe.SetType(activeTool);
  806. content.contentName := Strings.NewString(string);
  807. content.ownerDoc := document;
  808. cframe.SetContent(content);
  809. document.AddContent(content);
  810. IF activeFrame # NIL THEN
  811. activeContent := activeFrame.GetContent();
  812. activeContent.Hide;
  813. END;
  814. content.Show(propsX, propsY); activeFrame := cframe;
  815. InvalidateRect(WMRectangles.MakeRect(MIN(x0, x1)-5, MIN(y0, y1)-5, MAX(x0, x1)+5, MAX(y0, y1)+5));
  816. END;
  817. ELSE (* forward click to plugin *)
  818. IF (cframe # NIL) & WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(ENTIER(cframe.GetX()*zoomFactor)+docOriginX, ENTIER(cframe.GetY()*zoomFactor)+docOriginY, ENTIER((cframe.GetX()+cframe.GetWidth())*zoomFactor)+docOriginX, ENTIER((cframe.GetY()+cframe.GetHeight())*zoomFactor)+docOriginY)) THEN
  819. ccontent := cframe.GetContent();
  820. ccontent.PointerUp(x, y, keys);
  821. ELSE
  822. END;
  823. END;
  824. addobject := FALSE;
  825. END;
  826. ELSE (* -- select -- *)
  827. IF (x0 = x1) & (y0 = y1) & ~resize THEN (* select frame at x, y top *)
  828. cframe := cpage.GetLastFrame(); resframe := NIL;
  829. WHILE (cframe # NIL) & (resframe = NIL) DO
  830. px := ENTIER(cframe.GetX()*zoomFactor)+docOriginX;
  831. py := ENTIER(cframe.GetY()*zoomFactor)+docOriginY;
  832. pw := ENTIER(cframe.GetWidth()*zoomFactor);
  833. ph := ENTIER(cframe.GetHeight()*zoomFactor);
  834. IF WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(px, py, px+pw, py+ph)) THEN
  835. resframe := cframe;
  836. END;
  837. cframe := cframe.prev;
  838. END; (* select guide *)
  839. cguide := cpage.GetLastGuide(); resguide := NIL;
  840. WHILE (cguide # NIL) & (resguide = NIL) DO
  841. horizontal := cguide.GetHorizontal();
  842. IF horizontal THEN
  843. IF (y1<(cguide.GetPosition()*zoomFactor+docOriginY+1)) & (y1>(cguide.GetPosition()*zoomFactor+docOriginY-1)) THEN
  844. resguide := cguide;
  845. END;
  846. ELSE
  847. IF (x1<(cguide.GetPosition()*zoomFactor+docOriginX+1)) & (x1>(cguide.GetPosition()*zoomFactor+docOriginX-1)) THEN
  848. resguide := cguide;
  849. END;
  850. END;
  851. cguide := cguide.prev
  852. END;
  853. cpage.currentGuide := resguide;
  854. cpage.currentFrame := resframe;
  855. (* display the current content properties *)
  856. IF resframe # NIL THEN
  857. IF resframe # activeFrame THEN
  858. IF activeFrame # NIL THEN
  859. activeContent := activeFrame.GetContent();
  860. activeContent.Hide;
  861. END;
  862. activeFrame := resframe;
  863. activeContent := activeFrame.GetContent();
  864. activeContent.Show(propsX, propsY);
  865. END;
  866. ELSE
  867. IF activeFrame # NIL THEN
  868. activeContent := activeFrame.GetContent();
  869. activeContent.Hide;
  870. END;
  871. activeFrame := NIL;
  872. END;
  873. END;
  874. IF resize THEN (* fix beyond zero resize *)
  875. cframe := cpage.GetCurrentFrame();
  876. IF cframe # NIL THEN
  877. cframe.FixExtent();
  878. END;
  879. ELSIF addguide THEN (* create guide object *)
  880. IF (x>docOriginX) & (y>docOriginY) THEN (* only add if on page *)
  881. IF res2 = 0 THEN (* Horizontal *)
  882. cpage.AddGuide((y-docOriginY)/zoomFactor, TRUE);
  883. ELSE (* Vertical *)
  884. cpage.AddGuide((x-docOriginX)/zoomFactor, FALSE);
  885. END;
  886. END;
  887. END;
  888. move := FALSE;
  889. resize := FALSE;
  890. addguide := FALSE;
  891. moveguide := FALSE;
  892. quality := TRUE;
  893. END;
  894. Invalidate;
  895. UpdateProps;
  896. ownerWindowSetFocus;
  897. ELSE (* Preview Mode *)
  898. END;
  899. END;
  900. END PointerUp;
  901. PROCEDURE KeyEvent*(ucs: LONGINT; flags: SET; VAR keySym: LONGINT);
  902. VAR
  903. (* cpage: DTPData.PageObject;
  904. cframe: DTPData.FrameObject;
  905. cguide: DTPData.GuideObject;
  906. *) newFrame : DTPData.FrameObject;
  907. newContent: DTPData.ContentObject;
  908. BEGIN
  909. (* document := parentWindow.GetDocument(); *)
  910. IF document # NIL THEN
  911. IF mpageMode THEN
  912. cpage := document.GetCurrentMasterPage();
  913. ELSE
  914. cpage := document.GetCurrentPage();
  915. END;
  916. IF ~previewMode THEN (* Document Edit Mode *)
  917. cframe := cpage.GetCurrentFrame();
  918. cguide := cpage.GetCurrentGuide();
  919. IF selectionON THEN (* selection tool *)
  920. IF (cframe = NIL) & (cguide = NIL) THEN (* nothing selected *)
  921. IF keySym = 016H THEN (* Ctrl-V *)
  922. IF DTPData.dollyFrame # NIL THEN
  923. newFrame := DTPData.dollyFrame.Clone();
  924. newContent := newFrame.GetContent();
  925. newContent.redrawProc := InvalidateCurrentFrame;
  926. newContent.updatePropsPosition := SetContentPropsPosition;
  927. newContent.Resize(zoomFactor);
  928. newContent.SetSize(ENTIER(newFrame.GetWidth()*zoomFactor), ENTIER(newFrame.GetHeight()*zoomFactor));
  929. cpage.InsertFrame(newFrame);
  930. UpdateProps;
  931. UpdateContentProps;
  932. ELSIF document.dollyGuide # NIL THEN
  933. cpage.AddGuide(document.dollyGuide.GetPosition(), document.dollyGuide.GetHorizontal());
  934. UpdateProps;
  935. END;
  936. ELSE
  937. END;
  938. ELSIF (cframe # NIL) THEN (* frame selected *)
  939. IF keySym = 03H THEN (* Ctrl-C *)
  940. DTPData.dollyFrame := cframe.Clone();
  941. document.dollyGuide := NIL;
  942. ELSIF (keySym = 0FF63H) & (flags * Inputs.Ctrl # {}) THEN (*Ctrl Insert *)
  943. DTPData.dollyFrame := cframe.Clone();
  944. document.dollyGuide := NIL;
  945. ELSIF keySym = 0FF51H THEN (* Cursor Left *)
  946. IF flags * Inputs.Shift = {} THEN
  947. IF flags * Inputs.Alt # {} THEN
  948. cframe.SetPosition(cframe.GetX()-2.5, cframe.GetY());
  949. ELSE
  950. cframe.SetPosition(cframe.GetX()-1/4, cframe.GetY());
  951. END;
  952. UpdateProps;
  953. END;
  954. ELSIF keySym = 0FF53H THEN (* Cursor Right *)
  955. IF flags * Inputs.Shift = {} THEN
  956. IF flags * Inputs.Alt # {} THEN
  957. cframe.SetPosition(cframe.GetX()+2.5, cframe.GetY());
  958. ELSE
  959. cframe.SetPosition(cframe.GetX()+1/4, cframe.GetY());
  960. END;
  961. UpdateProps;
  962. END;
  963. ELSIF keySym = 0FF54H THEN (* Cursor Down *)
  964. IF flags * Inputs.Shift = {} THEN
  965. IF flags * Inputs.Alt # {} THEN
  966. cframe.SetPosition(cframe.GetX(), cframe.GetY()+2.5);
  967. ELSE
  968. cframe.SetPosition(cframe.GetX(), cframe.GetY()+1/4);
  969. END;
  970. UpdateProps;
  971. END;
  972. ELSIF keySym = 0FF52H THEN (* Cursor Up *)
  973. IF flags * Inputs.Shift = {} THEN
  974. IF flags * Inputs.Alt # {} THEN
  975. cframe.SetPosition(cframe.GetX(), cframe.GetY()-2.5);
  976. ELSE
  977. cframe.SetPosition(cframe.GetX(), cframe.GetY()-1/4);
  978. END;
  979. END;
  980. UpdateProps;
  981. ELSIF keySym = 018H THEN (* Ctrl-X *)
  982. (* clone frame (to buffer) and remove current *)
  983. DTPData.dollyFrame := cframe.Clone();
  984. document.dollyGuide := NIL;
  985. cpage.DeleteFrame();
  986. UpdateProps;
  987. UpdateContentProps;
  988. ELSIF keySym = 016H THEN (* Ctrl-V *)
  989. IF DTPData.dollyFrame # NIL THEN
  990. newFrame := DTPData.dollyFrame.Clone();
  991. newContent := newFrame.GetContent();
  992. newContent.redrawProc := InvalidateCurrentFrame;
  993. newContent.updatePropsPosition := SetContentPropsPosition;
  994. newContent.Resize(zoomFactor);
  995. newContent.SetSize(ENTIER(newFrame.GetWidth()*zoomFactor), ENTIER(newFrame.GetHeight()*zoomFactor));
  996. cpage.InsertFrame(newFrame);
  997. UpdateProps;
  998. UpdateContentProps;
  999. END;
  1000. ELSIF keySym = 0FFFFH THEN (* Delete *)
  1001. newFrame := cpage.GetCurrentFrame();
  1002. IF newFrame # NIL THEN
  1003. newContent := newFrame.GetContent();
  1004. newContent.OnDelete;
  1005. cpage.DeleteFrame;
  1006. UpdateProps;
  1007. UpdateContentProps;
  1008. END;
  1009. ELSIF keySym = 0FFADH THEN (* grey minus *)
  1010. IF cframe # NIL THEN
  1011. cpage.Move2BackStep;
  1012. END;
  1013. ELSIF keySym = 0FFABH THEN (* grey plus *)
  1014. IF cframe # NIL THEN
  1015. cpage.Move2FrontStep;
  1016. END;
  1017. ELSE
  1018. END;
  1019. ELSIF (cguide # NIL) THEN (* guide selected *)
  1020. IF keySym = 0FFFFH THEN (* Delete *)
  1021. (* delete currend guide *)
  1022. cpage.DeleteGuide;
  1023. END;
  1024. ELSE
  1025. END;
  1026. ELSE (* plugins active *)
  1027. IF cframe # NIL THEN
  1028. ccontent := cframe.GetContent();
  1029. ccontent.KeyEvent(ucs, flags, keySym);
  1030. END;
  1031. END;
  1032. (* stateless keys *)
  1033. IF keySym = 0FF56H THEN (* Page Down *)
  1034. document.NextPage;
  1035. UpdateProps;
  1036. UpdateContentProps;
  1037. ownerWindowUpdatePageNumber;
  1038. Resized;
  1039. ELSIF keySym = 0FF55H THEN (* Page Up *)
  1040. document.PrevPage;
  1041. UpdateProps;
  1042. UpdateContentProps;
  1043. ownerWindowUpdatePageNumber;
  1044. Resized;
  1045. ELSIF keySym = 0FF50H THEN (* Cursor Home *)
  1046. document.FirstPage;
  1047. UpdateProps;
  1048. UpdateContentProps;
  1049. ownerWindowUpdatePageNumber;
  1050. Resized;
  1051. ELSIF keySym = 0FF57H THEN (* Cursor End *)
  1052. document.LastPage;
  1053. UpdateProps;
  1054. UpdateContentProps;
  1055. ownerWindowUpdatePageNumber;
  1056. Resized;
  1057. ELSIF keySym = 0FF1BH THEN (* ESC *)
  1058. ownerWindowExitFullScreen;
  1059. ELSE
  1060. END;
  1061. Invalidate;
  1062. ELSE (* Preview Mode *)
  1063. IF keySym = 0FF51H THEN (* Cursor Left *)
  1064. document.PrevPage;
  1065. ownerWindowUpdatePageNumber;
  1066. Resized;
  1067. ELSIF keySym = 0FF53H THEN (* Cursor Right *)
  1068. document.NextPage;
  1069. ownerWindowUpdatePageNumber;
  1070. Resized;
  1071. ELSIF keySym = 0FF1BH THEN (* ESC *)
  1072. ownerWindowExitFullScreen;
  1073. ELSE
  1074. (* KernelLog.Hex(keySym, 8); KernelLog.Ln; *)
  1075. END;
  1076. Invalidate;
  1077. END;
  1078. END;
  1079. END KeyEvent;
  1080. PROCEDURE WillSnap*(sx,sy, ex, ey: REAL; VAR leftSnap, topSnap, rightSnap, bottomSnap: BOOLEAN; VAR resX, resY: REAL): BOOLEAN;
  1081. VAR
  1082. result, point, rect: BOOLEAN;
  1083. cpage, cmpage: DTPData.PageObject;
  1084. cguide: DTPData.GuideObject;
  1085. mTop, mBottom, mLeft, mRight, tempmLeft, tempmRight, mWidth, mHeight, nx, ny, mx, my: REAL;
  1086. gridInc : REAL;
  1087. pageNumber : LONGINT;
  1088. BEGIN
  1089. result:= FALSE; leftSnap := FALSE; topSnap := FALSE; rightSnap := FALSE; bottomSnap := FALSE;
  1090. gridInc := gridDistance/gridDivision;
  1091. IF document # NIL THEN
  1092. mTop := document.GetMarginTop(); mBottom:= document.GetPageHeight()-document.GetMarginBottom();
  1093. mLeft := document.GetMarginLeft(); mRight := document.GetPageWidth()-document.GetMarginRight();
  1094. mWidth := document.GetPageWidth(); mHeight := document.GetPageHeight();
  1095. resX := 0; resY := 0;
  1096. IF mpageMode THEN
  1097. cpage := document.GetCurrentMasterPage();
  1098. ELSE
  1099. cpage := document.GetCurrentPage();
  1100. END;
  1101. (* grid snap *)
  1102. IF snapToGrid THEN
  1103. nx := sx+snapDistance; ny := sy+snapDistance;
  1104. mx := ex+snapDistance; my := ey+snapDistance;
  1105. (* vertical snap *)
  1106. IF (((nx/gridInc)-ENTIER(nx/gridInc))*gridInc<2*snapDistance) THEN
  1107. resX := ENTIER(nx/gridInc)*gridInc; leftSnap := TRUE; rightSnap := FALSE; result := TRUE;
  1108. ELSIF (((mx/gridInc)-ENTIER(mx/gridInc))*gridInc<2*snapDistance) THEN
  1109. resX := ENTIER(mx/gridInc)*gridInc; rightSnap := TRUE; leftSnap := FALSE; result := TRUE;
  1110. END;
  1111. (* horizontal snap *)
  1112. IF (((ny/gridInc)-ENTIER(ny/gridInc))*gridInc<2*snapDistance) THEN
  1113. resY := ENTIER(ny/gridInc)*gridInc; topSnap := TRUE; bottomSnap := FALSE; result := TRUE;
  1114. ELSIF (((my/gridInc)-ENTIER(my/gridInc))*gridInc<2*snapDistance) THEN
  1115. resY := ENTIER(my/gridInc)*gridInc; bottomSnap := TRUE; topSnap := FALSE; result := TRUE;
  1116. END;
  1117. END;
  1118. (* margin snap *)
  1119. IF document.GetFacingPages() THEN
  1120. IF mpageMode THEN pageNumber := document.GetCurrentMasterPageNumber(); ELSE pageNumber := document.GetCurrentPageNumber(); END;
  1121. IF (pageNumber MOD 2 = 0) THEN
  1122. tempmLeft := mWidth-mLeft;
  1123. tempmRight := mWidth-mRight;
  1124. ELSE
  1125. tempmLeft := mLeft;
  1126. tempmRight := mRight;
  1127. END;
  1128. ELSE
  1129. tempmLeft := mLeft;
  1130. tempmRight := mRight;
  1131. END;
  1132. IF (tempmLeft>ex-snapDistance) & (tempmLeft<ex+snapDistance) THEN
  1133. resX := tempmLeft; rightSnap := TRUE; leftSnap := FALSE; result := TRUE;
  1134. ELSIF (tempmRight>ex-snapDistance) & (tempmRight<ex+snapDistance) THEN
  1135. resX := tempmRight; rightSnap := TRUE; leftSnap := FALSE; result := TRUE;
  1136. END;
  1137. IF (tempmLeft>sx-snapDistance) & (tempmLeft<sx+snapDistance) THEN
  1138. resX := tempmLeft; leftSnap := TRUE; rightSnap := FALSE; result := TRUE;
  1139. ELSIF (tempmRight>sx-snapDistance) & (tempmRight<sx+snapDistance) THEN
  1140. resX := tempmRight; leftSnap := TRUE; rightSnap := FALSE; result := TRUE;
  1141. END;
  1142. IF (mBottom>ey-snapDistance) & (mBottom<ey+snapDistance) THEN
  1143. resY := mBottom; bottomSnap := TRUE; topSnap := FALSE; result := TRUE;
  1144. ELSIF (mTop>ey-snapDistance) & (mTop<ey+snapDistance) THEN
  1145. resY := mTop; bottomSnap := TRUE; topSnap := FALSE; result := TRUE;
  1146. END;
  1147. IF (mBottom>sy-snapDistance) & (mBottom<sy+snapDistance) THEN
  1148. resY := mBottom; topSnap := TRUE; bottomSnap := FALSE; result := TRUE;
  1149. ELSIF (mTop>sy-snapDistance) & (mTop<sy+snapDistance) THEN
  1150. resY := mTop; topSnap := TRUE; bottomSnap := FALSE; result := TRUE;
  1151. END;
  1152. (* guide snap *)
  1153. point := (sx=ex) & (sy=ey);
  1154. rect := (sx#ex) & (sy#ey);
  1155. IF (point OR rect) THEN
  1156. IF ~mpageMode THEN
  1157. (* master guides *)
  1158. cmpage := cpage.GetMasterPage();
  1159. IF cmpage # NIL THEN
  1160. cguide := cmpage.GetFirstGuide();
  1161. WHILE (cguide # NIL) DO
  1162. IF cguide.GetHorizontal() THEN
  1163. IF (cguide.GetPosition()>sy-snapDistance) & (cguide.GetPosition()<sy+snapDistance) THEN
  1164. resY := cguide.GetPosition(); topSnap := TRUE; bottomSnap:= FALSE; result := TRUE;
  1165. ELSIF (cguide.GetPosition()>ey-snapDistance) & (cguide.GetPosition()<ey+snapDistance) THEN
  1166. resY := cguide.GetPosition(); bottomSnap := TRUE; topSnap:= FALSE; result := TRUE;
  1167. END;
  1168. END;
  1169. IF ~cguide.GetHorizontal() THEN
  1170. IF (cguide.GetPosition()>sx-snapDistance) & (cguide.GetPosition()<sx+snapDistance) THEN
  1171. resX := cguide.GetPosition(); leftSnap := TRUE; rightSnap := FALSE; result := TRUE;
  1172. ELSIF (cguide.GetPosition()>ex-snapDistance) & (cguide.GetPosition()<ex+snapDistance) THEN
  1173. resX := cguide.GetPosition(); rightSnap := TRUE; leftSnap := FALSE; result := TRUE;
  1174. END;
  1175. END;
  1176. cguide := cguide.next;
  1177. END;
  1178. END;
  1179. END;
  1180. cguide := cpage.GetFirstGuide();
  1181. (* document guides *)
  1182. WHILE (cguide # NIL) DO
  1183. IF cguide.GetHorizontal() THEN
  1184. IF (cguide.GetPosition()>sy-snapDistance) & (cguide.GetPosition()<sy+snapDistance) THEN
  1185. resY := cguide.GetPosition(); topSnap := TRUE; bottomSnap:= FALSE; result := TRUE;
  1186. ELSIF (cguide.GetPosition()>ey-snapDistance) & (cguide.GetPosition()<ey+snapDistance) THEN
  1187. resY := cguide.GetPosition(); bottomSnap := TRUE; topSnap:= FALSE; result := TRUE;
  1188. END;
  1189. END;
  1190. IF ~cguide.GetHorizontal() THEN
  1191. IF (cguide.GetPosition()>sx-snapDistance) & (cguide.GetPosition()<sx+snapDistance) THEN
  1192. resX := cguide.GetPosition(); leftSnap := TRUE; rightSnap := FALSE; result := TRUE;
  1193. ELSIF (cguide.GetPosition()>ex-snapDistance) & (cguide.GetPosition()<ex+snapDistance) THEN
  1194. resX := cguide.GetPosition(); rightSnap := TRUE; leftSnap := FALSE; result := TRUE;
  1195. END;
  1196. END;
  1197. cguide := cguide.next;
  1198. END;
  1199. END;
  1200. (* document snap *)
  1201. IF (0>sx-snapDistance) & (0<sx+snapDistance) THEN
  1202. resX := 0; leftSnap := TRUE; rightSnap := FALSE; result := TRUE;
  1203. END;
  1204. IF (mWidth>ex-snapDistance) & (mWidth<ex+snapDistance) THEN
  1205. resX := mWidth; rightSnap := TRUE; leftSnap := FALSE; result := TRUE;
  1206. END;
  1207. IF (0>sy-snapDistance) & (0<sy+snapDistance) THEN
  1208. resY := 0; topSnap := TRUE; bottomSnap := FALSE; result := TRUE;
  1209. END;
  1210. IF (mHeight>ey-snapDistance) & (mHeight<ey+snapDistance) THEN
  1211. resY := mHeight; bottomSnap := TRUE; topSnap := FALSE; result := TRUE;
  1212. END;
  1213. END;
  1214. RETURN result;
  1215. END WillSnap;
  1216. PROCEDURE IsInRuler*(x, y: LONGINT): LONGINT;
  1217. VAR result: LONGINT;
  1218. BEGIN
  1219. result := -2;
  1220. IF (WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(RULERSIZE, 1, bounds.GetWidth(), RULERSIZE))) THEN
  1221. result := 0; (* Horizontal *)
  1222. ELSIF (WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(1, RULERSIZE, RULERSIZE, bounds.GetHeight()))) THEN
  1223. result := 1; (* Vertical *)
  1224. ELSE
  1225. result := -1;
  1226. END;
  1227. RETURN result;
  1228. END IsInRuler;
  1229. PROCEDURE IsInFrameHandle*(x, y: LONGINT): LONGINT;
  1230. VAR res, xs, ys, xe, ye, w, h: LONGINT;
  1231. cpage: DTPData.PageObject;
  1232. cframe: DTPData.FrameObject;
  1233. BEGIN
  1234. IF mpageMode THEN
  1235. cpage := document.GetCurrentMasterPage();
  1236. ELSE
  1237. cpage := document.GetCurrentPage();
  1238. END;
  1239. cframe := cpage.GetCurrentFrame();
  1240. res:= -1;
  1241. xs := ENTIER(cframe.GetX()*zoomFactor)+docOriginX;
  1242. ys := ENTIER(cframe.GetY()*zoomFactor)+docOriginY;
  1243. w := ENTIER(cframe.GetWidth()*zoomFactor);
  1244. h := ENTIER(cframe.GetHeight()*zoomFactor);
  1245. xe := xs + w; ye := ys + h;
  1246. IF (WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(xs-4, ENTIER((ys+ye)/2)-2, xs+1, ENTIER((ys+ye)/2)+2))) THEN
  1247. res := 0; (* left *)
  1248. ELSIF (WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(xs-4, ys-4, xs+1, ys+1))) THEN
  1249. res := 1; (* top-left *)
  1250. ELSIF (WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(ENTIER((xs+xe)/2)-1, ys-4, ENTIER((xs+xe)/2)+3, ys+1))) THEN
  1251. res := 2; (* top *)
  1252. ELSIF (WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(xe, ys-4, xe+5, ys+1))) THEN
  1253. res := 3; (* top-right *)
  1254. ELSIF (WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(xe, ENTIER((ys+ye)/2)-2, xe+5, ENTIER((ys+ye)/2)+2))) THEN
  1255. res := 4; (* right *)
  1256. ELSIF (WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(xe, ye, xe+5, ye+5))) THEN
  1257. res := 5; (* bottom-right *)
  1258. ELSIF (WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(ENTIER((xs+xe)/2)-1, ye, ENTIER((xs+xe)/2)+3, ye+5))) THEN
  1259. res := 6; (* bottom *)
  1260. ELSIF (WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(xs-4, ye, xs+1, ye+5))) THEN
  1261. res := 7; (* bottom-left *)
  1262. ELSIF (WMRectangles.PointInRect(x, y, WMRectangles.MakeRect(xs+1, ys+1, xe-1, ye-1))) THEN
  1263. res := 8; (* inside *)
  1264. ELSE
  1265. END;
  1266. RETURN res;
  1267. END IsInFrameHandle;
  1268. PROCEDURE Draw*(canvas : WMGraphics.Canvas);
  1269. VAR
  1270. BEGIN
  1271. Draw^(canvas);
  1272. IF ~render THEN
  1273. IF (document # NIL) & ready THEN
  1274. CASE zoomMode OF (* zoom current view *)
  1275. 0: ZoomFitDoc;
  1276. | 1: ZoomFitWidth;
  1277. | 2: ZoomFitHeight;
  1278. | 3: ZoomFitFrame;
  1279. | 4: ZoomFitOriginal;
  1280. | 5: ZoomFitUser;
  1281. ELSE
  1282. END;
  1283. DrawDocument(canvas); (* document paper *)
  1284. DrawContent(canvas); (* content objects (frames)(grid..) *)
  1285. DrawHelpers(canvas); (* guides, pagemargin *)
  1286. DrawSelectedFrame(canvas); (* current frame/guide *)
  1287. DrawRuler(canvas); (* document ruler *)
  1288. DrawUserAction(canvas); (* user actions *)
  1289. END;
  1290. END;
  1291. END Draw;
  1292. PROCEDURE DrawRuler(canvas : WMGraphics.Canvas);
  1293. VAR i, j: LONGINT;
  1294. s : ARRAY 8OF CHAR;
  1295. sc : ARRAY 1 OF CHAR;
  1296. font : WMGraphics.Font;
  1297. BEGIN
  1298. font := GetFont();
  1299. canvas.Fill(WMRectangles.MakeRect(RULERSIZE+1,0,bounds.GetWidth(), RULERSIZE+1), 0222222FFH, WMGraphics.ModeCopy);
  1300. canvas.Fill(WMRectangles.MakeRect(0,RULERSIZE+1,RULERSIZE+1, bounds.GetHeight()), 0222222FFH, WMGraphics.ModeCopy);
  1301. canvas.Fill(WMRectangles.MakeRect(RULERSIZE,1,bounds.GetWidth(), RULERSIZE), LONGINT(0FFFFFFFFH), WMGraphics.ModeCopy);
  1302. canvas.Fill(WMRectangles.MakeRect(1,RULERSIZE,RULERSIZE, bounds.GetHeight()), LONGINT(0FFFFFFFFH), WMGraphics.ModeCopy);
  1303. (* canvas.Line(0,0,200,200, 0FF0000FFH, WMGraphics.ModeSrcOverDst); *)
  1304. canvas.Line(docOriginX, 1, docOriginX, RULERSIZE-1, 0000000FFH, WMGraphics.ModeSrcOverDst);
  1305. canvas.Line(1, docOriginY, RULERSIZE-1, docOriginY, 0000000FFH, WMGraphics.ModeSrcOverDst);
  1306. IF zoomFactor > 3 THEN
  1307. (* horizontal ruler *)
  1308. FOR i := 0 TO ENTIER (2*bounds.GetWidth()/zoomFactor)-1 BY 10 DO
  1309. canvas.Line(docOriginX+ENTIER(i*zoomFactor), 1, docOriginX+ENTIER(i*zoomFactor), RULERSIZE-1, 0000000FFH, WMGraphics.ModeSrcOverDst);
  1310. Strings.IntToStr(i, s);
  1311. canvas.DrawString(docOriginX+ENTIER(i*zoomFactor)+2, font.GetHeight()-3 , s);
  1312. END;
  1313. FOR i := 0 TO ENTIER (2*bounds.GetWidth()/zoomFactor)-1 DO
  1314. IF i MOD 5 = 0 THEN
  1315. canvas.Line(docOriginX+ENTIER(i*zoomFactor), RULERSIZE-6, docOriginX+ENTIER(i*zoomFactor), RULERSIZE-1, 0000000FFH, WMGraphics.ModeSrcOverDst);
  1316. ELSE
  1317. canvas.Line(docOriginX+ENTIER(i*zoomFactor), RULERSIZE-3, docOriginX+ENTIER(i*zoomFactor), RULERSIZE-1, 0000000FFH, WMGraphics.ModeSrcOverDst);
  1318. END;
  1319. END;
  1320. (* vertical ruler *)
  1321. FOR i := 0 TO ENTIER (2*bounds.GetHeight()/zoomFactor)-1 BY 10 DO
  1322. canvas.Line(1, docOriginY+ENTIER(i*zoomFactor), RULERSIZE-1, docOriginY+ENTIER(i*zoomFactor), 0000000FFH, WMGraphics.ModeSrcOverDst);
  1323. s := " "; (* remove old contents *)
  1324. Strings.IntToStr(i, s);
  1325. FOR j := 0 TO LEN(s)-1 DO
  1326. sc[0] := s[j];
  1327. canvas.DrawString(2, docOriginY+ENTIER(i*zoomFactor)+(j+1)*(font.GetHeight()-4)+1, sc);
  1328. END;
  1329. END;
  1330. FOR i := 0 TO ENTIER (2*bounds.GetHeight()/zoomFactor)-1 DO
  1331. IF i MOD 5 = 0 THEN
  1332. canvas.Line(RULERSIZE-1, docOriginY+ENTIER(i*zoomFactor), RULERSIZE-6, docOriginY+ENTIER(i*zoomFactor), 0000000FFH, WMGraphics.ModeSrcOverDst);
  1333. ELSE
  1334. canvas.Line(RULERSIZE-1, docOriginY+ENTIER(i*zoomFactor), RULERSIZE-3, docOriginY+ENTIER(i*zoomFactor), 0000000FFH, WMGraphics.ModeSrcOverDst);
  1335. END;
  1336. END;
  1337. ELSE
  1338. (* horizontal ruler *)
  1339. FOR i := 0 TO ENTIER (2*bounds.GetWidth()/zoomFactor)-1 BY 50 DO
  1340. canvas.Line(docOriginX+ENTIER(i*zoomFactor), 1, docOriginX+ENTIER(i*zoomFactor), RULERSIZE-1, 0000000FFH, WMGraphics.ModeSrcOverDst);
  1341. Strings.IntToStr(i, s);
  1342. canvas.DrawString(docOriginX+ENTIER(i*zoomFactor)+2, font.GetHeight()-3 , s);
  1343. END;
  1344. FOR i := 0 TO ENTIER (2*bounds.GetWidth()/zoomFactor)-1 BY 2 DO
  1345. IF i MOD 10 = 0 THEN
  1346. canvas.Line(docOriginX+ENTIER(i*zoomFactor), RULERSIZE-6, docOriginX+ENTIER(i*zoomFactor), RULERSIZE-1, 0000000FFH, WMGraphics.ModeSrcOverDst);
  1347. ELSE
  1348. canvas.Line(docOriginX+ENTIER(i*zoomFactor), RULERSIZE-3, docOriginX+ENTIER(i*zoomFactor), RULERSIZE-1, 0000000FFH, WMGraphics.ModeSrcOverDst);
  1349. END;
  1350. END;
  1351. (* vertical ruler *)
  1352. FOR i := 0 TO ENTIER (2*bounds.GetHeight()/zoomFactor)-1 BY 50 DO
  1353. canvas.Line(1, docOriginY+ENTIER(i*zoomFactor), RULERSIZE-1, docOriginY+ENTIER(i*zoomFactor), 0000000FFH, WMGraphics.ModeSrcOverDst);
  1354. s := " "; (* remove old contents *)
  1355. Strings.IntToStr(i, s);
  1356. FOR j := 0 TO LEN(s)-1 DO
  1357. sc[0] := s[j];
  1358. canvas.DrawString(2, docOriginY+ENTIER(i*zoomFactor)+(j+1)*(font.GetHeight()-4)+1, sc);
  1359. END;
  1360. END;
  1361. FOR i := 0 TO ENTIER (2*bounds.GetHeight()/zoomFactor)-1 BY 2 DO
  1362. IF i MOD 5 = 0 THEN
  1363. canvas.Line(RULERSIZE-1, docOriginY+ENTIER(i*zoomFactor), RULERSIZE-6, docOriginY+ENTIER(i*zoomFactor), 0000000FFH, WMGraphics.ModeSrcOverDst);
  1364. ELSE
  1365. canvas.Line(RULERSIZE-1, docOriginY+ENTIER(i*zoomFactor), RULERSIZE-3, docOriginY+ENTIER(i*zoomFactor), 0000000FFH, WMGraphics.ModeSrcOverDst);
  1366. END;
  1367. END;
  1368. END;
  1369. canvas.Fill(WMRectangles.MakeRect(0,0,RULERSIZE, RULERSIZE), LONGINT(0888888FFH), WMGraphics.ModeCopy);
  1370. END DrawRuler;
  1371. PROCEDURE DrawDocument*(canvas : WMGraphics.Canvas);
  1372. BEGIN
  1373. (* shadow *)
  1374. canvas.Fill(WMRectangles.MakeRect(docOriginX+5, docOriginY+5, ENTIER(document.GetPageWidth()*zoomFactor)+docOriginX+5, ENTIER(document.GetPageHeight()*zoomFactor)+docOriginY+5), 0444444FFH, WMGraphics.ModeCopy);
  1375. canvas.Fill(WMRectangles.MakeRect(docOriginX, docOriginY, ENTIER(document.GetPageWidth()*zoomFactor)+docOriginX, ENTIER(document.GetPageHeight()*zoomFactor)+docOriginY), LONGINT(0FFFFFFFFH), WMGraphics.ModeCopy);
  1376. (* draw Grid in Background *)
  1377. IF mpageMode THEN DrawGrid(canvas); END;
  1378. END DrawDocument;
  1379. PROCEDURE DrawGrid(canvas: WMGraphics.Canvas);
  1380. VAR
  1381. w, h, mt, mb, ml, mr, subGridCounter : LONGINT;
  1382. gridSubSize, i : REAL;
  1383. BEGIN
  1384. (* calc pixels *)
  1385. w := ENTIER(document.GetPageWidth()*zoomFactor);
  1386. h := ENTIER(document.GetPageHeight()*zoomFactor);
  1387. mt := ENTIER(document.GetMarginTop()*zoomFactor);
  1388. mb := ENTIER(document.GetMarginBottom()*zoomFactor);
  1389. ml := ENTIER(document.GetMarginLeft()*zoomFactor);
  1390. mr := ENTIER(document.GetMarginRight()*zoomFactor);
  1391. IF ~previewMode THEN
  1392. (* grid *)
  1393. IF showGrid THEN
  1394. gridSubSize := gridDistance/gridDivision;
  1395. (* subGrid horizontal *)
  1396. i := 0; subGridCounter := 0;
  1397. WHILE i < document.GetPageHeight() DO
  1398. IF subGridCounter MOD gridDivision = 0 THEN (* GridLine *)
  1399. canvas.Line(docOriginX, docOriginY+ENTIER(i*zoomFactor), docOriginX+w-1, docOriginY+ENTIER(i*zoomFactor), GRIDCOLOR, WMGraphics.ModeSrcOverDst);
  1400. ELSE (* SubGridLine *)
  1401. canvas.Line(docOriginX, docOriginY+ENTIER(i*zoomFactor), docOriginX+w-1, docOriginY+ENTIER(i*zoomFactor), SUBGRIDCOLOR, WMGraphics.ModeSrcOverDst);
  1402. END;
  1403. INC(subGridCounter); i := subGridCounter * gridSubSize;
  1404. END;
  1405. (* subGrid vertical *)
  1406. i := 0; subGridCounter := 0;
  1407. WHILE i < document.GetPageWidth() DO
  1408. IF subGridCounter MOD gridDivision = 0 THEN (* GridLine *)
  1409. canvas.Line(docOriginX+ENTIER(i*zoomFactor), docOriginY, docOriginX+ENTIER(i*zoomFactor), docOriginY+h-1, GRIDCOLOR, WMGraphics.ModeSrcOverDst);
  1410. ELSE (* SubGridLine *)
  1411. canvas.Line(docOriginX+ENTIER(i*zoomFactor), docOriginY, docOriginX+ENTIER(i*zoomFactor), docOriginY+h-1, SUBGRIDCOLOR, WMGraphics.ModeSrcOverDst);
  1412. END;
  1413. INC(subGridCounter); i := subGridCounter * gridSubSize;
  1414. END;
  1415. END;
  1416. END;
  1417. END DrawGrid;
  1418. PROCEDURE DrawHelpers(canvas : WMGraphics.Canvas);
  1419. VAR
  1420. w, h, mt, mb, ml, mr, tempml, tempmr, pageNumber : LONGINT;
  1421. (* cpage: DTPData.PageObject;
  1422. cguide: DTPData.GuideObject;
  1423. *) guidePos: REAL; guideOrientation: BOOLEAN;
  1424. BEGIN
  1425. (* calc pixels *)
  1426. w := ENTIER(document.GetPageWidth()*zoomFactor);
  1427. h := ENTIER(document.GetPageHeight()*zoomFactor);
  1428. mt := ENTIER(document.GetMarginTop()*zoomFactor);
  1429. mb := ENTIER(document.GetMarginBottom()*zoomFactor);
  1430. ml := ENTIER(document.GetMarginLeft()*zoomFactor);
  1431. mr := ENTIER(document.GetMarginRight()*zoomFactor);
  1432. IF ~previewMode THEN
  1433. IF mpageMode THEN (* draw current Master Guides *)
  1434. cpage := document.GetCurrentMasterPage();
  1435. cguide := cpage.GetFirstGuide();
  1436. WHILE cguide # NIL DO
  1437. guidePos := cguide.GetPosition(); guideOrientation:= cguide.GetHorizontal();
  1438. IF guideOrientation THEN
  1439. canvas.Line(docOriginX, ENTIER(guidePos*zoomFactor)+docOriginY, w+docOriginX, ENTIER(guidePos*zoomFactor)+docOriginY, GUIDECOLOR, WMGraphics.ModeSrcOverDst);
  1440. ELSE
  1441. canvas.Line(ENTIER(guidePos*zoomFactor)+docOriginX, docOriginY, ENTIER(guidePos*zoomFactor)+docOriginX, h+docOriginY, GUIDECOLOR, WMGraphics.ModeSrcOverDst);
  1442. END;
  1443. cguide := cguide.next;
  1444. END;
  1445. ELSE (* draw document guides & appropriate Master Guides *)
  1446. (* master guides *)
  1447. cpage := document.GetCurrentPage(); cpage := cpage.GetMasterPage();
  1448. IF cpage # NIL THEN
  1449. cguide := cpage.GetFirstGuide();
  1450. WHILE cguide # NIL DO
  1451. guidePos := cguide.GetPosition(); guideOrientation:= cguide.GetHorizontal();
  1452. IF guideOrientation THEN
  1453. canvas.Line(docOriginX, ENTIER(guidePos*zoomFactor)+docOriginY, w+docOriginX, ENTIER(guidePos*zoomFactor)+docOriginY, GUIDECOLOR, WMGraphics.ModeSrcOverDst);
  1454. ELSE
  1455. canvas.Line(ENTIER(guidePos*zoomFactor)+docOriginX, docOriginY, ENTIER(guidePos*zoomFactor)+docOriginX, h+docOriginY, GUIDECOLOR, WMGraphics.ModeSrcOverDst);
  1456. END;
  1457. cguide := cguide.next;
  1458. END;
  1459. END;
  1460. (* document guides *)
  1461. cpage := document.GetCurrentPage();
  1462. cguide := cpage.GetFirstGuide();
  1463. WHILE cguide # NIL DO
  1464. guidePos := cguide.GetPosition(); guideOrientation:= cguide.GetHorizontal();
  1465. IF guideOrientation THEN
  1466. canvas.Line(docOriginX, ENTIER(guidePos*zoomFactor)+docOriginY, w+docOriginX, ENTIER(guidePos*zoomFactor)+docOriginY, GUIDECOLOR, WMGraphics.ModeSrcOverDst);
  1467. ELSE
  1468. canvas.Line(ENTIER(guidePos*zoomFactor)+docOriginX, docOriginY, ENTIER(guidePos*zoomFactor)+docOriginX, h+docOriginY, GUIDECOLOR, WMGraphics.ModeSrcOverDst);
  1469. END;
  1470. cguide := cguide.next;
  1471. END;
  1472. END;
  1473. (* margin *)
  1474. IF document.GetFacingPages() THEN
  1475. IF mpageMode THEN pageNumber := document.GetCurrentMasterPageNumber(); ELSE pageNumber := document.GetCurrentPageNumber(); END;
  1476. IF (pageNumber MOD 2 = 0) THEN
  1477. tempml := mr;
  1478. tempmr := ml;
  1479. ELSE
  1480. tempml := ml;
  1481. tempmr := mr;
  1482. END;
  1483. ELSE
  1484. tempml := ml;
  1485. tempmr := mr;
  1486. END;
  1487. canvas.Line(docOriginX+tempml, docOriginY+mt, docOriginX+w-tempmr, docOriginY+mt, BORDERCOLOR, WMGraphics.ModeSrcOverDst);
  1488. canvas.Line(docOriginX+tempml, docOriginY+h-mb, docOriginX+w-tempmr, docOriginY+h-mb, BORDERCOLOR, WMGraphics.ModeSrcOverDst);
  1489. canvas.Line(docOriginX+tempml, docOriginY+mt, docOriginX+tempml, docOriginY+h-mb, BORDERCOLOR, WMGraphics.ModeSrcOverDst);
  1490. canvas.Line(docOriginX+w-tempmr, docOriginY+mt, docOriginX+w-tempmr, docOriginY+h-mb, BORDERCOLOR, WMGraphics.ModeSrcOverDst);
  1491. END;
  1492. END DrawHelpers;
  1493. PROCEDURE DrawContent*(canvas : WMGraphics.Canvas);
  1494. VAR
  1495. (* cpage: DTPData.PageObject;
  1496. cframe: DTPData.FrameObject;
  1497. *) content: DTPData.ContentObject;
  1498. x, y, w, h: REAL;
  1499. color: LONGINT;
  1500. BEGIN
  1501. (* Draw current Page with (content)Frames, selected Frame *)
  1502. color := FRAMECOLOR;
  1503. IF mpageMode THEN (* master page *)
  1504. cpage := document.GetCurrentMasterPage();
  1505. cframe := cpage.GetFirstFrame();
  1506. WHILE cframe # NIL DO (* draw frames & their content *)
  1507. x := cframe.GetX(); y := cframe.GetY();
  1508. w := cframe.GetWidth(); h := cframe.GetHeight();
  1509. (* draw content *)
  1510. content := cframe.GetContent();
  1511. IF content # NIL THEN
  1512. content.Draw(canvas, docOriginX+ENTIER(x*zoomFactor), docOriginY+ENTIER(y*zoomFactor), ENTIER(w*zoomFactor), ENTIER(h*zoomFactor), zoomFactor, quality, previewMode);
  1513. END;
  1514. (* draw bounding box *)
  1515. IF ~previewMode THEN
  1516. DrawRectangle(canvas, docOriginX+ENTIER(x*zoomFactor), docOriginY+ENTIER(y*zoomFactor), docOriginX+ENTIER((x+w)*zoomFactor), docOriginY+ENTIER((y+h)*zoomFactor), color);
  1517. END;
  1518. cframe := cframe.next;
  1519. END;
  1520. ELSE (* draw current page & app. master *)
  1521. (* master page *)
  1522. cpage := document.GetCurrentPage(); cpage := cpage.GetMasterPage();
  1523. IF cpage # NIL THEN (* if there is a masterpage.. *)
  1524. cframe := cpage.GetFirstFrame();
  1525. WHILE cframe # NIL DO (* draw frames & their content *)
  1526. x := cframe.GetX(); y := cframe.GetY();
  1527. w := cframe.GetWidth(); h := cframe.GetHeight();
  1528. (* draw content *)
  1529. content := cframe.GetContent();
  1530. IF content # NIL THEN
  1531. content.Draw(canvas, docOriginX+ENTIER(x*zoomFactor), docOriginY+ENTIER(y*zoomFactor), ENTIER(w*zoomFactor), ENTIER(h*zoomFactor), zoomFactor, quality, previewMode);
  1532. END;
  1533. (* draw bounding box *)
  1534. IF ~previewMode THEN
  1535. DrawRectangle(canvas, docOriginX+ENTIER(x*zoomFactor), docOriginY+ENTIER(y*zoomFactor), docOriginX+ENTIER((x+w)*zoomFactor), docOriginY+ENTIER((y+h)*zoomFactor), MASTERFRAMECOLOR);
  1536. END;
  1537. cframe := cframe.next;
  1538. END;
  1539. END;
  1540. (* maybe call DrawGrid after MasterPage Again... *)
  1541. IF ~mpageMode THEN DrawGrid(canvas); END;
  1542. (* document page *)
  1543. cpage := document.GetCurrentPage();
  1544. cframe := cpage.GetFirstFrame();
  1545. WHILE cframe # NIL DO (* draw frames & their content *)
  1546. x := cframe.GetX(); y := cframe.GetY();
  1547. w := cframe.GetWidth(); h := cframe.GetHeight();
  1548. (* draw content *)
  1549. content := cframe.GetContent();
  1550. IF content # NIL THEN
  1551. content.Draw(canvas, docOriginX+ENTIER(x*zoomFactor), docOriginY+ENTIER(y*zoomFactor), ENTIER(w*zoomFactor), ENTIER(h*zoomFactor), zoomFactor, quality, previewMode);
  1552. END;
  1553. (* draw bounding box *)
  1554. IF ~previewMode THEN
  1555. DrawRectangle(canvas, docOriginX+ENTIER(x*zoomFactor), docOriginY+ENTIER(y*zoomFactor), docOriginX+ENTIER((x+w)*zoomFactor), docOriginY+ENTIER((y+h)*zoomFactor), color);
  1556. END;
  1557. cframe := cframe.next;
  1558. END;
  1559. END;
  1560. END DrawContent;
  1561. PROCEDURE DrawSelectedFrame(canvas : WMGraphics.Canvas);
  1562. VAR
  1563. (* cpage: DTPData.PageObject;
  1564. cframe: DTPData.FrameObject;
  1565. cguide: DTPData.GuideObject;
  1566. *) x, y, w, h, pos: REAL;
  1567. color: LONGINT;
  1568. horizontal: BOOLEAN;
  1569. BEGIN
  1570. IF mpageMode THEN
  1571. cpage := document.GetCurrentMasterPage();
  1572. ELSE
  1573. cpage := document.GetCurrentPage();
  1574. END;
  1575. (* draw current frame (border) *)
  1576. color := ACTIVEFRAMECOLOR;
  1577. cframe := cpage.GetCurrentFrame();
  1578. cguide := cpage.GetCurrentGuide();
  1579. IF cguide # NIL THEN
  1580. pos := cguide.GetPosition();
  1581. horizontal := cguide.GetHorizontal();
  1582. IF ~previewMode THEN
  1583. IF horizontal THEN
  1584. canvas.Line(docOriginX, docOriginY+ENTIER(pos*zoomFactor), docOriginX+ENTIER(document.GetPageWidth()*zoomFactor), docOriginY+ENTIER(pos*zoomFactor), color, WMGraphics.ModeSrcOverDst);
  1585. ELSE
  1586. canvas.Line(docOriginX+ENTIER(pos*zoomFactor), docOriginY, docOriginX+ENTIER(pos*zoomFactor), docOriginY+ENTIER(document.GetPageHeight()*zoomFactor), color, WMGraphics.ModeSrcOverDst);
  1587. END;
  1588. END;
  1589. ELSIF cframe # NIL THEN
  1590. x := cframe.GetX(); y := cframe.GetY();
  1591. w := cframe.GetWidth(); h := cframe.GetHeight();
  1592. IF ~previewMode THEN
  1593. DrawRectangle(canvas, docOriginX+ENTIER(x*zoomFactor), docOriginY+ENTIER(y*zoomFactor), docOriginX+ENTIER((x+w)*zoomFactor), docOriginY+ENTIER((y+h)*zoomFactor), color);
  1594. IF selectionON THEN
  1595. DrawFrameHandles(canvas, docOriginX+ENTIER(x*zoomFactor), docOriginY+ENTIER(y*zoomFactor), docOriginX+ENTIER((x+w)*zoomFactor), docOriginY+ENTIER((y+h)*zoomFactor), color);
  1596. END
  1597. END
  1598. ELSE
  1599. END;
  1600. END DrawSelectedFrame;
  1601. PROCEDURE DrawRectangle(canvas: WMGraphics.Canvas; xs, ys, xe, ye, color: LONGINT);
  1602. BEGIN
  1603. canvas.Line(xs,ys,xs,ye, color, WMGraphics.ModeSrcOverDst);
  1604. canvas.Line(xs,ys,xe,ys, color, WMGraphics.ModeSrcOverDst);
  1605. canvas.Line(xe,ys,xe,ye, color, WMGraphics.ModeSrcOverDst);
  1606. canvas.Line(xs,ye,xe,ye, color, WMGraphics.ModeSrcOverDst);
  1607. END DrawRectangle;
  1608. PROCEDURE DrawFrameHandles(canvas: WMGraphics.Canvas; xs, ys, xe, ye, color: LONGINT);
  1609. BEGIN
  1610. canvas.Fill(WMRectangles.MakeRect(xs-4, ys-4, xs+1, ys+1), color, WMGraphics.ModeSrcOverDst);
  1611. canvas.Fill(WMRectangles.MakeRect(xe, ys-4, xe+5, ys+1), color, WMGraphics.ModeSrcOverDst);
  1612. canvas.Fill(WMRectangles.MakeRect(xs-4, ye, xs+1, ye+5), color, WMGraphics.ModeSrcOverDst);
  1613. canvas.Fill(WMRectangles.MakeRect(xe, ye, xe+5, ye+5), color, WMGraphics.ModeSrcOverDst);
  1614. canvas.Fill(WMRectangles.MakeRect(xs-4, ENTIER((ys+ye)/2)-2, xs+1, ENTIER((ys+ye)/2)+2), color, WMGraphics.ModeSrcOverDst);
  1615. canvas.Fill(WMRectangles.MakeRect(ENTIER((xs+xe)/2)-1, ys-4, ENTIER((xs+xe)/2)+3, ys+1), color, WMGraphics.ModeSrcOverDst);
  1616. canvas.Fill(WMRectangles.MakeRect(xe, ENTIER((ys+ye)/2)-2, xe+5, ENTIER((ys+ye)/2)+2), color, WMGraphics.ModeSrcOverDst);
  1617. canvas.Fill(WMRectangles.MakeRect(ENTIER((xs+xe)/2)-1, ye, ENTIER((xs+xe)/2)+3, ye+5), color, WMGraphics.ModeSrcOverDst);
  1618. END DrawFrameHandles;
  1619. PROCEDURE DrawUserAction(canvas: WMGraphics.Canvas);
  1620. VAR color: LONGINT;
  1621. rx, ry: REAL;
  1622. snapL, snapT, snapR, snapB: BOOLEAN;
  1623. BEGIN
  1624. color := FRAMECOLOR;
  1625. IF ~previewMode THEN (* Document Edit Mode *)
  1626. IF ~selectionON THEN (* plugin tools *)
  1627. IF addobject THEN
  1628. IF down THEN
  1629. IF snapOnCreate THEN
  1630. IF tx0 >-1 THEN vx0 := ENTIER(tx0*zoomFactor)+docOriginX; ELSE vx0 := x0; END;
  1631. IF ty0 >-1 THEN vy0 := ENTIER(ty0*zoomFactor)+docOriginY; ELSE vy0 := y0; END;
  1632. ELSE
  1633. vx0 := x0; vy0 := y0;
  1634. END;
  1635. IF WillSnap((x1-docOriginX)/zoomFactor, (y1-docOriginY)/zoomFactor, (x1-docOriginX)/zoomFactor, (y1-docOriginY)/zoomFactor, snapL, snapT, snapR, snapB, rx, ry) THEN
  1636. IF snapR OR snapL THEN vx1 := ENTIER(rx*zoomFactor)+docOriginX; ELSE vx1 := x1; END;
  1637. IF snapT OR snapB THEN vy1 := ENTIER(ry*zoomFactor)+docOriginY; ELSE vy1 := y1; END;
  1638. ELSE
  1639. vx1 := x1; vy1 := y1;
  1640. END;
  1641. (* create object *)
  1642. canvas.Line(vx0,vy0,vx0,vy1, color, WMGraphics.ModeSrcOverDst);
  1643. canvas.Line(vx0,vy0,vx1,vy0, color, WMGraphics.ModeSrcOverDst);
  1644. canvas.Line(vx1,vy0,vx1,vy1, color, WMGraphics.ModeSrcOverDst);
  1645. canvas.Line(vx0,vy1,vx1,vy1, color, WMGraphics.ModeSrcOverDst);
  1646. END;
  1647. END;
  1648. ELSE (* selection tool *)
  1649. IF down THEN
  1650. IF addguide THEN (* add guide *)
  1651. IF res2 = 0 THEN
  1652. canvas.Line(docOriginX, y1, ENTIER(document.GetPageWidth()*zoomFactor)+docOriginX, y1, color, WMGraphics.ModeSrcOverDst);
  1653. ELSE
  1654. canvas.Line(x1, docOriginY, x1, ENTIER(document.GetPageHeight()*zoomFactor)+docOriginY, color, WMGraphics.ModeSrcOverDst);
  1655. END;
  1656. END;
  1657. END;
  1658. END;
  1659. ELSE (* Preview Mode *)
  1660. END;
  1661. END DrawUserAction;
  1662. PROCEDURE InvalidateCurrentFrame*;
  1663. BEGIN
  1664. Invalidate;
  1665. END InvalidateCurrentFrame;
  1666. PROCEDURE SetContentPropsPosition*(x, y: LONGINT);
  1667. BEGIN
  1668. propsX := x; propsY := y;
  1669. END SetContentPropsPosition;
  1670. PROCEDURE UpdateContentProps*;
  1671. VAR activeContent, content : DTPData.ContentObject;
  1672. BEGIN
  1673. IF activeFrame # NIL THEN
  1674. activeContent := activeFrame.GetContent();
  1675. activeContent.Hide;
  1676. END;
  1677. IF mpageMode THEN
  1678. cpage := document.GetCurrentMasterPage();
  1679. ELSE
  1680. cpage := document.GetCurrentPage();
  1681. END;
  1682. cframe := cpage.GetCurrentFrame();
  1683. IF cframe # NIL THEN
  1684. content := cframe.GetContent();
  1685. content.Show(propsX, propsY); activeFrame := cframe;
  1686. END;
  1687. ownerWindowSetFocus;
  1688. END UpdateContentProps;
  1689. PROCEDURE UpdateProps*;
  1690. VAR
  1691. cpage: DTPData.PageObject;
  1692. cframe: DTPData.FrameObject;
  1693. cguide: DTPData.GuideObject;
  1694. BEGIN
  1695. (* props := parentWindow.props; *)
  1696. IF props # NIL THEN
  1697. (* document := parentWindow.GetDocument(); *)
  1698. IF document # NIL THEN
  1699. IF mpageMode THEN
  1700. cpage := document.GetCurrentMasterPage();
  1701. ELSE
  1702. cpage := document.GetCurrentPage();
  1703. END;
  1704. cframe := cpage.GetCurrentFrame();
  1705. cguide := cpage.GetCurrentGuide();
  1706. IF selectionON THEN (* selection tool *)
  1707. IF (cframe = NIL) & (cguide = NIL) THEN (* no frame/guide selected *)
  1708. IF addguide THEN
  1709. props.SetActive;
  1710. IF res2 = 0 THEN
  1711. props.SetCoordinates(0, (y1-docOriginY)/zoomFactor, 0,0);
  1712. ELSE
  1713. props.SetCoordinates((x1-docOriginX)/zoomFactor, 0, 0, 0);
  1714. END;
  1715. ELSE
  1716. props.SetInactive;
  1717. props.InitValues;
  1718. END;
  1719. ELSIF (cframe # NIL) THEN (* frame selected *)
  1720. props.SetActiveALL;
  1721. IF quality THEN
  1722. props.SetProperties(cframe.GetX(), cframe.GetY(), cframe.GetWidth(), cframe.GetHeight(), cframe.GetName(), cframe.GetStyle(), cframe.GetWrap(), cframe.GetWrapTop(), cframe.GetWrapBottom(), cframe.GetWrapLeft(), cframe.GetWrapRight());
  1723. ELSE
  1724. props.SetCoordinates(cframe.GetX(), cframe.GetY(), cframe.GetWidth(), cframe.GetHeight());
  1725. END;
  1726. ELSIF (cguide # NIL) THEN
  1727. props.SetActive;
  1728. IF cguide.GetHorizontal() THEN
  1729. props.SetCoordinates(0, cguide.GetPosition(), 0, 0);
  1730. ELSE
  1731. props.SetCoordinates(cguide.GetPosition(), 0, 0, 0);
  1732. END;
  1733. ELSE
  1734. END;
  1735. ELSE (* plugins *)
  1736. IF down THEN
  1737. props.SetActive;
  1738. props.SetCoordinates((x0-docOriginX)/zoomFactor, (y0-docOriginY)/zoomFactor, (x1-x0)/zoomFactor, (y1-y0)/zoomFactor);
  1739. ELSE (* display current frame *)
  1740. cpage := document.GetCurrentPage();
  1741. cframe := cpage.GetCurrentFrame();
  1742. IF (cframe # NIL) THEN (* frame selected *)
  1743. props.SetActiveALL;
  1744. props.SetProperties(cframe.GetX(), cframe.GetY(), cframe.GetWidth(), cframe.GetHeight(), cframe.GetName(), cframe.GetStyle(), cframe.GetWrap(), cframe.GetWrapTop(), cframe.GetWrapBottom(), cframe.GetWrapLeft(), cframe.GetWrapRight());
  1745. ELSE
  1746. props.SetInactive;
  1747. props.InitValues;
  1748. END;
  1749. END;
  1750. END;
  1751. END;
  1752. END;
  1753. END UpdateProps;
  1754. PROCEDURE UpdateCoordinates*;
  1755. VAR
  1756. (* cpage: DTPData.PageObject;
  1757. cframe: DTPData.FrameObject;
  1758. cguide: DTPData.GuideObject;
  1759. *) BEGIN
  1760. (* props := parentWindow.props; *)
  1761. IF props # NIL THEN
  1762. (* document := parentWindow.GetDocument(); *)
  1763. IF document # NIL THEN
  1764. IF mpageMode THEN
  1765. cpage := document.GetCurrentMasterPage();
  1766. ELSE
  1767. cpage := document.GetCurrentPage();
  1768. END;
  1769. cframe := cpage.GetCurrentFrame();
  1770. cguide := cpage.GetCurrentGuide();
  1771. IF (cframe = NIL) & (cguide = NIL) THEN
  1772. props.SetCoordinates((x1-docOriginX)/zoomFactor, (y1-docOriginY)/zoomFactor, 0, 0);
  1773. END;
  1774. END;
  1775. END;
  1776. END UpdateCoordinates;
  1777. PROCEDURE CloseContentProps*;
  1778. VAR activeContent: DTPData.ContentObject;
  1779. BEGIN
  1780. IF activeFrame # NIL THEN
  1781. activeContent := activeFrame.GetContent();
  1782. activeContent.Close;
  1783. END;
  1784. END CloseContentProps;
  1785. END DrawPanel;
  1786. PropertyWindow* = OBJECT(WMComponents.FormWindow);
  1787. VAR frameName : Strings.String;
  1788. frameX,frameY, frameW, frameH : REAL;
  1789. frameStyle : DTPData.StyleObject;
  1790. textwrapON : BOOLEAN;
  1791. twrapTop, twrapBottom, twrapLeft, twrapRight : REAL;
  1792. theCaller : DrawPanel;
  1793. tempLabel* : WMStandardComponents.Label;
  1794. cdoc: DTPData.Document;
  1795. cpage: DTPData.PageObject;
  1796. cframe: DTPData.FrameObject;
  1797. cguide: DTPData.GuideObject;
  1798. shown, active, activeALL : BOOLEAN;
  1799. leftPanel, rightPanel: WMStandardComponents.Panel;
  1800. efx, efy, efw, efh, efn, efs, eftw, efwt, efwb, efwl, efwr: WMEditors.Editor;
  1801. PROCEDURE &New*(caller: DrawPanel);
  1802. VAR vc: WMComponents.VisualComponent;
  1803. BEGIN
  1804. theCaller := caller;
  1805. manager := WMWindowManager.GetDefaultManager();
  1806. vc := CreatePropertyForm();
  1807. InitValues;
  1808. Init(vc.bounds.GetWidth(), vc.bounds.GetHeight(), TRUE);
  1809. SetContent(vc);
  1810. SetTitle(Strings.NewString("Frame"));
  1811. shown := FALSE; active := TRUE; activeALL := FALSE;
  1812. SetInactive;
  1813. END New;
  1814. PROCEDURE CreatePropertyForm(): WMComponents.VisualComponent;
  1815. VAR panel: WMStandardComponents.Panel;
  1816. label: WMStandardComponents.Label;
  1817. windowStyle : WMWindowManager.WindowStyle;
  1818. panelColor : WMGraphics.Color;
  1819. BEGIN
  1820. windowStyle := manager.GetStyle();
  1821. panelColor := windowStyle.bgColor;
  1822. NEW(panel);
  1823. (* panel.bounds.SetExtents(190, 230); *)
  1824. panel.bounds.SetExtents(190, 130);
  1825. panel.fillColor.Set(panelColor);
  1826. panel.takesFocus.Set(TRUE);
  1827. NEW(leftPanel); leftPanel.bounds.SetWidth(90); leftPanel.alignment.Set(WMComponents.AlignLeft);
  1828. panel.AddContent(leftPanel);
  1829. NEW(rightPanel); rightPanel.alignment.Set(WMComponents.AlignClient);
  1830. panel.AddContent(rightPanel);
  1831. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  1832. label.SetCaption(" X:"); label.textColor.Set(0000000FFH);
  1833. leftPanel.AddContent(label);
  1834. NEW(efx); efx.bounds.SetHeight(20); efx.alignment.Set(WMComponents.AlignTop);
  1835. efx.tv.showBorder.Set(TRUE); efx.multiLine.Set(FALSE); efx.fillColor.Set(0FFFFFFFFH);
  1836. efx.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1837. efx.onEnter.Add(SetValueHandler); efx.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  1838. rightPanel.AddContent(efx);
  1839. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  1840. label.SetCaption(" Y:"); label.textColor.Set(0000000FFH);
  1841. leftPanel.AddContent(label);
  1842. NEW(efy); efy.bounds.SetHeight(20); efy.alignment.Set(WMComponents.AlignTop);
  1843. efy.tv.showBorder.Set(TRUE); efy.multiLine.Set(FALSE); efy.fillColor.Set(0FFFFFFFFH);
  1844. efy.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1845. efy.onEnter.Add(SetValueHandler); efy.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  1846. rightPanel.AddContent(efy);
  1847. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  1848. label.SetCaption(" Width:"); label.textColor.Set(0000000FFH);
  1849. leftPanel.AddContent(label);
  1850. NEW(efw); efw.bounds.SetHeight(20); efw.alignment.Set(WMComponents.AlignTop);
  1851. efw.tv.showBorder.Set(TRUE); efw.multiLine.Set(FALSE); efw.fillColor.Set(0FFFFFFFFH);
  1852. efw.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1853. efw.onEnter.Add(SetValueHandler); efw.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  1854. rightPanel.AddContent(efw);
  1855. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  1856. label.SetCaption(" Height:"); label.textColor.Set(0000000FFH);
  1857. leftPanel.AddContent(label);
  1858. NEW(efh); efh.bounds.SetHeight(20); efh.alignment.Set(WMComponents.AlignTop);
  1859. efh.tv.showBorder.Set(TRUE); efh.multiLine.Set(FALSE); efh.fillColor.Set(0FFFFFFFFH);
  1860. efh.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1861. efh.onEnter.Add(SetValueHandler); efh.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  1862. rightPanel.AddContent(efh);
  1863. (* add spacer *)
  1864. NEW(label); label.bounds.SetHeight(10); label.alignment.Set(WMComponents.AlignTop);
  1865. label.SetCaption("");
  1866. leftPanel.AddContent(label);
  1867. NEW(label); label.bounds.SetHeight(10); label.alignment.Set(WMComponents.AlignTop);
  1868. label.SetCaption("");
  1869. rightPanel.AddContent(label);
  1870. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  1871. label.SetCaption(" Name:"); label.textColor.Set(0000000FFH);
  1872. leftPanel.AddContent(label);
  1873. NEW(efn); efn.bounds.SetHeight(20); efn.alignment.Set(WMComponents.AlignTop);
  1874. efn.tv.showBorder.Set(TRUE); efn.multiLine.Set(FALSE); efn.fillColor.Set(0FFFFFFFFH);
  1875. efn.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1876. efn.onEnter.Add(SetValueHandler); efn.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  1877. rightPanel.AddContent(efn);
  1878. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  1879. label.SetCaption(" Style:"); label.textColor.Set(0000000FFH);
  1880. (* leftPanel.AddContent(label); *)
  1881. NEW(efs); efs.bounds.SetHeight(20); efs.alignment.Set(WMComponents.AlignTop);
  1882. efs.tv.showBorder.Set(TRUE); efs.multiLine.Set(FALSE); efs.fillColor.Set(0FFFFFFFFH);
  1883. efs.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1884. efs.onEnter.Add(SetValueHandler); efs.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  1885. (* rightPanel.AddContent(efs); *)
  1886. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  1887. label.SetCaption(" TextWrapON:"); label.textColor.Set(0000000FFH);
  1888. (* leftPanel.AddContent(label); *)
  1889. NEW(eftw); eftw.bounds.SetHeight(20); eftw.alignment.Set(WMComponents.AlignTop);
  1890. eftw.tv.showBorder.Set(TRUE); eftw.multiLine.Set(FALSE); eftw.fillColor.Set(0FFFFFFFFH);
  1891. eftw.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1892. eftw.onEnter.Add(SetValueHandler); eftw.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  1893. (* rightPanel.AddContent(eftw); *)
  1894. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  1895. label.SetCaption(" TWTop:"); label.textColor.Set(0000000FFH);
  1896. (* leftPanel.AddContent(label); *)
  1897. NEW(efwt); efwt.bounds.SetHeight(20); efwt.alignment.Set(WMComponents.AlignTop);
  1898. efwt.tv.showBorder.Set(TRUE); efwt.multiLine.Set(FALSE); efwt.fillColor.Set(0FFFFFFFFH);
  1899. efwt.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1900. efwt.onEnter.Add(SetValueHandler); efwt.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  1901. (* rightPanel.AddContent(efwt); *)
  1902. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  1903. label.SetCaption(" TWBottom:"); label.textColor.Set(0000000FFH);
  1904. (* leftPanel.AddContent(label); *)
  1905. NEW(efwb); efwb.bounds.SetHeight(20); efwb.alignment.Set(WMComponents.AlignTop);
  1906. efwb.tv.showBorder.Set(TRUE); efwb.multiLine.Set(FALSE); efwb.fillColor.Set(0FFFFFFFFH);
  1907. efwb.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1908. efwb.onEnter.Add(SetValueHandler); efwb.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  1909. (* rightPanel.AddContent(efwb); *)
  1910. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  1911. label.SetCaption(" TWLeft:"); label.textColor.Set(0000000FFH);
  1912. (* leftPanel.AddContent(label); *)
  1913. NEW(efwl); efwl.bounds.SetHeight(20); efwl.alignment.Set(WMComponents.AlignTop);
  1914. efwl.tv.showBorder.Set(TRUE); efwl.multiLine.Set(FALSE); efwl.fillColor.Set(0FFFFFFFFH);
  1915. efwl.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1916. efwl.onEnter.Add(SetValueHandler); efwl.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  1917. (* rightPanel.AddContent(efwl); *)
  1918. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop);
  1919. label.SetCaption(" TWRight:"); label.textColor.Set(0000000FFH);
  1920. (* leftPanel.AddContent(label); *)
  1921. NEW(efwr); efwr.bounds.SetHeight(20); efwr.alignment.Set(WMComponents.AlignTop);
  1922. efwr.tv.showBorder.Set(TRUE); efwr.multiLine.Set(FALSE); efwr.fillColor.Set(0FFFFFFFFH);
  1923. efwr.tv.textAlignV.Set(WMGraphics.AlignCenter);
  1924. efwr.onEnter.Add(SetValueHandler); efwr.tv.borders.Set(WMRectangles.MakeRect(3,3,1,1));
  1925. (* rightPanel.AddContent(efwr); *)
  1926. RETURN panel;
  1927. END CreatePropertyForm;
  1928. PROCEDURE Show*;
  1929. BEGIN
  1930. IF ~shown THEN
  1931. shown := TRUE;
  1932. WMWindowManager.ExtAddWindow(SELF, 820, 90,
  1933. {WMWindowManager.FlagFrame, WMWindowManager.FlagStayOnTop, WMWindowManager.FlagClose, WMWindowManager.FlagMinimize});
  1934. END;
  1935. END Show;
  1936. PROCEDURE Hide*;
  1937. BEGIN
  1938. IF shown THEN
  1939. shown := FALSE;
  1940. manager.Remove(SELF);
  1941. END;
  1942. END Hide;
  1943. PROCEDURE SetActiveALL*;
  1944. BEGIN
  1945. IF ~activeALL THEN
  1946. rightPanel.takesFocus.Set(TRUE); (* make field NONEDITABLE? *)
  1947. efx.fillColor.Set(0FFFFFFFFH); efx.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1948. efy.fillColor.Set(0FFFFFFFFH); efy.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1949. efw.fillColor.Set(0FFFFFFFFH); efw.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1950. efh.fillColor.Set(0FFFFFFFFH); efh.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1951. efn.fillColor.Set(0FFFFFFFFH); efn.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1952. efs.fillColor.Set(0FFFFFFFFH); efs.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1953. eftw.fillColor.Set(0FFFFFFFFH); eftw.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1954. efwt.fillColor.Set(0FFFFFFFFH); efwt.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1955. efwb.fillColor.Set(0FFFFFFFFH); efwb.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1956. efwl.fillColor.Set(0FFFFFFFFH); efwl.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1957. efwr.fillColor.Set(0FFFFFFFFH); efwr.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1958. rightPanel.Invalidate;
  1959. activeALL := TRUE;
  1960. END;
  1961. END SetActiveALL;
  1962. PROCEDURE SetActive*;
  1963. BEGIN
  1964. IF ~active THEN
  1965. rightPanel.takesFocus.Set(TRUE); (* make field NONEDITABLE? *)
  1966. efx.fillColor.Set(0FFFFFFFFH); efx.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1967. efy.fillColor.Set(0FFFFFFFFH); efy.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1968. efw.fillColor.Set(0FFFFFFFFH); efw.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1969. efh.fillColor.Set(0FFFFFFFFH); efh.tv.defaultTextBgColor.Set(0FFFFFFFFH);
  1970. (* efn.fillColor.Set(0BBBBBBFFH); efn.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1971. efs.fillColor.Set(0BBBBBBFFH); efs.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1972. eftw.fillColor.Set(0BBBBBBFFH); eftw.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1973. efwt.fillColor.Set(0BBBBBBFFH); efwt.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1974. efwb.fillColor.Set(0BBBBBBFFH); efwb.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1975. efwl.fillColor.Set(0BBBBBBFFH); efwl.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1976. efwr.fillColor.Set(0BBBBBBFFH); efwr.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1977. *) rightPanel.Invalidate;
  1978. active := TRUE;
  1979. END;
  1980. END SetActive;
  1981. PROCEDURE SetInactive*;
  1982. BEGIN
  1983. IF active OR activeALL THEN
  1984. rightPanel.takesFocus.Set(FALSE); (* make field EDITABLE? *)
  1985. efx.fillColor.Set(0BBBBBBFFH); efx.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1986. efy.fillColor.Set(0BBBBBBFFH); efy.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1987. efw.fillColor.Set(0BBBBBBFFH); efw.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1988. efh.fillColor.Set(0BBBBBBFFH); efh.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1989. efn.fillColor.Set(0BBBBBBFFH); efn.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1990. efs.fillColor.Set(0BBBBBBFFH); efs.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1991. eftw.fillColor.Set(0BBBBBBFFH); eftw.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1992. efwt.fillColor.Set(0BBBBBBFFH); efwt.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1993. efwb.fillColor.Set(0BBBBBBFFH); efwb.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1994. efwl.fillColor.Set(0BBBBBBFFH); efwl.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1995. efwr.fillColor.Set(0BBBBBBFFH); efwr.tv.defaultTextBgColor.Set(0BBBBBBFFH);
  1996. rightPanel.Invalidate;
  1997. active := FALSE; activeALL := FALSE;
  1998. END;
  1999. END SetInactive;
  2000. PROCEDURE SetProperties*(x, y, w, h: REAL; name: Strings.String; style: DTPData.StyleObject; tw: BOOLEAN; twt, twb, twl, twr: REAL);
  2001. VAR propString: ARRAY 32 OF CHAR;
  2002. BEGIN
  2003. frameX := x; frameY := y; frameW := w; frameH := h;
  2004. frameName := name;
  2005. frameStyle := style;
  2006. textwrapON := tw;
  2007. twrapTop := twt; twrapBottom := twb; twrapLeft := twl; twrapRight := twr;
  2008. Strings.FloatToStr(frameX, 0, 4, 0, propString);
  2009. efx.SetAsString(propString);
  2010. Strings.FloatToStr(frameY, 0, 4, 0, propString);
  2011. efy.SetAsString(propString);
  2012. Strings.FloatToStr(frameW, 0, 4, 0, propString);
  2013. efw.SetAsString(propString);
  2014. Strings.FloatToStr(frameH, 0, 4, 0, propString);
  2015. efh.SetAsString(propString);
  2016. COPY(frameName^, propString);
  2017. efn.SetAsString(propString);
  2018. (* style.. *)
  2019. Strings.BoolToStr(textwrapON, propString);
  2020. eftw.SetAsString(propString);
  2021. Strings.FloatToStr(twrapTop, 0, 4, 0, propString);
  2022. efwt.SetAsString(propString);
  2023. Strings.FloatToStr(twrapBottom, 0, 4, 0, propString);
  2024. efwb.SetAsString(propString);
  2025. Strings.FloatToStr(twrapLeft, 0, 4, 0, propString);
  2026. efwl.SetAsString(propString);
  2027. Strings.FloatToStr(twrapRight, 0, 4, 0, propString);
  2028. efwr.SetAsString(propString);
  2029. END SetProperties;
  2030. PROCEDURE SetCoordinates*(x, y, w, h: REAL);
  2031. VAR propString: ARRAY 32 OF CHAR;
  2032. BEGIN
  2033. frameX := x; frameY := y; frameW := w; frameH := h;
  2034. Strings.FloatToStr(frameX, 0, 4, 0, propString);
  2035. efx.SetAsString(propString);
  2036. Strings.FloatToStr(frameY, 0, 4, 0, propString);
  2037. efy.SetAsString(propString);
  2038. Strings.FloatToStr(frameW, 0, 4, 0, propString);
  2039. efw.SetAsString(propString);
  2040. Strings.FloatToStr(frameH, 0, 4, 0, propString);
  2041. efh.SetAsString(propString);
  2042. END SetCoordinates;
  2043. PROCEDURE InitValues*;
  2044. VAR propString: ARRAY 32 OF CHAR;
  2045. BEGIN
  2046. propString := "";
  2047. efx.SetAsString(propString);
  2048. efy.SetAsString(propString);
  2049. efw.SetAsString(propString);
  2050. efh.SetAsString(propString);
  2051. efn.SetAsString(propString);
  2052. efs.SetAsString(propString);
  2053. eftw.SetAsString(propString);
  2054. efwt.SetAsString(propString);
  2055. efwb.SetAsString(propString);
  2056. efwl.SetAsString(propString);
  2057. efwr.SetAsString(propString);
  2058. END InitValues;
  2059. PROCEDURE SetValueHandler(sender, data: ANY);
  2060. VAR
  2061. plreal, plreal2, plreal3, plreal4 : LONGREAL;
  2062. pstring, pstring2, pstring3, pstring4 : ARRAY 128 OF CHAR;
  2063. pbool : BOOLEAN;
  2064. content : DTPData.ContentObject;
  2065. BEGIN
  2066. cdoc := theCaller.GetDocument();
  2067. IF theCaller.mpageMode THEN
  2068. cpage := cdoc.GetCurrentMasterPage();
  2069. ELSE
  2070. cpage := cdoc.GetCurrentPage();
  2071. END;
  2072. cframe := cpage.GetCurrentFrame();
  2073. cguide := cpage.GetCurrentGuide();
  2074. IF cframe # NIL THEN (* update frame values *)
  2075. IF (sender = efx) THEN
  2076. efx.GetAsString(pstring); Strings.StrToFloat(pstring, plreal);
  2077. efy.GetAsString(pstring2); Strings.StrToFloat(pstring2, plreal2);
  2078. cframe.SetPosition(SHORT(plreal), SHORT(plreal2));
  2079. ELSIF (sender = efy) THEN
  2080. efx.GetAsString(pstring); Strings.StrToFloat(pstring, plreal);
  2081. efy.GetAsString(pstring2); Strings.StrToFloat(pstring2, plreal2);
  2082. cframe.SetPosition(SHORT(plreal), SHORT(plreal2));
  2083. ELSIF (sender = efw) THEN
  2084. efw.GetAsString(pstring); Strings.StrToFloat(pstring, plreal);
  2085. efh.GetAsString(pstring2); Strings.StrToFloat(pstring2, plreal2);
  2086. cframe.SetSize(SHORT(plreal), SHORT(plreal2));
  2087. ELSIF (sender = efh) THEN
  2088. efw.GetAsString(pstring); Strings.StrToFloat(pstring, plreal);
  2089. efh.GetAsString(pstring2); Strings.StrToFloat(pstring2, plreal2);
  2090. cframe.SetSize(SHORT(plreal), SHORT(plreal2));
  2091. ELSIF (sender = efn) THEN
  2092. efn.GetAsString(pstring);
  2093. content := cdoc.GetContentByName(pstring);
  2094. IF (content = NIL) THEN
  2095. cframe.SetName(Strings.NewString(pstring));
  2096. content := cframe.GetContent();
  2097. IF content # NIL THEN content.contentName := Strings.NewString(pstring); END;
  2098. ELSE
  2099. cframe.SetName(Strings.NewString("already exists"));
  2100. content := cframe.GetContent();
  2101. IF content # NIL THEN content.contentName := Strings.NewString(pstring); END;
  2102. efn.SetAsString("already exists");
  2103. END;
  2104. ELSIF (sender = efs) THEN
  2105. ELSIF (sender = eftw) THEN
  2106. eftw.GetAsString(pstring); Strings.StrToBool(pstring, pbool);
  2107. cframe.SetWrap(pbool);
  2108. ELSIF (sender = efwt) OR (sender = efwb) OR (sender = efwl) OR (sender = efwr) THEN
  2109. efwt.GetAsString(pstring); Strings.StrToFloat(pstring, plreal);
  2110. efwb.GetAsString(pstring2); Strings.StrToFloat(pstring2, plreal2);
  2111. efwl.GetAsString(pstring3); Strings.StrToFloat(pstring3, plreal3);
  2112. efwr.GetAsString(pstring4); Strings.StrToFloat(pstring4, plreal4);
  2113. cframe.SetWrapSize(SHORT(plreal), SHORT(plreal2), SHORT(plreal3), SHORT(plreal4));
  2114. ELSE
  2115. END;
  2116. ELSIF cguide # NIL THEN (* update guide values *)
  2117. IF cguide.GetHorizontal() THEN
  2118. efy.GetAsString(pstring); Strings.StrToFloat(pstring, plreal);
  2119. cguide.SetPosition(SHORT(plreal));
  2120. ELSE
  2121. efx.GetAsString(pstring); Strings.StrToFloat(pstring, plreal);
  2122. cguide.SetPosition(SHORT(plreal));
  2123. END;
  2124. ELSE
  2125. END;
  2126. theCaller.Invalidate;
  2127. END SetValueHandler;
  2128. PROCEDURE Close*;
  2129. BEGIN
  2130. theCaller.propertyOpen := FALSE;
  2131. Hide;
  2132. Close^;
  2133. END Close;
  2134. END PropertyWindow;
  2135. (* New Object Dialog Window *)
  2136. (* NewObjectDialog* = OBJECT(WMComponents.FormWindow)
  2137. VAR content: WMComponents.VisualComponent;
  2138. result: LONGINT;
  2139. objectWidthField, objectHeightField: WMEditors.Editor;
  2140. shown: BOOLEAN;
  2141. theCaller: DrawPanel;
  2142. PROCEDURE &New(caller: DrawPanel);
  2143. BEGIN
  2144. theCaller := caller;
  2145. content := CreateDialog();
  2146. Init(content.bounds.GetWidth(), content.bounds.GetHeight(), FALSE);
  2147. SetContent(content);
  2148. SetTitle(Strings.NewString("New Object"));
  2149. manager := WMWindowManager.GetDefaultManager();
  2150. END New;
  2151. PROCEDURE Show*(VAR w, h: REAL): BOOLEAN;
  2152. VAR resultString: ARRAY 8 OF CHAR;
  2153. resW, resH: LONGREAL;
  2154. BEGIN
  2155. result := -1;
  2156. WMWindowManager.ExtAddWindow(SELF, 200, 100, {WMWindowManager.FlagFrame, WMWindowManager.FlagStayOnTop});
  2157. manager.SetFocus(SELF);
  2158. BEGIN {EXCLUSIVE}
  2159. AWAIT (result >= 0)
  2160. END;
  2161. manager.Remove(SELF);
  2162. IF result = 0 THEN
  2163. objectWidthField.GetAsString(resultString);
  2164. Strings.StrToFloat(resultString, resW); w := SHORT(resW);
  2165. objectHeightField.GetAsString(resultString);
  2166. Strings.StrToFloat(resultString, resH); h := SHORT(resH);
  2167. RETURN TRUE;
  2168. ELSE h := 0; w := 0;
  2169. RETURN FALSE;
  2170. END;
  2171. END Show;
  2172. PROCEDURE CreateDialog(): WMStandardComponents.Panel;
  2173. VAR label: WMStandardComponents.Label;
  2174. panel, buttonPanel, paramPanel, editorsPanel, labelPanel : WMStandardComponents.Panel;
  2175. cancel, ok : WMStandardComponents.Button;
  2176. BEGIN
  2177. NEW(panel); panel.bounds.SetExtents(300, 200); panel.fillColor.Set(09999FFFFH);
  2178. panel.takesFocus.Set(TRUE);
  2179. NEW(buttonPanel); buttonPanel.bounds.SetHeight(40); buttonPanel.alignment.Set(WMComponents.AlignBottom);
  2180. panel.AddContent(buttonPanel);
  2181. NEW(ok); ok.caption.SetAOC("OK"); ok.alignment.Set(WMComponents.AlignRight);
  2182. buttonPanel.AddContent(ok); ok.onClick.Add(Ok);
  2183. NEW(cancel); cancel.caption.SetAOC("Cancel"); cancel.alignment.Set(WMComponents.AlignRight);
  2184. buttonPanel.AddContent(cancel); cancel.onClick.Add(Cancel);
  2185. NEW(paramPanel); paramPanel.alignment.Set(WMComponents.AlignClient);
  2186. panel.AddContent(paramPanel);
  2187. NEW(editorsPanel); editorsPanel.bounds.SetWidth(100); editorsPanel.alignment.Set(WMComponents.AlignRight);
  2188. paramPanel.AddContent(editorsPanel);
  2189. NEW(labelPanel); labelPanel.alignment.Set(WMComponents.AlignClient);
  2190. paramPanel.AddContent(labelPanel);
  2191. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop); label.SetCaption(" Object Width [mm]:");
  2192. labelPanel.AddContent(label);
  2193. NEW(objectWidthField); objectWidthField.bounds.SetHeight(20); objectWidthField.alignment.Set(WMComponents.AlignTop);
  2194. objectWidthField.tv.showBorder.Set(TRUE); objectWidthField.multiLine.Set(FALSE); objectWidthField.fillColor.Set(0FFFFFFFFH);
  2195. objectWidthField.tv.textAlignV.Set(WMGraphics.AlignCenter);
  2196. editorsPanel.AddContent(objectWidthField);
  2197. NEW(label); label.bounds.SetHeight(20); label.alignment.Set(WMComponents.AlignTop); label.SetCaption(" Object Height [mm]:");
  2198. labelPanel.AddContent(label);
  2199. NEW(objectHeightField); objectHeightField.bounds.SetHeight(20); objectHeightField.alignment.Set(WMComponents.AlignTop);
  2200. objectHeightField.tv.showBorder.Set(TRUE); objectHeightField.multiLine.Set(FALSE); objectHeightField.fillColor.Set(0FFFFFFFFH);
  2201. objectHeghtField.tv.textAlignV.Set(WMGraphics.AlignCenter);
  2202. editorsPanel.AddContent(objectHeightField);
  2203. RETURN panel;
  2204. END CreateDialog;
  2205. PROCEDURE Ok(sender, data : ANY);
  2206. BEGIN {EXCLUSIVE}
  2207. result := 0;
  2208. theCaller.newObjOpen := FALSE;
  2209. END Ok;
  2210. PROCEDURE Cancel*(sender, data : ANY);
  2211. BEGIN {EXCLUSIVE}
  2212. result := 1;
  2213. theCaller.newObjOpen := FALSE;
  2214. END Cancel;
  2215. BEGIN
  2216. END NewObjectDialog;
  2217. *)
  2218. END DTPView.