ginebra2/TitleUrlContainerSnippet.cpp
author hgs
Fri, 17 Sep 2010 12:11:40 -0400
changeset 12 afcd8e6d025b
child 16 3c88a81ff781
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
 * All rights reserved.
hgs
parents:
diff changeset
     4
 *
hgs
parents:
diff changeset
     5
 * This program is free software: you can redistribute it and/or modify
hgs
parents:
diff changeset
     6
 * it under the terms of the GNU Lesser General Public License as published by
hgs
parents:
diff changeset
     7
 * the Free Software Foundation, version 2.1 of the License.
hgs
parents:
diff changeset
     8
 *
hgs
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
hgs
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
hgs
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
hgs
parents:
diff changeset
    12
 * GNU Lesser General Public License for more details.
hgs
parents:
diff changeset
    13
 *
hgs
parents:
diff changeset
    14
 * You should have received a copy of the GNU Lesser General Public License
hgs
parents:
diff changeset
    15
 * along with this program.  If not,
hgs
parents:
diff changeset
    16
 * see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
hgs
parents:
diff changeset
    17
 *
hgs
parents:
diff changeset
    18
 * Description:
hgs
parents:
diff changeset
    19
 * This class extends WebChromeContainerSnippet class 
hgs
parents:
diff changeset
    20
 *
hgs
parents:
diff changeset
    21
 */
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include "ActionButton.h"
hgs
parents:
diff changeset
    24
#include "ActionButtonSnippet.h"
hgs
parents:
diff changeset
    25
#include "ChromeRenderer.h"
hgs
parents:
diff changeset
    26
#include "ChromeWidget.h"
hgs
parents:
diff changeset
    27
#include "NativeChromeItem.h"
hgs
parents:
diff changeset
    28
#include "TitleUrlContainerSnippet.h"
hgs
parents:
diff changeset
    29
#include "UrlSearchSnippet.h"
hgs
parents:
diff changeset
    30
#include "WebChromeSnippet.h"
hgs
parents:
diff changeset
    31
#include "Utilities.h"
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
#include "QGraphicsPixmapItem"
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
#include "ChromeEffect.h"
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
#define BACKGROUND_GRADIENT_START "#232323"
hgs
parents:
diff changeset
    38
