ginebra2/ChromeView.cpp
author hgs
Fri, 17 Sep 2010 12:11:40 -0400
changeset 12 afcd8e6d025b
parent 9 b39122337a00
child 16 3c88a81ff781
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     1
/*
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
* All rights reserved.
3
hgs
parents: 0
diff changeset
     4
*
hgs
parents: 0
diff changeset
     5
* This program is free software: you can redistribute it and/or modify
hgs
parents: 0
diff changeset
     6
* it under the terms of the GNU Lesser General Public License as published by
hgs
parents: 0
diff changeset
     7
* the Free Software Foundation, version 2.1 of the License.
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
*
3
hgs
parents: 0
diff changeset
     9
* This program is distributed in the hope that it will be useful,
hgs
parents: 0
diff changeset
    10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
hgs
parents: 0
diff changeset
    11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
hgs
parents: 0
diff changeset
    12
* GNU Lesser General Public License for more details.
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
*
3
hgs
parents: 0
diff changeset
    14
* You should have received a copy of the GNU Lesser General Public License
hgs
parents: 0
diff changeset
    15
* along with this program.  If not,
hgs
parents: 0
diff changeset
    16
* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
*
3
hgs
parents: 0
diff changeset
    18
* Description:
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
*
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
*/
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    21
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    22
#include <QtGui>
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    23
#include <QWebPage>
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    24
9
hgs
parents: 3
diff changeset
    25
#ifdef ORBIT_UI
hgs
parents: 3
diff changeset
    26
#include <hbview.h>
hgs
parents: 3
diff changeset
    27
#include <hbaction.h>
hgs
parents: 3
diff changeset
    28
#endif
hgs
parents: 3
diff changeset
    29
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    30
#include "ChromeView.h"
3
hgs
parents: 0
diff changeset
    31
#include "ChromeWidget.h" //TODO: get rid of this, refer directly to layout
hgs
parents: 0
diff changeset
    32
#include "ChromeLayout.h" 
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
#ifndef NO_QSTM_GESTURE
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    34
#include "qstmgestureevent.h"
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    35
#endif
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
3
hgs
parents: 0
diff changeset
    37
#ifdef ENABLE_PERF_TRACE
hgs
parents: 0
diff changeset
    38
#include "wrtperftracer.h"
hgs
parents: 0
diff changeset
    39
