ginebra2/TitleUrlContainerSnippet.cpp
author hgs
Fri, 15 Oct 2010 17:30:59 -0400
changeset 16 3c88a81ff781
parent 12 afcd8e6d025b
permissions -rw-r--r--
201041
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
16
hgs
parents: 12
diff changeset
    37
#define BACKGROUND_GRADIENT_START "#000000"
hgs
parents: 12
diff changeset
    38
#define BACKGROUND_GRADIENT_END "#333333"
12
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
{
16
hgs
parents: 12
diff changeset
    52
    setObjectName("TitleUrl");
12
hgs
parents:
diff changeset
    53
    setProperties();    
hgs
parents:
diff changeset
    54
    // Create the view port widget
hgs
parents:
diff changeset
    55
    m_viewPort = new QGraphicsWidget(this);
hgs
parents:
diff changeset
    56
    m_viewPort->setFlags(QGraphicsItem::ItemClipsChildrenToShape);
hgs
parents:
diff changeset
    57
    
hgs
parents:
diff changeset
    58
    // Create title-url widget(still by the name UrlSearchItem)
hgs
parents:
diff changeset
    59
    m_urlTileWidget = new GUrlSearchItem(snippet, chrome, m_viewPort); 
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
    QPixmap dividerPixmap;
16
hgs
parents: 12
diff changeset
    62
    dividerPixmap.load(":/urlsearch/URL_search_divider.png", "PNG");
12
hgs
parents:
diff changeset
    63
    m_dividerImage = new QGraphicsPixmapItem(dividerPixmap, m_viewPort);
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
    QAction * backAction = new QAction(this);
hgs
parents:
diff changeset
    66
    connect(backAction, SIGNAL(triggered()), m_chrome, SIGNAL(goToBackground()));
16
hgs
parents: 12
diff changeset
    67
	backAction->setObjectName("BackAction");
12
hgs
parents:
diff changeset
    68
16
hgs
parents: 12
diff changeset
    69
    m_backStepButton = new ActionButton(snippet, "BackStep", m_viewPort);
12
hgs
parents:
diff changeset
    70
    m_backStepButton->setAction(backAction);
hgs
parents:
diff changeset
    71
    m_backStepButton->setActiveOnPress(true);
16
hgs
parents: 12
diff changeset
    72
    //m_backStepButton->addIcon(":/urlsearch/backstep.png", QIcon::Normal);
hgs
parents: 12
diff changeset
    73
    m_backStepButton->addIcon(":/urlsearch/backstep_no_bg.png", QIcon::Normal);
hgs
parents: 12
diff changeset
    74
    m_backStepButton->addIcon(":/urlsearch/backstep_pressed.png", QIcon::Active);
12
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
    // Monitor resize events.
hgs
parents:
diff changeset
    77
    safe_connect(m_chrome->renderer(), SIGNAL(chromeResized()), this, SLOT(onChromeResize()));
hgs
parents:
diff changeset
    78
    safe_connect(m_urlTileWidget, SIGNAL(changeEditMode(bool)), this, SLOT(changeLayout(bool)));
16
hgs
parents: 12
diff changeset
    79
    safe_connect(m_urlTileWidget, SIGNAL(contextEvent(bool)), this, SIGNAL(contextEvent(bool)));
12
hgs
parents:
diff changeset
    80
}
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
TitleUrlContainerItem::~TitleUrlContainerItem()
hgs
parents:
diff changeset
    83
{
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
}
hgs
parents:
diff changeset
    86
16
hgs
parents: 12
diff changeset
    87
void TitleUrlContainerItem::cut()
hgs
parents: 12
diff changeset
    88
{
hgs
parents: 12
diff changeset
    89
    m_urlTileWidget->cut();
hgs
parents: 12
diff changeset
    90
}
hgs
parents: 12
diff changeset
    91
hgs
parents: 12
diff changeset
    92
