UBTeacherBarWidget.cpp 24.7 KB
Newer Older
Claudio Valerio's avatar
Claudio Valerio committed
1
#include "UBTeacherBarWidget.h"
shibakaneki's avatar
shibakaneki committed
2 3

#include "core/UBApplication.h"
4
#include "core/UBPersistenceManager.h"
Claudio Valerio's avatar
Claudio Valerio committed
5

6
#include "UBMainWindow.h"
7 8 9 10 11

#include "document/UBDocumentController.h"
#include "document/UBDocumentProxy.h"

#include "board/UBBoardController.h"
shibakaneki's avatar
shibakaneki committed
12
#include "board/UBBoardPaletteManager.h"
shibakaneki's avatar
shibakaneki committed
13

Claudio Valerio's avatar
Claudio Valerio committed
14 15 16 17
#include "gui/UBMediaPlayer.h"

#include "frameworks/UBFileSystemUtils.h"

18 19
#include "customWidgets/UBDraggableLabel.h"

20 21
#include "core/memcheck.h"

shibakaneki's avatar
shibakaneki committed
22 23 24 25 26 27 28
UBTeacherBarWidget::UBTeacherBarWidget(QWidget *parent, const char *name):UBDockPaletteWidget(parent)
    , mpLayout(NULL)
    , mpTitleLayout(NULL)
    , mpDurationLayout(NULL)
    , mpTitleLabel(NULL)
    , mpDurationLabel(NULL)
    , mpTitle(NULL)
shibakaneki's avatar
shibakaneki committed
29
    , mpMediaLabel(NULL)
30
    , mpDropMediaZone(NULL)
shibakaneki's avatar
shibakaneki committed
31 32
    , mpContainer(NULL)
    , mpContainerLayout(NULL)
33 34 35 36
    , mpDuration1(NULL)
    , mpDuration2(NULL)
    , mpDuration3(NULL)
    , mpDurationButtons(NULL)
shibakaneki's avatar
shibakaneki committed
37
    , mpActionLabel(NULL)
shibakaneki's avatar
shibakaneki committed
38
    , mpActions(NULL)
shibakaneki's avatar
shibakaneki committed
39
    , mpActionButton(NULL)
40
    , mpActionLayout(NULL)
shibakaneki's avatar
shibakaneki committed
41 42 43 44
    , mpCommentLabel(NULL)
    , mpComments(NULL)
    , mpLinkLabel(NULL)
    , mpLinks(NULL)
45 46
    , mpLinkButton(NULL)
    , mpLinkLayout(NULL)
47
    , mpStackWidget(NULL)
48
    , mpPreview(NULL)
