ginebra/chromesnippetjsobject.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 14 May 2010 15:40:36 +0300
changeset 1 b0dd75e285d2
parent 0 1450b09d0cfd
permissions -rw-r--r--
Revision: 201015 Kit: 201019

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

#include "chromesnippet.h"
#include "utilities.h"
#include "visibilityanimator.h"
#include "attentionanimator.h"

/*! \brief Javascript wrapper for ChromeSnippets.  
 * The ChromeSnippetJSObject class is a Javascript wrapper for ChromeSnippets.
 * All signals, slots and properties of chrome snippets are accessible from javascript.  Snippets are children of the 
 * \c window.snippets object and as such can be accessed using their DOM element ids.
 * For example, given a snippet defined in HTML like this:
 * \code
 * <div class="GinebraSnippet" id="ExampleSnippet" name="example" 
 *      data-GinebraAnchor="AnchorTop" data-GinebraVisible="false">
 *      ...
 * </div>
 * \endcode
 * You can show it on-screen from Javascript like this:
 * \code
 * window.snippets.ExampleSnippet.show();
 * \endcode  
 */
class ChromeSnippetJSObject : public QObject {
    Q_OBJECT
  public:
    ChromeSnippetJSObject(QObject *parent, ChromeSnippet &snippet, const QString &objName) 
	  : QObject(parent),
		m_snippet(snippet) {
        setObjectName(objName);
    }
    
  signals:
    // Sent when the snippet starts being dragged.
    void dragStarted();

    // Sent when the snippet has finished being dragged.
    void dragFinished();
    
    // Sent when the snippet is shown.
    void onShow();

    // Sent when the snippet is hidden.
    void onHide();
  
  public slots:
    // Show the snippet.  If useAnimation is true the animation set with
    // setVisibilityAnimator() will be used.
    // \sa setVisibilityAnimator
    void show(bool useAnimation = true) { m_snippet.show(useAnimation); }

    // Hide the snippet.  If useAnimation is true the animation set with
    // setVisibilityAnimator() will be used.
    // \sa setVisibilityAnimator
    void hide(bool useAnimation = true) { m_snippet.hide(useAnimation); }

    // Toggle the visibility of the snippet.  If it is hidden this function
    // will show it and vice versa.  Visibility animations will be used.
    void toggleVisibility() { m_snippet.toggleVisibility(); }

    // Toggle attention animation of the snippet.
    // \sa setAttentionAnimator
    void toggleAttention() { m_snippet.toggleAttention(); }

    // Starts an animation timer.  Returns an animation object that can rotate, move or fade the snippet.
    // 
    // \sa GraphicsItemAnimation
    QObject *animate(int duration) { return m_snippet.animate(duration); }

    // Set the position of the snippet's upper-left corner on the screen.
    // \sa position
    void setPosition(int x, int y) { m_snippet.setPosition(x, y); }
    QString getDisplayMode(){ return m_snippet.getDisplayMode(); }
    bool getContextMenuFlag(){ return ChromeSnippet::getContextMenuFlag();}
    
    // Set the animation that is triggered when the snippet is shown or hidden.
    // \param animatorName Possible values are:
    // \li "G_VISIBILITY_FLYOUT_ANIMATOR"
    // \li "G_VISIBILITY_FADE_ANIMATOR"
    // \li "G_VISIBILITY_SLIDE_ANIMATOR"
    // \li "G_VISIBILITY_MALSTROM_ANIMATOR"
    void setVisibilityAnimator(const QString &animatorName) { m_snippet.setVisibilityAnimator(animatorName); }
    
    // Set the animation that is triggered when the snippet wants attention.
    // \param animatorName Possible values are:
    // \li "G_ATTENTION_BOUNCE_ANIMATOR"
    // \li "G_ATTENTION_PULSE_ANIMATOR"
    void setAttentionAnimator(const QString &animatorName) { m_snippet.setAttentionAnimator(animatorName); }

    // return true if snippet graphicItem is visible
    bool isVisible() {return m_snippet.isVisible();}
    
