All widgets can have actions added, e.g. for context menu
authorKevin Krammer <kevin.krammer@kdab.com>
Wed, 17 Oct 2012 16:21:03 +0000 (18:21 +0200)
committerKevin Krammer <kevin.krammer@kdab.com>
Wed, 17 Oct 2012 16:21:03 +0000 (18:21 +0200)
declarativeobjects.cpp
declarativeobjects_p.h
editor.qml

index c2462d3..ee66463 100644 (file)
@@ -233,17 +233,6 @@ DeclarativeMenu::DeclarativeMenu(QObject *parent) : DeclarativeWidgetProxy<QMenu
   connectAllSignals(m_proxiedObject, this);
 }
 
-void DeclarativeMenu::addQObject(QObject *object, AbstractDeclarativeObject *declarativeObject)
-{
-  QAction *action = qobject_cast<QAction*>(object);
-  if (action) {
-      m_proxiedObject->addAction(action);
-      m_children.append(declarativeObject);
-  } else {
-      DeclarativeWidgetProxy<QMenu>::addQObject(object, declarativeObject);
-  }
-}
-
 void DeclarativeMenu::addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject)
 {
   QMenu *menu = qobject_cast<QMenu*>(widget);
@@ -405,19 +394,6 @@ DeclarativeToolBar::DeclarativeToolBar(QObject *parent) : DeclarativeWidgetProxy
   connectAllSignals(m_proxiedObject, this);
 }
 
-void DeclarativeToolBar::addQObject(QObject *object, AbstractDeclarativeObject *declarativeObject)
-{
-  QAction *action = qobject_cast<QAction*>(object);
-  if (!action) {
-    qmlInfo(declarativeObject) << "The QToolBar can only contain QWidget or QAction";
-    return;
-  }
-
-  m_proxiedObject->addAction(action);
-
-  m_children.append(declarativeObject);
-}
-
 void DeclarativeToolBar::addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject)
 {
   m_proxiedObject->addWidget(widget);
index 6245605..94cd85b 100644 (file)
@@ -121,7 +121,14 @@ class DeclarativeWidgetProxy : public DeclarativeObjectProxy<T>
             return;
           }
 
+          QAction *action = qobject_cast<QAction*>(declarativeObject->object());
+          if (action) {
+            addAction(action, declarativeObject);
+            return;
+          }
+
           addQObject(declarativeObject->object(), declarativeObject);
+          return;
         }
 
         DeclarativeObjectProxy<T>::dataAppend(object);
@@ -140,6 +147,12 @@ class DeclarativeWidgetProxy : public DeclarativeObjectProxy<T>
       DeclarativeObjectProxy<T>::m_proxiedObject->setLayout(layout);
     }
 
+    virtual void addAction(QAction *action, AbstractDeclarativeObject *declarativeObject)
+    {
+      DeclarativeObjectProxy<T>::m_children.append(declarativeObject);
+      DeclarativeObjectProxy<T>::m_proxiedObject->addAction(action);
+    }
+
     virtual void addQObject(QObject *object, AbstractDeclarativeObject *declarativeObject)
     {
       object->setParent(DeclarativeObjectProxy<T>::m_proxiedObject);
@@ -248,7 +261,6 @@ class DeclarativeMenu : public DeclarativeWidgetProxy<QMenu>
     DeclarativeMenu(QObject *parent = 0);
 
   protected:
-    virtual void addQObject(QObject *object, AbstractDeclarativeObject *declarativeObject);
     virtual void addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject);
     virtual void setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject);
 };
@@ -340,7 +352,6 @@ class DeclarativeToolBar : public DeclarativeWidgetProxy<QToolBar>
     DeclarativeToolBar(QObject *parent = 0);
 
   protected:
-    virtual void addQObject(QObject *object, AbstractDeclarativeObject *declarativeObject);
     virtual void addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject);
     virtual void setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject);
 };
index db5bb2f..af10746 100644 (file)
@@ -48,5 +48,14 @@ MainWindow {
 
   TextEdit {
     id: textEdit
+
+    contextMenuPolicy: Qt.ActionsContextMenu
+
+    Action {
+      text: "Copy"
+    }
+    Action {
+      text: "Paste"
+    }
   }
 }