shibakaneki's avatar
shibakaneki committed
49 50 51
{
    setObjectName(name);
    mName = "TeacherBarWidget";
52
    mVisibleState = true;
shibakaneki's avatar
shibakaneki committed
53 54
    mActionList.clear();
    mUrlList.clear();
shibakaneki's avatar
shibakaneki committed
55 56 57 58 59 60 61 62 63 64 65 66 67

    setAttribute(Qt::WA_StyledBackground, true);
    setStyleSheet(UBApplication::globalStyleSheet());

    mIconToLeft = QPixmap(":images/teacher_open.png");
    mIconToRight = QPixmap(":images/teacher_close.png");

    // Create the GUI
    mpContainerLayout = new QVBoxLayout(this);
    setLayout(mpContainerLayout);

    mpContainer = new QWidget(this);
    mpContainer->setObjectName("DockPaletteWidgetBox");
shibakaneki's avatar
shibakaneki committed
68

69 70
    mpPreview = new UBTeacherBarPreviewWidget(this);

shibakaneki's avatar
shibakaneki committed
71 72 73
    mpStackWidget = new QStackedWidget(this);
    mpContainerLayout->addWidget(mpStackWidget);
    mpStackWidget->addWidget(mpContainer);
74
    mpStackWidget->addWidget(mpPreview);
shibakaneki's avatar
shibakaneki committed
75 76 77 78 79 80 81 82

    mpLayout = new QVBoxLayout(mpContainer);
    mpContainer->setLayout(mpLayout);

    // Title
    mpTitleLabel = new QLabel(tr("Title"), mpContainer);
    mpTitle = new QLineEdit(mpContainer);
    mpTitle->setObjectName("DockPaletteWidgetLineEdit");
shibakaneki's avatar
shibakaneki committed
83
    connect(mpTitle, SIGNAL(textChanged(const QString&)), this, SLOT(onTitleTextChanged(const QString&)));
shibakaneki's avatar
shibakaneki committed
84 85
    mpLayout->addWidget(mpTitleLabel, 0);
    mpLayout->addWidget(mpTitle, 0);
shibakaneki's avatar
shibakaneki committed
86 87 88

    // Duration
    mpDurationLabel = new QLabel(tr("Duration"), mpContainer);
shibakaneki's avatar
shibakaneki committed
89
    mpLayout->addWidget(mpDurationLabel, 0);
shibakaneki's avatar
shibakaneki committed
90
    mpDurationLayout = new QHBoxLayout();
91 92
    mpDuration1 = new QCheckBox(this);
    mpDuration1->setIcon(QIcon(":images/duration1.png"));
93
    mpDuration1->setChecked(true);
94 95 96 97 98 99 100
    mpDurationLayout->addWidget(mpDuration1, 0);
    mpDuration2 = new QCheckBox(this);
    mpDuration2->setIcon(QIcon(":images/duration2.png"));
    mpDurationLayout->addWidget(mpDuration2, 0);
    mpDuration3 = new QCheckBox(this);
    mpDuration3->setIcon(QIcon(":images/duration3.png"));
    mpDurationLayout->addWidget(mpDuration3, 0);
101
    mpDurationButtons = new QButtonGroup(mpContainer);
102 103 104
    mpDurationButtons->addButton(mpDuration1);
    mpDurationButtons->addButton(mpDuration2);
    mpDurationButtons->addButton(mpDuration3);
shibakaneki's avatar
shibakaneki committed
105
    mpLayout->addLayout(mpDurationLayout, 0);
shibakaneki's avatar
shibakaneki committed
106 107

    // Actions
108
    mpActionLabel = new QLabel(tr("Actions"), mpContainer);
shibakaneki's avatar
shibakaneki committed
109
    mpLayout->addWidget(mpActionLabel, 0);
110
    mpActions = new UBWidgetList(mpContainer);
shibakaneki's avatar
shibakaneki committed
111
    mpActions->setEmptyText(tr("Add actions"));
shibakaneki's avatar
shibakaneki committed
112
    mpLayout->addWidget(mpActions, 1);
113
    mpActionButton = new QPushButton(mpContainer);
shibakaneki's avatar
shibakaneki committed
114 115
    mpActionButton->setObjectName("DockPaletteWidgetButton");
    mpActionButton->setText(tr("Add action"));
116 117 118 119
    mpActionLayout = new QHBoxLayout();
    mpActionLayout->addWidget(mpActionButton, 0);
    mpActionLayout->addStretch(1);
    mpLayout->addLayout(mpActionLayout, 0);
shibakaneki's avatar
shibakaneki committed
120

121
    // Media
122
    mpMediaLabel = new QLabel(tr("Media"), mpContainer);
shibakaneki's avatar
shibakaneki committed
123
    mpLayout->addWidget(mpMediaLabel, 0);
124
    mpDropMediaZone = new UBTeacherBarDropMediaZone(mpContainer);
shibakaneki's avatar
shibakaneki committed
125 126 127
    mpLayout->addWidget(mpDropMediaZone, 1);

    // Links
128
    mpLinkLabel = new QLabel(tr("Links"), mpContainer);
shibakaneki's avatar
shibakaneki committed
129
    mpLayout->addWidget(mpLinkLabel, 0);
130
    mpLinks = new UBWidgetList(mpContainer);
shibakaneki's avatar
shibakaneki committed
131
    mpLayout->addWidget(mpLinks, 1);
132
    mpLinkButton = new QPushButton(tr("Add link"), mpContainer);
shibakaneki's avatar
shibakaneki committed
133
    mpLinkButton->setObjectName("DockPaletteWidgetButton");
134 135 136 137
    mpLinkLayout = new QHBoxLayout();
    mpLinkLayout->addWidget(mpLinkButton, 0);
    mpLinkLayout->addStretch(1);
    mpLayout->addLayout(mpLinkLayout, 0);
138

shibakaneki's avatar
shibakaneki committed
139
    // Comments
140
    mpCommentLabel = new QLabel(tr("Comments"), mpContainer);
shibakaneki's avatar
shibakaneki committed
141 142 143 144 145
    mpLayout->addWidget(mpCommentLabel, 0);
    mpComments = new QTextEdit(this);
    mpComments->setObjectName("DockPaletteWidgetBox");
    mpComments->setStyleSheet("background:white;");
    mpLayout->addWidget(mpComments, 1);
146 147 148

    connect(UBApplication::boardController, SIGNAL(activeSceneWillChange()), this, SLOT(saveContent()));
    connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), this, SLOT(loadContent()));
149
    connect(UBApplication::mainWindow->actionQuit, SIGNAL(triggered()), this, SLOT(saveContent()));
shibakaneki's avatar
shibakaneki committed
150
    connect(mpTitle, SIGNAL(textChanged(QString)), this, SLOT(onValueChanged()));
shibakaneki's avatar
shibakaneki committed
151 152
    connect(mpActionButton, SIGNAL(clicked()), this, SLOT(onActionButton()));
    connect(mpLinkButton, SIGNAL(clicked()), this, SLOT(onLinkButton()));
153
    connect(mpPreview, SIGNAL(showEditMode()), this, SLOT(onShowEditMode()));
shibakaneki's avatar
shibakaneki committed
154 155 156 157
}

