00001 #ifndef QBWIDGET_H
00002 #define QBWIDGET_H
00003
00004 #include "QbIncludes.h"
00005 #include "QbUtility.h"
00006 #include "QbWidgetController.h"
00007 #include "QbFieldSensorList.h"
00008
00009 #include <cstdarg>
00010
00011 class QbWidget;
00012 typedef void QbCallback(void * data, QbWidget * widget);
00013
00014 class QbWidget : public SoSeparator {
00015 SO_NODE_ABSTRACT_HEADER(QbWidget);
00016 typedef SoSeparator inherited;
00017 friend class QbWidgetController;
00018 friend class QbBox;
00019 public:
00020 static void initClass(void);
00021 QbWidget(void);
00022 ~QbWidget(void);
00023
00024
00025
00026
00027
00028
00029 SoSFVec3f position;
00030 SoSFVec3f center;
00031
00032 SoSFVec2f size;
00033 SoSFFloat width;
00034 SoSFFloat height;
00035
00036 SoSFBool fixedSize;
00037
00038
00039 SoSFVec3f topLeft;
00040 SoSFVec3f topRight;
00041 SoSFVec3f bottomLeft;
00042 SoSFVec3f bottomRight;
00043 SoSFVec3f left;
00044 SoSFVec3f right;
00045 SoSFVec3f top;
00046 SoSFVec3f bottom;
00047
00048 SoSFBool captureEvents;
00049 SoSFTrigger click;
00050 SoSFUInt32 keyDown;
00051 SoSFUInt32 keyUp;
00052 SoSFShort mouseDown;
00053 SoSFShort mouseUp;
00054 SoSFBool hover;
00055 SoSFVec2s mouseMove;
00056 SoSFBool focus;
00057
00058 QbFieldSensorList sensors;
00059
00060
00061
00062
00063 static QbWidget * getLastWidgetInPath(SoPath *path);
00064
00065
00066
00067 QbWidgetController * getWidgetController();
00068
00069 virtual void notify(SoNotList * list);
00070
00071 protected:
00072
00073 virtual void setWidgetController(QbWidgetController * controller);
00074 const SbViewportRegion getViewportRegion();
00075
00076
00077
00078
00079
00080
00081
00082 virtual void doClick();
00083 virtual void doClickCancel();
00084 virtual void doKeyDown(const SoKeyboardEvent::Key key);
00085 virtual void doKeyUp(const SoKeyboardEvent::Key key);
00086 virtual void doMouseDown(const SoMouseButtonEvent::Button button);
00087 virtual void doMouseUp(const SoMouseButtonEvent::Button button);
00088 virtual void doMouseEnter();
00089 virtual void doMouseExit();
00090 virtual void doMouseMove(SbVec2s position);
00091 virtual void doFocus();
00092 virtual void doUnFocus();
00093 virtual void doResize(const SbVec2f size);
00094 virtual void doPositionChange(const SbVec3f position);
00095
00096 SoTranslation * positionTranslation;
00097 SoSeparator * topSeparator;
00098
00099 private:
00100 QbWidgetController * widgetController;
00101 SoInput input;
00102 SoNode * modelFocus;
00103 };
00104
00105
00106 inline QbWidgetController * QbWidget::getWidgetController () {
00107 return this->widgetController;
00108 }
00109
00110 #define IS_QB_WIDGET(_node_) _node_->getTypeId().isDerivedFrom(QbWidget::getClassTypeId())
00111 #define QB_WIDGET(_node_) dynamic_cast<QbWidget*>(_node_)
00112
00113 #endif