diff -r 6aeb7a756187 -r 3c88a81ff781 ginebra2/ContentViews/WindowsView.cpp --- /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 + +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(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); +} + +};