diff options
Diffstat (limited to 'dvi/model.hh')
-rwxr-xr-x | dvi/model.hh | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/dvi/model.hh b/dvi/model.hh new file mode 100755 index 0000000..749c640 --- /dev/null +++ b/dvi/model.hh @@ -0,0 +1,61 @@ +#ifndef MODEL_HH +#define MODEL_HH + +#include "dl-refcounted.hh" +#include "dl-dvi-file.hh" +#include "observer.hh" +#include <list> + +enum ModelState { + HAS_FILE, + NO_FILE, + ERROR +}; + +using DviLib::FileLoader; +using DviLib::DviFile; +using DviLib::RefCounted; +using std::string; + +class Model : public RefCounted { + ModelState state; + DviFile *dvi_file; + string file_name; + string err_msg; + vector <Observer *> observers; + +public: + Model (string file_name); + Model (void); + void add_observer (Observer& o) + { + observers.push_back (&o); + } + void notify (void) + { + typedef vector <Observer *>::const_iterator It; + for (It i = observers.begin(); i != observers.end(); ++i) + (*i)->notify (); + } + ModelState get_state (void) { return state; } + string get_error (void) { + if (state == ERROR) + return err_msg; + else + return ""; + }; + DviFile *get_dvi_file (void) { + if (state == HAS_FILE) + return dvi_file; + else + return 0; + }; + string get_file_name (void) { + if (state == HAS_FILE) + return file_name; + else + return ""; + }; +}; + +#endif |