Fixed an issue with the delete widgets in the teacher bar and reworked this part

preferencesAboutTextFull
shibakaneki 13 years ago
parent e9936c453d
commit ffeccc4bef
  1. 61
      src/customWidgets/UBActionableWidget.cpp
  2. 12
      src/customWidgets/UBActionableWidget.h
  3. 2
      src/customWidgets/UBDraggableMedia.cpp
  4. 2
      src/customWidgets/UBMediaWidget.cpp
  5. 4
      src/customWidgets/UBMediaWidget.h
  6. 25
      src/customWidgets/UBWidgetList.cpp
  7. 34
      src/gui/UBTBPageEditWidget.cpp
  8. 4
      src/gui/UBTBPageEditWidget.h

@ -8,6 +8,10 @@ UBActionableWidget::UBActionableWidget(QWidget *parent, const char *name):QWidge
{ {
setObjectName(name); setObjectName(name);
mActions.clear(); mActions.clear();
mCloseButtons.setIcon(QIcon(QPixmap(":images/close.svg")));
mCloseButtons.setGeometry(0, 0, 2*ACTIONSIZE, ACTIONSIZE);
mCloseButtons.setVisible(false);
connect(&mCloseButtons, SIGNAL(clicked()), this, SLOT(onCloseClicked()));
} }
UBActionableWidget::~UBActionableWidget() UBActionableWidget::~UBActionableWidget()
@ -36,35 +40,56 @@ void UBActionableWidget::removeAllActions()
void UBActionableWidget::setActionsVisible(bool bVisible) void UBActionableWidget::setActionsVisible(bool bVisible)
{ {
mShowActions = bVisible; //mShowActions = bVisible;
if(!mActions.empty() && mActions.contains(eAction_Close)){
mCloseButtons.setVisible(bVisible);
}
}
void UBActionableWidget::onCloseClicked()
{
emit close(this);
} }
bool UBActionableWidget::shouldClose(QPoint p) bool UBActionableWidget::shouldClose(QPoint p)
{ {
qDebug() << "Should close: " << p.x() << "," << p.y();
bool close = false; bool close = false;
if(mShowActions && // if(mShowActions &&
p.x() >= 0 && // p.x() >= 0 &&
p.x() <= ACTIONSIZE && // p.x() <= ACTIONSIZE &&
p.y() >= 0 && // p.y() >= 0 &&
p.y() <= ACTIONSIZE){ // p.y() <= ACTIONSIZE){
close = true; // close = true;
} // }
return close; return close;
} }
void UBActionableWidget::paintEvent(QPaintEvent* ev) void UBActionableWidget::paintEvent(QPaintEvent* ev)
{ {
if(mShowActions){ // if(mShowActions){
QPainter p(this); // QPainter p(this);
if(mActions.contains(eAction_Close)){ // if(mActions.contains(eAction_Close)){
p.drawPixmap(0, 0, 16, 16, QPixmap(":images/close.svg")); // p.drawPixmap(0, 0, 16, 16, QPixmap(":images/close.svg"));
}else if(mActions.contains(eAction_MoveUp)){ // }else if(mActions.contains(eAction_MoveUp)){
// Implement me later // // Implement me later
}else if(mActions.contains(eAction_MoveDown)){ // }else if(mActions.contains(eAction_MoveDown)){
// Implement me later // // Implement me later
} // }
// }
}
void UBActionableWidget::setActionsParent(QWidget *parent)
{
if(mActions.contains(eAction_Close)){
mCloseButtons.setParent(parent);
}
}
void UBActionableWidget::unsetActionsParent()
{
if(mActions.contains(eAction_Close)){
mCloseButtons.setParent(this);
} }
} }

@ -3,6 +3,8 @@
#include <QWidget> #include <QWidget>
#include <QPaintEvent> #include <QPaintEvent>
#include <QToolButton>
#include <QPushButton>
#define ACTIONSIZE 16 #define ACTIONSIZE 16
@ -24,12 +26,22 @@ public:
void setActionsVisible(bool bVisible); void setActionsVisible(bool bVisible);
bool shouldClose(QPoint p); bool shouldClose(QPoint p);
signals:
void close(QWidget* w);
protected: protected:
void setActionsParent(QWidget* parent);
void unsetActionsParent();
void paintEvent(QPaintEvent* ev); void paintEvent(QPaintEvent* ev);
QVector<eAction> mActions; QVector<eAction> mActions;
QPushButton mCloseButtons;
private slots:
void onCloseClicked();
private: private:
bool mShowActions; bool mShowActions;
}; };
#endif // UBACTIONABLEWIDGET_H #endif // UBACTIONABLEWIDGET_H

