/* ============================================================ * * This file is a part of the rekonq project * * Copyright (C) 2009 by Andrea Diamantini * Copyright (C) 2009 by Paweł Prażak * Copyright (C) 2009 by Lionel Chauvin * * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License or (at your option) version 3 or any later version * accepted by the membership of KDE e.V. (or its successor approved * by the membership of KDE e.V.), which shall act as a proxy * defined in Section 14 of version 3 of the license. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ============================================================ */ // Self Includes #include "lineedit.h" #include "lineedit.moc" // KDE Includes #include #include #include #include // Qt Includes #include #include #include #include #include IconButton::IconButton(QWidget *parent) : QToolButton(parent) { setToolButtonStyle(Qt::ToolButtonIconOnly); setStyleSheet("IconButton { background-color:transparent; border: none; padding: 0px}"); setCursor(Qt::ArrowCursor); } // ----------------------------------------------------------------------------------------------------------- LineEdit::LineEdit(QWidget* parent) : KLineEdit(parent) , _icon( new IconButton(this) ) { // cosmetic setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); setMinimumWidth(200); setMinimumHeight(26); // initial style setStyleSheet( QString("LineEdit { padding: 0 0 0 %1px;} ").arg(_icon->sizeHint().width()) ); // doesn't show the clear button setClearButtonShown(false); // trap Key_Enter & Key_Return events, while emitting the returnPressed signal setTrapReturnKey(true); // insert decoded URLs setUrlDropsEnabled(true); // accept focus, via tabbing, clicking & wheeling setFocusPolicy(Qt::WheelFocus); // disable completion object (we have our own :) ) setCompletionObject(0); } LineEdit::~LineEdit() { delete _icon; } void LineEdit::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Escape) { clearFocus(); event->accept(); } KLineEdit::keyPressEvent(event); } void LineEdit::mouseDoubleClickEvent(QMouseEvent *) { selectAll(); } IconButton *LineEdit::iconButton() const { return _icon; } void LineEdit::paintEvent(QPaintEvent *event) { // you need this before our code to draw inside the line edit.. KLineEdit::paintEvent(event); if (text().isEmpty()) { QStyleOptionFrame option; initStyleOption(&option); QRect textRect = style()->subElementRect(QStyle::SE_LineEditContents, &option, this); QPainter painter(this); painter.setPen(Qt::gray); painter.drawText( textRect, Qt::AlignCenter, i18n("Search Bookmarks, History, Web.. just start typing here!") ); } } IconButton *LineEdit::addRightIcon(LineEdit::icon ic) { IconButton *rightIcon = new IconButton(this); switch(ic) { case LineEdit::KGet: rightIcon->setIcon( KIcon("download") ); rightIcon->setToolTip( i18n("List all links with KGet") ); break; case LineEdit::RSS: rightIcon->setIcon( KIcon("application-rss+xml") ); rightIcon->setToolTip( i18n("List all available RSS feeds") ); break; case LineEdit::SSL: rightIcon->setIcon( KIcon("object-locked") ); rightIcon->setToolTip( i18n("Show SSL Infos") ); break; default: kDebug() << "ERROR.. default non extant case!!"; break; } _rightIconsList << rightIcon; int iconsCount = _rightIconsList.count(); rightIcon->move( width() - 23*iconsCount, 6); rightIcon->show(); return rightIcon; } void LineEdit::clearRightIcons() { qDeleteAll(_rightIconsList); _rightIconsList.clear(); } void LineEdit::resizeEvent(QResizeEvent *event) { int newHeight = ( height() - 19 )/2; _icon->move(4, newHeight ); int iconsCount = _rightIconsList.count(); int w = width(); for(int i = 0; i < iconsCount; ++i) { IconButton *bt = _rightIconsList.at(i); bt->move( w - 25*(i+1), newHeight ); } KLineEdit::resizeEvent(event); }