ginebra2/ChromeWidget.cpp
changeset 16 3c88a81ff781
parent 12 afcd8e6d025b
equal deleted inserted replaced
14:6aeb7a756187 16:3c88a81ff781
    45 #include "GWebPage.h"
    45 #include "GWebPage.h"
    46 #include "webpagecontroller.h"
    46 #include "webpagecontroller.h"
    47 //#include "ViewStack.h"
    47 //#include "ViewStack.h"
    48 #include "HistoryManager.h"
    48 #include "HistoryManager.h"
    49 #include "bookmarkscontroller.h"
    49 #include "bookmarkscontroller.h"
       
    50 #ifdef QT_GEOLOCATION
       
    51 #include "geolocationManager.h"
       
    52 #endif // QT_GEOLOCATION
    50 #include "ScriptObjects.h"
    53 #include "ScriptObjects.h"
    51 #include "LocaleDelegate.h"
    54 #include "LocaleDelegate.h"
    52 #include "DeviceDelegate.h"
    55 #include "DeviceDelegate.h"
    53 #include "NetworkDelegate.h"
    56 #include "NetworkDelegate.h"
    54 #include "ObjectCharm.h"
    57 #include "ObjectCharm.h"
    55 #include "bedrockprovisioning.h"
    58 #include "bedrockprovisioning.h"
    56 #include "Utilities.h"
    59 #include "Utilities.h"
    57 #include "PopupWebChromeItem.h"
    60 #include "PopupWebChromeItem.h"
       
    61 #include "UrlSearchSnippet.h"
    58 #ifdef QT_MOBILITY_SYSINFO
    62 #ifdef QT_MOBILITY_SYSINFO
    59 #include "SystemDeviceImpl.h"
    63 #include "SystemDeviceImpl.h"
    60 #include "SystemNetworkImpl.h"
    64 #include "SystemNetworkImpl.h"
    61 #endif
    65 #endif
    62 
    66 
    78   ChromeWidget::ChromeWidget(QGraphicsItem * parent, Qt::WindowFlags wFlags)
    82   ChromeWidget::ChromeWidget(QGraphicsItem * parent, Qt::WindowFlags wFlags)
    79     : QObject(0),
    83     : QObject(0),
    80       m_renderer(0),
    84       m_renderer(0),
    81       m_dom(0),
    85       m_dom(0),
    82       m_viewController(new ViewController()),
    86       m_viewController(new ViewController()),
       
    87       m_app(0),
    83       m_jsObject(new ChromeWidgetJSObject(0, this)),
    88       m_jsObject(new ChromeWidgetJSObject(0, this)),
    84       m_localeDelegate(new LocaleDelegate(this)),
    89       m_localeDelegate(new LocaleDelegate(this)),
    85       m_downloads(new Downloads())
    90       m_downloads(new Downloads())
    86   {
    91   {
    87     m_layout = new ChromeLayout(parent, wFlags);
    92     m_layout = new ChromeLayout(parent, wFlags);
   104     m_page =  static_cast<QWebPage *>(new GVA::WebPageWrapper(this, "Chrome Javascript error"));
   109     m_page =  static_cast<QWebPage *>(new GVA::WebPageWrapper(this, "Chrome Javascript error"));
   105     m_page->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
   110     m_page->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
   106     m_page->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
   111     m_page->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
   107 #endif
   112 #endif
   108     m_viewController->setObjectName("views");
   113     m_viewController->setObjectName("views");
   109 
   114     connect(m_viewController, SIGNAL(currentViewChanged(ControllableViewBase *)), this, SLOT(onCurrentViewChanged(ControllableViewBase *))); 
   110     connect(m_viewController, SIGNAL(currentViewChanged()), this, SLOT(onCurrentViewChanged()));
   115     
   111 #ifndef __gva_no_chrome__
   116 #ifndef __gva_no_chrome__
   112 
   117 
   113     m_jsObject->setObjectName("chrome");
   118     m_jsObject->setObjectName("chrome");
   114 
   119 
   115     // Pass some signals from this object to the Javascript object.
   120     // Pass some signals from this object to the Javascript object.
   116     QObject::connect(this, SIGNAL(chromeComplete()), m_jsObject, SIGNAL(chromeComplete()));
   121     QObject::connect(this, SIGNAL(chromeComplete()), m_jsObject, SIGNAL(chromeComplete()));
       
   122     #ifdef Q_WS_MAEMO_5
       
   123     QObject::connect(this, SIGNAL(chromeActivated()), m_jsObject, SIGNAL(chromeActivated()));
       
   124     #endif
   117     QObject::connect(this, SIGNAL(aspectChanged(int)), m_jsObject, SIGNAL(aspectChanged(int)));
   125     QObject::connect(this, SIGNAL(aspectChanged(int)), m_jsObject, SIGNAL(aspectChanged(int)));
   118     QObject::connect(this, SIGNAL(prepareForGeometryChange()), m_jsObject, SIGNAL(prepareForGeometryChange()));
   126     QObject::connect(this, SIGNAL(prepareForGeometryChange()), m_jsObject, SIGNAL(prepareForGeometryChange()));
   119     QObject::connect(this, SIGNAL(symbianCarriageReturn()), m_jsObject, SIGNAL(symbianCarriageReturn()));
   127     QObject::connect(this, SIGNAL(symbianCarriageReturn()), m_jsObject, SIGNAL(symbianCarriageReturn()));
   120     QObject::connect(this, SIGNAL(popupShown(const QString &)), m_jsObject, SIGNAL(popupShown(const QString &)));
   128     QObject::connect(this, SIGNAL(popupShown(const QString &)), m_jsObject, SIGNAL(popupShown(const QString &)));
   121     QObject::connect(this, SIGNAL(popupHidden(const QString &)), m_jsObject, SIGNAL(popupHidden(const QString &)));
   129     QObject::connect(this, SIGNAL(popupHidden(const QString &)), m_jsObject, SIGNAL(popupHidden(const QString &)));
   174     delete m_page;
   182     delete m_page;
   175     delete m_snippets;
   183     delete m_snippets;
   176     delete m_localeDelegate;
   184     delete m_localeDelegate;
   177     delete m_deviceDelegate;
   185     delete m_deviceDelegate;
   178     delete m_networkDelegate;
   186     delete m_networkDelegate;
   179     delete m_app;
       
   180     delete m_downloads;
   187     delete m_downloads;
   181   }
   188   }
   182 
   189 
   183   //Handle resizing signal from layout
   190   //Handle resizing signal from layout
   184 
   191 
   196 
   203 
   197   void ChromeWidget::onAspectChanged(int aspect)
   204   void ChromeWidget::onAspectChanged(int aspect)
   198   {
   205   {
   199     QString mode = (aspect == landscape ? "Landscape" : "Portrait");
   206     QString mode = (aspect == landscape ? "Landscape" : "Portrait");
   200     ControllableViewBase* cview = m_viewController->currentView();
   207     ControllableViewBase* cview = m_viewController->currentView();
   201     if (cview)
   208 
   202       cview->displayModeChanged(mode);
   209     if (cview){
       
   210         //The size is the viewport size without the title/url  bar widget height.
       
   211         // This is currently used only by Windows View as it needs to use this size
       
   212         // to position the thumbnails but need the viewport size to generate
       
   213         // the new thumbnails
       
   214         cview->displayModeChanged(mode, viewSize());
       
   215     }
   203     emit aspectChanged(aspect);
   216     emit aspectChanged(aspect);
   204   }
   217   }
   205 
   218 
   206   void ChromeWidget::updateChromeLayout() {
   219   void ChromeWidget::updateChromeLayout() {
   207     m_renderer->updateChromeLayout();
   220     m_renderer->updateChromeLayout();
   276 
   289 
   277   void ChromeWidget::showView(const QString &name) {
   290   void ChromeWidget::showView(const QString &name) {
   278     m_viewController->showView(name);
   291     m_viewController->showView(name);
   279   }
   292   }
   280 
   293 
   281   void ChromeWidget::onCurrentViewChanged() {
   294 	void ChromeWidget::onCurrentViewChanged(ControllableViewBase *newView) {
   282     m_layout->addView(m_viewController->currentView());
   295     m_layout->addView(m_viewController->currentView());
   283   }
   296   } 
   284 
   297 
   285   // Clean up all existing snippets;
   298   // Clean up all existing snippets;
   286 
   299 
   287   void ChromeWidget::clearChrome()
   300   void ChromeWidget::clearChrome()
   288   {
   301   {
   333     addJSObjectToPage(m_app, page);
   346     addJSObjectToPage(m_app, page);
   334     addJSObjectToPage(m_viewController, page);
   347     addJSObjectToPage(m_viewController, page);
   335     addJSObjectToPage(WebPageController::getSingleton(), page);
   348     addJSObjectToPage(WebPageController::getSingleton(), page);
   336     addJSObjectToPage(BookmarksController::getSingleton(), page);
   349     addJSObjectToPage(BookmarksController::getSingleton(), page);
   337     addJSObjectToPage(WRT::HistoryManager::getSingleton(), page);
   350     addJSObjectToPage(WRT::HistoryManager::getSingleton(), page);
       
   351 #ifdef QT_GEOLOCATION
       
   352     addJSObjectToPage(GeolocationManager::getSingleton(), page);
       
   353 #endif // QT_GEOLOCATION
   338     addJSObjectToPage(ViewStack::getSingleton(), page);
   354     addJSObjectToPage(ViewStack::getSingleton(), page);
   339     addJSObjectToPage(m_localeDelegate, page);
   355     addJSObjectToPage(m_localeDelegate, page);
   340     addJSObjectToPage(m_deviceDelegate, page);
   356     addJSObjectToPage(m_deviceDelegate, page);
   341     addJSObjectToPage(m_networkDelegate, page);
   357     addJSObjectToPage(m_networkDelegate, page);
   342 #ifdef QT_MOBILITY_SERVICE_FRAMEWORK
   358 #ifdef QT_MOBILITY_SERVICE_FRAMEWORK
   378   void ChromeWidget::adjustAnchorOffset(ChromeSnippet * snippet, qreal delta)
   394   void ChromeWidget::adjustAnchorOffset(ChromeSnippet * snippet, qreal delta)
   379   {
   395   {
   380     m_layout->adjustAnchorOffset(snippet, delta);
   396     m_layout->adjustAnchorOffset(snippet, delta);
   381   }
   397   }
   382 
   398 
   383   ChromeSnippet *ChromeWidget::getSnippet(const QString & docElementId, QGraphicsItem * parent) {
   399   ChromeSnippet *ChromeWidget::getSnippet(const QString & docElementId) {
   384     ChromeSnippet *result = m_snippets->getSnippet(docElementId);
   400     ChromeSnippet *result = m_snippets->getSnippet(docElementId);
   385     if (!result){
   401     if (!result){
   386       result = m_dom->getSnippet(docElementId, parent);
   402       result = m_dom->getSnippet(docElementId);
   387       if (result) {
   403       if (result) {
   388         result->setParent(m_snippets); // Exports to "Snippets" JS object
   404         result->setParent(m_snippets); // Exports to "Snippets" JS object
   389         addSnippet(result, docElementId);
   405         addSnippet(result, docElementId);
   390       }
   406       }
   391       else{
   407       else{
   409     m_page->mainFrame()->addToJavaScriptWindowObject(object->objectName(), object);
   425     m_page->mainFrame()->addToJavaScriptWindowObject(object->objectName(), object);
   410   }
   426   }
   411 
   427 
   412   void ChromeWidget::addJSObjectToPage(QObject *object, QWebPage *page)
   428   void ChromeWidget::addJSObjectToPage(QObject *object, QWebPage *page)
   413   {
   429   {
   414     page->mainFrame()->addToJavaScriptWindowObject(object->objectName(), object);
   430     if (object && page)
       
   431       page->mainFrame()->addToJavaScriptWindowObject(object->objectName(), object);
   415   }
   432   }
   416 
   433 
   417   QObjectList ChromeWidget::getSnippets() {
   434   QObjectList ChromeWidget::getSnippets() {
   418     return m_snippets->getList();
   435     return m_snippets->getList();
   419   }
   436   }
   456   void ChromeWidget::emitPopupHidden(const QString &popupId) 
   473   void ChromeWidget::emitPopupHidden(const QString &popupId) 
   457   {
   474   {
   458       emit popupHidden(popupId);
   475       emit popupHidden(popupId);
   459   }
   476   }
   460 
   477 
       
   478 // Activate is called by the WindowsView when a new window is created.
       
   479 #ifdef Q_WS_MAEMO_5
       
   480   void ChromeWidget::activate() {
       
   481       emit chromeActivated();
       
   482   }
       
   483 #endif  
       
   484 
       
   485   void ChromeWidget::windowStateChange(Qt::WindowStates state) {
       
   486       emit windowStateChanged(state);
       
   487   }
       
   488 
       
   489   QSize ChromeWidget::viewSize() {
       
   490       return m_layout->viewPortSize(true);
       
   491   }
   461 
   492 
   462   void ChromeWidget::dump() {
   493   void ChromeWidget::dump() {
   463     qDebug() << "---------------------";
   494     qDebug() << "---------------------";
   464     qDebug() << "ChromeWidget::dump";
   495     qDebug() << "ChromeWidget::dump";
   465     m_snippets->dump();
   496     m_snippets->dump();