diff --git a/plugins/cffadaptor/src/UBCFFAdaptor.cpp b/plugins/cffadaptor/src/UBCFFAdaptor.cpp index 6de92d92..5ac124f5 100644 --- a/plugins/cffadaptor/src/UBCFFAdaptor.cpp +++ b/plugins/cffadaptor/src/UBCFFAdaptor.cpp @@ -639,29 +639,30 @@ QDomElement UBCFFAdaptor::UBToCFFConverter::parseSvgPageSection(const QDomElemen void UBCFFAdaptor::UBToCFFConverter::writeQDomElementToXML(const QDomNode &node) { - if (!node.isNull()) - if (node.isText()) - { - mIWBContentWriter->writeCharacters(node.nodeValue()); - } - else - { - mIWBContentWriter->writeStartElement(node.namespaceURI(), node.toElement().tagName()); - - for (int i = 0; i < node.toElement().attributes().count(); i++) + if (!node.isNull()){ + if (node.isText()) { - QDomAttr attr = node.toElement().attributes().item(i).toAttr(); - mIWBContentWriter->writeAttribute(attr.name(), attr.value()); + mIWBContentWriter->writeCharacters(node.nodeValue()); } - QDomNode child = node.firstChild(); - while(!child.isNull()) + else { - writeQDomElementToXML(child); - child = child.nextSibling(); - } + mIWBContentWriter->writeStartElement(node.namespaceURI(), node.toElement().tagName()); - mIWBContentWriter->writeEndElement(); - } + for (int i = 0; i < node.toElement().attributes().count(); i++) + { + QDomAttr attr = node.toElement().attributes().item(i).toAttr(); + mIWBContentWriter->writeAttribute(attr.name(), attr.value()); + } + QDomNode child = node.firstChild(); + while(!child.isNull()) + { + writeQDomElementToXML(child); + child = child.nextSibling(); + } + + mIWBContentWriter->writeEndElement(); + } + } } bool UBCFFAdaptor::UBToCFFConverter::writeExtendedIwbSection() @@ -1322,7 +1323,7 @@ QDomNode UBCFFAdaptor::UBToCFFConverter::findNodeByTagName(const QDomNode &node, if (!iterNode.firstChildElement().isNull()) { QDomNode foundNode = findNodeByTagName(iterNode.firstChildElement(), tagName); - if (!foundNode.isNull()) + if (!foundNode.isNull()){ if (foundNode.isElement()) { if (tagName == foundNode.toElement().tagName()) @@ -1330,6 +1331,7 @@ QDomNode UBCFFAdaptor::UBToCFFConverter::findNodeByTagName(const QDomNode &node, } else break; + } } } diff --git a/resources/images/teacherGuide/audio.png b/resources/images/teacherGuide/audio.png new file mode 100644 index 00000000..ffb8fbf1 Binary files /dev/null and b/resources/images/teacherGuide/audio.png differ diff --git a/resources/images/teacherGuide/image.png b/resources/images/teacherGuide/image.png new file mode 100644 index 00000000..d07dda6d Binary files /dev/null and b/resources/images/teacherGuide/image.png differ diff --git a/resources/images/teacherGuide/link.png b/resources/images/teacherGuide/link.png new file mode 100644 index 00000000..893643db Binary files /dev/null and b/resources/images/teacherGuide/link.png differ diff --git a/resources/images/teacherGuide/movie.png b/resources/images/teacherGuide/movie.png new file mode 100644 index 00000000..9150c659 Binary files /dev/null and b/resources/images/teacherGuide/movie.png differ diff --git a/resources/images/teacherGuide/w3c.png b/resources/images/teacherGuide/w3c.png new file mode 100644 index 00000000..028cd087 Binary files /dev/null and b/resources/images/teacherGuide/w3c.png differ diff --git a/resources/sankore.qrc b/resources/sankore.qrc index d81ac808..f94729e7 100644 --- a/resources/sankore.qrc +++ b/resources/sankore.qrc @@ -347,5 +347,10 @@ images/licenses/ccbyncsa.png images/licenses/ccbynd.png images/licenses/ccbysa.png + images/teacherGuide/audio.png + images/teacherGuide/image.png + images/teacherGuide/link.png + images/teacherGuide/movie.png + images/teacherGuide/w3c.png diff --git a/resources/style.qss b/resources/style.qss index c542d934..38eeecbc 100644 --- a/resources/style.qss +++ b/resources/style.qss @@ -4,22 +4,13 @@ QWidget#UBLibPathViewer, QWidget#UBLibNavigatorWidget, QWidget#UBLibItemProperties, QWidget#UBDownloadWidget, -QWidget#UBWidgetList, -QWidget#UBTeacherBarDropMediaZone, -QWidget#UBTBMediaContainer +QWidget#UBTeacherGuideWidget { background: #EEEEEE; border-radius: 10px; border: 2px solid #999999; } -QFrame#UBTBSeparator -{ - background: #DDDDDD; - border-radius: 2px; - border: 1px solid #DDDDDD; -} - QWidget#UBMediaVideoContainer { background: #000000; @@ -27,40 +18,6 @@ QWidget#UBMediaVideoContainer border: 2px solid #999999; } - -QWidget#UBTBPreviewWidget -{ - background: #FFFFFF; - border-radius: 10px; - border: 2px solid #999999; -} - -QLabel#UBTBPreviewSessionTitle -{ - font-size: 12px; -} - -QLabel#UBTeacherBarPreviewTitle -{ - color: #555555; - font-size : 20px; - font-weight:bold; - padding-left:5px; -} - -QLabel#UBMediaPlayerButton -{ - padding: 0px 0px 0px 0px; -} - -QLabel#UBTeacherBarPreviewSubtitle -{ - color: #555555; - font-size : 15px; - font-weight:bold; - padding-left:5px; -} - QWidget#UBLibWebView { background: #EEEEEE; @@ -68,30 +25,6 @@ QWidget#UBLibWebView border: 2px solid #999999; } -QWidget#UBActionPreviewOwner -{ - color: #555555; - font-size : 12px; - font-weight: bold; -} - -QWidget#UBTeacherBarPreviewComments, -QWidget#UBTeacherBarTargetBox -{ - border-radius: 10px; - border: white 2px solid; - padding: 5px 5px 5px 5px; - background-color: white; -} - -QWidget#UBActionPreviewContent, -QTextEdit#UBCommentPreview -{ - border-radius : 10px; - border: 2px solid #999999; - padding: 5px 5px 5px 5px; -} - QWebView#SearchEngineView { background:white; @@ -109,9 +42,11 @@ QLabel#DockPaletteWidgetTitle font-weight:bold; } -QLineEdit#DockPaletteWidgetLineEdit +QLineEdit#UBTGLineEdit, +QLabel#UBTGMediaDropMeLabel { background: white; + border: 1 solid #999999; border-radius : 10px; padding: 2px; } @@ -268,4 +203,59 @@ QSlider::groove::horizontal height:10px; border-radius:5px; border:1px solid #555555; -} \ No newline at end of file +} + +QLabel#UBTGEditionDocumentTitle +{ + color: black; + font-size : 14px; + font-weight:bold; +} + +QLabel#UBTGPresentationDocumentTitle +{ + color: black; + font-size : 12px; + font-weight:bold; +} + +QLabel#UBTGEditionPageNumberLabel +{ + color: black; + font-size : 12px; + font-weight:bold; +} + +QLabel#UBTGPresentationPageNumberLabel +{ + color: black; + font-size : 12px; +} + +UBTGAdaptableText#UBTGEditionPageTitle, +UBTGAdaptableText#UBTGEditionComment +{ + color: black; + font-size : 12px; +} + +UBTGAdaptableText#UBTGPresentationPageTitle +{ + color: black; + font-size:16px; + font-weight:bold; + border : none; +} + +UBTGAdaptableText#UBTGPresentationComment +{ + color: black; + font-size:12px; + border : none; +} + +QFrame#UBTGEditionSeparator, +QFrame#UBTGPresentationSepartor +{ + background-color: #cccccc; +} diff --git a/src/board/UBBoardPaletteManager.cpp b/src/board/UBBoardPaletteManager.cpp index 1585df84..f21c089b 100644 --- a/src/board/UBBoardPaletteManager.cpp +++ b/src/board/UBBoardPaletteManager.cpp @@ -31,6 +31,7 @@ #include "gui/UBZoomPalette.h" #include "gui/UBActionPalette.h" #include "gui/UBFavoriteToolPalette.h" +#include "gui/UBDockTeacherGuideWidget.h" #include "web/UBWebPage.h" @@ -84,6 +85,7 @@ UBBoardPaletteManager::UBBoardPaletteManager(QWidget* container, UBBoardControll , mpCachePropWidget(NULL) , mpDownloadWidget(NULL) , mpDesktopLibWidget(NULL) + , mpTeacherGuideWidget(NULL) , mDownloadInProgress(false) { setupPalettes(); @@ -135,6 +137,7 @@ void UBBoardPaletteManager::setupDockPaletteWidgets() mpCachePropWidget = new UBCachePropertiesWidget(); mpDownloadWidget = new UBDockDownloadWidget(); + mpTeacherGuideWidget = new UBDockTeacherGuideWidget(); // Add the dock palettes mLeftPalette = new UBLeftPalette(mContainer); @@ -143,6 +146,9 @@ void UBBoardPaletteManager::setupDockPaletteWidgets() mLeftPalette->registerWidget(mpPageNavigWidget); mLeftPalette->addTab(mpPageNavigWidget); + mLeftPalette->registerWidget(mpTeacherGuideWidget); + mLeftPalette->addTab(mpTeacherGuideWidget); + mLeftPalette->connectSignals(); mRightPalette = new UBRightPalette(mContainer); @@ -170,7 +176,7 @@ void UBBoardPaletteManager::slot_changeMainMode(UBApplicationController::MainMod switch( mainMode ) { - case UBApplicationController::Board: + case UBApplicationController::Board: { // call changeMode only when switch NOT from desktop mode if(!UBApplication::applicationController->isShowingDesktop()) @@ -205,7 +211,7 @@ void UBBoardPaletteManager::slot_changeMainMode(UBApplicationController::MainMod void UBBoardPaletteManager::slot_changeDesktopMode(bool isDesktop) { UBApplicationController::MainMode currMode = UBApplication::applicationController->displayMode(); - if(!isDesktop) + if(!isDesktop) { switch( currMode ) { @@ -232,6 +238,7 @@ void UBBoardPaletteManager::setupPalettes() #endif } + setupDockPaletteWidgets(); @@ -735,8 +742,8 @@ void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode, bool is mKeyboardPalette->show(); } else - mKeyboardPalette->setParent(UBApplication::documentController->controlView()); - } + mKeyboardPalette->setParent(UBApplication::documentController->controlView()); + } } break; @@ -787,7 +794,7 @@ void UBBoardPaletteManager::addItem(const QPixmap& pPixmap, const QPointF& pos, void UBBoardPaletteManager::addItemToCurrentPage() { - UBApplication::applicationController->showBoard(); + UBApplication::applicationController->showBoard(); mAddItemPalette->hide(); if(mPixmap.isNull()) UBApplication::boardController->downloadURL(mItemUrl); diff --git a/src/board/UBBoardPaletteManager.h b/src/board/UBBoardPaletteManager.h index e90e9ed5..4e5e5d99 100644 --- a/src/board/UBBoardPaletteManager.h +++ b/src/board/UBBoardPaletteManager.h @@ -40,6 +40,7 @@ class UBServerXMLHttpRequest; class UBKeyboardPalette; class UBMainWindow; class UBApplicationController; +class UBDockTeacherGuideWidget; class UBBoardPaletteManager : public QObject { @@ -52,6 +53,7 @@ class UBBoardPaletteManager : public QObject void setupLayout(); UBLeftPalette* leftPalette(){return mLeftPalette;} UBRightPalette* rightPalette(){return mRightPalette;} + UBStylusPalette* stylusPalette(){return mStylusPalette;} void showVirtualKeyboard(bool show = true); void initPalettesPosAtStartup(); void connectToDocumentController(); @@ -134,6 +136,8 @@ class UBBoardPaletteManager : public QObject // lib widget! UBLibWidget* mpDesktopLibWidget; + UBDockTeacherGuideWidget* mpTeacherGuideWidget; + bool mDownloadInProgress; private slots: diff --git a/src/board/UBBoardView.cpp b/src/board/UBBoardView.cpp index 46ec93a4..1e493cc2 100644 --- a/src/board/UBBoardView.cpp +++ b/src/board/UBBoardView.cpp @@ -35,8 +35,8 @@ #include "gui/UBToolWidget.h" #include "gui/UBResources.h" #include "gui/UBMainWindow.h" -#include "gui/UBMediaPlayer.h" #include "gui/UBThumbnailWidget.h" +#include "gui/UBTeacherGuideWidgetsTools.h" #include "board/UBBoardController.h" @@ -49,9 +49,6 @@ #include "document/UBDocumentProxy.h" -#include "customWidgets/UBDraggableLabel.h" -#include "customWidgets/UBDraggableMedia.h" - #include "tools/UBGraphicsCompass.h" #include "tools/UBGraphicsCache.h" #include "tools/UBGraphicsTriangle.h" @@ -379,41 +376,43 @@ void UBBoardView::tabletEvent (QTabletEvent * event) } -void -UBBoardView::mousePressEvent (QMouseEvent *event) +void UBBoardView::mousePressEvent (QMouseEvent *event) { - if (isAbsurdPoint (event->pos ())) + if (isAbsurdPoint (event->pos ())) { - event->accept (); - return; + event->accept (); + return; } - mMouseDownPos = event->pos (); + mMouseDownPos = event->pos (); + + emit clickOnBoard(); - if (event->button () == Qt::LeftButton && isInteractive ()) + if (event->button () == Qt::LeftButton && isInteractive ()) { - UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController ()->stylusTool (); - if (!mTabletStylusIsPressed) - mMouseButtonIsPressed = true; + UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController ()->stylusTool (); - if (currentTool == UBStylusTool::ZoomIn) + if (!mTabletStylusIsPressed) + mMouseButtonIsPressed = true; + + if (currentTool == UBStylusTool::ZoomIn) { - mController->zoomIn (mapToScene (event->pos ())); - event->accept (); + mController->zoomIn (mapToScene (event->pos ())); + event->accept (); } - else if (currentTool == UBStylusTool::ZoomOut) + else if (currentTool == UBStylusTool::ZoomOut) { - mController->zoomOut (mapToScene (event->pos ())); - event->accept (); + mController->zoomOut (mapToScene (event->pos ())); + event->accept (); } - else if (currentTool == UBStylusTool::Hand) + else if (currentTool == UBStylusTool::Hand) { - viewport ()->setCursor (QCursor (Qt::ClosedHandCursor)); - mPreviousPoint = event->posF (); - event->accept (); + viewport ()->setCursor (QCursor (Qt::ClosedHandCursor)); + mPreviousPoint = event->posF (); + event->accept (); } - else if (currentTool == UBStylusTool::Selector) + else if (currentTool == UBStylusTool::Selector) { QSet existingTools = scene()->tools(); @@ -443,67 +442,67 @@ UBBoardView::mousePressEvent (QMouseEvent *event) } suspendedMousePressEvent = new QMouseEvent(event->type(), event->pos(), event->button(), event->buttons(), event->modifiers()); // удалить } - + event->accept(); } - else if (currentTool == UBStylusTool::Text) + else if (currentTool == UBStylusTool::Text) { - int frameWidth = UBSettings::settings ()->objectFrameWidth; - QRectF fuzzyRect (0, 0, frameWidth * 4, frameWidth * 4); - fuzzyRect.moveCenter (mapToScene (mMouseDownPos)); + int frameWidth = UBSettings::settings ()->objectFrameWidth; + QRectF fuzzyRect (0, 0, frameWidth * 4, frameWidth * 4); + fuzzyRect.moveCenter (mapToScene (mMouseDownPos)); - UBGraphicsTextItem* foundTextItem = 0; - QListIterator it (scene ()->items (fuzzyRect)); + UBGraphicsTextItem* foundTextItem = 0; + QListIterator it (scene ()->items (fuzzyRect)); - while (it.hasNext () && !foundTextItem) + while (it.hasNext () && !foundTextItem) { - foundTextItem = qgraphicsitem_cast(it.next ()); + foundTextItem = qgraphicsitem_cast(it.next ()); } - if (foundTextItem) + if (foundTextItem) { - mIsCreatingTextZone = false; - QGraphicsView::mousePressEvent (event); + mIsCreatingTextZone = false; + QGraphicsView::mousePressEvent (event); } - else + else { - scene ()->deselectAllItems (); + scene ()->deselectAllItems (); - if (!mRubberBand) - mRubberBand = new UBRubberBand (QRubberBand::Rectangle, this); + if (!mRubberBand) + mRubberBand = new UBRubberBand (QRubberBand::Rectangle, this); - mRubberBand->setGeometry (QRect (mMouseDownPos, QSize ())); - mRubberBand->show (); - mIsCreatingTextZone = true; + mRubberBand->setGeometry (QRect (mMouseDownPos, QSize ())); + mRubberBand->show (); + mIsCreatingTextZone = true; - event->accept (); + event->accept (); } } - else if (currentTool == UBStylusTool::Capture) + else if (currentTool == UBStylusTool::Capture) { - scene ()->deselectAllItems (); + scene ()->deselectAllItems (); - if (!mRubberBand) - mRubberBand = new UBRubberBand (QRubberBand::Rectangle, this); + if (!mRubberBand) + mRubberBand = new UBRubberBand (QRubberBand::Rectangle, this); - mRubberBand->setGeometry (QRect (mMouseDownPos, QSize ())); - mRubberBand->show (); - mIsCreatingSceneGrabZone = true; + mRubberBand->setGeometry (QRect (mMouseDownPos, QSize ())); + mRubberBand->show (); + mIsCreatingSceneGrabZone = true; - event->accept (); + event->accept (); } - else + else + { + if(UBDrawingController::drawingController()->mActiveRuler==NULL) { - if(UBDrawingController::drawingController()->mActiveRuler==NULL) - { - viewport()->setCursor (QCursor (Qt::BlankCursor)); - } + viewport()->setCursor (QCursor (Qt::BlankCursor)); + } - if (scene () && !mTabletStylusIsPressed) - { - scene ()->inputDevicePress (mapToScene (UBGeometryUtils::pointConstrainedInRect (event->pos (), rect ()))); - } - event->accept (); + if (scene () && !mTabletStylusIsPressed) + { + scene ()->inputDevicePress (mapToScene (UBGeometryUtils::pointConstrainedInRect (event->pos (), rect ()))); + } + event->accept (); } } } @@ -533,7 +532,7 @@ UBBoardView::mouseMoveEvent (QMouseEvent *event) if((event->pos() - mLastPressedMousePos).manhattanLength() < QApplication::startDragDistance()) { return; } - + if (movingItem && (mMouseButtonIsPressed || mTabletStylusIsPressed)) { QPointF scenePos = mapToScene(event->pos()); @@ -591,7 +590,7 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event) mWidgetMoved = false; movingItem = NULL; } - else if (movingItem && suspendedMousePressEvent) + else if (movingItem && suspendedMousePressEvent) { QGraphicsView::mousePressEvent(suspendedMousePressEvent); // suspendedMousePressEvent is deleted by old Qt event loop movingItem = NULL; @@ -703,7 +702,7 @@ UBBoardView::wheelEvent (QWheelEvent *wheelEvent) QList selItemsList = scene()->selectedItems(); // if NO have selected items, than no need process mouse wheel. just exist - if( selItemsList.count() > 0 ) + if( selItemsList.count() > 0 ) { // only one selected item possible, so we will work with first item only QGraphicsItem * selItem = selItemsList[0]; @@ -711,7 +710,7 @@ UBBoardView::wheelEvent (QWheelEvent *wheelEvent) // get items list under mouse cursor QPointF scenePos = mapToScene(wheelEvent->pos()); QList itemsList = scene()->items(scenePos); - + QBool isSlectedAndMouseHower = itemsList.contains(selItem); if(isSlectedAndMouseHower) { @@ -765,11 +764,6 @@ UBBoardView::drawItems (QPainter *painter, int numItems, } } -//void UBBoardView::dragEnterEvent (QDragEnterEvent *event) -//{ -// // TODO UB 4.x be smarter with drag accept code .... we cannot handle everything ... -// event->acceptProposedAction (); -//} void UBBoardView::dragMoveEvent (QDragMoveEvent *event) { @@ -806,15 +800,17 @@ void UBBoardView::dropEvent (QDropEvent *event) QGraphicsItem* graphicsItemAtPos = itemAt(event->pos().x(),event->pos().y()); UBGraphicsWidgetItem* graphicsWidget = dynamic_cast(graphicsItemAtPos); - if (graphicsWidget && graphicsWidget->acceptDrops()) { + qDebug() << event->source(); + if (graphicsWidget && graphicsWidget->acceptDrops()) { graphicsWidget->processDropEvent(event); event->acceptProposedAction(); - } else if (!event->source() || dynamic_cast(event->source()) - || dynamic_cast(event->source()) || dynamic_cast(event->source()) - || dynamic_cast(event->source()) || dynamic_cast(event->source())) { - + } + else if (!event->source() + || dynamic_cast(event->source()) + || dynamic_cast(event->source()) + || dynamic_cast(event->source())) { mController->processMimeData (event->mimeData (), mapToScene (event->pos ())); event->acceptProposedAction(); } @@ -966,7 +962,7 @@ UBBoardView::setToolCursor (int tool) controlViewport->setCursor (UBResources::resources ()->penCursor); break; case UBStylusTool::Eraser: - controlViewport->setCursor (UBResources::resources ()->eraserCursor); + controlViewport->setCursor (UBResources::resources ()->eraserCursor); break; case UBStylusTool::Marker: controlViewport->setCursor (UBResources::resources ()->markerCursor); diff --git a/src/board/UBBoardView.h b/src/board/UBBoardView.h index 16280790..1d54ed36 100644 --- a/src/board/UBBoardView.h +++ b/src/board/UBBoardView.h @@ -46,6 +46,7 @@ class UBBoardView : public QGraphicsView void resized(QResizeEvent* event); void hidden(); void shown(); + void clickOnBoard(); protected: diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp index b8a3e257..05e5f8fb 100644 --- a/src/core/UBApplication.cpp +++ b/src/core/UBApplication.cpp @@ -257,10 +257,10 @@ int UBApplication::exec(const QString& pFileToImport) applicationController = new UBApplicationController(boardController->controlView(), boardController->displayView(), mainWindow, staticMemoryCleaner); - connect(applicationController, SIGNAL(mainModeChanged(UBApplicationController::MainMode)), + connect(applicationController, SIGNAL(mainModeChanged(UBApplicationController::MainMode)), boardController->paletteManager(), SLOT(slot_changeMainMode(UBApplicationController::MainMode))); - connect(applicationController, SIGNAL(desktopMode(bool)), + connect(applicationController, SIGNAL(desktopMode(bool)), boardController->paletteManager(), SLOT(slot_changeDesktopMode(bool))); @@ -283,8 +283,8 @@ int UBApplication::exec(const QString& pFileToImport) connect(mainWindow->actionSankoreEditor, SIGNAL(triggered()), applicationController, SLOT(showSankoreEditor())); connect(mainWindow->actionCheckUpdate, SIGNAL(triggered()), applicationController, SLOT(checkUpdateRequest())); - - + + toolBarPositionChanged(UBSettings::settings()->appToolBarPositionedAtTop->get()); bool bUseMultiScreen = UBSettings::settings()->appUseMultiscreen->get().toBool(); @@ -645,29 +645,13 @@ void UBStyle::drawItemText(QPainter *painter, const QRect &rect, int alignment, painter->setPen(savedPen); } -QString UBApplication::globalStyleSheet() -{ - QString style; - - QFile f(":style.qss"); - if(f.exists()) - { - if(f.open(QIODevice::ReadOnly)) - { - style = QString(f.readAll()); - } - } - - return style; -} - QString UBApplication::urlFromHtml(QString html) { QString _html; QRegExp comments("\\"); QString url; QDomDocument domDoc; - + // We remove all the comments & CRLF of this html _html = html.remove(comments); domDoc.setContent(_html.remove(QRegExp("[\\0]"))); diff --git a/src/core/UBApplication.h b/src/core/UBApplication.h index 0ca7ac37..ee4dba22 100644 --- a/src/core/UBApplication.h +++ b/src/core/UBApplication.h @@ -78,7 +78,6 @@ class UBApplication : public QtSingleApplication static void setDisabled(bool disable); static QObject* staticMemoryCleaner; - static QString globalStyleSheet(); void decorateActionMenu(QAction* action); void insertSpaceToToolbarBeforeAction(QToolBar* toolbar, QAction* action, int width = -1); diff --git a/src/customWidgets/UBActionableWidget.cpp b/src/customWidgets/UBActionableWidget.cpp index 65e440a3..78d8ea6b 100644 --- a/src/customWidgets/UBActionableWidget.cpp +++ b/src/customWidgets/UBActionableWidget.cpp @@ -1,3 +1,18 @@ +/* + * 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, either version 3 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include #include diff --git a/src/customWidgets/UBActionableWidget.h b/src/customWidgets/UBActionableWidget.h index 683463df..23a2478c 100644 --- a/src/customWidgets/UBActionableWidget.h +++ b/src/customWidgets/UBActionableWidget.h @@ -1,3 +1,18 @@ +/* + * 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, either version 3 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #ifndef UBACTIONABLEWIDGET_H #define UBACTIONABLEWIDGET_H diff --git a/src/customWidgets/UBDraggableLabel.cpp b/src/customWidgets/UBDraggableLabel.cpp deleted file mode 100644 index 200205b9..00000000 --- a/src/customWidgets/UBDraggableLabel.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include -#include -#include - -#include "UBDraggableLabel.h" - - -UBDraggableLabel::UBDraggableLabel(QWidget *parent) : - QLabel(parent) -{ -} - -UBDraggableLabel::~UBDraggableLabel() -{ - //NOOP -} - -void UBDraggableLabel::loadImage(QString imagePath) -{ - mSourcePath = imagePath; - QPixmap pix = QPixmap(mSourcePath); - setPixmap(pix); - setScaledContents(true); -} - -void UBDraggableLabel::mousePressEvent(QMouseEvent *event) -{ - Q_UNUSED(event); - QMimeData *mimeData = new QMimeData; - QList urls; - urls << QUrl::fromLocalFile(mSourcePath); - mimeData->setUrls(urls); - mimeData->setText(mSourcePath); - - - QDrag *drag = new QDrag(this); - drag->setMimeData(mimeData); - drag->start(); -} diff --git a/src/customWidgets/UBDraggableLabel.h b/src/customWidgets/UBDraggableLabel.h deleted file mode 100644 index 384b313e..00000000 --- a/src/customWidgets/UBDraggableLabel.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef UBDRAGGABLELABEL_H -#define UBDRAGGABLELABEL_H - -#include - -class UBDraggableLabel : public QLabel -{ - Q_OBJECT -public: - UBDraggableLabel(QWidget *parent = 0); - ~UBDraggableLabel(); - void loadImage(QString imagePath); -signals: - -public slots: - -protected: - QString mSourcePath; - void mousePressEvent(QMouseEvent *event); - -}; - -#endif // UBDRAGGABLELABEL_H diff --git a/src/customWidgets/UBDraggableMedia.cpp b/src/customWidgets/UBDraggableMedia.cpp deleted file mode 100644 index 4136f742..00000000 --- a/src/customWidgets/UBDraggableMedia.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include -#include - -#include "UBDraggableMedia.h" - -UBDraggableMedia::UBDraggableMedia(eMediaType type, QWidget *parent, const char *name):UBMediaWidget(type, parent, name) -{ - removeAllActions(); -} - -UBDraggableMedia::~UBDraggableMedia() -{ - -} - -void UBDraggableMedia::mousePressEvent(QMouseEvent* ev) -{ - if(Qt::LeftButton == ev->button()){ - mDragStartPos = ev->pos(); - } -} - -void UBDraggableMedia::mouseMoveEvent(QMouseEvent* ev) -{ - if(!(ev->buttons() & Qt::LeftButton)){ - return; - } - if((ev->pos() - mDragStartPos).manhattanLength() < QApplication::startDragDistance()){ - return; - } - QDrag *drag = new QDrag(this); - QMimeData *mimeData = new QMimeData; - - QList urls; - urls << QUrl(mFilePath); - mimeData->setText(mFilePath); - mimeData->setUrls(urls); - - drag->setMimeData(mimeData); - - drag->exec(Qt::CopyAction | Qt::MoveAction); -} diff --git a/src/customWidgets/UBDraggableMedia.h b/src/customWidgets/UBDraggableMedia.h deleted file mode 100644 index b45c9391..00000000 --- a/src/customWidgets/UBDraggableMedia.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef UBDRAGGABLEMEDIA_H -#define UBDRAGGABLEMEDIA_H - -#include "UBMediaWidget.h" - -class UBDraggableMedia : public UBMediaWidget -{ -public: - UBDraggableMedia(eMediaType type = eMediaType_Video, QWidget* parent=0, const char* name="UBDraggableMedia"); - ~UBDraggableMedia(); -protected: - void mousePressEvent(QMouseEvent* ev); - void mouseMoveEvent(QMouseEvent* ev); - -private: - QPoint mDragStartPos; -}; - -#endif // UBDRAGGABLEMEDIA_H diff --git a/src/customWidgets/UBMediaWidget.cpp b/src/customWidgets/UBMediaWidget.cpp index 4bef693b..cbc0b842 100644 --- a/src/customWidgets/UBMediaWidget.cpp +++ b/src/customWidgets/UBMediaWidget.cpp @@ -34,9 +34,10 @@ UBMediaWidget::UBMediaWidget(eMediaType type, QWidget *parent, const char *name) , mBorder(5) , mpMediaContainer(NULL) , mpCover(NULL) +// , mpVideoStackedWidget(NULL) +// , mpSnapshotVideoWidget(NULL) { - setAttribute(Qt::WA_StyledBackground, true); - setStyleSheet(UBApplication::globalStyleSheet()); + SET_STYLE_SHEET(); addAction(eAction_Close); mType = type; @@ -73,6 +74,8 @@ UBMediaWidget::~UBMediaWidget() DELETEPTR(mpPlayStopButton); DELETEPTR(mpAudioOutput); DELETEPTR(mpVideoWidget); +// DELETEPTR(mpVideoStackedWidget); +// DELETEPTR(mpSnapshotVideoWidget); DELETEPTR(mpMediaObject); DELETEPTR(mpCover); } @@ -118,6 +121,13 @@ void UBMediaWidget::showEvent(QShowEvent* event) QWidget::showEvent(event); } +void UBMediaWidget::hideEvent(QHideEvent* event) +{ + if(mpMediaObject->state() == Phonon::PlayingState) + mpMediaObject->stop(); + UBActionableWidget::hideEvent(event); +} + /** * \brief Create the media player */ @@ -128,10 +138,17 @@ void UBMediaWidget::createMediaPlayer() mpMediaContainer->setLayout(&mMediaLayout); if(eMediaType_Video == mType){ - mMediaLayout.setContentsMargins(10, 10, 25, 10); + mMediaLayout.setContentsMargins(10, 10, 10, 10); if(isVisible()){ mpVideoWidget = new Phonon::VideoWidget(this); mMediaLayout.addStretch(1); + +// mpVideoStackedWidget = new QStackedWidget(this); +// mpVideoStackedWidget->addWidget(mpVideoWidget); +// mpSnapshotVideoWidget = new QLabel(this); +// mpVideoStackedWidget->addWidget(mpSnapshotVideoWidget); +// mMediaLayout.addWidget(mpVideoStackedWidget,0); + mMediaLayout.addWidget(mpVideoWidget, 0); mMediaLayout.addStretch(1); Phonon::createPath(mpMediaObject, mpVideoWidget); @@ -171,6 +188,22 @@ void UBMediaWidget::adaptSizeToVideo() } } +//void UBMediaWidget::updateView(Phonon::State nextState) +//{ +// if(eMediaType_Video == mType){ +// if(nextState != Phonon::PlayingState){ +// const QPixmap& snapshot = QPixmap::grabWindow(mpVideoWidget->winId()); +// if(snapshot.size().width()!= 0){ +// mpSnapshotVideoWidget->setPixmap(snapshot); +// mpVideoStackedWidget->setCurrentWidget(mpSnapshotVideoWidget); +// } +// } +// else +// mpVideoStackedWidget->setCurrentWidget(mpVideoWidget); +// } + +//} + /** * \brief Handle the media state change notification * @param newState as the new state @@ -199,6 +232,7 @@ void UBMediaWidget::onStateChanged(Phonon::State newState, Phonon::State oldStat mpPauseButton->setEnabled(false); mpSlider->setValue(0); } + //updateView(newState); } } diff --git a/src/customWidgets/UBMediaWidget.h b/src/customWidgets/UBMediaWidget.h index dbc85b78..0d4db8f0 100644 --- a/src/customWidgets/UBMediaWidget.h +++ b/src/customWidgets/UBMediaWidget.h @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -75,6 +76,7 @@ public: protected: void resizeEvent(QResizeEvent* ev); void showEvent(QShowEvent* event); + void hideEvent(QHideEvent* event); /** The current media file path */ QString mFilePath; @@ -89,6 +91,7 @@ private slots: private: void createMediaPlayer(); void adaptSizeToVideo(); +// void updateView(Phonon::State nextState); /** The current media type */ eMediaType mType; @@ -122,6 +125,9 @@ private: QLabel* mpCover; /** The media url */ QString mUrl; + +// QStackedWidget* mpVideoStackedWidget; +// QLabel* mpSnapshotVideoWidget; }; #endif // UBMEDIAWIDGET_H diff --git a/src/customWidgets/UBWidgetList.cpp b/src/customWidgets/UBWidgetList.cpp deleted file mode 100644 index a9e9a305..00000000 --- a/src/customWidgets/UBWidgetList.cpp +++ /dev/null @@ -1,229 +0,0 @@ -#include -#include -#include -#include - -#include "globals/UBGlobals.h" -#include "UBWidgetList.h" - -UBWidgetList::UBWidgetList(QWidget* parent, eWidgetListOrientation orientation, const char* name):QScrollArea(parent) - , mCanRemove(true) - , mpLayout(NULL) - , mpContainer(NULL) - , mMargin(10) - , mListElementsSpacing(10) - , mpEmptyLabel(NULL) - , mpCurrentWidget(NULL) -{ - setObjectName(name); - mOrientation = orientation; - mpContainer = new QWidget(this); - mpEmptyLabel = new QLabel(this); - mpEmptyLabel->setObjectName("emptyString"); - mpEmptyLabel->setWordWrap(true); - mpEmptyLabel->setAlignment(Qt::AlignCenter); - - if(eWidgetListOrientation_Vertical == orientation){ - setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - mpLayout = new QVBoxLayout(mpContainer); - } - else{ - setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - mpLayout = new QHBoxLayout(mpContainer); - } - mpLayout->setContentsMargins(margin(), margin(), margin(), margin()); - mpContainer->setLayout(mpLayout); - setWidget(mpContainer); -} - -UBWidgetList::~UBWidgetList() -{ - DELETEPTR(mpEmptyLabel); - DELETEPTR(mpLayout); - DELETEPTR(mpContainer); -} - -void UBWidgetList::addWidget(QWidget *widget) -{ - if(NULL != mpLayout && NULL != widget){ - widget->setParent(mpContainer); - mpEmptyLabel->setVisible(false); - mWidgetInfo[widget] = widget->size(); - updateView(size()); - mpLayout->addWidget(widget); - - // This call is used only to refresh the size of the widgets - updateSizes(); - } -} - -void UBWidgetList::removeWidget(QWidget *widget) -{ - if(NULL != mpLayout && NULL != widget){ - mpLayout->removeWidget(widget); - mWidgetInfo.remove(widget); - widget->setVisible(false); - updateView(size()); - if(0 == mpLayout->count()){ - mpEmptyLabel->setVisible(true); - } - if(mpCurrentWidget == widget){ - mpCurrentWidget = NULL; - } - } -} - - -int UBWidgetList::scaleWidgets(QSize pSize) -{ - // to remove the first spacing that shouldn't be there. - int result = -mListElementsSpacing; - foreach(QWidget* eachWidget, mWidgetInfo.keys()){ - qreal scaleFactor = 0; - int newWidgetWidth = pSize.width(); - int newWidgetHeight = pSize.height(); - if(eWidgetListOrientation_Vertical == mOrientation){ - scaleFactor = (float)mWidgetInfo[eachWidget].width() / (float)pSize.width(); - newWidgetHeight = mWidgetInfo[eachWidget].height()/scaleFactor; - result += newWidgetHeight; - eachWidget->setMinimumHeight(newWidgetHeight- 1); - eachWidget->setMaximumHeight(newWidgetHeight); - } - else{ - scaleFactor = (float)mWidgetInfo[eachWidget].height() / (float)pSize.height(); - newWidgetWidth = mWidgetInfo[eachWidget].width()/scaleFactor; - result += newWidgetWidth; - eachWidget->setMinimumWidth(newWidgetWidth - 1); - eachWidget->setMaximumWidth(newWidgetWidth); - } - //Adding a vertical/horizontal space between each element of the list - result += mListElementsSpacing; - } - return result; -} - -void UBWidgetList::scaleContainer(QSize pSize, int updateValue) -{ - if(eWidgetListOrientation_Vertical == mOrientation) - mpContainer->resize(pSize.width(), updateValue); - else - mpContainer->resize(updateValue, pSize.height()); -} - - -void UBWidgetList::updateView(QSize pSize) -{ - // Widgets on list are resized automatically to fit the mpcontainer. - // so if you want to keep the aspect ratio you have to calculate - // the sum of the new widget height and give it to the mpContainer. - // The container resize will trig the widgets resize and the good - // height permits to respect the aspect ratio. - int updatedValue = scaleWidgets(pSize); - scaleContainer(pSize,updatedValue); -} - - - -void UBWidgetList::resizeEvent(QResizeEvent *ev) -{ - Q_UNUSED(ev); - mpEmptyLabel->setGeometry((width() - mpEmptyLabel->width()) / 2, - (height() - mpEmptyLabel->height()) /2, - mpEmptyLabel->width(), - mpEmptyLabel->height()); - updateView(size()); - updateSizes(); -} - -void UBWidgetList::mousePressEvent(QMouseEvent *ev) -{ - Q_UNUSED(ev); - if(mCanRemove){ - QWidget* pWAt = widgetAt(ev->pos()); - if(NULL != mpCurrentWidget){ - if(pWAt != mpCurrentWidget){ - mpCurrentWidget->setActionsVisible(false); - update(); - } - } - mpCurrentWidget = dynamic_cast(pWAt); - if(NULL != mpCurrentWidget){ - mpCurrentWidget->setActionsVisible(true); - update(); - } - } - update(); -} - -QWidget* UBWidgetList::widgetAt(QPoint p) -{ - QWidget* pW = NULL; - pW = childAt(p); - if(NULL != pW){ - do{ - if( "UBTeacherStudentAction" == pW->objectName() || - "UBUrlWidget" == pW->objectName() || - "UBTBMediaPicture" == pW->objectName() || - "UBMediaWidget" == pW->objectName()){ - return pW; - }else{ - pW = pW->parentWidget(); - } - }while(NULL != pW && this != pW); - } - - return pW; -} - -void UBWidgetList::updateSizes() -{ - // Resize all the widgets - foreach(QWidget* eachWidget, mWidgetInfo.keys()){ - if(NULL != eachWidget){ - QSize originalSize = mWidgetInfo[eachWidget]; - int currentWidth = mpContainer->width(); - int currentHeight = mpContainer->height(); - if(eWidgetListOrientation_Vertical == mOrientation){ - if(verticalScrollBar()->isVisible()){ - currentWidth -= verticalScrollBar()->width(); - eachWidget->setStyleSheet(QString("margin-right:%0;").arg(verticalScrollBar()->width())); - } - float scaleFactor = (float)currentWidth/(float)originalSize.width(); - currentHeight = originalSize.height()*scaleFactor; - }else{ - if(horizontalScrollBar()->isVisible()){ - currentHeight -= horizontalScrollBar()->height(); - eachWidget->setStyleSheet(QString("padding-bottom:%0;").arg(horizontalScrollBar()->height())); - } - float scaleFactor = (float)currentHeight/(float)originalSize.height(); - currentWidth = originalSize.width()*scaleFactor; - } - - eachWidget->resize(currentWidth, currentHeight); - } - } -} - -void UBWidgetList::setMargin(int margin) -{ - mMargin = margin; -} - -int UBWidgetList::margin() -{ - return mMargin; -} - -void UBWidgetList::setEmptyText(const QString &text) -{ - if(NULL != mpEmptyLabel){ - mpEmptyLabel->setText(text); - } -} - -bool UBWidgetList::empty() -{ - return mWidgetInfo.empty(); -} diff --git a/src/customWidgets/UBWidgetList.h b/src/customWidgets/UBWidgetList.h deleted file mode 100644 index d2cd3a6c..00000000 --- a/src/customWidgets/UBWidgetList.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef UBWIDGETLIST_H -#define UBWIDGETLIST_H - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "interfaces/IResizeable.h" -#include "customWidgets/UBActionableWidget.h" - -typedef enum{ - eWidgetListOrientation_Vertical, - eWidgetListOrientation_Horizontal -}eWidgetListOrientation; - - -class UBWidgetList : public QScrollArea -{ - Q_OBJECT - - typedef struct - { - QSize size; - bool isResizable; - } sWidgetProperties; - -public: - UBWidgetList(QWidget* parent=0, eWidgetListOrientation orientation = eWidgetListOrientation_Vertical, const char* name = "UBWidgetList"); - ~UBWidgetList(); - void addWidget(QWidget* widget); - void removeWidget(QWidget* widget); - void setMargin(int margin); - void setEmptyText(const QString& text); - int margin(); - bool empty(); - void setListElementSpacing(int margin) { mListElementsSpacing = margin; } - int listElementsSpacing() {return mListElementsSpacing; } - -signals: - void closeWidget(QWidget* w); - -protected: - bool mCanRemove; - - void resizeEvent(QResizeEvent* ev); - void mousePressEvent(QMouseEvent* ev); - -private: - QWidget* widgetAt(QPoint p); - int scaleWidgets(QSize pSize); - void scaleContainer(QSize pSize, int updateValue); - void updateView(QSize pSize); - void updateSizes(); - QBoxLayout* mpLayout; - QWidget* mpContainer; - eWidgetListOrientation mOrientation; - int mMargin; - int mListElementsSpacing; - QMap mWidgetInfo; - QLabel* mpEmptyLabel; - UBActionableWidget* mpCurrentWidget; -}; - -#endif // UBWIDGETLIST_H diff --git a/src/customWidgets/customWidgets.pri b/src/customWidgets/customWidgets.pri index c531d4b3..a3c64030 100644 --- a/src/customWidgets/customWidgets.pri +++ b/src/customWidgets/customWidgets.pri @@ -1,13 +1,8 @@ -HEADERS += src/customWidgets/UBWidgetList.h \ - src/customWidgets/UBDraggableLabel.h \ +HEADERS += \ src/customWidgets/UBMediaWidget.h \ - src/globals/UBGlobals.h \ - src/customWidgets/UBDraggableMedia.h \ src/customWidgets/UBActionableWidget.h - -SOURCES += src/customWidgets/UBWidgetList.cpp \ - src/customWidgets/UBDraggableLabel.cpp \ + +SOURCES += \ src/customWidgets/UBMediaWidget.cpp \ - src/customWidgets/UBDraggableMedia.cpp \ src/customWidgets/UBActionableWidget.cpp diff --git a/src/desktop/UBDesktopAnnotationController.cpp b/src/desktop/UBDesktopAnnotationController.cpp index 1f27f607..13b64aff 100644 --- a/src/desktop/UBDesktopAnnotationController.cpp +++ b/src/desktop/UBDesktopAnnotationController.cpp @@ -762,21 +762,6 @@ void UBDesktopAnnotationController::togglePropertyPalette(UBActionPalette *palet void UBDesktopAnnotationController::switchCursor(const int tool) { -// enum Enum -// { -// Pen = 0, -// Eraser, -// Marker, -// Selector, -// Hand, -// ZoomIn, -// ZoomOut, -// Pointer, -// Line, -// Text, -// Capture -// }; - mTransparentDrawingScene->setToolCursor(tool); mTransparentDrawingView->setToolCursor(tool); } @@ -826,17 +811,6 @@ void UBDesktopAnnotationController::onDesktopPaletteMaximized() connect(pPointerButton, SIGNAL(pressed()), this, SLOT(pointerActionPressed())); connect(pPointerButton, SIGNAL(released()), this, SLOT(pointerActionReleased())); } - - // enum Enum - // { - // Hand, - // ZoomIn, - // ZoomOut, - // Line, - // Text, - // Capture - // }; - } /** @@ -872,16 +846,6 @@ void UBDesktopAnnotationController::onDesktopPaletteMinimize() void UBDesktopAnnotationController::TransparentWidgetResized() { -/* - int rW = UBApplication::boardController->paletteManager()->rightPalette()->width(); - int rH_ = UBApplication::boardController->paletteManager()->rightPalette()->height(); - int rH = mTransparentDrawingView->height(); - - UBApplication::boardController->paletteManager()->rightPalette()->resize(rW+1, rH); - - // UBApplication::boardController->paletteManager()->rightPalette()->resize(500, 500); -*/ - onTransparentWidgetResized(); } @@ -900,8 +864,6 @@ void UBDesktopAnnotationController::onTransparentWidgetResized() UBApplication::boardController->paletteManager()->leftPalette()->resize(lW+1, rH); UBApplication::boardController->paletteManager()->leftPalette()->resize(lW, rH); - -// mRightPalette->resize(mRightPalette->width(), mTransparentDrawingView->height()); } void UBDesktopAnnotationController::updateMask(bool bTransparent) diff --git a/src/globals/UBGlobals.h b/src/globals/UBGlobals.h index 5a98fd10..93ebcb84 100644 --- a/src/globals/UBGlobals.h +++ b/src/globals/UBGlobals.h @@ -1,11 +1,38 @@ +/* + * 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, either version 3 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #ifndef UBGLOBALS_H #define UBGLOBALS_H +#include +#include + #define DELETEPTR(ptr) if(NULL != ptr){ \ delete ptr; \ ptr = NULL; \ } +#define SET_STYLE_SHEET() {\ + setAttribute(Qt::WA_StyledBackground, true);\ + QString style;\ + QFile f(":style.qss");\ + if(f.exists() && f.open(QIODevice::ReadOnly))\ + style = QString(f.readAll());\ + setStyleSheet(style);\ +} + #ifdef Q_WS_WIN #define WARNINGS_DISABLE __pragma(warning(push, 0)); @@ -14,7 +41,7 @@ #ifdef NO_THIRD_PARTY_WARNINGS // disabling warning level to 0 and save old state #define THIRD_PARTY_WARNINGS_DISABLE WARNINGS_DISABLE -#else +#else // just save old state (needs for not empty define) #define THIRD_PARTY_WARNINGS_DISABLE __pragma(warning(push)); #endif //#ifdef NO_THIRD_PARTY_WARNINGS @@ -24,9 +51,9 @@ #define WARNINGS_DISABLE _Pragma("GCC diagnostic push"); \ _Pragma("GCC diagnostic ignored \"-Wunused-parameter\""); \ _Pragma("GCC diagnostic ignored \"-Wunused-variable\""); \ -_Pragma("GCC diagnostic ignored \"-Wsign-compare\""); +_Pragma("GCC diagnostic ignored \"-Wsign-compare\""); -#define WARNINGS_ENABLE _Pragma("GCC diagnostic pop"); +#define WARNINGS_ENABLE _Pragma("GCC diagnostic pop"); #ifdef NO_THIRD_PARTY_WARNINGS //disabling some warnings @@ -43,4 +70,4 @@ _Pragma("GCC diagnostic ignored \"-Wsign-compare\""); #define THIRD_PARTY_WARNINGS_ENABLE WARNINGS_ENABLE #endif // UBGLOBALS_H - + diff --git a/src/gui/UBActionPalette.cpp b/src/gui/UBActionPalette.cpp index 304f8ec2..96d9395e 100644 --- a/src/gui/UBActionPalette.cpp +++ b/src/gui/UBActionPalette.cpp @@ -231,6 +231,7 @@ void UBActionPalette::mouseReleaseEvent(QMouseEvent * event) void UBActionPalette::actionChanged() { + emit itemOnActionPaletteChanged(); for(int i = 0; i < mActions.length() && i < mButtons.length(); i++) { mButtons.at(i)->setVisible(mActions.at(i)->isVisible()); diff --git a/src/gui/UBActionPalette.h b/src/gui/UBActionPalette.h index dc64a408..5e5604a8 100644 --- a/src/gui/UBActionPalette.h +++ b/src/gui/UBActionPalette.h @@ -56,10 +56,12 @@ class UBActionPalette : public UBFloatingPalette public slots: void close(); + signals: void closed(); void buttonGroupClicked(int id); void customMouseReleased(); + void itemOnActionPaletteChanged(); protected: virtual void paintEvent(QPaintEvent *event); diff --git a/src/gui/UBCachePropertiesWidget.cpp b/src/gui/UBCachePropertiesWidget.cpp index e0c74986..ada7f785 100644 --- a/src/gui/UBCachePropertiesWidget.cpp +++ b/src/gui/UBCachePropertiesWidget.cpp @@ -7,6 +7,7 @@ #include "core/UBApplication.h" #include "core/UBApplicationController.h" +#include "globals/UBGlobals.h" #include "board/UBBoardController.h" #include "domain/UBGraphicsScene.h" @@ -34,8 +35,8 @@ UBCachePropertiesWidget::UBCachePropertiesWidget(QWidget *parent, const char *na , mpCurrentCache(NULL) { setObjectName(name); - setAttribute(Qt::WA_StyledBackground, true); - setStyleSheet(UBApplication::globalStyleSheet()); + + SET_STYLE_SHEET(); mName = "CachePropWidget"; mVisibleState = false; @@ -283,7 +284,7 @@ void UBCachePropertiesWidget::updateCurrentCache() if( UBApplication::applicationController != NULL ) { // if app controller is available, and current mode is Board, and no show desktop, than all ok, just process - if( UBApplication::applicationController->displayMode() == UBApplicationController::Board && + if( UBApplication::applicationController->displayMode() == UBApplicationController::Board && !UBApplication::applicationController->isShowingDesktop()) isBoardMode = true; } @@ -348,4 +349,4 @@ void UBCachePropertiesWidget::onCacheEnabled() { emit showTab(this); } - + diff --git a/src/gui/UBDockDownloadWidget.cpp b/src/gui/UBDockDownloadWidget.cpp index 01b5d0ac..4ce9d07e 100644 --- a/src/gui/UBDockDownloadWidget.cpp +++ b/src/gui/UBDockDownloadWidget.cpp @@ -15,6 +15,8 @@ #include "UBDockDownloadWidget.h" #include "core/UBApplication.h" +#include "globals/UBGlobals.h" + UBDockDownloadWidget::UBDockDownloadWidget(QWidget *parent, const char *name):UBDockPaletteWidget(parent, name) , mpLayout(NULL) , mpDLWidget(NULL) @@ -22,8 +24,7 @@ UBDockDownloadWidget::UBDockDownloadWidget(QWidget *parent, const char *name):UB mName = "DownloadWidget"; mVisibleState = false; - setAttribute(Qt::WA_StyledBackground, true); - setStyleSheet(UBApplication::globalStyleSheet()); + SET_STYLE_SHEET(); mIconToLeft = QPixmap(":images/download_open.png"); mIconToRight = QPixmap(":images/download_close.png"); diff --git a/src/gui/UBDockTeacherGuideWidget.cpp b/src/gui/UBDockTeacherGuideWidget.cpp new file mode 100644 index 00000000..f8ad4f43 --- /dev/null +++ b/src/gui/UBDockTeacherGuideWidget.cpp @@ -0,0 +1,44 @@ +/* + * 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, either version 3 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "core/UBApplication.h" +#include "globals/UBGlobals.h" + +#include "UBDockTeacherGuideWidget.h" +#include "UBTeacherGuideWidget.h" + + +UBDockTeacherGuideWidget::UBDockTeacherGuideWidget(QWidget* parent, const char* name): + UBDockPaletteWidget(parent,name) + , mpTeacherGuideWidget(NULL) +{ + mName = "TeacherGuide"; + + SET_STYLE_SHEET(); + + mIconToLeft = QPixmap(":images/teacher_open.png"); + mIconToRight = QPixmap(":images/teacher_close.png"); + + mpLayout = new QVBoxLayout(this); + setLayout(mpLayout); + mpTeacherGuideWidget = new UBTeacherGuideWidget(this); + mpLayout->addWidget(mpTeacherGuideWidget); +} + +UBDockTeacherGuideWidget::~UBDockTeacherGuideWidget() +{ + DELETEPTR(mpTeacherGuideWidget); + DELETEPTR(mpLayout); +} diff --git a/src/gui/UBDockTeacherGuideWidget.h b/src/gui/UBDockTeacherGuideWidget.h new file mode 100644 index 00000000..ee2d4268 --- /dev/null +++ b/src/gui/UBDockTeacherGuideWidget.h @@ -0,0 +1,39 @@ +/* + * 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, either version 3 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef UBDOCKTEACHERGUIDEWIDGET_H +#define UBDOCKTEACHERGUIDEWIDGET_H + +class QVBoxLayout; +class UBTeacherGuideWidget; + +#include "UBDockPaletteWidget.h" + + +class UBDockTeacherGuideWidget : public UBDockPaletteWidget +{ + Q_OBJECT +public: + UBDockTeacherGuideWidget(QWidget* parent=0, const char* name="UBDockTeacherGuideWidget"); + ~UBDockTeacherGuideWidget(); + + bool visibleInMode(eUBDockPaletteWidgetMode mode){ return mode == eUBDockPaletteWidget_BOARD; } + +private: + QVBoxLayout* mpLayout; + UBTeacherGuideWidget* mpTeacherGuideWidget; +}; + +#endif // UBDOCKTEACHERGUIDEWIDGET_H diff --git a/src/gui/UBDownloadWidget.cpp b/src/gui/UBDownloadWidget.cpp index 286b9f20..00da5b01 100644 --- a/src/gui/UBDownloadWidget.cpp +++ b/src/gui/UBDownloadWidget.cpp @@ -18,8 +18,10 @@ #include #include "UBDownloadWidget.h" -#include "core/UBApplication.h" +#include "globals/UBGlobals.h" + +#include "core/UBApplication.h" #include "core/memcheck.h" /** @@ -36,8 +38,7 @@ UBDownloadWidget::UBDownloadWidget(QWidget *parent, const char *name):QWidget(pa { setObjectName(name); setWindowTitle(tr("Downloading files")); - setAttribute(Qt::WA_StyledBackground, true); - setStyleSheet(UBApplication::globalStyleSheet()); + SET_STYLE_SHEET(); resize(400, 300); mpLayout = new QVBoxLayout(this); diff --git a/src/gui/UBLibItemProperties.cpp b/src/gui/UBLibItemProperties.cpp index b37747ff..4d2eada3 100644 --- a/src/gui/UBLibItemProperties.cpp +++ b/src/gui/UBLibItemProperties.cpp @@ -18,10 +18,12 @@ #include "core/UBApplication.h" #include "core/UBDownloadManager.h" +#include "core/memcheck.h" #include "frameworks/UBFileSystemUtils.h" -#include "core/memcheck.h" +#include "globals/UBGlobals.h" + /** * \brief Constructor @@ -43,8 +45,7 @@ UBLibItemProperties::UBLibItemProperties(QWidget *parent, const char *name):QWid { setObjectName(name); - setAttribute(Qt::WA_StyledBackground, true); - setStyleSheet(UBApplication::globalStyleSheet()); + SET_STYLE_SHEET(); // Create the GUI mpLayout = new QVBoxLayout(this); diff --git a/src/gui/UBLibNavigatorWidget.cpp b/src/gui/UBLibNavigatorWidget.cpp index 8b36dd07..5974c4ea 100644 --- a/src/gui/UBLibNavigatorWidget.cpp +++ b/src/gui/UBLibNavigatorWidget.cpp @@ -18,6 +18,8 @@ #include "core/UBApplication.h" #include "core/memcheck.h" +#include "globals/UBGlobals.h" + static int lowBoundForSlider = 40; static int topBoundForSlider = 120; static int tickIntervalForSlider = 10; @@ -35,8 +37,7 @@ UBLibNavigatorWidget::UBLibNavigatorWidget(QWidget *parent, const char *name):QW { setObjectName(name); - setAttribute(Qt::WA_StyledBackground, true); - setStyleSheet(UBApplication::globalStyleSheet()); + SET_STYLE_SHEET(); setAcceptDrops(true); @@ -62,7 +63,7 @@ UBLibNavigatorWidget::UBLibNavigatorWidget(QWidget *parent, const char *name):QW connect(mLibWidget, SIGNAL(propertiesRequested(UBLibElement*)), this, SLOT(onPropertiesRequested(UBLibElement*))); - connect(mLibWidget, SIGNAL(displaySearchEngine(UBLibElement*)), this, SLOT(onDisplaySearchEngine(UBLibElement*))); + connect(mLibWidget, SIGNAL(displaySearchEngine(UBLibElement*)), this, SLOT(onDisplaySearchEngine(UBLibElement*))); connect(mSlider,SIGNAL(valueChanged(int)),this,SLOT(updateThumbnailsSize(int))); connect(libWidget->pathViewer(), SIGNAL(mouseClick(UBChainedLibElement*)), this, SLOT(onPathItemClicked(UBChainedLibElement*))); connect(libWidget->pathViewer(), SIGNAL(elementsDropped(QList,UBLibElement*)), mLibWidget, SLOT(onElementsDropped(QList,UBLibElement*))); diff --git a/src/gui/UBLibWebView.cpp b/src/gui/UBLibWebView.cpp index b02af11d..ac6e11a5 100644 --- a/src/gui/UBLibWebView.cpp +++ b/src/gui/UBLibWebView.cpp @@ -1,11 +1,15 @@ #include #include "core/UBApplication.h" +#include "core/memcheck.h" + #include "board/UBBoardController.h" +#include "globals/UBGlobals.h" + #include "UBLibWebView.h" -#include "core/memcheck.h" + UBLibWebView::UBLibWebView(QWidget* parent, const char* name):QWidget(parent) , mpView(NULL) @@ -15,8 +19,7 @@ UBLibWebView::UBLibWebView(QWidget* parent, const char* name):QWidget(parent) { setObjectName(name); - setAttribute(Qt::WA_StyledBackground, true); - setStyleSheet(UBApplication::globalStyleSheet()); + SET_STYLE_SHEET(); mpLayout = new QVBoxLayout(); setLayout(mpLayout); diff --git a/src/gui/UBLibWidget.cpp b/src/gui/UBLibWidget.cpp index 4e8ffc08..9765bae4 100644 --- a/src/gui/UBLibWidget.cpp +++ b/src/gui/UBLibWidget.cpp @@ -15,10 +15,12 @@ #include #include "UBLibWidget.h" -#include "core/UBApplication.h" +#include "core/UBApplication.h" #include "core/memcheck.h" +#include "globals/UBGlobals.h" + /** * \brief Constructor * @param parent as the parent widget @@ -37,8 +39,7 @@ UBLibWidget::UBLibWidget(QWidget *parent, const char *name):UBDockPaletteWidget( mName = "LibWidget"; mVisibleState = true; - setAttribute(Qt::WA_StyledBackground, true); - setStyleSheet(UBApplication::globalStyleSheet()); + SET_STYLE_SHEET(); mIconToLeft = QPixmap(":images/library_open.png"); mIconToRight = QPixmap(":images/library_close.png"); diff --git a/src/gui/UBMediaPlayer.cpp b/src/gui/UBMediaPlayer.cpp deleted file mode 100644 index b3ed29b8..00000000 --- a/src/gui/UBMediaPlayer.cpp +++ /dev/null @@ -1,389 +0,0 @@ -#include "UBMediaPlayer.h" - - - -#include - -#define SLIDER_RANGE 8 - - -MediaVideoWidget::MediaVideoWidget(UBMediaPlayer *player, QWidget *parent) : - Phonon::VideoWidget(parent), m_player(player)/*, m_action(this)*/ -{ -// m_action.setCheckable(true); -// m_action.setChecked(false); -// m_action.setShortcut(QKeySequence( Qt::AltModifier + Qt::Key_Return)); -// m_action.setShortcutContext(Qt::WindowShortcut); -// connect(&m_action, SIGNAL(toggled(bool)), SLOT(setFullScreen(bool))); -// addAction(&m_action); -// setAcceptDrops(true); -} - -void MediaVideoWidget::timerEvent(QTimerEvent *e) -{ - if (e->timerId() == m_timer.timerId()) { - //let's store the cursor shape -#ifndef QT_NO_CURSOR - setCursor(Qt::BlankCursor); -#endif - } - Phonon::VideoWidget::timerEvent(e); -} - - -UBMediaPlayer::UBMediaPlayer() : - playButton(0), - m_AudioOutput(Phonon::VideoCategory), - m_videoWidget(new MediaVideoWidget(this)) -{ - setContextMenuPolicy(Qt::CustomContextMenu); - m_videoWidget->setContextMenuPolicy(Qt::CustomContextMenu); - - QSize buttonSize(26, 20); - -// QPushButton *openButton = new QPushButton(this); - -//// openButton->setIcon(style()->standardIcon(QStyle::SP_DialogOpenButton)); -//// QPalette bpal; -//// QColor arrowcolor = bpal.buttonText().color(); -//// if (arrowcolor == Qt::black) -//// arrowcolor = QColor(80, 80, 80); -//// bpal.setBrush(QPalette::ButtonText, arrowcolor); -//// openButton->setPalette(bpal); - -// rewindButton = new QPushButton(this); -// rewindButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipBackward)); - -// forwardButton = new QPushButton(this); -// forwardButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipForward)); -// forwardButton->setEnabled(false); - - playButton = new QPushButton(this); - playIcon = style()->standardIcon(QStyle::SP_MediaPlay); - pauseIcon = style()->standardIcon(QStyle::SP_MediaPause); - playButton->setIcon(playIcon); - - slider = new Phonon::SeekSlider(this); - slider->setMediaObject(&m_MediaObject); - - QVBoxLayout *vLayout = new QVBoxLayout(this); - vLayout->setContentsMargins(1, 1, 1, 1); - -// QHBoxLayout *layout = new QHBoxLayout(); - -// info = new QLabel(this); -// info->setMinimumHeight(70); -// info->setAcceptDrops(false); -// info->setMargin(2); -// info->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); -// info->setLineWidth(2); -// info->setAutoFillBackground(true); - -// QPalette palette; -// palette.setBrush(QPalette::WindowText, Qt::white); -#ifndef Q_WS_MAC -// rewindButton->setMinimumSize(buttonSize); -// forwardButton->setMinimumSize(buttonSize); - playButton->setMinimumSize(buttonSize); -#endif -// info->setStyleSheet("border-image:url(:/images/screen.png) ; border-width:3px"); -// info->setPalette(palette); -// info->setText(tr("
No media
")); - - -// layout->addWidget(rewindButton); -// layout->addWidget(playButton); -// layout->addWidget(forwardButton); - -// layout->addStretch(); - -// vLayout->addWidget(info); - initVideoWindow(); - vLayout->addWidget(&m_videoWindow); -// m_videoWidget->setStyleSheet(QString("background:red;")); - QVBoxLayout *buttonPanelLayout = new QVBoxLayout(); -#ifndef Q_WS_WIN - m_videoWindow.hide(); -#endif -// buttonPanelLayout->addLayout(layout); - -// timeLabel = new QLabel(this); - progressLabel = new QLabel(this); - QWidget *sliderPanel = new QWidget(this); -// sliderPanel->setStyleSheet(QString("background:green;")); - QHBoxLayout *sliderLayout = new QHBoxLayout(); -// playButton->setStyleSheet(QString("background:yellow;")); - sliderLayout->addWidget(playButton); - sliderLayout->addWidget(slider); -// sliderLayout->addWidget(timeLabel); - sliderLayout->addWidget(progressLabel); - sliderLayout->setContentsMargins(0, 0, 0, 0); - sliderPanel->setLayout(sliderLayout); - - buttonPanelLayout->addWidget(sliderPanel); - buttonPanelLayout->setContentsMargins(0, 0, 0, 0); -#ifdef Q_OS_MAC -// layout->setSpacing(4); - buttonPanelLayout->setSpacing(0); -// info->setMinimumHeight(100); -// info->setFont(QFont("verdana", 15)); -// openButton->setFocusPolicy(Qt::NoFocus); -#endif - QWidget *buttonPanelWidget = new QWidget(this); - buttonPanelWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); - buttonPanelWidget->setLayout(buttonPanelLayout); - vLayout->addWidget(buttonPanelWidget); - - QHBoxLayout *labelLayout = new QHBoxLayout(); - vLayout->addLayout(labelLayout); - setLayout(vLayout); - - - // Setup signal connections: -// connect(rewindButton, SIGNAL(clicked()), this, SLOT(rewind())); - - connect(playButton, SIGNAL(clicked()), this, SLOT(playPause())); -// connect(forwardButton, SIGNAL(clicked()), this, SLOT(forward())); - -// connect(&m_MediaObject, SIGNAL(totalTimeChanged(qint64)), this, SLOT(updateTime())); -// connect(&m_MediaObject, SIGNAL(tick(qint64)), this, SLOT(updateTime())); - connect(&m_MediaObject, SIGNAL(finished()), this, SLOT(finished())); - connect(&m_MediaObject, SIGNAL(stateChanged(Phonon::State,Phonon::State)), this, SLOT(stateChanged(Phonon::State,Phonon::State))); - connect(&m_MediaObject, SIGNAL(bufferStatus(int)), this, SLOT(bufferStatus(int))); - connect(&m_MediaObject, SIGNAL(hasVideoChanged(bool)), this, SLOT(hasVideoChanged(bool))); - -// rewindButton->setEnabled(false); - playButton->setEnabled(false); -// setAcceptDrops(true); - - m_audioOutputPath = Phonon::createPath(&m_MediaObject, &m_AudioOutput); - Phonon::createPath(&m_MediaObject, m_videoWidget); - - resize(minimumSizeHint()); -} - -void UBMediaPlayer::stateChanged(Phonon::State newstate, Phonon::State oldstate) -{ - if (oldstate == Phonon::LoadingState) { - QRect videoHintRect = QRect(QPoint(0, 0), m_videoWindow.sizeHint()); - QApplication::desktop()->screenGeometry().intersected(videoHintRect); - - if (m_MediaObject.hasVideo()) { - qApp->processEvents(); - resize(sizeHint()); - } else - resize(minimumSize()); - - } - - switch (newstate) { - case Phonon::ErrorState: - if (m_MediaObject.errorType() == Phonon::FatalError) { - playButton->setEnabled(false); -// rewindButton->setEnabled(false); - } else { - m_MediaObject.pause(); - } - QMessageBox::warning(this, "Phonon UBMediaPlayer", m_MediaObject.errorString(), QMessageBox::Close); - break; - - case Phonon::StoppedState: -// m_videoWidget-> (false); - // Fall through - case Phonon::PausedState: - playButton->setIcon(playIcon); - if (m_MediaObject.currentSource().type() != Phonon::MediaSource::Invalid){ - playButton->setEnabled(true); -// rewindButton->setEnabled(true); - } else { - playButton->setEnabled(false); -// rewindButton->setEnabled(false); - } - break; - case Phonon::PlayingState: - playButton->setEnabled(true); - playButton->setIcon(pauseIcon); - if (m_MediaObject.hasVideo()) - m_videoWindow.show(); - // Fall through - case Phonon::BufferingState: -// rewindButton->setEnabled(true); - break; - case Phonon::LoadingState: -// rewindButton->setEnabled(false); - break; - } - -} - -void UBMediaPlayer::setVolume(qreal volume) -{ - m_AudioOutput.setVolume(volume); -} - - -void UBMediaPlayer::initVideoWindow() -{ - QVBoxLayout *videoLayout = new QVBoxLayout(); - videoLayout->addWidget(m_videoWidget); - videoLayout->setContentsMargins(0, 0, 0, 0); - m_videoWindow.setLayout(videoLayout); - m_videoWindow.setMinimumSize(60, 40); -} - -void UBMediaPlayer::playPause() -{ - if (m_MediaObject.state() == Phonon::PlayingState) - m_MediaObject.pause(); - else { - if (m_MediaObject.currentTime() == m_MediaObject.totalTime()) - m_MediaObject.seek(0); - m_MediaObject.play(); - } -} - -void UBMediaPlayer::setFile(const QString &fileName) -{ - setWindowTitle(fileName.right(fileName.length() - fileName.lastIndexOf('/') - 1)); - m_MediaObject.setCurrentSource(Phonon::MediaSource(fileName)); -} - -void UBMediaPlayer::setLocation(const QString& location) -{ - setWindowTitle(location.right(location.length() - location.lastIndexOf('/') - 1)); - m_MediaObject.setCurrentSource(Phonon::MediaSource(QUrl::fromEncoded(location.toUtf8()))); - m_MediaObject.play(); -} - - -void UBMediaPlayer::openFile() -{ - QStringList fileNames = QFileDialog::getOpenFileNames(this, QString(), QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); - - - m_MediaObject.clearQueue(); - if (fileNames.size() > 0) { - QString fileName = fileNames[0]; - setFile(fileName); - for (int i=1; isetText(QString()); - else { - QString str = QString::fromLatin1("(%1%)").arg(percent); - progressLabel->setText(str); - } -} - -//void UBMediaPlayer::updateTime() -//{ -// long len = m_MediaObject.totalTime(); -// long pos = m_MediaObject.currentTime(); -// QString timeString; -// if (pos || len) -// { -// int sec = pos/1000; -// int min = sec/60; -// int hour = min/60; -// int msec = pos; - -// QTime playTime(hour%60, min%60, sec%60, msec%1000); -// sec = len / 1000; -// min = sec / 60; -// hour = min / 60; -// msec = len; - -// QTime stopTime(hour%60, min%60, sec%60, msec%1000); -// QString timeFormat = "m:ss"; -// if (hour > 0) -// timeFormat = "h:mm:ss"; -// timeString = playTime.toString(timeFormat); -// if (len) -// timeString += " / " + stopTime.toString(timeFormat); -// } -// timeLabel->setText(timeString); -//} - -void UBMediaPlayer::rewind() -{ - m_MediaObject.seek(0); -} - -void UBMediaPlayer::forward() -{ - QList queue = m_MediaObject.queue(); - if (queue.size() > 0) { - m_MediaObject.setCurrentSource(queue[0]); -// forwardButton->setEnabled(queue.size() > 1); - m_MediaObject.play(); - } -} - -void UBMediaPlayer::openUrl() -{ - QSettings settings; - settings.beginGroup(QLatin1String("BrowserMainWindow")); - QString sourceURL = settings.value("location").toString(); - bool ok = false; - sourceURL = QInputDialog::getText(this, tr("Open Location"), tr("Please enter a valid address here:"), QLineEdit::Normal, sourceURL, &ok); - if (ok && !sourceURL.isEmpty()) { - setLocation(sourceURL); - settings.setValue("location", sourceURL); - } -} - -void UBMediaPlayer::finished() -{ -} - -void UBMediaPlayer::hasVideoChanged(bool bHasVideo) -{ -// info->setVisible(!bHasVideo); - m_videoWindow.setVisible(bHasVideo); -} - -void UBMediaPlayer::resizeEvent(QResizeEvent* pEvent) -{ - Q_UNUSED(pEvent); -// int origWidth = m_videoWindow.width(); -// int origHeight = m_videoWindow.height(); - -// float scaleFactor = (float)origWidth / (float)width(); -// int newWidth = width(); -// int newHeigth = origHeight/scaleFactor; - -// m_videoWindow.resize(newWidth, newHeigth); -} - -//************************************************************************* -UBDraggableMediaPlayer::UBDraggableMediaPlayer():UBMediaPlayer() -{ -// setAcceptDrops(true); -} - -void UBDraggableMediaPlayer::setFile(const QString &text) -{ - mSourcePath = text; - UBMediaPlayer::setFile(text); -} - -void UBDraggableMediaPlayer::mousePressEvent(QMouseEvent *event) -{ - Q_UNUSED(event); - QMimeData *mimeData = new QMimeData; - QList urls; - urls << QUrl::fromLocalFile(mSourcePath); - mimeData->setUrls(urls); - mimeData->setText(mSourcePath); - - - QDrag *drag = new QDrag(this); - drag->setMimeData(mimeData); - drag->start(); -} - diff --git a/src/gui/UBMediaPlayer.h b/src/gui/UBMediaPlayer.h deleted file mode 100644 index 9e5e0e1a..00000000 --- a/src/gui/UBMediaPlayer.h +++ /dev/null @@ -1,107 +0,0 @@ -#ifndef UBUBMediaPlayer_H -#define UBUBMediaPlayer_H - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE -class QPushButton; -class QLabel; -class QSlider; -class QTextEdit; -QT_END_NAMESPACE - -class UBMediaPlayer; - -class MediaVideoWidget : public Phonon::VideoWidget -{ - Q_OBJECT; - -public: - MediaVideoWidget(UBMediaPlayer *player, QWidget *parent = 0); - -protected: - void timerEvent(QTimerEvent *e); - -private: - UBMediaPlayer* m_player; - QBasicTimer m_timer; -// QAction m_action; -}; - -class UBMediaPlayer : public QWidget -{ - Q_OBJECT -public: - UBMediaPlayer(); - - void setFile(const QString &text); - void setLocation(const QString &location); - void setVolume(qreal volume); - -public slots: - void openFile(); - void rewind(); - void forward(); -// void updateTime(); - void finished(); - void playPause(); - -protected: - void resizeEvent(QResizeEvent* pEvent); - -private slots: - void stateChanged(Phonon::State newstate, Phonon::State oldstate); - void bufferStatus(int percent); - void openUrl(); - - void hasVideoChanged(bool); - -private: - void initVideoWindow(); - - QIcon playIcon; - QIcon pauseIcon; - QPushButton *playButton; -// QPushButton *rewindButton; -// QPushButton *forwardButton; - Phonon::SeekSlider *slider; -// QLabel *timeLabel; - QLabel *progressLabel; -// QLabel *info; - - QWidget m_videoWindow; - Phonon::MediaObject m_MediaObject; - Phonon::AudioOutput m_AudioOutput; - MediaVideoWidget *m_videoWidget; - Phonon::Path m_audioOutputPath; -}; - -class UBDraggableMediaPlayer : public UBMediaPlayer -{ - Q_OBJECT -public: - UBDraggableMediaPlayer(); - void setFile(const QString &text); -protected: - QString mSourcePath; - void mousePressEvent(QMouseEvent *event); -}; - - -#endif // UBUBMediaPlayer_H diff --git a/src/gui/UBPageNavigationWidget.cpp b/src/gui/UBPageNavigationWidget.cpp index 77c378c2..6ff72dd8 100644 --- a/src/gui/UBPageNavigationWidget.cpp +++ b/src/gui/UBPageNavigationWidget.cpp @@ -14,9 +14,12 @@ */ #include "UBPageNavigationWidget.h" #include "core/UBApplication.h" -#include "board/UBBoardController.h" #include "core/memcheck.h" +#include "board/UBBoardController.h" + +#include "globals/UBGlobals.h" + /** * \brief Constructor * @param parent as the parent widget @@ -32,8 +35,8 @@ UBPageNavigationWidget::UBPageNavigationWidget(QWidget *parent, const char *name setObjectName(name); mName = "PageNavigator"; mVisibleState = true; - setAttribute(Qt::WA_StyledBackground, true); - setStyleSheet(UBApplication::globalStyleSheet()); + + SET_STYLE_SHEET(); mIconToRight = QPixmap(":images/pages_open.png"); mIconToLeft = QPixmap(":images/pages_close.png"); diff --git a/src/gui/UBTGWidgetTreeDelegate.cpp b/src/gui/UBTGWidgetTreeDelegate.cpp new file mode 100644 index 00000000..928beac9 --- /dev/null +++ b/src/gui/UBTGWidgetTreeDelegate.cpp @@ -0,0 +1,34 @@ + +#include +#include +#include +#include +#include +#include +#include "UBTGWidgetTreeDelegate.h" + +UBTGWidgetTreeDelegate::UBTGWidgetTreeDelegate(QObject *parent) : + QStyledItemDelegate(parent) +{ + //NOOP +} + +void UBTGWidgetTreeDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + if(index.data(Qt::UserRole) != eUBTGAddSubItemWidgetType_None){ + painter->setBackgroundMode(Qt::OpaqueMode); + painter->setBackground(QBrush(QColor(Qt::red))); + QStyleOptionButton styleButton; + styleButton.text = "pipo"; + styleButton.rect = option.rect; + QApplication::style()->drawControl(QStyle::CE_PushButtonLabel,&styleButton,painter); + } + else + QStyledItemDelegate::paint(painter,option,index); +} + +QSize UBTGWidgetTreeDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + QSize size = QStyledItemDelegate::sizeHint(option,index); + return size; +} diff --git a/src/gui/UBTGWidgetTreeDelegate.h b/src/gui/UBTGWidgetTreeDelegate.h new file mode 100644 index 00000000..75343346 --- /dev/null +++ b/src/gui/UBTGWidgetTreeDelegate.h @@ -0,0 +1,35 @@ +#ifndef UBTGWIDGETTREEDELEGATE_H +#define UBTGWIDGETTREEDELEGATE_H + +class QPainter; +class QStyleOptionViewItem; +class QModelIndex; + +#include + + +typedef enum +{ + eUBTGAddSubItemWidgetType_None, + eUBTGAddSubItemWidgetType_Action , + eUBTGAddSubItemWidgetType_Media, + eUBTGAddSubItemWidgetType_Url +}eUBTGAddSubItemWidgetType; + + +class UBTGWidgetTreeDelegate : public QStyledItemDelegate +{ + Q_OBJECT +public: + explicit UBTGWidgetTreeDelegate(QObject *parent = 0); + + virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; + virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; + +signals: + +public slots: + +}; + +#endif // UBTGWIDGETTREEDELEGATE_H diff --git a/src/gui/UBTeacherGuideDelegate.cpp b/src/gui/UBTeacherGuideDelegate.cpp new file mode 100644 index 00000000..33dba6fe --- /dev/null +++ b/src/gui/UBTeacherGuideDelegate.cpp @@ -0,0 +1,5 @@ +#include "UBTeacherGuideDelegate.h" + +UBTeacherGuideDelegate::UBTeacherGuideDelegate() +{ +} diff --git a/src/gui/UBTeacherGuideDelegate.h b/src/gui/UBTeacherGuideDelegate.h new file mode 100644 index 00000000..1c1134f5 --- /dev/null +++ b/src/gui/UBTeacherGuideDelegate.h @@ -0,0 +1,10 @@ +#ifndef UBTEACHERGUIDEDELEGATE_H +#define UBTEACHERGUIDEDELEGATE_H + +class UBTeacherGuideDelegate +{ +public: + UBTeacherGuideDelegate(); +}; + +#endif // UBTEACHERGUIDEDELEGATE_H diff --git a/src/gui/UBTeacherGuideWidget.cpp b/src/gui/UBTeacherGuideWidget.cpp new file mode 100644 index 00000000..62afccfc --- /dev/null +++ b/src/gui/UBTeacherGuideWidget.cpp @@ -0,0 +1,500 @@ +/* + * 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, either version 3 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +#include "UBTeacherGuideWidget.h" + +#include "core/UBApplication.h" + +#include "globals/UBGlobals.h" + +#include "board/UBBoardController.h" +#include "board/UBBoardView.h" +#include "board/UBBoardPaletteManager.h" + +#include "gui/UBStylusPalette.h" +#include "gui/UBActionPalette.h" + +#include "web/UBWebController.h" + +#define UBTG_SEPARATOR_FIXED_HEIGHT 3 + + +/*************************************************************************** + * class UBTeacherGuideEditionWidget * + ***************************************************************************/ + +UBTeacherGuideEditionWidget::UBTeacherGuideEditionWidget(QWidget *parent, const char* name) : + QWidget(parent) + , mpLayout(NULL) + , mpDocumentTitle(NULL) + , mpPageNumberLabel(NULL) + , mpPageTitle(NULL) + , mpComment(NULL) + , mpSeparator(NULL) + , mpTreeWidget(NULL) + , mpRootWidgetItem(NULL) + , mpAddAnActionItem(NULL) + , mpAddAMediaItem(NULL) + , mpAddALinkItem(NULL) + , mpTreeDelegate(NULL) +{ + setObjectName(name); + + mpLayout = new QVBoxLayout(this); + mpPageNumberLabel = new QLabel(this); + mpPageNumberLabel->setAlignment(Qt::AlignRight); + mpPageNumberLabel->setObjectName("UBTGEditionPageNumberLabel"); + mpLayout->addWidget(mpPageNumberLabel); + // tree basic configuration + mpDocumentTitle = new QLabel(this); + mpDocumentTitle->setText("Document title"); + mpDocumentTitle->setObjectName("UBTGEditionDocumentTitle"); + mpLayout->addWidget(mpDocumentTitle); + + mpPageTitle = new UBTGAdaptableText(0,this); + mpPageTitle->setObjectName("UBTGEditionPageTitle"); + mpPageTitle->setPlaceHolderText(tr("Type title here ...")); + mpLayout->addWidget(mpPageTitle); + + mpComment = new UBTGAdaptableText(0,this); + mpComment->setObjectName("UBTGEditionComment"); + mpComment->setPlaceHolderText(tr("Type comment here ...")); + mpLayout->addWidget(mpComment); + + mpSeparator = new QFrame(this); + mpSeparator->setObjectName("UBTGEditionSeparator"); + mpSeparator->setFixedHeight(UBTG_SEPARATOR_FIXED_HEIGHT); + mpLayout->addWidget(mpSeparator); + + mpTreeWidget = new QTreeWidget(this); + mpLayout->addWidget(mpTreeWidget); + + mpTreeDelegate = new UBTGWidgetTreeDelegate(); + + mpRootWidgetItem = mpTreeWidget->invisibleRootItem(); + //mpTreeWidget->setItemDelegate(mpTreeDelegate); + mpTreeWidget->setRootIsDecorated(false); + mpTreeWidget->setIndentation(0); + mpTreeWidget->setDropIndicatorShown(false); + mpTreeWidget->header()->close(); + mpTreeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + mpTreeWidget->setColumnCount(2); + mpTreeWidget->header()->setStretchLastSection(false); + mpTreeWidget->header()->setResizeMode(0, QHeaderView::Stretch); + mpTreeWidget->header()->setResizeMode(1, QHeaderView::Fixed); + mpTreeWidget->header()->setDefaultSectionSize(18); + + connect(mpTreeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(onAddItemClicked(QTreeWidgetItem*,int))); + connect(UBApplication::boardController,SIGNAL(activeSceneChanged()),this,SLOT(onActiveSceneChanged())); + + mpAddAnActionItem = new UBAddItem(tr("Add an action"),eUBTGAddSubItemWidgetType_Action,mpTreeWidget); + mpAddAMediaItem = new UBAddItem(tr("Add a media"),eUBTGAddSubItemWidgetType_Media,mpTreeWidget); + mpAddALinkItem = new UBAddItem(tr("Add a link"),eUBTGAddSubItemWidgetType_Url,mpTreeWidget); + + mpRootWidgetItem->addChild(mpAddAnActionItem); + mpRootWidgetItem->addChild(mpAddAMediaItem); + mpRootWidgetItem->addChild(mpAddALinkItem); +} + +UBTeacherGuideEditionWidget::~UBTeacherGuideEditionWidget() +{ + DELETEPTR(mpDocumentTitle); + DELETEPTR(mpPageNumberLabel); + DELETEPTR(mpPageTitle); + DELETEPTR(mpComment); + DELETEPTR(mpSeparator); + DELETEPTR(mpAddAnActionItem); + DELETEPTR(mpAddAMediaItem); + DELETEPTR(mpAddALinkItem); + DELETEPTR(mpTreeDelegate); + DELETEPTR(mpTreeWidget) + DELETEPTR(mpLayout); +} + +void UBTeacherGuideEditionWidget::showEvent(QShowEvent* event) +{ + mpPageTitle->setFocus(); + mpComment->setFocus(); + setFocus(); + QWidget::showEvent(event); +} + +void UBTeacherGuideEditionWidget::onActiveSceneChanged() +{ + cleanData(); + mpPageNumberLabel->setText(tr("Page: %0").arg(UBApplication::boardController->activeSceneIndex() + 1)); +} + +void UBTeacherGuideEditionWidget::cleanData() +{ + mpPageTitle->setText(""); + mpComment->setText(""); + QList children = mpAddAnActionItem->takeChildren(); + children << mpAddAMediaItem->takeChildren(); + children << mpAddALinkItem->takeChildren(); + + foreach(QTreeWidgetItem* item, children){ + DELETEPTR(item); + } + +} + +QList UBTeacherGuideEditionWidget::getChildrenList(QTreeWidgetItem* widgetItem) +{ + QListresult; + for(int i=0;ichildCount();i+=1) + result << widgetItem->child(i); + return result; +} + +QVector UBTeacherGuideEditionWidget::getPageAndCommentData() +{ + QVectorresult; + tUBGEElementNode* pageTitle = new tUBGEElementNode(); + pageTitle->type = "pageTitle"; + pageTitle->attributes.insert("value",mpPageTitle->text()); + result << pageTitle; + + tUBGEElementNode* comment = new tUBGEElementNode(); + comment->type = "comment"; + comment->attributes.insert("value",mpComment->text()); + result << comment; + return result; +} + +QVector UBTeacherGuideEditionWidget::getData() +{ + QVectorresult; + QList children = getChildrenList(mpAddAnActionItem); + children << getChildrenList(mpAddAMediaItem); + children << getChildrenList(mpAddALinkItem); + result << getPageAndCommentData(); + foreach(QTreeWidgetItem* widgetItem, children){ + tUBGEElementNode* node = dynamic_cast(mpTreeWidget->itemWidget(widgetItem,0))->saveData(); + if(node) + result << node; + } + return result; +} + +void UBTeacherGuideEditionWidget::onAddItemClicked(QTreeWidgetItem* widget, int column) +{ + int addSubItemWidgetType = widget->data(column,Qt::UserRole).toInt(); + if(column == 0 && addSubItemWidgetType != eUBTGAddSubItemWidgetType_None){ + QTreeWidgetItem* newWidgetItem = new QTreeWidgetItem(widget); + newWidgetItem->setData(column,Qt::UserRole,eUBTGAddSubItemWidgetType_None); + newWidgetItem->setData(1,Qt::UserRole,eUBTGAddSubItemWidgetType_None); + newWidgetItem->setIcon(1,QIcon(":images/close.svg")); + switch(addSubItemWidgetType) + { + case eUBTGAddSubItemWidgetType_Action: + mpTreeWidget->setItemWidget(newWidgetItem,0,new UBTGActionWidget(widget)); + break; + case eUBTGAddSubItemWidgetType_Media: + mpTreeWidget->setItemWidget(newWidgetItem,0,new UBTGMediaWidget(widget)); + break; + case eUBTGAddSubItemWidgetType_Url: + mpTreeWidget->setItemWidget(newWidgetItem,0,new UBTGUrlWidget()); + break; + default: + delete newWidgetItem; + qCritical() << "onAddItemClicked no action set"; + return; + } + + if(addSubItemWidgetType != eUBTGAddSubItemWidgetType_None && !widget->isExpanded() ) + widget->setExpanded(true); + else{ + //to update the tree and subtrees + widget->setExpanded(false); + widget->setExpanded(true); + } + } + else if(column == 1 && addSubItemWidgetType == eUBTGAddSubItemWidgetType_None){ + int index = mpTreeWidget->currentIndex().row(); + QTreeWidgetItem* toBeDeletedWidgetItem = widget->parent()->takeChild(index); + delete toBeDeletedWidgetItem; + } +} + +/*************************************************************************** + * class UBTeacherGuidePresentationWidget * + ***************************************************************************/ +typedef enum +{ + tUBTGActionAssociateOnClickItem_NONE, + tUBTGActionAssociateOnClickItem_URL, + tUBTGActionAssociateOnClickItem_MEDIA, + tUBTGActionAssociateOnClickItem_EXPAND +}tUBTGActionAssociateOnClickItem; + +typedef enum +{ + tUBTGTreeWidgetItemRole_HasAnAction = Qt::UserRole, + tUBTGTreeWidgetItemRole_HasAnUrl +}tUBTGTreeWidgetItemRole; + + +UBTeacherGuidePresentationWidget::UBTeacherGuidePresentationWidget(QWidget *parent, const char *name) : QWidget(parent) + , mpPageTitle(NULL) + , mpComment(NULL) + , mpLayout(NULL) + , mpButtonTitleLayout(NULL) + , mpDocumentTitle(NULL) + , mpPageNumberLabel(NULL) + , mpSeparator(NULL) + , mpModePushButton(NULL) + , mpTreeWidget(NULL) + , mpRootWidgetItem(NULL) + , mpMediaSwitchItem(NULL) +{ + setObjectName(name); + + mpLayout = new QVBoxLayout(this); + + mpPageNumberLabel = new QLabel(this); + mpPageNumberLabel->setAlignment(Qt::AlignRight); + mpPageNumberLabel->setObjectName("UBTGPresentationPageNumberLabel"); + + mpLayout->addWidget(mpPageNumberLabel); + + mpButtonTitleLayout = new QHBoxLayout(0); + + mpModePushButton = new QPushButton(this); + mpModePushButton->setIcon(QIcon(":images/pencil.svg")); + mpModePushButton->setMaximumWidth(32); + + connect(mpModePushButton,SIGNAL(clicked()),parentWidget(),SLOT(changeMode())); + + mpDocumentTitle = new QLabel(this); + mpDocumentTitle->setObjectName("UBTGPresentationDocumentTitle"); + mpDocumentTitle->setText(tr("Document title")); + + mpButtonTitleLayout->addWidget(mpModePushButton); + mpButtonTitleLayout->addWidget(mpDocumentTitle); + + mpLayout->addLayout(mpButtonTitleLayout); + + mpPageTitle = new UBTGAdaptableText(0,this); + mpPageTitle->setObjectName("UBTGPresentationPageTitle"); + mpPageTitle->setReadOnly(true); + mpPageTitle->setStyleSheet("background-color:transparent"); + mpLayout->addWidget(mpPageTitle); + + mpComment = new UBTGAdaptableText(0,this); + mpComment->setObjectName("UBTGPresentationComment"); + mpComment->setReadOnly(true); + mpComment->setStyleSheet("background-color:transparent"); + mpLayout->addWidget(mpComment); + + mpSeparator = new QFrame(this); + mpSeparator->setFixedHeight(UBTG_SEPARATOR_FIXED_HEIGHT); + mpSeparator->setObjectName("UBTGPresentationSepartor"); + mpLayout->addWidget(mpSeparator); + + mpTreeWidget = new QTreeWidget(this); + mpLayout->addWidget(mpTreeWidget); + + mpRootWidgetItem = mpTreeWidget->invisibleRootItem(); + mpTreeWidget->setRootIsDecorated(false); + mpTreeWidget->setIndentation(0); + mpTreeWidget->setDropIndicatorShown(false); + mpTreeWidget->header()->close(); + mpTreeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + connect(mpTreeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(onAddItemClicked(QTreeWidgetItem*,int))); + connect(UBApplication::boardController,SIGNAL(activeSceneChanged()),this,SLOT(onActiveSceneChanged())); +} + +UBTeacherGuidePresentationWidget::~UBTeacherGuidePresentationWidget() +{ + DELETEPTR(mpComment); + DELETEPTR(mpPageTitle); + DELETEPTR(mpPageNumberLabel); + DELETEPTR(mpSeparator); + DELETEPTR(mpMediaSwitchItem); + DELETEPTR(mpModePushButton); + DELETEPTR(mpDocumentTitle); + DELETEPTR(mpButtonTitleLayout); + DELETEPTR(mpTreeWidget); + DELETEPTR(mpLayout); +} + +void UBTeacherGuidePresentationWidget::cleanData() +{ + mpPageTitle->showText(""); + mpComment->showText(""); + //tree clean + QList itemToRemove = mpRootWidgetItem->takeChildren(); + foreach(QTreeWidgetItem* eachItem, itemToRemove){ + DELETEPTR(eachItem); + } + // the mpMediaSwitchItem is deleted by the previous loop but the pointer is not set to zero + mpMediaSwitchItem = NULL; +} + +void UBTeacherGuidePresentationWidget::onActiveSceneChanged() +{ + cleanData(); + mpPageNumberLabel->setText(tr("Page: %0").arg(UBApplication::boardController->activeSceneIndex() + 1)); +} + +void UBTeacherGuidePresentationWidget::createMediaButtonItem() +{ + if(!mpMediaSwitchItem){ + //create the media button + mpMediaSwitchItem = new QTreeWidgetItem(mpRootWidgetItem); + //mpMediaSwitchItem->setIcon(0,QIcon(":images/plus.svg")); + mpMediaSwitchItem->setText(0,"+"); + mpMediaSwitchItem->setExpanded(false); + mpMediaSwitchItem->setData(0,tUBTGTreeWidgetItemRole_HasAnAction,tUBTGActionAssociateOnClickItem_EXPAND); + mpMediaSwitchItem->setData(0,Qt::BackgroundRole,QVariant(QColor(200,200,200))); + mpMediaSwitchItem->setData(0,Qt::FontRole, QVariant(QFont(QApplication::font().family(),16))); + mpMediaSwitchItem->setData(0,Qt::TextAlignmentRole,QVariant(Qt::AlignCenter)); + mpRootWidgetItem->addChild(mpMediaSwitchItem); + } +} + + +void UBTeacherGuidePresentationWidget::showData(QVector data) +{ + cleanData(); + + foreach(tUBGEElementNode* element, data){ + if(element->type == "pageTitle") + mpPageTitle->showText(element->attributes.value("value")); + else if (element->type == "comment") + mpComment->showText(element->attributes.value("value")); + else if(element->type == "action"){ + QTreeWidgetItem* newWidgetItem = new QTreeWidgetItem(mpRootWidgetItem); + newWidgetItem->setText(0,element->attributes.value("task")); + QColor color = element->attributes.value("owner").toInt() == 0 ? QColor(Qt::red):QColor(Qt::green); + newWidgetItem->setData(0,Qt::ForegroundRole,QBrush(color)); + newWidgetItem->setData(0,tUBTGTreeWidgetItemRole_HasAnAction,tUBTGActionAssociateOnClickItem_NONE); + newWidgetItem->setData(0,Qt::FontRole, QVariant(QFont(QApplication::font().family(),11))); + mpRootWidgetItem->addChild(newWidgetItem); + } + else if(element->type == "media"){ + createMediaButtonItem(); + QTreeWidgetItem* newWidgetItem = new QTreeWidgetItem(mpMediaSwitchItem); + newWidgetItem->setIcon(0,QIcon(":images/teacherGuide/"+ element->attributes.value("mediaType") +".png")); + newWidgetItem->setText(0,element->attributes.value("title")); + newWidgetItem->setData(0,tUBTGTreeWidgetItemRole_HasAnAction,tUBTGActionAssociateOnClickItem_MEDIA); + newWidgetItem->setData(0,Qt::FontRole, QVariant(QFont(QApplication::font().family(),11))); + mpRootWidgetItem->addChild(newWidgetItem); + + QTreeWidgetItem* mediaItem = new QTreeWidgetItem(newWidgetItem); + //mediaItem->setBackground(0,QBrush(QColor("#EEEEEF"))); + mediaItem->setData(0,tUBTGTreeWidgetItemRole_HasAnAction,tUBTGActionAssociateOnClickItem_NONE); + UBTGMediaWidget* mediaWidget = new UBTGMediaWidget(element->attributes.value("relativePath"),newWidgetItem); + newWidgetItem->setExpanded(false); + mpTreeWidget->setItemWidget(mediaItem,0,mediaWidget); + } + else if(element->type == "link"){ + createMediaButtonItem(); + QTreeWidgetItem* newWidgetItem = new QTreeWidgetItem(mpMediaSwitchItem); + newWidgetItem->setIcon(0,QIcon(":images/teacherGuide/link.png")); + newWidgetItem->setText(0,element->attributes.value("title")); + newWidgetItem->setData(0,tUBTGTreeWidgetItemRole_HasAnAction,tUBTGActionAssociateOnClickItem_URL); + newWidgetItem->setData(0,tUBTGTreeWidgetItemRole_HasAnUrl,QVariant(element->attributes.value("url"))); + newWidgetItem->setData(0,Qt::FontRole, QVariant(QFont(QApplication::font().family(),11))); + mpRootWidgetItem->addChild(newWidgetItem); + } + } +} + +void UBTeacherGuidePresentationWidget::onAddItemClicked(QTreeWidgetItem* widget, int column) +{ + int associateAction = widget->data(column,tUBTGTreeWidgetItemRole_HasAnAction).toInt(); + if(column == 0 && associateAction != tUBTGActionAssociateOnClickItem_NONE){ + switch(associateAction) + { + case tUBTGActionAssociateOnClickItem_EXPAND: + widget->setExpanded(!widget->isExpanded()); + if(widget->isExpanded()) + mpMediaSwitchItem->setText(0,"-"); + else + mpMediaSwitchItem->setText(0,"+"); + break; + case tUBTGActionAssociateOnClickItem_URL: + widget->data(column,tUBTGTreeWidgetItemRole_HasAnUrl).toString(); + UBApplication::webController->loadUrl(QUrl(widget->data(column,tUBTGTreeWidgetItemRole_HasAnUrl).toString())); + break; + case tUBTGActionAssociateOnClickItem_MEDIA: + widget->setExpanded(!widget->isExpanded()); + break; + default: + qDebug() << "associateAction no action set " << associateAction; + } + } +} + +/*************************************************************************** + * class UBTeacherGuideWidget * + ***************************************************************************/ +UBTeacherGuideWidget::UBTeacherGuideWidget(QWidget *parent, const char *name): QStackedWidget(parent) + , mpEditionWidget(NULL) + , mpPresentationWidget(NULL) +{ + setObjectName(name); + + mpEditionWidget = new UBTeacherGuideEditionWidget(this); + addWidget(mpEditionWidget); + mpPresentationWidget = new UBTeacherGuidePresentationWidget(this); + addWidget(mpPresentationWidget); + + setCurrentWidget(mpPresentationWidget); + connect(UBApplication::boardController->controlView(),SIGNAL(clickOnBoard()),this,SLOT(showPresentationMode())); + connectToStylusPalette(); +} + + +UBTeacherGuideWidget::~UBTeacherGuideWidget() +{ + DELETEPTR(mpEditionWidget); + DELETEPTR(mpPresentationWidget); +} + +void UBTeacherGuideWidget::connectToStylusPalette() +{ + if(UBApplication::boardController->paletteManager()) + connect(UBApplication::boardController->paletteManager()->stylusPalette(),SIGNAL(itemOnActionPaletteChanged()),this,SLOT(showPresentationMode())); + else + QTimer::singleShot(500,this,SLOT(connectToStylusPalette())); +} + +void UBTeacherGuideWidget::showPresentationMode() +{ + if(currentWidget()!=mpPresentationWidget){ + mCurrentData = mpEditionWidget->getData(); + mpPresentationWidget->showData(mCurrentData); + setCurrentWidget(mpPresentationWidget); + } +} + +void UBTeacherGuideWidget::changeMode() +{ + if(currentWidget() == mpEditionWidget) + setCurrentWidget(mpPresentationWidget); + else + setCurrentWidget(mpEditionWidget); + +} diff --git a/src/gui/UBTeacherGuideWidget.h b/src/gui/UBTeacherGuideWidget.h new file mode 100644 index 00000000..fc984d4a --- /dev/null +++ b/src/gui/UBTeacherGuideWidget.h @@ -0,0 +1,123 @@ +/* + * 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, either version 3 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef UBTEACHERGUIDEWIDGET_H +#define UBTEACHERGUIDEWIDGET_H + +class QTreeWidget; +class QHeaderView; +class QLabel; +class QVBoxLayout; +class QPushButton; + +#include "UBTeacherGuideWidgetsTools.h" +#include "UBTGWidgetTreeDelegate.h" + +/*************************************************************************** + * class UBTeacherGuideEditionWidget * + ***************************************************************************/ +class UBTeacherGuideEditionWidget : public QWidget +{ + Q_OBJECT +public: + explicit UBTeacherGuideEditionWidget(QWidget* parent = 0, const char* name="UBTeacherGuideEditionWidget"); + ~UBTeacherGuideEditionWidget(); + void cleanData(); + QVector getData(); + +public slots: + void onAddItemClicked(QTreeWidgetItem* widget, int column); + void onActiveSceneChanged(); + void showEvent(QShowEvent* event); + +private: + QList getChildrenList(QTreeWidgetItem* widgetItem); + QVector getPageAndCommentData(); + + QVBoxLayout* mpLayout; + QLabel* mpDocumentTitle; + QLabel* mpPageNumberLabel; + UBTGAdaptableText* mpPageTitle; + UBTGAdaptableText* mpComment; + QFrame* mpSeparator; + QTreeWidget* mpTreeWidget; + QTreeWidgetItem* mpRootWidgetItem; + UBAddItem* mpAddAnActionItem; + UBAddItem* mpAddAMediaItem; + UBAddItem* mpAddALinkItem; + UBTGWidgetTreeDelegate* mpTreeDelegate; + +}; + + +/*************************************************************************** + * class UBTeacherGuidePresentationWidget * + ***************************************************************************/ +class UBTeacherGuidePresentationWidget : public QWidget +{ + Q_OBJECT +public: + explicit UBTeacherGuidePresentationWidget(QWidget* parent, const char* name = "UBTeacherGuidePresentationName"); + ~UBTeacherGuidePresentationWidget(); + void showData(QVectordata); + void cleanData(); + +public slots: + void onAddItemClicked(QTreeWidgetItem* widget, int column); + void onActiveSceneChanged(); + +private: + void createMediaButtonItem(); + + UBTGAdaptableText* mpPageTitle; + UBTGAdaptableText* mpComment; + QVBoxLayout* mpLayout; + QHBoxLayout* mpButtonTitleLayout; + QLabel* mpDocumentTitle; + QLabel* mpPageNumberLabel; + QFrame* mpSeparator; + QPushButton* mpModePushButton; + QTreeWidget* mpTreeWidget; + QTreeWidgetItem* mpRootWidgetItem; + QTreeWidgetItem* mpMediaSwitchItem; + +}; + + + +/*************************************************************************** + * class UBTeacherGuideWidget * + ***************************************************************************/ + +class UBTeacherGuideWidget : public QStackedWidget +{ + Q_OBJECT +public: + explicit UBTeacherGuideWidget(QWidget* parent = 0, const char* name="UBTeacherGuideWidget"); + ~UBTeacherGuideWidget(); + +public slots: + void changeMode(); + void showPresentationMode(); + void connectToStylusPalette(); + +private: + UBTeacherGuideEditionWidget* mpEditionWidget; + UBTeacherGuidePresentationWidget* mpPresentationWidget; + QVectormCurrentData; + +}; + +#endif // UBTEACHERGUIDEWIDGET_H diff --git a/src/gui/UBTeacherGuideWidgetsTools.cpp b/src/gui/UBTeacherGuideWidgetsTools.cpp new file mode 100644 index 00000000..d63df4f3 --- /dev/null +++ b/src/gui/UBTeacherGuideWidgetsTools.cpp @@ -0,0 +1,423 @@ +/* + * 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, either version 3 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "UBTeacherGuideWidgetsTools.h" +#include "UBTGWidgetTreeDelegate.h" + +#include "globals/UBGlobals.h" + +#include "frameworks/UBFileSystemUtils.h" + + +/*************************************************************************** + * class UBAddItem * + ***************************************************************************/ +UBAddItem::UBAddItem(const QString &string, int addSubItemWidgetType, QTreeWidget* parent): QTreeWidgetItem(parent) +{ + setIcon(0,QIcon(":images/increase.svg")); + setText(0,string); + setData(0,Qt::UserRole,QVariant(addSubItemWidgetType)); + setData(1,Qt::UserRole,QVariant(addSubItemWidgetType)); + setData(0,Qt::BackgroundRole,QVariant(QColor(200,200,200))); + setData(1,Qt::BackgroundRole,QVariant(QColor(200,200,200))); + setData(0,Qt::FontRole,QVariant(QFont(QApplication::font().family(),12))); +} + +UBAddItem::~UBAddItem() +{ + //NOOP +} + +/*************************************************************************** + * class UBTGActionWidget * + ***************************************************************************/ +UBTGActionWidget::UBTGActionWidget(QTreeWidgetItem* widget, QWidget* parent, const char* name) : QWidget(parent) + , mpLayout(NULL) + , mpOwner(NULL) + , mpTask(NULL) +{ + setObjectName(name); + SET_STYLE_SHEET(); + mpLayout = new QVBoxLayout(this); + mpOwner = new QComboBox(this); + mpOwner->setObjectName("DockPaletteWidgetComboBox"); + mpOwner->setMinimumHeight(22); + QStringList qslOwner; + qslOwner << tr("Teacher") << tr("Student"); + mpOwner->insertItems(0,qslOwner); + mpOwner->setCurrentIndex(0); + mpTask = new UBTGAdaptableText(widget,this); + mpTask->setAcceptRichText(true); + mpTask->setTextColor(QColor().green()); + mpTask->setObjectName("ActionWidgetTaskTextEdit"); + mpLayout->addWidget(mpOwner,0); + mpLayout->addWidget(mpTask,1); +} + +UBTGActionWidget::~UBTGActionWidget() +{ + DELETEPTR(mpOwner); + DELETEPTR(mpTask); + DELETEPTR(mpLayout); +} + +tUBGEElementNode* UBTGActionWidget::saveData() +{ + tUBGEElementNode* result = new tUBGEElementNode(); + result->type = "action"; + result->attributes.insert("owner",QString("%0").arg(mpOwner->currentIndex())); + result->attributes.insert("task",mpTask->text()); + return result; +} + +/*************************************************************************** + * class UBTGAdaptableText * + ***************************************************************************/ +UBTGAdaptableText::UBTGAdaptableText(QTreeWidgetItem* widget, QWidget* parent, const char* name):QTextEdit(parent) + , mBottomMargin(5) + , mpTreeWidgetItem(widget) + , mMinimumHeight(20) + , mHasPlaceHolder(false) +{ + setObjectName(name); + setStyleSheet( "QWidget {background: white; border:1 solid #999999; border-radius : 10px; padding: 2px;}"); + connect(this,SIGNAL(textChanged()),this,SLOT(onTextChanged())); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setMinimumHeight(mMinimumHeight); +} + +void UBTGAdaptableText::setPlaceHolderText(QString text) +{ + + // the space addition is to make this string unique and check against it to know + // if we are talking about a typed string or the placeholder string + mPlaceHolderText = text + " "; + setTextColor(QColor(Qt::lightGray)); + setText(mPlaceHolderText); + onTextChanged(); + if(isHidden()) + show(); + mHasPlaceHolder = true; +} + +void UBTGAdaptableText::focusInEvent(QFocusEvent *e) +{ + if(mHasPlaceHolder && toPlainText() == mPlaceHolderText){ + setText(""); + setTextColor(QColor(Qt::black)); + } + + e->accept(); +} + + +void UBTGAdaptableText::focusOutEvent(QFocusEvent *e) +{ + if(mHasPlaceHolder && toPlainText().length() == 0){ + setTextColor(QColor(Qt::lightGray)); + setText(mPlaceHolderText); + } + e->accept(); +} + +QString UBTGAdaptableText::text() +{ + QString result = toPlainText(); + if(mHasPlaceHolder && result == mPlaceHolderText) + return ""; + + return result; +} + +void UBTGAdaptableText::onTextChanged() +{ + if(document()->size().height() < mMinimumHeight) + setFixedHeight(mMinimumHeight); + else + setFixedHeight(document()->size().height()+mBottomMargin); + updateGeometry(); + //to trig the widget item to resize it + if(mpTreeWidgetItem){ + mpTreeWidgetItem->setExpanded(false); + mpTreeWidgetItem->setExpanded(true); + setFocus(); + } +} + +void UBTGAdaptableText::showText(const QString & text) +{ + setText(text); + //A first rendering has to be done to calculate the text's size. + show(); + hide(); + setReadOnly(true); + onTextChanged(); + if(isHidden()) + show(); +} + +void UBTGAdaptableText::bottomMargin(int newValue) +{ + mBottomMargin = newValue; + onTextChanged(); +} + +/*************************************************************************** + * class UBTGMediaWidget * + ***************************************************************************/ +UBTGMediaWidget::UBTGMediaWidget(QTreeWidgetItem* widget, QWidget* parent,const char* name): QStackedWidget(parent) + , mpTreeWidgetItem(widget) + , mpDropMeWidget(NULL) + , mpWorkWidget(NULL) + , mpLayout(NULL) + , mpTitle(NULL) + , mpMediaLabelWidget(NULL) + , mpMediaWidget(NULL) + , mpWebView(NULL) + , mRelativePath(QString("")) + , mIsPresentationMode(false) +{ + setObjectName(name); + mpDropMeWidget = new QLabel(); + mpDropMeWidget->setObjectName("UBTGMediaDropMeLabel"); + mpDropMeWidget->setText(tr("drop media here ...")); + mpDropMeWidget->setAlignment(Qt::AlignCenter); + setAcceptDrops(true); + addWidget(mpDropMeWidget); + + setMinimumHeight(100); +} + +UBTGMediaWidget::UBTGMediaWidget(QString relativePath, QTreeWidgetItem* widget, QWidget* parent,const char* name): QStackedWidget(parent) + , mpTreeWidgetItem(widget) + , mpDropMeWidget(NULL) + , mpWorkWidget(NULL) + , mpLayout(NULL) + , mpTitle(NULL) + , mpMediaLabelWidget(NULL) + , mpMediaWidget(NULL) + , mpWebView(NULL) + , mRelativePath(relativePath) + , mIsPresentationMode(true) + , mMediaType("") +{ + setObjectName(name); + setAcceptDrops(false); + createWorkWidget(mRelativePath); + setMinimumHeight(200); +} + +UBTGMediaWidget::~UBTGMediaWidget() +{ + DELETEPTR(mpTitle); + DELETEPTR(mpMediaLabelWidget); + DELETEPTR(mpMediaWidget); + DELETEPTR(mpWebView); + DELETEPTR(mpLayout); + + removeWidget(mpDropMeWidget); + DELETEPTR(mpDropMeWidget); + removeWidget(mpWorkWidget); + DELETEPTR(mpWorkWidget); +} + +tUBGEElementNode* UBTGMediaWidget::saveData() +{ + if(!mpTitle) + return 0; + tUBGEElementNode* result = new tUBGEElementNode(); + result->type = "media"; + result->attributes.insert("title",mpTitle->text()); + result->attributes.insert("relativePath",mRelativePath); + result->attributes.insert("mediaType",mMediaType); + return result; +} + +void UBTGMediaWidget::dragEnterEvent(QDragEnterEvent *event) +{ + event->accept(); +} + +void UBTGMediaWidget::createWorkWidget(QString& path) +{ + QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(path); + qDebug() << mimeType; + bool setMedia = true; + if(mimeType.contains("audio") || mimeType.contains("video")){ + mMediaType = mimeType.contains("audio")? "audio":"movie"; + mpMediaWidget = new UBMediaWidget(mimeType.contains("audio")?eMediaType_Audio:eMediaType_Video); + mpMediaWidget->setFile(path); + } + else if(mimeType.contains("image")){ + mMediaType = "image"; + mpMediaLabelWidget = new QLabel(); + QPixmap pixmap = QPixmap(QUrl(path).toLocalFile()); + pixmap = pixmap.scaledToWidth(mpTreeWidgetItem->treeWidget()->size().width()); + mpMediaLabelWidget->setPixmap(pixmap); + mpMediaLabelWidget->setScaledContents(true); + } + else if(mimeType.contains("application")){ + mMediaType = "w3c"; + mpWebView = new QWebView(0); + mpWebView->setAcceptDrops(false); + mpWebView->settings()->setAttribute(QWebSettings::JavaEnabled, true); + mpWebView->settings()->setAttribute(QWebSettings::PluginsEnabled, true); + mpWebView->settings()->setAttribute(QWebSettings::LocalStorageDatabaseEnabled, true); + mpWebView->settings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true); + mpWebView->settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true); + mpWebView->settings()->setAttribute(QWebSettings::JavascriptCanAccessClipboard, true); + mpWebView->settings()->setAttribute(QWebSettings::DnsPrefetchEnabled, true); + mpWebView->load(QUrl(path)); + mpWebView->show(); + } + else{ + qDebug() << "createWorkWidget mime type not handled" << mimeType; + setMedia=false; + } + + if(setMedia){ + mRelativePath = path; + setAcceptDrops(false); + mpWorkWidget = new QWidget(this); + mpLayout = new QVBoxLayout(mpWorkWidget); + if(!mIsPresentationMode){ + mpTitle = new UBTGAdaptableText(mpTreeWidgetItem,mpWorkWidget); + mpLayout->addWidget(mpTitle,1); + } + if(mpMediaLabelWidget){ + mpMediaLabelWidget->setParent(mpWorkWidget); + mpLayout->addWidget(mpMediaLabelWidget); + } + else if (mpMediaWidget){ + mpMediaWidget->setMaximumHeight(mpTreeWidgetItem->treeWidget()->size().width()); + mpMediaWidget->setParent(mpWorkWidget); + mpLayout->addWidget(mpMediaWidget); + } + else if (mpWebView){ + mpWebView->setParent(mpWorkWidget); + mpLayout->addWidget(mpWebView); + } + mpWorkWidget->setLayout(mpLayout); + addWidget(mpWorkWidget); + setCurrentWidget(mpWorkWidget); + updateSize(); + } +} + +void UBTGMediaWidget::parseMimeData(const QMimeData* pMimeData) +{ + QString path; + if(pMimeData){ + if(pMimeData->hasText()){ + path = QUrl::fromLocalFile(pMimeData->text()).toString(); + } + else if(pMimeData->hasUrls()){ + path = pMimeData->urls().at(0).toString(); + } + else if(pMimeData->hasImage()){ + qDebug() << "Not yet implemented"; + } + } + else + qDebug() << "No mime data present"; + + createWorkWidget(path); + QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(path); + qDebug() << mimeType; +} + +void UBTGMediaWidget::dropEvent(QDropEvent* event) +{ + parseMimeData(event->mimeData()); + event->accept(); +} + +void UBTGMediaWidget::mousePressEvent(QMouseEvent *event) +{ + if (!mIsPresentationMode) + event->ignore(); + else{ + + QDrag *drag = new QDrag(this); + QMimeData *mimeData = new QMimeData; + QList urlList; + urlList << QUrl(mRelativePath); + mimeData->setUrls(urlList); + drag->setMimeData(mimeData); + + drag->exec(); + event->accept(); + } +} + +void UBTGMediaWidget::updateSize() +{ + if(mpTreeWidgetItem){ + mpTreeWidgetItem->setExpanded(false); + mpTreeWidgetItem->setExpanded(true); + if(!mIsPresentationMode) + mpTitle->setFocus(); + } +} + +/*************************************************************************** + * class UBTGUrlWdiget * + ***************************************************************************/ +UBTGUrlWidget::UBTGUrlWidget(QWidget* parent, const char* name ):QWidget(parent) + , mpLayout(NULL) + , mpTitle(NULL) + , mpUrl(NULL) +{ + setObjectName(name); + SET_STYLE_SHEET(); + mpLayout = new QVBoxLayout(this); + mpTitle = new QLineEdit(this); + mpTitle->setObjectName("UBTGLineEdit"); + mpTitle->setPlaceholderText(tr("Insert link title here...")); + mpUrl = new QLineEdit(this); + mpUrl->setObjectName("UBTGLineEdit"); + mpUrl->setPlaceholderText("http://"); + mpLayout->addWidget(mpTitle); + mpLayout->addWidget(mpUrl); +} + +UBTGUrlWidget::~UBTGUrlWidget() +{ + DELETEPTR(mpTitle); + DELETEPTR(mpUrl); + DELETEPTR(mpLayout); +} + +tUBGEElementNode* UBTGUrlWidget::saveData() +{ + tUBGEElementNode* result = new tUBGEElementNode(); + result->type = "link"; + result->attributes.insert("title",mpTitle->text()); + result->attributes.insert("url",mpUrl->text()); + return result; +} diff --git a/src/gui/UBTeacherGuideWidgetsTools.h b/src/gui/UBTeacherGuideWidgetsTools.h new file mode 100644 index 00000000..f098f0d2 --- /dev/null +++ b/src/gui/UBTeacherGuideWidgetsTools.h @@ -0,0 +1,157 @@ +/* + * 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, either version 3 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef UBTEACHERGUIDEWIDGETSTOOLS_H +#define UBTEACHERGUIDEWIDGETSTOOLS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "customWidgets/UBMediaWidget.h" + +class QTreeWidget; +class QVBoxLayout; +class QComboBox; +class QTextEdit; +class QWidget; +class UBTGAdaptableText; +class QDomElement; + +typedef struct +{ + QString type; + QMap attributes; +}tUBGEElementNode; + + +class iUBTGSavableData +{ +public: + virtual tUBGEElementNode* saveData() = 0; +}; + + +class UBAddItem : public QTreeWidgetItem +{ +public: + explicit UBAddItem(const QString &strings, int addSubItemWidgetType, QTreeWidget* parent = 0); + ~UBAddItem(); + +signals: + +public slots: +}; + +class UBTGActionWidget : public QWidget, public iUBTGSavableData +{ + Q_OBJECT + +public: + explicit UBTGActionWidget(QTreeWidgetItem* widget, QWidget* parent = 0,const char* name = "UBTGActionWidget"); + ~UBTGActionWidget(); + void update(); + tUBGEElementNode* saveData(); + +private: + QVBoxLayout* mpLayout; + QComboBox* mpOwner; + UBTGAdaptableText* mpTask; + +protected: + QTreeWidgetItem* mpTreeWidgetItem; +}; + + +class UBTGAdaptableText : public QTextEdit +{ + Q_OBJECT +public: + explicit UBTGAdaptableText(QTreeWidgetItem* widget = 0, QWidget *parent = 0, const char* name = "UBTGAdaptableText"); + void showText(const QString & text); + void bottomMargin(int newValue); + void setPlaceHolderText(QString text); + QString text(); + +public slots: + void onTextChanged(); + +protected: + void focusInEvent(QFocusEvent *e); + void focusOutEvent(QFocusEvent *e); +private: + int mBottomMargin; + QTreeWidgetItem* mpTreeWidgetItem; + int mMinimumHeight; + bool mHasPlaceHolder; + QString mPlaceHolderText; +}; + + +class UBTGMediaWidget : public QStackedWidget , public iUBTGSavableData +{ + Q_OBJECT +public: + UBTGMediaWidget(QTreeWidgetItem* widget = 0, QWidget* parent = 0, const char* name = "UBTGMediaWidget"); + UBTGMediaWidget(QString relativePath, QTreeWidgetItem* widget = 0, QWidget* parent = 0, const char* name = "UBTGMediaWidget"); + ~UBTGMediaWidget(); + tUBGEElementNode* saveData(); + +protected: + void dragEnterEvent(QDragEnterEvent* event); + void dropEvent(QDropEvent* event); + void mousePressEvent(QMouseEvent* event); + +private: + void parseMimeData(const QMimeData* pMimeData); + void createWorkWidget(QString& path); + void updateSize(); + + QTreeWidgetItem* mpTreeWidgetItem; + QLabel* mpDropMeWidget; + QWidget* mpWorkWidget; + QVBoxLayout* mpLayout; + UBTGAdaptableText* mpTitle; + QLabel* mpMediaLabelWidget; + UBMediaWidget* mpMediaWidget; + QWebView* mpWebView; + QString mRelativePath; + bool mIsPresentationMode; + QString mMediaType; +}; + + +class UBTGUrlWidget : public QWidget , public iUBTGSavableData +{ + Q_OBJECT +public: + UBTGUrlWidget(QWidget* parent = 0, const char* name = "UBTGUrlWidget"); + ~UBTGUrlWidget(); + tUBGEElementNode* saveData(); +private: + QVBoxLayout* mpLayout; + QLineEdit* mpTitle; + QLineEdit* mpUrl; +}; + + +#endif // UBTEACHERGUIDEWIDGETSTOOLS_H diff --git a/src/gui/gui.pri b/src/gui/gui.pri index ed0c9c4c..a901409f 100644 --- a/src/gui/gui.pri +++ b/src/gui/gui.pri @@ -46,7 +46,11 @@ HEADERS += src/gui/UBThumbnailView.h \ src/gui/UBLibWebView.h \ src/gui/UBDownloadWidget.h \ src/gui/UBDockDownloadWidget.h \ - src/gui/UBMediaPlayer.h + src/gui/UBDockTeacherGuideWidget.h \ + src/gui/UBTeacherGuideWidget.h \ + src/gui/UBTeacherGuideWidgetsTools.h \ + src/gui/UBTeacherGuideDelegate.h \ + src/gui/UBTGWidgetTreeDelegate.h SOURCES += src/gui/UBThumbnailView.cpp \ src/gui/UBFloatingPalette.cpp \ @@ -95,7 +99,11 @@ SOURCES += src/gui/UBThumbnailView.cpp \ src/gui/UBLibWebView.cpp \ src/gui/UBDownloadWidget.cpp \ src/gui/UBDockDownloadWidget.cpp \ - src/gui/UBMediaPlayer.cpp + src/gui/UBDockTeacherGuideWidget.cpp \ + src/gui/UBTeacherGuideWidget.cpp \ + src/gui/UBTeacherGuideWidgetsTools.cpp \ + src/gui/UBTeacherGuideDelegate.cpp \ + src/gui/UBTGWidgetTreeDelegate.cpp win32 { @@ -123,15 +131,3 @@ linux-g++-64 { SOURCES += src/gui/UBKeyboardPalette_linux.cpp } - - - - - - - - - - - -