Changeset 161 for branches


Ignore:
Timestamp:
05/15/09 17:33:25 (3 years ago)
Author:
rkuck
Message:

Removed all Field callbacks except getter and setter

Location:
branches/turbo/avango-core
Files:
1 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • branches/turbo/avango-core/include/avango/Field.h

    r1 r161  
    6565  public: 
    6666 
    67     /** 
    68      * Field event base class passed to functions attached to field signals. 
    69      */ 
    7067    class Event 
    7168    { 
     
    9693      const Field *mField; 
    9794    }; 
    98  
    99     /** 
    100      * Event class for field change events. 
    101      */ 
    102     class ChangedEvent : public Event 
    103     { 
    104       friend class Field; 
    105  
    106     public: 
    107  
    108       /** 
    109        * Was the field change triggered from network or locally? 
    110        */ 
    111       bool getChangedFromNet() const { return mChangedFromNet; } 
    112  
    113       /** 
    114        * Returns the connected field which triggered this field change. 
    115        * Returns 0 if the field was not changed by a connection. 
    116        * \see FieldEvent::getField for notes about holding the field after 
    117        * the callback has returned. 
    118        */ 
    119       Field* getTriggeredFromField() const { return mTriggeredFromField; } 
    120  
    121     protected: 
    122       ChangedEvent(Field *field, bool changedFromNet, Field* triggeredFromField) : 
    123         Event(field), mChangedFromNet(changedFromNet), mTriggeredFromField(triggeredFromField) {} 
    124  
    125     private: 
    126       bool mChangedFromNet; 
    127       Field* mTriggeredFromField; 
    128     }; 
    129  
    130     /** 
    131      * Event class for field connect events. 
    132      */ 
    133     class ConnectedEvent : public Event 
    134     { 
    135       friend class Field; 
    136  
    137     public: 
    138  
    139       /** 
    140        * Get the field just connected to the originating field of the event. 
    141        * \see FieldEvent::getField for notes about holding the field after 
    142        * the callback has returned. 
    143        */ 
    144       Field* getConnectedField() const { return mConnectedField; } 
    145  
    146     protected: 
    147       ConnectedEvent(Field *field, Field *connectedField) : 
    148         Event(field), mConnectedField(connectedField) {} 
    149  
    150     private: 
    151       Field* mConnectedField; 
    152     }; 
    153  
    154     /** 
    155      * Event class for field disconnect events. 
    156      */ 
    157     class DisconnectedEvent : public Event 
    158     { 
    159       friend class Field; 
    160  
    161     public: 
    162  
    163       /** 
    164        * Get the fields just disconnected to the originating field of the event. 
    165        * \see FieldEvent::getField for notes about holding a field after 
    166        * the callback has returned. 
    167        */ 
    168       std::vector<Field*> getDisconnectedFields() const { return mDisconnectedFields; } 
    169  
    170     protected: 
    171       DisconnectedEvent(Field *field, std::vector<Field*> disconnectedFields) : 
    172         Event(field), mDisconnectedFields(disconnectedFields) {} 
    173  
    174     private: 
    175       std::vector<Field*> mDisconnectedFields; 
    176     }; 
    177  
    178  
    179     typedef boost::signal<void (const ChangedEvent&)> ChangedSignal; 
    180     typedef ChangedSignal::slot_type ChangedCallback; 
    181     typedef boost::signals::connection ChangedCallbackHandle; 
    182  
    183     typedef boost::signal<void (const ConnectedEvent&)> ConnectedSignal; 
    184     typedef ConnectedSignal::slot_type ConnectedCallback; 
    185     typedef boost::signals::connection ConnectedCallbackHandle; 
    186  
    187     typedef boost::signal<void (const DisconnectedEvent&)> DisconnectedSignal; 
    188     typedef DisconnectedSignal::slot_type DisconnectedCallback; 
    189     typedef boost::signals::connection DisconnectedCallbackHandle; 
    19095 
    19196    enum FieldChangeSource 
     
    371276 
    372277    /** 
    373      * Register callback invoked after a field change or field touch. 
    374      * The callback must take exactly one parameter of ChangedEvent. 
    375      */ 
    376     ChangedCallbackHandle addChangedCallback(const ChangedCallback& callback); 
    377  
    378     /** 
    379      * Remove previously registered field changed callback via its handle. 
    380      */ 
    381     void removeChangedCallback(const ChangedCallbackHandle& handle); 
    382  
    383     /** 
    384      * Register callback invoked after a field has been connected to this field. 
    385      * The callback must take exactly one parameter of ConnectedEvent. 
    386      */ 
    387     ConnectedCallbackHandle addConnectedCallback(const ConnectedCallback& callback); 
    388  
    389     /** 
    390      * Remove previously registered field ConnectedCallback via its handle. 
    391      */ 
    392     void removeConnectedCallback(const ConnectedCallbackHandle& handle); 
    393  
    394     /** 
    395      * Register callback invoked after a field has been disconnected from this field. 
    396      * The callback must take exactly one parameter of DisconnectedEvent. 
    397      */ 
    398     DisconnectedCallbackHandle addDisconnectedCallback(const DisconnectedCallback& callback); 
    399  
    400     /** 
    401      * Remove previously registered field DisconnectedCallback via its handle. 
    402      */ 
    403     void removeDisconnectedCallback(const DisconnectedCallbackHandle& handle); 
    404  
    405     /** 
    406278     * Create a new instance of same field type and same value. 
    407279     * This type is not added to any container or event handler. 
     
    441313    // disable copy construction 
    442314    Field(const Field&); 
    443  
    444     void containerFieldChanged(const ChangedEvent& event); 
    445  
    446     ChangedSignal mChangedSignal; 
    447     ConnectedSignal mConnectedSignal; 
    448     DisconnectedSignal mDisconnectedSignal; 
    449315 
    450316    FieldPtrSet mAuditors; 
  • branches/turbo/avango-core/include/avango/TimeSensor.h

    r1 r161  
    7171 
    7272    virtual void evaluate(); 
    73  
    74   private: 
    75  
    76     void referenceTimeChanged(const av::SFDouble::ChangedEvent& event); 
    77  
    7873  }; 
    7974 
  • branches/turbo/avango-core/src/avango/fields/Field.cpp

    r151 r161  
    182182 
    183183  // copy and reference auditors while in notify because the connection topology may change 
    184  
    185184  FieldPtrVec auditors; 
    186185  auditors.reserve(mAuditors.size()); 
     
    189188  FieldPtrVec::const_iterator current; 
    190189  FieldPtrVec::const_iterator past_of_end = auditors.end(); 
    191  
    192   // create references to field containers 
    193   std::vector<Link<FieldContainer> > auditor_containers; 
    194   auditor_containers.reserve(mAuditors.size()); 
    195   std::transform(auditors.begin(), auditors.end(), std::back_inserter(auditor_containers), 
    196                  boost::bind(&Field::getContainer, _1)); 
    197  
    198   // notify 
    199  
    200190  for (current = auditors.begin(); current != past_of_end; ++current) 
    201191  { 
     
    344334  if (notifyEnabled()) 
    345335  { 
    346     mChangedSignal(ChangedEvent(this, fromNet, triggeredFrom)); 
     336    mContainer->fieldChanged(*this, fromNet); 
    347337    notify(triggeredFrom); 
    348338    ContainerPool::notifyFieldHasChanged(this); 
     
    370360  mConnectedFrom.push_back(std::make_pair(field, dependent)); 
    371361  field->addAuditor(this); 
    372   mConnectedSignal(ConnectedEvent(this, field)); 
    373362 
    374363  ContainerPool::notifyConnect(this); 
     
    401390  // we can notice disconnects this way 
    402391  touch(); 
    403  
    404   mDisconnectedSignal(DisconnectedEvent(this, disconnected_fields)); 
    405392 
    406393  ContainerPool::notifyDisconnect(this); 
     
    453440  touch(); 
    454441 
    455   mDisconnectedSignal(DisconnectedEvent(this, std::vector<Field*>(1, field))); 
    456  
    457442  ContainerPool::notifyDisconnect(this); 
    458443} 
     
    505490 
    506491void 
    507 av::Field::containerFieldChanged(const ChangedEvent& event) 
    508 { 
    509   AV_ASSERT(this == event.getField()); 
    510   mContainer->fieldChanged(*(event.getField()), event.getChangedFromNet()); 
    511 } 
    512  
    513 void 
    514492av::Field::bind(av::FieldContainer* container, const std::string& name, bool owned) 
    515493{ 
     
    526504  unsigned int index = container->addField(this, name); 
    527505  setContainer(container, index, owned); 
    528   addChangedCallback(boost::bind(&Field::containerFieldChanged, this, _1)); 
    529506} 
    530507 
     
    708685} 
    709686 
    710 av::Field::ChangedCallbackHandle 
    711 av::Field::addChangedCallback(const ChangedCallback& callback) 
    712 { 
    713   return mChangedSignal.connect(callback); 
    714 } 
    715  
    716 void 
    717 av::Field::removeChangedCallback(const ChangedCallbackHandle& handle) 
    718 { 
    719   handle.disconnect(); 
    720 } 
    721  
    722 av::Field::ConnectedCallbackHandle 
    723 av::Field::addConnectedCallback(const ConnectedCallback& callback) 
    724 { 
    725   return mConnectedSignal.connect(callback); 
    726 } 
    727  
    728 void 
    729 av::Field::removeConnectedCallback(const ConnectedCallbackHandle& handle) 
    730 { 
    731   handle.disconnect(); 
    732 } 
    733  
    734 av::Field::DisconnectedCallbackHandle 
    735 av::Field::addDisconnectedCallback(const DisconnectedCallback& callback) 
    736 { 
    737   return mDisconnectedSignal.connect(callback); 
    738 } 
    739  
    740 void 
    741 av::Field::removeDisconnectedCallback(const DisconnectedCallbackHandle& handle) 
    742 { 
    743   handle.disconnect(); 
    744 } 
    745  
    746687void 
    747688av::Field::evaluateDependencies(void) 
  • branches/turbo/avango-core/src/avango/fields/tests/SConscript

    r1 r161  
    4242tests += avango_test_env.Alias('test-core-field-fields', test_fields, "${SOURCE.abspath}") 
    4343 
    44 test_field_callbacks = avango_test_env.Program('TestFieldCallbacks.cpp') 
    45 tests += avango_test_env.Alias('test-core-field-callbacks', test_field_callbacks, 
    46                                "${SOURCE.abspath}") 
    47  
    4844test_field_value_callbacks = avango_test_env.Program('TestFieldValueCallbacks.cpp') 
    4945tests += avango_test_env.Alias('test-core-field-value-callbacks', test_field_value_callbacks, 
  • branches/turbo/avango-core/src/avango/interface/TimeSensor.cpp

    r153 r161  
    7171  AV_FC_ADD_FIELD(Time, 0); 
    7272 
    73   ReferenceTime.addChangedCallback(boost::bind(&av::TimeSensor::referenceTimeChanged, this, _1)); 
    7473  alwaysEvaluate(true); 
    7574} 
     
    9493  RealTime.touch(); 
    9594} 
    96  
    97 void 
    98 av::TimeSensor::referenceTimeChanged(const av::SFDouble::ChangedEvent&) 
    99 { 
    100   Time.setValue(RealTime.getValue()-ReferenceTime.getValue()); 
    101 } 
  • branches/turbo/avango-core/src/avango/interface/tests/TestTimeSensor.cpp

    r1 r161  
    4040namespace 
    4141{ 
    42   double real_time = 0; 
    43  
    44   void realTimeChanged(const av::SFDouble::ChangedEvent& event) 
    45   { 
    46     real_time = dynamic_cast<const av::SFDouble*>(event.getField())->getValue(); 
    47     AV_ASSERT(real_time); 
    48     av::getRootLogger().info() << "real_time: " << real_time; 
    49   } 
    50  
    5142  TEST(TimeSensor) 
    5243  { 
    5344    av::TimeSensor::initClass(); 
    5445    av::Link<av::TimeSensor> time_sensor(new av::TimeSensor); 
    55     time_sensor->RealTime.addChangedCallback(&realTimeChanged); 
    5646    av::ApplicationInstance::get().evaluate(); 
     47    double real_time = time_sensor->RealTime.getValue(); 
    5748    CHECK(real_time > 0); 
    5849    double old_time = real_time; 
     
    6354#endif 
    6455    av::ApplicationInstance::get().evaluate(); 
     56    real_time = time_sensor->RealTime.getValue(); 
    6557    av::getRootLogger().info() << "real_time - old_time : " << real_time - old_time; 
    6658    CHECK(old_time < real_time); 
  • branches/turbo/avango-core/src/avango/nodes/tests/TestFieldConnectionChangeInNotify.cpp

    r155 r161  
    4343  public: 
    4444 
    45     MyObject(); 
    46     void valueChanged(const av::SFInt::ChangedEvent event); 
     45    MyObject() {} 
     46    MyObject(av::Field* field); 
     47    void fieldHasChanged(const av::Field& field); 
    4748 
     49  private: 
     50    av::Field* mOtherField; 
    4851  }; 
    4952 
     
    5962  } 
    6063 
    61   MyObject::MyObject() 
     64  MyObject::MyObject(av::Field* field) : 
     65    mOtherField(field) 
    6266  { 
    63     Value.addChangedCallback(boost::bind(&MyObject::valueChanged, this, _1)); 
    6467  } 
    6568 
    66   void MyObject::valueChanged(const av::SFInt::ChangedEvent event) 
     69  void MyObject::fieldHasChanged(const av::Field& field) 
    6770  { 
    68     if (event.getTriggeredFromField() && Value.getValue() == 1) 
     71    if (Value.getValue() == 1) 
    6972    { 
    7073      AVANGO_LOG(logger,av::logging::INFO , "fieldHasChanged: disconnecting from source field"); 
    7174      Value.enableNotify(false); 
    72       Value.disconnectFrom(event.getTriggeredFromField()); 
     75      Value.disconnectFrom(mOtherField); 
    7376      Value.enableNotify(true); 
    7477    } 
    75     if (event.getTriggeredFromField() && Value.getValue() == 3) 
     78    if (Value.getValue() == 3) 
    7679    { 
    7780      AVANGO_LOG(logger,av::logging::INFO , "fieldHasChanged: disconnecting all fields from source field"); 
    7881      Value.enableNotify(false); 
    79       event.getTriggeredFromField()->disconnectAuditors(); 
     82      mOtherField->disconnectAuditors(); 
    8083      Value.enableNotify(true); 
    8184    } 
     
    8790 
    8891    av::Link<av::IntObject> src(new av::IntObject); 
    89     av::Link<MyObject> dst1(new MyObject); 
     92    av::Link<MyObject> dst1(new MyObject(&src->Value)); 
    9093    av::Link<av::IntObject> dst2(new av::IntObject); 
    9194 
Note: See TracChangeset for help on using the changeset viewer.