/* * Copyright (C) 2015-2022 Département de l'Instruction Publique (DIP-SEM) * * Copyright (C) 2013 Open Education Foundation * * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour * l'Education Numérique en Afrique (GIP ENA) * * This file is part of OpenBoard. * * OpenBoard 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 3 of the License, * with a specific linking exception for the OpenSSL project's * "OpenSSL" library (or with modified versions of it that use the * same license as the "OpenSSL" library). * * OpenBoard 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 OpenBoard. If not, see . */ #ifndef UBBOARDCONTROLLER_H_ #define UBBOARDCONTROLLER_H_ #include #include #include #include #include "document/UBDocumentContainer.h" #include "core/UBApplicationController.h" class UBMainWindow; class UBApplication; class UBBoardView; class UBDocumentController; class UBMessageWindow; class UBGraphicsScene; class UBDocumentProxy; class UBBlackoutWidget; class UBToolWidget; class UBVersion; class UBSoftwareUpdate; class UBSoftwareUpdateDialog; class UBGraphicsMediaItem; class UBGraphicsWidgetItem; class UBBoardPaletteManager; class UBItem; class UBGraphicsItem; class UBBoardController : public UBDocumentContainer { Q_OBJECT public: enum SaveFlag { sf_none = 0x0, sf_showProgress = 0x1 }; Q_DECLARE_FLAGS(SaveFlags, SaveFlag) public: UBBoardController(UBMainWindow *mainWindow); virtual ~UBBoardController(); void init(); void setupLayout(); UBGraphicsScene* activeScene() const; int activeSceneIndex() const; void setActiveSceneIndex(int i); QSize displayViewport(); QSize controlViewport(); QRectF controlGeometry(); void closing(); int currentPage(); QWidget* controlContainer() { return mControlContainer; } UBBoardView* controlView() { return mControlView; } UBBoardView* displayView() { return mDisplayView; } UBGraphicsScene* activeScene() { return mActiveScene; } void setPenColorOnDarkBackground(const QColor& pColor) { if (mPenColorOnDarkBackground == pColor) return; mPenColorOnDarkBackground = pColor; emit penColorChanged(); } void setPenColorOnLightBackground(const QColor& pColor) { if (mPenColorOnLightBackground == pColor) return; mPenColorOnLightBackground = pColor; emit penColorChanged(); } void setMarkerColorOnDarkBackground(const QColor& pColor) { mMarkerColorOnDarkBackground = pColor; } void setMarkerColorOnLightBackground(const QColor& pColor) { mMarkerColorOnLightBackground = pColor; } QColor penColorOnDarkBackground() { return mPenColorOnDarkBackground; } QColor penColorOnLightBackground() { return mPenColorOnLightBackground; } QColor markerColorOnDarkBackground() { return mMarkerColorOnDarkBackground; } QColor markerColorOnLightBackground() { return mMarkerColorOnLightBackground; } qreal systemScaleFactor() { return mSystemScaleFactor; } qreal currentZoom(); void persistViewPositionOnCurrentScene(); void persistCurrentScene(bool isAnAutomaticBackup = false, bool forceImmediateSave = false); void showNewVersionAvailable(bool automatic, const UBVersion &installedVersion, const UBSoftwareUpdate &softwareUpdate); void setBoxing(QRect displayRect); void setToolbarTexts(); static QUrl expandWidgetToTempDir(const QByteArray& pZipedData, const QString& pExtension = QString("wgt")); void setPageSize(QSize newSize); UBBoardPaletteManager *paletteManager() { return mPaletteManager; } void notifyCache(bool visible); void notifyPageChanged(); void displayMetaData(QMap metadatas); void findUniquesItems(const QUndoCommand *parent, QSet &items); void ClearUndoStack(); void setActiveDocumentScene(UBDocumentProxy* pDocumentProxy, int pSceneIndex = 0, bool forceReload = false, bool onImport = false); void setActiveDocumentScene(int pSceneIndex); void moveSceneToIndex(int source, int target); void duplicateScene(int index); UBGraphicsItem *duplicateItem(UBItem *item); void deleteScene(int index); bool cacheIsVisible() {return mCacheWidgetIsEnabled;} QString actionGroupText(){ return mActionGroupText;} QString actionUngroupText(){ return mActionUngroupText;} public slots: void showDocumentsDialog(); void showKeyboard(bool show); void togglePodcast(bool checked); void blackout(); void addScene(); void addScene(UBDocumentProxy* proxy, int sceneIndex, bool replaceActiveIfEmpty = false); void addScene(UBGraphicsScene* scene, bool replaceActiveIfEmpty = false); void duplicateScene(); void importPage(); void clearScene(); void clearSceneItems(); void clearSceneAnnotation(); void clearSceneBackground(); void zoomIn(QPointF scenePoint = QPointF(0,0)); void zoomOut(QPointF scenePoint = QPointF(0,0)); void zoomRestore(); void centerRestore(); void centerOn(QPointF scenePoint = QPointF(0,0)); void zoom(const qreal ratio, QPointF scenePoint); void handScroll(qreal dx, qreal dy); void previousScene(); void nextScene(); void firstScene(); void lastScene(); void downloadURL(const QUrl& url, QString contentSourceUrl = QString(), const QPointF& pPos = QPointF(0.0, 0.0), const QSize& pSize = QSize(), bool isBackground = false, bool internalData = false); UBItem *downloadFinished(bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground = false, bool internalData = false); void changeBackground(bool isDark, UBPageBackground pageBackground); void setToolCursor(int tool); void showMessage(const QString& message, bool showSpinningWheel = false); void hideMessage(); void setDisabled(bool disable); void setColorIndex(int pColorIndex); void removeTool(UBToolWidget* toolWidget); void hide(); void show(); void setWidePageSize(bool checked); void setRegularPageSize(bool checked); void stylusToolChanged(int tool); void grabScene(const QRectF& pSceneRect); UBGraphicsMediaItem* addVideo(const QUrl& pUrl, bool startPlay, const QPointF& pos, bool bUseSource = false); UBGraphicsMediaItem* addAudio(const QUrl& pUrl, bool startPlay, const QPointF& pos, bool bUseSource = false); UBGraphicsWidgetItem *addW3cWidget(const QUrl& pUrl, const QPointF& pos); void adjustDisplayViews(); void cut(); void copy(); void paste(); void processMimeData(const QMimeData* pMimeData, const QPointF& pPos); void moveGraphicsWidgetToControlView(UBGraphicsWidgetItem* graphicWidget); void moveToolWidgetToScene(UBToolWidget* toolWidget); void addItem(); void freezeW3CWidgets(bool freeze); void freezeW3CWidget(QGraphicsItem* item, bool freeze); void startScript(); void stopScript(); void saveData(SaveFlags fls = sf_none); //void regenerateThumbnails(); signals: void newPageAdded(); void activeSceneChanged(); void zoomChanged(qreal pZoomFactor); void penColorChanged(); void controlViewportChanged(); void backgroundChanged(); void cacheEnabled(); void documentReorganized(int index); void displayMetadata(QMap metadata); void pageSelectionChanged(int index); void centerOnThumbnailRequired(int index); void npapiWidgetCreated(const QString &Url); protected: void setupViews(); void setupToolbar(); void connectToolbar(); void initToolbarTexts(); void updateActionStates(); void updateSystemScaleFactor(); QString truncate(QString text, int maxWidth); protected slots: void selectionChanged(); void undoRedoStateChange(bool canUndo); void documentSceneChanged(UBDocumentProxy* proxy, int pIndex); private slots: void autosaveTimeout(); void appMainModeChanged(UBApplicationController::MainMode); private: void initBackgroundGridSize(); void updatePageSizeState(); void saveViewState(); int autosaveTimeoutFromSettings(); UBMainWindow *mMainWindow; UBGraphicsScene* mActiveScene; int mActiveSceneIndex; UBBoardPaletteManager *mPaletteManager; UBSoftwareUpdateDialog *mSoftwareUpdateDialog; UBMessageWindow *mMessageWindow; UBBoardView *mControlView; UBBoardView *mDisplayView; QWidget *mControlContainer; QHBoxLayout *mControlLayout; qreal mZoomFactor; bool mIsClosing; QColor mPenColorOnDarkBackground; QColor mPenColorOnLightBackground; QColor mMarkerColorOnDarkBackground; QColor mMarkerColorOnLightBackground; qreal mSystemScaleFactor; bool mCleanupDone; QMap > mActionTexts; bool mCacheWidgetIsEnabled; QGraphicsItem* mLastCreatedItem; int mDeletingSceneIndex; int mMovingSceneIndex; QString mActionGroupText; QString mActionUngroupText; QTimer *mAutosaveTimer; enum PropertyPalette { color, lineWidth, eraserWidth, lineStyle, vectorStyle }; QMap mPropertyPaletteWidgets; private slots: void stylusToolDoubleClicked(int tool); void boardViewResized(QResizeEvent* event); void documentWillBeDeleted(UBDocumentProxy* pProxy); void updateBackgroundActionsState(bool isDark, UBPageBackground pageBackground); void colorPaletteChanged(); void libraryDialogClosed(int ret); void lastWindowClosed(); void onDownloadModalFinished(); }; #endif /* UBBOARDCONTROLLER_H_ */