00001 #ifndef _SKINNED_WINDOW_H_
00002 #define _SKINNED_WINDOW_H_
00003
00004 #include <nds.h>
00005 #include "window.h"
00006 #include "skin.h"
00007 #include "gadgeteventhandler.h"
00008
00009 namespace WoopsiUI {
00010
00011 class SkinnedWindowDepthButton;
00012 class SkinnedWindowCloseButton;
00013 class SkinnedWindowBorderBottom;
00014 class SkinnedWindowBorderLeft;
00015 class SkinnedWindowBorderRight;
00016 class SkinnedWindowBorderTop;
00017
00018 class SkinnedWindow : public Window, public GadgetEventHandler {
00019
00020 public:
00021
00025 enum SkinnedWindowFlagType {
00026 SKINNED_WINDOW_SHOW_CLOSE = 0x0001,
00027 SKINNED_WINDOW_SHOW_DEPTH = 0x0002
00028 };
00029
00033 typedef struct {
00034 u8 showCloseButton : 1;
00035 u8 showDepthButton : 1;
00036 } SkinnedWindowFlags;
00037
00038 SkinnedWindow(s16 x, s16 y, u16 width, u16 height, const char* title, u32 flags, u32 windowFlags, WindowSkin* skin);
00039
00040 virtual void setBorderless(bool isBorderless);
00041
00042 virtual const u8 getBorderSize() const;
00043 virtual const u8 getTitleHeight() const;
00044
00045 virtual void getClientRect(Rect& rect) const;
00046
00047 virtual bool click(s16 x, s16 y);
00048 virtual bool focus();
00049 virtual bool blur();
00050
00051 virtual bool resize(u16 width, u16 height);
00052 virtual void handleReleaseEvent(const GadgetEventArgs& e);
00053 virtual void handleClickEvent(const GadgetEventArgs& e);
00054 virtual void handleDragEvent(const GadgetEventArgs& e);
00055 virtual void handleReleaseOutsideEvent(const GadgetEventArgs& e);
00056
00062 virtual void showCloseButton();
00063
00069 virtual void showDepthButton();
00070
00076 virtual void hideCloseButton();
00077
00083 virtual void hideDepthButton();
00084
00089 virtual inline const bool hasCloseButton() const { return _windowFlags.showCloseButton; };
00090
00095 virtual inline const bool hasDepthButton() const { return _windowFlags.showDepthButton; };
00096
00097 protected:
00098 const WindowSkin* _skin;
00099 SkinnedWindowFlags _windowFlags;
00101 SkinnedWindowBorderTop* _windowBorderTop;
00102 SkinnedWindowBorderLeft* _windowBorderLeft;
00103 SkinnedWindowBorderRight* _windowBorderRight;
00104 SkinnedWindowBorderBottom* _windowBorderBottom;
00105 SkinnedWindowCloseButton* _closeButton;
00106 SkinnedWindowDepthButton* _depthButton;
00107
00108 virtual void createBorder();
00109
00113 virtual inline ~SkinnedWindow() { };
00114
00118 inline SkinnedWindow(const SkinnedWindow& skinnedWindow) : Window(skinnedWindow) { };
00119 };
00120 }
00121
00122 #endif