home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer) / NeXT_Developer-3.3.iso / NextDeveloper / Examples / AppKit / Draw / GraphicView.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-09  |  9.9 KB  |  313 lines

  1. typedef enum { Normal, Resizing } DrawStatusType;
  2. typedef enum { LEFT = 1, RIGHT, BOTTOM, TOP, HORIZONTAL_CENTERS, VERTICAL_CENTERS, BASELINES } AlignmentType;
  3.  
  4. extern DrawStatusType DrawStatus;
  5. extern NXAtom DrawPboardType;
  6. extern BOOL InMsgPrint;
  7.  
  8. typedef enum { ByRect, ByGraphic, ByList } DrawSelectionType;
  9.  
  10. /* Update modes for links. */
  11.  
  12. #define UPDATE_NEVER 0
  13. #define UPDATE_IMMEDIATELY -1
  14. #define UPDATE_NORMALLY 1
  15.  
  16. @interface GraphicView : View
  17. {
  18.     List *glist;            /* the list of Graphics */
  19.     List *slist;            /* the list of selected Graphics. In 
  20.                            Draw with undo we are very careful
  21.                        to keep slist sorted, like glist */
  22.     Window *cacheWindow;        /* the off-screen cache */
  23.     struct {
  24. #ifdef __BIG_ENDIAN__
  25.     unsigned int groupInSlist:1;    /* whether a Group is in the slist */
  26.     unsigned int cacheing:1;    /* whether cacheing or drawing */
  27.     unsigned int suspendLinkUpdate:1; /* don't update links */
  28.     unsigned int grid:8;        /* grid size */
  29.     unsigned int showGrid:1;    /* whether grid is visible */
  30.     unsigned int locked:1;        /* some graphics are locked */
  31.     unsigned int gridDisabled:1;    /* whether grid is enabled */
  32.     unsigned int freeOriginalPaste:1;/* whether originalPaste needs free */
  33.     unsigned int serviceActsOnSelection:1;    /* whether service acts on selection */
  34. #else
  35.     unsigned int serviceActsOnSelection:1;    /* whether service acts on selection */
  36.     unsigned int freeOriginalPaste:1;/* whether originalPaste needs free */
  37.     unsigned int gridDisabled:1;    /* whether grid is enabled */
  38.     unsigned int locked:1;        /* some graphics are locked */
  39.     unsigned int showGrid:1;    /* whether grid is visible */
  40.     unsigned int grid:8;        /* grid size */
  41.     unsigned int suspendLinkUpdate:1; /* don't update links */
  42.     unsigned int cacheing:1;    /* whether cacheing or drawing */
  43.     unsigned int groupInSlist:1;    /* whether a Group is in the slist */
  44. #endif
  45. // These last 16 bits are NOT archived, so don't depend on them being permanent across a Save/Open
  46.     unsigned int selectAll:1;    /* select all was last select operation performed */
  47.     unsigned int dragCopyOk:1;    /* true if dragging with sourcMask == copy is ok */
  48.     unsigned int dragLinkOk:1;    /* true if dragging with sourcMask == link is ok */
  49.     unsigned int padding:13;
  50.     } gvFlags;
  51.     short *gupCoords;            /* points in the grid user path */
  52.     int gupLength;            /* number of points in gupCoords */
  53.     char *gupOps;            /* movetos and linetos in the gup */
  54.     short *gupBBox;            /* bounding box of the gup */
  55.     float gridGray;            /* grayness of the grid */
  56.     int consecutivePastes;        /* number of consecutive pastes */
  57.     int lastPastedChangeCount;        /* the change count of last paste */
  58.     int lastCopiedChangeCount;        /* the change count of last cut or copy */
  59.     int lastCutChangeCount;        /* the change count of last cut */
  60.     View *editView;            /* flipped subview for editing */
  61.     Graphic *originalPaste;        /* the first pasted graphic */
  62.     NXDataLinkManager *linkManager;    /* manager of data links */
  63.     NXRect *invalidRect;        /* invalid area which must be cleaned up */
  64.     NXRect *dragRect;            /* last rectangle we dragged out to select */
  65.     Storage *linkTrackingRects;        /* the rects of the links we are tracking */
  66. }
  67.  
  68. /* Class initialization */
  69.  
  70. + initialize;
  71.  
  72. /* Alignment methods */
  73.  
  74. + (SEL)actionFromAlignType:(AlignmentType)alignType;
  75.  
  76. /* Creation methods */
  77.  
  78. - initFrame:(const NXRect *)frameRect;
  79.  
  80. /* Free method */
  81.  
  82. - free;
  83.  
  84. /* Public methods */
  85.  
  86. - (BOOL)isEmpty;
  87. - (BOOL)hasEmptySelection;
  88. - dirty;
  89. - getSelection;
  90. - setGroupInSlist:(BOOL)setting;
  91. - resetGroupInSlist;
  92. - resetLockedFlag;
  93. - getBBox:(NXRect *)bbox of:(List *)list;
  94. - getBBox:(NXRect *)bbox of:(List *)list extended:(BOOL)flag;
  95.  
  96. - redrawGraphics:graphicsList afterChangeAgent:changeAgent performs:(SEL)aSelector;
  97. - graphicsPerform:(SEL)aSelector;
  98. - graphicsPerform:(SEL)aSelector with:(void *)argument;
  99.  
  100. - cache:(const NXRect *)rect;
  101. - cache:(const NXRect *)rect andUpdateLinks:(BOOL)updateLinks;
  102. - recacheSelection;
  103. - createCacheWindow:(Window *)cacheWindow;
  104. - selectionCache;
  105. - (int)cacheSelection;
  106. - (int)cacheList:(List *)list into:(Window *)cacheWindow withTransparentBackground:(BOOL)flag;
  107. - (int)cacheList:(List *)list into:(Window *)cacheWindow;
  108. - cacheGraphic:(Graphic *)graphic;
  109.  
  110. - removeGraphic:(Graphic *)graphic;
  111. - insertGraphic:(Graphic *)graphic;
  112. - (Graphic *)selectedGraphic;
  113. - (List *)selectedGraphics;
  114. - (List *)graphics;
  115.  
  116. - (int)gridSpacing;
  117. - (BOOL)gridIsVisible;
  118. - (BOOL)gridIsEnabled;
  119. - (float)gridGray;
  120. - setGridSpacing:(int)gridSpacing;
  121. - setGridEnabled:(BOOL)flag;
  122. - setGridVisible:(BOOL)flag;
  123. - setGridGray:(float)gray;
  124. - setGridSpacing:(int)gridSpacing andGray:(float)gray;
  125. - grid:(NXPoint *)point;
  126.  
  127. - placeGraphic:(Graphic *)graphic at:(const NXPoint *)location;
  128.  
  129. /* Methods overridden from superclass */
  130.  
  131. - sizeTo:(NXCoord)width :(NXCoord)height;
  132. - mouseDown:(NXEvent *)event;
  133. - drawSelf:(const NXRect *)rects :(int)rectCount;
  134. - keyDown:(NXEvent *)event;
  135.  
  136. /* Getting/Setting the current Graphic */
  137.  
  138. - (Graphic *)currentGraphic;
  139. - setCurrentGraphic:sender;
  140.  
  141. /* Writing Draw Forms */
  142.  
  143. - (BOOL)hasFormEntries;
  144. - writeFormEntriesToFile:(const char *)filename;
  145.  
  146. /* Target/Action methods */
  147.  
  148. - delete:sender;
  149. - selectAll:sender;
  150. - deselectAll:sender;
  151. - lock:sender;
  152. - unlock:sender;
  153. - bringToFront:sender;
  154. - sendToBack:sender;
  155. - group:sender;
  156. - ungroup:sender;
  157. - align:sender;
  158. - changeAspectRatio:sender;
  159. - alignToGrid:sender;
  160. - sizeToGrid:sender;
  161. - enableGrid:sender;
  162. - hideGrid:sender;
  163. - addCoverSheetEntry:sender;
  164. - addLocalizableCoverSheetEntry:sender;
  165.  
  166. /* Target/Action messages sent from Controls to set various parameters */
  167.  
  168. - takeGridValueFrom:sender;
  169. - takeGridGrayFrom:sender;
  170. - takeGrayValueFrom:sender;
  171. - takeLineWidthFrom:sender;
  172. - takeLineJoinFrom:sender;
  173. - takeLineCapFrom:sender;
  174. - takeLineArrowFrom:sender;
  175. - takeFillValueFrom:sender;
  176. - takeFrameValueFrom:sender;
  177. - takeLineColorFrom:sender;
  178. - takeFillColorFrom:sender;
  179. - takeFormEntryStatusFrom:sender;
  180.  
  181. - changeFont:sender;
  182.  
  183. /* Accepting becoming the First Responder */
  184.  
  185. - (BOOL)acceptsFirstResponder;
  186.  
  187. /* Printing-related methods */
  188.  
  189. - beginSetup;
  190.  
  191. /* Archiving methods */
  192.  
  193. - awake;
  194. - write:(NXTypedStream *)stream;
  195. - read:(NXTypedStream *)stream;
  196.  
  197. /* Validates whether a menu command makes sense now */
  198.  
  199. - (BOOL)validateCommand:(MenuCell *)menuCell;
  200.  
  201. /* Useful scrolling methods */
  202.  
  203. - scrollGraphicToVisible:(Graphic *)graphic;
  204. - scrollPointToVisible:(const NXPoint *)point;
  205. - scrollSelectionToVisible;
  206.  
  207. @end
  208.  
  209. /* Pasteboard */
  210.  
  211. typedef enum { LinkOnly = -1, DontLink = 0, Link = 1 } LinkType;
  212.  
  213. @interface GraphicView(Pasteboard)
  214.  
  215. #define NUM_TYPES_DRAW_EXPORTS 3
  216.  
  217. extern NXAtom *TypesDrawExports(void);
  218. extern NXAtom DrawPasteType(const NXAtom *types);
  219. extern NXAtom ForeignPasteType(const NXAtom *types);
  220. extern NXAtom TextPasteType(const NXAtom *types);
  221. extern BOOL IncludesType(const NXAtom *types, NXAtom type);
  222. extern NXAtom MatchTypes(const NXAtom *typesToMatch, const NXAtom *orderedTypes);
  223.  
  224. + convert:(NXTypedStream *)ts to:(const char *)type using:(SEL)writer toPasteboard:(Pasteboard *)pb;
  225. + pasteboard:(Pasteboard *)sender provideData:(const char *)type;
  226.  
  227. - writePSToStream:(NXStream *)stream;
  228. - writePSToStream:(NXStream *)stream usingList:(List *)aList;
  229. - writeTIFFToStream:(NXStream *)stream;
  230. - writeTIFFToStream:(NXStream *)stream usingList:(List *)aList;
  231.  
  232. - copySelectionAsPSToStream:(NXStream *)stream;
  233. - copySelectionAsTIFFToStream:(NXStream *)stream;
  234. - copySelectionToStream:(NXStream *)stream;
  235.  
  236. - copyToPasteboard:(Pasteboard *)pboard types:(NXAtom *)types;
  237. - copyToPasteboard:(Pasteboard *)pboard;
  238. - (BOOL)pasteForeignDataFromPasteboard:(Pasteboard *)pboard andLink:(LinkType)doLink at:(const NXPoint *)point;
  239. - pasteFromPasteboard:(Pasteboard *)pboard andLink:(LinkType)doLink at:(const NXPoint *)point;
  240. - paste:sender andLink:(LinkType)doLink;
  241. - cut:sender;
  242. - copy:sender;
  243. - paste:sender;
  244. - pasteAndLink:sender;
  245.  
  246. @end
  247.  
  248. /* Data link methods */
  249.  
  250. @interface GraphicView(Links)
  251.  
  252. - (NXSelection *)currentSelection;
  253. - (Graphic *)findGraphicInSelection:(NXSelection *)selection;
  254. - (List *)findGraphicsInSelection:(NXSelection *)selection;
  255.  
  256. - writeLinkToPasteboard:(Pasteboard *)pboard types:(const NXAtom *)typesList;
  257. - (BOOL)addLink:(NXDataLink *)link toGraphic:(Graphic *)graphic at:(const NXPoint *)p update:(int)update;
  258.  
  259. - pasteFromPasteboard:(Pasteboard *)pboard at:(NXSelection *)selection;
  260. - importFile:(const char *)filename at:(NXSelection *)selection;
  261. - pasteboard:(Pasteboard *)sender provideData:(const char *)type;
  262. - copyToPasteboard:(Pasteboard *)pboard at:(NXSelection *)selection cheapCopyAllowed:(BOOL)cheapCopyAllowed;
  263.  
  264. - updateLinksPanel;
  265. - (NXDataLinkManager *)linkManager;
  266. - setLinkManager:(NXDataLinkManager *)linkManager;
  267. - showSelection:(NXSelection *)selection;
  268. - breakLinkAndRedrawOutlines:(NXDataLink *)aLink;
  269. - updateTrackedLinks:(const NXRect *)rect;
  270. - startTrackingLink:(NXDataLink *)link;
  271. - stopTrackingLink:(NXDataLink *)link;
  272.  
  273. @end
  274.  
  275. /* Dragging */
  276.  
  277. @interface GraphicView(Drag)
  278.  
  279. - registerForDragging;
  280. - (NXDragOperation)draggingEntered:(id <NXDraggingInfo>)sender;
  281. - (NXDragOperation)draggingUpdated:(id <NXDraggingInfo>)sender;
  282. - (BOOL)performDragOperation:(id <NXDraggingInfo>)sender;
  283.  
  284. @end
  285.  
  286. /* Services Menu */
  287.  
  288. @interface GraphicView(Services)
  289.  
  290. - validRequestorForSendType:(NXAtom)sendType andReturnType:(NXAtom)returnType;
  291. - (BOOL)writeSelectionToPasteboard:(Pasteboard *)pboard types:(NXAtom *)types;
  292. - readSelectionFromPasteboard:(Pasteboard *)pboard;
  293.  
  294. @end
  295.  
  296. /*
  297.  * Since we can't be sure that we have an InspectorPanel, we use the
  298.  * objective-C respondsTo: mechanism to see if we can send the message
  299.  * initializeGraphic: to [NXApp inspectorPanel].  This dummy interface
  300.  * declaration declares those messages (so that even if they don't exists,
  301.  * we can at least use them to check with respondsTo:).  We don't want
  302.  * to import DrawApp.h or InspectorPanel.h since we might accidentally
  303.  * introduce a dependency on them which wouldn't be caught because we
  304.  * imported both of their interfaces.
  305.  */
  306.  
  307. @interface PossibleInspectorPanel : Object
  308.  
  309. - inspectorPanel;
  310. - initializeGraphic:(Graphic *)graphic;
  311.  
  312. @end
  313.