Home | History | Annotate | Download | only in QtTestBrowser
      1 /*
      2  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
      3  * Copyright (C) 2011 Andreas Kling <kling (at) webkit.org>
      4  *
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 #include "locationedit.h"
     30 
     31 #ifndef QT_NO_INPUTDIALOG
     32 
     33 static const QSize gPageIconSize(16, 16);
     34 
     35 static QPixmap defaultPageIcon()
     36 {
     37     static QPixmap icon;
     38     if (icon.isNull())
     39         icon.load(":/favicon.png");
     40 
     41     return icon;
     42 }
     43 
     44 LocationEdit::LocationEdit(QWidget* parent)
     45     : QLineEdit(parent)
     46     , m_progress(0)
     47 {
     48     m_clearTimer.setSingleShot(true);
     49     connect(&m_clearTimer, SIGNAL(timeout()), this, SLOT(reset()));
     50 
     51     m_pageIconLabel = new QLabel(this);
     52     m_pageIconLabel->setFixedSize(gPageIconSize);
     53     m_pageIconLabel->setPixmap(defaultPageIcon());
     54 }
     55 
     56 void LocationEdit::setPageIcon(const QIcon& icon)
     57 {
     58     if (icon.isNull())
     59         m_pageIconLabel->setPixmap(defaultPageIcon());
     60     else
     61         m_pageIconLabel->setPixmap(icon.pixmap(gPageIconSize));
     62 }
     63 
     64 void LocationEdit::setProgress(int progress)
     65 {
     66     m_clearTimer.stop();
     67     m_progress = progress;
     68     update();
     69 }
     70 
     71 void LocationEdit::reset()
     72 {
     73     setProgress(0);
     74 }
     75 
     76 void LocationEdit::resizeEvent(QResizeEvent*)
     77 {
     78     updateInternalGeometry();
     79 }
     80 
     81 void LocationEdit::updateInternalGeometry()
     82 {
     83     QStyleOptionFrameV3 styleOption;
     84     initStyleOption(&styleOption);
     85 
     86     QRect textRect = style()->subElementRect(QStyle::SE_LineEditContents, &styleOption, this);
     87 
     88     const int spacing = 2;
     89 
     90     int x = textRect.x() + spacing;
     91     int y = (textRect.center().y() + 1) - gPageIconSize.height() / 2;
     92 
     93     m_pageIconLabel->move(x, y);
     94 
     95     QMargins margins = textMargins();
     96     margins.setLeft(m_pageIconLabel->sizeHint().width() + spacing);
     97     setTextMargins(margins);
     98 }
     99 
    100 void LocationEdit::paintEvent(QPaintEvent* ev)
    101 {
    102     QColor backgroundColor = QApplication::palette().color(QPalette::Base);
    103     QColor progressColor = QColor(120, 180, 240);
    104     QPalette p = palette();
    105 
    106     if (!m_progress)
    107         p.setBrush(QPalette::Base, backgroundColor);
    108     else {
    109         QLinearGradient gradient(0, 0, width(), 0);
    110         gradient.setColorAt(0, progressColor);
    111         gradient.setColorAt(((double) m_progress) / 100, progressColor);
    112         if (m_progress != 100)
    113             gradient.setColorAt((double) m_progress / 100 + 0.001, backgroundColor);
    114         p.setBrush(QPalette::Base, gradient);
    115     }
    116     setPalette(p);
    117 
    118     QLineEdit::paintEvent(ev);
    119 
    120     if (m_progress == 100)
    121         m_clearTimer.start(100);
    122 }
    123 
    124 void LocationEdit::focusInEvent(QFocusEvent* ev)
    125 {
    126     QLineEdit::focusInEvent(ev);
    127 #ifdef Q_WS_MAEMO_5
    128     QTimer::singleShot(0, this, SLOT(selectAll()));
    129 #endif
    130 }
    131 
    132 #endif
    133