ginebra2/ChromeWidget.h
changeset 0 1450b09d0cfd
child 3 0954f5dd2cd0
child 5 0f2326c2a325
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/ChromeWidget.h	Tue May 04 12:39:35 2010 +0300
@@ -0,0 +1,187 @@
+/*
+* 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: 
+*
+*/
+
+
+#ifndef __GINEBRA_CHROMEWIDGET_H__
+#define __GINEBRA_CHROMEWIDGET_H__
+
+#include "BWFGlobal.h"
+#include <QMap>
+#include <QtGui>
+//#include <QtScript>
+#include "wrtbrowsercontainer.h"
+#include "GreenChromeSnippet.h"
+#include "ViewController.h"
+
+class QWebPage;
+class QPixmap;
+
+class MostVisitedPageStore;
+class ControllableViewBase;
+class QGraphicsSceneContextMenuEvent;
+using namespace WRT;
+
+namespace GVA {
+
+  class AppContentView;
+  class ChromeSnippet;
+  class ChromeDOM;
+  class ChromeRenderer;
+  class GinebraApplication;
+  class ViewController;
+  class Snippets;
+  //  class CollapsingWidget;
+  class SlidingWidget;
+  class ChromeWidgetJSObject;
+  class LocaleDelegate;
+  class DeviceDelegate;
+  class Downloads;
+
+  enum ChromeAnchor
+  {
+    anchorNone,
+    anchorCenter,
+    anchorTop,
+    anchorBottom,
+    anchorLeft,
+    anchorRight,
+    anchorTopLeft,
+    anchorTopRight,
+    anchorBottomLeft,
+    anchorBottomRight
+  };
+  
+  enum Aspect
+  {
+    portrait,
+    landscape
+  };
+
+  class ChromeWidget : public QGraphicsWidget
+  {
+
+  Q_OBJECT
+
+  public:
+    ChromeWidget(QGraphicsItem * parent = 0, Qt::WindowFlags wFlags = 0);
+    virtual ~ChromeWidget();
+    void setChromeBaseDirectory(const QString dir);
+    void setChromeFile(const QString file);
+    void addView(ControllableViewBase * controllableView);
+    QGraphicsScene * getScene() { return m_scene; } //NB: change name to scene() !!
+    ChromeRenderer * renderer() { return m_renderer; }
+    ChromeDOM * dom() { return m_dom; }
+    QRect getSnippetRect(const QString &docElementId);
+    ChromeSnippet * getSnippet(const QString & docElementId, QGraphicsItem * parent = 0);
+    //  QScriptValue evalWithEngineContext(const QString& program);
+    ControllableViewBase * getView(const QString& name);
+    void showView(const QString &name);
+    QWebPage * page() { return m_page; }
+    void anchorSnippet(ChromeSnippet * snippet);
+    //NB: get rid of this (see comment in .cpp)!!!
+    void adjustAnchorOffset(ChromeSnippet * snippet, qreal delta);
+    void anchorToView(ChromeSnippet* snippet, const QString & where = "top");
+    void detachFromView(ChromeSnippet* snippet, const QString & where = "top");
+    void anchorTogether(ChromeSnippet* first, const QString &  secondId, qreal x = 0, qreal y = 0);
+    void unAnchor(ChromeSnippet* first);
+    //void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget* widget = 0);
+    QGraphicsView *graphicsView() { return m_view; }
+    void dump();
+    QString getBaseDirectory() const { return m_baseDirectory; }
+    ViewController * viewController() { return m_viewController; } // needed for UrlSearchSnippet
+    QString currentView() {return m_viewController->currentView()->type() ;}
+  public slots: //NB: Many of these should not be exported to JS, so a separate a JS delegate would be better
+    int width(){return (int)size().width();}
+    void snippetShown(ChromeSnippet * snippet); 
+    void snippetHiding(ChromeSnippet * snippet);
+    void loadStarted();
+    void loadFinished(bool ok);
+    void exportJSObjects();
+    void exportJSObjectsToPage(QWebPage *page);
+    void alert(const QString & msg);
+    qreal slideView(qreal delta);
+    void onViewInstantiated(ControllableViewBase *view);
+    void onCurrentViewChanged();
+    void chromeInitialized();
+    void reloadChrome();
+    void loadUrlToCurrentPage(const QUrl & url);
+    void pageCreated(WRT::WrtBrowserContainer * page);
+    
+  signals:
+    void internalChromeComplete();
+    void chromeComplete();
+    void aspectChanged(int aspect);
+    void prepareForGeometryChange();
+    //NB: This should be symbian ifdef'd but that would require symbian-specific chrome
+    void symbianCarriageReturn();
+
+  public:
+    Q_PROPERTY(QObjectList snippets READ getSnippets)
+    QObjectList getSnippets();
+    /// \brief Returns either "portrait" or "landscape".
+    QString getDisplayMode() const;
+    Q_PROPERTY(QString displayMode READ getDisplayMode)
+
+    QObject* getDisplaySize() const;
+    Q_PROPERTY(QObject* displaySize READ getDisplaySize)
+
+  protected:
+    virtual void resizeEvent(QGraphicsSceneResizeEvent *ev);
+    virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent* event);
+    //bool eventFilter(QObject *obj, QEvent *ev);
+  private:
+    void addSnippet( ChromeSnippet * snippet, const QString & docElementId);
+    void getInitialSnippets();
+    void clearChrome();
+    void addAnchors();
+    void addJSObjectToWindow(QObject *object);
+    void addJSObjectToPage(QObject *object, QWebPage *page);
+    void updateMVGeometry();
+    void addViewToLayout(ControllableViewBase * controllableView);
+    //void addJSObjectToEngine(QObject *object);
+    QGraphicsScene * m_scene;
+    QGraphicsView *m_view;
+    QGraphicsAnchorLayout *m_layout;
+    QString m_baseDirectory;
+    QWebPage * m_page;
+    ChromeRenderer * m_renderer;
+    ChromeDOM * m_dom;
+    Snippets * m_snippets;
+    ViewController *m_viewController;
+    AppContentView * m_appView;
+    QList<QObject*> m_jsObjects;
+    //QScriptEngine m_engine;
+    QGraphicsAnchorLayout *m_viewLayout;
+    SlidingWidget *m_viewPort;
+    QGraphicsWidget *m_topBar;
+    QGraphicsWidget *m_bottomBar;
+    QGraphicsWidget *m_leftBar;
+    QGraphicsWidget *m_rightBar;
+    //CollapsingWidget *m_viewBar;
+    GinebraApplication *m_app;
+    Aspect m_aspect;
+    ChromeWidgetJSObject *m_jsObject;
+    LocaleDelegate *m_localeDelegate; // Owned
+    DeviceDelegate *m_deviceDelegate;
+    Downloads * m_downloads; // Owned
+  };
+
+} // end of namespace GVA
+
+Q_DECLARE_METATYPE(QObjectList)
+
+#endif // __GINEBRA_CHROMEWIDGET_H__