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
}
-
-
-
-
-
-
-
-
-
-
-
-