home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC7.DMS / in.adf / classes.lha / Classes / BOOPSI / gadgets.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-31  |  30.9 KB  |  756 lines

  1. #ifndef CPP_BOOPSI_GADGETS_H
  2. #define CPP_BOOPSI_GADGETS_H
  3.  
  4. // Gadgets, insbesondere für den Layouter nützlich
  5. //
  6. // Autor: Jochen Becher
  7. //
  8. // Historie:
  9. // Version 1.0 am 28. Februar 94
  10.  
  11. #ifndef CPP_BOOPSI_BOOPSICLASS_H
  12. #include <classes/boopsi/boopsiclass.h>
  13. #endif
  14.  
  15. #ifndef CPP_BOOPSI_GADGETCLASS_H
  16. #include <classes/boopsi/gadgetclass.h>
  17. #endif
  18.  
  19. #ifndef CPP_WORKBENCH_WORKBENCH_H
  20. #include <classes/workbench/workbench.h>
  21. #endif
  22.  
  23. #ifndef CPP_DATASTRUCTURES_STRINGARRAY_H
  24. #include <classes/datastructures/stringarray.h>
  25. #endif
  26.  
  27. #define IBT_AdjustLeft   0
  28. #define IBT_AdjustRight  1
  29.  
  30. #define IBTA_ImageAdjust   (TAG_USER +  1) // I·G, ULONG
  31. #define IBTA_Font          (TAG_USER +  2) // ISG, struct TextAttr *
  32. #define IBTA_LabelMark     (TAG_USER +  3) // I·G, UBYTE
  33. #define IBTA_AutoWidth     (TAG_USER +  4) // ··G, LONG
  34. #define IBTA_AutoHeight    (TAG_USER +  5) // ··G, LONG
  35. #define IBTA_LeftBorder    (TAG_USER +  6) // ··G, LONG
  36. #define IBTA_RightBorder   (TAG_USER +  7) // ··G, LONG
  37. #define IBTA_TopBorder     (TAG_USER +  8) // ··G, LONG
  38. #define IBTA_BottomBorder  (TAG_USER +  9) // ··G, LONG
  39.  
  40. class IButtonClass : public BoopsiClass {
  41. public:
  42.     IButtonClass();
  43. private:
  44.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  45.     static ULONG render(Class *cl, struct Gadget *g,
  46.         struct gpRender *msg, struct InstanceData *);
  47.     static WORD labelWidth(Class *cl, struct Gadget *g,
  48.         struct InstanceData *);
  49.     static WORD labelHeight(Class *cl, struct Gadget *g,
  50.         struct InstanceData *);
  51. };
  52.  
  53. class BIButtonC : public BGadgetC, public GButtonC {
  54. public:
  55.     BIButtonC(GadgetEventC *ev,WindowC &w, Tag tag1type, ...)
  56.         : BGadgetC(ev,ibc.boopsiclass(),NULL,w,(struct TagItem *) &tag1type),
  57.           GButtonC() { };
  58.     BIButtonC(GadgetEventC *ev,WindowC &w, struct TagItem *tags)
  59.         : BGadgetC(ev,ibc.boopsiclass(),NULL,w,tags), GButtonC() { };
  60.     WORD leftBorder() const { return (WORD) getAttr(IBTA_LeftBorder); };
  61.     WORD rightBorder() const { return (WORD) getAttr(IBTA_RightBorder); };
  62.     WORD topBorder() const { return (WORD) getAttr(IBTA_TopBorder); };
  63.     WORD bottomBorder() const { return (WORD) getAttr(IBTA_BottomBorder); };
  64.     BOOL disable(BOOL value) { return BGadgetC::disable(value) };
  65.     BOOL isDisabled() const { return BGadgetC::isDisabled() };
  66.     BOOL activate(BOOL v) { return FALSE; };
  67.     VOID setTextAttr(const TextAttrC *f) { setAttrs(IBTA_Font,f,TAG_END); };
  68.     TextAttrC *textAttr() const { return (struct TextAttrC *) getAttr(IBTA_Font); };
  69. protected:
  70.     BIButtonC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  71.         WindowC &w, struct TagItem *tags)
  72.         : BGadgetC(ev,c,pubclass,w,tags), GButtonC() { };
  73. private:
  74.     static IButtonClass ibc;
  75. };
  76.  
  77. // *************************************************************
  78.  
  79. #define STRA_Font           (TAG_USER + 1) // ISG, struct TextAttr *
  80. #define STRA_LabelMark      (TAG_USER + 2) // I·G, UBYTE
  81. #define STRA_LeftBorder     (TAG_USER + 3) // ··G, LONG
  82. #define STRA_RightBorder    (TAG_USER + 4) // ··G, LONG
  83. #define STRA_TopBorder      (TAG_USER + 5) // ··G, LONG
  84. #define STRA_BottomBorder   (TAG_USER + 6) // ··G, LONG
  85. #define STRA_AutoWidth      (TAG_USER + 7) // ··G, LONG
  86. #define STRA_AutoHeight     (TAG_USER + 8) // ··G, LONG
  87. #define STRA_Columns        (TAG_USER + 9) // ISG, ULONG
  88.  
  89. class StringClass : public BoopsiClass {
  90. public:
  91.     StringClass();
  92. private:
  93.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  94.     static ULONG render(Class *cl, struct Gadget *g,
  95.         struct gpRender *msg, struct InstanceData *);
  96.     static VOID calcBorders(Class *cl, struct Gadget *g,
  97.         struct InstanceData *data);
  98.     static WORD calcWidth(Class *cl, struct Gadget *g,
  99.         struct InstanceData *data);
  100.     static WORD calcHeight(Class *cl, struct Gadget *g,
  101.         struct InstanceData *data);
  102. };
  103.  
  104. class BStringC : public BGadgetC, GStringC {
  105. public:
  106.     BStringC(GadgetEventC *ev, WindowC &w, Tag tag1type, ...)
  107.         : BGadgetC(ev,lc.boopsiclass(),NULL,w,(struct TagItem *) &tag1type) { };
  108.     BStringC(GadgetEventC *ev, WindowC &w, struct TagItem *tags)
  109.         : BGadgetC(ev,lc.boopsiclass(),NULL,w,tags) { };
  110.     WORD leftBorder() const { return (WORD) getAttr(STRA_LeftBorder); };
  111.     WORD rightBorder() const { return (WORD) getAttr(STRA_RightBorder); };
  112.     WORD topBorder() const { return (WORD) getAttr(STRA_TopBorder); };
  113.     WORD bottomBorder() const { return (WORD) getAttr(STRA_BottomBorder); };
  114.     BOOL disable(BOOL value) { return BGadgetC::disable(value) };
  115.     BOOL isDisabled() const { return BGadgetC::isDisabled() };
  116.     BOOL activate(BOOL v) { return FALSE; };
  117.     VOID setTextAttr(const TextAttrC *f) { setAttrs(STRA_Font,f,TAG_END); };
  118.     TextAttrC *textAttr() const { return (struct TextAttrC *) getAttr(STRA_Font); };
  119.     VOID set(STRPTR s) { setAttrs(STRINGA_TextVal,s,TAG_END); };
  120.     STRPTR get() { return (STRPTR) getAttr(STRINGA_TextVal); };
  121. protected:
  122.     BStringC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  123.             WindowC &w, struct TagItem *tags)
  124.         : BGadgetC(ev,c,pubclass,w,tags) { };
  125. private:
  126.     static StringClass lc;
  127. };
  128.  
  129. class BIntegerC : public BGadgetC, public GIntegerC {
  130. public:
  131.     BIntegerC(GadgetEventC *ev, WindowC &w, Tag tag1type, ...);
  132.     BIntegerC(GadgetEventC *ev, WindowC &w, struct TagItem *tags);
  133.     WORD leftBorder() const { return (WORD) getAttr(STRA_LeftBorder); };
  134.     WORD rightBorder() const { return (WORD) getAttr(STRA_RightBorder); };
  135.     WORD topBorder() const { return (WORD) getAttr(STRA_TopBorder); };
  136.     WORD bottomBorder() const { return (WORD) getAttr(STRA_BottomBorder); };
  137.     BOOL disable(BOOL value) { return BGadgetC::disable(value) };
  138.     BOOL isDisabled() const { return BGadgetC::isDisabled() };
  139.     BOOL activate(BOOL v) { return FALSE; };
  140.     VOID setTextAttr(const TextAttrC *f) { setAttrs(STRA_Font,f,TAG_END); };
  141.     TextAttrC *textAttr() const { return (struct TextAttrC *) getAttr(STRA_Font); };
  142.     VOID set(LONG s) { setAttrs(STRINGA_LongVal,s,TAG_END); };
  143.     LONG get() { return (LONG) getAttr(STRINGA_LongVal); };
  144. protected:
  145.     BIntegerC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  146.             WindowC &w, struct TagItem *tags)
  147.         : BGadgetC(ev,c,pubclass,w,tags) { };
  148. private:
  149.     static StringClass lc;
  150. };
  151.  
  152. // *************************************************************
  153.  
  154. #define CB_LabelLeft      0
  155. #define CB_LabelRight     1
  156.  
  157. #define CBA_Font           (TAG_USER + 1) // ISG, struct TextAttr *
  158. #define CBA_LabelPlace     (TAG_USER + 2) // I·G, ULONG
  159. #define CBA_LeftBorder     (TAG_USER + 3) // ··G, LONG
  160. #define CBA_RightBorder    (TAG_USER + 4) // ··G, LONG
  161. #define CBA_TopBorder      (TAG_USER + 5) // ··G, LONG
  162. #define CBA_BottomBorder   (TAG_USER + 6) // ··G, LONG
  163. #define CBA_AutoWidth      (TAG_USER + 7) // ··G, LONG
  164. #define CBA_AutoHeight     (TAG_USER + 8) // ··G, LONG
  165. #define CBA_ReadOnly       (TAG_USER + 9) // ISG, BOOL
  166. #define CBA_LabelMark      (TAG_USER +10) // I·G, UBYTE
  167.  
  168. class CheckboxClass : public BoopsiClass {
  169. public:
  170.     CheckboxClass();
  171. private:
  172.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  173.     static ULONG render(Class *cl, struct Gadget *g,
  174.         struct gpRender *msg, struct InstanceData *);
  175.     static VOID calcBorders(Class *cl, struct Gadget *g,
  176.         struct InstanceData *data);
  177.     static WORD calcWidth(Class *cl, struct Gadget *g,
  178.         struct InstanceData *data);
  179.     static WORD calcHeight(Class *cl, struct Gadget *g,
  180.         struct InstanceData *data);
  181. };
  182.  
  183. class BCheckboxC : public BGadgetC, public GCheckboxC {
  184. public:
  185.     BCheckboxC(GadgetEventC *ev, WindowC &w, Tag tag1type, ...)
  186.         : BGadgetC(ev,cbc.boopsiclass(),NULL,w,(struct TagItem *) &tag1type) { };
  187.     BCheckboxC(GadgetEventC *ev, WindowC &w, struct TagItem *tags)
  188.         : BGadgetC(ev,cbc.boopsiclass(),NULL,w,tags) { };
  189.     WORD leftBorder() const { return (WORD) getAttr(CBA_LeftBorder); };
  190.     WORD rightBorder() const { return (WORD) getAttr(CBA_RightBorder); };
  191.     WORD topBorder() const { return (WORD) getAttr(CBA_TopBorder); };
  192.     WORD bottomBorder() const { return (WORD) getAttr(CBA_BottomBorder); };
  193.     BOOL disable(BOOL value) { return BGadgetC::disable(value) };
  194.     BOOL isDisabled() const { return BGadgetC::isDisabled() };
  195.     BOOL activate(BOOL v) { return FALSE; };
  196.     VOID setTextAttr(const TextAttrC *f) { setAttrs(CBA_Font,f,TAG_END); };
  197.     TextAttrC *textAttr() const { return (struct TextAttrC *) getAttr(CBA_Font); };
  198.     VOID check(BOOL v) { setAttrs(GA_Selected, v, TAG_END); };
  199.     BOOL checked()  { return (BOOL) getAttr(GA_Selected); };
  200. protected:
  201.     BCheckboxC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  202.             WindowC &w, struct TagItem *tags)
  203.         : BGadgetC(ev,c,pubclass,w,tags) { };
  204. private:
  205.     static CheckboxClass cbc;
  206. };
  207.  
  208. // *************************************************************
  209.  
  210. #define CY_LabelLeft     0
  211. #define CY_LabelRight    1
  212.  
  213. #define CYA_Labels        (TAG_USER + 1) // ISG, STRPTR *
  214. #define CYA_Active        (TAG_USER + 2) // ISG, ULONG
  215. #define CYA_Font          (TAG_USER + 3) // ISG, struct TextAttr *
  216. #define CYA_MinMenu       (TAG_USER + 4) // ISG, ULONG
  217. #define CYA_LeftBorder    (TAG_USER + 5) // ··G, LONG
  218. #define CYA_RightBorder   (TAG_USER + 6) // ··G, LONG
  219. #define CYA_TopBorder     (TAG_USER + 7) // ··G, LONG
  220. #define CYA_BottomBorder  (TAG_USER + 8) // ··G, LONG
  221. #define CYA_AutoWidth     (TAG_USER + 9) // ··G, LONG
  222. #define CYA_AutoHeight    (TAG_USER +10) // ··G, LONG
  223. #define CYA_Columns       (TAG_USER +11) // ISG, ULONG
  224. #define CYA_LabelPlace    (TAG_USER +12) // I·G, ULONG
  225. #define CYA_LabelMark     (TAG_USER +13) // I·G, UBYTE
  226. #define CYA_Next          (TAG_USER +14) // ·S·
  227. #define CYA_Prev          (TAG_USER +15) // ·S·
  228.  
  229. class CycleClass : public BoopsiClass {
  230. public:
  231.     CycleClass();
  232. private:
  233.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  234.     static ULONG renderCycle(Class *cl, struct Gadget *,
  235.         struct gpRender *msg, struct InstanceData *);
  236.     static ULONG calcWidth(Class *cl, struct Gadget *,
  237.         struct InstanceData *);
  238.     static ULONG calcHeight(Class *cl, struct Gadget *,
  239.         struct InstanceData *);
  240.     static VOID calcBorders(Class *cl, struct Gadget *,
  241.         struct InstanceData *);
  242. };
  243.  
  244. class BCycleC : public BGadgetC, public GCycleC {
  245. public:
  246.     BCycleC(GadgetEventC *ev, WindowC &w, stringarray &, Tag tag1type, ...);
  247.     BCycleC(GadgetEventC *ev,WindowC &w, stringarray &, struct TagItem *tags);
  248.     WORD leftBorder() const { return (WORD) getAttr(CYA_LeftBorder); };
  249.     WORD rightBorder() const { return (WORD) getAttr(CYA_RightBorder); };
  250.     WORD topBorder() const { return (WORD) getAttr(CYA_TopBorder); };
  251.     WORD bottomBorder() const { return (WORD) getAttr(CYA_BottomBorder); };
  252.     BOOL disable(BOOL value) { return BGadgetC::disable(value) };
  253.     BOOL isDisabled() const { return BGadgetC::isDisabled() };
  254.     BOOL activate(BOOL v) { return FALSE; };
  255.     VOID setTextAttr(const TextAttrC *f) { setAttrs(CYA_Font,f,TAG_END); };
  256.     TextAttrC *textAttr() const { return (struct TextAttrC *) getAttr(CYA_Font); };
  257.     VOID select(ULONG s) { setAttrs(CYA_Active,s,TAG_END); };
  258.     ULONG selected() { return getAttr(CYA_Active); };
  259.     VOID setLabels(STRPTR *);
  260.     VOID setLabels(STRPTR label1, ...);
  261.     STRPTR *getLabels();
  262.     ULONG labelsCount();
  263.     UWORD addLabel(STRPTR label);
  264.     VOID remLabel(UWORD count);
  265. protected:
  266.     BCycleC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  267.         WindowC &w, struct TagItem *tags)
  268.         : BGadgetC(ev,c,pubclass,w,tags), GCycleC() { };
  269. private:
  270.     static CycleClass pmc;
  271.     stringarray labels;
  272. };
  273.  
  274. // *************************************************************
  275.  
  276. #define RD_LabelsLeft   0
  277. #define RD_LabelsRight  1
  278.  
  279. #define RDA_Font         (TAG_USER + 1) // ISG, struct TextAttr
  280. #define RDA_LabelsPlace  (TAG_USER + 2) // I·G, ULONG
  281. #define RDA_Labels       (TAG_USER + 3) // I·G, STRPTR *
  282. #define RDA_LeftBorder   (TAG_USER + 4) // ··G, LONG
  283. #define RDA_RightBorder  (TAG_USER + 5) // ··G, LONG
  284. #define RDA_TopBorder    (TAG_USER + 6) // ··G, LONG
  285. #define RDA_BottomBorder (TAG_USER + 7) // ··G, LONG
  286. #define RDA_AutoWidth    (TAG_USER + 8) // ··G, LONG
  287. #define RDA_AutoHeight   (TAG_USER + 9) // ··G, LONG
  288. #define RDA_Active       (TAG_USER +10) // ISG, ULONG
  289. #define RDA_Spacing      (TAG_USER +11) // I·G, ULONG
  290. #define RDA_LabelMark    (TAG_USER +12) // I·G, UBYTE
  291. #define RDA_Next         (TAG_USER +13) // ·S·
  292. #define RDA_Prev         (TAG_USER +14) // ·S·
  293.  
  294. class RadioClass : public BoopsiClass {
  295. public:
  296.     RadioClass();
  297. private:
  298.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  299.     static ULONG render(Class *cl, struct Gadget *g,
  300.         struct gpRender *msg, struct InstanceData *);
  301.     static VOID calcBorders(Class *cl, struct Gadget *g,
  302.         struct InstanceData *data);
  303.     static ULONG countLabels(STRPTR *labels);
  304.     static WORD calcWidth(Class *cl, struct Gadget *g,
  305.         struct InstanceData *data);
  306.     static WORD calcHeight(Class *cl, struct Gadget *g,
  307.         struct InstanceData *data);
  308. };
  309.  
  310. class BRadioC : public BGadgetC, public GRadioC {
  311. public:
  312.     BRadioC(GadgetEventC *ev, WindowC &w, Tag tag1type, ...)
  313.         : BGadgetC(ev,rc.boopsiclass(),NULL,w,(struct TagItem *) &tag1type) { };
  314.     BRadioC(GadgetEventC *ev, WindowC &w, struct TagItem *tags)
  315.         : BGadgetC(ev,rc.boopsiclass(),NULL,w,tags) { };
  316.     WORD leftBorder() const { return (WORD) getAttr(RDA_LeftBorder); };
  317.     WORD rightBorder() const { return (WORD) getAttr(RDA_RightBorder); };
  318.     WORD topBorder() const { return (WORD) getAttr(RDA_TopBorder); };
  319.     WORD bottomBorder() const { return (WORD) getAttr(RDA_BottomBorder); };
  320.     BOOL disable(BOOL value) { return BGadgetC::disable(value) };
  321.     BOOL isDisabled() const { return BGadgetC::isDisabled() };
  322.     BOOL activate(BOOL v) { return FALSE; };
  323.     VOID setTextAttr(const TextAttrC *f) { setAttrs(RDA_Font,f,TAG_END); };
  324.     TextAttrC *textAttr() const { return (struct TextAttrC *) getAttr(RDA_Font); };
  325.     VOID select(ULONG v) { setAttrs(RDA_Active, v, TAG_END); };
  326.     ULONG selected() { return getAttr(RDA_Active); };
  327. protected:
  328.     BRadioC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  329.             WindowC &w, struct TagItem *tags)
  330.         : BGadgetC(ev,c,pubclass,w,tags) { };
  331. private:
  332.     static RadioClass rc;
  333. };
  334.  
  335. // *************************************************************
  336.  
  337. #define SLA_Font          (TAG_USER + 1) // ISG, struct TextAttr *
  338. #define SLA_ValuePlace    (TAG_USER + 2) // I·G, ULONG
  339. #define SLA_LabelPlace    (TAG_USER + 3) // I·G, ULONG
  340. #define SLA_Min           (TAG_USER + 4) // ISG, LONG
  341. #define SLA_Max           (TAG_USER + 5) // ISG, LONG
  342. #define SLA_Level         (TAG_USER + 6) // ISG, LONG
  343. #define SLA_LeftBorder    (TAG_USER + 7) // ··G, LONG
  344. #define SLA_RightBorder   (TAG_USER + 8) // ··G, LONG
  345. #define SLA_TopBorder     (TAG_USER + 9) // ··G, LONG
  346. #define SLA_BottomBorder  (TAG_USER +10) // ··G, LONG
  347. #define SLA_AutoWidth     (TAG_USER +11) // ··G, LONG
  348. #define SLA_AutoHeight    (TAG_USER +12) // ··G, LONG
  349. #define SLA_Freedom       (TAG_USER +13) // I·G, ULONG
  350.  
  351. class SliderClass : public BoopsiClass {
  352. public:
  353.     SliderClass();
  354. private:
  355.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  356.     static ULONG render(Class *cl, struct Gadget *g,
  357.         struct gpRender *msg, struct InstanceData *);
  358.     static VOID calcBorders(Class *cl, struct Gadget *g,
  359.         struct InstanceData *data);
  360.     static WORD calcWidth(Class *cl, struct Gadget *g,
  361.         struct InstanceData *data);
  362.     static WORD calcHeight(Class *cl, struct Gadget *g,
  363.         struct InstanceData *data);
  364. };
  365.  
  366. class BSliderC : public BGadgetC, GSliderC {
  367. public:
  368.     BSliderC(GadgetEventC *ev, WindowC &w, Tag tag1type, ...)
  369.         : BGadgetC(ev,sc.boopsiclass(),NULL,w,(struct TagItem *) &tag1type) { };
  370.     BSliderC(GadgetEventC *ev, WindowC &w, struct TagItem *tags)
  371.         : BGadgetC(ev,sc.boopsiclass(),NULL,w,tags) { };
  372.     WORD leftBorder() const { return (WORD) getAttr(SLA_LeftBorder); };
  373.     WORD rightBorder() const { return (WORD) getAttr(SLA_RightBorder); };
  374.     WORD topBorder() const { return (WORD) getAttr(SLA_TopBorder); };
  375.     WORD bottomBorder() const { return (WORD) getAttr(SLA_BottomBorder); };
  376.     BOOL disable(BOOL value) { return BGadgetC::disable(value) };
  377.     BOOL isDisabled() const { return BGadgetC::isDisabled() };
  378.     BOOL activate(BOOL v) { return FALSE; };
  379.     VOID setTextAttr(const TextAttrC *f) { setAttrs(SLA_Font,f,TAG_END); };
  380.     TextAttrC *textAttr() const { return (struct TextAttrC *) getAttr(SLA_Font); };
  381.     VOID setMin(UWORD m) { setAttrs(SLA_Min,m,TAG_END); };
  382.     VOID setMax(UWORD m) { setAttrs(SLA_Max,m,TAG_END); };
  383.     VOID setLevel(UWORD l) { setAttrs(SLA_Level,l,TAG_END); };
  384.     UWORD min() { return (UWORD) getAttr(SLA_Min); };
  385.     UWORD max() { return (UWORD) getAttr(SLA_Max); };
  386.     UWORD level() { return (UWORD) getAttr(SLA_Level); };
  387. protected:
  388.     BSliderC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  389.             WindowC &w, struct TagItem *tags)
  390.         : BGadgetC(ev,c,pubclass,w,tags) { };
  391. private:
  392.     static SliderClass sc;
  393. };
  394.  
  395. // *************************************************************
  396.  
  397. #define ASCA_Arrows        (TAG_USER + 1) // I·G, BOOL
  398. #define ASCA_LeftBorder    (TAG_USER + 2) // ··G, LONG
  399. #define ASCA_RightBorder   (TAG_USER + 3) // ··G, LONG
  400. #define ASCA_TopBorder     (TAG_USER + 4) // ··G, LONG
  401. #define ASCA_BottomBorder  (TAG_USER + 5) // ··G, LONG
  402. #define ASCA_AutoWidth     (TAG_USER + 6) // ··G, LONG
  403. #define ASCA_AutoHeight    (TAG_USER + 7) // ··G, LONG
  404. #define ASCA_Freedom       (TAG_USER + 8) // I·G, ULONG
  405. #define ASCA_Top           (TAG_USER + 9) // ISG, UWORD
  406. #define ASCA_Visible       (TAG_USER +10) // ISG, UWORD
  407. #define ASCA_Total         (TAG_USER +11) // ISG, UWORD
  408. #define ASCA_Borderless    (TAG_USER +12) // I·G, BOOL
  409.  
  410. class ArrowScrollerClass : public BoopsiClass {
  411. public:
  412.     ArrowScrollerClass();
  413. private:
  414.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  415.     static ULONG render(Class *cl, struct Gadget *g,
  416.         struct gpRender *msg, struct InstanceData *, BOOL overGadget = FALSE);
  417.     static VOID calcArrows(Class *cl, struct Gadget *g,
  418.         struct InstanceData *data);
  419.     static VOID scrollUpLeft(Class *cl, struct Gadget *g,
  420.         struct InstanceData *data, struct GadgetInfo *);
  421.     static VOID scrollDownRight(Class *cl, struct Gadget *g,
  422.         struct InstanceData *data, struct GadgetInfo *);
  423.     static WORD calcWidth(Class *cl, struct Gadget *g,
  424.         struct InstanceData *data);
  425.     static WORD calcHeight(Class *cl, struct Gadget *g,
  426.         struct InstanceData *data);
  427. };
  428.  
  429. class BArrowScrollerC : public BGadgetC, GScrollerC {
  430. public:
  431.     BArrowScrollerC(GadgetEventC *ev, WindowC &w, Tag tag1type, ...)
  432.         : BGadgetC(ev,sc.boopsiclass(),NULL,w,(struct TagItem *) &tag1type) { };
  433.     BArrowScrollerC(GadgetEventC *ev, WindowC &w, struct TagItem *tags)
  434.         : BGadgetC(ev,sc.boopsiclass(),NULL,w,tags) { };
  435.     WORD leftBorder() const { return (WORD) getAttr(ASCA_LeftBorder); };
  436.     WORD rightBorder() const { return (WORD) getAttr(ASCA_RightBorder); };
  437.     WORD topBorder() const { return (WORD) getAttr(ASCA_TopBorder); };
  438.     WORD bottomBorder() const { return (WORD) getAttr(ASCA_BottomBorder); };
  439.     BOOL disable(BOOL value) { return BGadgetC::disable(value) };
  440.     BOOL isDisabled() const { return BGadgetC::isDisabled() };
  441.     BOOL activate(BOOL v) { return FALSE; };
  442.     VOID setPot(UWORD p) { setAttrs(ASCA_Top,p,TAG_END); };
  443.     VOID setTotal(UWORD t) { setAttrs(ASCA_Total,t,TAG_END); };
  444.     VOID setVisible(UWORD v) { setAttrs(ASCA_Visible,v,TAG_END); };
  445.     UWORD pot() { return (UWORD) getAttr(ASCA_Top); };
  446.     UWORD total() { return (UWORD) getAttr(ASCA_Total); };
  447.     UWORD visible() { return (UWORD) getAttr(ASCA_Visible); };
  448. protected:
  449.     BArrowScrollerC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  450.             WindowC &w, struct TagItem *tags)
  451.         : BGadgetC(ev,c,pubclass,w,tags) { };
  452. private:
  453.     static ArrowScrollerClass sc;
  454. };
  455.  
  456. // *************************************************************
  457.  
  458. #define LS_AdjustLeft       0
  459. #define LS_AdjustRight      1
  460.  
  461. #define LSA_Font            (TAG_USER +  1) // ISG, struct TextAttr *
  462. #define LSA_Spacing         (TAG_USER +  2) // ISG, UWORD
  463. #define LSA_Attach          (TAG_USER +  3) // ISG, struct List *
  464. #define LSA_Detach          (TAG_USER +  4) // ·S·, BOOL
  465. #define LSA_Top             (TAG_USER +  5) // ISG, LONG
  466. #define LSA_Active          (TAG_USER +  6) // ISG, LONG
  467. #define LSA_ReadOnly        (TAG_USER +  7) // ISG, BOOL
  468. #define LSA_Next            (TAG_USER +  8) // ·S·
  469. #define LSA_Prev            (TAG_USER +  9) // ·S·
  470. #define LSA_Visible         (TAG_USER + 10) // ···
  471. #define LSA_Total           (TAG_USER + 11) // ···
  472. #define LSA_Frame           (TAG_USER + 12) // I·G, Object *
  473. #define LSA_ItemHeight      (TAG_USER + 13) // ISG, UWORD
  474. #define LSA_LeftBorder      (TAG_USER + 14) // ··G, LONG
  475. #define LSA_RightBorder     (TAG_USER + 15) // ··G, LONG
  476. #define LSA_TopBorder       (TAG_USER + 16) // ··G, LONG
  477. #define LSA_BottomBorder    (TAG_USER + 17) // ··G, LONG
  478. #define LSA_AutoWidth       (TAG_USER + 18) // ··G, LONG
  479. #define LSA_AutoHeight      (TAG_USER + 19) // ··G, LONG
  480. #define LSA_Columns         (TAG_USER + 20) // ISG, ULONG
  481. #define LSA_Lines           (TAG_USER + 21) // ISG, ULONG
  482. #define LSA_LabelMark       (TAG_USER + 22) // I·G, UBYTE
  483. #define LSA_HorizLeft       (TAG_USER + 23) // ISG, UWORD
  484. #define LSA_HorizWidth      (TAG_USER + 24) // ···
  485. #define LSA_HorizTotal      (TAG_USER + 25) // ···
  486. #define LSA_HorizTarget     (TAG_USER + 26) // ISG, Object *
  487. #define LSA_HorizMap        (TAG_USER + 27) // ISG, struct TagItem *
  488. #define LSA_HorizAdjust     (TAG_USER + 28) // ISG, ULONG
  489.  
  490. class ListClass : public BoopsiClass {
  491. public:
  492.     ListClass();
  493. private:
  494.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  495.     static ULONG render(Class *cl, struct Gadget *g,
  496.         struct gpRender *msg, struct InstanceData *, BOOL fullrender = TRUE);
  497.     static ULONG countListLength(struct InstanceData *);
  498.     static VOID NotifyTarget(Class *cl, Object *o,
  499.         struct InstanceData *data, struct GadgetInfo *ginfo, ULONG flags);
  500.     static VOID calcBorders(Class *cl, struct Gadget *g,
  501.         struct InstanceData *data);
  502.     static WORD calcWidth(Class *cl, struct Gadget *g,
  503.         struct InstanceData *data);
  504.     static WORD calcHeight(Class *cl, struct Gadget *g,
  505.         struct InstanceData *data);
  506. };
  507.  
  508. class BListC : public BGadgetC, public GListviewC {
  509. public:
  510.     BListC(GadgetEventC *ev,WindowC &w, Tag tag1type, ...)
  511.         : BGadgetC(ev,lic.boopsiclass(),NULL,w,(struct TagItem *) &tag1type),
  512.           GListviewC() { };
  513.     BListC(GadgetEventC *ev,WindowC &w, struct TagItem *tags)
  514.         : BGadgetC(ev,lic.boopsiclass(),NULL,w,tags), GListviewC() { };
  515.     WORD leftBorder() const { return (WORD) getAttr(LSA_LeftBorder); };
  516.     WORD rightBorder() const { return (WORD) getAttr(LSA_RightBorder); };
  517.     WORD topBorder() const { return (WORD) getAttr(LSA_TopBorder); };
  518.     WORD bottomBorder() const { return (WORD) getAttr(LSA_BottomBorder); };
  519.     BOOL disable(BOOL value) { return BGadgetC::disable(value) };
  520.     BOOL isDisabled() const { return BGadgetC::isDisabled() };
  521.     BOOL activate(BOOL v) { return FALSE; };
  522.     VOID setTextAttr(const TextAttrC *f) { setAttrs(LSA_Font,f,TAG_END); };
  523.     TextAttrC *textAttr() const { return (struct TextAttrC *) getAttr(LSA_Font); };
  524.     VOID select(ULONG l) { setAttrs(LSA_Active,l,TAG_END); };
  525.     ULONG selected() { return getAttr(LSA_Active); };
  526.     VOID clearSelection() { setAttrs(LSA_Active,~0,TAG_END); };
  527.     VOID setList(EListC *header) { setAttrs(LSA_Attach,header,TAG_END); };
  528.     EListC *getList() { return (EListC *) getAttr(LSA_Attach); };
  529.     VOID detachList() { setAttrs(LSA_Detach,TRUE,TAG_END); };
  530.     VOID attachList() { setAttrs(LSA_Attach,~0,TAG_END); };
  531. protected:
  532.     BListC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  533.         WindowC &w, struct TagItem *tags)
  534.         : BGadgetC(ev,c,pubclass,w,tags), GListviewC() { };
  535. private:
  536.     static ListClass lic;
  537. };
  538.  
  539. // *************************************************************
  540.  
  541. #define LVA_VertScroller    (TAG_USER + 50) // I·G, BOOL
  542. #define LVA_HorizScroller   (TAG_USER + 51) // I·G, BOOL
  543.  
  544. class ListviewClass : public BoopsiClass {
  545. public:
  546.     ListviewClass();
  547.     static Class *listclass() { return lic.boopsiclass(); };
  548.     static Class *scrollerclass() { return asc.boopsiclass(); };
  549. private:
  550.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  551.     static ULONG render(Class *cl, struct Gadget *g,
  552.         struct gpRender *msg, struct InstanceData *);
  553.     static ListClass lic;
  554.     static ArrowScrollerClass asc;
  555. };
  556.  
  557. class BListviewC : public BListC {
  558. public:
  559.     BListviewC(GadgetEventC *ev, WindowC &w, Tag tag1type, ...)
  560.         : BListC(ev,lc.boopsiclass(),NULL,w,(struct TagItem *) &tag1type) { };
  561.     BListviewC(GadgetEventC *ev, WindowC &w, struct TagItem *tags)
  562.         : BListC(ev,lc.boopsiclass(),NULL,w,tags) { };
  563. protected:
  564.     BListviewC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  565.             WindowC &w, struct TagItem *tags)
  566.         : BListC(ev,c,pubclass,w,tags) { };
  567. private:
  568.     static ListviewClass lc;
  569. };
  570.  
  571. // *************************************************************
  572.  
  573. #define LB_LabelLeft      0
  574. #define LB_LabelRight     1
  575.  
  576. #define LB_AdjustLeft     0
  577. #define LB_AdjustCenter   1
  578. #define LB_AdjustRight    2
  579.  
  580. #define LBA_Font           (TAG_USER + 1) // ISG, struct TextAttr *
  581. #define LBA_Text           (TAG_USER + 2) // ISG, STRPTR
  582. #define LBA_Number         (TAG_USER + 3) // ISG, LONG
  583. #define LBA_LabelPlace     (TAG_USER + 4) // I·G, ULONG
  584. #define LBA_Adjust         (TAG_USER + 5) // ISG, ULONG
  585. #define LBA_Border         (TAG_USER + 6) // I·G, BOOL
  586. #define LBA_LeftBorder     (TAG_USER + 7) // ··G, LONG
  587. #define LBA_RightBorder    (TAG_USER + 8) // ··G, LONG
  588. #define LBA_TopBorder      (TAG_USER + 9) // ··G, LONG
  589. #define LBA_BottomBorder   (TAG_USER +10) // ··G, LONG
  590. #define LBA_AutoWidth      (TAG_USER +11) // ··G, LONG
  591. #define LBA_AutoHeight     (TAG_USER +12) // ··G, LONG
  592. #define LBA_Columns        (TAG_USER +13) // ISG, ULONG
  593.  
  594. class LabelClass : public BoopsiClass {
  595. public:
  596.     LabelClass();
  597. private:
  598.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  599.     static ULONG render(Class *cl, struct Gadget *g,
  600.         struct gpRender *msg, struct InstanceData *);
  601.     static VOID calcBorders(Class *cl, struct Gadget *g,
  602.         struct InstanceData *data);
  603.     static WORD calcWidth(Class *cl, struct Gadget *g,
  604.         struct InstanceData *data);
  605.     static WORD calcHeight(Class *cl, struct Gadget *g,
  606.         struct InstanceData *data);
  607. };
  608.  
  609. class BTextC : public BGadgetC, GTextC {
  610. public:
  611.     BTextC(GadgetEventC *ev, WindowC &w, Tag tag1type, ...)
  612.         : BGadgetC(ev,lc.boopsiclass(),NULL,w,(struct TagItem *) &tag1type) { };
  613.     BTextC(GadgetEventC *ev, WindowC &w, struct TagItem *tags)
  614.         : BGadgetC(ev,lc.boopsiclass(),NULL,w,tags) { };
  615.     WORD leftBorder() const { return (WORD) getAttr(LBA_LeftBorder); };
  616.     WORD rightBorder() const { return (WORD) getAttr(LBA_RightBorder); };
  617.     WORD topBorder() const { return (WORD) getAttr(LBA_TopBorder); };
  618.     WORD bottomBorder() const { return (WORD) getAttr(LBA_BottomBorder); };
  619.     BOOL disable(BOOL value) { return BGadgetC::disable(value) };
  620.     BOOL isDisabled() const { return BGadgetC::isDisabled() };
  621.     BOOL activate(BOOL v) { return FALSE; };
  622.     VOID setTextAttr(const TextAttrC *f) { setAttrs(LBA_Font,f,TAG_END); };
  623.     TextAttrC *textAttr() const { return (struct TextAttrC *) getAttr(LBA_Font); };
  624.     VOID set(STRPTR s) { setAttrs(LBA_Text,s,TAG_END); };
  625.     STRPTR get() { return (STRPTR) getAttr(LBA_Text); };
  626. protected:
  627.     BTextC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  628.             WindowC &w, struct TagItem *tags)
  629.         : BGadgetC(ev,c,pubclass,w,tags) { };
  630. private:
  631.     static LabelClass lc;
  632. };
  633.  
  634. class BNumberC : public BGadgetC, GNumberC {
  635. public:
  636.     BNumberC(GadgetEventC *ev, WindowC &w, Tag tag1type, ...);
  637.     BNumberC(GadgetEventC *ev, WindowC &w, struct TagItem *tags);
  638.     WORD leftBorder() const { return (WORD) getAttr(LBA_LeftBorder); };
  639.     WORD rightBorder() const { return (WORD) getAttr(LBA_RightBorder); };
  640.     WORD topBorder() const { return (WORD) getAttr(LBA_TopBorder); };
  641.     WORD bottomBorder() const { return (WORD) getAttr(LBA_BottomBorder); };
  642.     BOOL disable(BOOL value) { return BGadgetC::disable(value) };
  643.     BOOL isDisabled() const { return BGadgetC::isDisabled() };
  644.     BOOL activate(BOOL v) { return FALSE; };
  645.     VOID setTextAttr(const TextAttrC *f) { setAttrs(LBA_Font,f,TAG_END); };
  646.     TextAttrC *textAttr() const { return (struct TextAttrC *) getAttr(LBA_Font); };
  647.     VOID set(LONG s) { setAttrs(LBA_Number,s,TAG_END); };
  648.     LONG get() { return (LONG) getAttr(LBA_Number); };
  649. protected:
  650.     BNumberC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  651.             WindowC &w, struct TagItem *tags)
  652.         : BGadgetC(ev,c,pubclass,w,tags) { };
  653. private:
  654.     static LabelClass lc;
  655. };
  656.  
  657. // *************************************************************
  658.  
  659. #define SVA_Level       (TAG_USER + 1) // ISG, UWORD
  660. #define SVA_Horiz       (TAG_USER + 2) // I·G, BOOL
  661. #define SVA_LUSize      (TAG_USER + 3) // ··G, UWORD
  662. #define SVA_RBSize      (TAG_USER + 4) // ··G, UWORD
  663. #define SVA_AutoRedraw  (TAG_USER + 5) // I··, BOOL
  664. #define SVA_RBPosition  (TAG_USER + 6) // ··G, ULONG
  665. #define SVA_LUMargin    (TAG_USER + 7) // ISG, ULONG
  666. #define SVA_RBMargin    (TAG_USER + 8) // ISG, ULONG
  667.  
  668. class SplitviewClass : public BoopsiClass {
  669. public:
  670.     SplitviewClass();
  671. private:
  672.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  673.     static ULONG render(Class *cl, struct Gadget *g,
  674.         struct gpRender *msg, struct InstanceData *, BOOL selected = FALSE);
  675.     static ULONG renderXor(Class *cl, struct Gadget *g,
  676.         struct gpRender *msg, struct InstanceData *);
  677.     static ULONG clear(Class *cl, struct Gadget *g,
  678.         struct gpRender *msg, struct InstanceData *);
  679. };
  680.  
  681. class BSplitviewC : public BGadgetC {
  682. public:
  683.     BSplitviewC(GadgetEventC *ev, WindowC &w, Tag tag1type, ...)
  684.         : BGadgetC(ev,svc.boopsiclass(),NULL,w,(struct TagItem *) &tag1type)
  685.         { };
  686.     BSplitviewC(GadgetEventC *ev,WindowC &w, struct TagItem *tags)
  687.         : BGadgetC(ev,svc.boopsiclass(),NULL,w,tags) { };
  688. protected:
  689.     BSplitviewC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  690.         WindowC &w, struct TagItem *tags)
  691.         : BGadgetC(ev,c,pubclass,w,tags) { };
  692. private:
  693.     static SplitviewClass svc;
  694. };
  695.  
  696. // *************************************************************
  697.  
  698. #define WBIDA_DiskObject    (TAG_USER + 1) // ISG, struct DiskObject *
  699. #define WBIDA_Name          (TAG_USER + 2) // IS·, STRPTR
  700. #define WBIDA_Font          (TAG_USER + 3) // ISG, struct TextAttr *
  701. #define WBIDA_LeftBorder    (TAG_USER + 4) // ··G, LONG
  702. #define WBIDA_RightBorder   (TAG_USER + 5) // ··G, LONG
  703. #define WBIDA_TopBorder     (TAG_USER + 6) // ··G, LONG
  704. #define WBIDA_BottomBorder  (TAG_USER + 7) // ··G, LONG
  705. #define WBIDA_AutoWidth     (TAG_USER + 8) // ··G, LONG
  706. #define WBIDA_AutoHeight    (TAG_USER + 9) // ··G, LONG
  707.  
  708. class WBIconDropClass : public BoopsiClass {
  709. public:
  710.     WBIconDropClass();
  711. private:
  712.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  713.     static ULONG render(Class *cl, struct Gadget *g,
  714.         struct gpRender *msg, struct InstanceData *);
  715.     static LONG calcWidth(Class *cl, struct Gadget *g,
  716.         struct InstanceData *);
  717.     static LONG calcHeight(Class *cl, struct Gadget *g,
  718.         struct InstanceData *);
  719.     static WORD calcTopBorder(Class *cl, struct Gadget *g,
  720.         struct InstanceData *);
  721. };
  722.  
  723. class BWBIconDropC : public BGadgetC {
  724. public:
  725.     BWBIconDropC(GadgetEventC *ev, WindowC &w, Tag tag1type, ...)
  726.         : BGadgetC(ev,idc.boopsiclass(),NULL,w,(struct TagItem *) &tag1type)
  727.         { };
  728.     BWBIconDropC(GadgetEventC *ev,WindowC &w, struct TagItem *tags)
  729.         : BGadgetC(ev,idc.boopsiclass(),NULL,w,tags) { };
  730.     WORD leftBorder() const { return (WORD) getAttr(WBIDA_LeftBorder); };
  731.     WORD rightBorder() const { return (WORD) getAttr(WBIDA_RightBorder); };
  732.     WORD topBorder() const { return (WORD) getAttr(WBIDA_TopBorder); };
  733.     WORD bottomBorder() const { return (WORD) getAttr(WBIDA_BottomBorder); };
  734.     VOID setTextAttr(const TextAttrC *f) { setAttrs(WBIDA_Font,f,TAG_END); };
  735.     TextAttrC *textAttr() const { return (struct TextAttrC *) getAttr(WBIDA_Font); };
  736. protected:
  737.     BWBIconDropC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  738.         WindowC &w, struct TagItem *tags)
  739.         : BGadgetC(ev,c,pubclass,w,tags) { };
  740. private:
  741.     static WBIconDropClass idc;
  742. };
  743.  
  744. class IconDropHandlerC : public AppWindowHandlerC {
  745. public:
  746.     IconDropHandlerC(AppWindowC &, BWBIconDropC &);
  747. protected:
  748.     virtual BOOL _forMe(AppMessageC &msg);
  749. private:
  750.     BWBIconDropC *aGadget;
  751. };
  752.  
  753. // *************************************************************
  754.  
  755. #endif
  756.