From 99408dd45ea4243d7be88d5d3c27a7267fdef6f8 Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Sat, 16 Jul 2011 22:08:03 +0000 Subject: Add custom delegate for showing the mountpoint combo box entries. The delegate will be used for the dropdown list and show both mountpoint (left aligned) and label / size information (right aligned). This improves readability compared to the previous implementation. Also, the mountpoint itself is now the text of the combo box and the additional information is in the Qt::UserRole to avoid having to handle a user entered mountpoint separately (since previously the mountpoint was stored in Qt::UserRole, but an edited item would have the value in Qt::TextRole). Disable editing the combo box entry for release builds, it shouldn't be needed by users. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30144 a1c6a512-1295-4272-9138-f99709370657 --- rbutil/rbutilqt/comboboxviewdelegate.cpp | 55 ++++++++++++++++++++++++++++++++ rbutil/rbutilqt/comboboxviewdelegate.h | 31 ++++++++++++++++++ rbutil/rbutilqt/configure.cpp | 28 +++++++++------- rbutil/rbutilqt/rbutilqt.pri | 2 ++ rbutil/rbutilqt/rbutilqt.pro | 1 + 5 files changed, 106 insertions(+), 11 deletions(-) create mode 100644 rbutil/rbutilqt/comboboxviewdelegate.cpp create mode 100644 rbutil/rbutilqt/comboboxviewdelegate.h diff --git a/rbutil/rbutilqt/comboboxviewdelegate.cpp b/rbutil/rbutilqt/comboboxviewdelegate.cpp new file mode 100644 index 0000000000..74e3dc76e1 --- /dev/null +++ b/rbutil/rbutilqt/comboboxviewdelegate.cpp @@ -0,0 +1,55 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) 2011 by Dominik Riebeling + * $Id$ + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include +#include +#include "comboboxviewdelegate.h" + +void ComboBoxViewDelegate::paint(QPainter *painter, + const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + QPen pen; + QFont font; + pen = painter->pen(); + font = painter->font(); + + painter->save(); + // paint selection + if(option.state & QStyle::State_Selected) { + painter->setPen(QPen(Qt::NoPen)); + painter->setBrush(QApplication::palette().highlight()); + painter->drawRect(option.rect); + painter->restore(); + painter->save(); + pen.setColor(QApplication::palette().color(QPalette::HighlightedText)); + } + else { + pen.setColor(QApplication::palette().color(QPalette::Text)); + } + // draw data (text) + painter->setPen(pen); + painter->drawText(option.rect, Qt::AlignLeft, index.data().toString()); + + // draw user data right aligned, italic + font.setItalic(true); + painter->setFont(font); + painter->drawText(option.rect, Qt::AlignRight, index.data(Qt::UserRole).toString()); + painter->restore(); +} + diff --git a/rbutil/rbutilqt/comboboxviewdelegate.h b/rbutil/rbutilqt/comboboxviewdelegate.h new file mode 100644 index 0000000000..91edbe3958 --- /dev/null +++ b/rbutil/rbutilqt/comboboxviewdelegate.h @@ -0,0 +1,31 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) 2011 by Dominik Riebeling + * $Id$ + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include + +class ComboBoxViewDelegate : public QStyledItemDelegate +{ + Q_OBJECT + public: + ComboBoxViewDelegate(QObject* parent = 0) : QStyledItemDelegate(parent) { } + + void paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const; +}; + diff --git a/rbutil/rbutilqt/configure.cpp b/rbutil/rbutilqt/configure.cpp index eeac492dff..4ce2acb5e6 100644 --- a/rbutil/rbutilqt/configure.cpp +++ b/rbutil/rbutilqt/configure.cpp @@ -31,7 +31,7 @@ #include "serverinfo.h" #include "systeminfo.h" #include "utils.h" -#include +#include "comboboxviewdelegate.h" #if defined(Q_OS_WIN32) #if defined(UNICODE) #define _UNICODE @@ -65,6 +65,13 @@ Config::Config(QWidget *parent,int index) : QDialog(parent) ui.listLanguages->addItem(i.key()); i++; } + + ComboBoxViewDelegate *delegate = new ComboBoxViewDelegate(this); + ui.mountPoint->setItemDelegate(delegate); +#if !defined(DBG) + ui.mountPoint->setEditable(false); +#endif + ui.listLanguages->setSelectionMode(QAbstractItemView::SingleSelection); ui.proxyPass->setEchoMode(QLineEdit::Password); ui.treeDevices->setAlternatingRowColors(true); @@ -586,12 +593,11 @@ void Config::refreshMountpoint() // later (to include volume label or similar) // Skip unwritable mountpoints, they are not useable for us. if(QFileInfo(mps.at(i)).isWritable()) { - QString title = QString("%1 %4 (%2 GiB of %3 GiB free)") - .arg(QDir::toNativeSeparators(mps.at(i))) + QString description = QString("%1 (%2 GiB of %3 GiB free)") + .arg(Utils::filesystemName(mps.at(i))) .arg((double)Utils::filesystemFree(mps.at(i))/(1<<30), 0, 'f', 2) - .arg((double)Utils::filesystemTotal(mps.at(i))/(1<<30), 0, 'f', 2) - .arg(Utils::filesystemName(mps.at(i))); - ui.mountPoint->addItem(title, mps.at(i)); + .arg((double)Utils::filesystemTotal(mps.at(i))/(1<<30), 0, 'f', 2); + ui.mountPoint->addItem(QDir::toNativeSeparators(mps.at(i)), description); } } if(!mountpoint.isEmpty()) { @@ -604,7 +610,7 @@ void Config::refreshMountpoint() void Config::updateMountpoint(QString m) { if(!m.isEmpty()) { - mountpoint = m; + mountpoint = QDir::fromNativeSeparators(m); qDebug() << "[Config] Mountpoint set to" << mountpoint; } } @@ -615,9 +621,9 @@ void Config::updateMountpoint(int idx) if(idx == -1) { return; } - QString mp = ui.mountPoint->itemData(idx).toString(); + QString mp = ui.mountPoint->itemText(idx); if(!mp.isEmpty()) { - mountpoint = mp; + mountpoint = QDir::fromNativeSeparators(mp); qDebug() << "[Config] Mountpoint set to" << mountpoint; } } @@ -628,14 +634,14 @@ void Config::setMountpoint(QString m) if(m.isEmpty()) { return; } - int index = ui.mountPoint->findData(m); + int index = ui.mountPoint->findText(QDir::toNativeSeparators(m)); if(index != -1) { ui.mountPoint->setCurrentIndex(index); } else { // keep a mountpoint that is not in the list for convenience (to allow // easier development) - ui.mountPoint->addItem(m); + ui.mountPoint->addItem(QDir::toNativeSeparators(m)); ui.mountPoint->setCurrentIndex(ui.mountPoint->findText(m)); } qDebug() << "[Config] Mountpoint set to" << mountpoint; diff --git a/rbutil/rbutilqt/rbutilqt.pri b/rbutil/rbutilqt/rbutilqt.pri index b0052c38b5..0f887d7070 100644 --- a/rbutil/rbutilqt/rbutilqt.pri +++ b/rbutil/rbutilqt/rbutilqt.pri @@ -73,6 +73,7 @@ SOURCES += \ quazip/zip.c \ quazip/ioapi.c \ base/ziputil.cpp \ + comboboxviewdelegate.cpp \ HEADERS += \ @@ -141,6 +142,7 @@ HEADERS += \ quazip/unzip.h \ quazip/zip.h \ base/ziputil.h \ + comboboxviewdelegate.h \ FORMS += \ diff --git a/rbutil/rbutilqt/rbutilqt.pro b/rbutil/rbutilqt/rbutilqt.pro index c2e3c93f13..7186c8b7e5 100644 --- a/rbutil/rbutilqt/rbutilqt.pro +++ b/rbutil/rbutilqt/rbutilqt.pro @@ -132,6 +132,7 @@ QT += network dbg { CONFIG += debug thread qt warn_on DEFINES -= QT_NO_DEBUG_OUTPUT + DEFINES += DBG message("debug") } !dbg { -- cgit v1.2.3