#pragma once //########################################################################## //# # //# CLOUDCOMPARE # //# # //# 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; version 2 or later of the License. # //# # //# 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. # //# # //# COPYRIGHT: EDF R&D / TELECOM ParisTech (ENST-TSI) # //# # //########################################################################## #include "CCPluginAPI.h" //Qt #include #include class ccGLWindowInterface; //! Generic overlay dialog interface class CCPLUGIN_LIB_API ccOverlayDialog : public QDialog { Q_OBJECT public: //! Default constructor explicit ccOverlayDialog(QWidget* parent = nullptr, Qt::WindowFlags flags = Qt::FramelessWindowHint | Qt::Tool); //! Destructor ~ccOverlayDialog() override; //! Links the overlay dialog with a MDI window /** Warning: link can't be modified while dialog is displayed/process is running! \return success **/ virtual bool linkWith(ccGLWindowInterface* win); //! Starts process /** \return success **/ virtual bool start(); //! Stops process/dialog /** Automatically emits the 'processFinished' signal (with input state as argument). \param accepted process/dialog result **/ virtual void stop(bool accepted); //reimplemented from QDialog void reject() override; //! Adds a keyboard shortcut (single key) that will be overridden from the associated window /** When an overridden key is pressed, the shortcutTriggered(int) signal is emitted. **/ void addOverriddenShortcut(Qt::Key key); //! Returns whether the tool is currently started or not bool started() const { return m_processing; } Q_SIGNALS: //! Signal emitted when process is finished /** \param accepted specifies how the process finished (accepted or not) **/ void processFinished(bool accepted); //! Signal emitted when an overridden key shortcut is pressed /** See ccOverlayDialog::addOverriddenShortcut **/ void shortcutTriggered(int key); //! Signal emitted when a 'show' event is detected void shown(); protected: //! Slot called when the linked window is deleted (calls 'onClose') virtual void onLinkedWindowDeletion(ccGLWindowInterface* object = nullptr); protected: //inherited from QObject bool eventFilter(QObject *obj, QEvent *e) override; //! Associated (MDI) window ccGLWindowInterface* m_associatedWin; //! Running/processing state bool m_processing; //! Overridden keys QList m_overriddenKeys; };