/*
* 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 < http : //www.gnu.org/licenses/>.
*/
# ifndef UBBOARDCONTROLLER_H_
# define UBBOARDCONTROLLER_H_
# include <QtGui>
# include <QObject>
# include <QHBoxLayout>
# include <QUndoCommand>
# 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 ;
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 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 < QString , QString > metadatas ) ;
void findUniquesItems ( const QUndoCommand * parent , QSet < QGraphicsItem * > & itms ) ;
void ClearUndoStack ( ) ;
void setActiveDocumentScene ( UBDocumentProxy * pDocumentProxy , int pSceneIndex = 0 , bool forceReload = 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 , bool isCrossed ) ;
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 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 ) ;
signals :
void newPageAdded ( ) ;
void activeSceneChanged ( ) ;
void zoomChanged ( qreal pZoomFactor ) ;
void penColorChanged ( ) ;
void controlViewportChanged ( ) ;
void backgroundChanged ( ) ;
void cacheEnabled ( ) ;
void documentReorganized ( int index ) ;
void displayMetadata ( QMap < QString , QString > metadata ) ;
void pageSelectionChanged ( 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 updatePageSizeState ( ) ;
void saveViewState ( ) ;
void adjustDisplayViews ( ) ;
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 < QAction * , QPair < QString , QString > > mActionTexts ;
bool mCacheWidgetIsEnabled ;
QGraphicsItem * mLastCreatedItem ;
int mDeletingSceneIndex ;
int mMovingSceneIndex ;
QString mActionGroupText ;
QString mActionUngroupText ;
QTimer * mAutosaveTimer ;
private slots :
void stylusToolDoubleClicked ( int tool ) ;
void boardViewResized ( QResizeEvent * event ) ;
void documentWillBeDeleted ( UBDocumentProxy * pProxy ) ;
void updateBackgroundActionsState ( bool isDark , bool isCrossed ) ;
void colorPaletteChanged ( ) ;
void libraryDialogClosed ( int ret ) ;
void lastWindowClosed ( ) ;
void onDownloadModalFinished ( ) ;
} ;
# endif /* UBBOARDCONTROLLER_H_ */