VariableChooser: Slim down header and implementation

Change-Id: Ia39c94c2e87717c23cb0d7466b68c922b033979b
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
This commit is contained in:
hjk
2014-06-20 00:34:41 +02:00
parent ae2de45642
commit c9029bf996
5 changed files with 117 additions and 142 deletions

View File

@@ -206,7 +206,6 @@ FORMS += dialogs/newdialog.ui \
dialogs/openwithdialog.ui \ dialogs/openwithdialog.ui \
generalsettings.ui \ generalsettings.ui \
dialogs/externaltoolconfig.ui \ dialogs/externaltoolconfig.ui \
variablechooser.ui \
mimetypesettingspage.ui \ mimetypesettingspage.ui \
mimetypemagicdialog.ui \ mimetypemagicdialog.ui \
removefiledialog.ui \ removefiledialog.ui \

View File

@@ -90,7 +90,7 @@ QtcPlugin {
"tabpositionindicator.cpp", "tabpositionindicator.h", "tabpositionindicator.cpp", "tabpositionindicator.h",
"textdocument.cpp", "textdocument.h", "textdocument.cpp", "textdocument.h",
"toolsettings.cpp", "toolsettings.h", "toolsettings.cpp", "toolsettings.h",
"variablechooser.cpp", "variablechooser.h", "variablechooser.ui", "variablechooser.cpp", "variablechooser.h",
"variablemanager.cpp", "variablemanager.h", "variablemanager.cpp", "variablemanager.h",
"vcsmanager.cpp", "vcsmanager.h", "vcsmanager.cpp", "vcsmanager.h",
"versiondialog.cpp", "versiondialog.h", "versiondialog.cpp", "versiondialog.h",

View File

@@ -28,20 +28,101 @@
****************************************************************************/ ****************************************************************************/
#include "variablechooser.h" #include "variablechooser.h"
#include "ui_variablechooser.h"
#include "variablemanager.h" #include "variablemanager.h"
#include "coreconstants.h" #include "coreconstants.h"
#include <utils/fancylineedit.h> // IconButton #include <utils/fancylineedit.h> // IconButton
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <QTimer> #include <QApplication>
#include <QLabel>
#include <QLineEdit> #include <QLineEdit>
#include <QTextEdit> #include <QListWidget>
#include <QPlainTextEdit>
#include <QListWidgetItem> #include <QListWidgetItem>
#include <QPlainTextEdit>
#include <QPointer>
#include <QTextEdit>
#include <QTimer>
#include <QVBoxLayout>
using namespace Core; namespace Core {
namespace Internal {
/*!
* \internal
*/
class VariableChooserPrivate : public QObject
{
Q_OBJECT
public:
VariableChooserPrivate(VariableChooser *parent)
: q(parent),
m_defaultDescription(tr("Select a variable to insert.")),
m_lineEdit(0),
m_textEdit(0),
m_plainTextEdit(0)
{
m_variableList = new QListWidget(q);
m_variableList->setAttribute(Qt::WA_MacSmallSize);
m_variableList->setAttribute(Qt::WA_MacShowFocusRect, false);
foreach (const QByteArray &variable, VariableManager::variables())
m_variableList->addItem(QString::fromLatin1(variable));
m_variableDescription = new QLabel(q);
m_variableDescription->setText(m_defaultDescription);
m_variableDescription->setMinimumSize(QSize(0, 60));
m_variableDescription->setAlignment(Qt::AlignLeft|Qt::AlignTop);
m_variableDescription->setWordWrap(true);
m_variableDescription->setAttribute(Qt::WA_MacSmallSize);
QVBoxLayout *verticalLayout = new QVBoxLayout(q);
verticalLayout->setContentsMargins(3, 3, 3, 12);
verticalLayout->addWidget(m_variableList);
verticalLayout->addWidget(m_variableDescription);
connect(m_variableList, SIGNAL(currentTextChanged(QString)),
this, SLOT(updateDescription(QString)));
connect(m_variableList, SIGNAL(itemActivated(QListWidgetItem*)),
this, SLOT(handleItemActivated(QListWidgetItem*)));
connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)),
this, SLOT(updateCurrentEditor(QWidget*,QWidget*)));
updateCurrentEditor(0, qApp->focusWidget());
}
void createIconButton()
{
m_iconButton = new Utils::IconButton;
m_iconButton->setPixmap(QPixmap(QLatin1String(":/core/images/replace.png")));
m_iconButton->setToolTip(tr("Insert variable"));
m_iconButton->hide();
connect(m_iconButton, SIGNAL(clicked()), this, SLOT(updatePositionAndShow()));
}
public slots:
void updateDescription(const QString &variable);
void updateCurrentEditor(QWidget *old, QWidget *widget);
void handleItemActivated(QListWidgetItem *item);
void insertVariable(const QString &variable);
void updatePositionAndShow();
public:
QWidget *currentWidget();
VariableChooser *q;
QString m_defaultDescription;
QPointer<QLineEdit> m_lineEdit;
QPointer<QTextEdit> m_textEdit;
QPointer<QPlainTextEdit> m_plainTextEdit;
QPointer<Utils::IconButton> m_iconButton;
QListWidget *m_variableList;
QLabel *m_variableDescription;
};
} // namespace Internal
using namespace Internal;
/*! /*!
* \class Core::VariableChooser * \class Core::VariableChooser
@@ -92,30 +173,12 @@ const char VariableChooser::kVariableSupportProperty[] = "QtCreator.VariableSupp
*/ */
VariableChooser::VariableChooser(QWidget *parent) : VariableChooser::VariableChooser(QWidget *parent) :
QWidget(parent), QWidget(parent),
ui(new Internal::Ui::VariableChooser), d(new VariableChooserPrivate(this))
m_lineEdit(0),
m_textEdit(0),
m_plainTextEdit(0)
{ {
ui->setupUi(this); setWindowTitle(tr("Variables"));
m_defaultDescription = ui->variableDescription->text();
ui->variableList->setAttribute(Qt::WA_MacSmallSize);
ui->variableList->setAttribute(Qt::WA_MacShowFocusRect, false);
ui->variableDescription->setAttribute(Qt::WA_MacSmallSize);
setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint); setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint);
setFocusPolicy(Qt::StrongFocus); setFocusPolicy(Qt::StrongFocus);
setFocusProxy(ui->variableList); setFocusProxy(d->m_variableList);
foreach (const QByteArray &variable, VariableManager::variables())
ui->variableList->addItem(QString::fromLatin1(variable));
connect(ui->variableList, SIGNAL(currentTextChanged(QString)),
this, SLOT(updateDescription(QString)));
connect(ui->variableList, SIGNAL(itemActivated(QListWidgetItem*)),
this, SLOT(handleItemActivated(QListWidgetItem*)));
connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)),
this, SLOT(updateCurrentEditor(QWidget*,QWidget*)));
updateCurrentEditor(0, qApp->focusWidget());
} }
/*! /*!
@@ -123,8 +186,8 @@ VariableChooser::VariableChooser(QWidget *parent) :
*/ */
VariableChooser::~VariableChooser() VariableChooser::~VariableChooser()
{ {
delete m_iconButton; delete d->m_iconButton;
delete ui; delete d;
} }
/*! /*!
@@ -140,19 +203,19 @@ void VariableChooser::addVariableSupport(QWidget *textcontrol)
/*! /*!
* \internal * \internal
*/ */
void VariableChooser::updateDescription(const QString &variable) void VariableChooserPrivate::updateDescription(const QString &variable)
{ {
if (variable.isNull()) if (variable.isNull())
ui->variableDescription->setText(m_defaultDescription); m_variableDescription->setText(m_defaultDescription);
else else
ui->variableDescription->setText(VariableManager::variableDescription(variable.toUtf8()) m_variableDescription->setText(VariableManager::variableDescription(variable.toUtf8())
+ QLatin1String("<p>") + tr("Current Value: %1").arg(VariableManager::value(variable.toUtf8()))); + QLatin1String("<p>") + tr("Current Value: %1").arg(VariableManager::value(variable.toUtf8())));
} }
/*! /*!
* \internal * \internal
*/ */
void VariableChooser::updateCurrentEditor(QWidget *old, QWidget *widget) void VariableChooserPrivate::updateCurrentEditor(QWidget *old, QWidget *widget)
{ {
if (old) if (old)
old->removeEventFilter(this); old->removeEventFilter(this);
@@ -162,9 +225,9 @@ void VariableChooser::updateCurrentEditor(QWidget *old, QWidget *widget)
bool handle = false; bool handle = false;
QWidget *parent = widget; QWidget *parent = widget;
while (parent) { while (parent) {
if (parent == this) if (parent == q)
return; return;
if (parent == this->parentWidget()) { if (parent == q->parentWidget()) {
handle = true; handle = true;
break; break;
} }
@@ -178,7 +241,7 @@ void VariableChooser::updateCurrentEditor(QWidget *old, QWidget *widget)
m_lineEdit = 0; m_lineEdit = 0;
m_textEdit = 0; m_textEdit = 0;
m_plainTextEdit = 0; m_plainTextEdit = 0;
QVariant variablesSupportProperty = widget->property(kVariableSupportProperty); QVariant variablesSupportProperty = widget->property(VariableChooser::kVariableSupportProperty);
bool supportsVariables = (variablesSupportProperty.isValid() bool supportsVariables = (variablesSupportProperty.isValid()
? variablesSupportProperty.toBool() : false); ? variablesSupportProperty.toBool() : false);
if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget)) if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget))
@@ -188,7 +251,7 @@ void VariableChooser::updateCurrentEditor(QWidget *old, QWidget *widget)
else if (QPlainTextEdit *plainTextEdit = qobject_cast<QPlainTextEdit *>(widget)) else if (QPlainTextEdit *plainTextEdit = qobject_cast<QPlainTextEdit *>(widget))
m_plainTextEdit = (supportsVariables ? plainTextEdit : 0); m_plainTextEdit = (supportsVariables ? plainTextEdit : 0);
if (!(m_lineEdit || m_textEdit || m_plainTextEdit)) if (!(m_lineEdit || m_textEdit || m_plainTextEdit))
hide(); q->hide();
QWidget *current = currentWidget(); QWidget *current = currentWidget();
if (current != previousWidget) { if (current != previousWidget) {
@@ -202,7 +265,7 @@ void VariableChooser::updateCurrentEditor(QWidget *old, QWidget *widget)
if (!m_iconButton) if (!m_iconButton)
createIconButton(); createIconButton();
int margin = m_iconButton->pixmap().width() + 8; int margin = m_iconButton->pixmap().width() + 8;
if (style()->inherits("OxygenStyle")) if (q->style()->inherits("OxygenStyle"))
margin = qMax(24, margin); margin = qMax(24, margin);
if (m_lineEdit) if (m_lineEdit)
m_lineEdit->setTextMargins(0, 0, margin, 0); m_lineEdit->setTextMargins(0, 0, margin, 0);
@@ -215,36 +278,25 @@ void VariableChooser::updateCurrentEditor(QWidget *old, QWidget *widget)
} }
} }
/*!
* \internal
*/
void VariableChooser::createIconButton()
{
m_iconButton = new Utils::IconButton;
m_iconButton->setPixmap(QPixmap(QLatin1String(":/core/images/replace.png")));
m_iconButton->setToolTip(tr("Insert variable"));
m_iconButton->hide();
connect(m_iconButton, SIGNAL(clicked()), this, SLOT(updatePositionAndShow()));
}
/*! /*!
* \internal * \internal
*/ */
void VariableChooser::updatePositionAndShow() void VariableChooserPrivate::updatePositionAndShow()
{ {
if (parentWidget()) { if (QWidget *w = q->parentWidget()) {
QPoint parentCenter = parentWidget()->mapToGlobal(parentWidget()->geometry().center()); QPoint parentCenter = w->mapToGlobal(w->geometry().center());
move(parentCenter.x() - width()/2, parentCenter.y() - height()/2); q->move(parentCenter.x() - q->width()/2, parentCenter.y() - q->height()/2);
} }
show(); q->show();
raise(); q->raise();
activateWindow(); q->activateWindow();
} }
/*! /*!
* \internal * \internal
*/ */
QWidget *VariableChooser::currentWidget() QWidget *VariableChooserPrivate::currentWidget()
{ {
if (m_lineEdit) if (m_lineEdit)
return m_lineEdit; return m_lineEdit;
@@ -256,7 +308,7 @@ QWidget *VariableChooser::currentWidget()
/*! /*!
* \internal * \internal
*/ */
void VariableChooser::handleItemActivated(QListWidgetItem *item) void VariableChooserPrivate::handleItemActivated(QListWidgetItem *item)
{ {
if (item) if (item)
insertVariable(item->text()); insertVariable(item->text());
@@ -265,7 +317,7 @@ void VariableChooser::handleItemActivated(QListWidgetItem *item)
/*! /*!
* \internal * \internal
*/ */
void VariableChooser::insertVariable(const QString &variable) void VariableChooserPrivate::insertVariable(const QString &variable)
{ {
const QString &text = QLatin1String("%{") + variable + QLatin1String("}"); const QString &text = QLatin1String("%{") + variable + QLatin1String("}");
if (m_lineEdit) { if (m_lineEdit) {
@@ -312,3 +364,7 @@ bool VariableChooser::eventFilter(QObject *, QEvent *event)
} }
return false; return false;
} }
} // namespace Internal
#include "variablechooser.moc"

View File

@@ -32,21 +32,11 @@
#include "core_global.h" #include "core_global.h"
#include <QPointer>
#include <QWidget> #include <QWidget>
QT_BEGIN_NAMESPACE
class QLineEdit;
class QTextEdit;
class QPlainTextEdit;
class QListWidgetItem;
QT_END_NAMESPACE
namespace Utils { class IconButton; }
namespace Core { namespace Core {
namespace Internal { namespace Ui { class VariableChooser; } } namespace Internal { class VariableChooserPrivate; }
class CORE_EXPORT VariableChooser : public QWidget class CORE_EXPORT VariableChooser : public QWidget
{ {
@@ -63,23 +53,8 @@ protected:
void keyPressEvent(QKeyEvent *ke); void keyPressEvent(QKeyEvent *ke);
bool eventFilter(QObject *, QEvent *event); bool eventFilter(QObject *, QEvent *event);
private slots:
void updateDescription(const QString &variable);
void updateCurrentEditor(QWidget *old, QWidget *widget);
void handleItemActivated(QListWidgetItem *item);
void insertVariable(const QString &variable);
void updatePositionAndShow();
private: private:
QWidget *currentWidget(); Internal::VariableChooserPrivate *d;
void createIconButton();
Internal::Ui::VariableChooser *ui;
QString m_defaultDescription;
QPointer<QLineEdit> m_lineEdit;
QPointer<QTextEdit> m_textEdit;
QPointer<QPlainTextEdit> m_plainTextEdit;
QPointer<Utils::IconButton> m_iconButton;
}; };
} // namespace Core } // namespace Core

View File

@@ -1,55 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Core::Internal::VariableChooser</class>
<widget class="QWidget" name="Core::Internal::VariableChooser">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>218</width>
<height>321</height>
</rect>
</property>
<property name="windowTitle">
<string>Variables</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>12</number>
</property>
<item>
<widget class="QListWidget" name="variableList"/>
</item>
<item>
<widget class="QLabel" name="variableDescription">
<property name="minimumSize">
<size>
<width>0</width>
<height>60</height>
</size>
</property>
<property name="text">
<string>Select a variable to insert.</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>