ginebra2/emulator/browser.cpp
changeset 0 1450b09d0cfd
child 3 0954f5dd2cd0
child 5 0f2326c2a325
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/emulator/browser.cpp	Tue May 04 12:39:35 2010 +0300
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "browser.h"
+#ifndef NO_QSTM_GESTURE
+#include "WebGestureHelper.h"
+#endif
+#include "../ChromeWidget.h"
+#include "HistoryFlowView.h"
+#include "WindowFlowView.h"
+#include "WrtPageManager.h"
+#include "bedrockprovisioning.h"
+
+#include <QDebug>
+#ifdef _GVA_INSPECT_CHROME_
+#include <QWebInspector>
+#endif
+#include <QWebSettings>
+
+#ifndef Q_OS_SYMBIAN
+// Uncomment the next line to enable the javascript console dialog.
+//#define CHROME_CONSOLE 1
+#ifdef CHROME_CONSOLE
+#include "ChromeConsole.h"
+#endif
+#endif
+
+GinebraBrowser::GinebraBrowser(QObject * parent)
+  : QObject(parent),
+    m_splashScreen(NULL)
+{
+  QString startUpChrome(BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->valueAsString("StartUpChrome"));
+  m_install = BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->valueAsString("ChromeBaseDirectory2")
+      + startUpChrome.section('/', 0, -2) + "/";
+  m_chromeUrl = startUpChrome.section('/', -1);
+  m_contentUrl = BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->valueAsString("StartPage");
+
+  //qDebug() << "GinebraBrowser::GinebraBrowser: " << m_install << " " << m_chromeUrl;
+  //GVA::Settings * settings = GVA::Settings::instance();
+  //settings->setInstallRoot(m_install);
+  // Create the chrome widget
+  m_chrome = new GVA::ChromeWidget();
+
+  //removeFaviconDir();
+
+  /*QDir homeDir = getHomeDir();
+  homeDir.mkdir("favicon");
+
+  QString iconDBPath = homeDir.absolutePath() + "/favicon";
+  QWebSettings::globalSettings()->setIconDatabasePath(iconDBPath);*/
+
+#ifdef _GVA_INSPECT_CHROME_
+  QWebSettings * s = m_chrome->page()->settings();
+  s->setAttribute(QWebSettings::DeveloperExtrasEnabled, true );
+  QWebInspector *inspector = new QWebInspector;
+  inspector->setPage(m_chrome->page());
+  inspector->resize(400,600);
+  inspector->show();
+  connect(m_chrome->page(), SIGNAL(webInspectorTriggered(QWebElement)), inspector, SLOT(show()));
+#endif
+  //Create a view onto the chrome
+  m_view = new GVA::ChromeView(m_chrome);
+#ifndef NO_QSTM_GESTURE
+  WebGestureHelper* gh = new WebGestureHelper(m_view);
+  browserApp->setGestureHelper(gh);
+  browserApp->setMainWindow(m_view);
+  m_view->grabGesture(QStm_Gesture::assignedType());
+#endif
+ 
+#ifdef Q_OS_SYMBIAN
+  m_view->showFullScreen(); 
+#else
+  m_view->setGeometry(0,0,360,640);
+#endif
+
+  showSplashScreen(); 
+
+#ifndef __gva_no_chrome__
+  QObject::connect(m_chrome, SIGNAL(internalChromeComplete()), this, SLOT(onChromeComplete()));
+   //Load the chrome
+  m_chrome->setChromeBaseDirectory(m_install);
+  m_chrome->setChromeFile(m_chromeUrl);
+#ifdef CHROME_CONSOLE
+  // Show the javascript console.
+  ChromeConsole *console = new ChromeConsole(m_chrome);
+  console->show();
+  console->move(m_view->geometry().topLeft() + QPoint(m_view->width()+6, 0));
+#endif
+#else
+  onChromeComplete();
+  
+#endif                     
+
+}
+
+GinebraBrowser::~GinebraBrowser() 
+{
+  delete m_chrome; 
+  delete WebPageController::getSingleton();
+  delete m_view;
+  destroySplashScreen();
+
+#ifndef NO_QSTM_GESTURE
+  WebGestureHelper* gh = browserApp->gestureHelper();
+  delete gh;
+#endif
+}
+
+/*
+QDir GinebraBrowser::getHomeDir()
+{
+    QDir homeDir;
+
+#ifndef QT_NO_DESKTOPSERVICES
+    homeDir = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
+#else
+    homeDir = QDir::homePath();
+#endif
+#ifdef Q_OS_SYMBIAN
+    if (homeDir.startsWith("Z"))
+        homeDir.replace(0,1,"C");
+#endif
+    return homeDir;
+}
+
+void GinebraBrowser::removeFaviconDir()
+{
+    QDir homeDir = getHomeDir();
+    homeDir.cd("favicon");
+    homeDir.cdUp();
+    homeDir.rmdir("favicon");
+}
+*/
+void GinebraBrowser::show() 
+{
+  m_view->show();
+}
+
+void GinebraBrowser::onChromeComplete()
+{
+#ifndef __gva_no_chrome__
+  ControllableViewBase *windowView = WRT::WindowFlowView::createNew(m_chrome);
+  windowView->setObjectName("WindowView");
+  m_chrome->addView(windowView);
+#endif
+  //Create a content window and add it to the chrome
+  GVA::GWebContentView *content = new GVA::GWebContentView(m_chrome, 0, "WebView");
+
+  //Load the initial content after the chrome loads. This makes sure that an initial bad
+  //content page won't hang up rendering the chrome.
+  m_chrome->addView(content);
+  
+  QString startPage = m_install + m_contentUrl;
+  qDebug() << "GinebraBrowser::onChromeComplete: startPage: " << startPage;
+
+  bool enabled = (bool) BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->valueAsInt("SaveSession");
+  if (enabled)
+    WebPageController::getSingleton()->loadFromHistory();
+  else
+    content->loadUrlToCurrentPage(startPage);
+    
+#ifndef __gva_no_chrome__
+  WRT::HistoryFlowView *historyView = new WRT::HistoryFlowView(WrtPageManager::getSingleton(), m_chrome);
+  historyView->setObjectName("HistoryView");
+  m_chrome->addView(historyView);
+#endif
+  m_chrome->showView("WebView");
+  destroySplashScreen();
+}
+
+void GinebraBrowser::showSplashScreen() {
+  QString splashImage = BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->valueAsString("SplashImage");
+  QString baseDir = BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->valueAsString("ChromeBaseDirectory2");
+  QString imagePath =	baseDir + splashImage;
+  
+  qDebug() << "ChromeView::showSplashScreen: " << imagePath; 
+  if(!imagePath.isNull()) {
+    m_splashScreen = new QLabel(NULL);
+    m_splashScreen->setAlignment(Qt::AlignCenter);
+    m_splashScreen->setStyleSheet("background-color: #FFF");
+    m_splashScreen->setPixmap(QPixmap(imagePath));
+    if(m_splashScreen->pixmap()->isNull()) {
+        ;//qDebug() << "ChromeView::chromeLoaded: ERROR splashscreen creation failed. " << imagePath;
+    }
+    else {
+        m_splashScreen->show();         			
+  			#ifdef Q_OS_SYMBIAN
+    			m_splashScreen->showFullScreen();
+    			m_view->showFullScreen(); 					
+				#else
+  				m_splashScreen->setGeometry(0,0,360,640);
+				#endif
+    }
+  }
+}
+
+void GinebraBrowser::destroySplashScreen()
+{
+  if(m_splashScreen) 
+  {
+    delete m_splashScreen;
+    m_splashScreen = NULL;
+  }
+}