MyGUI 3.0.1
MyGUI_Window.h
Go to the documentation of this file.
00001 
00007 /*
00008     This file is part of MyGUI.
00009 
00010     MyGUI is free software: you can redistribute it and/or modify
00011     it under the terms of the GNU Lesser General Public License as published by
00012     the Free Software Foundation, either version 3 of the License, or
00013     (at your option) any later version.
00014 
00015     MyGUI is distributed in the hope that it will be useful,
00016     but WITHOUT ANY WARRANTY; without even the implied warranty of
00017     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018     GNU Lesser General Public License for more details.
00019 
00020     You should have received a copy of the GNU Lesser General Public License
00021     along with MyGUI.  If not, see <http://www.gnu.org/licenses/>.
00022 */
00023 #ifndef __MYGUI_WINDOW_H__
00024 #define __MYGUI_WINDOW_H__
00025 
00026 #include "MyGUI_Prerequest.h"
00027 #include "MyGUI_Widget.h"
00028 #include "MyGUI_EventPair.h"
00029 #include "MyGUI_ControllerFadeAlpha.h"
00030 
00031 namespace MyGUI
00032 {
00033 
00034     // OBSOLETE
00035     typedef delegates::CDelegate2<Widget*, const std::string&> EventHandle_WidgetString;
00036     typedef delegates::CDelegate2<Window*, const std::string&> EventHandle_WindowPtrCStringRef;
00037     typedef delegates::CDelegate1<Window*> EventHandle_WindowPtr;
00038 
00039     class MYGUI_EXPORT Window :
00040         public Widget
00041     {
00042         MYGUI_RTTI_DERIVED( Window )
00043 
00044     public:
00045         Window();
00046 
00048         virtual void setVisible(bool _value);
00049 
00051         void setVisibleSmooth(bool _value);
00053         void destroySmooth();
00054 
00056         void setAutoAlpha(bool _value);
00058         bool getAutoAlpha() { return mIsAutoAlpha; }
00059 
00061         virtual void setCaption(const UString& _value);
00063         virtual const UString& getCaption();
00064 
00066         Widget* getCaptionWidget() { return mWidgetCaption; }
00067 
00069         void setMinSize(const IntSize& _value);
00071         void setMinSize(int _width, int _height) { setMinSize(IntSize(_width, _height)); }
00073         IntSize getMinSize();
00074 
00076         void setMaxSize(const IntSize& _value);
00078         void setMaxSize(int _width, int _height) { setMaxSize(IntSize(_width, _height)); }
00080         IntSize getMaxSize();
00081 
00083         virtual void setPosition(const IntPoint& _value);
00085         virtual void setSize(const IntSize& _value);
00087         virtual void setCoord(const IntCoord& _value);
00088 
00090         void setPosition(int _left, int _top) { setPosition(IntPoint(_left, _top)); }
00092         void setSize(int _width, int _height) { setSize(IntSize(_width, _height)); }
00094         void setCoord(int _left, int _top, int _width, int _height) { setCoord(IntCoord(_left, _top, _width, _height)); }
00095 
00097         bool getSnap() { return mSnap; }
00099         void setSnap(bool _value) { mSnap = _value; }
00100 
00102         virtual void setProperty(const std::string& _key, const std::string& _value);
00103 
00104     /*event:*/
00110         EventPair<EventHandle_WidgetString, EventHandle_WindowPtrCStringRef> eventWindowButtonPressed;
00111 
00116         EventPair<EventHandle_WidgetVoid, EventHandle_WindowPtr> eventWindowChangeCoord;
00117 
00118     /*internal:*/
00119         virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
00120 
00121     /*obsolete:*/
00122 #ifndef MYGUI_DONT_USE_OBSOLETE
00123 
00124         MYGUI_OBSOLETE("use : void Widget::setCoord(const IntCoord& _coord)")
00125         void setPosition(const IntCoord& _coord) { setCoord(_coord); }
00126         MYGUI_OBSOLETE("use : void Widget::setCoord(int _left, int _top, int _width, int _height)")
00127         void setPosition(int _left, int _top, int _width, int _height) { setCoord(_left, _top, _width, _height); }
00128         MYGUI_OBSOLETE("use : void setVisibleSmooth(bool _visible)")
00129         void showSmooth(bool _reset = false) { setVisibleSmooth(true); }
00130         MYGUI_OBSOLETE("use : void setVisibleSmooth(bool _visible)")
00131         void hideSmooth() { setVisibleSmooth(false); }
00132         MYGUI_OBSOLETE("use : void setMinSize(const IntSize& _min) , void setMaxSize(const IntSize& _min)")
00133         void setMinMax(const IntRect& _minmax) { setMinSize(_minmax.left, _minmax.top); setMaxSize(_minmax.right, _minmax.bottom); }
00134         MYGUI_OBSOLETE("use : void setMinSize(const IntSize& _min) , void setMaxSize(const IntSize& _min)")
00135         void setMinMax(int _min_w, int _min_h, int _max_w, int _max_h) { setMinSize(_min_w, _min_h); setMaxSize(_max_w, _max_h); }
00136         MYGUI_OBSOLETE("use : IntSize getMinSize() , IntSize getMaxSize()")
00137         IntRect getMinMax() { return IntRect(getMinSize().width, getMinSize().height, getMaxSize().width, getMaxSize().height); }
00138 
00139 #endif // MYGUI_DONT_USE_OBSOLETE
00140 
00141     protected:
00142         virtual ~Window();
00143 
00144         void baseChangeWidgetSkin(ResourceSkin* _info);
00145 
00146         // переопределяем для присвоению клиенту
00147         virtual Widget* baseCreateWidget(WidgetStyle _style, const std::string& _type, const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _layer, const std::string& _name);
00148 
00149         void onMouseChangeRootFocus(bool _focus);
00150         void onKeyChangeRootFocus(bool _focus);
00151         void onMouseDrag(int _left, int _top);
00152         void onMouseButtonPressed(int _left, int _top, MouseButton _id);
00153 
00154         void notifyMousePressed(MyGUI::Widget* _sender, int _left, int _top, MouseButton _id);
00155         void notifyPressedButtonEvent(MyGUI::Widget* _sender);
00156         void notifyMouseDrag(MyGUI::Widget* _sender, int _left, int _top);
00157 
00158         // просто обновляет альфу взависимости от флагов
00159         void updateAlpha();
00160 
00161         void animateStop(Widget* _widget);
00162 
00163     private:
00164         void initialiseWidgetSkin(ResourceSkin* _info);
00165         void shutdownWidgetSkin();
00166 
00167         float getAlphaVisible();
00168         void getSnappedCoord(IntCoord& _coord);
00169 
00170         ControllerFadeAlpha* createControllerFadeAlpha(float _alpha, float _coef, bool _enable);
00171 
00172     private:
00173         Widget* mWidgetCaption;
00174 
00175         // размеры окна перед началом его изменений
00176         IntCoord mPreActionCoord;
00177 
00178         // наши главные фокусы
00179         bool mMouseRootFocus;
00180         bool mKeyRootFocus;
00181 
00182         // автоматическое или ручное управление альфой
00183         bool mIsAutoAlpha;
00184 
00185         // минимальные и максимальные размеры окна
00186         IntRect mMinmax;
00187 
00188         bool mSnap; // прилеплять ли к краям
00189 
00190         IntCoord mCurrentActionScale;
00191         bool mAnimateSmooth;
00192 
00193     };
00194 
00195 } // namespace MyGUI
00196 
00197 #endif // __MYGUI_WINDOW_H__