#define BACKGROUND_GRADIENT_END "#000000"
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
#include <QDebug>
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
namespace GVA {
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// Need to read this from the platform later
hgs
parents:
diff changeset
    45
#define ICONWIDTH 65
hgs
parents:
diff changeset
    46
#define ICONHEIGHT 44
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
TitleUrlContainerItem::TitleUrlContainerItem(ChromeSnippet * snippet, ChromeWidget * chrome, QGraphicsItem * parent)
hgs
parents:
diff changeset
    49
: NativeChromeItem(snippet, parent)
hgs
parents:
diff changeset
    50
, m_chrome(chrome)
hgs
parents:
diff changeset
    51
{
hgs
parents:
diff changeset
    52
    setProperties();    
hgs
parents:
diff changeset
    53
    // Create the view port widget
hgs
parents:
diff changeset
    54
    m_viewPort = new QGraphicsWidget(this);
hgs
parents:
diff changeset
    55
    m_viewPort->setFlags(QGraphicsItem::ItemClipsChildrenToShape);
hgs
parents:
diff changeset
    56
    
hgs
parents:
diff changeset
    57
    // Create title-url widget(still by the name UrlSearchItem)
hgs
parents:
diff changeset
    58
    m_urlTileWidget = new GUrlSearchItem(snippet, chrome, m_viewPort); 
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
    QPixmap dividerPixmap;
hgs
parents:
diff changeset
    61
    dividerPixmap.load(":/chrome/bedrockchrome/urlsearch.snippet/icons/URL_search_divider.png", "PNG");
hgs
parents:
diff changeset
    62
    m_dividerImage = new QGraphicsPixmapItem(dividerPixmap, m_viewPort);
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
    QAction * backAction = new QAction(this);
hgs
parents:
diff changeset
    65
    connect(backAction, SIGNAL(triggered()), m_chrome, SIGNAL(goToBackground()));
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
    m_backStepButton = new ActionButton(snippet, m_viewPort);
hgs
parents:
diff changeset
    68
    m_backStepButton->setAction(backAction);
hgs
parents:
diff changeset
    69
    m_backStepButton->setActiveOnPress(true);
hgs
parents:
diff changeset
    70
    m_backStepButton->addIcon(":/chrome/bedrockchrome/urlsearch.snippet/icons/backstep.png", QIcon::Normal);
hgs
parents:
diff changeset
    71
    m_backStepButton->addIcon(":/chrome/bedrockchrome/urlsearch.snippet/icons/backstep_pressed.png", QIcon::Active);
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
    // Monitor resize events.
hgs
parents:
diff changeset
    74
    safe_connect(m_chrome->renderer(), SIGNAL(chromeResized()), this, SLOT(onChromeResize()));
hgs
parents:
diff changeset
    75
    safe_connect(m_urlTileWidget, SIGNAL(changeEditMode(bool)), this, SLOT(changeLayout(bool)));
hgs
parents:
diff changeset
    76
}
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
TitleUrlContainerItem::~TitleUrlContainerItem()
hgs
parents:
diff changeset
    79
{
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
}
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
void TitleUrlContainerItem::setProperties() {
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
  m_pen.setWidth(1);
hgs
parents:
diff changeset
    86
  m_pen.setBrush(QBrush(QColor(Qt::black)));
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
  m_grad.setColorAt(0, BACKGROUND_GRADIENT_START);
hgs
parents:
diff changeset
    89
  m_grad.setColorAt(1, BACKGROUND_GRADIENT_END);
hgs
parents:
diff changeset
    90
}
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
void TitleUrlContainerItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
hgs
parents:
diff changeset
    93
{
hgs
parents:
diff changeset
    94
  Q_UNUSED(option)
hgs
parents:
diff changeset
    95
  Q_UNUSED(widget)
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
  painter->save();
hgs
parents:
diff changeset
    98
 
hgs
parents:
diff changeset
    99
  painter->setRenderHint(QPainter::Antialiasing);
hgs
parents:
diff changeset
   100
  painter->setPen(m_pen);
hgs
parents:
diff changeset
   101
  if (snippet()->enabled()) {
hgs
parents:
diff changeset
   102
      painter->fillRect(boundingRect(), QBrush(m_grad));
hgs
parents:
diff changeset
   103
  }
hgs
parents:
diff changeset
   104
  else {
hgs
parents:
diff changeset
   105
      painter->fillRect(boundingRect(), QColor(Qt::gray));
hgs
parents:
diff changeset
   106
      painter->setOpacity(ChromeEffect::disabledOpacity);
hgs
parents:
diff changeset
   107
      painter->fillRect(boundingRect(), ChromeEffect::disabledColor);
hgs
parents:
diff changeset
   108
  }
hgs
parents:
diff changeset
   109
  
hgs
parents:
diff changeset
   110
  // top border
hgs
parents:
diff changeset
   111
  painter->setPen(QPen(QColor(53,53,53)));
hgs
parents:
diff changeset
   112
  painter->drawLine(boundingRect().x(), boundingRect().y(), boundingRect().x() + boundingRect().width(), boundingRect().y());
hgs
parents:
diff changeset
   113
  // bottom border
hgs
parents:
diff changeset
   114
  painter->setPen(QPen(QColor(76,76,78)));
hgs
parents:
diff changeset
   115
  painter->drawLine(boundingRect().x(), boundingRect().y() + boundingRect().height(), boundingRect().x() + boundingRect().width(), boundingRect().y() + boundingRect().height());
hgs
parents:
diff changeset
   116
  // right border
hgs
parents:
diff changeset
   117
  painter->setPen(QPen(QColor(0,0,0)));
hgs
parents:
diff changeset
   118
  painter->drawLine(boundingRect().x() + boundingRect().width(), boundingRect().y(), boundingRect().x() + boundingRect().width(), boundingRect().y() + boundingRect().height());
hgs
parents:
diff changeset
   119
  // left border
hgs
parents:
diff changeset
   120
  painter->setPen(m_pen);
hgs
parents:
diff changeset
   121
  QLinearGradient grad = QLinearGradient();
hgs
parents:
diff changeset
   122
  grad.setColorAt(0, QColor(41,41,41));
hgs
parents:
diff changeset
   123
  grad.setColorAt(0.5, QColor(83,83,84));
hgs
parents:
diff changeset
   124
  grad.setColorAt(1, QColor(2,2,2));
hgs
parents:
diff changeset
   125
  painter->fillRect(QRect(boundingRect().x(), boundingRect().y(), 1, boundingRect().height()), QBrush(grad));
hgs
parents:
diff changeset
   126
  
hgs
parents:
diff changeset
   127
  painter->restore();
hgs
parents:
diff changeset
   128
  
hgs
parents:
diff changeset
   129
  NativeChromeItem::paint(painter, option, widget);
hgs
parents:
diff changeset
   130
}
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
void TitleUrlContainerItem::onChromeResize() {
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
    QWebElement we = m_snippet->element();
hgs
parents:
diff changeset
   135
    QRectF g = we.geometry();
hgs
parents:
diff changeset
   136
    QGraphicsWidget::resize(g.width(), g.height());
hgs
parents:
diff changeset
   137
}
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
void TitleUrlContainerItem::resizeEvent(QGraphicsSceneResizeEvent * event)
hgs
parents:
diff changeset
   140
{
hgs
parents:
diff changeset
   141
    QSizeF size = event->newSize();
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
    qreal width = size.width();
hgs
parents:
diff changeset
   144
    qreal height = size.height();
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
    m_viewPort->setGeometry(
hgs
parents:
diff changeset
   147
            0,
hgs
parents:
diff changeset
   148
            0,
hgs
parents:
diff changeset
   149
            width,
hgs
parents:
diff changeset
   150
            height);
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
    m_backStepButton->setGeometry(
hgs
parents:
diff changeset
   153
                width - ICONWIDTH, 
hgs
parents:
diff changeset
   154
                (height - ICONHEIGHT)/2,
hgs
parents:
diff changeset
   155
                ICONWIDTH,
hgs
parents:
diff changeset
   156
                ICONHEIGHT);
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
    // When we first get resize event, the widget is not yet set to visible by
hgs
parents:
diff changeset
   159
    // Ginebra. If the widget is not visible and for later resize events, if back-step
hgs
parents:
diff changeset
   160
    // button is visible, set the width of url-title widget taking into account
hgs
parents:
diff changeset
   161
    // the width of back-step button
hgs
parents:
diff changeset
   162
    if ((!this->isVisible()) || m_backStepButton->isVisible()) {
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
        width =  width - ICONWIDTH - m_dividerImage->boundingRect().width();
hgs
parents:
diff changeset
   165
    }
hgs
parents:
diff changeset
   166
    m_urlTileWidget->setGeometry(0,
hgs
parents:
diff changeset
   167
                0,
hgs
parents:
diff changeset
   168
                width,
hgs
parents:
diff changeset
   169
                height);
hgs
parents:
diff changeset
   170
    
hgs
parents:
diff changeset
   171
    m_dividerImage->setPos(m_urlTileWidget->rect().width() + 1, (height - m_dividerImage->boundingRect().height())/2);
hgs
parents:
diff changeset
   172
}
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
void TitleUrlContainerItem::changeLayout(bool editMode){
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
    qreal width = m_viewPort->geometry().width();
hgs
parents:
diff changeset
   178
    qreal height = m_viewPort->geometry().height();
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
    // If we are changing to edit mode, we need to hide the back-step button 
hgs
parents:
diff changeset
   181
    if (editMode) {
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
        m_backStepButton->hide();
hgs
parents:
diff changeset
   184
        m_dividerImage->hide();
hgs
parents:
diff changeset
   185
    }
hgs
parents:
diff changeset
   186
    else {
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
        // show back-step button and re-layout the widgets
hgs
parents:
diff changeset
   189
        m_backStepButton->show();
hgs
parents:
diff changeset
   190
        m_dividerImage->show();
hgs
parents:
diff changeset
   191
        width = width - ICONWIDTH - m_dividerImage->boundingRect().width();
hgs
parents:
diff changeset
   192
    }
hgs
parents:
diff changeset
   193
    m_urlTileWidget->setGeometry(0,
hgs
parents:
diff changeset
   194
                0,
hgs
parents:
diff changeset
   195
                width,
hgs
parents:
diff changeset
   196
                height);
hgs
parents:
diff changeset
   197
}
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
QString TitleUrlContainerItem::url() const
hgs
parents:
diff changeset
   200
{
hgs
parents:
diff changeset
   201
    return m_urlTileWidget->url();
hgs
parents:
diff changeset
   202
}
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
// TitleUrlContainerSnippet class
hgs
parents:
diff changeset
   205
TitleUrlContainerSnippet::TitleUrlContainerSnippet(const QString & elementId, ChromeWidget * chrome,
hgs
parents:
diff changeset
   206
                                                   QGraphicsWidget * widget, const QWebElement & element)
hgs
parents:
diff changeset
   207
  : ChromeSnippet(elementId, chrome, widget, element)
hgs
parents:
diff changeset
   208
{
hgs
parents:
diff changeset
   209
}
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
TitleUrlContainerSnippet::~TitleUrlContainerSnippet()
hgs
parents:
diff changeset
   212
{
hgs
parents:
diff changeset
   213
}
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
TitleUrlContainerSnippet * TitleUrlContainerSnippet::instance(const QString& elementId, ChromeWidget * chrome, const QWebElement & element)
hgs
parents:
diff changeset
   216
{
hgs
parents:
diff changeset
   217
    TitleUrlContainerSnippet * that = new TitleUrlContainerSnippet( elementId, chrome, 0, element );
hgs
parents:
diff changeset
   218
    that->setChromeWidget( new TitleUrlContainerItem(that, chrome));
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
    return that;
hgs
parents:
diff changeset
   221
}
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
QString TitleUrlContainerSnippet::url() const
hgs
parents:
diff changeset
   224
{
hgs
parents:
diff changeset
   225
    TitleUrlContainerItem const *urlContainer;
hgs
parents:
diff changeset
   226
    
hgs
parents:
diff changeset
   227
    urlContainer = dynamic_cast<TitleUrlContainerItem const *> (constWidget());
hgs
parents:
diff changeset
   228
    return urlContainer->url();
hgs
parents:
diff changeset
   229
}
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
} // end of namespace GVA
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234