pxmlw6n2f/Gazebo_Distributed_TCP/gazebo/gui/GLWidget.hh

241 lines
8.7 KiB
C++

/*
* Copyright (C) 2012 Open Source Robotics Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef _GAZEBO_GUI_GLWIDGET_HH_
#define _GAZEBO_GUI_GLWIDGET_HH_
#include <memory>
#include <string>
#include <vector>
#include "gazebo/gui/qt.h"
#include "gazebo/msgs/msgs.hh"
#include "gazebo/rendering/RenderTypes.hh"
#include "gazebo/util/system.hh"
namespace gazebo
{
namespace common
{
class MouseEvent;
}
namespace gui
{
class GLWidgetPrivate;
class GZ_GUI_VISIBLE GLWidget : public QWidget
{
Q_OBJECT
/// \enum SelectionLevels
/// \brief Unique identifiers for all selection levels supported.
public: enum SelectionLevels {
/// \brief Model level
MODEL,
/// \brief Link level
LINK
};
public: GLWidget(QWidget *_parent = 0);
public: virtual ~GLWidget();
/// \brief View a scene in this widget.
/// This will use the scene's UserCamera to visualize the scene.
/// If a UserCamera does not exist, one is created with the
/// name "gzclient_camera".
/// \param[in] _scene Pointer to the scene to visualize.
public: void ViewScene(rendering::ScenePtr _scene);
/// \brief Return the user camera.
/// \return User camera.
/// \deprecated See rendering::UserCameraPtr Camera() const.
public: rendering::UserCameraPtr GetCamera() const GAZEBO_DEPRECATED(7.0);
/// \brief Return the user camera.
/// \return User camera.
public: rendering::UserCameraPtr Camera() const;
/// \brief Return the scene.
/// \return Scene.
/// \deprecated See rendering::ScenePtr Scene() const.
public: rendering::ScenePtr GetScene() const GAZEBO_DEPRECATED(7.0);
/// \brief Return the scene.
/// \return Scene.
public: rendering::ScenePtr Scene() const;
public: void Clear();
/// \brief Returns the list of selected visuals.
/// \return List with pointers to selected visuals.
public: std::vector<rendering::VisualPtr> SelectedVisuals() const;
signals: void clicked();
/// \brief QT signal to notify when we received a selection msg.
/// \param[in] _name Name of the selected entity.
signals: void selectionMsgReceived(const QString &_name);
protected: virtual void moveEvent(QMoveEvent *_e);
protected: virtual void paintEvent(QPaintEvent *_e);
protected: virtual void resizeEvent(QResizeEvent *_e);
/// \brief Custom processing for the QT showEvent. Based on empirical
/// evidence, we believe Mac needs to create the render window in this
/// function.
/// \param[in] _e The QT show event information.
protected: virtual void showEvent(QShowEvent *_e);
protected: virtual void enterEvent(QEvent *_event);
protected: void keyPressEvent(QKeyEvent *_event);
protected: void keyReleaseEvent(QKeyEvent *_event);
protected: void wheelEvent(QWheelEvent *_event);
protected: void mousePressEvent(QMouseEvent *_event);
protected: void mouseDoubleClickEvent(QMouseEvent *_event);
protected: void mouseMoveEvent(QMouseEvent *_event);
protected: void mouseReleaseEvent(QMouseEvent *_event);
/// \brief Override paintEngine to stop Qt From trying to draw on top of
/// OGRE.
/// \return NULL.
protected: virtual QPaintEngine *paintEngine() const;
private: std::string OgreHandle() const;
/// \brief Callback for a mouse move event.
/// \param[in] _event The mouse move event
/// \return True if handled by this function.
private: bool OnMouseMove(const common::MouseEvent &_event);
/// \brief Process a normal mouse move event.
private: void OnMouseMoveNormal();
/// \brief Process a make object mouse move event.
private: void OnMouseMoveMakeEntity();
/// \brief Callback for a mouse release event.
/// \param[in] _event The mouse release event
/// \return True if handled by this function.
private: bool OnMouseRelease(const common::MouseEvent &_event);
/// \brief Process a normal mouse release event.
private: void OnMouseReleaseNormal();
/// \brief Process a make object mouse release event.
private: void OnMouseReleaseMakeEntity();
/// \brief Callback for a mouse press event.
/// \param[in] _event The mouse press event
/// \return True if handled by this function.
private: bool OnMousePress(const common::MouseEvent &_event);
/// \brief Process a normal mouse press event.
private: void OnMousePressNormal();
/// \brief Process a make object mouse presse event.
private: void OnMousePressMakeEntity();
/// \brief Callback for a mouse double click event.
/// \param[in] _event The mouse double click event
/// \return True if handled by this function.
private: bool OnMouseDoubleClick(const common::MouseEvent &_event);
private: void OnRequest(ConstRequestPtr &_msg);
private: void OnCreateScene(const std::string &_name);
private: void OnRemoveScene(const std::string &_name);
private: void OnMoveMode(bool _mode);
private: void OnCreateEntity(const std::string &_type,
const std::string &_data);
private: void OnFPS();
private: void OnOrbit();
private: void OnManipMode(const std::string &_mode);
private: void OnSetSelectedEntity(const std::string &_name,
const std::string &_mode);
private: bool eventFilter(QObject *_obj, QEvent *_event);
private: void ClearSelection();
/// \brief Set the selected visual, which will highlight the
/// visual
private: void SetSelectedVisual(rendering::VisualPtr _vis);
/// \brief Deselect all visuals, removing highlight and publishing message
private: void DeselectAllVisuals();
/// \brief Callback when a specific alignment configuration is set.
/// \param[in] _axis Axis of alignment: x, y, or z.
/// \param[in] _config Configuration: min, center, or max.
/// \param[in] _target Target of alignment: first or last.
/// \param[in] _preview True to preview alignment without publishing
/// to server.
/// \param[in] _inverted True to invert the alignment direction.
private: void OnAlignMode(const std::string &_axis,
const std::string &_config, const std::string &_target,
const bool _preview, const bool _inverted = false);
/// \brief Copy an entity by name
/// \param[in] _name Name of entity to be copied.
private: void Copy(const std::string &_name);
/// \brief Paste an entity by name
/// \param[in] _name Name of entity to be pasted.
private: void Paste(const std::string &_name);
/// \brief Qt callback when the copy action is triggered.
private slots: void OnCopy();
/// \brief Qt callback when the paste action is triggered.
private slots: void OnPaste();
/// \brief Qt callback when the model editor action is toggled.
/// \param[in] _checked True if the model editor was checked.
private slots: void OnModelEditor(bool _checked);
/// \brief QT Callback that turns on orthographic projection
private slots: void OnOrtho();
/// \brief QT Callback that turns on perspective projection
private slots: void OnPerspective();
/// \brief Set this->mouseEvent's Buttons property to the value of
/// _event->buttons(). Note that this is different from the
/// SetMouseEventButtons, plural, function.
/// \sa SetMouseEventButtons
/// \param[in] _button The QT mouse button
private: void SetMouseEventButton(const Qt::MouseButton &_button);
/// \brief Set this->mouseEvent's Button property to the value of
/// _event->button(). Note that this is different from the
/// SetMouseEventButton, singular, function.
/// \sa SetMouseEventButton
/// \param[in] _button The QT mouse buttons
private: void SetMouseEventButtons(const Qt::MouseButtons &_buttons);
/// \internal
/// \brief Pointer to private data.
private: std::unique_ptr<GLWidgetPrivate> dataPtr;
};
}
}
#endif