void TitleUrlContainerItem::copy()
hgs
parents: 12
diff changeset
    93
{
hgs
parents: 12
diff changeset
    94
    m_urlTileWidget->copy();
hgs
parents: 12
diff changeset
    95
}
12
hgs
parents:
diff changeset
    96
16
hgs
parents: 12
diff changeset
    97
void TitleUrlContainerItem::paste()
hgs
parents: 12
diff changeset
    98
{
hgs
parents: 12
diff changeset
    99
    m_urlTileWidget->paste();
hgs
parents: 12
diff changeset
   100
}
12
hgs
parents:
diff changeset
   101
16
hgs
parents: 12
diff changeset
   102
void TitleUrlContainerItem::setContextMenuStatus(bool on)
hgs
parents: 12
diff changeset
   103
{ 
hgs
parents: 12
diff changeset
   104
    m_urlTileWidget->setContextMenuStatus(on);
hgs
parents: 12
diff changeset
   105
}
hgs
parents: 12
diff changeset
   106
hgs
parents: 12
diff changeset
   107
void TitleUrlContainerItem::setProperties() {
12
hgs
parents:
diff changeset
   108
  m_grad.setColorAt(0, BACKGROUND_GRADIENT_START);
hgs
parents:
diff changeset
   109
  m_grad.setColorAt(1, BACKGROUND_GRADIENT_END);
hgs
parents:
diff changeset
   110
}
hgs
parents:
diff changeset
   111
16
hgs
parents: 12
diff changeset
   112
void TitleUrlContainerItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget){
12
hgs
parents:
diff changeset
   113
  Q_UNUSED(option)
hgs
parents:
diff changeset
   114
  Q_UNUSED(widget)
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
  painter->save();
16
hgs
parents: 12
diff changeset
   117
hgs
parents: 12
diff changeset
   118
  qreal bounding_x = boundingRect().x();
hgs
parents: 12
diff changeset
   119
  qreal bounding_y = boundingRect().y();
hgs
parents: 12
diff changeset
   120
  qreal bounding_width = boundingRect().width();
hgs
parents: 12
diff changeset
   121
  qreal bounding_height = boundingRect().height();
hgs
parents: 12
diff changeset
   122
hgs
parents: 12
diff changeset
   123
hgs
parents: 12
diff changeset
   124
  // background
12
hgs
parents:
diff changeset
   125
  painter->setRenderHint(QPainter::Antialiasing);
16
hgs
parents: 12
diff changeset
   126
  painter->setPen(Qt::NoPen);
hgs
parents: 12
diff changeset
   127
  m_grad.setStart(bounding_x, bounding_y + bounding_height);
hgs
parents: 12
diff changeset
   128
  m_grad.setFinalStop(bounding_x, bounding_y);
hgs
parents: 12
diff changeset
   129
  painter->fillRect(boundingRect(), QBrush(m_grad));
12
hgs
parents:
diff changeset
   130
  // top border
hgs
parents:
diff changeset
   131
  painter->setPen(QPen(QColor(53,53,53)));
16
hgs
parents: 12
diff changeset
   132
  painter->drawLine(bounding_x, bounding_y, bounding_x + bounding_width, bounding_y);
12
hgs
parents:
diff changeset
   133
  // bottom border
hgs
parents:
diff changeset
   134
  painter->setPen(QPen(QColor(76,76,78)));
16
hgs
parents: 12
diff changeset
   135
  painter->drawLine(bounding_x, bounding_y + bounding_height, bounding_x + bounding_width, bounding_y + bounding_height);
12
hgs
parents:
diff changeset
   136
  // right border
hgs
parents:
diff changeset
   137
  painter->setPen(QPen(QColor(0,0,0)));
16
hgs
parents: 12
diff changeset
   138
  painter->drawLine(bounding_x + bounding_width, bounding_y, bounding_x + bounding_width, bounding_y + bounding_height);
12
hgs
parents:
diff changeset
   139
  // left border
16
hgs
parents: 12
diff changeset
   140
  painter->setPen(Qt::NoPen);
hgs
parents: 12
diff changeset
   141
  QLinearGradient grad = QLinearGradient(bounding_x, bounding_y, bounding_x, bounding_y + bounding_height);
12
hgs
parents:
diff changeset
   142
  grad.setColorAt(0, QColor(41,41,41));
hgs
parents:
diff changeset
   143
  grad.setColorAt(0.5, QColor(83,83,84));
hgs
parents:
diff changeset
   144
  grad.setColorAt(1, QColor(2,2,2));
16
hgs
parents: 12
diff changeset
   145
  painter->setBrush(QBrush(grad));
hgs
parents: 12
diff changeset
   146
  painter->drawLine(bounding_x, bounding_y, bounding_x, bounding_y + bounding_height);
12
hgs
parents:
diff changeset
   147
  
hgs
parents:
diff changeset
   148
  painter->restore();
hgs
parents:
diff changeset
   149
  
hgs
parents:
diff changeset
   150
  NativeChromeItem::paint(painter, option, widget);
hgs
parents:
diff changeset
   151
}
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
void TitleUrlContainerItem::onChromeResize() {
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
    QWebElement we = m_snippet->element();
hgs
parents:
diff changeset
   156
    QRectF g = we.geometry();
hgs
parents:
diff changeset
   157
    QGraphicsWidget::resize(g.width(), g.height());
hgs
parents:
diff changeset
   158
}
hgs
parents:
diff changeset
   159