UBTeacherBarWidget::~UBTeacherBarWidget()
{
shibakaneki's avatar
shibakaneki committed
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
    if(NULL != mpComments){
        delete mpComments;
        mpComments = NULL;
    }
    if(NULL != mpCommentLabel){
        delete mpCommentLabel;
        mpCommentLabel = NULL;
    }
    if(NULL != mpLinks){
        delete mpLinks;
        mpLinks = NULL;
    }
    if(NULL != mpLinkLabel){
        delete mpLinkLabel;
        mpLinkLabel = NULL;
    }
174 175 176 177 178 179 180 181
    if(NULL != mpLinkButton){
        delete mpLinkButton;
        mpLinkButton = NULL;
    }
    if(NULL != mpLinkLayout){
        delete mpLinkLayout;
        mpLinkLayout = NULL;
    }
182
    if(NULL != mpDropMediaZone){
183 184 185
        delete mpDropMediaZone;
        mpDropMediaZone = NULL;
    }
shibakaneki's avatar
shibakaneki committed
186 187 188 189 190 191 192 193
    if(NULL != mpMediaLabel){
        delete mpMediaLabel;
        mpMediaLabel = NULL;
    }
    if(NULL != mpActionButton){
        delete mpActionButton;
        mpActionButton = NULL;
    }
194 195 196 197
    if(NULL != mpActionLayout){
        delete mpActionLayout;
        mpActionLayout = NULL;
    }
shibakaneki's avatar
shibakaneki committed
198 199 200 201
    if(NULL != mpActionLabel){
        delete mpActionLabel;
        mpActionLabel = NULL;
    }
202 203 204
    if(NULL != mpDurationLabel){
        delete mpDurationLabel;
        mpDurationLabel = NULL;
shibakaneki's avatar
shibakaneki committed
205
    }
206 207 208
    if(NULL != mpDuration1){
        delete mpDuration1;
        mpDuration1 = NULL;
shibakaneki's avatar
shibakaneki committed
209
    }
210 211 212
    if(NULL != mpDuration2){
        delete mpDuration2;
        mpDuration2 = NULL;
shibakaneki's avatar
shibakaneki committed
213
    }
214 215 216
    if(NULL != mpDuration3){
        delete mpDuration3;
        mpDuration3 = NULL;
shibakaneki's avatar
shibakaneki committed
217
    }
218 219 220
    if(NULL != mpDurationButtons){
        delete mpDurationButtons;
        mpDurationButtons = NULL;
shibakaneki's avatar
shibakaneki committed
221
    }
222
    if(NULL != mpDurationLayout){
shibakaneki's avatar
shibakaneki committed
223 224 225
        delete mpDurationLayout;
        mpDurationLayout = NULL;
    }
226
    if(NULL != mpTitleLabel){
shibakaneki's avatar
shibakaneki committed
227 228 229
        delete mpTitleLabel;
        mpTitleLabel = NULL;
    }
230
    if(NULL != mpTitle){
shibakaneki's avatar
shibakaneki committed
231 232 233
        delete mpTitle;
        mpTitle = NULL;
    }
234
    if(NULL != mpTitleLayout){
shibakaneki's avatar
shibakaneki committed
235 236 237
        delete mpTitleLayout;
        mpTitleLayout = NULL;
    }
238
    if(NULL != mpLayout){
shibakaneki's avatar
shibakaneki committed
239 240 241
        delete mpLayout;
        mpLayout = NULL;
    }
242
    if(NULL != mpContainer){
shibakaneki's avatar
shibakaneki committed
243 244 245
        delete mpContainer;
        mpContainer = NULL;
    }
246
    if(NULL != mpContainerLayout){
shibakaneki's avatar
shibakaneki committed
247 248 249
        delete mpContainerLayout;
        mpContainerLayout = NULL;
    }
250 251 252 253
    if(NULL != mpPreview){
        delete mpPreview;
        mpPreview = NULL;
    }
254 255 256 257
    if(NULL != mpStackWidget){
        delete mpStackWidget;
        mpStackWidget = NULL;
    }
shibakaneki's avatar
shibakaneki committed
258 259
}

shibakaneki's avatar
shibakaneki committed
260 261
void UBTeacherBarWidget::onValueChanged()
{
262
    if(isEmpty())
shibakaneki's avatar
shibakaneki committed
263 264 265 266 267 268 269 270 271 272 273 274 275
    {
        mIconToLeft = QPixmap(":images/teacher_open_disabled.png");
        mIconToRight = QPixmap(":images/teacher_close_disabled.png");
    }
    else
    {
        mIconToLeft = QPixmap(":images/teacher_open.png");
        mIconToRight = QPixmap(":images/teacher_close.png");
    }

    UBApplication::boardController->paletteManager()->refreshPalettes();
}

