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);
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()
@ -36,35 +40,56 @@ void UBActionableWidget::removeAllActions()
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)
{
qDebug() << "Should close: " << p.x() << "," << p.y();
bool close = false;
if(mShowActions &&
p.x() >= 0 &&
p.x() <= ACTIONSIZE &&
p.y() >= 0 &&
p.y() <= ACTIONSIZE){
close = true;
}
// if(mShowActions &&
// p.x() >= 0 &&
// p.x() <= ACTIONSIZE &&
// p.y() >= 0 &&
// p.y() <= ACTIONSIZE){
// close = true;
// }
return close;
}
void UBActionableWidget::paintEvent(QPaintEvent* ev)
{
if(mShowActions){
QPainter p(this);
if(mActions.contains(eAction_Close)){
p.drawPixmap(0, 0, 16, 16, QPixmap(":images/close.svg"));
}else if(mActions.contains(eAction_MoveUp)){
// Implement me later
}else if(mActions.contains(eAction_MoveDown)){
// Implement me later
}
// if(mShowActions){
// QPainter p(this);
// if(mActions.contains(eAction_Close)){
// p.drawPixmap(0, 0, 16, 16, QPixmap(":images/close.svg"));
// }else if(mActions.contains(eAction_MoveUp)){
// // Implement me later
// }else if(mActions.contains(eAction_MoveDown)){
// // 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 <QPaintEvent>
#include <QToolButton>
#include <QPushButton>
#define ACTIONSIZE 16
@ -24,12 +26,22 @@ public:
void setActionsVisible(bool bVisible);
bool shouldClose(QPoint p);
signals:
void close(QWidget* w);
protected:
void setActionsParent(QWidget* parent);
void unsetActionsParent();
void paintEvent(QPaintEvent* ev);
QVector<eAction> mActions;
QPushButton mCloseButtons;
private slots:
void onCloseClicked();
private:
bool mShowActions;
};
#endif // UBACTIONABLEWIDGET_H

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

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

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

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

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

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

Loading…
Cancel
Save