ginebra/chromesnippetjsobject.h
changeset 0 1450b09d0cfd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra/chromesnippetjsobject.h	Tue May 04 12:39:35 2010 +0300
@@ -0,0 +1,215 @@
+/*
+* 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