00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef GEO_ELEMENT_HPP
00022 #define GEO_ELEMENT_HPP
00023
00024 #include "subject.hpp"
00025 #include "observer.hpp"
00026 #include "../ui/drawing_context.hpp"
00027
00028 #include <iostream>
00029 #include <boost/noncopyable.hpp>
00030
00034 class geo_element : public subject, public observer, public boost::noncopyable
00035 {
00036 protected:
00037 std::string m_name;
00038 public:
00039 geo_element(const std::string& name);
00040 virtual ~geo_element(void);
00041
00042 virtual std::ostream& put(std::ostream& s) = 0;
00043
00044 std::string get_name();
00045 void set_name(const std::string& name);
00046
00047 virtual void update() = 0;
00048
00049 virtual void draw(boost::shared_ptr<drawing_context> context) = 0;
00050 };
00051
00052 std::ostream& operator<<(std::ostream& s, geo_element& el);
00053
00054 #endif