00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 #ifndef GCN_WIDGET_HPP
00056 #define GCN_WIDGET_HPP
00057
00058 #include <list>
00059 #include <string>
00060
00061 #include "guichan/actionlistener.h"
00062 #include "guichan/color.h"
00063 #include "guichan/defaultfont.h"
00064 #include "guichan/font.h"
00065 #include "guichan/graphics.h"
00066 #include "guichan/keyinput.h"
00067 #include "guichan/keylistener.h"
00068 #include "guichan/mouseinput.h"
00069 #include "guichan/mouselistener.h"
00070 #include "guichan/rectangle.h"
00071 #include "guichan/platform.h"
00072
00073 namespace gcn
00074 {
00075
00076
00077
00078 class FocusHandler;
00079
00080
00081
00082
00083 class BasicContainer;
00084
00093 class GCN_CORE_DECLSPEC Widget
00094 {
00095 public:
00101 Widget();
00102
00106 virtual ~Widget();
00107
00117 virtual void draw(Graphics* graphics) = 0;
00118
00127 virtual void drawBorder(Graphics* graphics) { }
00128
00135 virtual void logic() { }
00136
00143 virtual BasicContainer* getParent() const;
00144
00150 virtual void setWidth(int width);
00151
00157 virtual int getWidth() const;
00158
00164 virtual void setHeight(int height);
00165
00171 virtual int getHeight() const;
00172
00179 virtual void setSize(int width, int height);
00180
00186 virtual void setX(int x);
00187
00193 virtual int getX() const;
00194
00200 virtual void setY(int y);
00201
00207 virtual int getY() const;
00208
00215 virtual void setPosition(int x, int y);
00216
00222 virtual void setDimension(const Rectangle& dimension);
00223
00232 virtual void setBorderSize(unsigned int borderSize);
00233
00242 virtual unsigned int getBorderSize() const;
00243
00249 virtual const Rectangle& getDimension() const;
00250
00256 virtual void setFocusable(bool focusable);
00257
00263 virtual bool isFocusable() const;
00264
00270 virtual bool hasFocus() const;
00271
00278 virtual void setEnabled(bool enabled);
00279
00285 virtual bool isEnabled() const;
00286
00290 virtual void lostFocus() { setDirty(true); };
00291
00295 virtual void gotFocus() { setDirty(true); };
00296
00302 virtual bool hasMouse() const;
00303
00309 virtual void setVisible(bool visible);
00310
00316 virtual bool isVisible() const;
00317
00324 virtual void setBaseColor(const Color& color);
00325
00331 virtual const Color& getBaseColor() const;
00332
00338 virtual void setForegroundColor(const Color& color);
00339
00345 virtual const Color& getForegroundColor() const;
00346
00352 virtual void setBackgroundColor(const Color& color);
00353
00359 virtual const Color& getBackgroundColor() const;
00360
00366 virtual void setDisabledColor(const Color& color);
00367
00373 virtual const Color& getDisabledColor() const;
00374
00384 virtual void _mouseInputMessage(const MouseInput& mouseInput);
00385
00395 virtual bool _keyInputMessage(const KeyInput& keyInput);
00396
00400 virtual void hotKeyPress() {}
00401
00405 virtual void hotKeyRelease() {}
00406
00414 virtual void _mouseInMessage();
00415
00423 virtual void _mouseOutMessage();
00424
00429 virtual void requestFocus();
00430
00434 virtual void requestMoveToTop();
00435
00439 virtual void requestMoveToBottom();
00440
00450 virtual void _setFocusHandler(FocusHandler* focusHandler);
00451
00461 virtual FocusHandler* _getFocusHandler();
00462
00470 virtual void addActionListener(ActionListener* actionListener);
00471
00477 virtual void removeActionListener(ActionListener* actionListener);
00478
00485 virtual void addMouseListener(MouseListener* mouseListener);
00486
00492 virtual void removeMouseListener(MouseListener* mouseListener);
00493
00500 virtual void addKeyListener(KeyListener* keyListener);
00501
00507 virtual void removeKeyListener(KeyListener* keyListener);
00508
00520 virtual void setEventId(const std::string& eventId);
00521
00527 virtual const std::string& getEventId() const;
00528
00535 virtual void getAbsolutePosition(int& x, int& y) const;
00536
00546 virtual void _setParent(BasicContainer* parent);
00547
00556 Font *getFont() const;
00557
00563 static void setGlobalFont(Font* font);
00564
00570 virtual void setFont(Font* font);
00571
00577 virtual void fontChanged() { }
00578
00582 virtual int getHotKey() const { return mHotKey; }
00583
00587 virtual void setHotKey(const int key);
00588 virtual void setHotKey(const char *key);
00589
00596 static bool widgetExists(const Widget* widget);
00597
00606 virtual bool isTabInEnabled() const;
00607
00616 virtual void setTabInEnabled(bool enabled);
00617
00626 virtual bool isTabOutEnabled() const;
00627
00636 virtual void setTabOutEnabled(bool enabled);
00637
00645 virtual bool isDragged() const;
00646
00654 virtual void requestModalFocus();
00655
00660 virtual void releaseModalFocus();
00661
00665 virtual bool hasModalFocus() const;
00666
00667 virtual void setDirty(bool dirty);
00668 virtual bool getDirty() const;
00669
00670
00671 protected:
00675 void generateAction();
00676
00677 typedef std::list<MouseListener*> MouseListenerList;
00678 MouseListenerList mMouseListeners;
00679 typedef MouseListenerList::iterator MouseListenerIterator;
00680
00681 typedef std::list<KeyListener*> KeyListenerList;
00682 KeyListenerList mKeyListeners;
00683 typedef KeyListenerList::iterator KeyListenerIterator;
00684
00685 typedef std::list<ActionListener*> ActionListenerList;
00686 ActionListenerList mActionListeners;
00687 typedef ActionListenerList::iterator ActionListenerIterator;
00688
00689 Color mForegroundColor;
00690 Color mBackgroundColor;
00691 Color mBaseColor;
00692 Color mDisabledColor;
00693 FocusHandler* mFocusHandler;
00694 BasicContainer* mParent;
00695 Rectangle mDimension;
00696 unsigned int mBorderSize;
00697 std::string mEventId;
00698 int mClickTimeStamp;
00699 int mClickCount;
00700 int mClickButton;
00701 bool mHasMouse;
00702 bool mFocusable;
00703 bool mVisible;
00704 bool mTabIn;
00705 bool mTabOut;
00706 bool mEnabled;
00707
00708 Font* mCurrentFont;
00709 int mHotKey;
00710 static DefaultFont mDefaultFont;
00711 static Font* mGlobalFont;
00712 static std::list<Widget*> mWidgets;
00713 bool mDirty;
00714 };
00715 }
00716
00717 #endif // end GCN_WIDGET_HPP
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731