/*!
@file
@author Albert Semenov
@date 11/2007
*/
/*
This file is part of MyGUI.
MyGUI 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 3 of the License, or
(at your option) any later version.
MyGUI is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with MyGUI. If not, see .
*/
#ifndef __MYGUI_WINDOW_H__
#define __MYGUI_WINDOW_H__
#include "MyGUI_Prerequest.h"
#include "MyGUI_TextBox.h"
#include "MyGUI_EventPair.h"
#include "MyGUI_ControllerFadeAlpha.h"
namespace MyGUI
{
// OBSOLETE
typedef delegates::CMultiDelegate2 EventHandle_WidgetString;
typedef delegates::CMultiDelegate2 EventHandle_WindowPtrCStringRef;
typedef delegates::CMultiDelegate1 EventHandle_WindowPtr;
class MYGUI_EXPORT Window :
public TextBox, // FIXME пока для кэпшена вместо виджета текст
public MemberObsolete
{
MYGUI_RTTI_DERIVED( Window )
public:
Window();
/** @copydoc Widget::setVisible */
virtual void setVisible(bool _value);
/** Hide or show window smooth */
void setVisibleSmooth(bool _value);
/** Hide window smooth and then destroy it */
void destroySmooth();
/** Enable or disable auto alpha mode */
void setAutoAlpha(bool _value);
/** Get auto alpha mode flag */
bool getAutoAlpha() const;
/** Set window caption */
virtual void setCaption(const UString& _value);
/** Get window caption */
virtual const UString& getCaption();
/** Get window caption widget */
TextBox* getCaptionWidget();
/** Set minimal possible window size */
void setMinSize(const IntSize& _value);
/** Set minimal possible window size */
void setMinSize(int _width, int _height);
/** Get minimal possible window size */
IntSize getMinSize();
/** Set maximal possible window size */
void setMaxSize(const IntSize& _value);
/** Set maximal possible window size */
void setMaxSize(int _width, int _height);
/** Get maximal possible window size */
IntSize getMaxSize();
//! @copydoc Widget::setPosition(const IntPoint& _value)
virtual void setPosition(const IntPoint& _value);
//! @copydoc Widget::setSize(const IntSize& _value)
virtual void setSize(const IntSize& _value);
//! @copydoc Widget::setCoord(const IntCoord& _value)
virtual void setCoord(const IntCoord& _value);
/** @copydoc Widget::setPosition(int _left, int _top) */
void setPosition(int _left, int _top);
/** @copydoc Widget::setSize(int _width, int _height) */
void setSize(int _width, int _height);
/** @copydoc Widget::setCoord(int _left, int _top, int _width, int _height) */
void setCoord(int _left, int _top, int _width, int _height);
/** Enable or disable snap to borders mode */
void setSnap(bool _value);
/** Get snap to borders mode flag */
bool getSnap() const;
/** Get current action applied to move/resize window. */
const IntCoord& getActionScale() const;
/** Enable or disable possibility to move window. */
void setMovable(bool _value);
/** Get possibility to move window. */
bool getMovable() const;
/*events:*/
/** Event : Window button pressed.\n
signature : void method(MyGUI::Window* _sender, const std::string& _name)
@param _sender widget that called this event
@param _name of pressed button
*/
EventPair
eventWindowButtonPressed;
/** Event : Window coordinate changed (window was resized or moved).\n
signature : void method(MyGUI::Window* _sender)
@param _sender widget that called this event
*/
EventPair
eventWindowChangeCoord;
protected:
virtual void initialiseOverride();
virtual void shutdownOverride();
void onMouseChangeRootFocus(bool _focus);
void onKeyChangeRootFocus(bool _focus);
void onMouseDrag(int _left, int _top, MouseButton _id);
void onMouseButtonPressed(int _left, int _top, MouseButton _id);
void onMouseButtonReleased(int _left, int _top, MouseButton _id);
void notifyMousePressed(MyGUI::Widget* _sender, int _left, int _top, MouseButton _id);
void notifyMouseReleased(MyGUI::Widget* _sender, int _left, int _top, MouseButton _id);
void notifyPressedButtonEvent(MyGUI::Widget* _sender);
void notifyMouseDrag(MyGUI::Widget* _sender, int _left, int _top, MouseButton _id);
// просто обновляет альфу взависимости от флагов
void updateAlpha();
void animateStop(Widget* _widget);
virtual void setPropertyOverride(const std::string& _key, const std::string& _value);
private:
float getAlphaVisible() const;
void getSnappedCoord(IntCoord& _coord);
IntCoord _getActionScale(Widget* _widget);
ControllerFadeAlpha* createControllerFadeAlpha(float _alpha, float _coef, bool _enable);
private:
TextBox* mWidgetCaption;
// размеры окна перед началом его изменений
IntCoord mPreActionCoord;
// наши главные фокусы
bool mMouseRootFocus;
bool mKeyRootFocus;
// автоматическое или ручное управление альфой
bool mIsAutoAlpha;
// минимальные и максимальные размеры окна
IntRect mMinmax;
bool mSnap; // прилеплять ли к краям
IntCoord mCurrentActionScale;
bool mAnimateSmooth;
Widget* mClient;
bool mMovable;
};
} // namespace MyGUI
#endif // __MYGUI_WINDOW_H__