00001 #ifndef _AMIGA_WINDOW_H_ 00002 #define _AMIGA_WINDOW_H_ 00003 00004 #include <nds.h> 00005 #include "window.h" 00006 #include "gadgeteventhandler.h" 00007 #include "gadgetstyle.h" 00008 #include "woopsistring.h" 00009 00010 namespace WoopsiUI { 00011 00012 class WindowBorderButton; 00013 00019 class AmigaWindow : public Window, public GadgetEventHandler { 00020 00021 public: 00022 00026 enum AmigaWindowFlagType { 00027 AMIGA_WINDOW_SHOW_CLOSE = 0x0001, 00028 AMIGA_WINDOW_SHOW_DEPTH = 0x0002 00029 }; 00030 00034 typedef struct { 00035 u8 showCloseButton : 1; 00036 u8 showDepthButton : 1; 00037 } AmigaWindowFlags; 00038 00053 AmigaWindow(s16 x, s16 y, u16 width, u16 height, const WoopsiString& title, u32 flags, u32 windowFlags, GadgetStyle* style = NULL); 00054 00059 virtual void setBorderless(bool isBorderless); 00060 00065 virtual void handleReleaseEvent(const GadgetEventArgs& e); 00066 00071 virtual void showCloseButton(); 00072 00077 virtual void showDepthButton(); 00078 00083 virtual void hideCloseButton(); 00084 00089 virtual void hideDepthButton(); 00090 00095 virtual inline const bool hasCloseButton() const { return _windowFlags.showCloseButton; }; 00096 00101 virtual inline const bool hasDepthButton() const { return _windowFlags.showDepthButton; }; 00102 00103 protected: 00104 AmigaWindowFlags _windowFlags; 00106 WindowBorderButton* _closeButton; 00107 WindowBorderButton* _depthButton; 00115 virtual void drawBorder(GraphicsPort* port); 00116 00122 virtual void onResize(u16 width, u16 height); 00123 00127 virtual void onFocus(); 00128 00132 virtual void onBlur(); 00133 00141 virtual void onClick(s16 x, s16 y); 00142 00146 virtual void createBorder(); 00147 00151 virtual void redrawBorder(); 00152 00156 virtual inline ~AmigaWindow() { } 00157 00161 inline AmigaWindow(const AmigaWindow& amigaWindow) : Window(amigaWindow) { }; 00162 }; 00163 } 00164 00165 #endif