| #pragma once |
| |
| #ifndef TW_INCLUDED |
| #define TW_INCLUDED |
| |
| #include "traster.h" |
| |
| #undef DVAPI |
| #undef DVVAR |
| #ifdef TWIN_EXPORTS |
| #define DVAPI DV_EXPORT_API |
| #define DVVAR DV_EXPORT_VAR |
| #else |
| #define DVAPI DV_IMPORT_API |
| #define DVVAR DV_IMPORT_VAR |
| #endif |
| |
| class TMouseEvent; |
| class TCursor; |
| class TDragDropListener; |
| |
| |
| |
| class DVAPI TGuiColor { |
| int m_red, m_green, m_blue; |
| |
| |
| |
| |
| |
| |
| public: |
| |
| |
| TGuiColor(int r, int g, int b); |
| TGuiColor(); |
| ~TGuiColor(); |
| |
| |
| |
| |
| |
| |
| |
| int red() const { return m_red; } |
| int green() const { return m_green; } |
| int blue() const { return m_blue; } |
| |
| void computeShade(int index, int &r, int &g, int &b) const; |
| |
| |
| |
| |
| |
| protected: |
| void initStockColor(); |
| }; |
| |
| |
| |
| class TWidgetImp; |
| |
| |
| |
| |
| class TWidget; |
| typedef std::vector<TWidget *> TWidgetList; |
| |
| |
| |
| class DVAPI TWidget |
| // : public TTarget, public TTimerTarget |
| { |
| public: |
| enum Alignment { BEGIN, CENTER, END }; |
| enum FocusHandling { IGNORE_FOCUS, STOP_FOCUS, LISTEN_TO_FOCUS }; |
| |
| protected: |
| TRect m_placement; |
| int m_xoff, m_yoff; |
| |
| bool m_mapped; |
| bool m_hidden; |
| bool m_childrenChanged; |
| |
| |
| |
| TWidget *m_parent, *m_sonKeeper; |
| std::string m_name, m_contextHelpReference; |
| std::wstring m_shortHelp, m_longHelp; |
| |
| int m_cursorIdx; |
| |
| TWidgetList *m_sons; |
| TWidgetImp *m_imp; |
| |
| friend class TWidgetImp; |
| |
| TGuiColor m_backgroundColor, m_foregroundColor; |
| bool m_popupMode, m_menuMode, m_fixedSize, m_fullColor, m_openGL; |
| bool m_enabled, m_menuRelated; |
| |
| TDragDropListener *m_dragDropListener; |
| |
| std::string m_fontName; |
| int m_fontSize; |
| int m_fontOrientation; |
| |
| static TWidget *m_selectionOwner; |
| static TWidget *m_focusOwner; |
| |
| |
| private: |
| TWidget(const TWidget &); |
| TWidget &operator=(const TWidget &); |
| |
| protected: |
| virtual void create(); |
| virtual void setDecoration(); |
| virtual void destroyImp(); |
| void createSons(); |
| |
| public: |
| TWidget(TWidget *parent = 0, std::string name = "unnamed"); |
| virtual ~TWidget(); |
| |
| |
| |
| |
| const TRect &getGeometry() const { return m_placement; } |
| TPoint getPosition() const { return m_placement.getP00(); } |
| virtual TPoint getHotSpot() const { return TPoint(0, 0); } |
| TDimension getSize() const { return m_placement.getSize(); } |
| TRect getBounds() const { return TRect(TPoint(), getSize()); } |
| int getLx() const { return m_placement.getLx(); } |
| int getLy() const { return m_placement.getLy(); } |
| |
| inline void setPlacement(const TRect &rect) { m_placement = rect; } |
| |
| inline void setGeometry(int x0, int y0, int x1, int y1) { |
| setGeometry(TRect(x0, y0, x1, y1)); |
| } |
| |
| virtual void setGeometry(const TRect &rect); |
| void setGeometry(const TPoint &pos, const TDimension &size) { |
| setGeometry(TRect(pos, size)); |
| } |
| inline void setSize(int w, int h) { |
| setGeometry(getPosition(), TDimension(w, h)); |
| } |
| |
| inline void setSize(const TDimension &size) { setSize(size.lx, size.ly); } |
| inline void setPosition(int x, int y) { |
| setGeometry(TPoint(x, y), getSize()); |
| } |
| inline void setPosition(const TPoint &pt) { setGeometry(pt, getSize()); } |
| inline bool contains(int x, int y) const { return contains(TPoint(x, y)); } |
| inline bool contains(const TPoint &p) const { |
| return m_placement.contains(p); |
| } |
| |
| TPoint getScreenPosition() const; |
| |
| |
| |
| |
| inline TWidget *getParent() const { return m_parent; } |
| inline std::string getName() const { return m_name; } |
| virtual void setParent(TWidget *p); |
| virtual void addSon(TWidget *son); |
| virtual void removeSon(TWidget *son); |
| inline int getSonCount() const { return m_sons->size(); } |
| inline TWidget *getSon(int i) const { |
| return i < 0 || i >= (int)(m_sons->size()) ? 0 : (*m_sons)[i]; |
| } |
| |
| |
| |
| |
| std::wstring getLongHelp() const; |
| std::wstring getShortHelp() const; |
| |
| void setHelp(std::string shortHelp, std::string longHelp); |
| void setHelp(std::wstring shortHelp, std::wstring longHelp); |
| |
| virtual std::string getContextHelpReference(const TPoint &) { |
| return m_contextHelpReference; |
| } |
| |
| void setContextHelpReference(std::string s) { m_contextHelpReference = s; } |
| |
| |
| |
| virtual std::wstring getTooltipString(const TPoint &) { |
| return getShortHelp(); |
| } |
| |
| |
| |
| |
| inline bool isHidden() const { return m_hidden; } |
| inline bool isMapped() const { return m_mapped; } |
| |
| void enable(); |
| void disable(); |
| inline bool isEnabled() const { return m_enabled; } |
| |
| void show(); |
| void hide(); |
| |
| |
| virtual void map(); |
| virtual void unmap(); |
| |
| virtual void doModal(); |
| |
| virtual void undock(); |
| virtual void dock(TWidget *parent); |
| virtual TWidget *findSubWidget(const TPoint &pt); |
| |
| virtual void repaint(); |
| |
| void sendRepaint() { sendRepaint(getBounds()); } |
| void sendRepaint(const TRect &); |
| |
| virtual void paste(); |
| |
| virtual void startDragAndDrop(std::string stringToDrop); |
| |
| typedef unsigned int CursorIndex; |
| |
| inline CursorIndex getCurrentCursor() { return m_cursorIdx; } |
| void changeCursor(CursorIndex new_cur); |
| |
| TWidgetImp *getImp() { return m_imp; } |
| |
| void startTimer(TINT32 period); |
| void stopTimer(); |
| |
| virtual void getSelection(); |
| |
| virtual void onFocusChange(bool on); |
| |
| virtual bool getFocus() { return false; } |
| virtual void circulateFocus(); |
| |
| virtual void copyRegion(const TPoint &dst, const TPoint &src, |
| const TDimension &size); |
| |
| |
| |
| |
| void flush(); |
| |
| virtual void draw() {} |
| virtual void invalidate(); |
| virtual void invalidate(const TRect &rect); |
| |
| void getClipRect(TRect &rect); |
| |
| virtual void clear(); |
| |
| virtual void drawText(const TPoint &p, std::string text); |
| virtual void drawText(const TPoint &p, std::wstring text); |
| |
| virtual void drawText(const TRect &r, std::string text, |
| Alignment alignment = CENTER); |
| virtual void drawText(const TRect &r, std::wstring text, |
| Alignment alignment = CENTER); |
| virtual void drawMultiLineText(const TRect &r, std::string text); |
| virtual void drawMultiLineText(const TRect &r, std::wstring text); |
| |
| virtual TDimension getTextSize(std::string text); |
| virtual TDimension getTextSize(std::wstring text); |
| |
| virtual TDimension getTextSize(std::string text, std::string font, |
| int fontSize); |
| virtual TDimension getTextSize(std::wstring text, std::string font, |
| int fontSize); |
| |
| inline void drawPoint(int x, int y) { drawLine(x, y, x, y); } |
| |
| virtual void drawLine(const TPoint &p0, const TPoint &p1); |
| inline void drawLine(int x0, int y0, int x1, int y1) { |
| drawLine(TPoint(x0, y0), TPoint(x1, y1)); |
| } |
| virtual void drawVLine(const TPoint &p0, int length) { |
| drawLine(p0, p0 + TPoint(0, length - 1)); |
| } |
| virtual void drawHLine(const TPoint &p0, int length) { |
| drawLine(p0, p0 + TPoint(length - 1, 0)); |
| } |
| |
| virtual void drawDottedLine(const TPoint &p0, const TPoint &p1); |
| inline void drawDottedLine(int x0, int y0, int x1, int y1) { |
| drawDottedLine(TPoint(x0, y0), TPoint(x1, y1)); |
| } |
| |
| virtual void drawRect(const TRect &); |
| virtual void fillRect(const TRect &); |
| |
| virtual void drawRect(int x0, int y0, int x1, int y1) { |
| drawRect(TRect(x0, y0, x1, y1)); |
| } |
| virtual void fillRect(int x0, int y0, int x1, int y1) { |
| fillRect(TRect(x0, y0, x1, y1)); |
| } |
| |
| virtual void draw3DRect(const TRect &, bool pressed = false, int border = 1); |
| virtual void fill3DRect(const TRect &, bool pressed = false, int border = 1); |
| |
| virtual void drawDottedRect(const TRect &); |
| virtual void drawDottedRect(int x0, int y0, int x1, int y1) { |
| drawDottedRect(TRect(x0, y0, x1, y1)); |
| } |
| |
| virtual void fillPolygon(const TGuiColor &fillColor, |
| const TGuiColor &borderColor, const TPoint points[], |
| int pointCount); |
| |
| virtual void clear(const TRect &); |
| |
| virtual void drawImage(int index, const TPoint &); |
| |
| virtual void setColor(const TGuiColor &, int shade = 0); |
| virtual void setBackgroundColor(const TGuiColor &); |
| |
| TGuiColor getBackgroundColor() const { return m_backgroundColor; } |
| TGuiColor getForegroundColor() const { return m_foregroundColor; } |
| |
| static const TGuiColor White; |
| static const TGuiColor Black; |
| |
| virtual void rectwrite(const TRaster32P &, const TPoint &); |
| |
| virtual void setFontSize(int size); |
| virtual void setFont(std::string name, int size = 0, int orientation = 0); |
| |
| |
| |
| |
| |
| virtual void enter(const TPoint &) {} |
| virtual void leave(const TPoint &) {} |
| |
| virtual void mouseMove(const TMouseEvent &) {} |
| virtual void leftButtonDown(const TMouseEvent &) {} |
| virtual void leftButtonDrag(const TMouseEvent &) {} |
| virtual void leftButtonUp(const TMouseEvent &) {} |
| virtual void rightButtonDown(const TMouseEvent &) {} |
| virtual void rightButtonDrag(const TMouseEvent &) {} |
| virtual void rightButtonUp(const TMouseEvent &) {} |
| virtual void middleButtonDown(const TMouseEvent &) {} |
| virtual void middleButtonDrag(const TMouseEvent &) {} |
| virtual void middleButtonUp(const TMouseEvent &) {} |
| virtual void leftButtonDoubleClick(const TMouseEvent &) {} |
| virtual void middleButtonDoubleClick(const TMouseEvent &) {} |
| virtual void rightButtonDoubleClick(const TMouseEvent &) {} |
| |
| virtual void mouseWheel(const TMouseEvent &, int wheel) {} |
| |
| virtual void keyDown(int, TUINT32, const TPoint &) {} |
| |
| virtual void configureNotify(const TDimension &) {} |
| |
| virtual void onPaste(std::string) {} |
| |
| |
| |
| virtual void onDrop(std::string) {} |
| |
| virtual std::string getToolTip() { return ""; } |
| |
| virtual void onTimer(int) {} |
| |
| virtual void onChildrenChanged() {} |
| |
| virtual bool onNcPaint(bool is_active, const TDimension &window_size, |
| const TRect &caption_rect); |
| |
| public: |
| static void setFocusOwner(TWidget *w); |
| static TWidget *getFocusOwner(); |
| |
| virtual FocusHandling getFocusHandling() const { return IGNORE_FOCUS; } |
| |
| static void placeInteractively(TRect &); |
| |
| |
| virtual void maximize(TWidget *) {} |
| virtual bool isMaximized(TWidget *) { return false; } |
| |
| |
| |
| |
| |
| void enableDropTarget(TDragDropListener *dragDropListener); |
| TDragDropListener *getDragDropListener() const { return m_dragDropListener; } |
| |
| static void yield(); |
| static void setMode(int mode); |
| |
| |
| TPoint getAbsolutePosition() const; |
| static TPoint getMouseAbsolutePosition(); |
| TPoint getMouseRelativePosition() const; |
| |
| |
| bool isMenuRelated() const { return m_menuRelated; } |
| |
| |
| |
| static void processAllPendingMessages(); |
| |
| static void processAllPendingMessages2(); |
| |
| |
| |
| |
| |
| |
| static TDimension getScreenSize(); |
| static void getScreenPlacement(std::vector<TRectI> &); |
| }; |
| |
| #endif |