1 /****************************************************************************** 2 3 This source file is part of the Avogadro project. 4 5 Copyright 2012-13 Kitware, Inc. 6 7 This source code is released under the New BSD License, (the "License"). 8 9 Unless required by applicable law or agreed to in writing, software 10 distributed under the License is distributed on an "AS IS" BASIS, 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 See the License for the specific language governing permissions and 13 limitations under the License. 14 15 ******************************************************************************/ 16 17 #ifndef AVOGADRO_QTPLUGINS_EDITOR_H 18 #define AVOGADRO_QTPLUGINS_EDITOR_H 19 20 #include <avogadro/qtgui/toolplugin.h> 21 22 #include <avogadro/core/avogadrocore.h> 23 #include <avogadro/qtgui/molecule.h> 24 #include <avogadro/rendering/primitive.h> 25 26 #include <QtCore/QPoint> 27 28 namespace Avogadro { 29 namespace QtPlugins { 30 class EditorToolWidget; 31 32 /** 33 * @class Editor editor.h <avogadro/qtplugins/editor/editor.h> 34 * @brief The Editor tool extends and modifies molecules. 35 * @author Allison Vacanti 36 */ 37 class Editor : public QtGui::ToolPlugin 38 { 39 Q_OBJECT 40 public: 41 explicit Editor(QObject* parent_ = nullptr); 42 ~Editor() override; 43 name()44 QString name() const override { return tr("Editor tool"); } description()45 QString description() const override { return tr("Editor tool"); } priority()46 unsigned char priority() const override { return 20; } activateAction()47 QAction* activateAction() const override { return m_activateAction; } 48 QWidget* toolWidget() const override; 49 setMolecule(QtGui::Molecule * mol)50 void setMolecule(QtGui::Molecule* mol) override 51 { 52 if (mol) 53 m_molecule = mol->undoMolecule(); 54 } 55 setEditMolecule(QtGui::RWMolecule * mol)56 void setEditMolecule(QtGui::RWMolecule* mol) override { m_molecule = mol; } 57 setGLWidget(QtOpenGL::GLWidget * widget)58 void setGLWidget(QtOpenGL::GLWidget* widget) override { m_glWidget = widget; } 59 setGLRenderer(Rendering::GLRenderer * renderer)60 void setGLRenderer(Rendering::GLRenderer* renderer) override 61 { 62 m_renderer = renderer; 63 } 64 65 QUndoCommand* mousePressEvent(QMouseEvent* e) override; 66 QUndoCommand* mouseReleaseEvent(QMouseEvent* e) override; 67 QUndoCommand* mouseMoveEvent(QMouseEvent* e) override; 68 QUndoCommand* keyPressEvent(QKeyEvent* e) override; 69 70 void draw(Rendering::GroupNode& node) override; 71 72 private slots: clearKeyPressBuffer()73 void clearKeyPressBuffer() { m_keyPressBuffer.clear(); } 74 75 private: 76 /** 77 * Update the currently pressed buttons, accounting for modifier keys. 78 * @todo Account for modifier keys. 79 */ 80 void updatePressedButtons(QMouseEvent*, bool release); 81 82 /** 83 * Reset all state for this tool. 84 */ 85 void reset(); 86 87 void emptyLeftClick(QMouseEvent* e); 88 void atomLeftClick(QMouseEvent* e); 89 void bondLeftClick(QMouseEvent* e); 90 91 void atomRightClick(QMouseEvent* e); 92 void bondRightClick(QMouseEvent* e); 93 94 void atomLeftDrag(QMouseEvent* e); 95 96 QAction* m_activateAction; 97 QtGui::RWMolecule* m_molecule; 98 QtOpenGL::GLWidget* m_glWidget; 99 Rendering::GLRenderer* m_renderer; 100 EditorToolWidget* m_toolWidget; 101 Rendering::Identifier m_clickedObject; 102 Rendering::Identifier m_newObject; 103 Rendering::Identifier m_bondedAtom; 104 Qt::MouseButtons m_pressedButtons; 105 QPoint m_clickPosition; 106 unsigned char m_clickedAtomicNumber; 107 bool m_bondAdded; 108 bool m_fixValenceLater; 109 QString m_keyPressBuffer; 110 111 Real m_bondDistance; 112 }; 113 114 } // namespace QtPlugins 115 } // namespace Avogadro 116 117 #endif // AVOGADRO_QTPLUGINS_NAVIGATOR_H 118