~3v1n0/nux/x11-conffile-on-unity-only

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
 * Copyright 2010 Inalogic® Inc.
 *
 * This program is free software: you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License, as
 * published by the  Free Software Foundation; either version 2.1 or 3.0
 * of the License.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranties of
 * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
 * PURPOSE.  See the applicable version of the GNU Lesser General Public
 * License for more details.
 *
 * You should have received a copy of both the GNU Lesser General Public
 * License along with this program. If not, see <http://www.gnu.org/licenses/>
 *
 * Authored by: Jay Taoko <jaytaoko@inalogic.com>
 *
 */

#ifndef ABSTRACTBUTTON_H
#define ABSTRACTBUTTON_H

#include "View.h"
#include "NuxCore/Property.h"

namespace nux
{
  class StaticText;

  enum ButtonVisualState
  {
    VISUAL_STATE_PRESSED = 0,
    VISUAL_STATE_NORMAL = 1,
    VISUAL_STATE_PRELIGHT = 2,
    VISUAL_STATE_DISABLED = 3
  };

  //! The base class of button type widgets.
  /*!
      AbstractButton is the direct base class of Button, CheckBox and RadioButton. It is a base class for ToggleButton.
  */
  class AbstractButton : public View
  {
    NUX_DECLARE_OBJECT_TYPE(AbstractButton, View);
  public:
    AbstractButton(NUX_FILE_LINE_PROTO);
    virtual ~AbstractButton();

    sigc::signal<void, AbstractButton*> visual_state_change;

    //! Returns the visual state of the AbstractButton
    /*!
        Returns the visual state of the AbstractButton.

        @return The visual state of the AbstractButton.
    */
    ButtonVisualState GetVisualState();

    //! Return the active state of the button.
    /*!
        Return the active state of the button. A Button has a non-persistent active state. It always returns false.
        CheckBox, RadionButton and ToggleButton return true if they are active.

        @return True if the button object is in an active state.
    */
    bool Active() const;

    //! Activate the button.
    /*!
         Activate the button. If this object is a Button, then it has no persistent state and the function does nothing.
    */
    virtual void Activate() = 0;

    //! Deactivate the button.
    /*!
         Deactivate the button. If this object is a Button, then it has no persistent state and the function does nothing.
    */
    virtual void Deactivate() = 0;

    //! Set the state of the button.
    /*!
        Set the sate of the button. The button is either activated or deactivated.

        @param active The button state.
    */
    virtual void SetActive(bool active);

    //! Set the text color.
    /*!
        Set the text color.

        @param color the text color.
    */
    void SetLabelColor(const Color &color);

    //! Get the text color.
    /*!
        Get the text color.

        @return The text color.
    */
    Color GetLabelColor();

    //! Get the button visual state.
    /*!
        Get the button visual state.

        @return The button visual state.
    */
    ButtonVisualState GetVisualState() const;

    virtual void SetLabelFontSize(int point);
    int GetLabelFontSize() const;

  protected:
    //! The state of the AbstractButton. 
    bool active_;

    bool mouse_pressed_;

    //! Visual state of the button object.
    ButtonVisualState visual_state_;


    // Common attribute for all the classes that inherit from AbstractButton.
    std::string label_;
    Color label_color_;
    StaticText *static_text_;
    int label_font_size_;
    bool same_size_as_content_;
    int pre_layout_width_;
    int pre_layout_height_;

    virtual void RecvMouseUp    (int x, int y, unsigned long button_flags, unsigned long key_flags);
    virtual void RecvMouseDown  (int x, int y, unsigned long button_flags, unsigned long key_flags);
    virtual void RecvMouseMove  (int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags);
    virtual void RecvMouseEnter(int x, int y, unsigned long button_flags, unsigned long key_flags);
    virtual void RecvMouseLeave(int x, int y, unsigned long button_flags, unsigned long key_flags);
    virtual void RecvClick      (int x, int y, unsigned long button_flags, unsigned long key_flags) = 0;
  };
}

#endif // ABSTRACTBUTTON_H