gcp/bond.h
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_BOND_H
00026 #define GCHEMPAINT_BOND_H
00027
00028 #include <gcu/bond.h>
00029 #include <list>
00030 #include <libgnomecanvas/gnome-canvas-path-def.h>
00031
00032 namespace gcp {
00033
00042 typedef enum
00043 {
00044 NormalBondType,
00045 UpBondType,
00046 DownBondType,
00047 ForeBondType,
00048 UndeterminedBondType
00049 } BondType;
00050
00055 typedef struct {
00059 double a;
00063 bool is_before;
00064 } BondCrossing;
00065
00066 class Atom;
00067 class WidgetData;
00068
00073 class Bond: public gcu::Bond
00074 {
00075 public:
00079 Bond ();
00087 Bond (Atom* first, Atom* last, unsigned char order);
00091 virtual ~Bond ();
00092
00101 Object* GetAtomAt (double x, double y, double z = 0.);
00105 BondType GetType() const {return m_type;}
00111 void SetType (BondType type);
00118 double GetAngle2D (Atom* pAtom);
00124 void AddCycle (gcu::Cycle* pCycle);
00130 void RemoveCycle (gcu::Cycle* pCycle);
00134 void RemoveAllCycles ();
00146 bool GetLine2DCoords (unsigned Num, double* x1, double* y1, double* x2, double* y2);
00154 virtual bool SaveNode (xmlDocPtr xml, xmlNodePtr) const;
00160 bool LoadNode (xmlNodePtr node);
00166 void Update (GtkWidget* w) const;
00175 void Move (double x, double y, double z = 0);
00185 void Transform2D (gcu::Matrix2D& m, double x, double y);
00195 double GetDist (double x, double y);
00200 void SetDirty ();
00204 void Revert ();
00211 void IncOrder (int n = 1);
00220 void SetSelected (GtkWidget* w, int state);
00226 void Add (GtkWidget* w) const;
00231 double GetYAlign ();
00239 bool IsCrossing (Bond *pBond);
00248 bool BuildContextualMenu (GtkUIManager *UIManager, Object *object, double x, double y);
00252 void MoveToBack ();
00256 void BringToFront ();
00265 bool SetProperty (unsigned property, char const *value);
00266
00267 private:
00268 GnomeCanvasPathDef* BuildPathDef (WidgetData* pData);
00269 GnomeCanvasPathDef* BuildCrossingPathDef (WidgetData* pData);
00270 BondType m_type;
00271 double m_coords[16];
00272 bool m_CoordsCalc;
00273 std::map<Bond*, BondCrossing> m_Crossing;
00274 int m_level;
00275 };
00276
00277 }
00278
00279 #endif // GCHEMPAINT_BOND_H