@ -5,7 +5,7 @@
UBDraggableMedia::UBDraggableMedia(eMediaType type, QWidget *parent, const char *name):UBMediaWidget(type, parent, name) UBDraggableMedia::UBDraggableMedia(eMediaType type, QWidget *parent, const char *name):UBMediaWidget(type, parent, name)
{ {
removeAllActions();
} }
UBDraggableMedia::~UBDraggableMedia() UBDraggableMedia::~UBDraggableMedia()

@ -67,6 +67,7 @@ UBMediaWidget::UBMediaWidget(eMediaType type, QWidget *parent, const char *name)
*/ */
UBMediaWidget::~UBMediaWidget() UBMediaWidget::~UBMediaWidget()
{ {
unsetActionsParent();
DELETEPTR(mpSlider); DELETEPTR(mpSlider);
DELETEPTR(mpPauseButton); DELETEPTR(mpPauseButton);
DELETEPTR(mpPlayStopButton); DELETEPTR(mpPlayStopButton);
@ -152,6 +153,7 @@ void UBMediaWidget::createMediaPlayer()
} }
mLayout.addWidget(mpMediaContainer, 1); mLayout.addWidget(mpMediaContainer, 1);
mLayout.addLayout(&mSeekerLayout, 0); mLayout.addLayout(&mSeekerLayout, 0);
setActionsParent(mpMediaContainer);
} }
/** /**

@ -69,6 +69,8 @@ public:
eMediaType mediaType(); eMediaType mediaType();
int border(); int border();
void setAudioCover(const QString& coverPath); void setAudioCover(const QString& coverPath);
void setUrl(const QString& url){mUrl = url;}
QString url(){return mUrl;}
protected: protected:
void resizeEvent(QResizeEvent* ev); void resizeEvent(QResizeEvent* ev);
@ -118,6 +120,8 @@ private:
QHBoxLayout mMediaLayout; QHBoxLayout mMediaLayout;
/** The audio cover */ /** The audio cover */
QLabel* mpCover; QLabel* mpCover;
/** The media url */
QString mUrl;
}; };
#endif // UBMEDIAWIDGET_H #endif // UBMEDIAWIDGET_H