276 277 278
void UBTeacherBarWidget::saveContent()
{
    sTeacherBarInfos infos;
279
    // Title
280
    infos.title = mpTitle->text();
281 282
    // Duration
    if(mpDuration1->isChecked()){
shibakaneki's avatar
shibakaneki committed
283
        infos.Duration = eDuration_Quarter;
284
    }else if(mpDuration2->isChecked()){
shibakaneki's avatar
shibakaneki committed
285
        infos.Duration = eDuration_Half;
286
    }else{
shibakaneki's avatar
shibakaneki committed
287
        infos.Duration = eDuration_ThreeQuarter;
288 289 290 291 292 293 294
    }
    // Actions
    for(int i=0; i<mActionList.size(); i++){
        infos.actions << QString("%0;%1").arg(mActionList.at(i)->comboValue()).arg(mActionList.at(i)->text());
    }
    // Media
    // TODO :   Get the url of the dropped medias and store them in infos.medias
295
     infos.medias = mpDropMediaZone->mediaList();
296 297 298 299 300 301 302 303 304 305

    // Links
    for(int j=0; j<mUrlList.size(); j++){
        if("" != mUrlList.at(j)->url()){
            infos.urls << mUrlList.at(j)->url();
        }
    }
    // Comments
    infos.comments = mpComments->document()->toPlainText();

306 307 308 309 310
    UBPersistenceManager::persistenceManager()->persistTeacherBar(UBApplication::boardController->activeDocument(), UBApplication::boardController->activeSceneIndex(), infos);
}

void UBTeacherBarWidget::loadContent()
{
311
    clearWidgetLists();
312
    sTeacherBarInfos nextInfos = UBPersistenceManager::persistenceManager()->getTeacherBarInfos(UBApplication::boardController->activeDocument(), UBApplication::boardController->activeSceneIndex());
313
    // Title
314
    mpTitle->setText(nextInfos.title);
315 316
    // Duration
    switch(nextInfos.Duration){
shibakaneki's avatar
shibakaneki committed
317
        case eDuration_Quarter: mpDuration1->setChecked(true);
318
            break;
shibakaneki's avatar
shibakaneki committed
319
        case eDuration_Half: mpDuration2->setChecked(true);
320
            break;
shibakaneki's avatar
shibakaneki committed
321
        case eDuration_ThreeQuarter: mpDuration3->setChecked(true);
322 323 324 325 326 327 328 329
            break;
        default: mpDuration1->setChecked(true);
            break;
    }
    // Actions
    for(int i=0; i<nextInfos.actions.size(); i++){
        QStringList qslAction = nextInfos.actions.at(i).split(";");
        if(qslAction.size() >= 2){
330
            UBTeacherStudentAction* pAction = new UBTeacherStudentAction(mpContainer);
331 332 333 334 335 336 337
            pAction->setComboValue(qslAction.at(0).toInt());
            pAction->setText(qslAction.at(1));
            mActionList << pAction;
            mpActions->addWidget(pAction);
        }
    }
    // Media
338
    mpDropMediaZone->reloadMedia(nextInfos.medias);
339 340 341 342 343

    // Links
    for(int j=0; j<nextInfos.urls.size(); j++){
        QString qsUrl = nextInfos.urls.at(j);
        if("" != qsUrl){
344
            UBUrlWidget* pLink = new UBUrlWidget(mpContainer);
345 346 347 348 349 350 351 352 353
            pLink->setUrl(qsUrl);
            mUrlList << pLink;
            mpLinks->addWidget(pLink);
        }
    }
    // Comments
    if(NULL != mpComments){
        mpComments->document()->setPlainText(nextInfos.comments);
    }
354 355

    if(!isEmpty()){
shibakaneki's avatar
shibakaneki committed
356 357
        // Update the fields of the preview widget
        mpPreview->setTitle(mpTitle->text());
358
        mpPreview->mediaViewer()->loadMedia(nextInfos.medias);
Claudio Valerio's avatar
Claudio Valerio committed
359

360
        mpStackWidget->setCurrentWidget(mpPreview);
shibakaneki's avatar
shibakaneki committed
361 362 363 364 365 366 367
        if(mpDuration1->isChecked()){
            mpPreview->setDuration(eDuration_Quarter);
        }else if(mpDuration2->isChecked()){
            mpPreview->setDuration(eDuration_Half);
        }else{
            mpPreview->setDuration(eDuration_ThreeQuarter);
        }
shibakaneki's avatar
shibakaneki committed
368
        mpPreview->setComments(mpComments->document()->toPlainText());
Claudio Valerio's avatar
Claudio Valerio committed
369 370
        mpPreview->mediaViewer()->cleanMedia();
        mpPreview->mediaViewer()->loadMedia(nextInfos.medias);
371
    }
Claudio Valerio's avatar
Claudio Valerio committed
372

373 374 375 376 377 378 379 380 381
}

bool UBTeacherBarWidget::isEmpty()
{
    return  mpTitle->text() == "" &&
            mpLinks->empty() &&
            mpActions->empty() &&
            mpDropMediaZone->empty() &&
            mpComments->document()->toPlainText() == "";
382 383
}

Anatoly Mihalchenko's avatar
Anatoly Mihalchenko committed
384 385 386 387 388
void UBTeacherBarWidget::onTitleTextChanged(const QString& text)
{
	mpTitle->setToolTip(text);
}

