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