From 6dc4a039f2cb50a02a0e15265548547b94a6dc9d Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Thu, 1 Jul 2010 09:32:47 +0200 Subject: [PATCH] Refactor fancy line edit to optionally have two buttons. Also unify some method naming. Use the new feature to add clear buttons to the Locator, and the find tool bar. Task-number: QTCREATORBUG-705 --- src/libs/utils/fancylineedit.cpp | 230 ++++++++++-------- src/libs/utils/fancylineedit.h | 48 ++-- src/libs/utils/filterlineedit.cpp | 17 +- .../actionmanager/commandmappings.cpp | 5 +- .../actionmanager/commandmappings.ui | 2 +- src/plugins/find/findtoolbar.cpp | 28 ++- src/plugins/find/findwidget.ui | 8 +- src/plugins/locator/locatorwidget.cpp | 15 +- src/plugins/locator/locatorwidget.h | 4 +- .../components/itemlibrary/itemlibrary.cpp | 2 +- src/tools/qtcreatorwidgets/customwidgets.cpp | 7 +- .../qtcreatorwidgets/qtcreatorwidgets.pro | 2 +- 12 files changed, 205 insertions(+), 163 deletions(-) diff --git a/src/libs/utils/fancylineedit.cpp b/src/libs/utils/fancylineedit.cpp index 5d88eccb1b8..7e84a8d1921 100644 --- a/src/libs/utils/fancylineedit.cpp +++ b/src/libs/utils/fancylineedit.cpp @@ -44,7 +44,7 @@ enum { margin = 6 }; -#define ICONBUTTON_SIZE 18 +#define ICONBUTTON_HEIGHT 18 #define FADE_TIME 160 namespace Utils { @@ -56,41 +56,47 @@ public: virtual bool eventFilter(QObject *obj, QEvent *event); - const QString m_leftLabelStyleSheet; - const QString m_rightLabelStyleSheet; - FancyLineEdit *m_lineEdit; - QPixmap m_pixmap; - QMenu *m_menu; - FancyLineEdit::Side m_side; - bool m_useLayoutDirection; - bool m_menuTabFocusTrigger; - bool m_autoHideIcon; - IconButton *m_iconbutton; + QPixmap m_pixmap[2]; + QMenu *m_menu[2]; + bool m_menuTabFocusTrigger[2]; + IconButton *m_iconbutton[2]; + bool m_iconEnabled[2]; }; FancyLineEditPrivate::FancyLineEditPrivate(FancyLineEdit *parent) : QObject(parent), - m_lineEdit(parent), - m_menu(0), - m_side(FancyLineEdit::Left), - m_useLayoutDirection(false), - m_menuTabFocusTrigger(false), - m_autoHideIcon(false), - m_iconbutton(new IconButton(parent)) + m_lineEdit(parent) { + for (int i = 0; i < 2; ++i) { + m_menu[i] = 0; + m_menuTabFocusTrigger[i] = false; + m_iconbutton[i] = new IconButton(parent); + m_iconbutton[i]->installEventFilter(this); + m_iconbutton[i]->hide(); + m_iconbutton[i]->setAutoHide(false); + m_iconEnabled[i] = false; + } } bool FancyLineEditPrivate::eventFilter(QObject *obj, QEvent *event) { - if (obj != m_iconbutton) + int buttonIndex = -1; + for (int i = 0; i < 2; ++i) { + if (obj == m_iconbutton[i]) { + buttonIndex = i; + break; + } + } + if (buttonIndex == -1) return QObject::eventFilter(obj, event); switch (event->type()) { case QEvent::FocusIn: - if (m_menuTabFocusTrigger && m_menu) { + if (m_menuTabFocusTrigger[buttonIndex] && m_menu[buttonIndex]) { m_lineEdit->setFocus(); - m_menu->exec(m_iconbutton->mapToGlobal(m_iconbutton->rect().center())); + m_menu[buttonIndex]->exec(m_iconbutton[buttonIndex]->mapToGlobal( + m_iconbutton[buttonIndex]->rect().center())); return true; } default: @@ -105,29 +111,21 @@ FancyLineEdit::FancyLineEdit(QWidget *parent) : QLineEdit(parent), m_d(new FancyLineEditPrivate(this)) { - // KDE has custom icons for this. Notice that icon namings are counter intuitive - // If these icons are not avaiable we use the freedesktop standard name before - // falling back to a bundled resource - QIcon icon = QIcon::fromTheme(layoutDirection() == Qt::LeftToRight ? - QLatin1String("edit-clear-locationbar-rtl") : - QLatin1String("edit-clear-locationbar-ltr"), - QIcon::fromTheme("edit-clear", QIcon(QLatin1String(":/core/images/editclear.png")))); - - m_d->m_iconbutton->installEventFilter(m_d); - m_d->m_iconbutton->setIcon(icon); - ensurePolished(); - setSide(Left); + updateMargins(); - connect(this, SIGNAL(textChanged(QString)), this, SLOT(checkButton(QString))); - connect(m_d->m_iconbutton, SIGNAL(clicked()), this, SLOT(iconClicked())); + connect(this, SIGNAL(textChanged(QString)), this, SLOT(checkButtons(QString))); + connect(m_d->m_iconbutton[Left], SIGNAL(clicked()), this, SLOT(iconClicked())); + connect(m_d->m_iconbutton[Right], SIGNAL(clicked()), this, SLOT(iconClicked())); } -void FancyLineEdit::checkButton(const QString &text) +void FancyLineEdit::checkButtons(const QString &text) { - if (autoHideIcon()) { - if (m_oldText.isEmpty() || text.isEmpty()) - m_d->m_iconbutton->animateShow(!text.isEmpty()); + if (m_oldText.isEmpty() || text.isEmpty()) { + for (int i = 0; i < 2; ++i) { + if (m_d->m_iconbutton[i]->hasAutoHide()) + m_d->m_iconbutton[i]->animateShow(!text.isEmpty()); + } m_oldText = text; } } @@ -136,127 +134,147 @@ FancyLineEdit::~FancyLineEdit() { } -void FancyLineEdit::setSide(Side side) +void FancyLineEdit::setButtonVisible(Side side, bool visible) { - m_d->m_side = side; + m_d->m_iconbutton[side]->setVisible(visible); + m_d->m_iconEnabled[side] = visible; + updateMargins(); +} - Side iconpos = side; - if (layoutDirection() == Qt::RightToLeft) - iconpos = (side == Left ? Right : Left); +bool FancyLineEdit::isButtonVisible(Side side) const +{ + return m_d->m_iconEnabled[side]; +} - // Make room for icon +void FancyLineEdit::iconClicked() +{ + IconButton *button = qobject_cast<IconButton *>(sender()); + int index = -1; + for (int i = 0; i < 2; ++i) + if (m_d->m_iconbutton[i] == button) + index = i; + if (index == -1) + return; + if (m_d->m_menu[index]) { + m_d->m_menu[index]->exec(QCursor::pos()); + } else { + emit buttonClicked((Side)index); + if (index == Left) + emit leftButtonClicked(); + else if (index == Right) + emit rightButtonClicked(); + } +} - // Let the style determine minimum height for our widget - QSize size(ICONBUTTON_SIZE + 6, ICONBUTTON_SIZE + 2); +void FancyLineEdit::updateMargins() +{ + bool leftToRight = (layoutDirection() == Qt::LeftToRight); + Side realLeft = (leftToRight ? Left : Right); + Side realRight = (leftToRight ? Right : Left); + int leftMargin = m_d->m_iconbutton[realLeft]->pixmap().width() + 8; + int rightMargin = m_d->m_iconbutton[realRight]->pixmap().width() + 8; // Note KDE does not reserve space for the highlight color if (style()->inherits("OxygenStyle")) { - size = size.expandedTo(QSize(24, 0)); + leftMargin = qMax(24, leftMargin); + rightMargin = qMax(24, rightMargin); } - QMargins margins; - if (iconpos == Right) - margins.setRight(size.width()); - else - margins.setLeft(size.width()); + QMargins margins((m_d->m_iconEnabled[realLeft] ? leftMargin : 0), 0, + (m_d->m_iconEnabled[realRight] ? rightMargin : 0), 0); setTextMargins(margins); } -void FancyLineEdit::iconClicked() +void FancyLineEdit::updateButtonPositions() { - if (m_d->m_menu) { - m_d->m_menu->exec(QCursor::pos()); - } else { - emit buttonClicked(); + QRect contentRect = rect(); + for (int i = 0; i < 2; ++i) { + Side iconpos = (Side)i; + if (layoutDirection() == Qt::RightToLeft) + iconpos = (iconpos == Left ? Right : Left); + + if (iconpos == FancyLineEdit::Right) { + const int iconoffset = textMargins().right() + 4; + m_d->m_iconbutton[i]->setGeometry(contentRect.adjusted(width() - iconoffset, 0, 0, 0)); + } else { + const int iconoffset = textMargins().left() + 4; + m_d->m_iconbutton[i]->setGeometry(contentRect.adjusted(0, 0, -width() + iconoffset, 0)); + } } } -FancyLineEdit::Side FancyLineEdit::side() const -{ - return m_d->m_side; -} - void FancyLineEdit::resizeEvent(QResizeEvent *) { - QRect contentRect = rect(); - Side iconpos = m_d->m_side; - if (layoutDirection() == Qt::RightToLeft) - iconpos = (iconpos == Left ? Right : Left); - - if (iconpos == FancyLineEdit::Right) { - const int iconoffset = textMargins().right() + 4; - m_d->m_iconbutton->setGeometry(contentRect.adjusted(width() - iconoffset, 0, 0, 0)); - } else { - const int iconoffset = textMargins().left() + 4; - m_d->m_iconbutton->setGeometry(contentRect.adjusted(0, 0, -width() + iconoffset, 0)); - } + updateButtonPositions(); } -void FancyLineEdit::setPixmap(const QPixmap &pixmap) +void FancyLineEdit::setButtonPixmap(Side side, const QPixmap &buttonPixmap) { - m_d->m_iconbutton->setIcon(pixmap); - updateGeometry(); + m_d->m_iconbutton[side]->setPixmap(buttonPixmap); + updateMargins(); + updateButtonPositions(); + update(); } -QPixmap FancyLineEdit::pixmap() const +QPixmap FancyLineEdit::buttonPixmap(Side side) const { - return m_d->m_pixmap; + return m_d->m_pixmap[side]; } -void FancyLineEdit::setMenu(QMenu *menu) +void FancyLineEdit::setButtonMenu(Side side, QMenu *buttonMenu) { - m_d->m_menu = menu; - m_d->m_iconbutton->setIconOpacity(1.0); + m_d->m_menu[side] = buttonMenu; + m_d->m_iconbutton[side]->setIconOpacity(1.0); } -QMenu *FancyLineEdit::menu() const +QMenu *FancyLineEdit::buttonMenu(Side side) const { - return m_d->m_menu; + return m_d->m_menu[side]; } -bool FancyLineEdit::hasMenuTabFocusTrigger() const +bool FancyLineEdit::hasMenuTabFocusTrigger(Side side) const { - return m_d->m_menuTabFocusTrigger; + return m_d->m_menuTabFocusTrigger[side]; } -void FancyLineEdit::setMenuTabFocusTrigger(bool v) +void FancyLineEdit::setMenuTabFocusTrigger(Side side, bool v) { - if (m_d->m_menuTabFocusTrigger == v) + if (m_d->m_menuTabFocusTrigger[side] == v) return; - m_d->m_menuTabFocusTrigger = v; - m_d->m_iconbutton->setFocusPolicy(v ? Qt::TabFocus : Qt::NoFocus); + m_d->m_menuTabFocusTrigger[side] = v; + m_d->m_iconbutton[side]->setFocusPolicy(v ? Qt::TabFocus : Qt::NoFocus); } -bool FancyLineEdit::autoHideIcon() const +bool FancyLineEdit::hasAutoHideButton(Side side) const { - return m_d->m_autoHideIcon; + return m_d->m_iconbutton[side]->hasAutoHide(); } -void FancyLineEdit::setAutoHideIcon(bool h) +void FancyLineEdit::setAutoHideButton(Side side, bool h) { - m_d->m_autoHideIcon = h; + m_d->m_iconbutton[side]->setAutoHide(h); if (h) - m_d->m_iconbutton->setIconOpacity(text().isEmpty() ? 0.0 : 1.0); + m_d->m_iconbutton[side]->setIconOpacity(text().isEmpty() ? 0.0 : 1.0); else - m_d->m_iconbutton->setIconOpacity(1.0); + m_d->m_iconbutton[side]->setIconOpacity(1.0); } -void FancyLineEdit::setButtonToolTip(const QString &tip) +void FancyLineEdit::setButtonToolTip(Side side, const QString &tip) { - m_d->m_iconbutton->setToolTip(tip); + m_d->m_iconbutton[side]->setToolTip(tip); } -void FancyLineEdit::setButtonFocusPolicy(Qt::FocusPolicy policy) +void FancyLineEdit::setButtonFocusPolicy(Side side, Qt::FocusPolicy policy) { - m_d->m_iconbutton->setFocusPolicy(policy); + m_d->m_iconbutton[side]->setFocusPolicy(policy); } // IconButton - helper class to represent a clickable icon IconButton::IconButton(QWidget *parent) - : QAbstractButton(parent) + : QAbstractButton(parent), m_autoHide(false) { setCursor(Qt::ArrowCursor); setFocusPolicy(Qt::NoFocus); @@ -270,15 +288,13 @@ void IconButton::paintEvent(QPaintEvent *) QIcon::Mode state = QIcon::Disabled; if (isEnabled()) state = isDown() ? QIcon::Selected : QIcon::Normal; - QPixmap iconpixmap = icon().pixmap(QSize(ICONBUTTON_SIZE, ICONBUTTON_SIZE), - state, QIcon::Off); - QRect pixmapRect = QRect(0, 0, iconpixmap.width(), iconpixmap.height()); + QRect pixmapRect = QRect(0, 0, m_pixmap.width(), m_pixmap.height()); pixmapRect.moveCenter(rect().center()); - if (static_cast<FancyLineEdit*>(parentWidget())->autoHideIcon()) + if (m_autoHide) painter.setOpacity(m_iconOpacity); - painter.drawPixmap(pixmapRect, iconpixmap); + painter.drawPixmap(pixmapRect, m_pixmap); } void IconButton::animateShow(bool visible) diff --git a/src/libs/utils/fancylineedit.h b/src/libs/utils/fancylineedit.h index bad70f7f003..eb024d4d4ea 100644 --- a/src/libs/utils/fancylineedit.h +++ b/src/libs/utils/fancylineedit.h @@ -44,15 +44,22 @@ class IconButton: public QAbstractButton { Q_OBJECT Q_PROPERTY(float iconOpacity READ iconOpacity WRITE setIconOpacity) + Q_PROPERTY(bool autoHide READ hasAutoHide WRITE setAutoHide) public: IconButton(QWidget *parent = 0); void paintEvent(QPaintEvent *event); + void setPixmap(const QPixmap &pixmap) { m_pixmap = pixmap; update(); } + QPixmap pixmap() const { return m_pixmap; } float iconOpacity() { return m_iconOpacity; } void setIconOpacity(float value) { m_iconOpacity = value; update(); } void animateShow(bool visible); + void setAutoHide(bool hide) { m_autoHide = hide; } + bool hasAutoHide() const { return m_autoHide; } private: float m_iconOpacity; + bool m_autoHide; + QPixmap m_pixmap; }; @@ -68,50 +75,49 @@ class QTCREATOR_UTILS_EXPORT FancyLineEdit : public QLineEdit Q_DISABLE_COPY(FancyLineEdit) Q_OBJECT Q_ENUMS(Side) - Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap DESIGNABLE true) - Q_PROPERTY(Side side READ side WRITE setSide DESIGNABLE true) - Q_PROPERTY(bool menuTabFocusTrigger READ hasMenuTabFocusTrigger WRITE setMenuTabFocusTrigger DESIGNABLE true) - Q_PROPERTY(bool autoHideIcon READ autoHideIcon WRITE setAutoHideIcon DESIGNABLE true) public: - enum Side {Left, Right}; + enum Side {Left = 0, Right = 1}; explicit FancyLineEdit(QWidget *parent = 0); ~FancyLineEdit(); - QPixmap pixmap() const; + QPixmap buttonPixmap(Side side) const; + void setButtonPixmap(Side side, const QPixmap &pixmap); - void setMenu(QMenu *menu); - QMenu *menu() const; + QMenu *buttonMenu(Side side) const; + void setButtonMenu(Side side, QMenu *menu); - void setSide(Side side); - Side side() const; + void setButtonVisible(Side side, bool visible); + bool isButtonVisible(Side side) const; - void setButtonToolTip(const QString &); - void setButtonFocusPolicy(Qt::FocusPolicy policy); + void setButtonToolTip(Side side, const QString &); + void setButtonFocusPolicy(Side side, Qt::FocusPolicy policy); // Set whether tabbing in will trigger the menu. - bool hasMenuTabFocusTrigger() const; - void setMenuTabFocusTrigger(bool v); + void setMenuTabFocusTrigger(Side side, bool v); + bool hasMenuTabFocusTrigger(Side side) const; // Set if icon should be hidden when text is empty - bool autoHideIcon() const; - void setAutoHideIcon(bool h); + void setAutoHideButton(Side side, bool h); + bool hasAutoHideButton(Side side) const; signals: - void buttonClicked(); + void buttonClicked(Utils::FancyLineEdit::Side side); + void leftButtonClicked(); + void rightButtonClicked(); -public slots: - void setPixmap(const QPixmap &pixmap); - void checkButton(const QString &); +private slots: + void checkButtons(const QString &); void iconClicked(); protected: virtual void resizeEvent(QResizeEvent *e); private: + void updateMargins(); + void updateButtonPositions(); friend class Utils::FancyLineEditPrivate; - bool isSideStored() const; FancyLineEditPrivate *m_d; QString m_oldText; diff --git a/src/libs/utils/filterlineedit.cpp b/src/libs/utils/filterlineedit.cpp index 505b38c64a2..f74eb392ddf 100644 --- a/src/libs/utils/filterlineedit.cpp +++ b/src/libs/utils/filterlineedit.cpp @@ -35,11 +35,20 @@ FilterLineEdit::FilterLineEdit(QWidget *parent) : FancyLineEdit(parent), m_lastFilterText(text()) { - setSide(Utils::FancyLineEdit::Right); + // KDE has custom icons for this. Notice that icon namings are counter intuitive + // If these icons are not avaiable we use the freedesktop standard name before + // falling back to a bundled resource + QIcon icon = QIcon::fromTheme(layoutDirection() == Qt::LeftToRight ? + QLatin1String("edit-clear-locationbar-rtl") : + QLatin1String("edit-clear-locationbar-ltr"), + QIcon::fromTheme("edit-clear", QIcon(QLatin1String(":/core/images/editclear.png")))); + + setButtonPixmap(Right, icon.pixmap(16)); + setButtonVisible(Right, true); setPlaceholderText(tr("Filter")); - setButtonToolTip(tr("Clear text")); - setAutoHideIcon(true); - connect(this, SIGNAL(buttonClicked()), this, SLOT(clear())); + setButtonToolTip(Right, tr("Clear text")); + setAutoHideButton(Right, true); + connect(this, SIGNAL(rightButtonClicked()), this, SLOT(clear())); connect(this, SIGNAL(textChanged(QString)), this, SLOT(slotTextChanged())); } diff --git a/src/plugins/coreplugin/actionmanager/commandmappings.cpp b/src/plugins/coreplugin/actionmanager/commandmappings.cpp index c98e574dac1..c62aa118270 100644 --- a/src/plugins/coreplugin/actionmanager/commandmappings.cpp +++ b/src/plugins/coreplugin/actionmanager/commandmappings.cpp @@ -70,11 +70,10 @@ QWidget *CommandMappings::createPage(QWidget *parent) QWidget *w = new QWidget(parent); m_page->setupUi(w); m_page->resetButton->setIcon(QPixmap(Constants::ICON_RESET)); - m_page->targetEdit->setSide(Utils::FancyLineEdit::Right); - m_page->targetEdit->setAutoHideIcon(true); + m_page->targetEdit->setAutoHideButton(Utils::FancyLineEdit::Right, true); m_page->targetEdit->installEventFilter(this); - connect(m_page->targetEdit, SIGNAL(buttonClicked()), + connect(m_page->targetEdit, SIGNAL(buttonClicked(Utils::FancyLineEdit::Side)), this, SLOT(removeTargetIdentifier())); connect(m_page->resetButton, SIGNAL(clicked()), this, SLOT(resetTargetIdentifier())); diff --git a/src/plugins/coreplugin/actionmanager/commandmappings.ui b/src/plugins/coreplugin/actionmanager/commandmappings.ui index 3e0150d2718..6bbbdf9f46a 100644 --- a/src/plugins/coreplugin/actionmanager/commandmappings.ui +++ b/src/plugins/coreplugin/actionmanager/commandmappings.ui @@ -112,7 +112,7 @@ </widget> </item> <item> - <widget class="Utils::FancyLineEdit" name="targetEdit"/> + <widget class="Utils::FilterLineEdit" name="targetEdit"/> </item> <item> <widget class="QToolButton" name="resetButton"> diff --git a/src/plugins/find/findtoolbar.cpp b/src/plugins/find/findtoolbar.cpp index 2aad64b1ab0..2dc93236832 100644 --- a/src/plugins/find/findtoolbar.cpp +++ b/src/plugins/find/findtoolbar.cpp @@ -97,9 +97,11 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen m_ui.findEdit->setCompleter(m_findCompleter); m_ui.replaceEdit->setCompleter(m_replaceCompleter); - m_ui.findEdit->setSide(Utils::FancyLineEdit::Right); QMenu *lineEditMenu = new QMenu(m_ui.findEdit); - m_ui.findEdit->setMenu(lineEditMenu); + m_ui.findEdit->setButtonMenu(Utils::FancyLineEdit::Left, lineEditMenu); + m_ui.findEdit->setButtonVisible(Utils::FancyLineEdit::Left, true); + m_ui.findEdit->setPlaceholderText(QString()); + m_ui.replaceEdit->setPlaceholderText(QString()); connect(m_ui.findEdit, SIGNAL(textChanged(const QString&)), this, SLOT(invokeFindIncremental())); connect(m_ui.findEdit, SIGNAL(returnPressed()), this, SLOT(invokeFindEnter())); @@ -503,27 +505,33 @@ void FindToolBar::updateIcons() bool casesensitive = effectiveFlags & IFindSupport::FindCaseSensitively; bool wholewords = effectiveFlags & IFindSupport::FindWholeWords; bool regexp = effectiveFlags & IFindSupport::FindRegularExpression; - QPixmap pixmap(17, 17); + int width = 0; + if (casesensitive) width += 6; + if (wholewords) width += 6; + if (regexp) width += 6; + if (width == 0) width = 18; + --width; + QPixmap pixmap(width, 17); pixmap.fill(Qt::transparent); QPainter painter(&pixmap); - int x = 16; + int x = 0; if (casesensitive) { - painter.drawPixmap(x - 10, 0, m_casesensitiveIcon); - x -= 6; + painter.drawPixmap(x - 6, 0, m_casesensitiveIcon); + x += 6; } if (wholewords) { - painter.drawPixmap(x - 10, 0, m_wholewordsIcon); - x -= 6; + painter.drawPixmap(x - 6, 0, m_wholewordsIcon); + x += 6; } if (regexp) { - painter.drawPixmap(x - 10, 0, m_regexpIcon); + painter.drawPixmap(x - 6, 0, m_regexpIcon); } if (!casesensitive && !wholewords && !regexp) { QPixmap mag(Core::Constants::ICON_MAGNIFIER); painter.drawPixmap(0, (pixmap.height() - mag.height()) / 2, mag); } - m_ui.findEdit->setPixmap(pixmap); + m_ui.findEdit->setButtonPixmap(Utils::FancyLineEdit::Left, pixmap); } IFindSupport::FindFlags FindToolBar::effectiveFindFlags() diff --git a/src/plugins/find/findwidget.ui b/src/plugins/find/findwidget.ui index 59153e49362..0e9b1cafe7a 100644 --- a/src/plugins/find/findwidget.ui +++ b/src/plugins/find/findwidget.ui @@ -40,7 +40,7 @@ </widget> </item> <item row="0" column="1"> - <widget class="Utils::FancyLineEdit" name="findEdit"/> + <widget class="Utils::FilterLineEdit" name="findEdit"/> </item> <item row="0" column="2"> <layout class="QHBoxLayout" name="horizontalLayout_2"> @@ -100,7 +100,7 @@ </widget> </item> <item row="1" column="1"> - <widget class="QLineEdit" name="replaceEdit"/> + <widget class="Utils::FilterLineEdit" name="replaceEdit"/> </item> <item row="1" column="2"> <layout class="QHBoxLayout" name="horizontalLayout"> @@ -162,9 +162,9 @@ </widget> <customwidgets> <customwidget> - <class>Utils::FancyLineEdit</class> + <class>Utils::FilterLineEdit</class> <extends>QLineEdit</extends> - <header location="global">utils/fancylineedit.h</header> + <header location="global">utils/filterlineedit.h</header> </customwidget> </customwidgets> <tabstops> diff --git a/src/plugins/locator/locatorwidget.cpp b/src/plugins/locator/locatorwidget.cpp index 8cb68ab7e98..135132babfe 100644 --- a/src/plugins/locator/locatorwidget.cpp +++ b/src/plugins/locator/locatorwidget.cpp @@ -46,7 +46,7 @@ QT_END_NAMESPACE #include <coreplugin/modemanager.h> #include <coreplugin/coreconstants.h> #include <coreplugin/fileiconprovider.h> -#include <utils/fancylineedit.h> +#include <utils/filterlineedit.h> #include <utils/qtcassert.h> #include <QtCore/QFileInfo> @@ -266,7 +266,7 @@ LocatorWidget::LocatorWidget(LocatorPlugin *qop) : m_filterMenu(new QMenu(this)), m_refreshAction(new QAction(tr("Refresh"), this)), m_configureAction(new QAction(tr("Configure..."), this)), - m_fileLineEdit(new Utils::FancyLineEdit) + m_fileLineEdit(new Utils::FilterLineEdit) { // Explicitly hide the completion list popup. m_completionList->hide(); @@ -287,12 +287,13 @@ LocatorWidget::LocatorWidget(LocatorPlugin *qop) : setWindowIcon(QIcon(":/locator/images/locator.png")); QPixmap image(Core::Constants::ICON_MAGNIFIER); - m_fileLineEdit->setPixmap(image); + m_fileLineEdit->setButtonPixmap(Utils::FancyLineEdit::Left, image); m_fileLineEdit->setPlaceholderText(tr("Type to locate")); - m_fileLineEdit->setButtonToolTip(tr("Options")); + m_fileLineEdit->setButtonToolTip(Utils::FancyLineEdit::Left, tr("Options")); m_fileLineEdit->setFocusPolicy(Qt::ClickFocus); + m_fileLineEdit->setButtonVisible(Utils::FancyLineEdit::Left, true); // We set click focus since otherwise you will always get two popups - m_fileLineEdit->setButtonFocusPolicy(Qt::ClickFocus); + m_fileLineEdit->setButtonFocusPolicy(Utils::FancyLineEdit::Left, Qt::ClickFocus); m_fileLineEdit->setAttribute(Qt::WA_MacShowFocusRect, false); m_fileLineEdit->installEventFilter(this); @@ -306,11 +307,11 @@ LocatorWidget::LocatorWidget(LocatorPlugin *qop) : m_filterMenu->addAction(m_refreshAction); m_filterMenu->addAction(m_configureAction); - m_fileLineEdit->setMenu( m_filterMenu); + m_fileLineEdit->setButtonMenu(Utils::FancyLineEdit::Left, m_filterMenu); connect(m_refreshAction, SIGNAL(triggered()), m_locatorPlugin, SLOT(refresh())); connect(m_configureAction, SIGNAL(triggered()), this, SLOT(showConfigureDialog())); - connect(m_fileLineEdit, SIGNAL(textEdited(const QString&)), + connect(m_fileLineEdit, SIGNAL(textChanged(const QString&)), this, SLOT(showPopup())); connect(m_completionList, SIGNAL(activated(QModelIndex)), this, SLOT(acceptCurrentEntry())); diff --git a/src/plugins/locator/locatorwidget.h b/src/plugins/locator/locatorwidget.h index 60d4330a3e9..4f112cff768 100644 --- a/src/plugins/locator/locatorwidget.h +++ b/src/plugins/locator/locatorwidget.h @@ -43,7 +43,7 @@ class QTreeView; QT_END_NAMESPACE namespace Utils { - class FancyLineEdit; + class FilterLineEdit; } namespace Locator { @@ -86,7 +86,7 @@ private: QMenu *m_filterMenu; QAction *m_refreshAction; QAction *m_configureAction; - Utils::FancyLineEdit *m_fileLineEdit; + Utils::FilterLineEdit *m_fileLineEdit; }; } // namespace Internal diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.cpp index 48164c5f9ee..7e438b11081 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.cpp @@ -185,7 +185,7 @@ ItemLibrary::ItemLibrary(QWidget *parent) : lineEditLayout->addWidget(m_d->m_lineEdit, 1, 1, 1, 1); lineEditLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Fixed, QSizePolicy::Fixed), 1, 2); connect(m_d->m_lineEdit, SIGNAL(filterChanged(QString)), this, SLOT(setSearchFilter(QString))); - connect(m_d->m_lineEdit, SIGNAL(buttonClicked()), this, SLOT(clearLineEditFocus())); + connect(m_d->m_lineEdit, SIGNAL(buttonClicked(Utils::FancyLineEdit::Side)), this, SLOT(clearLineEditFocus())); m_d->m_stackedWidget = new QStackedWidget(this); m_d->m_stackedWidget->addWidget(m_d->m_itemsView); diff --git a/src/tools/qtcreatorwidgets/customwidgets.cpp b/src/tools/qtcreatorwidgets/customwidgets.cpp index cc0a98e76f5..42aea5e5454 100644 --- a/src/tools/qtcreatorwidgets/customwidgets.cpp +++ b/src/tools/qtcreatorwidgets/customwidgets.cpp @@ -140,9 +140,12 @@ QtColorButton_CW::QtColorButton_CW(QObject *parent) : QWidget *FancyLineEdit_CW::createWidget(QWidget *parent) { Utils::FancyLineEdit *fle = new Utils::FancyLineEdit(parent); + fle->setButtonVisible(Utils::FancyLineEdit::Left, true); + fle->setButtonPixmap(Utils::FancyLineEdit::Left, + fle->style()->standardIcon(QStyle::SP_ArrowRight).pixmap(16)); QMenu *menu = new QMenu(fle); - menu->addAction("Test"); - fle->setMenu(menu); + menu->addAction(QLatin1String("Example")); + fle->setButtonMenu(Utils::FancyLineEdit::Left, menu); return fle; } diff --git a/src/tools/qtcreatorwidgets/qtcreatorwidgets.pro b/src/tools/qtcreatorwidgets/qtcreatorwidgets.pro index 81e989d4b28..5e7352264b1 100644 --- a/src/tools/qtcreatorwidgets/qtcreatorwidgets.pro +++ b/src/tools/qtcreatorwidgets/qtcreatorwidgets.pro @@ -27,7 +27,7 @@ linux-*{ INCLUDEPATH += ../../../src/libs macx { - LIBS += -L../../../bin/QtCreator.app/Contents/PlugIns + LIBS += -L"../../../bin/Qt Creator.app/Contents/PlugIns" CONFIG(debug, debug|release):LIBS += -lUtils_debug else:LIBS += -lUtils } else:win32 { -- GitLab