ginebra/chromewidget.h
author William Roberts <williamr@symbian.org>
Fri, 11 Jun 2010 16:23:26 +0100
branchGCC_SURGE
changeset 2 bf4420e9fa4d
parent 0 1450b09d0cfd
permissions -rw-r--r--
Branch for GCC_SURGE fixes

/*
* 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_CHROME_WIDGET_H_
#define _GINEBRA_CHROME_WIDGET_H_

#include <QtGui>
#include <QMap>
#include <QPainterPath>
//#include "chromerenderer.h"

//#define G_QUICKSTART

class QWebPage;
class ChromeSnippet;
class QNetworkAccessManager;
class QWebView;
class QWebFrame;
class QNetworkReply;
class ChromeView;
class QGraphicsScene;
class QTimeLine;

/**
 * \brief Manages chrome snippets.
 * 
 * The ChromeWidget class manages the snippets that comprise the "chrome" of 
 * the browser and the underlying web page that renders the snippets. 
 * 
 * \sa ChromeSnippet
 */
class ChromeWidget : public QObject
{
    Q_OBJECT

typedef enum {
  minimized,
  maximized
} Visibility;

public:
    friend class ChromeRenderer;
    ChromeWidget(ChromeView *parentChromeView, QGraphicsItem *parent, const QString &jsName);
    ~ChromeWidget();
    void setChromeUrl(QString url);
    QString chromeUrl() const { return m_chromeUrl; }
    QWebPage * chromePage() { return m_chromePage; }
    void setContentPage(QWebPage * p);
#ifdef Q_OS_SYMBIAN
    QPixmap * buffer();
#else
    QImage* buffer();
#endif
    QPainter* painter();
    void setGeometry(const QRect &rect);
    void setGeometry(int x, int y, int w, int h) { setGeometry(QRect(x, y, w, h)); }
    ChromeSnippet *getSnippet(const QString &docElementId, QGraphicsItem *parent = 0);
    void getInitialChrome();

    void show(const QString& id, int x, int y);
    void show(const QString& id);
    void hide(const QString& id);
    void setLocation(const QString& id, int x, int y);
    void setAnchor(const QString& id, const QString& anchor);
    void toggleVisibility(const QString& id);
    void toggleAttention(const QString& id);
    void setVisibilityAnimator(const QString& elementId, const QString & animatorName);
    void setAttentionAnimator(const QString& elementId, const QString & animatorName);
    QString getDisplayMode();
    
    // Returns the javascript object that represents this object.
	QObject *jsObject();

    //returns the parent chrome view
    ChromeView* getChromeView() { return m_parentChromeView; }

signals:
    void delegateLink(const QUrl& url);
    void loadStarted();
    void loadComplete();
    void dragStarted();
    void dragFinished();
    void viewPortResize(QRect);
   
    
public slots:
    void updateViewPort();
    void setViewPort(QRect viewPort);
    void repaintRequested(QRect dirtyRect);
    
protected slots:
    void frameCreated(QWebFrame* frame);
    void loadFinished(bool ok = true);
    void onLoadStarted();
    void networkRequestFinished(QNetworkReply *);
    void debugAlert(const QString &msg);
public:
    QSize getDocElementSize(const QString &id);
    QRect getDocElementRect(const QString &id);
    void updateChildGeometries();
    void dump();
protected:
    QVariant getDocElement(const QString &id);
    QString getDocElementAttribute(const QString &id, const QString &attribute);
    QVariant getDocIdsByName(const QString &name);
    QVariant getDocIdsByClassName(const QString &name);
    QVariant getChildIdsByClassName(const QString &parentId, const QString &name);
    void resizeBuffer();
    void updateOwnerAreas();
    bool eventFilter(QObject *object, QEvent *event);
    void paintDirtyRegion();

    // Get the snippet that contains the point pos.
    ChromeSnippet *getSnippet(QPoint pos) const;

    //Reconstruct snippets from the cache
    bool isCached(QString url);
    void cacheBuffer();
    void restoreBuffer();

protected:
    //This is the web page that renders the chrome
    QWebPage *m_chromePage;

private:
    QGraphicsItem *m_parentItem;
    ChromeView *m_parentChromeView;
    QMap<QString, ChromeSnippet *> m_snippetMap;
    QString m_chromeUrl;
    Visibility m_state;
#ifdef Q_OS_SYMBIAN
    QPixmap *m_buffer;
#else
    QImage *m_buffer;
#endif
    QPainter *m_painter;
    QRegion m_dirtyRegion;
    QTimer *m_dirtyTimer;
    class ChromeWidgetJSObject *m_jsObject;  // owned
#ifdef G_QUICKSTART
    bool m_bufferCached;
    QString m_bufferFile;
    ChromeSnippet* m_fakeTopSnippet;
    ChromeSnippet* m_fakeBottomSnippet;
#endif
};
#endif