1 /* 2 * Copyright (C) 2016 Damir Porobic <damir.porobic@gmx.com> 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 * 19 */ 20 21 #ifndef KSNIP_MAINWINDOW_H 22 #define KSNIP_MAINWINDOW_H 23 24 #include <QtWidgets> 25 26 #include <functional> 27 28 #include "src/gui/actions/ActionProcessor.h" 29 #include "src/gui/actions/ActionsMenu.h" 30 #include "src/gui/TrayIcon.h" 31 #include "src/gui/IImageProcessor.h" 32 #include "src/gui/imageAnnotator/KImageAnnotatorAdapter.h" 33 #include "src/gui/aboutDialog/AboutDialog.h" 34 #include "src/gui/settingsDialog/SettingsDialog.h" 35 #include "src/gui/notificationService/NotificationServiceFactory.h" 36 #include "src/gui/operations/AddWatermarkOperation.h" 37 #include "src/gui/operations/CopyAsDataUriOperation.h" 38 #include "src/gui/operations/UploadOperation.h" 39 #include "src/gui/operations/HandleUploadResultOperation.h" 40 #include "src/gui/operations/LoadImageFromFileOperation.h" 41 #include "src/gui/globalHotKeys/GlobalHotKeyHandler.h" 42 #include "src/gui/captureHandler/CaptureHandlerFactory.h" 43 #include "src/gui/captureHandler/ICaptureChangeListener.h" 44 #include "src/gui/widgetVisibilityHandler/WidgetVisibilityHandlerFactory.h" 45 #include "src/gui/pinWindow/PinWindowHandler.h" 46 #include "src/gui/serviceLocator/ServiceLocator.h" 47 #include "src/gui/RecentImagesMenu.h" 48 #include "src/gui/dragAndDrop/DragAndDropProcessor.h" 49 #include "src/gui/dragAndDrop/IDragContentProvider.h" 50 #include "src/gui/windowResizer/IResizableWindow.h" 51 #include "src/gui/windowResizer/WindowResizer.h" 52 #include "src/widgets/MainToolBar.h" 53 #include "src/backend/imageGrabber/AbstractImageGrabber.h" 54 #include "src/backend/config/KsnipConfigProvider.h" 55 #include "src/backend/uploader/UploaderProvider.h" 56 #include "src/backend/CapturePrinter.h" 57 #include "src/common/loader/IconLoader.h" 58 #include "src/common/enum/RunMode.h" 59 #include "src/common/provider/ApplicationTitleProvider.h" 60 #include "src/common/dtos/CaptureFromFileDto.h" 61 #include "src/common/adapter/fileDialog/FileDialogAdapterFactory.h" 62 63 class MainWindow : public QMainWindow, public ICaptureChangeListener, public IImageProcessor, public IResizableWindow, public IDragContentProvider 64 { 65 Q_OBJECT 66 public: 67 explicit MainWindow(AbstractImageGrabber *imageGrabber, RunMode mode = RunMode::GUI); 68 ~MainWindow() override; 69 void showEmpty(); 70 void showHidden(); 71 void showDefault(); 72 void captureScreenshot(CaptureModes captureMode, bool captureCursor, int delay); 73 void resizeToContent() override; 74 bool isWindowMaximized() override; 75 void processImage(const CaptureDto &capture) override; 76 DragContent dragContent() const override; 77 78 public slots: 79 void processCapture(const CaptureDto &capture); 80 void quit(); 81 82 signals: 83 void imageLoaded() const; 84 85 protected: 86 void moveEvent(QMoveEvent *event) override; 87 void closeEvent(QCloseEvent *event) override; 88 void changeEvent(QEvent *event) override; 89 QMenu *createPopupMenu() override; 90 QSize sizeHint() const override; 91 92 private: 93 AbstractImageGrabber *mImageGrabber; 94 IServiceLocator *mServiceLocator; 95 RunMode mMode; 96 bool mSessionManagerRequestedQuit; 97 QAction *mSaveAsAction; 98 QAction *mUploadAction; 99 QAction *mCopyAsDataUriAction; 100 QAction *mPrintAction; 101 QAction *mPrintPreviewAction; 102 QAction *mQuitAction; 103 QAction *mCopyPathAction; 104 QAction *mRenameAction; 105 QAction *mOpenDirectoryAction; 106 QAction *mToggleDocksAction; 107 QAction *mSettingsAction; 108 QAction *mAboutAction; 109 QAction *mOpenImageAction; 110 QAction *mScaleAction; 111 QAction *mRotateAction; 112 QAction *mAddWatermarkAction; 113 QAction *mPasteAction; 114 QAction *mPasteEmbeddedAction; 115 QAction *mPinAction; 116 QAction *mRemoveImageAction; 117 QAction *mModifyCanvasAction; 118 MainToolBar *mToolBar; 119 QLayout *mMainLayout; 120 KsnipConfig *mConfig; 121 ActionsMenu *mActionsMenu; 122 RecentImagesMenu *mRecentImagesMenu; 123 IClipboard *mClipboard; 124 CapturePrinter *mCapturePrinter; 125 IImageAnnotator *mImageAnnotator; 126 SavePathProvider mSavePathProvider; 127 GlobalHotKeyHandler *mGlobalHotKeyHandler; 128 TrayIcon *mTrayIcon; 129 DragAndDropProcessor *mDragAndDropProcessor; 130 UploaderProvider *mUploaderProvider; 131 ICaptureHandler *mCaptureHandler; 132 PinWindowHandler *mPinWindowHandler; 133 WidgetVisibilityHandler *mVisibilityHandler; 134 IFileDialogAdapter *mFileDialog; 135 WindowResizer *mWindowResizer; 136 ActionProcessor *mActionProcessor; 137 138 void setEnablements(bool enabled); 139 void loadSettings(); 140 void triggerCapture(CaptureModes captureMode); 141 void capture(CaptureModes captureMode, bool captureCursor, int delay); 142 void initGui(); 143 void processInstantCapture(const CaptureDto &capture); 144 void showDialog(const std::function<void ()>& showDialogMethod); 145 146 private slots: 147 void captureChanged() override; 148 void captureEmpty() override; 149 void copyCaptureToClipboard(); 150 void upload(); 151 void uploadFinished(const UploadResult &result); 152 void copyAsDataUri(); 153 void printClicked(); 154 void printPreviewClicked(); 155 void showOpenImageDialog(); 156 void pasteFromClipboard(); 157 void pasteEmbeddedFromClipboard(); 158 void setupImageAnnotator(); 159 void captureDelayChanged(int delay); 160 void addWatermark(); 161 void showSettingsDialog(); 162 void showAboutDialog(); 163 void showScaleDialog(); 164 void showRotateDialog(); 165 void setPosition(); 166 void handleGuiStartup(); 167 void saveClicked(); 168 void saveAsClicked(); 169 void updateApplicationTitle(); 170 void capturePostProcessing(); 171 void loadImageFromFile(const QString &path); 172 void loadImageFromPixmap(const QPixmap &pixmap); 173 void sessionFinished(); 174 void captureCanceled(); 175 void showPinWindow(); 176 void hideMainWindowIfRequired(); 177 void toggleDocks(); 178 void actionTriggered(const Action &action); 179 void showAfterAction(bool minimized); 180 }; 181 182 #endif // KSNIP_MAINWINDOW_H 183