#endif
hgs
parents: 0
diff changeset
    40
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    41
namespace GVA {
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    42
3
hgs
parents: 0
diff changeset
    43
ChromeView::ChromeView(QGraphicsScene *graphicsScene, ChromeWidget * chrome, QWidget * parent)
hgs
parents: 0
diff changeset
    44
#ifdef ORBIT_UI
hgs
parents: 0
diff changeset
    45
  : HbMainWindow(parent),
hgs
parents: 0
diff changeset
    46
#else
hgs
parents: 0
diff changeset
    47
  : QGraphicsView(graphicsScene, parent),
hgs
parents: 0
diff changeset
    48
#endif // ORBIT_UI
hgs
parents: 0
diff changeset
    49
    m_chrome(chrome),
hgs
parents: 0
diff changeset
    50
    m_topWidget(chrome->layout())
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    51
{
3
hgs
parents: 0
diff changeset
    52
#ifdef ORBIT_UI
hgs
parents: 0
diff changeset
    53
  addView(chrome->layout());
hgs
parents: 0
diff changeset
    54
#endif // ORRBIT_UI
hgs
parents: 0
diff changeset
    55
hgs
parents: 0
diff changeset
    56
  // Initialize the ChromeWidget with the scene created in the ChromeView
hgs
parents: 0
diff changeset
    57
  chrome->layout()->setScene(scene());
hgs
parents: 0
diff changeset
    58
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    59
  //setGeometry(chrome->geometry().toRect());
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    60
  setObjectName("ChromeView");
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    61
  //When content view is external widget, make the background transparent
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    62
  //setStyleSheet("QGraphicsView#ChromeView {margin:0; border: 0; padding:0; background:transparent}");
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    63
  setStyleSheet("QGraphicsView#ChromeView {margin:0; border: 0; padding:0; background:#fff}");
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    64
  setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    65
  setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
3
hgs
parents: 0
diff changeset
    66
hgs
parents: 0
diff changeset
    67
#ifdef BEDROCK_TILED_BACKING_STORE
hgs
parents: 0
diff changeset
    68
  setFrameShape(QFrame::NoFrame);
hgs
parents: 0
diff changeset
    69
  setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
hgs
parents: 0
diff changeset
    70
  scene()->setItemIndexMethod(QGraphicsScene::NoIndex);
hgs
parents: 0
diff changeset
    71
#endif  
hgs
parents: 0
diff changeset
    72
	
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    73
  //NB: maybe not needed?
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    74
  setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate);
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    75
  //installEventFilter(this);
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    76
  //chrome->page()->setView(this);
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    77
#ifndef NO_QSTM_GESTURE
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    78
  ungrabGesture(Qt::PanGesture);
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    79
  ungrabGesture(Qt::TapGesture);
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    80
  ungrabGesture(Qt::TapAndHoldGesture);
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    81
  ungrabGesture(Qt::PinchGesture);
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    82
  ungrabGesture(Qt::SwipeGesture);
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    83
#endif
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    84
12
hgs
parents: 9
diff changeset
    85
#ifdef ORBIT_UI
hgs
parents: 9
diff changeset
    86
  /* Hide the platform title bar */
hgs
parents: 9
diff changeset
    87
  HbView * view = currentView();  
hgs
parents: 9
diff changeset
    88
  view->setTitleBarVisible(false);
hgs
parents: 9
diff changeset
    89
#endif
9
hgs
parents: 3
diff changeset
    90
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    91
}
3
hgs
parents: 0
diff changeset
    92
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    93
ChromeView::~ChromeView()
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    94
{
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    95
}
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    96
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    97
void ChromeView::resizeEvent(QResizeEvent * ev)
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    98
{
3
hgs
parents: 0
diff changeset
    99
    //Resize the chrome to match the view and scene rectangle size
hgs
parents: 0
diff changeset
   100
    if (m_topWidget) {
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   101
3
hgs
parents: 0
diff changeset
   102
      // On calling setGeometry on QGraphicsWidget, the layout resizes if
hgs
parents: 0
diff changeset
   103
      // first called before resize on children happens. In order to avoid painting
hgs
parents: 0
diff changeset
   104
      // the children in their old positions, first let children change size
hgs
parents: 0
diff changeset
   105
      // ChromeWidget * w = static_cast<ChromeWidget*>(m_topWidget);
hgs
parents: 0
diff changeset
   106
      // w->sizeChange(ev->size());
hgs
parents: 0
diff changeset
   107
      //TODO: move sizeChange to ChromeLayout, remove m_chrome member !!!!!
hgs
parents: 0
diff changeset
   108
      m_chrome->sizeChange(ev->size());
hgs
parents: 0
diff changeset
   109
      m_topWidget->setGeometry(0,0, ev->size().width(), ev->size().height());
hgs
parents: 0
diff changeset
   110
    }
12
hgs
parents: 9
diff changeset
   111
hgs
parents: 9
diff changeset
   112
hgs
parents: 9
diff changeset
   113
#ifdef ORBIT_UI
hgs
parents: 9
diff changeset
   114
    HbMainWindow::resizeEvent(ev);
hgs
parents: 9
diff changeset
   115
#else
hgs
parents: 9
diff changeset
   116
     QGraphicsView::resizeEvent(ev);
hgs
parents: 9
diff changeset
   117
#endif 
3
hgs
parents: 0
diff changeset
   118
	
hgs
parents: 0
diff changeset
   119
#ifdef BEDROCK_TILED_BACKING_STORE
hgs
parents: 0
diff changeset
   120
    if (scene()) {
hgs
parents: 0
diff changeset
   121
        QRectF rect(QPointF(0, 0), size());
hgs
parents: 0
diff changeset
   122
        scene()->setSceneRect(rect);
hgs
parents: 0
diff changeset
   123
    }
hgs
parents: 0
diff changeset
   124
#endif	
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   125
}
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   126
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   127
//Never scroll the chrome
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   128
//NB: this shouldn't be needed, but some events from
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   129
//the chrome are causing scrolling. Need to track this
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   130
//down further.
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   131
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   132
void ChromeView::scrollContentsBy(int dx, int dy)
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   133
{
3
hgs
parents: 0
diff changeset
   134
    Q_UNUSED(dx)
hgs
parents: 0
diff changeset
   135
    Q_UNUSED(dy)
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   136
  // qDebug() << "View scroll";
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   137
  //  QGraphicsView::scrollContentsBy(dx, dy);
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   138
}
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   139
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   140
  //Eat key events not otherwise consumed.
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   141
  /*  bool ChromeView::eventFilter(QObject * obj, QEvent * ev)
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   142
  {
3
hgs
parents: 0
diff changeset
   143
   if (ev->type() == QEvent::KeyPress){
hgs
parents: 0
diff changeset
   144
        int key = static_cast<QKeyEvent*>(ev)->key();
hgs
parents: 0
diff changeset
   145
        if (key == Qt::Key_Down || key == Qt::Key_Up || key ==Qt::Key_Left){
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   146
         return true;
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   147
       }
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   148
    }
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   149
    return QObject::eventFilter(obj,ev);
3
hgs
parents: 0
diff changeset
   150
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   151
    }*/
3
hgs
parents: 0
diff changeset
   152
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   153
bool ChromeView::event(QEvent* event)
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   154
{
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   155
#ifndef NO_QSTM_GESTURE
3
hgs
parents: 0
diff changeset
   156
      if (event->type() == QEvent::Gesture) {
hgs
parents: 0
diff changeset
   157
          QStm_Gesture* gesture = getQStmGesture(event);
hgs
parents: 0
diff changeset
   158
          if (gesture) {
hgs
parents: 0
diff changeset
   159
              QPoint pos = mapFromGlobal(gesture->position());
hgs
parents: 0
diff changeset
   160
              QGraphicsScene* gs = scene();
hgs
parents: 0
diff changeset
   161
              QGraphicsItem* gi = gs->itemAt(QPointF(pos));
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   162
3
hgs
parents: 0
diff changeset
   163
              if (gi) {
hgs
parents: 0
diff changeset
   164
                  gs->sendEvent(gi, event);
hgs
parents: 0
diff changeset
   165
              }
hgs
parents: 0
diff changeset
   166
              return true;
hgs
parents: 0
diff changeset
   167
          }
hgs
parents: 0
diff changeset
   168
      }
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   169
#endif
3
hgs
parents: 0
diff changeset
   170
    return QGraphicsView::event(event);
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   171
}
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   172
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   173
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   174
3
hgs
parents: 0
diff changeset
   175
} // namespace GVA