SourcePro C++ 12.0 |
SourcePro® C++ API Reference Guide |
SourcePro C++ Documentation Home |
Implements the "Model" leg of a Model-View-Controller architecture. More...
#include <rw/model.h>
Public Member Functions | |
RWModel () | |
RWModel (const RWModel &m) | |
RWModel & | operator= (const RWModel &m) |
RWModel (RWModel &&m) | |
RWModel & | operator= (RWModel &&m) |
void | addDependent (RWModelClient *m) |
void | removeDependent (RWModelClient *m) |
const RWOrdered * | dependents () const |
virtual void | changed (void *d=0) |
void | swap (RWModel &m) |
This abstract base class has been designed to implement the "Model" leg of a Model-View-Controller architecture. A companion class, RWModelClient, supplies the "View" leg.
It maintains a list of dependent RWModelClient objects. When member function changed(void*) is called, the list of dependents is traversed, calling RWModelClient::updateFrom(RWModel*, void*) for each one, with itself as the first argument. Subclasses of RWModelClient should be prepared to accept such a call.
#include <rw/model.h> (abstract base class)
None
#include <iostream> #include <rw/model.h> class Dial : public RWModelClient { int dialNumber; public: explicit Dial(int dialNumber); virtual void updateFrom(RWModel* m, void* d); }; class Thermostat : public RWModel { double setting; public: Thermostat( Dial* d ) { addDependent (d); setting = 0; } double temperature() const { return setting; } void setTemperature(double t) { setting = t; changed (); } }; void Dial::updateFrom(RWModel* m, void*) { Thermostat* t = (Thermostat*)m; double temp = t -> temperature (); // Redraw graphic. std::cout << "Dial #" << dialNumber << " says " << temp << std::endl; } Dial::Dial (int num) : dialNumber (num) { } int main () { Dial one(1); Dial two(2); Thermostat therm(&one); therm.setTemperature(77); therm.setTemperature(-4); therm.addDependent(&two); therm.setTemperature(47); return 0; }
Program output:
Dial #1 says 77 Dial #1 says -4 Dial #1 says 47 Dial #2 says 47
RWModel::RWModel | ( | ) |
Sets up the internal ordered list of dependents when called by the specializing class.
RWModel::RWModel | ( | const RWModel & | m | ) |
Copy constructor. The constructed instance gets a copy of the dependents list from m.
RWModel::RWModel | ( | RWModel && | m | ) |
Move constructor. The constructed instance takes ownership of the dependents list owned by m.
void RWModel::addDependent | ( | RWModelClient * | m | ) |
Adds the object pointed to by m to the list of dependents of self.
virtual void RWModel::changed | ( | void * | d = 0 |
) | [virtual] |
Traverse the internal list of dependents, calling member function RWModelClient::updateFrom(RWModel*, void*) for each one, with self as the first argument and d as the second argument.
const RWOrdered* RWModel::dependents | ( | ) | const [inline] |
Allows a peek at the dependent list.
Move assignment. Self takes ownership of the dependents list owned by m.
Assignment operator. Self gets a copy of the dependents list from m.
void RWModel::removeDependent | ( | RWModelClient * | m | ) |
Removes the object pointed to by m from the list of dependents of self.
void RWModel::swap | ( | RWModel & | m | ) |
Swaps the list of dependents in self with that of m.
© Copyright Rogue Wave Software, Inc. All Rights Reserved.
Rogue Wave and SourcePro are registered trademarks of Rogue Wave Software, Inc. in the United States and other countries. All other trademarks are the property of their respective owners.
Contact Rogue Wave about documentation or support issues.