defuze.me  Client
clearablelineedit.cpp
00001 /**************************************************************************
00002 ** defuze.me Epitech Innovative Project
00003 **
00004 ** Copyright 2010-2011
00005 **   Athena Calmettes - Jocelyn De La Rosa - Francois Gaillard
00006 **   Adrien Jarthon - Alexandre Moore - Luc Peres - Arnaud Sellier
00007 **
00008 ** All rights reserved.
00009 **************************************************************************/
00010 
00011 #include "clearablelineedit.hpp"
00012 
00013 #include <QToolButton>
00014 #include <QStyle>
00015 
00016 ClearableLineEdit::ClearableLineEdit(QWidget *parent) : QLineEdit(parent)
00017 {
00018     clearButton = new QToolButton(this);
00019     QPixmap pixmap(":/icons/clear");
00020     clearButton->setIcon(QIcon(pixmap));
00021     clearButton->setIconSize(pixmap.size());
00022     clearButton->setCursor(Qt::ArrowCursor);
00023     clearButton->setStyleSheet("QToolButton { border: none; padding: 0px; }");
00024     clearButton->hide();
00025     connect(clearButton, SIGNAL(clicked()), this, SLOT(clear()));
00026     connect(this, SIGNAL(textChanged(const QString&)), this, SLOT(updateCloseButton(const QString&)));
00027     int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
00028     setStyleSheet(QString("QLineEdit { border-radius: 10px; padding-left: 5px; padding-right: %1px; } ").arg(clearButton->sizeHint().width() + frameWidth + 1));
00029     QSize msz = minimumSizeHint();
00030     setMinimumSize(qMax(msz.width(), clearButton->sizeHint().height() + frameWidth * 2 + 2),
00031                     qMax(msz.height(), clearButton->sizeHint().height() + frameWidth * 2 + 2));
00032 }
00033 
00034 void    ClearableLineEdit::resizeEvent(QResizeEvent *)
00035 {
00036     QSize sz = clearButton->sizeHint();
00037     int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
00038     clearButton->move(rect().right() - frameWidth - sz.width() - 1,
00039                         (rect().bottom() + 1 - sz.height())/2);
00040 }
00041 
00042 void ClearableLineEdit::updateCloseButton(const QString& text)
00043 {
00044     clearButton->setVisible(!text.isEmpty());
00045 }