From: Kevin Krammer Date: Wed, 17 Oct 2012 16:21:03 +0000 (+0200) Subject: All widgets can have actions added, e.g. for context menu X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=eb79e72b0aaf49128228fcb5156aacc39861f95b;p=konrad%2FDeclarativeWidgets.git All widgets can have actions added, e.g. for context menu --- diff --git a/declarativeobjects.cpp b/declarativeobjects.cpp index c2462d3..ee66463 100644 --- a/declarativeobjects.cpp +++ b/declarativeobjects.cpp @@ -233,17 +233,6 @@ DeclarativeMenu::DeclarativeMenu(QObject *parent) : DeclarativeWidgetProxy(object); - if (action) { - m_proxiedObject->addAction(action); - m_children.append(declarativeObject); - } else { - DeclarativeWidgetProxy::addQObject(object, declarativeObject); - } -} - void DeclarativeMenu::addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject) { QMenu *menu = qobject_cast(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(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); diff --git a/declarativeobjects_p.h b/declarativeobjects_p.h index 6245605..94cd85b 100644 --- a/declarativeobjects_p.h +++ b/declarativeobjects_p.h @@ -121,7 +121,14 @@ class DeclarativeWidgetProxy : public DeclarativeObjectProxy return; } + QAction *action = qobject_cast(declarativeObject->object()); + if (action) { + addAction(action, declarativeObject); + return; + } + addQObject(declarativeObject->object(), declarativeObject); + return; } DeclarativeObjectProxy::dataAppend(object); @@ -140,6 +147,12 @@ class DeclarativeWidgetProxy : public DeclarativeObjectProxy DeclarativeObjectProxy::m_proxiedObject->setLayout(layout); } + virtual void addAction(QAction *action, AbstractDeclarativeObject *declarativeObject) + { + DeclarativeObjectProxy::m_children.append(declarativeObject); + DeclarativeObjectProxy::m_proxiedObject->addAction(action); + } + virtual void addQObject(QObject *object, AbstractDeclarativeObject *declarativeObject) { object->setParent(DeclarativeObjectProxy::m_proxiedObject); @@ -248,7 +261,6 @@ class DeclarativeMenu : public DeclarativeWidgetProxy 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 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); }; diff --git a/editor.qml b/editor.qml index db5bb2f..af10746 100644 --- a/editor.qml +++ b/editor.qml @@ -48,5 +48,14 @@ MainWindow { TextEdit { id: textEdit + + contextMenuPolicy: Qt.ActionsContextMenu + + Action { + text: "Copy" + } + Action { + text: "Paste" + } } }