shibakaneki's avatar
shibakaneki committed
389 390
void UBTeacherBarWidget::onActionButton()
{
391
    UBTeacherStudentAction* pAction = new UBTeacherStudentAction(mpContainer);
shibakaneki's avatar
shibakaneki committed
392 393
    mActionList << pAction;
    mpActions->addWidget(pAction);
shibakaneki's avatar
shibakaneki committed
394 395 396 397
}

void UBTeacherBarWidget::onLinkButton()
{
398
    UBUrlWidget* pUrl = new UBUrlWidget(mpContainer);
shibakaneki's avatar
shibakaneki committed
399 400
    mUrlList << pUrl;
    mpLinks->addWidget(pUrl);
shibakaneki's avatar
shibakaneki committed
401 402
}

403 404
void UBTeacherBarWidget::clearWidgetLists()
{
405 406
    mpDropMediaZone->cleanMedias();

407 408 409 410 411 412 413 414 415 416 417 418 419 420 421
    if(NULL != mpActions){
        for(int i=0; i<mActionList.size(); i++){
            mpActions->removeWidget(mActionList.at(i));
        }
        mActionList.clear();
    }

    if(NULL != mpLinks){
        for(int i=0; i<mUrlList.size(); i++){
            mpLinks->removeWidget(mUrlList.at(i));
        }
        mUrlList.clear();
    }
}

422 423 424 425 426
void UBTeacherBarWidget::onShowEditMode()
{
    mpStackWidget->setCurrentWidget(mpContainer);
}

427
// ---------------------------------------------------------------------------------------------
shibakaneki's avatar
shibakaneki committed
428 429 430 431 432
UBTeacherStudentAction::UBTeacherStudentAction(QWidget *parent, const char *name):QWidget(parent)
  , mpText(NULL)
  , mpLayout(NULL)
  , mpComboLayout(NULL)
  , mpCombo(NULL)
shibakaneki's avatar
shibakaneki committed
433 434 435 436 437 438 439
{
    setObjectName(name);

    setAttribute(Qt::WA_StyledBackground, true);
    setStyleSheet(UBApplication::globalStyleSheet());

    // Create the GUI
shibakaneki's avatar
shibakaneki committed
440
    mpLayout = new QHBoxLayout(this);
shibakaneki's avatar
shibakaneki committed
441 442
    setLayout(mpLayout);

shibakaneki's avatar
shibakaneki committed
443 444 445
    mpComboLayout = new QVBoxLayout();

    mpCombo = new QComboBox(this);
shibakaneki's avatar
shibakaneki committed
446 447
    mpCombo->setObjectName("DockPaletteWidgetComboBox");
    mpCombo->setMinimumWidth(80);
shibakaneki's avatar
shibakaneki committed
448 449
    mpCombo->addItem(tr("Teacher"));
    mpCombo->addItem(tr("Student"));
shibakaneki's avatar
shibakaneki committed
450
    mpComboLayout->addWidget(mpCombo, 0);
shibakaneki's avatar
shibakaneki committed
451 452 453 454 455
    mpComboLayout->addStretch(1);

    mpLayout->addLayout(mpComboLayout, 0);

    mpText = new QTextEdit(this);
shibakaneki's avatar
shibakaneki committed
456 457 458
    mpText->setObjectName("DockPaletteWidgetBox");
    mpText->setStyleSheet("background:white;");

shibakaneki's avatar
shibakaneki committed
459
    mpLayout->addWidget(mpText, 1);
shibakaneki's avatar
shibakaneki committed
460 461 462 463 464

}

UBTeacherStudentAction::~UBTeacherStudentAction()
{
shibakaneki's avatar
shibakaneki committed
465 466 467
    if(NULL != mpCombo){
        delete mpCombo;
        mpCombo = NULL;
shibakaneki's avatar
shibakaneki committed
468
    }
shibakaneki's avatar
shibakaneki committed
469 470 471
    if(NULL != mpText){
        delete mpText;
        mpText = NULL;
shibakaneki's avatar
shibakaneki committed
472
    }
shibakaneki's avatar
shibakaneki committed
473 474 475
    if(NULL != mpComboLayout){
        delete mpComboLayout;
        mpComboLayout = NULL;
shibakaneki's avatar
shibakaneki committed
476
    }
shibakaneki's avatar
shibakaneki committed
477
    if(NULL != mpLayout){
shibakaneki's avatar
shibakaneki committed
478 479 480 481 482
        delete mpLayout;
        mpLayout = NULL;
    }
}

shibakaneki's avatar
shibakaneki committed
483
QString UBTeacherStudentAction::text()
shibakaneki's avatar
shibakaneki committed
484
{
shibakaneki's avatar
shibakaneki committed
485 486 487 488 489
    QString str;
    if(NULL != mpText){
        str = mpText->document()->toPlainText();
    }
    return str;
490 491
}