    // Print info about the snippet to debug output.
    void dump() const { m_snippet.dump(); }
    

    // repaint the snippet
    void repaint() { m_snippet.repaint();}

  public:
    /*! The id of the DOM element of this snippet.  This is the value set in
     * the HTML id tag in the chrome file. 
     * In the example below "ExampleSnippet" is the id.
     * \code 
     * <div class="GinebraSnippet" id="ExampleSnippet" name="example" 
     *      data-GinebraAnchor="AnchorTop" data-GinebraVisible="true">
     * ...
     * </div>
     * \endcode
     */
    Q_PROPERTY(QString id READ getId)
    QString getId() const { return m_snippet.docElementId(); }
    
    /*! The snippet's screen geometry.
     * Example javascript code:
     * \code var width = window.snippets.ExampleSnippet.geometry.width;
     * \endcode
     */
    Q_PROPERTY(QObject * geometry READ getGeometry)
    // \sa geometry
    QObject *getGeometry() const { return m_snippet.getGeometry(); }
    
    /*! 
     * \property position
     * \brief The position of the snippet's top-left corner.
     * Example javascript code:
     * \code var x = window.snippets.ExampleSnippet.position.x;
     * \endcode
     */
    Q_PROPERTY(QObject * position READ getPosition)
    // \sa position
    QObject *getPosition() const { return m_snippet.getPosition(); }
    
    /*! 
     * \property draggable
     * \brief True if the snippet can be dragged with the mouse/touch.  Defaults to false.
     * \sa dragStarted
     * \sa dragFinished
     */    
    Q_PROPERTY(bool draggable READ getDraggable WRITE setDraggable)
    // \sa draggable
    bool getDraggable() const { return m_snippet.draggable(); }
    // \sa draggable
    void setDraggable(bool value) { m_snippet.setDraggable(value); }
    
    // The z-order value of the snippet.
    Q_PROPERTY(qreal zValue READ getZValue WRITE setZValue)
    // \sa zValue
    qreal getZValue() const { return m_snippet.zValue(); }
    // \sa zValue
    void setZValue(qreal value) { m_snippet.setZValue(value); }

    /*!
     * \property isHiding
     * \brief True if the snippet is hiding behind other snippets.
     */
    bool isHiding() const { return m_snippet.isHiding(); }
    void setHiding(bool value) { return m_snippet.setHiding(value); }
    Q_PROPERTY(int isHiding READ isHiding WRITE setHiding)
    
    // Determines where the snippet is displayed.  When "AnchorTop" or "AnchorBottom"
    // are used the size of the content viewport is reduced to allow the snippet to
    // fit in above or below it.  The default value is "AnchorNone".
    // Possible values are:
    // \li "AnchorTop"
    // \li "AnchorBottom"
    // \li "AnchorCenter"
    // \li "AnchorFullScreen"
    // \li "AnchorNone" - Position is determined by the \ref position property.
    Q_PROPERTY(QString anchor READ getAnchor WRITE setAnchor)
    // \sa anchor
    QString getAnchor() { return m_snippet.anchor(); }
    // \sa anchor
    void setAnchor(const QString& anchor) { m_snippet.setAnchor(anchor); }
    
    Q_PROPERTY(int anchorOffset READ getAnchorOffset WRITE setAnchorOffset)
    // \sa anchorOffset
    int getAnchorOffset() { return m_snippet.anchorOffset(); }
    // \sa anchorOffset
    void setAnchorOffset(int anchorOffset) { m_snippet.setAnchorOffset(anchorOffset); }
    
    // Set to true if the snippet should cover the content viewport.
    Q_PROPERTY(bool hidesContent READ getHidesContent WRITE setHidesContent)
    // \sa hidesContent
    bool getHidesContent(){ return m_snippet.hidesContent();}
    // \sa hidesContent
    void setHidesContent(bool hidesContent) { m_snippet.setHidesContent(hidesContent); }
    
  private:
    ChromeSnippet &m_snippet;
    
    friend class ChromeSnippet;
};


#endif  // _CHROMESNIPPETJSOBJECT_H_INCLUDED