Click on the banner to return to the Class Reference home page.

©Copyright 1996 Rogue Wave Software

RWModel

Synopsis

#include <rw/model.h>
(abstract base class)

Description

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 will be traversed, calling updateFrom(RWModel*, void*) for each one, with itself as the first argument. Subclasses of RWModelClient should be prepared to accept such a call.

Persistence

None

Example

This is an incomplete and somewhat contrived example in that it does not completely define the classes involved. "Dial" is assumed to be a graphical representation of the internal settings of "Thermostat." The essential point is that there is a dependency relationship between the "Thermostat" and the "Dial": when the setting of the thermostat is changed, the dial must be notified so that it can update itself to reflect the new setting of the thermostat.

#include <rw/model.h>
class Dial : public RWModelClient {
public:
  virtual void     updateFrom(RWModel* m, void* d);
};
class Thermostat : public RWModel {
  double setting;
public:
  Thermostat( Dial* d )
    { addDependent(d); }
  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.
}
 

Public Constructor

RWModel();

Public Member Functions

void
addDependent(RWModelClient* m);
void
removeDependent(RWModelClient* m);
virtual void
changed(void* d);