/* * GLMoleculeObject_molecule.hpp * * Created on: Mar 30, 2012 * Author: ankele */ #ifndef GLMOLECULEOBJECT_MOLECULE_HPP_ #define GLMOLECULEOBJECT_MOLECULE_HPP_ // include config.h #ifdef HAVE_CONFIG_H #include #endif #include "GLMoleculeObject.hpp" #include #include "UIElements/Qt4/InstanceBoard/QtObservedMolecule.hpp" #include #include #include "GLMoleculeObject_bond.hpp" #include "types.hpp" class atom; class bond; class molecule; class GLMoleculeObject_atom; class GLWorldScene; class QtObservedInstanceBoard; class GLMoleculeObject_molecule : public GLMoleculeObject { Q_OBJECT public: GLMoleculeObject_molecule( QObject *parent, QtObservedInstanceBoard &_board, QtObservedMolecule::ptr &_ObservedMolecule); GLMoleculeObject_molecule( QGLSceneNode *mesh[], QObject *parent, QtObservedInstanceBoard &_board, QtObservedMolecule::ptr &_ObservedMolecule); virtual ~GLMoleculeObject_molecule(); void initialize(QGLView *view, QGLPainter *painter); void draw(QGLPainter *painter, const QVector4D &cameraPlane); typedef std::pair< atomId_t, atomId_t> BondIds; friend std::ostream &operator<<(std::ostream &ost, const BondIds &t); signals: void changed(); void changeOccured(); void hoverChanged(const atomId_t); void hoverChanged(const moleculeId_t, int); void atomClicked(atomId_t); void moleculeClicked(moleculeId_t); void moleculeEmptied(QtObservedMolecule::ptr); void IsSelectedChanged(); private slots: //!> grant GLWorldScene access to private slots friend class GLWorldScene; void wasClicked(); void atomInserted(QtObservedAtom::ptr _atom); void atomRemoved(ObservedValue_Index_t _id); void bondInserted(QtObservedBond::ptr _bond); void bondRemoved(ObservedValue_Index_t _id); void hoverChangedSignalled(GLMoleculeObject *ob); void setVisible(bool value); void resetTesselationHull(); void resetBoundingBox(); void resetIndex(const moleculeId_t, const moleculeId_t); void resetSelected(); private: void init(); private: //!> the Observable we are signed on, also indicates whether we are sign on (not NULL) const Observable * owner; QGeometryData updateTesselationHull() const; //!> list of channels when tesselation hull needs to update static const Observable::channels_t HullChannels; //!> contains current version of the tesselation hull on request QGeometryData TesselationHull; typedef std::map< ObservedValue_Index_t, GLMoleculeObject_atom* > AtomNodeMap; typedef std::multimap< ObservedValue_Index_t, GLMoleculeObject_bond* > BondNodeMap; AtomNodeMap AtomsinSceneMap; BondNodeMap BondsinSceneMap; atomId_t hoverAtomId; QtObservedInstanceBoard &board; QtObservedMolecule::ptr ObservedMolecule; }; std::ostream &operator<<(std::ostream &ost, const GLMoleculeObject_molecule::BondIds &t); #endif /* GLMOLECULEOBJECT_MOLECULE_HPP_ */