home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / LFC-SW2.LHA / StormWizard / Include / c / libraries / wizardview.h < prev   
Encoding:
C/C++ Source or Header  |  1996-08-26  |  19.2 KB  |  459 lines

  1. #ifndef    WIZARD_WIZARDVIEW_H
  2. #define    WIZARD_WIZARDVIEW_H
  3.  
  4. /********************************************************************
  5. **                                                                 **
  6. ** Diese Include-Datei ist für den Programmierer der spzielle      **
  7. ** Fähigkeiten für seine Oberflächen benötigt.                     **
  8. **                                                                 **
  9. **    © 1996 HAAGE & PARTNER Computer GmbH                            **
  10. **    Autor: Thomas Mittelsdorf                                       **
  11. **                                                                 **
  12. ** All Rights Reserved                                             **
  13. **                                                                 **
  14. ********************************************************************/
  15.  
  16. struct WizardViewInfo
  17. {
  18.     struct MinList        *List;
  19.     struct TextFont    *DefFont;
  20.     struct Hook            *DefHook;
  21.     struct IBox             Dimension;
  22.  
  23.     struct WizardVImage *TreeImage;
  24.  
  25.     UWORD        TreeImageWidth;
  26.     UWORD        Columns;
  27.  
  28.     UWORD        MinItemHeight;
  29.     UWORD        ItemBorder;
  30.     UWORD        ItemSpace;            // 1, wenn 3D-Selektierung
  31.  
  32.     LONG        ListTop;
  33.     LONG        ListLeft;
  34.     ULONG        ListWidth;
  35.     ULONG        ListHeight;
  36.  
  37.     UWORD        Flags;
  38.     UWORD        HookFlags;
  39.  
  40.     ULONG        BGPen;
  41.  
  42.     ULONG        Seconds;
  43.     ULONG        Micros;
  44.  
  45.     LONG        Selected;
  46.     LONG        OldSelected;
  47.  
  48.     UWORD        Width[32];            // für Tabellen-Modus
  49.  
  50. };
  51.  
  52. // Hook-Methoden, die öffentlich sind *******************************
  53.  
  54. /********************************************************************
  55. **                                                                 **
  56. ** Bei einer unbekannten Methode, ist diese an das Object zurück   **
  57. ** zu geben. Dabei muß der Returnwert weitergegeben werden.        **
  58. ** In Zukunft werden neue Methoden definiert werden, welche an den **
  59. ** Standard-Hook weiter zugeben sind. Sie müssen also in jedem     **
  60. ** Fall den Standard-Hook berücksichtigen. Methoden die Ihr priv.  **
  61. ** Hook vollständig bearbeitet müssen nicht an den Standard-Hook   **
  62. ** weitergeleitet werden. Es empfiehlt sich immer nur einzelne     **
  63. ** Bereiche zu erweitern oder zu ersetzen, damit das Verhalten des **
  64. ** Dispatcher nicht allzu sehr verändert wird.                     **
  65. **                                                                 **
  66. ********************************************************************/
  67.  
  68. #define    WVIEWM_DUMMY                0x100100
  69. #define    WVIEWM_INIT                    WVIEWM_DUMMY+0
  70. #define    WVIEWM_GET                    WVIEWM_DUMMY+1
  71. #define    WVIEWM_SET                    WVIEWM_DUMMY+2
  72. #define    WVIEWM_INITLIST            WVIEWM_DUMMY+3
  73. #define    WVIEWM_INITNODE            WVIEWM_DUMMY+4
  74. #define    WVIEWM_RENDERNODE            WVIEWM_DUMMY+5
  75. #define    WVIEWM_GOACTIVE            WVIEWM_DUMMY+6
  76. #define    WVIEWM_GOINACTIVE            WVIEWM_DUMMY+7
  77. #define    WVIEWM_HANDLEINPUT        WVIEWM_DUMMY+8
  78. #define    WVIEWM_MOUSEITEM            WVIEWM_DUMMY+9
  79. #define    WVIEWM_POINTVISIBLE        WVIEWM_DUMMY+10
  80. #define    WVIEWM_INSTALLCLIP        WVIEWM_DUMMY+11
  81. #define    WVIEWM_UNINSTALLCLIP        WVIEWM_DUMMY+12
  82. #define    WVIEWM_RENDERRANGE        WVIEWM_DUMMY+13
  83. #define    WVIEWM_GETNODE                WVIEWM_DUMMY+14
  84. #define    WVIEWM_MAKENODEVISIBLE    WVIEWM_DUMMY+15
  85. #define    WVIEWM_UPDATE                WVIEWM_DUMMY+16
  86.  
  87.  
  88. /********************************************************************
  89. **                                                                 **
  90. ** WVIEWM_INIT:                                                    **
  91. **                                                                 **
  92. ** Returnwert soll immer TRUE sein.                                **
  93. **                                                                 **
  94. ** Wenn der Hook diese Methode nicht behandelt, dann kann er Sie   **
  95. ** ignorieren. In AttrList stehen die Tags, die bei OM_NEW über-   **
  96. ** geben wurden. Dieses Funktion dient zum Vorinitialisieren der   **
  97. ** ViewInfo-Struktur.                                              **
  98. **                                                                 **
  99. ********************************************************************/
  100.  
  101. struct WizardViewInit
  102. {
  103.     ULONG                             MethodID;
  104.     struct WizardViewInfo    *wvpi_ViewInfo;
  105.     struct TagItem                *wvpi_AttrList;
  106.     APTR                             wvpi_InstData;
  107. };
  108.  
  109.  
  110. /********************************************************************
  111. **                                                                 **
  112. ** WVIEWM_INITLIST:                                                **
  113. **                                                                 **
  114. ** Returnwert ist undefiniert, behandelt der Hook diese Methode,   **
  115. ** dann muß er nicht an das Object weitergegeben werden !          **
  116. **                                                                 **
  117. ** Diese Methode wird von der Standard Set-Methode ausgelösst und  **
  118. ** dient dem Berechnen der Dimension der gesamten Liste.           **
  119. **                                                                 **
  120. ** Die Listaddresse steht dabei in ViewInfo->List !                **
  121. ** Dabei muß in alle Nodes Width und Height eingetragen werden.    **
  122. ** Die ViewInfo-Struktur muß ebenfalls mit ListWidth und List-     **
  123. ** Height korrekt initialisiert werden.                            **
  124. ** Der RastPort ist temporär und darf nur für Berechnungen wie     **
  125. ** TextLength() oder ähnliches benutzt werden,er wurde mit         **
  126. ** InitRastPort() vorinitialisiert.                                **
  127. **                                                                 **
  128. ** Setzen Sie bitte ViewInfo->Nodes auf die Anzahl der Nodes.      **
  129. **                                                                 **
  130. ********************************************************************/
  131.  
  132. struct WizardViewInitList
  133. {
  134.     ULONG                             MethodID;
  135.     struct WizardViewInfo    *wvpil_ViewInfo;
  136.     struct GadgetInfo         *wvpil_GInfo;
  137.     struct RastPort            *wvpil_RPort;    // speziell für Berechnungen
  138. };
  139.  
  140. /********************************************************************
  141. **                                                                 **
  142. ** WVIEWM_INITNODE:                                                **
  143. **                                                                 **
  144. ** Der ReturnWert sollte TRUE, sein wenn sich an den Spalten-      **
  145. ** breiten etwas geändert hat. Möchte der Hook den Tabellenmodus   **
  146. ** nicht unterstützen, kann er generell FALSE liefern.             **
  147. ** Ein TRUE veranlasst das Object das Display zu erneuern.         **
  148. **                                                                 **
  149. ** Dabei muß in die Node Width und Height eingetragen werden.      **
  150. ** Die ViewInfo-Struktur darf NICHT verändert werden.              **
  151. ** Der RastPort ist temporär und darf nur für Berechnungen wie     **
  152. ** TextLength() oder ähnliches benutzt werden.                     **
  153. **                                                                 **
  154. ********************************************************************/
  155.  
  156. struct WizardViewInitNode
  157. {
  158.     ULONG                             MethodID;
  159.     struct WizardViewInfo    *wvpin_ViewInfo;
  160.     struct GadgetInfo         *wvpin_GInfo;
  161.     struct RastPort            *wvpin_RPort;    // speziell für Berechnungen
  162.     struct ExtWizardNode        *wvpin_Node;
  163.     ULONG                            *wvpin_Number; // Nummer der Node oder -1
  164. };
  165.  
  166. /********************************************************************
  167. **                                                                 **
  168. ** WVIEWM_RENDERNODE:                                              **
  169. **                                                                 **
  170. ** Returnwert ist undefiniert, behandelt der Hook diese Methode,   **
  171. ** dann muß er nicht an das Object zurückgegeben werden !          **
  172. **                                                                 **
  173. ** Dabei muß der Hook die Darstellung dieser einen Node über-      **
  174. ** nehmen. Die ViewInfo-Struktur darf nur gelesen werden !         **
  175. ** Der RastPort ist mit einer gültigen Clipping-Region versehen    **
  176. ** MinX und MaxX sollen ihnen helfen Elemente bereits ein wenig    **
  177. ** vorzuclippen, so das das Zeichnen selbst sehr schnell geht.     **
  178. **                                                                 **
  179. ********************************************************************/
  180.  
  181. struct WizardViewRenderNode
  182. {
  183.     ULONG                             MethodID;
  184.     struct WizardViewInfo    *wvprn_ViewInfo;
  185.     struct GadgetInfo         *wvprn_GInfo;
  186.     struct RastPort            *wvprn_RPort;
  187.     struct ExtWizardNode        *wvprn_Node;
  188.     ULONG                             wvprn_Number;
  189.     WORD                             wvprn_LeftEdge;
  190.     WORD                             wvprn_TopEdge;
  191.     WORD                             wvprn_MinX; // ClipGrenzen
  192.     WORD                             wvprn_MaxX; // ClipGrenzen
  193. };
  194.  
  195. /********************************************************************
  196. **                                                                 **
  197. ** WVIEWM_MOUSEITEM:                                               **
  198. **                                                                 **
  199. ** Diese Methode darf vom Hook an das Object weitergegeben werden, **
  200. ** um die Node unter der Mouse in Erfahrung zu bringen !           **
  201. **                                                                 **
  202. ** Der Returnwert ist TRUE, wenn eine Node ermittelt werden        **
  203. ** konnte, ansonsten FALSE !                                       **
  204. **                                                                 **
  205. ********************************************************************/
  206.  
  207. struct WizardViewMouseItem
  208. {
  209.     ULONG                             MethodID;
  210.     struct WizardViewInfo    *wvpmi_ViewInfo;
  211.     struct
  212.     {
  213.         WORD    X;
  214.         WORD    Y;
  215.     }                                 wvpmi_Mouse;
  216.     struct WizardNode          **wvpmi_Node;
  217.     WORD                            *wvpmi_NodeMouseX;
  218.     WORD                            *wvpmi_NodeMouseY;
  219.     ULONG                            *wvpmi_NodeNumber;
  220.     UWORD                            *wvpmi_NodeVisibleHeight;
  221. };
  222.  
  223. /********************************************************************
  224. **                                                                 **
  225. ** WVIEWM_POINTVISIBLE:                                            **
  226. **                                                                 **
  227. ** Diese Methode darf vom Hook an das Object weitergegeben werden, **
  228. ** um zu erfahren, ob die Mouse innerhalb des Objektes ist, dabei  **
  229. ** wird die umgebenden Clippingregion berücksichtigt (Fenster-     **
  230. ** ränder etc.).                                                   **
  231. **                                                                 **
  232. ** Der Returnwert ist TRUE, wenn er sichtbar ist,alos zum Object   **
  233. ** gehört. Die Angaben müssen absolut sein !!!                     **
  234. **                                                                 **
  235. ********************************************************************/
  236.  
  237. struct WizardViewPointVisible
  238. {
  239.     ULONG                             MethodID;
  240.     struct
  241.     {
  242.         WORD    X;
  243.         WORD    Y;
  244.     }                                 wvppv_Mouse;
  245. };
  246.  
  247. /********************************************************************
  248. **                                                                 **
  249. ** WVIEWM_GOACTIVE:                                                **
  250. ** WVIEWM_HANDLEINPUT:                                             **
  251. **                                                                 **
  252. ** Der Returnwert ist identisch mit den entsprechenden Methoden    **
  253. ** des BOOPSI-Systems.                                             **
  254. **                                                                 **
  255. ** Diese Methoden müssen vom Hook behandlet werden, da Sie das     **
  256. ** spezifische Verhalten eines View ausmachen. Um die Node unter   **
  257. ** der Mouse in Erfahrung zu bringen können Sie von hier aus die   **
  258. ** Methode WVIEWM_MOUSEITEM an das Object senden. Dadurch können   **
  259. ** Sie sich einige Arbeit sparen.                                  **
  260. **                                                                 **
  261. ********************************************************************/
  262.  
  263.  
  264. struct WizardViewInput
  265. {
  266.     ULONG                             MethodID;
  267.     struct WizardViewInfo    *wvpi_ViewInfo;
  268.     struct GadgetInfo         *wvpi_GInfo;
  269.     struct InputEvent            *wvpi_IEvent;
  270.     struct
  271.     {
  272.         WORD    X;
  273.         WORD    Y;
  274.     }                                 wvpi_Mouse;
  275. };
  276.  
  277. /********************************************************************
  278. **                                                                 **
  279. ** WVIEWM_GOINACTIVE:                                              **
  280. **                                                                 **
  281. ** Der Returnwert ist undefiniert.                                 **
  282. ** Diese Methode muß vom Hook behandlet werden.                    **
  283. **                                                                 **
  284. ********************************************************************/
  285.  
  286. struct WizardViewInActive
  287. {
  288.     ULONG                             MethodID;
  289.     struct WizardViewInfo    *wvpia_ViewInfo;
  290.     struct GadgetInfo         *wvpia_GInfo;
  291.     ULONG                             wvpia_Abort;
  292. };
  293.  
  294.  
  295. /********************************************************************
  296. **                                                                 **
  297. ** WVIEWM_INSTALLCLIP:                                             **
  298. **                                                                 **
  299. ** Der Returnwert ist FALSE, wenn ein Fehler aufgetreten ist.      **
  300. ** Sollte dies der Fall sein, dann wurde die Clippingregion NICHT  **
  301. ** installiert ! Das Clipprectangle wird mit dem umgebenden Clip-  **
  302. ** rectangle logisch verknüpft.                                    **
  303. **                                                                 **
  304. ********************************************************************/
  305.  
  306. struct WizardViewInstallClip
  307. {
  308.     ULONG                             MethodID;
  309.     struct WizardViewInfo    *wvpic_ViewInfo;
  310.     struct GadgetInfo            *wvpic_GInfo;
  311.     struct RastPort            *wvpic_RPort;
  312.     struct Region              **wvpic_OldRegion;
  313.     struct Rectangle            *wvpic_ClipRectangle;
  314. };
  315.  
  316. /********************************************************************
  317. **                                                                 **
  318. ** WVIEWM_UNINSTALLCLIP:                                           **
  319. **                                                                 **
  320. ** Der Returnwert ist undefiniert.                                 **
  321. **                                                                 **
  322. ********************************************************************/
  323.  
  324. struct WizardViewUnInstallClip
  325. {
  326.     ULONG                             MethodID;
  327.     struct GadgetInfo            *wvpuic_GInfo;
  328.     struct RastPort            *wvpuic_RPort;
  329.     struct Region                *wvpuic_OldRegion;
  330. };
  331.  
  332. /********************************************************************
  333. **                                                                 **
  334. ** WVIEWM_RENDERRANGE:                                             **
  335. **                                                                 **
  336. ** Beauftragt das Object die angegebene Node und alle folgenden    **
  337. ** Nodes auch zeichnen zu lassen. Das Object sendet dann über den  **
  338. ** Hook die Methode WVIEWN_RENDERNODE für die betreffenden Nodes.  **
  339. **                                                                 **
  340. ** Die korrekte Clippingregion sollten Sie dabei bereits innerhalb **
  341. ** des RastPorts installiert haben.  Count enthält die Anzahl der  **
  342. ** nachfolgenden Nodes, die ebenfalls gezeichnet werden sollen.    **
  343. **                                                                 **
  344. ** Der Returnwert ist undefiniert.                                 **
  345. **                                                                 **
  346. ********************************************************************/
  347.  
  348. struct WizardViewRenderRange
  349. {
  350.     ULONG                             MethodID;
  351.     struct WizardViewInfo    *wvprr_ViewInfo;
  352.     struct GadgetInfo            *wvprr_GInfo;
  353.     struct RastPort            *wvprr_RPort;
  354.     struct WizardNode            *wvprr_Node;
  355.     ULONG                             wvprr_Number;
  356.     ULONG                             wvprr_Count;
  357.     LONG                             wvprr_TopEdge;
  358. };
  359.  
  360. /********************************************************************
  361. **                                                                 **
  362. ** WVIEWM_GETNODE:                                                 **
  363. **                                                                 **
  364. ** Beauftragt das Object für die angegebene NodeNumber die obere   **
  365. ** Position zu berechnen und liefert gleichzeitig die Adresse der  **
  366. ** Node.                                                           **
  367. **                                                                 **
  368. ** Der Returnwert ist FALSE bei einem Fehler                       **
  369. **                                                                 **
  370. ********************************************************************/
  371.  
  372. struct WizardViewGetNode
  373. {
  374.     ULONG                             MethodID;
  375.     struct WizardViewInfo    *wvpgn_ViewInfo;
  376.     ULONG                             wvpgn_Number;
  377.     ULONG                            *wvpgn_TopEdge;
  378.     struct WizardNode          **wvpgn_Node;
  379. };
  380.  
  381. /********************************************************************
  382. **                                                                 **
  383. ** WVIEWM_MAKENODEVISIBLE:                                         **
  384. **                                                                 **
  385. ** Beauftragt das Object die angegebene Node voll sichtbar zu      **
  386. ** machen. Dabei prüft das Object, ob die Node überhauprt in den   **
  387. ** gebracht werden muß.                                            **
  388. **                                                                 **
  389. ** Der Returnwert ist undefiniert.                                 **
  390. **                                                                 **
  391. ********************************************************************/
  392.  
  393. struct WizardViewMakeNodeVisible
  394. {
  395.     ULONG                             MethodID;
  396.     struct WizardViewInfo    *wvpmnv_ViewInfo;
  397.     struct GadgetInfo            *wvpmnv_GInfo;
  398.     struct RastPort            *wvpmnv_RPort;
  399.     LONG                             wvpmnv_TopEdge;
  400.     LONG                             wvpmnv_Number;
  401.     struct WizardNode             *wvpmnv_Node;
  402. };
  403.  
  404. /********************************************************************
  405. **                                                                 **
  406. ** WVIEWM_UPDATE:                                                  **
  407. **                                                                 **
  408. ** Beauftragt das Object den angegebene Bereich neu zu zeichnen,   **
  409. ** außerdem wird das vertikale Linkobject mit neuen Listendaten    **
  410. ** versorgt.                                                       **
  411. **                                                                 **
  412. ** Der Returnwert ist undefiniert.                                 **
  413. **                                                                 **
  414. ********************************************************************/
  415.  
  416. struct WizardViewUpdate
  417. {
  418.     ULONG                             MethodID;
  419.     struct WizardViewInfo    *wvpu_ViewInfo;
  420.     struct GadgetInfo            *wvpu_GInfo;
  421.     struct RastPort            *wvpu_RPort;
  422.     LONG                             wvpu_MinX;
  423.     LONG                             wvpu_MaxX;
  424.     LONG                             wvpu_MinY;
  425.     LONG                             wvpu_MaxY;
  426. };
  427.  
  428.  
  429.  
  430. #define    WVIEWNODEM_DUMMY                0x100180
  431. #define    WVIEWNODEM_RENDER                WVIEWNODEM_DUMMY+0
  432.  
  433. /********************************************************************
  434. **                                                                 **
  435. ** WVIEWNODE_RENDER:                                               **
  436. **                                                                 **
  437. ** Beauftragt den Hook sein Object darzustellen.                   **
  438. ** Der Returnwert ist undefiniert, folglich ist Null zu returnen.  **
  439. **                                                                 **
  440. ********************************************************************/
  441.  
  442. struct WizardViewNodeRender
  443. {
  444.     ULONG                             MethodID;
  445.     struct WizardViewInfo    *wvnpr_ViewInfo;
  446.     struct DrawInfo            *wvnpr_DrInfo;
  447.     struct RastPort            *wvnpr_RPort;
  448.     struct WizardNode            *wvnpr_Node;
  449.     APTR                            *wvnpr_UserData;
  450.     ULONG                             wvnpr_BGPen;
  451.     LONG                             wvnpr_LeftEdge;
  452.     LONG                             wvnpr_TopEdge;
  453.     LONG                             wvnpr_RightEdge;
  454.     LONG                             wvnpr_BottomEdge;
  455.     LONG                             wvnpr_MinX;
  456.     LONG                             wvnpr_MaxX;
  457. };
  458. #endif /* WIZARD_WIZARDVIEW_H */
  459.