shibakaneki's avatar
shibakaneki committed
492
QString UBTeacherStudentAction::comboValue()
493
{
shibakaneki's avatar
shibakaneki committed
494
    QString str;
shibakaneki's avatar
shibakaneki committed
495

496
    if(NULL != mpCombo){
497
        str = QString("%0").arg(mpCombo->currentIndex());
498
    }
shibakaneki's avatar
shibakaneki committed
499

shibakaneki's avatar
shibakaneki committed
500
    return str;
shibakaneki's avatar
shibakaneki committed
501
}
502

503 504 505 506 507 508 509 510 511 512 513 514 515 516
void UBTeacherStudentAction::setComboValue(int value)
{
    if(NULL != mpCombo){
        mpCombo->setCurrentIndex(value);
    }
}

void UBTeacherStudentAction::setText(const QString& text)
{
    if(NULL != mpText){
        mpText->document()->setPlainText(text);
    }
}

517
// ---------------------------------------------------------------------------------------------
518
UBTeacherBarDropMediaZone::UBTeacherBarDropMediaZone(QWidget *parent, const char *name):QWidget(parent)
Claudio Valerio's avatar
Claudio Valerio committed
519

520 521 522
{
    setObjectName(name);
    setAcceptDrops(true);
523 524 525
    mWidget = new UBWidgetList(parent);
    mWidget->setEmptyText(tr("Drag media here ..."));
    mLayout.addWidget(mWidget);
526 527
    setLayout(&mLayout);

528 529 530 531
}

UBTeacherBarDropMediaZone::~UBTeacherBarDropMediaZone()
{
532
    cleanMedias();
533 534 535 536
    if(mWidget){
        delete mWidget;
        mWidget = NULL;
    }
537 538
}

539 540 541 542 543 544 545 546 547 548 549 550
void UBTeacherBarDropMediaZone::cleanMedias()
{
    foreach(QWidget* eachWidget,mWidgetList){
        mWidget->removeWidget(eachWidget);
        delete eachWidget;
    }

    mWidgetList.clear();

    mMediaList.clear();
}

551 552 553 554
bool UBTeacherBarDropMediaZone::empty()
{
    return mWidget->empty();
}
555 556 557 558 559 560 561 562 563 564 565

void UBTeacherBarDropMediaZone::dragEnterEvent(QDragEnterEvent *pEvent)
{
    pEvent->acceptProposedAction();
}

void UBTeacherBarDropMediaZone::dragLeaveEvent(QDragLeaveEvent *pEvent)
{
    pEvent->accept();
}

566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603

void UBTeacherBarDropMediaZone::addMedia(QString pMediaPath)
{
    if(!pMediaPath.isEmpty())
        mMediaList.append(pMediaPath);
    else
        qWarning() << __FUNCTION__ <<  "empty path";

    QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(pMediaPath);
    if(mimeType.contains("image")){
        QPixmap pix = QPixmap(pMediaPath);
        QLabel* label = new QLabel();
        label->setPixmap(pix);
        label->setScaledContents(true);
        mWidget->addWidget(label);
        mWidgetList << label;
    }
    else if(mimeType.contains("video") || mimeType.contains("audio")){
        UBMediaPlayer* mediaPlayer = new UBMediaPlayer();
        mediaPlayer->setFile(pMediaPath);
        mWidget->addWidget(mediaPlayer);
        mWidgetList << mediaPlayer;
    }
    else{
        qWarning() << "pMediaPath" << pMediaPath;
        qWarning() << "bad idea to come here";
    }

}

void UBTeacherBarDropMediaZone::reloadMedia(QStringList pList)
{
    cleanMedias();
    foreach(QString eachString, pList){
        addMedia(eachString);
    }
}

604 605
void UBTeacherBarDropMediaZone::dropEvent(QDropEvent *pEvent)
{
606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627
    QPixmap pixFromDropEvent;
    QString mimeType;
    QString resourcePath;
    if(pEvent->mimeData()->hasText()){
        qDebug() << "pEvent->mimeData()->hasText()" << pEvent->mimeData()->text();
        resourcePath = pEvent->mimeData()->text();
    }
    else if(pEvent->mimeData()->hasUrls()){
        qDebug() << "pEvent->mimeData()->hasUrls()" << pEvent->mimeData()->urls().at(0);
        resourcePath = pEvent->mimeData()->urls().at(0).toLocalFile();
    }
    else if(pEvent->mimeData()->hasImage()){
        qDebug() << "pEvent->mimeData()->hasImage()";
        pixFromDropEvent.loadFromData(pEvent->mimeData()->imageData().toByteArray());
        if(!pixFromDropEvent.isNull())
            mimeType = "image";
    }

    if (mimeType.isEmpty() && resourcePath.isEmpty()){
        pEvent->acceptProposedAction();
        return;
    }
628 629
    if(!resourcePath.isEmpty())
        addMedia(resourcePath);
630 631 632 633 634 635 636
    pEvent->acceptProposedAction();
}

