ginebra2/ContentViews/WindowsView.cpp
changeset 16 3c88a81ff781
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/ContentViews/WindowsView.cpp	Fri Oct 15 17:30:59 2010 -0400
@@ -0,0 +1,137 @@
+#include "WindowsView.h"
+#include "BrowserWindow.h"
+#include "GWebContentView.h"
+#include "ViewStack.h"
+
+//For page created signal
+#include "wrtbrowsercontainer.h"
+#include "webpagecontroller.h"
+
+//For shared chrome object
+#include "ChromeWidget.h"
+#include "ChromeView.h"
+
+#include <QDebug>
+
+namespace GVA {
+
+  WindowsView::WindowsView(ChromeWidget * chrome, QObject * parent, const QString & objectName)
+    : ControllableViewBase(parent),
+      m_current(0),
+      m_chrome(chrome),
+      m_menu(0)
+{
+  setObjectName(objectName);
+}
+
+WindowsView::~WindowsView()
+{
+  foreach (QMainWindow * window, m_windows){
+    delete window;
+  }   
+}
+
+void WindowsView::activate(BrowserWindow * window)
+{
+
+  ViewStack * viewStack = ViewStack::getSingleton();
+  GWebContentView* webView = contentView();
+  if(webView) {
+    if(contentView()->currentPageIsSuperPage()){
+      webView->showNormalPage();
+      webView->setGesturesEnabled(true);
+      window->setView("WebView"); 
+      viewStack->switchView(window->view(), viewStack->getViewController()->currentViewName());
+    }
+    else {
+      viewStack->getViewController()->currentView()->deactivate();
+    }
+    window->setTitle(viewStack->getViewController()->currentView()->title());
+  }
+  // Let the chrome take focus, or whatever it wants to do.
+  m_chrome->activate();
+}
+
+void WindowsView::deactivate(BrowserWindow * window)
+{
+  ViewStack * viewStack = ViewStack::getSingleton();
+  /*
+  if(m_current != window){
+    m_current = window;
+    viewStack->switchView(window->view(), viewStack->getViewController()->currentViewName());
+  } 
+  else */
+  //#ifndef BEDROCK_TILED_BACKING_STORE
+  if(viewStack->getViewController()->currentView())
+    viewStack->getViewController()->currentView()->activate();
+  //#endif
+}
+
+
+void WindowsView::setMenu(QMenu * menu)
+{
+  m_menu = menu;
+  if(m_menu){
+    m_menu->addAction("New Window", this, SLOT(onWindowAction()));
+  }
+}
+
+void WindowsView::setMenuEnabled(bool enabled)
+{
+  m_menu->setEnabled(enabled);
+  m_current->setMenuEnabled(enabled);
+}
+
+bool WindowsView::isMenuEnabled() const {
+    return m_menu->isEnabled();
+}
+
+void WindowsView::handlePageEvents(bool handleEvents){
+
+  if(handleEvents){
+    connect(WebPageController::getSingleton(), SIGNAL(pageCreated(WRT::WrtBrowserContainer *)),
+	  this, SLOT(onPageCreated(WRT::WrtBrowserContainer *)));
+  }else{
+    disconnect(WebPageController::getSingleton(), SIGNAL(pageCreated(WRT::WrtBrowserContainer *)),
+	  this, SLOT(onPageCreated(WRT::WrtBrowserContainer *)));
+  }
+}
+
+BrowserWindow * WindowsView::addWindow(WRT::WrtBrowserContainer * page)
+{
+  BrowserWindow * window = new BrowserWindow(m_chrome, this);
+  window->setPage(page);
+  window->menuBar()->addMenu(m_menu);
+  m_windows[page] = window;
+  m_current = window;
+  m_current->show();
+  deactivate(window);
+  return window;
+}
+
+GWebContentView * WindowsView::contentView()
+{
+  return static_cast<GWebContentView*>(ViewStack::getSingleton()->getViewController()->view("WebView"));
+}
+
+void WindowsView::onWindowAction() 
+{
+  //Tell the page controller to create a new QWebPage. 
+  //The controller emits pageCreated when this happens
+  //The onPageCreated slot actually creates the window
+  WebPageController::getSingleton()->openPage();
+}
+  
+void WindowsView::onPageCreated(WRT::WrtBrowserContainer * page)
+{
+  addWindow(page);
+  //WebPageController::getSingleton()->loadFromHistory();
+}
+
+void WindowsView::onPageDeleted(WRT::WrtBrowserContainer * page)
+{
+  assert(m_windows.contains(page));
+  delete m_windows.take(page);
+}
+
+};