[PATCH] Fix plus icon position based on the theme

Giuseppe Bilotta giuseppe.bilotta at gmail.com
Fri Oct 17 12:22:49 PDT 2014


From: Tomaz Canabrava <tomaz.canabrava at intel.com>

I hope this time I got it right. basically, the old code
tried to guess where the plus icon should be with a fairly
bad set of defauults.

This one patch asks for the Qt style where everything is and
uses that knowledge to make it be in a more sane position.

Signed-off-by: Tomaz Canabrava <tomaz.canabrava at intel.com>
Signed-off-by: Giuseppe Bilotta <giuseppe.bilota at gmail.com>
---
 qt-ui/tableview.cpp | 25 +++++++++++--------------
 qt-ui/tableview.h   |  3 +--
 qt-ui/tableview.ui  | 46 +++++++++++-----------------------------------
 3 files changed, 23 insertions(+), 51 deletions(-)


To clarify, this is just the HiDPI version of the patch Tomaz sent earlier

diff --git a/qt-ui/tableview.cpp b/qt-ui/tableview.cpp
index 0c02fd9..423fcc7 100644
--- a/qt-ui/tableview.cpp
+++ b/qt-ui/tableview.cpp
@@ -7,8 +7,9 @@
 #include <QFile>
 #include <QTextStream>
 #include <QSettings>
+#include <QStyle>
 
-TableView::TableView(QWidget *parent) : QWidget(parent)
+TableView::TableView(QWidget *parent) : QGroupBox(parent)
 {
 	ui.setupUi(this);
 	ui.tableView->setItemDelegate(new DiveListDelegate(this));
@@ -25,15 +26,15 @@ TableView::TableView(QWidget *parent) : QWidget(parent)
 
 	/* There`s mostly a need for a Mac fix here too. */
 	if (qApp->style()->objectName() == "gtk+")
-		ui.groupBox->layout()->setContentsMargins(0, 9, 0, 0);
+		layout()->setContentsMargins(0, 9, 0, 0);
 	else
-		ui.groupBox->layout()->setContentsMargins(0, 0, 0, 0);
-
+		layout()->setContentsMargins(0, 0, 0, 0);
 	QIcon plusIcon(":plus");
-	plusBtn = new QPushButton(plusIcon, QString(), ui.groupBox);
+	plusBtn = new QPushButton(plusIcon, QString(), this);
 	plusBtn->setFlat(true);
 	plusBtn->setToolTip(tr("Add cylinder"));
 	plusBtn->setIconSize(QSize(metrics.icon->sz_small, metrics.icon->sz_small));
+	plusBtn->resize(metrics.icon->sz_med, metrics.icon->sz_med);
 	connect(plusBtn, SIGNAL(clicked(bool)), this, SIGNAL(addButtonClicked()));
 }
 
@@ -65,11 +66,6 @@ void TableView::setBtnToolTip(const QString &tooltip)
 	plusBtn->setToolTip(tooltip);
 }
 
-void TableView::setTitle(const QString &title)
-{
-	ui.groupBox->setTitle(title);
-}
-
 void TableView::setModel(QAbstractItemModel *model)
 {
 	ui.tableView->setModel(model);
@@ -89,10 +85,11 @@ void TableView::setModel(QAbstractItemModel *model)
 
 void TableView::fixPlusPosition()
 {
-	int x = ui.groupBox->contentsRect().width() - 2*metrics.icon->sz_small + metrics.icon->spacing;
-	int y = metrics.icon->spacing;
-	int sz = metrics.icon->sz_med;
-	plusBtn->setGeometry(x, y, sz, sz);
+	QStyleOptionGroupBox option;
+	initStyleOption(&option);
+	QRect labelRect = style()->subControlRect(QStyle::CC_GroupBox, &option, QStyle::SC_GroupBoxLabel, this);
+	QRect contentsRect = style()->subControlRect(QStyle::CC_GroupBox, &option, QStyle::QStyle::SC_GroupBoxFrame, this);
+	plusBtn->setGeometry( contentsRect.width() - plusBtn->width(), labelRect.y(), plusBtn->width(), labelRect.height());
 }
 
 // We need to manually position the 'plus' on cylinder and weight.
diff --git a/qt-ui/tableview.h b/qt-ui/tableview.h
index 93134b2..36eef90 100644
--- a/qt-ui/tableview.h
+++ b/qt-ui/tableview.h
@@ -16,7 +16,7 @@ class QAbstractItemModel;
 class QModelIndex;
 class QTableView;
 
-class TableView : public QWidget {
+class TableView : public QGroupBox {
 	Q_OBJECT
 
 	struct TableMetrics {
@@ -28,7 +28,6 @@ class TableView : public QWidget {
 public:
 	TableView(QWidget *parent = 0);
 	virtual ~TableView();
-	void setTitle(const QString &title);
 	/* The model is expected to have a 'remove' slot, that takes a QModelIndex as parameter.
 	 * It's also expected to have the column '1' as a trash icon. I most probably should create a
 	 * proxy model and add that column, will mark that as TODO. see? marked.
diff --git a/qt-ui/tableview.ui b/qt-ui/tableview.ui
index baa86fd..7386723 100644
--- a/qt-ui/tableview.ui
+++ b/qt-ui/tableview.ui
@@ -1,48 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
  <class>TableView</class>
- <widget class="QWidget" name="TableView">
+ <widget class="QGroupBox" name="TableView">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>410</width>
-    <height>309</height>
+    <width>400</width>
+    <height>300</height>
    </rect>
   </property>
-  <layout class="QHBoxLayout" name="horizontalLayout_2">
-   <property name="spacing">
-    <number>0</number>
-   </property>
-   <property name="margin">
-    <number>0</number>
-   </property>
+  <property name="windowTitle">
+   <string>GroupBox</string>
+  </property>
+  <property name="title">
+   <string>GroupBox</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QGroupBox" name="groupBox">
-     <property name="title">
-      <string/>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout">
-      <property name="spacing">
-       <number>0</number>
-      </property>
-      <property name="leftMargin">
-       <number>0</number>
-      </property>
-      <property name="topMargin">
-       <number>10</number>
-      </property>
-      <property name="rightMargin">
-       <number>0</number>
-      </property>
-      <property name="bottomMargin">
-       <number>0</number>
-      </property>
-      <item>
-       <widget class="QTableView" name="tableView"/>
-      </item>
-     </layout>
-    </widget>
+    <widget class="QTableView" name="tableView"/>
    </item>
   </layout>
  </widget>
-- 
2.1.0.255.gcd10c46



More information about the subsurface mailing list