void UBTeacherBarDropMediaZone::dragMoveEvent(QDragMoveEvent *pEvent)
{
    pEvent->acceptProposedAction();
}
shibakaneki's avatar
shibakaneki committed
637 638 639 640 641 642 643 644

// ---------------------------------------------------------------------------------------------
UBUrlWidget::UBUrlWidget(QWidget *parent, const char *name):QWidget(parent)
  , mpLayout(NULL)
  , mpUrlLabel(NULL)
  , mpUrl(NULL)
{
    setObjectName(name);
shibakaneki's avatar
shibakaneki committed
645 646 647
    setAttribute(Qt::WA_StyledBackground, true);
    setStyleSheet(UBApplication::globalStyleSheet());

shibakaneki's avatar
shibakaneki committed
648 649 650 651 652
    mpLayout = new QHBoxLayout(this);
    setLayout(mpLayout);
    mpUrlLabel = new QLabel(tr("Url"), this);
    mpLayout->addWidget(mpUrlLabel, 0);
    mpUrl = new QLineEdit(this);
shibakaneki's avatar
shibakaneki committed
653
    mpUrl->setObjectName("DockPaletteWidgetLineEdit");
shibakaneki's avatar
shibakaneki committed
654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682
    mpLayout->addWidget(mpUrl, 1);
}

UBUrlWidget::~UBUrlWidget()
{
    if(NULL != mpUrlLabel){
        delete mpUrlLabel;
        mpUrlLabel = NULL;
    }
    if(NULL != mpUrl){
        delete mpUrl;
        mpUrl = NULL;
    }
    if(NULL != mpLayout){
        delete mpLayout;
        mpLayout = NULL;
    }
}

QString UBUrlWidget::url()
{
    QString str;

    if(NULL != mpUrl){
        str = mpUrl->text();
    }

    return str;
}
683 684 685 686 687 688 689

void UBUrlWidget::setUrl(const QString &url)
{
    if(NULL != mpUrl){
        mpUrl->setText(url);
    }
}
690 691 692 693

// ------------------------------------------------------------------------------------
UBTeacherBarPreviewWidget::UBTeacherBarPreviewWidget(QWidget *parent, const char *name):QWidget(parent)
  , mpEditButton(NULL)
shibakaneki's avatar
shibakaneki committed
694 695 696 697 698
  , mpTitle(NULL)
  , mpDuration(NULL)
  , mpActionsLabel(NULL)
  , mpMediaLabel(NULL)
  , mpCommentsLabel(NULL)
shibakaneki's avatar
shibakaneki committed
699
  , mpComments(NULL)
700 701 702
{
    setObjectName(name);

shibakaneki's avatar
shibakaneki committed
703 704 705 706 707 708 709 710 711 712 713 714 715 716 717
    setLayout(&mLayout);

    setAttribute(Qt::WA_StyledBackground, true);
    setStyleSheet(UBApplication::globalStyleSheet());

    // Build the Preview widget
    // Title + duration
    mpTitle = new QLabel(this);
    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);
718

shibakaneki's avatar
shibakaneki committed
719 720
    // Actions
    mpActionsLabel = new QLabel(tr("Actions"), this);
shibakaneki's avatar
shibakaneki committed
721
    mpActionsLabel->setObjectName("UBTeacherBarPreviewSubtitle");
shibakaneki's avatar
shibakaneki committed
722 723 724 725 726 727
    mActionLabelLayout.addWidget(mpActionsLabel, 0);
    mActionLabelLayout.addStretch(1);
    mLayout.addLayout(&mActionLabelLayout);

    // Media
    mpMediaLabel = new QLabel(tr("Medias"), this);
shibakaneki's avatar
shibakaneki committed
728
    mpMediaLabel->setObjectName("UBTeacherBarPreviewSubtitle");
shibakaneki's avatar
shibakaneki committed
729 730 731 732 733 734 735 736 737 738
    mMediaLabelLayout.addWidget(mpMediaLabel, 0);
    mMediaLabelLayout.addStretch(1);
    mLayout.addLayout(&mMediaLabelLayout);
    mLayout.addWidget(&mMediaViewer, 0);

    // Temporary stretch
    mLayout.addStretch(1);

    // Comments
    mpCommentsLabel = new QLabel(tr("Comments"), this);
shibakaneki's avatar
shibakaneki committed
739
    mpCommentsLabel->setObjectName("UBTeacherBarPreviewSubtitle");
shibakaneki's avatar
shibakaneki committed
740 741 742
    mCommentsLabelLayout.addWidget(mpCommentsLabel, 0);
    mCommentsLabelLayout.addStretch(1);
    mLayout.addLayout(&mCommentsLabelLayout);
shibakaneki's avatar
shibakaneki committed
743 744 745
    mpComments = new QLabel(this);
    mpComments->setWordWrap(true);
    mLayout.addWidget(mpComments);
shibakaneki's avatar
shibakaneki committed
746 747

    // Edit button
748
    mpEditButton = new QPushButton(tr("Edit infos"), this);
