summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2012-11-06 20:32:22 (GMT)
committerKevin Smith <git@kismith.co.uk>2012-12-23 11:46:06 (GMT)
commit90e22d09c0e7131744c9e343622013547319daf7 (patch)
treedecacff80e04696d9b28e24453025c894fa3a66d /Swift/QtUI
parent0c2cd2338ef77441e5b6b2a4cf1f5d6591c5f480 (diff)
downloadswift-90e22d09c0e7131744c9e343622013547319daf7.zip
swift-90e22d09c0e7131744c9e343622013547319daf7.tar.bz2
Avoid any duplicates in the status menu
Change-Id: I43ced9659bf16bce637f5f16f0987b2289d372a1
Diffstat (limited to 'Swift/QtUI')
-rw-r--r--Swift/QtUI/QtStatusWidget.cpp28
-rw-r--r--Swift/QtUI/QtStatusWidget.h1
2 files changed, 21 insertions, 8 deletions
diff --git a/Swift/QtUI/QtStatusWidget.cpp b/Swift/QtUI/QtStatusWidget.cpp
index fc1e764..7c1c831 100644
--- a/Swift/QtUI/QtStatusWidget.cpp
+++ b/Swift/QtUI/QtStatusWidget.cpp
@@ -19,24 +19,31 @@
#include <QListWidgetItem>
#include <QMovie>
#include "Swift/QtUI/QtElidingLabel.h"
#include "Swift/QtUI/QtLineEdit.h"
#include "Swift/QtUI/QtSwiftUtil.h"
#include <Swift/Controllers/StatusUtil.h>
#include <Swift/Controllers/StatusCache.h>
namespace Swift {
QtStatusWidget::QtStatusWidget(StatusCache* statusCache, QWidget *parent) : QWidget(parent), statusCache_(statusCache), editCursor_(Qt::IBeamCursor), viewCursor_(Qt::PointingHandCursor) {
+ allTypes_.push_back(StatusShow::Online);
+ allTypes_.push_back(StatusShow::FFC);
+ allTypes_.push_back(StatusShow::Away);
+ allTypes_.push_back(StatusShow::XA);
+ allTypes_.push_back(StatusShow::DND);
+ allTypes_.push_back(StatusShow::None);
+
isClicking_ = false;
connecting_ = false;
setMaximumHeight(24);
connectingMovie_ = new QMovie(":/icons/connecting.mng");
QHBoxLayout* mainLayout = new QHBoxLayout(this);
mainLayout->setSpacing(0);
mainLayout->setContentsMargins(0,0,0,0);
stack_ = new QStackedWidget(this);
stack_->setLineWidth(2);
@@ -128,31 +135,43 @@ void QtStatusWidget::generateList() {
QString text = statusEdit_->text();
newStatusText_ = text;
menu_->clear();
foreach (StatusShow::Type type, icons_.keys()) {
QListWidgetItem* item = new QListWidgetItem(text == "" ? getNoMessage() : text, menu_);
item->setIcon(icons_[type]);
item->setToolTip(P2QSTRING(statusShowTypeToFriendlyName(type)) + ": " + item->text());
item->setStatusTip(item->toolTip());
item->setData(Qt::UserRole, QVariant(type));
}
std::vector<StatusCache::PreviousStatus> previousStatuses = statusCache_->getMatches(Q2PSTRING(text), 8);
foreach (StatusCache::PreviousStatus savedStatus, previousStatuses) {
+ bool breakEarly = false;
+ foreach (StatusShow::Type type, allTypes_) {
+ if (savedStatus.first.empty() || (savedStatus.second == type && savedStatus.first == statusShowTypeToFriendlyName(type))) {
+ breakEarly = true;
+ }
+ }
+ if (breakEarly) {
+ continue;
+ }
QListWidgetItem* item = new QListWidgetItem(P2QSTRING(savedStatus.first), menu_);
item->setIcon(icons_[savedStatus.second]);
item->setToolTip(item->text());
item->setStatusTip(item->toolTip());
item->setData(Qt::UserRole, QVariant(savedStatus.second));
}
foreach (StatusShow::Type type, icons_.keys()) {
+ if (Q2PSTRING(text) == statusShowTypeToFriendlyName(type)) {
+ continue;
+ }
QListWidgetItem* item = new QListWidgetItem(P2QSTRING(statusShowTypeToFriendlyName(type)), menu_);
item->setIcon(icons_[type]);
item->setToolTip(item->text());
item->setStatusTip(item->toolTip());
item->setData(Qt::UserRole, QVariant(type));
}
resizeMenu();
}
void QtStatusWidget::resizeMenu() {
int height = menu_->sizeHintForRow(0) * menu_->count();
int marginLeft;
@@ -171,32 +190,25 @@ void QtStatusWidget::handleClicked() {
int screen = desktop->screenNumber(this);
QPoint point = mapToGlobal(QPoint(0, height()));
QRect geometry = desktop->availableGeometry(screen);
int x = point.x();
int y = point.y();
int width = 200;
int height = 80;
int screenWidth = geometry.x() + geometry.width();
if (x + width > screenWidth) {
x = screenWidth - width;
}
- std::vector<StatusShow::Type> types;
- types.push_back(StatusShow::Online);
- types.push_back(StatusShow::FFC);
- types.push_back(StatusShow::Away);
- types.push_back(StatusShow::XA);
- types.push_back(StatusShow::DND);
- types.push_back(StatusShow::None);
- foreach (StatusShow::Type type, types) {
+ foreach (StatusShow::Type type, allTypes_) {
if (statusEdit_->text() == P2QSTRING(statusShowTypeToFriendlyName(type))) {
statusEdit_->setText("");
}
}
generateList();
height = menu_->sizeHintForRow(0) * menu_->count();
int marginLeft;
int marginTop;
int marginRight;
int marginBottom;
menu_->getContentsMargins(&marginLeft, &marginTop, &marginRight, &marginBottom);
diff --git a/Swift/QtUI/QtStatusWidget.h b/Swift/QtUI/QtStatusWidget.h
index 57f52c6..87e8d4a 100644
--- a/Swift/QtUI/QtStatusWidget.h
+++ b/Swift/QtUI/QtStatusWidget.h
@@ -59,15 +59,16 @@ namespace Swift {
QString statusText_;
QString newStatusText_;
QMap<StatusShow::Type, QIcon> icons_;
StatusShow::Type selectedStatusType_;
bool isClicking_;
QListWidget* menu_;
QCursor editCursor_;
QCursor viewCursor_;
bool editing_;
QMovie* connectingMovie_;
bool connecting_;
static const QString NO_MESSAGE;
+ std::vector<StatusShow::Type> allTypes_;
};
}