@ -9,7 +9,7 @@
UBWidgetList::UBWidgetList(QWidget* parent, eWidgetListOrientation orientation, const char* name):QScrollArea(parent) UBWidgetList::UBWidgetList(QWidget* parent, eWidgetListOrientation orientation, const char* name):QScrollArea(parent)
, mpLayout(NULL) , mpLayout(NULL)
, mpContainer(NULL) , mpContainer(NULL)
, mMargin(5) , mMargin(10)
, mListElementsSpacing(10) , mListElementsSpacing(10)
, mpEmptyLabel(NULL) , mpEmptyLabel(NULL)
, mCanRemove(true) , mCanRemove(true)
@ -69,6 +69,9 @@ void UBWidgetList::removeWidget(QWidget *widget)
if(0 == mpLayout->count()){ if(0 == mpLayout->count()){
mpEmptyLabel->setVisible(true); mpEmptyLabel->setVisible(true);
} }
if(mpCurrentWidget == widget){
mpCurrentWidget = NULL;
}
} }
} }
@ -140,13 +143,19 @@ void UBWidgetList::mousePressEvent(QMouseEvent *ev)
QWidget* pWAt = widgetAt(ev->pos()); QWidget* pWAt = widgetAt(ev->pos());
if(NULL != mpCurrentWidget){ if(NULL != mpCurrentWidget){
if(pWAt == mpCurrentWidget){ if(pWAt == mpCurrentWidget){
QPoint p;
p.setX(ev->x()); // qDebug() << ev->x() << "," << ev->y();
p.setY(ev->y()); // qDebug() << "mpCurrentWidget->pos() = " << mpCurrentWidget->pos().x() << "," << mpCurrentWidget->pos().y();
if(mpCurrentWidget->shouldClose(p)){ // qDebug() << "viewport position: " << visibleRegion().boundingRect().x() << "," << visibleRegion().boundingRect().y();
emit closeWidget(mpCurrentWidget);
return; // QPoint p;
} // p.setX(ev->x() - mpCurrentWidget->pos().x());
// p.setY(ev->y() - mpCurrentWidget->pos().y());
// if(mpCurrentWidget->shouldClose(p)){
// emit closeWidget(mpCurrentWidget);
// return;
// }
}else{ }else{
mpCurrentWidget->setActionsVisible(false); mpCurrentWidget->setActionsVisible(false);

@ -142,6 +142,7 @@ void UBTBPageEditWidget::onActionButton()
UBTeacherStudentAction* pAction = new UBTeacherStudentAction(this); UBTeacherStudentAction* pAction = new UBTeacherStudentAction(this);
mActions << pAction; mActions << pAction;
mpActions->addWidget(pAction); mpActions->addWidget(pAction);
connectActions(pAction);
emit valueChanged(); emit valueChanged();
} }
@ -150,6 +151,7 @@ void UBTBPageEditWidget::onLinkButton()
UBUrlWidget* pUrl = new UBUrlWidget(this); UBUrlWidget* pUrl = new UBUrlWidget(this);
mUrls << pUrl; mUrls << pUrl;
mpLinks->addWidget(pUrl); mpLinks->addWidget(pUrl);
connectActions(pUrl);
emit valueChanged(); emit valueChanged();
} }
@ -163,11 +165,20 @@ void UBTBPageEditWidget::onMediaDropped(const QString &url)
//mpDataMgr->medias()->append(pMedia); //mpDataMgr->medias()->append(pMedia);
//mpDataMgr->addMediaUrl(url); //mpDataMgr->addMediaUrl(url);
mpMediaContainer->addWidget(pMedia); mpMediaContainer->addWidget(pMedia);
connectActions(pMedia);
emit valueChanged(); emit valueChanged();
} }
} }
} }
void UBTBPageEditWidget::connectActions(QWidget* w)
{
UBActionableWidget* pActionable = dynamic_cast<UBActionableWidget*>(w);
if(NULL != pActionable){
connect(pActionable, SIGNAL(close(QWidget*)), this, SLOT(onCloseWidget(QWidget*)));
}
}
void UBTBPageEditWidget::onDocumentEditClicked() void UBTBPageEditWidget::onDocumentEditClicked()
{ {
emit changeTBState(eTeacherBarState_DocumentEdit); emit changeTBState(eTeacherBarState_DocumentEdit);
@ -217,6 +228,7 @@ void UBTBPageEditWidget::updateFields()
pAction->setText(action.content); pAction->setText(action.content);
mActions << pAction; mActions << pAction;
mpActions->addWidget(pAction); mpActions->addWidget(pAction);
connectActions(pAction);
} }
// Medias // Medias
foreach(QString url, *mpDataMgr->mediaUrls()){ foreach(QString url, *mpDataMgr->mediaUrls()){
@ -226,6 +238,7 @@ void UBTBPageEditWidget::updateFields()
if(pWidget != NULL){ if(pWidget != NULL){
mMedias << pWidget; mMedias << pWidget;
mpMediaContainer->addWidget(pWidget); mpMediaContainer->addWidget(pWidget);
connectActions(pWidget);
} }
} }
} }
@ -237,6 +250,7 @@ void UBTBPageEditWidget::updateFields()
urlWidget->setUrl(link.link); urlWidget->setUrl(link.link);
mUrls << urlWidget; mUrls << urlWidget;
mpLinks->addWidget(urlWidget); mpLinks->addWidget(urlWidget);
connectActions(urlWidget);
} }
// Comments // Comments
mpComments->document()->setPlainText(mpDataMgr->comments()); mpComments->document()->setPlainText(mpDataMgr->comments());
@ -287,7 +301,15 @@ void UBTBPageEditWidget::onCloseWidget(QWidget *w)
mpLinks->removeWidget(pW); mpLinks->removeWidget(pW);
mUrls.remove(mUrls.indexOf(pW)); mUrls.remove(mUrls.indexOf(pW));
DELETEPTR(w); DELETEPTR(w);
}else if("UBTBMediaPicture" == w->objectName() || "UBMediaWidget" == w->objectName()){ }else if("UBTBMediaPicture" == w->objectName()){
UBPictureWidget* pW = dynamic_cast<UBPictureWidget*>(w);
mMediaUrls.removeOne(pW->url());
mpMediaContainer->removeWidget(w);
mMedias.remove(mMedias.indexOf(w));
DELETEPTR(w);
}else if("UBMediaWidget" == w->objectName()){
UBMediaWidget* pW = dynamic_cast<UBMediaWidget*>(w);
mMediaUrls.removeOne(pW->url());
mpMediaContainer->removeWidget(w); mpMediaContainer->removeWidget(w);
mMedias.remove(mMedias.indexOf(w)); mMedias.remove(mMedias.indexOf(w));
DELETEPTR(w); DELETEPTR(w);
@ -326,10 +348,12 @@ UBUrlWidget::UBUrlWidget(QWidget *parent, const char *name):UBActionableWidget(p
mpLayout->addLayout(mpTitleLayout); mpLayout->addLayout(mpTitleLayout);
mpLayout->addLayout(mpLabelLayout); mpLayout->addLayout(mpLabelLayout);
setActionsParent(this);
} }
UBUrlWidget::~UBUrlWidget() UBUrlWidget::~UBUrlWidget()
{ {
unsetActionsParent();
DELETEPTR(mpTitle); DELETEPTR(mpTitle);
DELETEPTR(mpTitleLabel); DELETEPTR(mpTitleLabel);
DELETEPTR(mpUrlLabel); DELETEPTR(mpUrlLabel);
@ -460,6 +484,7 @@ QWidget* UBTBMediaContainer::generateMediaWidget(const QString& url)
if(mimeType.contains("image")){ if(mimeType.contains("image")){
QPixmap pix = QPixmap(url); QPixmap pix = QPixmap(url);
UBPictureWidget* pic = new UBPictureWidget(); UBPictureWidget* pic = new UBPictureWidget();
pic->setUrl(url);
pix.scaledToWidth(pic->label()->width()); pix.scaledToWidth(pic->label()->width());
pic->label()->resize(pix.width(), pix.height()); pic->label()->resize(pix.width(), pix.height());
pic->label()->setPixmap(pix); pic->label()->setPixmap(pix);
@ -470,6 +495,7 @@ QWidget* UBTBMediaContainer::generateMediaWidget(const QString& url)
else if(mimeType.contains("video") || mimeType.contains("audio")){ else if(mimeType.contains("video") || mimeType.contains("audio")){
UBMediaWidget* mediaPlayer = new UBMediaWidget(mimeType.contains("audio")?eMediaType_Audio:eMediaType_Video); UBMediaWidget* mediaPlayer = new UBMediaWidget(mimeType.contains("audio")?eMediaType_Audio:eMediaType_Video);
mediaPlayer->setFile(url); mediaPlayer->setFile(url);
mediaPlayer->setUrl(url);
pW = mediaPlayer; pW = mediaPlayer;
} }
else{ else{
@ -511,11 +537,12 @@ UBTeacherStudentAction::UBTeacherStudentAction(QWidget *parent, const char *name
mpText->setStyleSheet("background:white;"); mpText->setStyleSheet("background:white;");
mpLayout->addWidget(mpText, 1); mpLayout->addWidget(mpText, 1);
setActionsParent(this);
} }
UBTeacherStudentAction::~UBTeacherStudentAction() UBTeacherStudentAction::~UBTeacherStudentAction()
{ {
unsetActionsParent();
DELETEPTR(mpCombo); DELETEPTR(mpCombo);
DELETEPTR(mpText); DELETEPTR(mpText);
DELETEPTR(mpComboLayout); DELETEPTR(mpComboLayout);
@ -568,15 +595,18 @@ UBPictureWidget::UBPictureWidget(QWidget *parent, const char *name):UBActionable
mpLabel = new QLabel(this); mpLabel = new QLabel(this);
mpLayout->addWidget(mpLabel); mpLayout->addWidget(mpLabel);
mpLabel->setGeometry( 10, 10, width()-2*10, height()); mpLabel->setGeometry( 10, 10, width()-2*10, height());
setActionsParent(mpLabel);
} }
UBPictureWidget::~UBPictureWidget() UBPictureWidget::~UBPictureWidget()
{ {
unsetActionsParent();
DELETEPTR(mpLabel); DELETEPTR(mpLabel);
DELETEPTR(mpLayout); DELETEPTR(mpLayout);
} }
void UBPictureWidget::resizeEvent(QResizeEvent *ev) void UBPictureWidget::resizeEvent(QResizeEvent *ev)
{ {
Q_UNUSED(ev);
mpLabel->setGeometry( 10, 10, width()-2*10, height()); mpLabel->setGeometry( 10, 10, width()-2*10, height());
} }

@ -64,6 +64,8 @@ public:
~UBPictureWidget(); ~UBPictureWidget();
QLabel* label(){return mpLabel;} QLabel* label(){return mpLabel;}
void setUrl(const QString& url){mUrl = url;}
QString url(){return mUrl;}
protected: protected:
void resizeEvent(QResizeEvent* ev); void resizeEvent(QResizeEvent* ev);
@ -71,6 +73,7 @@ protected:
private: private:
QVBoxLayout* mpLayout; QVBoxLayout* mpLayout;
QLabel* mpLabel; QLabel* mpLabel;
QString mUrl;
}; };
class UBTBMediaContainer : public UBWidgetList class UBTBMediaContainer : public UBWidgetList
@ -124,6 +127,7 @@ private slots:
void onCloseWidget(QWidget* w); void onCloseWidget(QWidget* w);
private: private:
void connectActions(QWidget* w);
QVBoxLayout mLayout; QVBoxLayout mLayout;
QHBoxLayout mTitleLayout; QHBoxLayout mTitleLayout;
QVBoxLayout mContainerLayout; QVBoxLayout mContainerLayout;

Loading…
Cancel
Save