diff --git a/src/gui/UBTeacherGuideWidget.cpp b/src/gui/UBTeacherGuideWidget.cpp index 51cd25b6..7eec4371 100644 --- a/src/gui/UBTeacherGuideWidget.cpp +++ b/src/gui/UBTeacherGuideWidget.cpp @@ -68,7 +68,7 @@ UBTeacherGuideEditionWidget::UBTeacherGuideEditionWidget(QWidget *parent, const mpLayout = new QVBoxLayout(this); mpPageNumberLabel = new QLabel(this); mpPageNumberLabel->setAlignment(Qt::AlignRight); - mpPageNumberLabel->setObjectName("UBTGEditionPageNumberLabel"); + mpPageNumberLabel->setObjectName("UBTGPageNumberLabel"); mpLayout->addWidget(mpPageNumberLabel); // tree basic configuration mpDocumentTitle = new QLabel(this); @@ -195,7 +195,7 @@ QVector UBTeacherGuideEditionWidget::getData() children << getChildrenList(mpAddALinkItem); result << getPageAndCommentData(); foreach(QTreeWidgetItem* widgetItem, children){ - tUBGEElementNode* node = dynamic_cast(mpTreeWidget->itemWidget(widgetItem,0))->saveData(); + tUBGEElementNode* node = dynamic_cast(mpTreeWidget->itemWidget(widgetItem,0))->saveData(); if(node) result << node; } @@ -205,7 +205,7 @@ QVector UBTeacherGuideEditionWidget::getData() void UBTeacherGuideEditionWidget::onAddItemClicked(QTreeWidgetItem* widget, int column) { int addSubItemWidgetType = widget->data(column,Qt::UserRole).toInt(); - if(column == 0 && addSubItemWidgetType != eUBTGAddSubItemWidgetType_None){ + if(addSubItemWidgetType != eUBTGAddSubItemWidgetType_None){ QTreeWidgetItem* newWidgetItem = new QTreeWidgetItem(widget); newWidgetItem->setData(column,Qt::UserRole,eUBTGAddSubItemWidgetType_None); newWidgetItem->setData(1,Qt::UserRole,eUBTGAddSubItemWidgetType_None); @@ -279,7 +279,7 @@ UBTeacherGuidePresentationWidget::UBTeacherGuidePresentationWidget(QWidget *pare mpPageNumberLabel = new QLabel(this); mpPageNumberLabel->setAlignment(Qt::AlignRight); - mpPageNumberLabel->setObjectName("UBTGPresentationPageNumberLabel"); + mpPageNumberLabel->setObjectName("UBTGPageNumberLabel"); mpLayout->addWidget(mpPageNumberLabel); @@ -317,10 +317,11 @@ UBTeacherGuidePresentationWidget::UBTeacherGuidePresentationWidget(QWidget *pare mpSeparator->setObjectName("UBTGSepartor"); mpLayout->addWidget(mpSeparator); - mpTreeWidget = new QTreeWidget(this); + mpTreeWidget = new UBTGDraggableTreeItem(this); mpLayout->addWidget(mpTreeWidget); mpRootWidgetItem = mpTreeWidget->invisibleRootItem(); + mpTreeWidget->setDragEnabled(true); mpTreeWidget->setRootIsDecorated(false); mpTreeWidget->setIndentation(0); mpTreeWidget->setDropIndicatorShown(false); @@ -392,6 +393,7 @@ void UBTeacherGuidePresentationWidget::showData(QVector data) else if(element->type == "action"){ QTreeWidgetItem* newWidgetItem = new QTreeWidgetItem(mpRootWidgetItem); newWidgetItem->setText(0,element->attributes.value("task")); + newWidgetItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); QString colorString = element->attributes.value("owner").toInt() == 0 ? "red":"green"; UBTGAdaptableText* textWidget = new UBTGAdaptableText(newWidgetItem,0); textWidget->bottomMargin(14); @@ -409,6 +411,8 @@ void UBTeacherGuidePresentationWidget::showData(QVector data) 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))); + newWidgetItem->setData(0, TG_USER_ROLE_MIME_TYPE, element->attributes.value("relativePath")); + newWidgetItem->setFlags(Qt::ItemIsDragEnabled | Qt::ItemIsEnabled | Qt::ItemIsSelectable); mpRootWidgetItem->addChild(newWidgetItem); QTreeWidgetItem* mediaItem = new QTreeWidgetItem(newWidgetItem); @@ -425,6 +429,7 @@ void UBTeacherGuidePresentationWidget::showData(QVector data) 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))); + newWidgetItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); mpRootWidgetItem->addChild(newWidgetItem); } } @@ -498,7 +503,7 @@ UBTeacherGuidePageZeroWidget::UBTeacherGuidePageZeroWidget(QWidget* parent, cons mpLayout = new QVBoxLayout(this); mpPageNumberLabel = new QLabel(this); mpPageNumberLabel->setAlignment(Qt::AlignRight); - mpPageNumberLabel->setObjectName("UBTGPresentationPageNumberLabel"); + mpPageNumberLabel->setObjectName("UBTGPageNumberLabel"); mpPageNumberLabel->setText(tr("Page 0")); mpLayout->addWidget(mpPageNumberLabel); @@ -510,9 +515,9 @@ UBTeacherGuidePageZeroWidget::UBTeacherGuidePageZeroWidget(QWidget* parent, cons mpButtonTitleLayout->addWidget(mpModePushButton); connect(mpModePushButton,SIGNAL(clicked()),this,SLOT(switchToMode())); - mpSessionTitle = new UBTGAdaptableText(0,this); + mpSessionTitle = new UBTGAdaptableText(0,this,"UBTGSessionTitle"); mpSessionTitle->setPlaceHolderText(tr("Type session title here ...")); - mpSessionTitle->setObjectName("UBTGEditionModeSessionTitle"); + //mpSessionTitle->setObjectName("UBTGSessionTitle"); mpButtonTitleLayout->addWidget(mpSessionTitle); mpLayout->addLayout(mpButtonTitleLayout); diff --git a/src/gui/UBTeacherGuideWidget.h b/src/gui/UBTeacherGuideWidget.h index 2e98b429..2bdf52c4 100644 --- a/src/gui/UBTeacherGuideWidget.h +++ b/src/gui/UBTeacherGuideWidget.h @@ -96,7 +96,7 @@ private: QLabel* mpPageNumberLabel; QFrame* mpSeparator; QPushButton* mpModePushButton; - QTreeWidget* mpTreeWidget; + UBTGDraggableTreeItem* mpTreeWidget; QTreeWidgetItem* mpRootWidgetItem; QTreeWidgetItem* mpMediaSwitchItem; diff --git a/src/gui/UBTeacherGuideWidgetsTools.cpp b/src/gui/UBTeacherGuideWidgetsTools.cpp index 2f2dbba0..0e0fad07 100644 --- a/src/gui/UBTeacherGuideWidgetsTools.cpp +++ b/src/gui/UBTeacherGuideWidgetsTools.cpp @@ -103,15 +103,18 @@ tUBGEElementNode* UBTGActionWidget::saveData() UBTGAdaptableText::UBTGAdaptableText(QTreeWidgetItem* widget, QWidget* parent, const char* name):QTextEdit(parent) , mBottomMargin(5) , mpTreeWidgetItem(widget) - , mMinimumHeight(20) + , mMinimumHeight(0) , mHasPlaceHolder(false) , mIsUpdatingSize(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); + + mMinimumHeight = document()->size().height() + mBottomMargin; + setMinimumHeight(mMinimumHeight); + } void UBTGAdaptableText::setPlaceHolderText(QString text) @@ -170,7 +173,6 @@ QString UBTGAdaptableText::text() void UBTGAdaptableText::onTextChanged() { qreal documentSize = document()->size().height(); - if(height() == documentSize + mBottomMargin) return; mIsUpdatingSize = true; @@ -478,7 +480,7 @@ void UBTGMediaWidget::updateSize() } /*************************************************************************** - * class UBTGUrlWdiget * + * class UBTGUrlWidget * ***************************************************************************/ UBTGUrlWidget::UBTGUrlWidget(QWidget* parent, const char* name ):QWidget(parent) , mpLayout(NULL) @@ -513,3 +515,21 @@ tUBGEElementNode* UBTGUrlWidget::saveData() result->attributes.insert("url",mpUrl->text()); return result; } + + +/*************************************************************************** + * class UBTGDraggableTreeItem * + ***************************************************************************/ +UBTGDraggableTreeItem::UBTGDraggableTreeItem(QWidget* parent, const char* name) : QTreeWidget(parent) +{ + setObjectName(name); +} + +QMimeData* UBTGDraggableTreeItem::mimeData(const QList items) const +{ + QMimeData* result = new QMimeData(); + QList urls; + urls << QUrl(items.at(0)->data(0,TG_USER_ROLE_MIME_TYPE).toString()); + result->setUrls(urls); + return result; +} diff --git a/src/gui/UBTeacherGuideWidgetsTools.h b/src/gui/UBTeacherGuideWidgetsTools.h index c73d15ff..8379c46c 100644 --- a/src/gui/UBTeacherGuideWidgetsTools.h +++ b/src/gui/UBTeacherGuideWidgetsTools.h @@ -29,6 +29,9 @@ #include "customWidgets/UBMediaWidget.h" +#define TG_USER_ROLE_MIME_TYPE (Qt::UserRole+50) + + class QTreeWidget; class QVBoxLayout; class QComboBox; @@ -44,7 +47,7 @@ typedef struct }tUBGEElementNode; -class iUBTGSavableData +class iUBTGSaveData { public: virtual tUBGEElementNode* saveData() = 0; @@ -62,7 +65,7 @@ signals: public slots: }; -class UBTGActionWidget : public QWidget, public iUBTGSavableData +class UBTGActionWidget : public QWidget, public iUBTGSaveData { Q_OBJECT @@ -127,7 +130,7 @@ private: bool mDragStarted; }; -class UBTGMediaWidget : public QStackedWidget , public iUBTGSavableData +class UBTGMediaWidget : public QStackedWidget , public iUBTGSaveData { Q_OBJECT public: @@ -162,7 +165,7 @@ private: }; -class UBTGUrlWidget : public QWidget , public iUBTGSavableData +class UBTGUrlWidget : public QWidget , public iUBTGSaveData { Q_OBJECT public: @@ -175,5 +178,14 @@ private: QLineEdit* mpUrl; }; +class UBTGDraggableTreeItem : public QTreeWidget +{ + Q_OBJECT +public: + UBTGDraggableTreeItem(QWidget* parent = 0, const char* name = "UBTGDraggableTreeItem"); + +private: + QMimeData* mimeData(const QList items) const; +}; #endif // UBTEACHERGUIDEWIDGETSTOOLS_H