ginebra2/ObjectCharm.h
changeset 5 0f2326c2a325
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/ObjectCharm.h	Wed Jun 23 17:59:43 2010 +0300
@@ -0,0 +1,85 @@
+
+
+#ifndef OBJECTCHARM_H_
+#define OBJECTCHARM_H_
+
+#include <QObject>
+
+class QGraphicsObject;
+class QGraphicsScene;
+class QGraphicsItem;
+
+namespace GVA {
+
+// -------------------------------
+
+/*!
+ * Base class for object "charms".  Charms set an event filter on a particular
+ * object and perform some action in response to the events sent to the object.
+ * ObjectCharms automatically destroy themselves when the target object is
+ * destroyed.
+ */
+class ObjectCharm : public QObject {
+    Q_OBJECT
+  public:
+    ObjectCharm(QObject *object);
+
+  private slots:
+    virtual void onObjectDestroyed();
+
+  protected:
+    QObject *m_object;
+};
+
+// -------------------------------
+
+/*!
+ * This class emits a signal when the user clicks outside of the given graphics object.
+ */
+class ExternalEventCharm : public ObjectCharm {
+    Q_OBJECT
+  public:
+    ExternalEventCharm(QGraphicsObject *object);
+
+  signals:
+    /*! This signal is emitted when the user clicks outside of the object.
+     * \param type The Qt event type.
+     * \param name The Qt event name.
+     * \param description The Qt event description.
+     */
+    void externalMouseEvent(
+            int type,
+            const QString & name,
+            const QString & description);
+  private:
+    void checkForExternalEvent(QObject * o, QEvent * e);
+    void emitExternalEvent(QEvent * e);
+    bool eventFilter(QObject *object, QEvent *event);
+    QGraphicsScene *scene();
+};
+
+// -------------------------------
+
+/*!
+ * This class draws a circle in response to mouse click events on the given object.  Intended
+ * for testing purposes only.
+ */
+class TouchCircleCharm : public ObjectCharm {
+    Q_OBJECT
+  public:
+    TouchCircleCharm(QObject *object, QGraphicsItem *parent = 0);
+    ~TouchCircleCharm();
+
+  private slots:
+    void onTimer();
+
+  private:
+    bool eventFilter(QObject *object, QEvent *event);
+
+    class QGraphicsEllipseItem * m_item;
+    class QTimer * m_timer;
+};
+
+}
+
+#endif /* OBJECTCHARM_H_ */