00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef GCHEMPAINT_MESOMER_H
00026 #define GCHEMPAINT_MESOMER_H
00027
00028 #include <gcu/object.h>
00029 #include <map>
00030
00031 using namespace std;
00032 using namespace gcu;
00033
00034 namespace gcp {
00035
00036 extern TypeId MesomerType;
00037
00038 class Mesomery;
00039 class MesomeryArrow;
00040 class Molecule;
00041
00042 class Mesomer: public Object
00043 {
00044 public:
00045 Mesomer ();
00046 virtual ~Mesomer ();
00047
00048 Mesomer (Mesomery *mesomery, Molecule *molecule) throw (std::invalid_argument);
00049 virtual bool Load (xmlNodePtr);
00050 virtual bool OnSignal (SignalId Signal, Object *Child);
00051 virtual double GetYAlign ();
00052 void AddArrow (MesomeryArrow *arrow, Mesomer *mesomer) throw (std::invalid_argument);
00053 void RemoveArrow (MesomeryArrow *arrow, Mesomer *mesomer);
00054 bool Validate () {return m_Arrows.size () > 0;}
00055 map<Mesomer *, MesomeryArrow *> *GetArrows () {return &m_Arrows;}
00056 Molecule *GetMolecule () {return m_Molecule;}
00057
00058 private:
00059 Molecule *m_Molecule;
00060 map<Mesomer *, MesomeryArrow *> m_Arrows;
00061 };
00062
00063 }
00064
00065 #endif //GCHEMPAINT_MESOMER_H