diff --git a/resources/images/licenses/ccby.png b/resources/images/licenses/ccby.png new file mode 100644 index 00000000..822491ed Binary files /dev/null and b/resources/images/licenses/ccby.png differ diff --git a/resources/images/licenses/ccbync.png b/resources/images/licenses/ccbync.png new file mode 100644 index 00000000..5f982147 Binary files /dev/null and b/resources/images/licenses/ccbync.png differ diff --git a/resources/images/licenses/ccbyncnd.png b/resources/images/licenses/ccbyncnd.png new file mode 100644 index 00000000..49f272f8 Binary files /dev/null and b/resources/images/licenses/ccbyncnd.png differ diff --git a/resources/images/licenses/ccbyncsa.png b/resources/images/licenses/ccbyncsa.png new file mode 100644 index 00000000..0f2a0f10 Binary files /dev/null and b/resources/images/licenses/ccbyncsa.png differ diff --git a/resources/images/licenses/ccbynd.png b/resources/images/licenses/ccbynd.png new file mode 100644 index 00000000..8f317035 Binary files /dev/null and b/resources/images/licenses/ccbynd.png differ diff --git a/resources/images/licenses/ccbysa.png b/resources/images/licenses/ccbysa.png new file mode 100644 index 00000000..f0a944e0 Binary files /dev/null and b/resources/images/licenses/ccbysa.png differ diff --git a/resources/style.qss b/resources/style.qss index d80964a1..bdb0966a 100644 --- a/resources/style.qss +++ b/resources/style.qss @@ -13,6 +13,13 @@ QWidget#UBTBMediaContainer border: 2px solid #999999; } +QFrame#UBTBSeparator +{ + background: #DDDDDD; + border-radius: 2px; + border: 1px solid #DDDDDD; +} + QWidget#UBMediaVideoContainer { background: #000000; @@ -27,11 +34,17 @@ QWidget#UBTeacherBarPreviewWidget border: 2px solid #999999; } +QLabel#UBTBPreviewSessionTitle +{ + font-size: 12px; +} + QLabel#UBTeacherBarPreviewTitle { color: #555555; - font-size : 18px; + font-size : 20px; font-weight:bold; + padding-left:5px; } QLabel#UBMediaPlayerButton @@ -44,7 +57,7 @@ QLabel#UBTeacherBarPreviewSubtitle color: #555555; font-size : 15px; font-weight:bold; - padding-top: 10px; + padding-left:5px; } QWidget#UBLibWebView @@ -61,7 +74,8 @@ QWidget#UBActionPreviewOwner font-weight: bold; } -QWidget#UBTeacherBarPreviewComments +QWidget#UBTeacherBarPreviewComments, +QWidget#UBTeacherBarTargetBox { border-radius: 10px; border: white 2px solid; diff --git a/src/customWidgets/UBWidgetList.cpp b/src/customWidgets/UBWidgetList.cpp index 0ba01bb0..6481acb4 100644 --- a/src/customWidgets/UBWidgetList.cpp +++ b/src/customWidgets/UBWidgetList.cpp @@ -57,7 +57,7 @@ void UBWidgetList::addWidget(QWidget *widget) void UBWidgetList::removeWidget(QWidget *widget) { - if(NULL != mpLayout){ + if(NULL != mpLayout && NULL != widget){ mpLayout->removeWidget(widget); mWidgetInfo.remove(widget); widget->setVisible(false); diff --git a/src/gui/UBTeacherBarPreviewWidget.cpp b/src/gui/UBTeacherBarPreviewWidget.cpp index 2181a549..7d2ad585 100644 --- a/src/gui/UBTeacherBarPreviewWidget.cpp +++ b/src/gui/UBTeacherBarPreviewWidget.cpp @@ -1,5 +1,6 @@ #include "core/UBApplication.h" #include "customWidgets/UBGlobals.h" +#include "board/UBBoardController.h" #include "frameworks/UBFileSystemUtils.h" #include "UBTeacherBarPreviewWidget.h" @@ -84,9 +85,10 @@ UBActionPreview::UBActionPreview(QWidget *parent, const char *name):QWidget(pare mOwnerLayout.addWidget(mpOwner, 0); mOwnerLayout.addStretch(1); mLayout.addLayout(&mOwnerLayout); - mpContent = new QLabel(this); + mpContent = new QTextEdit(this); + mpContent->setReadOnly(true); mpContent->setObjectName("UBActionPreviewContent"); - mpContent->setWordWrap(true); + //mpContent->setWordWrap(true); mLayout.addWidget(mpContent); setContentsMargins(-9, -9, -9, -9); } @@ -103,10 +105,10 @@ UBActionPreview::~UBActionPreview() } } -void UBActionPreview::setOwner(const QString &owner) +void UBActionPreview::setOwner(int owner) { if(NULL != mpOwner && NULL != mpContent){ - switch(owner.toInt()){ + switch(owner){ case eActionOwner_Teacher: mpOwner->setText(tr("Teacher")); mpContent->setStyleSheet("background:lightblue; border:lightblue;"); @@ -124,6 +126,7 @@ void UBActionPreview::setContent(const QString &content) { if(NULL != mpContent){ mpContent->setText(content); + setMinimumHeight(mpOwner->height() + mpContent->height()); } } @@ -136,19 +139,30 @@ UBTBPreviewContainer::UBTBPreviewContainer(QWidget *parent, const char *name):UB UBTBPreviewContainer::~UBTBPreviewContainer() { +} +// ------------------------------------------------------------------------------------ +UBTBPreviewSeparator::UBTBPreviewSeparator(QWidget *parent, const char *name):QFrame(parent) +{ + setObjectName("UBTBSeparator"); + setMinimumHeight(5); + setMaximumHeight(5); +} + +UBTBPreviewSeparator::~UBTBPreviewSeparator() +{ + } // ------------------------------------------------------------------------------------ UBTeacherBarPreviewWidget::UBTeacherBarPreviewWidget(UBTeacherBarDataMgr* pDataMgr, QWidget *parent, const char *name):QWidget(parent) , mpEditButton(NULL) + , mpSessionTitle(NULL) , mpTitle(NULL) - , mpDuration(NULL) - , mpActionsLabel(NULL) - , mpMediaLabel(NULL) - , mpCommentsLabel(NULL) - , mpComments(NULL) - , mpLinksLabel(NULL) + , mpTitleLabel(NULL) + , mpPageNbrLabel(NULL) , mpContentContainer(NULL) + , mpScheduleLabel(NULL) + , mpLicenseLabel(NULL) { setObjectName(name); mpDataMgr = pDataMgr; @@ -158,23 +172,45 @@ UBTeacherBarPreviewWidget::UBTeacherBarPreviewWidget(UBTeacherBarDataMgr* pDataM setStyleSheet(UBApplication::globalStyleSheet()); // Build the Preview widget - // Title + duration - mpTitle = new QLabel(this); + // Session Title + mTitleContainer.setLayout(&mTitleLayout); + mpSessionTitle = new QLabel(this); + mpSessionTitle->setText(tr("Session: ")); + mpSessionTitle->setWordWrap(true); + mpSessionTitle->setAlignment(Qt::AlignRight); + mpSessionTitle->setObjectName("UBTBPreviewSessionTitle"); + mLayout.addWidget(mpSessionTitle); + + // Title + mTitleContainer.setLayout(&mTitleLayout); + mTitleLayout.setContentsMargins(0, 0, 0, 0); + mpTitleLabel = new QLabel(&mTitleContainer); + mpTitleLabel->setText(tr("Activity")); + mpTitleLabel->setObjectName("UBTeacherBarPreviewSubtitle"); + mTitleLayout.addWidget(mpTitleLabel, 0); + mpTitle = new QLabel(&mTitleContainer); mpTitle->setObjectName("UBTeacherBarPreviewTitle"); mpTitle->setWordWrap(true); - mpTitle->setAlignment(Qt::AlignCenter); - mpDuration = new QLabel(this); - mTitleDurationLayout.addWidget(mpTitle, 0); - mTitleDurationLayout.addWidget(mpDuration, 1); - mLayout.addLayout(&mTitleDurationLayout, 0); - + mpTitle->setAlignment(Qt::AlignLeft); + mTitleLayout.addWidget(mpTitle, 1); + mpPageNbrLabel = new QLabel(tr("Page n° "), &mTitleContainer); + mpPageNbrLabel->setAlignment(Qt::AlignRight); + mpPageNbrLabel->setObjectName("UBTBPreviewSessionTitle"); + mTitleLayout.addWidget(mpPageNbrLabel); + mTitleLayout.addWidget(&mTitleSeparator); + mLayout.addWidget(&mTitleContainer); + + // Content mpContentContainer = new UBTBPreviewContainer(this); mLayout.addWidget(mpContentContainer, 1); - //mLayout.addWidget(&mMediaViewer, 1); - // The next line is disgusting. This is a quickfix that must be reworked later - mMediaViewer.setContentsMargins(-9, -9, -9, -9); - hideElements(); + // License + mLayout.addWidget(&mLicenseSeparator); + mpLicenseLabel = new QLabel(tr("License"), this); + mpLicenseLabel->setObjectName("UBTeacherBarPreviewSubtitle"); + mLayout.addWidget(mpLicenseLabel); + // TODO : Add the license field here + // Edit button mpEditButton = new QPushButton(tr("Edit infos"), this); @@ -186,128 +222,121 @@ UBTeacherBarPreviewWidget::UBTeacherBarPreviewWidget(UBTeacherBarDataMgr* pDataM connect(mpEditButton, SIGNAL(clicked()), this, SLOT(onEdit())); + connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), this, SLOT(onActiveSceneChanged())); } UBTeacherBarPreviewWidget::~UBTeacherBarPreviewWidget() { - DELETEPTR(mpLinksLabel); - DELETEPTR(mpComments); - DELETEPTR(mpTitle); - DELETEPTR(mpDuration); - DELETEPTR(mpActionsLabel); - DELETEPTR(mpMediaLabel); - DELETEPTR(mpCommentsLabel); - DELETEPTR(mpContentContainer); DELETEPTR(mpEditButton); + DELETEPTR(mpLicenseLabel); + DELETEPTR(mpScheduleLabel); + DELETEPTR(mpPageNbrLabel); + DELETEPTR(mpTitle); + DELETEPTR(mpTitleLabel); + DELETEPTR(mpSessionTitle); } -void UBTeacherBarPreviewWidget::onEdit() +void UBTeacherBarPreviewWidget::onActiveSceneChanged() { - emit showEditMode(); + mpPageNbrLabel->setText(tr("Page n° %0").arg(UBApplication::boardController->activeSceneIndex())); } -void UBTeacherBarPreviewWidget::setTitle(const QString &title) +void UBTeacherBarPreviewWidget::onEdit() { - if(NULL != mpTitle){ - mpTitle->setText(title); - } + emit showEditMode(); } -void UBTeacherBarPreviewWidget::setComments(const QString &comments) +void UBTeacherBarPreviewWidget::updateFields() { - if("" != comments){ - mWidgets.clear(); - mpComments->setText(comments); - mpComments->setVisible(true); - mpCommentsLabel->setVisible(true); - mWidgets << mpCommentsLabel; - mMediaViewer.loadWidgets(mWidgets, false); - mWidgets.clear(); - mWidgets << mpComments; - mMediaViewer.loadWidgets(mWidgets, true); + // First, remove the previous elements + if(!mStoredWidgets.empty()){ + foreach(QWidget* pW, mStoredWidgets){ + mpContentContainer->removeWidget(pW); + if( pW->objectName() == "UBActionPreview" || + pW->objectName() == "UBLinkPreview" || + pW->objectName() == "UBCommentsPreview"){ + // Here we delete all preview widget excepting the media because they are handled by the data manager + delete pW; + pW = NULL; + } + } + mStoredWidgets.clear(); } -} -void UBTeacherBarPreviewWidget::clean() -{ - mMediaViewer.cleanMedia(); + // Session Title + mpSessionTitle->setText(mpDataMgr->sessionTitle()); - foreach(QWidget* eachWidget, mStoredWidgets){ - delete eachWidget; - eachWidget = NULL; + // Page Title + if("" != mpDataMgr->pageTitle()){ + mpTitle->setText(mpDataMgr->pageTitle()); + mpPageNbrLabel->setText(tr("Page n° %0").arg(UBApplication::boardController->activeSceneIndex())); + mTitleContainer.setVisible(true); + }else{ + mTitleContainer.setVisible(false); } - mStoredWidgets.clear(); - hideElements(); + // Actions + generateActions(); + + // Media + generateMedias(); + + // Links + generateLinks(); + + // Comments + generateComments(); + } -void UBTeacherBarPreviewWidget::hideElements() +void UBTeacherBarPreviewWidget::clearFields() { - mpActionsLabel = new QLabel(tr("Actions"), this); - mpActionsLabel->setObjectName("UBTeacherBarPreviewSubtitle"); - mpMediaLabel = new QLabel(tr("Medias"), this); - mpMediaLabel->setObjectName("UBTeacherBarPreviewSubtitle"); - mpCommentsLabel = new QLabel(tr("Comments"), this); - mpCommentsLabel->setObjectName("UBTeacherBarPreviewSubtitle"); - mpComments = new QLabel(this); - mpComments->setWordWrap(true); - mpComments->setObjectName("UBTeacherBarPreviewComments"); - mpLinksLabel = new QLabel(tr("Links"), this); - mpLinksLabel->setObjectName("UBTeacherBarPreviewSubtitle"); - - mpActionsLabel->setVisible(false); - mpMediaLabel->setVisible(false); - mpCommentsLabel->setVisible(false); - mpComments->setVisible(false); - mpLinksLabel->setVisible(false); + } -void UBTeacherBarPreviewWidget::setActions(QStringList actions) +void UBTeacherBarPreviewWidget::generateActions() { - if(!actions.empty()){ - mWidgets.clear(); - mpActionsLabel->setVisible(true); - mWidgets << mpActionsLabel; - mediaViewer()->loadWidgets(mWidgets,false); - mWidgets.clear(); - foreach(QString action, actions){ - QStringList desc = action.split(';'); - if(2 <= desc.size()){ - QString owner = desc.at(0); - QString act = desc.at(1); - mpTmpAction = new UBActionPreview(this); - mpTmpAction->setOwner(owner); - mpTmpAction->setContent(act); - mWidgets << mpTmpAction; - } + if(!mpDataMgr->actions()->empty()){ + foreach(sAction act, *mpDataMgr->actions()){ + mpTmpAction = new UBActionPreview(this); + mpTmpAction->setOwner(act.type); + mpTmpAction->setContent(act.content); + mpContentContainer->addWidget(mpTmpAction); + mStoredWidgets << mpTmpAction; } - mMediaViewer.loadWidgets(mWidgets, true); } } -void UBTeacherBarPreviewWidget::setLinks(QStringList links) +void UBTeacherBarPreviewWidget::generateMedias() { - if(!links.empty()){ - mWidgets.clear(); - mpLinksLabel->setVisible(true); - mWidgets << mpLinksLabel; - mMediaViewer.loadWidgets(mWidgets, false); - mWidgets.clear(); - foreach(QString link, links){ - mpTmpLink = new QLabel(link, this); - mpTmpLink->setOpenExternalLinks(true); - mWidgets << mpTmpLink; + foreach(QWidget* pMedia, *mpDataMgr->medias()){ + if(NULL != pMedia){ + mpContentContainer->addWidget(pMedia); + mStoredWidgets << pMedia; } - mMediaViewer.loadWidgets(mWidgets, true); } } -void UBTeacherBarPreviewWidget::updateFields() +void UBTeacherBarPreviewWidget::generateLinks() { - + if(!mpDataMgr->urls()->empty()){ + foreach(sLink link, *mpDataMgr->urls()){ + mpTmpLink = new QLabel(QString("%1").arg(link.link).arg(link.title), this); + mpTmpLink->setObjectName("UBLinkPreview"); + mpContentContainer->addWidget(mpTmpLink); + mStoredWidgets << mpTmpLink; + } + } } -void UBTeacherBarPreviewWidget::clearFields() +void UBTeacherBarPreviewWidget::generateComments() { - + if("" != mpDataMgr->comments()){ + mpTmpComment = new QTextEdit(this); + mpTmpComment->setObjectName("UBCommentPreview"); + mpTmpComment->setPlainText(mpDataMgr->comments()); + mpTmpComment->setReadOnly(true); + mpContentContainer->addWidget(mpTmpComment); + mStoredWidgets << mpTmpComment; + } } diff --git a/src/gui/UBTeacherBarPreviewWidget.h b/src/gui/UBTeacherBarPreviewWidget.h index a7ff6e9b..882bfc01 100644 --- a/src/gui/UBTeacherBarPreviewWidget.h +++ b/src/gui/UBTeacherBarPreviewWidget.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "core/UBPersistenceManager.h" #include "customWidgets/UBWidgetList.h" @@ -30,12 +31,12 @@ class UBActionPreview : public QWidget public: UBActionPreview(QWidget* parent=0, const char* name="UBActionPreview"); ~UBActionPreview(); - void setOwner(const QString& owner); + void setOwner(int owner); void setContent(const QString& content); private: QLabel* mpOwner; - QLabel* mpContent; + QTextEdit* mpContent; QVBoxLayout mLayout; QHBoxLayout mOwnerLayout; @@ -48,19 +49,19 @@ public: ~UBTBPreviewContainer(); }; +class UBTBPreviewSeparator : public QFrame +{ +public: + UBTBPreviewSeparator(QWidget* parent=0, const char* name="UBTBPreviewSeparator"); + ~UBTBPreviewSeparator(); +}; + class UBTeacherBarPreviewWidget : public QWidget { Q_OBJECT public: UBTeacherBarPreviewWidget(UBTeacherBarDataMgr* pDataMgr, QWidget* parent=0, const char* name="UBTeacherBarPreviewWidget"); ~UBTeacherBarPreviewWidget(); - UBTeacherBarPreviewMedia* mediaViewer() {return &mMediaViewer;} - void setTitle(const QString& title); - void setComments(const QString& comments); - void setActions(QStringList actions); - void setLinks(QStringList links); - void clean(); - QLabel* mediaLabel() { return mpMediaLabel;} void updateFields(); void clearFields(); @@ -69,29 +70,47 @@ signals: private slots: void onEdit(); + void onActiveSceneChanged(); private: - void hideElements(); + void generateActions(); + void generateMedias(); + void generateLinks(); + void generateComments(); QVBoxLayout mLayout; QHBoxLayout mEditLayout; - QHBoxLayout mTitleDurationLayout; - UBTeacherBarPreviewMedia mMediaViewer; - QList mWidgets; - QList mStoredWidgets; - QPushButton* mpEditButton; + + // Titles + QVBoxLayout mTitleLayout; + UBTBPreviewSeparator mTitleSeparator; + QWidget mTitleContainer; + QLabel* mpSessionTitle; QLabel* mpTitle; - QLabel* mpDuration; - QLabel* mpActionsLabel; - QLabel* mpMediaLabel; - QLabel* mpCommentsLabel; - QLabel* mpComments; - QLabel* mpLinksLabel; - QLabel* mpTmpLink; - UBActionPreview* mpTmpAction; + QLabel* mpTitleLabel; + QLabel* mpPageNbrLabel; UBTBPreviewContainer* mpContentContainer; + + // Schedule + QLabel* mpScheduleLabel; + + // License + UBTBPreviewSeparator mLicenseSeparator; + QLabel* mpLicenseLabel; + + /** Pointer to the datas */ UBTeacherBarDataMgr* mpDataMgr; + /** The list of stored widgets */ + QList mStoredWidgets; + /** A temporary action widget */ + UBActionPreview* mpTmpAction; + /** A temporary media widget */ + UBTeacherBarPreviewMedia* mpTmpMedia; + /** A temporary link */ + QLabel* mpTmpLink; + /** A temporary comments field */ + QTextEdit* mpTmpComment; }; #endif // UBTEACHERBARPREVIEWWIDGET_H diff --git a/src/gui/UBTeacherBarWidget.cpp b/src/gui/UBTeacherBarWidget.cpp index 7d8ab771..322b3f91 100644 --- a/src/gui/UBTeacherBarWidget.cpp +++ b/src/gui/UBTeacherBarWidget.cpp @@ -39,13 +39,13 @@ UBTeacherBarWidget::UBTeacherBarWidget(QWidget *parent, const char *name):UBDock // Create the GUI setLayout(&mLayout); - mpPageEditWidget = new UBTBPageEditWidget(&mData, this); - mpPreview = new UBTeacherBarPreviewWidget(&mData, this); - mpDocPreviewWidget = new UBTBDocumentPreviewWidget(&mData, this); - mpDocEditWidget = new UBTBDocumentEditWidget(&mData, this); - mpStackWidget = new QStackedWidget(this); mLayout.addWidget(mpStackWidget); + mpPageEditWidget = new UBTBPageEditWidget(&mData, mpStackWidget); + mpPreview = new UBTeacherBarPreviewWidget(&mData, mpStackWidget); + mpDocPreviewWidget = new UBTBDocumentPreviewWidget(&mData, mpStackWidget); + mpDocEditWidget = new UBTBDocumentEditWidget(&mData, mpStackWidget); + mpStackWidget->addWidget(mpPageEditWidget); mpStackWidget->addWidget(mpPreview); mpStackWidget->addWidget(mpDocPreviewWidget); @@ -120,7 +120,7 @@ void UBTeacherBarWidget::loadContent(bool docChanged) // Update the fields mpPageEditWidget->updateFields(); - mpPreview->updateFields(); + //mpPreview->updateFields(); if(docChanged){ mpDocEditWidget->updateFields(); mpDocPreviewWidget->updateFields(); @@ -155,15 +155,19 @@ void UBTeacherBarWidget::onTBStateChanged(eTeacherBarState state) { switch(state){ case eTeacherBarState_DocumentEdit: + //mpDocEditWidget->updateFields(); mpStackWidget->setCurrentWidget(mpDocEditWidget); break; case eTeacherBarState_DocumentPreview: + //mpDocPreviewWidget->updateFields(); mpStackWidget->setCurrentWidget(mpDocPreviewWidget); break; case eTeacherBarState_PageEdit: + mpPageEditWidget->updateFields(); mpStackWidget->setCurrentWidget(mpPageEditWidget); break; case eTeacherBarState_PagePreview: + mpPreview->updateFields(); mpStackWidget->setCurrentWidget(mpPreview); break; }