16
hgs
parents: 12
diff changeset
   160
void TitleUrlContainerItem::resizeEvent(QGraphicsSceneResizeEvent * event){
12
hgs
parents:
diff changeset
   161
    QSizeF size = event->newSize();
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
    qreal width = size.width();
hgs
parents:
diff changeset
   164
    qreal height = size.height();
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
    m_viewPort->setGeometry(
hgs
parents:
diff changeset
   167
            0,
hgs
parents:
diff changeset
   168
            0,
hgs
parents:
diff changeset
   169
            width,
hgs
parents:
diff changeset
   170
            height);
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
    m_backStepButton->setGeometry(
hgs
parents:
diff changeset
   173
                width - ICONWIDTH, 
16
hgs
parents: 12
diff changeset
   174
                0,
12
hgs
parents:
diff changeset
   175
                ICONWIDTH,
16
hgs
parents: 12
diff changeset
   176
                height);
12
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
    // When we first get resize event, the widget is not yet set to visible by
hgs
parents:
diff changeset
   179
    // Ginebra. If the widget is not visible and for later resize events, if back-step
hgs
parents:
diff changeset
   180
    // button is visible, set the width of url-title widget taking into account
hgs
parents:
diff changeset
   181
    // the width of back-step button
hgs
parents:
diff changeset
   182
    if ((!this->isVisible()) || m_backStepButton->isVisible()) {
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
        width =  width - ICONWIDTH - m_dividerImage->boundingRect().width();
hgs
parents:
diff changeset
   185
    }
hgs
parents:
diff changeset
   186
    m_urlTileWidget->setGeometry(0,
hgs
parents:
diff changeset
   187
                0,
hgs
parents:
diff changeset
   188
                width,
hgs
parents:
diff changeset
   189
                height);
hgs
parents:
diff changeset
   190
    
hgs
parents:
diff changeset
   191
    m_dividerImage->setPos(m_urlTileWidget->rect().width() + 1, (height - m_dividerImage->boundingRect().height())/2);
hgs
parents:
diff changeset
   192
}
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
void TitleUrlContainerItem::changeLayout(bool editMode){
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
    qreal width = m_viewPort->geometry().width();
hgs
parents:
diff changeset
   198
    qreal height = m_viewPort->geometry().height();
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
    // If we are changing to edit mode, we need to hide the back-step button 
hgs
parents:
diff changeset
   201
    if (editMode) {
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
        m_backStepButton->hide();
hgs
parents:
diff changeset
   204
        m_dividerImage->hide();
hgs
parents:
diff changeset
   205
    }
hgs
parents:
diff changeset
   206
    else {
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
        // show back-step button and re-layout the widgets
hgs
parents:
diff changeset
   209
        m_backStepButton->show();
hgs
parents:
diff changeset
   210
        m_dividerImage->show();
hgs
parents:
diff changeset
   211
        width = width - ICONWIDTH - m_dividerImage->boundingRect().width();
hgs
parents:
diff changeset
   212
    }
hgs
parents:
diff changeset
   213
    m_urlTileWidget->setGeometry(0,
hgs
parents:
diff changeset
   214
                0,
hgs
parents:
diff changeset
   215
                width,
hgs
parents:
diff changeset
   216
                height);
hgs
parents:
diff changeset
   217
}
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
QString TitleUrlContainerItem::url() const
hgs
parents:
diff changeset
   220
{
hgs
parents:
diff changeset
   221
    return m_urlTileWidget->url();
hgs
parents:
diff changeset
   222
}
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
// TitleUrlContainerSnippet class
hgs
parents:
diff changeset
   225
