/********************************************************************** SelectRotateTool - Selection and Rotation Tool for Avogadro Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2007,2008 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SELECTROTATETOOL_H #define SELECTROTATETOOL_H #include #include #include #include #include #include class QMouseEvent; class QWheelEvent; class QComboBox; class QVBoxLayout; namespace Avogadro { class Molecule; class SelectRotateTool : public Tool { Q_OBJECT AVOGADRO_TOOL("Selection", tr("Selection"), tr("Select atoms, residues, and molecules")) public: //! Constructor SelectRotateTool(QObject *parent = 0); //! Deconstructor virtual ~SelectRotateTool(); //! \name Tool Methods //@{ //! \brief Callback methods for ui.actions on the canvas. /*! */ virtual QUndoCommand* mousePressEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseReleaseEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseMoveEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* wheelEvent(GLWidget *widget, QWheelEvent *event); virtual int usefulness() const; virtual QWidget *settingsWidget(); virtual bool paint(GLWidget *widget); void setSelectionMode(int i); int selectionMode() const; public Q_SLOTS: void selectionModeChanged( int index ); protected: void selectionBox(float sx, float sy, float ex, float ey); bool m_leftButtonPressed; // rotation bool m_movedSinceButtonPressed; //! Temporary var for adding selection box bool m_selectionBox; QPoint m_initialDraggingPosition; QPoint m_lastDraggingPosition; Eigen::Vector3d m_selectedPrimitivesCenter; // centroid of selected atoms int m_selectionMode; // atom, residue, molecule QList m_hits; QComboBox *m_comboSelectionMode; QVBoxLayout *m_layout; QWidget *m_settingsWidget; private Q_SLOTS: void settingsWidgetDestroyed(); }; class SelectRotateToolFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_TOOL_FACTORY(SelectRotateTool) }; } // end namespace Avogadro #endif