новые иконки в 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

378 lines
11 KiB

#include "core/UBApplication.h"
#include "customWidgets/UBGlobals.h"
13 years ago
#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)
{
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);
13 years ago
mpContent = new QTextEdit(this);
mpContent->setReadOnly(true);
mpContent->setObjectName("UBActionPreviewContent");
13 years ago
//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;
}
}
13 years ago
void UBActionPreview::setOwner(int owner)
{
if(NULL != mpOwner && NULL != mpContent){
13 years ago
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);
13 years ago
setMinimumHeight(mpOwner->height() + mpContent->height());
}
}
// -------------------------------------------------------------------------------------------------------------------
UBTBPreviewContainer::UBTBPreviewContainer(QWidget *parent, const char *name):UBWidgetList(parent)
{
setObjectName(name);
}
UBTBPreviewContainer::~UBTBPreviewContainer()
{
13 years ago
}
// ------------------------------------------------------------------------------------
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)
13 years ago
, mpSessionTitle(NULL)
, mpTitle(NULL)
13 years ago
, mpTitleLabel(NULL)
, mpPageNbrLabel(NULL)
, mpContentContainer(NULL)
13 years ago
, mpScheduleLabel(NULL)
, mpLicenseLabel(NULL)
{
setObjectName(name);
mpDataMgr = pDataMgr;
setLayout(&mLayout);
setAttribute(Qt::WA_StyledBackground, true);
setStyleSheet(UBApplication::globalStyleSheet());
// Build the Preview widget
13 years ago
// 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);
13 years ago
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);
13 years ago
// 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);
mpEditButton->setObjectName("DockPaletteWidgetButton");
mEditLayout.addStretch(1);
mEditLayout.addWidget(mpEditButton, 0);
mEditLayout.addStretch(1);
mLayout.addLayout(&mEditLayout, 0);
connect(mpEditButton, SIGNAL(clicked()), this, SLOT(onEdit()));
13 years ago
connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), this, SLOT(onActiveSceneChanged()));
}
UBTeacherBarPreviewWidget::~UBTeacherBarPreviewWidget()
{
DELETEPTR(mpEditButton);
13 years ago
DELETEPTR(mpLicenseLabel);
DELETEPTR(mpScheduleLabel);
DELETEPTR(mpPageNbrLabel);
DELETEPTR(mpTitle);
DELETEPTR(mpTitleLabel);
DELETEPTR(mpSessionTitle);
}
13 years ago
void UBTeacherBarPreviewWidget::onActiveSceneChanged()
{
13 years ago
mpPageNbrLabel->setText(tr("Page n° %0").arg(UBApplication::boardController->activeSceneIndex()));
}
13 years ago
void UBTeacherBarPreviewWidget::onEdit()
{
13 years ago
emit showEditMode();
}
13 years ago
void UBTeacherBarPreviewWidget::updateFields()
{
13 years ago
// Session Title
if("" != mpDataMgr->sessionTitle()){
mpSessionTitle->setText(mpDataMgr->sessionTitle());
mpSessionTitle->setVisible(true);
}else{
mpSessionTitle->setVisible(false);
}
13 years ago
// 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);
}
13 years ago
// Actions
generateActions();
// Media
//generateMedias();
13 years ago
// Links
generateLinks();
// Comments
generateComments();
}
13 years ago
void UBTeacherBarPreviewWidget::clearFields()
{
// Session Title
mpSessionTitle->setText("");
// Page Title
mpTitle->setText("");
13 years ago
// Medias
if(!mStoredWidgets.empty()){
foreach(QWidget* pW, mStoredWidgets){
mpContentContainer->removeWidget(pW);
DELETEPTR(pW);
}
mStoredWidgets.clear();
}
}
13 years ago
void UBTeacherBarPreviewWidget::generateActions()
{
13 years ago
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;
}
}
}
13 years ago
void UBTeacherBarPreviewWidget::generateMedias()
{
if(isVisible()){
foreach(QString mediaUrl, *mpDataMgr->mediaUrls()){
QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(mediaUrl);
if(mimeType.contains("image")){
QPixmap pix = QPixmap(mediaUrl);
QLabel* label = new QLabel();
pix.scaledToWidth(label->width());
label->resize(pix.width(), pix.height());
label->setPixmap(pix);
label->setScaledContents(true);
mStoredWidgets << label;
mpContentContainer->addWidget(label);
}
else if(mimeType.contains("video") || mimeType.contains("audio")){
UBMediaWidget* mediaPlayer = new UBMediaWidget(mimeType.contains("audio")?eMediaType_Audio:eMediaType_Video);
mediaPlayer->setFile(mediaUrl);
mStoredWidgets << mediaPlayer;
mpContentContainer->addWidget(mediaPlayer);
}
}
}
}
13 years ago
void UBTeacherBarPreviewWidget::generateLinks()
{
13 years ago
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);
13 years ago
mpContentContainer->addWidget(mpTmpLink);
mStoredWidgets << mpTmpLink;
}
}
}
13 years ago
void UBTeacherBarPreviewWidget::generateComments()
{
13 years ago
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)
{
//updateFields();
}
// -----------------------------------------------------------------------------------------------------
UBDraggableMedia::UBDraggableMedia(eMediaType type, QWidget *parent, const char *name):UBMediaWidget(type, parent, name)
{
}
UBDraggableMedia::~UBDraggableMedia()
{
}