libcm is a C development framework with an emphasis on audio signal processing applications.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

cmGrPlot.h 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. //| Copyright: (C) 2009-2020 Kevin Larke <contact AT larke DOT org>
  2. //| License: GNU GPL version 3.0 or above. See the accompanying LICENSE file.
  3. #ifndef cmGrTimeLine_h
  4. #define cmGrTimeLine_h
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. //( { file_desc:"Device indenpendent, multi-axis, interactive, plotting system based on cmGrPage, cmGrAxis and cmGr." kw:[plot]}
  9. enum
  10. {
  11. kOkGrPlRC,
  12. kObjNotFoundGrPlRC,
  13. kGrFailGrPlRC,
  14. kRsrcFailGrPlRC
  15. };
  16. // Graphic object type id's
  17. typedef enum
  18. {
  19. kInvalidPlId,
  20. kRectGrPlId,
  21. kHLineGrPlId,
  22. kVLineGrPlId,
  23. kLineGrPlId,
  24. kEllipseGrPlId,
  25. kDiamondGrPlId,
  26. kUTriGrPlId,
  27. kDTriGrPlId,
  28. kLTriGrPlId,
  29. kRTriGrPlId,
  30. kStarGrPlId,
  31. kCrossGrPlId,
  32. kPlusGrPlId,
  33. } cmGrPlObjTypeId_t;
  34. // Object cfg. flags
  35. enum
  36. {
  37. kSymbolGrPlFl = 0x0001, // This object is a symbol
  38. kNoSelectGrPlFl = 0x0002, // The clicking with the mouse will not select this object
  39. kNoDragGrPlFl = 0x0004, // Dragging with the mouse will not move this object
  40. kNoFocusGrPlFl = 0x0008, // This object cannot receive focus.
  41. kNoDrawGrPlFl = 0x0010, // Do not draw this object (is is invisible and disabled)
  42. kNoFillGrPlFl = 0x0020, // Do not draw the fill area of this object
  43. kNoBorderGrPlFl = 0x0040, // Do not draw the border of this object
  44. kNoLabelGrPlFl = 0x0080, // Do not draw the label for this object
  45. kBorderSelGrPlFl= 0x0100, // This object is selected by clicking near it's border
  46. };
  47. // object state flags
  48. enum
  49. {
  50. kVisibleGrPlFl = 0x0001, //
  51. kEnabledGrPlFl = 0x0002, // Enabled obj's must be visible.
  52. kSelectGrPlFl = 0x0004, // This object is selected - multiple objects may be selected
  53. kFocusGrPlFl = 0x0008 // Focused obj's are also selected - only one object can have the focus.
  54. };
  55. typedef enum
  56. {
  57. kFocusPlGrId,
  58. kSelectPlGrId,
  59. kEnablePlGrId,
  60. kDisablePlGrId,
  61. kMaxPlGrId
  62. } cmGrPlStateId_t;
  63. enum // TODO: change these into cmGrPlotH_t user settable variables
  64. {
  65. kDefaultSymW = 9,
  66. kDefaultSymH = 9
  67. };
  68. typedef cmHandle_t cmGrPlH_t;
  69. typedef cmHandle_t cmGrPlObjH_t;
  70. typedef cmRC_t cmGrPlRC_t;
  71. // Plot object callback id's
  72. typedef enum
  73. {
  74. kCreatedCbSelGrPlId,
  75. kDestroyedCbSelGrPlId,
  76. kPreEventCbSelGrPlId,
  77. kEventCbSelGrPlId,
  78. kStateChangeGrPlId, // See Note with cmGrPlotCbFunc_t below.
  79. } cmGrPlCbSelId_t;
  80. typedef struct
  81. {
  82. cmCtx_t* ctx; // Global program context.
  83. void* cbArg; // User pointer set in cmGrPlotObjSetCb().
  84. cmGrPlCbSelId_t selId; // Callback selector id. See cmGrPlCbSeId_t.
  85. cmGrPlObjH_t objH; // The plot object handle.
  86. unsigned eventFlags; // Event flags from canvas callback (See cmGrEvent() flags)
  87. cmGrKeyCodeId_t eventKey; // Event keys (See the cmGrEvent() keys)
  88. int eventX; // Mouse X,Y location when event was generated (Same as cmGrEvent())
  89. int eventY; //
  90. unsigned deltaFlags; // Event which caused an object state change (See kXXXGrPlFl flags)
  91. } cmGrPlotCbArg_t;
  92. // Return 'false' from kPreEventCbGrPlSelId events to prevent default processing.
  93. // Note:
  94. // When this callback is made with the 'kStateChangeGrPlId' the state of
  95. // the object has not yet been changed. This may be confusing because if
  96. // the state of the object is queried inside the callback it will have the
  97. // pre-change state - but this state will be automatically toggled when the
  98. // callback returns 'true'. Examine the arg->deltaFlags to determine the
  99. // state attribute which is changing.
  100. typedef bool (*cmGrPlotCbFunc_t)( cmGrPlotCbArg_t* arg );
  101. extern cmGrPlH_t cmGrPlNullHandle;
  102. extern cmGrPlObjH_t cmGrPlObjNullHandle;
  103. // Notes:
  104. // 1) Set kSymbolGrPlFl to create a symbol.
  105. // 2) If kSymbolGrPlFl is set then w and h are taken as the physical size
  106. // of the symbol. Set w and h to 0 to use the default symbols size
  107. // kDefaultSymW, kDefaultSymH
  108. cmGrPlRC_t cmGrPlotObjCreate(
  109. cmGrPlH_t plH, // Owner Plot Object Manager. See cmGrPlotCreate().
  110. cmGrH_t grH, // The canvas this object will be drawn on.
  111. cmGrPlObjH_t* ohp, // Pointer to the new objects handle (optional)
  112. unsigned id, // User defined identifier.
  113. cmGrPlObjH_t parentObjH, // Containing parent object.
  114. cmGrPlObjH_t xAnchorObjH, // x is taken as an offset from this obj's x coord (optional).
  115. cmGrPlObjH_t yAnchorObjH, // y is taken as an offset from this obj's y coord (optional).
  116. cmGrPlObjTypeId_t typeId, // See cmGrPlObjTypeId_t
  117. unsigned cfgFlags, //
  118. cmReal_t x, // Coord's within the parent's world coord system.
  119. cmReal_t y, //
  120. cmReal_t w, //
  121. cmReal_t h, //
  122. const cmChar_t* label, // Object text string (optional)
  123. const cmGrVExt_t* wext ); // This objects internal world extents (optional)
  124. cmGrPlRC_t cmGrPlotObjDestroy( cmGrPlObjH_t* ohp );
  125. bool cmGrPlotObjIsValid( cmGrPlObjH_t oh );
  126. cmGrPlH_t cmGrPlotObjMgrHandle( cmGrPlObjH_t oh );
  127. cmGrObjH_t cmGrPlotObjHandle( cmGrPlObjH_t oh );
  128. cmGrPlObjH_t cmGrPlotObjParent( cmGrPlObjH_t oh );
  129. cmGrPlObjH_t cmGrPlotObjXAnchor( cmGrPlObjH_t oh );
  130. cmGrPlObjH_t cmGrPlotObjYAnchor( cmGrPlObjH_t oh );
  131. void cmGrPlotObjSetId( cmGrPlObjH_t oh, unsigned id );
  132. unsigned cmGrPlotObjId( cmGrPlObjH_t oh );
  133. void cmGrPlotObjSetUserPtr( cmGrPlObjH_t oh, void* userPtr );
  134. void cmGrPlotObjAllocUser( cmGrPlObjH_t oh, const void* data, unsigned byteCnt );
  135. void* cmGrPlotObjUserPtr( cmGrPlObjH_t oh );
  136. void cmGrPlotObjSetLabel( cmGrPlObjH_t oh, const cmChar_t* label );
  137. const cmChar_t* cmGrPlotObjLabel( cmGrPlObjH_t oh );
  138. // Set flags to kXXXJsGrFl values. See cmGrDrawTextJustify for their meaning.
  139. // 'color' is optional
  140. void cmGrPlotObjSetLabelAttr( cmGrPlObjH_t oh, unsigned flags, int angle, const cmGrColor_t color );
  141. unsigned cmGrPlotObjLabelFlags( cmGrPlObjH_t oh );
  142. int cmGrPlotObjLabelAngle( cmGrPlObjH_t oh );
  143. cmGrColor_t cmGrPlotObjLabelColor( cmGrPlObjH_t oh );
  144. void cmGrPlotObjSetStateFlags( cmGrPlObjH_t oh, unsigned flags );
  145. unsigned cmGrPlotObjStateFlags( cmGrPlObjH_t oh );
  146. void cmGrPlotObjSetCfgFlags( cmGrPlObjH_t oh, unsigned flags );
  147. void cmGrPlotObjClrCfgFlags( cmGrPlObjH_t oh, unsigned flags );
  148. void cmGrPlotObjTogCfgFlags( cmGrPlObjH_t oh, unsigned flags );
  149. unsigned cmGrPlotObjCfgFlags( cmGrPlObjH_t oh );
  150. cmGrPlRC_t cmGrPlotObjSetPhysExt( cmGrPlObjH_t oh, int loffs, int toffs, int roffs, int boffs );
  151. void cmGrPlotObjPhysExt( cmGrPlObjH_t oh, int* loffs, int* toffs, int* roffs, int* boffs );
  152. void cmGrPlotObjVExt( cmGrPlObjH_t oh, cmGrVExt_t* vext );
  153. void cmGrPlotObjSetFontFamily( cmGrPlObjH_t h, unsigned id );
  154. unsigned cmGrPlotObjFontFamily( cmGrPlObjH_t h );
  155. void cmGrPlotObjSetFontSize( cmGrPlObjH_t h, unsigned size );
  156. unsigned cmGrPlotObjFontSize( cmGrPlObjH_t h );
  157. void cmGrPlotObjSetFontStyle( cmGrPlObjH_t h, unsigned flags );
  158. unsigned cmGrPlotObjFontStyle( cmGrPlObjH_t h );
  159. void cmGrPlotObjSetFont( cmGrPlObjH_t h, unsigned id, unsigned size, unsigned style );
  160. void cmGrPlotObjSetLineColor( cmGrPlObjH_t h, cmGrPlStateId_t id, const cmGrColor_t c );
  161. cmGrColor_t cmGrPlotObjLineColor( cmGrPlObjH_t h, cmGrPlStateId_t id );
  162. cmGrColor_t cmGrPlotObjCurLineColor( cmGrPlObjH_t h );
  163. void cmGrPlotObjSetFillColor( cmGrPlObjH_t h, cmGrPlStateId_t id, const cmGrColor_t c );
  164. cmGrColor_t cmGrPlotObjFillColor( cmGrPlObjH_t h, cmGrPlStateId_t id );
  165. cmGrColor_t cmGrPlotObjCurFillColor( cmGrPlObjH_t h );
  166. void cmGrPlotObjSetCb( cmGrPlObjH_t h, cmGrPlotCbFunc_t func, void* arg );
  167. cmGrPlotCbFunc_t cmGrPlotObjCbFunc( cmGrPlObjH_t h );
  168. void* cmGrPlotObjCbArg( cmGrPlObjH_t h );
  169. // Draw aH above bH in the z-order.
  170. void cmGrPlotObjDrawAbove( cmGrPlObjH_t bH, cmGrPlObjH_t aH );
  171. //----------------------------------------------------------------------------
  172. // Plot Object Manager Functions
  173. //----------------------------------------------------------------------------
  174. cmGrPlRC_t cmGrPlotCreate( cmCtx_t* ctx, cmGrPlH_t* hp );
  175. cmGrPlRC_t cmGrPlotDestroy( cmGrPlH_t* hp );
  176. bool cmGrPlotIsValid( cmGrPlH_t h );
  177. cmGrPlRC_t cmGrPlotClear( cmGrPlH_t h ); // destroy all objects
  178. cmErr_t* cmGrPlotErr( cmGrPlH_t h );
  179. cmRpt_t* cmGrPlotRpt( cmGrPlH_t h );
  180. // Return the count of plot objects.
  181. unsigned cmGrPlotObjectCount( cmGrPlH_t h );
  182. // Return the handle of the ith object (0<=index<cmGrPlotObjectCount())
  183. cmGrPlObjH_t cmGrPlotObjectIndexToHandle( cmGrPlH_t h, unsigned index );
  184. // Given a plot object id return the associated object handle.
  185. cmGrPlObjH_t cmGrPlotObjectIdToHandle( cmGrPlH_t h, unsigned id );
  186. // Callback func(arg,objH) for every object.
  187. typedef void (*cmGrPlotObjCbFunc_t)( void* arg, cmGrPlObjH_t oh );
  188. void cmGrPlotObjCb( cmGrPlH_t h, cmGrPlotObjCbFunc_t func, void* arg );
  189. // Pass a keyboard event to the plot system.
  190. void cmGrPlotKeyEvent( cmGrPlH_t h, cmGrH_t grH, unsigned eventFlags, cmGrKeyCodeId_t keycode );
  191. // Set the default object callback and arg.
  192. void cmGrPlotSetCb( cmGrPlH_t h, cmGrPlotCbFunc_t func, void* arg );
  193. //)
  194. #ifdef __cplusplus
  195. }
  196. #endif
  197. #endif
  198. /*
  199. Plot Object Attributes:
  200. Location: x,y
  201. Size: w,h
  202. Shape:
  203. rectangle:
  204. ellipse:
  205. line:
  206. hline:
  207. vline:
  208. symbol:
  209. Parent: Defines the world coordinate system in which this object is drawn.
  210. Children are always fully contained by their parent and may not be dragged
  211. outside of their parent.
  212. Label:
  213. Border Color: One per state (enabled,selected,focused)
  214. Fill Color: One per state (enabled,selected,focused)
  215. State:
  216. Visible: Draw this object.
  217. Enabled: Disabled objects cannot be selected,focused, or dragged.
  218. Selected: Multiple objects may be selected.
  219. Focused: Only one object may be focused.
  220. Physical Offsets: Physical offsets which expand the size of the object.
  221. Font Family:
  222. Font Style:
  223. Font Size:
  224. Cfg Flags:
  225. No Drag: Do not allow dragging.
  226. No Select: Do not allow selection.
  227. No Focus: Do not allow focusing.
  228. No Draw: Do not draw this object (automatically disabled the object)
  229. No Fill: Do not draw fill color.
  230. No Border: Do not draw border.
  231. No Label: Do not draw label.
  232. */