/*
* 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
*
* Authored by: Jay Taoko
*
*/
#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 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