новые иконки в OpenBoard
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
OpenBoard/src/gui/UBTeacherBarPreviewWidget.cpp

369 lines
11 KiB

#include "core/UBApplication.h"
#include "globals/UBGlobals.h"
#include "board/UBBoardController.h"
#include "frameworks/UBFileSystemUtils.h"
#include "UBTeacherBarPreviewWidget.h"
UBTeacherBarPreviewMedia::UBTeacherBarPreviewMedia(QWidget* parent, const char* name) : QWidget(parent)
{
setObjectName(name);
mWidget = new UBWidgetList(parent);
mLayout.addWidget(mWidget);
setLayout(&mLayout);
mWidgetList.clear();
}
UBTeacherBarPreviewMedia::~UBTeacherBarPreviewMedia()
{
DELETEPTR(mWidget);
}
void UBTeacherBarPreviewMedia::cleanMedia()
{
foreach(QWidget* eachWidget, mWidgetList.keys()){
if(QString(eachWidget->metaObject()->className()).contains("UBDraggable")){
mWidget->removeWidget(eachWidget);
delete eachWidget;
eachWidget = NULL;
}
else{
mWidget->removeWidget(eachWidget);
}
}
mWidgetList.clear();
}
void UBTeacherBarPreviewMedia::loadWidgets(QList<QWidget*> pWidgetsList, bool isResizable)
{
Q_UNUSED(isResizable);
foreach(QWidget*eachWidget, pWidgetsList){
mWidget->addWidget(eachWidget);
mWidgetList[eachWidget]="DRAG UNAVAILABLE";
}
}
//int UBTeacherBarPreviewMedia::loadMedia(QStringList pMedias)
//{
// int addedMedia = 0;
//// foreach(QString eachString, pMedias){
//// if(!eachString.isEmpty()){
//// QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(eachString);
//// if(mimeType.contains("image")){
//// UBDraggableLabel* label = new UBDraggableLabel();
//// label->loadImage(eachString);
//// mWidget->addWidget(label);
//// mWidgetList[label]=eachString;
//// addedMedia += 1;
//// }
//// else if(mimeType.contains("video") || mimeType.contains("audio")){
//// UBDraggableMediaPlayer* mediaPlayer = new UBDraggableMediaPlayer();
//// mediaPlayer->setFile(eachString);
//// mWidget->addWidget(mediaPlayer);
//// mWidgetList[mediaPlayer] = eachString;
//// addedMedia += 1;
//// }
//// else{
//// qWarning() << "pMediaPath" << eachString;
//// qWarning() << "bad idea to come here";
//// }
//// }
//// }
// return addedMedia;
//}
// -----------------------------------------------------------------------------------------------
UBActionPreview::UBActionPreview(QWidget *parent, const char *name):QWidget(parent)
, mpOwner(NULL)
, mpContent(NULL)
{
setObjectName(name);
setLayout(&mLayout);
mpOwner = new QLabel(this);
mpOwner->setObjectName("UBActionPreviewOwner");
mOwnerLayout.addWidget(mpOwner, 0);
mOwnerLayout.addStretch(1);
mLayout.addLayout(&mOwnerLayout);
mpContent = new QTextEdit(this);
mpContent->setReadOnly(true);
mpContent->setObjectName("UBActionPreviewContent");
//mpContent->setWordWrap(true);
mLayout.addWidget(mpContent);
setContentsMargins(-9, -9, -9, -9);
}
UBActionPreview::~UBActionPreview()
{
if(NULL != mpOwner){
delete mpOwner;
mpOwner = NULL;
}
if(NULL != mpContent){
delete mpContent;
mpContent = NULL;
}
}
void UBActionPreview::setOwner(int owner)
{
if(NULL != mpOwner && NULL != mpContent){
switch(owner){
case eActionOwner_Teacher:
mpOwner->setText(tr("Teacher"));
mpContent->setStyleSheet("background:lightblue; border:lightblue;");
break;
case eActionOwner_Student:
mpOwner->setText(tr("Student"));
mpContent->setStyleSheet("background:lightgreen; border:lightgreen;");
break;
}
}
}
void UBActionPreview::setContent(const QString &content)
{
if(NULL != mpContent){
mpContent->setText(content);
setMinimumHeight(mpOwner->height() + mpContent->document()->documentLayout()->documentSize().toSize().height());
}
}
// -------------------------------------------------------------------------------------------------------------------
UBTBPreviewContainer::UBTBPreviewContainer(QWidget *parent, const char *name):UBWidgetList(parent)
{
setObjectName(name);
mCanRemove = false;
}
UBTBPreviewContainer::~UBTBPreviewContainer()
{
}
// ------------------------------------------------------------------------------------
UBTeacherBarPreviewWidget::UBTeacherBarPreviewWidget(UBTeacherBarDataMgr* pDataMgr, QWidget *parent, const char *name):QWidget(parent)
, mpEditButton(NULL)
, mpDocumentButton(NULL)
, mpSessionTitle(NULL)
, mpTitle(NULL)
, mpTitleLabel(NULL)
, mpPageNbrLabel(NULL)
, mpContentContainer(NULL)
, mpScheduleLabel(NULL)
, mpLicenseLabel(NULL)
{
setObjectName(name);
mpDataMgr = pDataMgr;
setLayout(&mLayout);
mLayout.setContentsMargins(0, 0, 0, 0);
setAttribute(Qt::WA_StyledBackground, true);
setStyleSheet(UBApplication::globalStyleSheet());
// Build the Preview widget
mpContainer = new QWidget(this);
mpContainer->setObjectName("UBTBPreviewWidget");
mpContainer->setLayout(&mContainerLayout);
mLayout.addWidget(mpContainer, 1);
// Session Title
mpTitleContainer = new QWidget(mpContainer);
mpTitleContainer->setLayout(&mTitleLayout);
mpSessionTitle = new QLabel(mpContainer);
mpSessionTitle->setText(tr("Session: "));
mpSessionTitle->setWordWrap(true);
mpSessionTitle->setAlignment(Qt::AlignRight);
mpSessionTitle->setObjectName("UBTBPreviewSessionTitle");
mContainerLayout.addWidget(mpSessionTitle);
// Title
mpTitleContainer->setLayout(&mTitleLayout);
mTitleLayout.setContentsMargins(0, 0, 0, 0);
mpTitleLabel = new QLabel(mpTitleContainer);
mpTitleLabel->setText(tr("Activity"));
mpTitleLabel->setObjectName("UBTeacherBarPreviewSubtitle");
mTitleLayout.addWidget(mpTitleLabel, 0);
mpTitle = new QLabel(mpTitleContainer);
mpTitle->setObjectName("UBTeacherBarPreviewTitle");
mpTitle->setWordWrap(true);
mpTitle->setAlignment(Qt::AlignLeft);
mTitleLayout.addWidget(mpTitle, 1);
mpPageNbrLabel = new QLabel(tr("Page n° "), mpTitleContainer);
mpPageNbrLabel->setAlignment(Qt::AlignRight);
mpPageNbrLabel->setObjectName("UBTBPreviewSessionTitle");
mTitleLayout.addWidget(mpPageNbrLabel);
mTitleLayout.addWidget(&mTitleSeparator);
mContainerLayout.addWidget(mpTitleContainer);
// Content
mpContentContainer = new UBTBPreviewContainer(mpContainer);
mContainerLayout.addWidget(mpContentContainer, 1);
// License
mContainerLayout.addWidget(&mLicenseSeparator);
mpLicenseLabel = new UBTBLicenseWidget(mpContainer);
mContainerLayout.addWidget(mpLicenseLabel);
// Document Button
mpDocumentButton = new QPushButton(tr("Document View"), this);
mpDocumentButton->setObjectName("DockPaletteWidgetButton");
// Edit Button
mpEditButton = new QPushButton(tr("Edit"), this);
mpEditButton->setObjectName("DockPaletteWidgetButton");
mEditLayout.addWidget(mpDocumentButton, 0);
mEditLayout.addWidget(mpEditButton, 0);
mEditLayout.addStretch(1);
mLayout.addLayout(&mEditLayout, 0);
connect(mpEditButton, SIGNAL(clicked()), this, SLOT(onEdit()));
connect(mpDocumentButton, SIGNAL(clicked()), this, SLOT(onDocumentClicked()));
connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), this, SLOT(onActiveSceneChanged()));
}
UBTeacherBarPreviewWidget::~UBTeacherBarPreviewWidget()
{
}
void UBTeacherBarPreviewWidget::onActiveSceneChanged()
{
mpPageNbrLabel->setText(tr("Page n° %0").arg(UBApplication::boardController->activeSceneIndex()));
}
void UBTeacherBarPreviewWidget::onEdit()
{
emit showEditMode();
}
void UBTeacherBarPreviewWidget::onDocumentClicked()
{
emit showDocumentPreview();
}
void UBTeacherBarPreviewWidget::updateFields()
{
// Session Title
if("" != mpDataMgr->sessionTitle()){
mpSessionTitle->setText(mpDataMgr->sessionTitle());
mpSessionTitle->setVisible(true);
}else{
mpSessionTitle->setVisible(false);
}
// Page Title
if("" != mpDataMgr->pageTitle()){
mpTitle->setText(mpDataMgr->pageTitle());
mpPageNbrLabel->setText(tr("Page n° %0").arg(UBApplication::boardController->activeSceneIndex()));
mpTitleContainer->setVisible(true);
}else{
mpTitleContainer->setVisible(false);
}
// Actions
generateActions();
// Media
generateMedias();
// Comments
generateComments();
// Links
generateLinks();
// License
mpLicenseLabel->setLicense(mpDataMgr->sessionLicence());
}
void UBTeacherBarPreviewWidget::clearFields()
{
// Session Title
mpSessionTitle->setText("");
// Page Title
mpTitle->setText("");
// Medias
if(!mStoredWidgets.empty()){
foreach(QWidget* pW, mStoredWidgets){
mpContentContainer->removeWidget(pW);
DELETEPTR(pW);
}
mStoredWidgets.clear();
}
// License
mpLicenseLabel->setLicense(eLicense_CCBY);
}
void UBTeacherBarPreviewWidget::generateActions()
{
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;
}
}
}
void UBTeacherBarPreviewWidget::generateMedias()
{
if(isVisible()){
foreach(QString mediaUrl, *mpDataMgr->mediaUrls()){
QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(mediaUrl);
if(mimeType.contains("image")){
mpTmpLabel = new UBDraggableLabel();
mpTmpLabel->loadImage(mediaUrl);
mStoredWidgets << mpTmpLabel;
mpContentContainer->addWidget(mpTmpLabel);
}
else if(mimeType.contains("video") || mimeType.contains("audio")){
UBDraggableMedia* mediaPlayer = new UBDraggableMedia(mimeType.contains("audio")?eMediaType_Audio:eMediaType_Video);
mediaPlayer->setFile(mediaUrl);
mStoredWidgets << mediaPlayer;
mpContentContainer->addWidget(mediaPlayer);
}
}
}
}
void UBTeacherBarPreviewWidget::generateLinks()
{
if(!mpDataMgr->urls()->empty()){
foreach(sLink link, *mpDataMgr->urls()){
mpTmpLink = new QLabel(QString("<a href='%0'>%1</a>").arg(link.link).arg(link.title), this);
mpTmpLink->setObjectName("UBLinkPreview");
mpTmpLink->setOpenExternalLinks(true);
mpContentContainer->addWidget(mpTmpLink);
mStoredWidgets << mpTmpLink;
}
}
}
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;
}
}
void UBTeacherBarPreviewWidget::showEvent(QShowEvent* ev)
{
Q_UNUSED(ev);
updateFields();
}