From 10534d5b942e7ef1e2f8e6900fb5b17411111b06 Mon Sep 17 00:00:00 2001
From: Kevin Smith <git@kismith.co.uk>
Date: Mon, 24 May 2010 16:49:03 +0100
Subject: Elide text in the roster header when it's wider than the roster.

Resolves: #369

diff --git a/Swift/QtUI/QtElidingLabel.cpp b/Swift/QtUI/QtElidingLabel.cpp
new file mode 100644
index 0000000..80da607
--- /dev/null
+++ b/Swift/QtUI/QtElidingLabel.cpp
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include "Swift/QtUI/QtElidingLabel.h"
+
+namespace Swift {
+QtElidingLabel::QtElidingLabel(QWidget* parent, Qt::WindowFlags f) : QLabel(parent, f) {
+	setSizes();
+}
+
+QtElidingLabel::QtElidingLabel(const QString& text, QWidget* parent, Qt::WindowFlags f) : QLabel(text, parent, f) {
+	setSizes();
+}
+
+QtElidingLabel::~QtElidingLabel() {
+
+}
+
+void QtElidingLabel::setSizes() {
+	setMinimumSize(1, minimumHeight());
+}
+
+void QtElidingLabel::paintEvent(QPaintEvent* event) {
+	//QPainter painter(this);
+	QString fullText(text());
+	if (fontMetrics().width(fullText) > contentsRect().width()) {
+		//QString elidedText(fontMetrics().elidedText(fullText));
+		setText(fontMetrics().elidedText(fullText, Qt::ElideRight, rect().width(), Qt::TextShowMnemonic));
+	}
+	QLabel::paintEvent(event);
+	setText(fullText);
+}
+
+}
diff --git a/Swift/QtUI/QtElidingLabel.h b/Swift/QtUI/QtElidingLabel.h
new file mode 100644
index 0000000..589d6f6
--- /dev/null
+++ b/Swift/QtUI/QtElidingLabel.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <QLabel>
+
+namespace Swift {
+	class QtElidingLabel : public QLabel {
+		Q_OBJECT
+	public:
+		QtElidingLabel(QWidget* parent = NULL, Qt::WindowFlags f = 0);
+		QtElidingLabel(const QString &text, QWidget* parent = NULL, Qt::WindowFlags f = 0);
+		virtual ~QtElidingLabel();
+		
+		virtual void paintEvent(QPaintEvent* event);
+	private:
+		void setSizes();
+	};
+}
diff --git a/Swift/QtUI/QtRosterHeader.cpp b/Swift/QtUI/QtRosterHeader.cpp
index 6efb80d..fc3d0e6 100644
--- a/Swift/QtUI/QtRosterHeader.cpp
+++ b/Swift/QtUI/QtRosterHeader.cpp
@@ -14,6 +14,7 @@
 #include <QMouseEvent>
 
 #include "QtStatusWidget.h"
+#include "Swift/QtUI/QtElidingLabel.h"
 
 namespace Swift {
 QtRosterHeader::QtRosterHeader(QWidget* parent) : QWidget(parent) {
@@ -36,7 +37,7 @@ QtRosterHeader::QtRosterHeader(QWidget* parent) : QWidget(parent) {
 	rightLayout->setContentsMargins(4,0,0,0);
 	topLayout->addLayout(rightLayout);
 
-	nameLabel_ = new QLabel(this);
+	nameLabel_ = new QtElidingLabel(this);
 	setName("Me");
 	rightLayout->addWidget(nameLabel_);
 
diff --git a/Swift/QtUI/QtStatusWidget.cpp b/Swift/QtUI/QtStatusWidget.cpp
index da8b883..28df59c 100644
--- a/Swift/QtUI/QtStatusWidget.cpp
+++ b/Swift/QtUI/QtStatusWidget.cpp
@@ -19,6 +19,8 @@
 #include <QListWidget>
 #include <QListWidgetItem>
 
+#include "Swift/QtUI/QtElidingLabel.h"
+
 namespace Swift {
 
 QtStatusWidget::QtStatusWidget(QWidget *parent) : QWidget(parent), editCursor_(Qt::IBeamCursor), viewCursor_(Qt::PointingHandCursor) {
@@ -46,7 +48,7 @@ QtStatusWidget::QtStatusWidget(QWidget *parent) : QWidget(parent), editCursor_(Q
 	statusIcon_->setMaximumSize(16, 16);
 	page1Layout->addWidget(statusIcon_);
 
-	statusTextLabel_ = new QLabel(this);
+	statusTextLabel_ = new QtElidingLabel(this);
 	page1Layout->addWidget(statusTextLabel_);
 
 	icons_[StatusShow::Online] = QIcon(":/icons/online.png");
@@ -103,7 +105,8 @@ void QtStatusWidget::handleClicked() {
 	int y = point.y();
 	int width = 200;
 	int height = 80;
-	int screenWidth = QApplication::desktop()->screenGeometry().width();
+	int desktop = QApplication::desktop()->screenNumber(this);
+	int screenWidth = QApplication::desktop()->screenGeometry(desktop).width();
 	if (x + width > screenWidth) {
 		x = screenWidth - width;
 	}
diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript
index 1c7f20b..d948729 100644
--- a/Swift/QtUI/SConscript
+++ b/Swift/QtUI/SConscript
@@ -77,6 +77,7 @@ sources = [
     "ChatSnippet.cpp",
     "MessageSnippet.cpp",
     "SystemMessageSnippet.cpp",
+    "QtElidingLabel.cpp",
     "Roster/RosterModel.cpp",
     "Roster/QtTreeWidget.cpp",
 #    "Roster/QtTreeWidgetItem.cpp",
-- 
cgit v0.10.2-6-g49f6