ocobserv.h

Go to the documentation of this file.
00001 #ifndef ocobserve_h
00002 #define ocobserve_h
00003 
00004 #include <InterViews/observe.h>
00005 
00006 struct Object;
00007 class cTemplate;
00008 
00009 // For an Observer watching a hoc Object
00010 // when the last ref disappears, disconnect is called on the Observer
00011 // Some objects may be written so that update gets called  on the Observer
00012 
00013 extern "C" {
00014    void hoc_obj_notify(Object* ob);
00015 }
00016 
00017 class ObjObservable : public Observable {
00018 public:
00019    static void Attach(Object*, Observer*);
00020    static void Detach(Object*, Observer*);
00021    virtual ~ObjObservable();
00022    
00023    Object* object() { return ob_; }
00024 private:
00025    ObjObservable(Object*);
00026 private:
00027    Object* ob_;
00028 };
00029 
00030 // For an Observer watching a cTemplate
00031 
00032 extern "C" {
00033    void hoc_template_notify(Object*, int message);
00034 }
00035 
00036 class ClassObservable : public Observable {
00037 public:
00038    // only the first two guarantee an update on the Observer
00039    enum {Delete, Create, Changed};
00040 
00041    static void Attach(cTemplate*, Observer*);
00042    static void Detach(cTemplate*, Observer*);
00043    virtual ~ClassObservable();
00044    
00045    cTemplate* ctemplate() { return ct_; }
00046    Object* object() { return ob_;}
00047    int message() { return message_;}
00048 private:
00049    friend void hoc_template_notify(Object*, int);
00050    ClassObservable(cTemplate*);
00051    void attach(Observer*);
00052    void detach(Observer*);
00053 private: 
00054    cTemplate* ct_;
00055    Object* ob_;
00056    int message_;
00057    int cnt_;
00058 };
00059 
00060 #endif
Generated on Mon Jun 13 08:10:24 2011 for NEURON by  doxygen 1.6.3