/*========================================================================= Library: CTK Copyright (c) Kitware Inc. 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.txt 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 __ctkScreenshotDialog_h #define __ctkScreenshotDialog_h // Qt includes #include // CTK includes #include "ctkWidgetsExport.h" class ctkScreenshotDialogPrivate; /** \ingroup Widgets ctkScreenshotDialog is simple dialog allowing to grab the content of any widget and save it into a PNG file. It can be used as a tool and can take screenshots without being opened nor executed. \code ctkScreenshotDialog screenshot; screenshot.setWidgetToGrab(myWidget); screenshot.instantScreenshot(); \endcode \sa ctkScreenshotDialog::setWidgetToGrab, QDialog */ class CTK_WIDGETS_EXPORT ctkScreenshotDialog : public QDialog { Q_OBJECT Q_PROPERTY(QString baseFileName READ baseFileName WRITE setBaseFileName) Q_PROPERTY(QString directory READ directory WRITE setDirectory) Q_PROPERTY(int delay READ delay WRITE setDelay) public: typedef QDialog Superclass; ctkScreenshotDialog(QWidget* parent = 0); virtual ~ctkScreenshotDialog(); /// Get widget to grab content from. If no widget is set, no screenshot will /// be taken. /// 0 by default. /// TODO: if widgetToGrab -> screenshot the entire application void setWidgetToGrab(QWidget* newWidgetToGrab); QWidget* widgetToGrab()const; /// Set screenshot base name used to generate unique file names to save the /// screenshot images. The base name doesn't contain the file extension /// (automatically set to ".png") /// "Untitled" by default void setBaseFileName(const QString& newImageName); QString baseFileName() const; /// Set directory where screenshot files are saved. If path is empty, the /// program's working directory, ("."), is used. /// Current working directory by default. void setDirectory(const QString& path); QString directory()const; /// Set the delay in seconds before the screenshot is taken. /// 0 seconds by default. void setDelay(int seconds); int delay()const; /// Disable scaling or output resolution control and take a fixed /// resolution screenshot. Default output resolution is (300,300) void enforceResolution(int width = 300, int height = 300); void enforceResolution(QSize size = QSize(300,300)); /// Get the original widget size QSize widgetSize(); /// Allow/Disallow transparency in the output screenshot void enableTransparency(bool enable = true); public Q_SLOTS: /// Instantanely grabs the content of \a widgetToGrag. Generates a /// png file into \a directory. It automatically increments the image name /// index suffix. void instantScreenshot(); /// Calls instantScreenshot() after a countdown of \a delay seconds void saveScreenshot(); protected: QScopedPointer d_ptr; private: Q_DECLARE_PRIVATE(ctkScreenshotDialog); Q_DISABLE_COPY(ctkScreenshotDialog); }; #endif