DTPView.Mod 92 KB

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