TitleUrlContainerSnippet::TitleUrlContainerSnippet(const QString & elementId, ChromeWidget * chrome,
hgs
parents:
diff changeset
   226
                                                   QGraphicsWidget * widget, const QWebElement & element)
hgs
parents:
diff changeset
   227
  : ChromeSnippet(elementId, chrome, widget, element)
hgs
parents:
diff changeset
   228
{
hgs
parents:
diff changeset
   229
}
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
TitleUrlContainerSnippet::~TitleUrlContainerSnippet()
hgs
parents:
diff changeset
   232
{
hgs
parents:
diff changeset
   233
}
hgs
parents:
diff changeset
   234
hgs
parents:
diff changeset
   235
TitleUrlContainerSnippet * TitleUrlContainerSnippet::instance(const QString& elementId, ChromeWidget * chrome, const QWebElement & element)
hgs
parents:
diff changeset
   236
{
hgs
parents:
diff changeset
   237
    TitleUrlContainerSnippet * that = new TitleUrlContainerSnippet( elementId, chrome, 0, element );
16
hgs
parents: 12
diff changeset
   238
    TitleUrlContainerItem * titleUrlContainerItem = new TitleUrlContainerItem(that, chrome);
hgs
parents: 12
diff changeset
   239
    safe_connect(titleUrlContainerItem, SIGNAL(contextEvent(bool)), that, SLOT(sendContextMenuEvent(bool)));
hgs
parents: 12
diff changeset
   240
    that->setChromeWidget(titleUrlContainerItem);
12
hgs
parents:
diff changeset
   241
    return that;
hgs
parents:
diff changeset
   242
}
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
QString TitleUrlContainerSnippet::url() const
hgs
parents:
diff changeset
   245
{
hgs
parents:
diff changeset
   246
    TitleUrlContainerItem const *urlContainer;
hgs
parents:
diff changeset
   247
    
hgs
parents:
diff changeset
   248
    urlContainer = dynamic_cast<TitleUrlContainerItem const *> (constWidget());
hgs
parents:
diff changeset
   249
    return urlContainer->url();
hgs
parents:
diff changeset
   250
}
hgs
parents:
diff changeset
   251
16
hgs
parents: 12
diff changeset
   252
void TitleUrlContainerSnippet::sendContextMenuEvent(bool isContentSelected)
hgs
parents: 12
diff changeset
   253
{
hgs
parents: 12
diff changeset
   254
    emit contextEvent(isContentSelected, elementId());     
hgs
parents: 12
diff changeset
   255
}
hgs
parents: 12
diff changeset
   256
12
hgs
parents:
diff changeset
   257
} // end of namespace GVA
hgs
parents:
diff changeset
   258
hgs
parents:
diff changeset
   259
hgs
parents:
diff changeset
   260