Button.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /******************************************************************************/
  2. enum BUTTON_MODE : Byte // Button Mode
  3. {
  4. BUTTON_DEFAULT , // callback function gets called when pointer is released on the button
  5. BUTTON_CONTINUOUS, // callback function gets called every frame while the pointer is enabled on the button
  6. BUTTON_TOGGLE , // callback function gets called when pointer is pushed on the button which toggles its state (enabled <-> disabled)
  7. BUTTON_IMMEDIATE , // callback function gets called when pointer is pushed on the button
  8. };
  9. enum BUTTON_TYPE : Byte // Button Type
  10. {
  11. BUTTON_TYPE_DEFAULT,
  12. BUTTON_TYPE_COMBOBOX,
  13. BUTTON_TYPE_LIST_COLUMN,
  14. BUTTON_TYPE_PROPERTY_VALUE,
  15. BUTTON_TYPE_REGION_VIEW,
  16. BUTTON_TYPE_SLIDEBAR_LEFT,
  17. BUTTON_TYPE_SLIDEBAR_CENTER,
  18. BUTTON_TYPE_SLIDEBAR_RIGHT,
  19. BUTTON_TYPE_TAB_LEFT,
  20. BUTTON_TYPE_TAB_HORIZONTAL,
  21. BUTTON_TYPE_TAB_RIGHT,
  22. BUTTON_TYPE_TAB_TOP,
  23. BUTTON_TYPE_TAB_VERTICAL,
  24. BUTTON_TYPE_TAB_BOTTOM,
  25. BUTTON_TYPE_TAB_TOP_LEFT,
  26. BUTTON_TYPE_TAB_TOP_RIGHT,
  27. BUTTON_TYPE_TAB_BOTTOM_LEFT,
  28. BUTTON_TYPE_TAB_BOTTOM_RIGHT,
  29. BUTTON_TYPE_TEXTLINE_CLEAR,
  30. BUTTON_TYPE_WINDOW_MINIMIZE,
  31. BUTTON_TYPE_WINDOW_MAXIMIZE,
  32. BUTTON_TYPE_WINDOW_CLOSE,
  33. #if EE_PRIVATE
  34. BUTTON_TYPE_TAB_CORNER_START=BUTTON_TYPE_TAB_TOP_LEFT,
  35. BUTTON_TYPE_TAB_CORNER_END =BUTTON_TYPE_TAB_BOTTOM_RIGHT,
  36. #endif
  37. };
  38. /******************************************************************************/
  39. const_mem_addr STRUCT(Button , GuiObj) // Gui Button !! must be stored in constant memory address !!
  40. //{
  41. BUTTON_MODE mode ; // button mode , default=BUTTON_DEFAULT
  42. Bool sound ; // play click sound, default=true, if enabled then 'Gui.playClickSound' will be called everytime this button is clicked
  43. Color image_color; // image color , default=WHITE (this is multiplied by 'GuiSkin.button.image_color')
  44. Flt text_align , // text aligning , default=0.0
  45. text_size ; // text size , default=1.0 (this is multiplied by button height and 'GuiSkin.button.text_size')
  46. Str text ; // text , default=""
  47. ImagePtr image ; // image , default=null
  48. GuiSkinPtr skin ; // skin override , default=null (if set to null then current value of 'Gui.skin' is used)
  49. // manage
  50. Button& del ( ); // delete
  51. Button& create( C Str &text=S); // create
  52. Button& create(C Rect &rect, C Str &text=S) {create(text).rect(rect); return T;} // create and set rectangle
  53. Button& create(C Button &src ); // create from 'src'
  54. // get / set
  55. Bool operator()( )C {return _on ;} // get button state (if it's visually pushed)
  56. Flt lit ( )C {return _lit;} // get highlight factor (0..1)
  57. Button& set (Bool on, SET_MODE mode=SET_DEFAULT); // set button state, this method is valid only for BUTTON_TOGGLE mode
  58. Button& push ( ); // push manually
  59. Button& setText (C Str &text ); // set text
  60. Button& setImage (C ImagePtr &image ); // set image
  61. Button& subType (BUTTON_TYPE type ); BUTTON_TYPE subType()C {return _sub_type;} // set/get button type, default=BUTTON_TYPE_DEFAULT
  62. virtual Button& enabled (Bool enabled ); Bool enabled()C {return super:: enabled();} // set/get if enabled
  63. virtual Button& disabled (Bool disabled ); Bool disabled()C {return super::disabled();} // set/get if disabled
  64. Button& focusable (Bool on ); Bool focusable()C {return _focusable;} // set/get if can catch keyboard focus, default=true
  65. GuiSkin* getSkin()C {return skin ? skin() : Gui.skin();} // get actual skin
  66. Flt textWidth ( C Flt *height=null)C; // calculate button text width , 'height'=if calculate based on custom button height (if null then current button height is used)
  67. TextStyle* textParams(Flt &text_size, Flt &text_padd, C Flt *height=null)C; // calculate button text parameters, 'height'=if calculate based on custom button height (if null then current button height is used)
  68. Button& func(void (*func)(Ptr user), Ptr user=null, Bool immediate=false); // set function called when button state has changed, with 'user' as its parameter, 'immediate'=if call the function immediately when a change occurs (this will happen inside object update function where you cannot delete any objects) if set to false then the function will get called after all objects finished updating (there you can delete objects)
  69. T1(TYPE) Button& func(void (*func)(TYPE *user), TYPE *user , Bool immediate=false) {return T.func((void(*)(Ptr))func, user, immediate);} // set function called when button state has changed, with 'user' as its parameter, 'immediate'=if call the function immediately when a change occurs (this will happen inside object update function where you cannot delete any objects) if set to false then the function will get called after all objects finished updating (there you can delete objects)
  70. T1(TYPE) Button& func(void (*func)(TYPE &user), TYPE &user , Bool immediate=false) {return T.func((void(*)(Ptr))func, &user, immediate);} // set function called when button state has changed, with 'user' as its parameter, 'immediate'=if call the function immediately when a change occurs (this will happen inside object update function where you cannot delete any objects) if set to false then the function will get called after all objects finished updating (there you can delete objects)
  71. void (*func ()C) (Ptr user) {return _func ;} // get function called when button state has changed, this returns a pointer to "void func(Ptr user)" function
  72. Ptr funcUser()C {return _func_user;} // get user parameter for function called when button state has changed
  73. // main
  74. virtual Button& hide ( ); // hide
  75. virtual Button& show ( ); // show
  76. virtual void update(C GuiPC &gpc); // update object
  77. virtual void draw (C GuiPC &gpc); // draw object
  78. #if EE_PRIVATE
  79. void zero();
  80. void call(Bool sound);
  81. void setParams();
  82. #endif
  83. ~Button() {del();}
  84. Button();
  85. #if !EE_PRIVATE
  86. private:
  87. #endif
  88. Bool _push_button, _on, _vertical, _focusable, _pixel_align, _func_immediate;
  89. BUTTON_TYPE _sub_type;
  90. Flt _lit;
  91. Ptr _func_user;
  92. void (*_func)(Ptr user);
  93. protected:
  94. virtual Bool save(File &f, CChar *path=null)C;
  95. virtual Bool load(File &f, CChar *path=null) ;
  96. #if EE_PRIVATE
  97. friend struct ComboBox; friend struct _List; friend struct Region; friend struct SlideBar; friend struct Tabs; friend struct TextBox; friend struct TextLine; friend struct Window;
  98. #endif
  99. };
  100. /******************************************************************************/