vtkSlicerWidget.h

Go to the documentation of this file.
00001 /*=auto=========================================================================
00002 
00003   Portions (c) Copyright 2005 Brigham and Women's Hospital (BWH) All Rights Reserved.
00004 
00005   See Doc/copyright/copyright.txt
00006   or http://www.slicer.org/copyright/copyright.txt for details.
00007 
00008   Program:   3D Slicer
00009   Module:    $RCSfile: vtkSlicerNodeSelectorWidget.h,v $
00010   Date:      $Date: 2010-02-15 16:34:06 -0500 (Mon, 15 Feb 2010) $
00011   Version:   $Revision: 12141 $
00012 
00013 =========================================================================auto=*/
00014 
00019 //
00020 
00021 
00022 #ifndef __vtkSlicerWidget_h
00023 #define __vtkSlicerWidget_h
00024 
00025 #include "vtkCommand.h"
00026 #include "vtkCallbackCommand.h"
00027 #include "vtkUnsignedLongArray.h"
00028 #include "vtkKWObject.h"
00029 #include "vtkSlicerBaseGUIWin32Header.h"
00030 #include "vtkKWCompositeWidget.h"
00031 
00032 #include "vtkMRMLScene.h"
00033 #include "vtkMRMLNode.h"
00034 #include "vtkObserverManager.h"
00035 
00036 class vtkCallbackCommmand;
00037 
00038 //BTX
00039 
00040 #ifndef vtkSetMRMLNodeMacro
00041 #define vtkSetMRMLNodeMacro(node,value)  { \
00042   vtkObject *oldNode = (node); \
00043   this->MRMLObserverManager->SetObject ( vtkObjectPointer( &(node)), (value) ); \
00044   if ( oldNode != (node) ) \
00045     { \
00046     this->InvokeEvent (vtkCommand::ModifiedEvent); \
00047     } \
00048 };
00049 #endif
00050 
00051 #ifndef vtkSetAndObserveMRMLNodeMacro
00052 #define vtkSetAndObserveMRMLNodeMacro(node,value)  { \
00053   vtkObject *oldNode = (node); \
00054   this->MRMLObserverManager->SetAndObserveObject ( vtkObjectPointer( &(node) ), (value) ); \
00055   if ( oldNode != (node) ) \
00056     { \
00057     this->InvokeEvent (vtkCommand::ModifiedEvent); \
00058     } \
00059 };
00060 #endif
00061 
00062 #ifndef vtkSetAndObserveMRMLNodeEventsMacro
00063 #define vtkSetAndObserveMRMLNodeEventsMacro(node,value,events)  { \
00064   vtkObject *oldNode = (node); \
00065   this->MRMLObserverManager->SetAndObserveObjectEvents ( vtkObjectPointer( &(node)), (value), (events)); \
00066   if ( oldNode != (node) ) \
00067     { \
00068     this->InvokeEvent (vtkCommand::ModifiedEvent); \
00069     } \
00070 };
00071 #endif
00072 
00073 //ETX
00074 
00075 
00076 class VTK_SLICER_BASE_GUI_EXPORT vtkSlicerWidget : public vtkKWCompositeWidget
00077 {
00078   
00079 public:
00080   static vtkSlicerWidget* New(){return NULL;};
00081   vtkTypeRevisionMacro(vtkSlicerWidget,vtkKWCompositeWidget);
00082   void PrintSelf(ostream& os, vtkIndent indent);
00083   
00086   vtkGetObjectMacro ( MRMLScene, vtkMRMLScene );
00087   
00090   void SetMRMLScene ( vtkMRMLScene *mrml )
00091     {
00092     vtkObject *oldValue = this->MRMLScene;
00093     this->MRMLObserverManager->SetObject ( vtkObjectPointer( &this->MRMLScene), mrml );
00094     if ( oldValue != this->MRMLScene )
00095       {
00096       this->InvokeEvent (vtkCommand::ModifiedEvent);
00097       }
00098     }
00099 
00100   void SetAndObserveMRMLScene ( vtkMRMLScene *mrml )
00101     {
00102     vtkObject *oldValue = this->MRMLScene;
00103     this->MRMLObserverManager->SetAndObserveObject ( vtkObjectPointer( &this->MRMLScene), mrml );
00104     if ( oldValue != this->MRMLScene )
00105       {
00106       this->InvokeEvent (vtkCommand::ModifiedEvent);
00107       }
00108     }
00109 
00110   void SetAndObserveMRMLSceneEvents ( vtkMRMLScene *mrml, vtkIntArray *events )
00111     {
00112     vtkObject *oldValue = this->MRMLScene;
00113     this->MRMLObserverManager->SetAndObserveObjectEvents ( vtkObjectPointer( &this->MRMLScene), mrml, events );
00114     if ( oldValue != this->MRMLScene )
00115       {
00116       this->InvokeEvent (vtkCommand::ModifiedEvent);
00117       }
00118     }
00119   
00122   virtual void ProcessWidgetEvents ( vtkObject *vtkNotUsed(caller),
00123                                      unsigned long vtkNotUsed(event),
00124                                      void *vtkNotUsed(callData) ) { };
00125   
00128   virtual void ProcessMRMLEvents ( vtkObject *vtkNotUsed(caller),
00129                                    unsigned long vtkNotUsed(event),
00130                                    void *vtkNotUsed(callData) ) { };
00131 
00135   vtkGetMacro(InWidgetCallbackFlag, int);
00136   void SetInWidgetCallbackFlag (int flag) {
00137     this->InWidgetCallbackFlag = flag;
00138   }
00139   vtkGetMacro(InMRMLCallbackFlag, int);
00140   void SetInMRMLCallbackFlag (int flag) {
00141     this->InMRMLCallbackFlag = flag;
00142   }
00143 
00144 
00145 protected:
00146   vtkSlicerWidget();
00147   virtual ~vtkSlicerWidget();
00148 
00151   virtual void CreateWidget() {this->Superclass::CreateWidget();};
00152 
00153   vtkMRMLScene       *MRMLScene;
00154 
00155   vtkObserverManager *MRMLObserverManager;
00156 
00157   //BTX
00162   static void MRMLCallback( vtkObject *caller,
00163                             unsigned long eid, void *clientData, void *callData );
00164   static void WidgetCallback( vtkObject *caller,
00165                            unsigned long eid, void *clientData, void *callData );    
00166   //ETX
00167   
00170   vtkCallbackCommand *MRMLCallbackCommand;
00171   vtkCallbackCommand *GUICallbackCommand;
00172 
00175   int InWidgetCallbackFlag;
00176   int InMRMLCallbackFlag;
00177   
00178   vtkSlicerWidget(const vtkSlicerWidget&); 
00179   void operator=(const vtkSlicerWidget&); 
00180 };
00181 
00182 #endif
00183 

Generated on 6 Apr 2011 for Slicer3 by  doxygen 1.6.1