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
00026
00027 #ifndef CRYSTAL_VIEW_H
00028 #define CRYSTAL_VIEW_H
00029
00030 #include <libxml/parser.h>
00031 #include <chemistry/matrix.h>
00032 #include <list>
00033 #include <gtk/gtkwidget.h>
00034
00035 using namespace std;
00036
00037 namespace gcu
00038 {
00039 class CrystalDoc;
00040
00046 class CrystalView
00047 {
00048 public:
00050
00055 CrystalView(CrystalDoc* pDoc);
00057
00060 virtual ~CrystalView();
00061
00066 GtkWidget* CreateNewWidget();
00072 void Init(GtkWidget *widget);
00078 void Reshape(GtkWidget *widget);
00084 void Draw(GtkWidget *widget);
00088 void Update();
00094 void Update(GtkWidget *widget);
00101 bool OnPressed(GtkWidget *widget, GdkEventButton *event);
00108 void OnMotion(GtkWidget *widget, GdkEventMotion *event);
00114 void OnDestroyed(GtkWidget *widget);
00115
00121 virtual bool Load(xmlNodePtr node);
00126 virtual xmlNodePtr Save(xmlDocPtr xml);
00127
00128 private:
00135 void Rotate(gdouble x, gdouble y);
00136
00137 protected:
00141 gdouble m_fAngle;
00145 gdouble m_fRadius;
00149 gdouble m_psi;
00153 gdouble m_theta;
00157 gdouble m_phi;
00161 gdouble m_height;
00165 gdouble m_width;
00169 gdouble m_near;
00170
00171
00172
00173 gdouble m_far;
00177 Matrix m_Euler;
00181 unsigned m_nGLList;
00182
00186 float m_fBlue;
00190 float m_fRed;
00194 float m_fGreen;
00198 float m_fAlpha;
00202 CrystalDoc* m_pDoc;
00206 GtkWidget* m_pWidget;
00207
00208 private:
00209 bool m_bInit;
00210 gdouble m_lastx, m_lasty;
00211 list<GtkWidget*> m_Widgets;
00212 };
00213
00214 }
00215
00216 #endif //CRYSTAL_VIEW_H