shibakaneki's avatar
shibakaneki committed
749 750 751 752 753
    mpEditButton->setObjectName("DockPaletteWidgetButton");
    mEditLayout.addStretch(1);
    mEditLayout.addWidget(mpEditButton, 0);
    mEditLayout.addStretch(1);
    mLayout.addLayout(&mEditLayout, 0);
754

755

756 757 758 759 760
    connect(mpEditButton, SIGNAL(clicked()), this, SLOT(onEdit()));
}

UBTeacherBarPreviewWidget::~UBTeacherBarPreviewWidget()
{
shibakaneki's avatar
shibakaneki committed
761 762 763 764
    if(NULL != mpComments){
        delete mpComments;
        mpComments = NULL;
    }
shibakaneki's avatar
shibakaneki committed
765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784
    if(NULL != mpTitle){
        delete mpTitle;
        mpTitle = NULL;
    }
    if(NULL != mpDuration){
        delete mpDuration;
        mpDuration = NULL;
    }
    if(NULL != mpActionsLabel){
        delete mpActionsLabel;
        mpActionsLabel = NULL;
    }
    if(NULL != mpMediaLabel){
        delete mpMediaLabel;
        mpMediaLabel =  NULL;
    }
    if(NULL != mpCommentsLabel){
        delete mpCommentsLabel;
        mpCommentsLabel = NULL;
    }
785 786 787 788 789 790 791 792 793 794
    if(NULL != mpEditButton){
        delete mpEditButton;
        mpEditButton = NULL;
    }
}

void UBTeacherBarPreviewWidget::onEdit()
{
    emit showEditMode();
}
795

shibakaneki's avatar
shibakaneki committed
796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822
void UBTeacherBarPreviewWidget::setTitle(const QString &title)
{
    if(NULL != mpTitle){
        mpTitle->setText(title);
    }
}

void UBTeacherBarPreviewWidget::setDuration(eDuration duration)
{
    if(NULL != mpDuration){
        QPixmap p;
        switch(duration){
            case eDuration_Quarter:
                p = QPixmap(":images/duration1.png");
                break;
            case eDuration_Half:
                p = QPixmap(":images/duration2.png");
                break;
            case eDuration_ThreeQuarter:
                p = QPixmap(":images/duration3.png");
                break;
            default:
                break;
        }
        mpDuration->setPixmap(p.scaledToHeight(16, Qt::SmoothTransformation));
    }
}
823

shibakaneki's avatar
shibakaneki committed
824 825 826 827 828 829 830
void UBTeacherBarPreviewWidget::setComments(const QString &comments)
{
    if(NULL != mpComments){
        mpComments->setText(comments);
    }
}

831 832 833 834 835 836 837 838
// ------------------------------------------------------------------------------------
UBTeacherBarPreviewMedia::UBTeacherBarPreviewMedia(QWidget* parent, const char* name) : QWidget(parent)
{
    setObjectName(name);
    mWidget = new UBWidgetList(parent);
    mWidget->setEmptyText(tr("No media found"));
    mLayout.addWidget(mWidget);
    setLayout(&mLayout);
839
    mWidgetList.clear();
840 841 842 843 844 845 846 847 848 849 850
}

UBTeacherBarPreviewMedia::~UBTeacherBarPreviewMedia()
{
    if(mWidget){
        delete mWidget;
        mWidget = NULL;
    }

}

Claudio Valerio's avatar
Claudio Valerio committed
851 852 853 854 855 856 857 858 859
void UBTeacherBarPreviewMedia::cleanMedia()
{
    foreach(QWidget* eachWidget, mWidgetList.keys()){
        delete eachWidget;
        eachWidget = NULL;
    }
    mWidgetList.clear();
}

860 861 862 863 864 865 866 867
void UBTeacherBarPreviewMedia::loadWidgets(QList<QWidget*> pWidgetsList)
{
    foreach(QWidget*eachWidget, pWidgetsList){
        mWidget->addWidget(eachWidget);
        mWidgetList[eachWidget]="DRAG UNAVAILABLE";
    }
}

868 869 870 871 872 873 874

void UBTeacherBarPreviewMedia::loadMedia(QStringList pMedias)
{
    foreach(QString eachString, pMedias){
        if(!eachString.isEmpty()){
            QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(eachString);
            if(mimeType.contains("image")){
875 876
                UBDraggableLabel* label = new UBDraggableLabel();
                label->loadImage(eachString);
877
                mWidget->addWidget(label);
878
                mWidgetList[label]=eachString;
879 880
            }
            else if(mimeType.contains("video") || mimeType.contains("audio")){
881
                UBDraggableMediaPlayer* mediaPlayer = new UBDraggableMediaPlayer();
882 883
                mediaPlayer->setFile(eachString);
                mWidget->addWidget(mediaPlayer);
884
                mWidgetList[mediaPlayer] = eachString;
885 886 887 888 889 890 891 892
            }
            else{
                qWarning() << "pMediaPath" << eachString;
                qWarning() << "bad idea to come here";
            }
        }
    }
}