/* QGLView Copyright (C) 2019 Ivan Pelipenko peri4ko@yandex.ru This program 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 3 of the License, or (at your option) any later version. This program 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, see . */ #ifndef MOUSE_CONTROLLER_H #define MOUSE_CONTROLLER_H #include "glprimitives.h" #include "glcamera.h" #include "renderer_service.h" #include #include class MouseController: public QObject { friend class QGLView; friend class RendererSelection; Q_OBJECT public: MouseController(QGLView * view_); virtual ~MouseController(); bool isGrabMouseEnabled() const {return grabMouse_;} bool isMouseRotateEnabled() const {return mouseRotate_;} bool isMouseSelectionEnabled() const {return mouseSelect_;} bool isCameraOrbit() const {return cameraOrbit_;} Qt::MouseButton selectionButton() const {return sel_button;} Qt::KeyboardModifier selectionModifier() const {return sel_mod;} void setSelectionButton(Qt::MouseButton v) {sel_button = v;} void setSelectionModifier(Qt::KeyboardModifier v) {sel_mod = v;} protected: void resize(); void mousePressEvent(QMouseEvent * e); void mouseMoveEvent(QMouseEvent * e); void mouseReleaseEvent(QMouseEvent * e); void wheelEvent(QWheelEvent * e); void leaveEvent(QEvent * ); void mouseDoubleClickEvent(QMouseEvent * e); private: QGLView * view; QPoint lastPos, downPos; QSet keys_; QVector hov_objects, hov_aims; Qt::MouseButton sel_button; Qt::KeyboardModifier sel_mod; RendererService::HandleAction cur_action; QFlags cur_handle; float app_scale; bool grabMouse_, mouse_first, mouseRotate_, mouseSelect_, customMouseMove_, canSelect_; bool cameraOrbit_, selecting_, mouse_sec; private slots: public slots: void setGrabMouseEnabled(const bool & arg) {grabMouse_ = arg; mouse_first = true;} void setMouseRotateEnabled(const bool & arg) {mouseRotate_ = arg;} void setMouseSelectionEnabled(const bool & arg) {mouseSelect_ = arg;} void setCustomMouseMove(const bool & arg) {customMouseMove_ = arg;} void setCameraOrbit(const bool & arg) {cameraOrbit_ = arg;} signals: }; #endif // QGLVIEW_H