fragment.h
Go to the documentation of this file.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_FRAGMENT_H
00026 #define GCHEMPAINT_FRAGMENT_H
00027
00028 #include "text-object.h"
00029 #include "libgnomecanvas/gnome-canvas.h"
00030
00032 namespace gcp {
00033
00034 class FragmentAtom;
00035 class Atom;
00036
00044 class Fragment: public TextObject
00045 {
00046 public:
00050 Fragment ();
00058 Fragment (double x, double y);
00062 virtual ~Fragment ();
00063
00072 void SetSelected (GtkWidget *w, int state);
00078 void Add (GtkWidget *w) const;
00084 void Update (GtkWidget *w) const;
00091 xmlNodePtr Save (xmlDocPtr xml) const;
00099 xmlNodePtr SaveSelection (xmlDocPtr xml) const;
00106 bool Load (xmlNodePtr node);
00112 bool OnChanged (bool save);
00116 void AnalContent ();
00123 void AnalContent (unsigned start, unsigned &end);
00132 Object* GetAtomAt (double x, double y, double z = 0.);
00140 void Move (double x, double y, double z = 0);
00148 void Transform2D (gcu::Matrix2D& m, double x, double y);
00153 void OnChangeAtom ();
00157 Atom* GetAtom () {return (Atom*) m_Atom;}
00165 int GetElementAtPos (unsigned start, unsigned &end);
00186 int GetChargePosition (FragmentAtom *pAtom, unsigned char &Pos, double Angle, double &x, double &y);
00196 int GetAvailablePosition (double &x, double &y);
00204 bool GetPosition (double angle, double &x, double &y);
00208 bool Validate ();
00212 double GetYAlign ();
00213
00223 bool SetProperty (unsigned property, char const *value);
00224
00229 bool Analyze ();
00230
00235 void Update ();
00236
00237 private:
00238 bool SavePortion (xmlDocPtr xml, xmlNodePtr node, unsigned start, unsigned end) const;
00239
00240 private:
00241 FragmentAtom *m_Atom;
00242 unsigned m_BeginAtom, m_EndAtom;
00243 int m_lbearing;
00244 double m_CHeight;
00245 bool m_Inversable;
00246 };
00247
00248 }
00249
00250 #endif //GCHEMPAINT_FRAGMENT_H