diff options
author | Kevin Smith <git@kismith.co.uk> | 2009-08-16 13:13:20 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2009-08-16 13:13:20 (GMT) |
commit | 6d64d22bdc18a8b4d3ef1ae7087f657de6c9abd9 (patch) | |
tree | 5994c7ee6b89bb6a1d24d849cb21ee3fe2f48191 | |
parent | 2ef0428c1f9559454654546f3cce32155cf5409d (diff) | |
download | swift-6d64d22bdc18a8b4d3ef1ae7087f657de6c9abd9.zip swift-6d64d22bdc18a8b4d3ef1ae7087f657de6c9abd9.tar.bz2 |
MeView collapsing.
Qt's peculiarities with which mouse events get passed where are evident here: clicking the toolbar collapses/expands, while if you're clicking the label, it has to be a doubleclick to collapse or expand.
-rw-r--r-- | Swift/QtUI/QtRosterHeader.cpp | 43 | ||||
-rw-r--r-- | Swift/QtUI/QtRosterHeader.h | 6 |
2 files changed, 42 insertions, 7 deletions
diff --git a/Swift/QtUI/QtRosterHeader.cpp b/Swift/QtUI/QtRosterHeader.cpp index 86e64ca..9b5410b 100644 --- a/Swift/QtUI/QtRosterHeader.cpp +++ b/Swift/QtUI/QtRosterHeader.cpp @@ -5,6 +5,7 @@ #include <QIcon> #include <QSizePolicy> #include <qdebug.h> +#include <QMouseEvent> #include "QtStatusWidget.h" @@ -20,7 +21,7 @@ QtRosterHeader::QtRosterHeader(QWidget* parent) : QWidget(parent) { statusWidget_ = new QtStatusWidget(this); toolBar_->addWidget(statusWidget_); - statusWidget_->resize(50, statusWidget_->height()); + statusWidget_->setMaximumWidth(60); connect(statusWidget_, SIGNAL(onChangeStatusRequest(StatusShow::Type)), this, SLOT(handleChangeStatusRequest(StatusShow::Type))); nameLabel_ = new QLabel(this); @@ -28,26 +29,54 @@ QtRosterHeader::QtRosterHeader(QWidget* parent) : QWidget(parent) { toolBar_->addWidget(nameLabel_); //nameLabel_->setMaximumWidth(width() - 5 - statusWidget_->width()); - QHBoxLayout* expandedLayout = new QHBoxLayout(); - expandedLayout->setContentsMargins(5,5,5,5); - expandedLayout->setSpacing(11); + expandedLayout_ = new QHBoxLayout(); + expandedLayout_->setContentsMargins(0,0,0,0); + expandedLayout_->setSpacing(0); avatarLabel_ = new QLabel(this); setAvatar(":/icons/avatar.png"); - expandedLayout->addWidget(avatarLabel_); + expandedLayout_->addWidget(avatarLabel_); statusEdit_ = new QTextEdit(this); - expandedLayout->addWidget(statusEdit_); + expandedLayout_->addWidget(statusEdit_); statusEdit_->resize(statusEdit_->width(), 64); statusEdit_->setAcceptRichText(false); statusEdit_->setReadOnly(false); setStatusText(""); - vLayout->addLayout(expandedLayout); + vLayout->addLayout(expandedLayout_); + expanded_ = false; + avatarLabel_->hide(); + statusEdit_->hide(); setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); } +void QtRosterHeader::mousePressEvent(QMouseEvent* event) { + if (nameLabel_->underMouse() || toolBar_->underMouse() && !statusWidget_->underMouse()) { + toggleExpanded(); + event->accept(); + } else { + event->ignore(); + } + +} + +void QtRosterHeader::toggleExpanded() { + expanded_ = !expanded_; + if (expanded_) { + expandedLayout_->setContentsMargins(5,5,5,5); + expandedLayout_->setSpacing(11); + avatarLabel_->show(); + statusEdit_->show(); + } else { + expandedLayout_->setContentsMargins(0,0,0,0); + expandedLayout_->setSpacing(0); + avatarLabel_->hide(); + statusEdit_->hide(); + } +} + void QtRosterHeader::handleChangeStatusRequest(StatusShow::Type type) { Q_UNUSED(type); emitStatus(); diff --git a/Swift/QtUI/QtRosterHeader.h b/Swift/QtUI/QtRosterHeader.h index ae510ee..66c9333 100644 --- a/Swift/QtUI/QtRosterHeader.h +++ b/Swift/QtUI/QtRosterHeader.h @@ -10,6 +10,8 @@ #include "Swiften/Base/String.h" #include "Swiften/Elements/StatusShow.h" +class QHBoxLayout; + namespace Swift { class QtStatusWidget; @@ -28,13 +30,17 @@ namespace Swift { void handleChangeStatusRequest(StatusShow::Type type); protected: virtual void resizeEvent(QResizeEvent* event); + virtual void mousePressEvent(QMouseEvent* event); private: void resizeNameLabel(); + void toggleExpanded(); QString name_; QLabel* avatarLabel_; QLabel* nameLabel_; QTextEdit* statusEdit_; QToolBar* toolBar_; QtStatusWidget* statusWidget_; + QHBoxLayout* expandedLayout_; + bool expanded_; }; } |