commit
8238b22e55
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.2 KiB |
@ -1,39 +0,0 @@ |
||||
#include <QMimeData> |
||||
#include <QDrag> |
||||
#include <QUrl> |
||||
|
||||
#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<QUrl> urls; |
||||
urls << QUrl::fromLocalFile(mSourcePath); |
||||
mimeData->setUrls(urls); |
||||
mimeData->setText(mSourcePath); |
||||
|
||||
|
||||
QDrag *drag = new QDrag(this); |
||||
drag->setMimeData(mimeData); |
||||
drag->start(); |
||||
} |
@ -1,23 +0,0 @@ |
||||
#ifndef UBDRAGGABLELABEL_H |
||||
#define UBDRAGGABLELABEL_H |
||||
|
||||
#include <QLabel> |
||||
|
||||
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
|
@ -1,42 +0,0 @@ |
||||
#include <QApplication> |
||||
#include <QUrl> |
||||
|
||||
#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<QUrl> urls; |
||||
urls << QUrl(mFilePath); |
||||
mimeData->setText(mFilePath); |
||||
mimeData->setUrls(urls); |
||||
|
||||
drag->setMimeData(mimeData); |
||||
|
||||
drag->exec(Qt::CopyAction | Qt::MoveAction); |
||||
} |
@ -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
|
@ -1,229 +0,0 @@ |
||||
#include <QDebug> |
||||
#include <QScrollBar> |
||||
#include <QApplication> |
||||
#include <QPainter> |
||||
|
||||
#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<UBActionableWidget*>(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(); |
||||
} |
@ -1,69 +0,0 @@ |
||||
#ifndef UBWIDGETLIST_H |
||||
#define UBWIDGETLIST_H |
||||
|
||||
#include <QWidget> |
||||
#include <QScrollArea> |
||||
#include <QBoxLayout> |
||||
#include <QVBoxLayout> |
||||
#include <QHBoxLayout> |
||||
#include <QResizeEvent> |
||||
#include <QVector> |
||||
#include <QLabel> |
||||
|
||||
#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<QWidget*, QSize> mWidgetInfo; |
||||
QLabel* mpEmptyLabel; |
||||
UBActionableWidget* mpCurrentWidget; |
||||
}; |
||||
|
||||
#endif // UBWIDGETLIST_H
|
@ -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 |
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#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); |
||||
} |
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#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
|
@ -1,389 +0,0 @@ |
||||
#include "UBMediaPlayer.h" |
||||
|
||||
|
||||
|
||||
#include <QtGui> |
||||
|
||||
#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("<center>No media</center>"));
|
||||
|
||||
|
||||
// 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; i<fileNames.size(); i++) |
||||
m_MediaObject.enqueue(Phonon::MediaSource(fileNames[i])); |
||||
} |
||||
} |
||||
|
||||
void UBMediaPlayer::bufferStatus(int percent) |
||||
{ |
||||
if (percent == 100) |
||||
progressLabel->setText(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<Phonon::MediaSource> 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<QUrl> urls; |
||||
urls << QUrl::fromLocalFile(mSourcePath); |
||||
mimeData->setUrls(urls); |
||||
mimeData->setText(mSourcePath); |
||||
|
||||
|
||||
QDrag *drag = new QDrag(this); |
||||
drag->setMimeData(mimeData); |
||||
drag->start(); |
||||
} |
||||
|
@ -1,107 +0,0 @@ |
||||
#ifndef UBUBMediaPlayer_H |
||||
#define UBUBMediaPlayer_H |
||||
|
||||
#include <QtGui/QWidget> |
||||
#include <QtGui/QApplication> |
||||
#include <QtCore/QTimerEvent> |
||||
#include <QtGui/QShowEvent> |
||||
#include <QtGui/QIcon> |
||||
#include <QtCore/QBasicTimer> |
||||
#include <QtGui/QAction> |
||||
|
||||
#include <phonon/audiooutput.h> |
||||
#include <phonon/backendcapabilities.h> |
||||
#include <phonon/effect.h> |
||||
#include <phonon/effectparameter.h> |
||||
#include <phonon/effectwidget.h> |
||||
#include <phonon/mediaobject.h> |
||||
#include <phonon/seekslider.h> |
||||
#include <phonon/videowidget.h> |
||||
#include <phonon/volumeslider.h> |
||||
|
||||
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
|
@ -0,0 +1,34 @@ |
||||
|
||||
#include <QApplication> |
||||
#include <QStyleOptionButton> |
||||
#include <QStyledItemDelegate> |
||||
#include <QStyleOptionViewItem> |
||||
#include <QPainter> |
||||
#include <QModelIndex> |
||||
#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; |
||||
} |
@ -0,0 +1,35 @@ |
||||
#ifndef UBTGWIDGETTREEDELEGATE_H |
||||
#define UBTGWIDGETTREEDELEGATE_H |
||||
|
||||
class QPainter; |
||||
class QStyleOptionViewItem; |
||||
class QModelIndex; |
||||
|
||||
#include <QStyledItemDelegate> |
||||
|
||||
|
||||
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
|
@ -0,0 +1,5 @@ |
||||
#include "UBTeacherGuideDelegate.h" |
||||
|
||||
UBTeacherGuideDelegate::UBTeacherGuideDelegate() |
||||
{ |
||||
} |
@ -0,0 +1,10 @@ |
||||
#ifndef UBTEACHERGUIDEDELEGATE_H |
||||
#define UBTEACHERGUIDEDELEGATE_H |
||||
|
||||
class UBTeacherGuideDelegate |
||||
{ |
||||
public: |
||||
UBTeacherGuideDelegate(); |
||||
}; |
||||
|
||||
#endif // UBTEACHERGUIDEDELEGATE_H
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <QDebug> |
||||
#include <QLabel> |
||||
#include <QVBoxLayout> |
||||
#include <QHeaderView> |
||||
#include <QTreeWidget> |
||||
#include <QPushButton> |
||||
|
||||
#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<QTreeWidgetItem*> children = mpAddAnActionItem->takeChildren(); |
||||
children << mpAddAMediaItem->takeChildren(); |
||||
children << mpAddALinkItem->takeChildren(); |
||||
|
||||
foreach(QTreeWidgetItem* item, children){ |
||||
DELETEPTR(item); |
||||
} |
||||
|
||||
} |
||||
|
||||
QList<QTreeWidgetItem*> UBTeacherGuideEditionWidget::getChildrenList(QTreeWidgetItem* widgetItem) |
||||
{ |
||||
QList<QTreeWidgetItem*>result; |
||||
for(int i=0;i<widgetItem->childCount();i+=1) |
||||
result << widgetItem->child(i); |
||||
return result; |
||||
} |
||||
|
||||
QVector<tUBGEElementNode*> UBTeacherGuideEditionWidget::getPageAndCommentData() |
||||
{ |
||||
QVector<tUBGEElementNode*>result; |
||||
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<tUBGEElementNode*> UBTeacherGuideEditionWidget::getData() |
||||
{ |
||||
QVector<tUBGEElementNode*>result; |
||||
QList<QTreeWidgetItem*> children = getChildrenList(mpAddAnActionItem); |
||||
children << getChildrenList(mpAddAMediaItem); |
||||
children << getChildrenList(mpAddALinkItem); |
||||
result << getPageAndCommentData(); |
||||
foreach(QTreeWidgetItem* widgetItem, children){ |
||||
tUBGEElementNode* node = dynamic_cast<iUBTGSavableData*>(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<QTreeWidgetItem*> 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<tUBGEElementNode*> 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); |
||||
|
||||
} |
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#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<tUBGEElementNode*> getData(); |
||||
|
||||
public slots: |
||||
void onAddItemClicked(QTreeWidgetItem* widget, int column); |
||||
void onActiveSceneChanged(); |
||||
void showEvent(QShowEvent* event); |
||||
|
||||
private: |
||||
QList<QTreeWidgetItem*> getChildrenList(QTreeWidgetItem* widgetItem); |
||||
QVector<tUBGEElementNode*> 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(QVector<tUBGEElementNode*>data); |
||||
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; |
||||
QVector<tUBGEElementNode*>mCurrentData; |
||||
|
||||
}; |
||||
|
||||
#endif // UBTEACHERGUIDEWIDGET_H
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <QTreeWidget> |
||||
#include <QVBoxLayout> |
||||
#include <QComboBox> |
||||
#include <QColor> |
||||
#include <QLabel> |
||||
#include <QDebug> |
||||
#include <QUrl> |
||||
#include <QWebSettings> |
||||
#include <QDomElement> |
||||
#include <QDomDocument> |
||||
#include <QApplication> |
||||
|
||||
#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<QUrl> 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; |
||||
} |
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#ifndef UBTEACHERGUIDEWIDGETSTOOLS_H |
||||
#define UBTEACHERGUIDEWIDGETSTOOLS_H |
||||
|
||||
#include <QObject> |
||||
#include <QTreeWidgetItem> |
||||
#include <QTextEdit> |
||||
#include <QLabel> |
||||
#include <QDragEnterEvent> |
||||
#include <QDropEvent> |
||||
#include <QLineEdit> |
||||
#include <QMimeData> |
||||
#include <QStackedWidget> |
||||
#include <QWebView> |
||||
|
||||
#include "customWidgets/UBMediaWidget.h" |
||||
|
||||
class QTreeWidget; |
||||
class QVBoxLayout; |
||||
class QComboBox; |
||||
class QTextEdit; |
||||
class QWidget; |
||||
class UBTGAdaptableText; |
||||
class QDomElement; |
||||
|
||||
typedef struct |
||||
{ |
||||
QString type; |
||||
QMap<QString,QString> 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
|
Loading…
Reference in new issue