qmenu bindings with the QtComponents api
This commit is contained in:
parent
a8aa755fe9
commit
5788424702
@ -4,6 +4,8 @@ set(plasmacomponents_SRCS
|
||||
plasmacomponentsplugin.cpp
|
||||
qrangemodel.cpp
|
||||
enums.cpp
|
||||
qmenu.cpp
|
||||
qmenuitem.cpp
|
||||
)
|
||||
|
||||
INCLUDE_DIRECTORIES(
|
||||
@ -16,7 +18,7 @@ qt4_automoc(${plasmacomponents_SRCS})
|
||||
|
||||
|
||||
add_library(plasmacomponentsplugin SHARED ${plasmacomponents_SRCS})
|
||||
target_link_libraries(plasmacomponentsplugin ${QT_QTCORE_LIBRARY} ${QT_QTDECLARATIVE_LIBRARY})
|
||||
target_link_libraries(plasmacomponentsplugin ${QT_QTCORE_LIBRARY} ${QT_QTDECLARATIVE_LIBRARY} ${QT_QTGUI_LIBRARY})
|
||||
|
||||
install(TARGETS plasmacomponentsplugin DESTINATION ${IMPORTS_INSTALL_DIR}/org/kde/plasma/components)
|
||||
|
||||
|
@ -24,7 +24,8 @@
|
||||
#include "qrangemodel.h"
|
||||
|
||||
#include "enums.h"
|
||||
|
||||
#include "qmenu.h"
|
||||
#include "qmenuitem.h"
|
||||
|
||||
|
||||
void PlasmaComponentsPlugin::registerTypes(const char *uri)
|
||||
@ -32,6 +33,9 @@ void PlasmaComponentsPlugin::registerTypes(const char *uri)
|
||||
Q_ASSERT(uri == QLatin1String("org.kde.plasma.components"));
|
||||
|
||||
|
||||
qmlRegisterType<QMenuProxy>(uri, 0, 1, "Menu");
|
||||
qmlRegisterType<QMenuProxy>(uri, 0, 1, "ContextMenu");
|
||||
qmlRegisterType<QMenuItem>(uri, 0, 1, "MenuItem");
|
||||
|
||||
qmlRegisterType<Plasma::QRangeModel>(uri, 0, 1, "RangeModel");
|
||||
|
||||
|
@ -18,7 +18,10 @@
|
||||
***************************************************************************/
|
||||
|
||||
#include "qmenu.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QGraphicsObject>
|
||||
#include <QGraphicsView>
|
||||
|
||||
QMenuProxy::QMenuProxy (QObject *parent)
|
||||
: QObject (parent)
|
||||
@ -31,9 +34,9 @@ QMenuProxy::~QMenuProxy()
|
||||
delete m_menu;
|
||||
}
|
||||
|
||||
QDeclarativeListProperty<QMenuAction> QMenuProxy::actions()
|
||||
QDeclarativeListProperty<QMenuItem> QMenuProxy::actions()
|
||||
{
|
||||
return QDeclarativeListProperty<QMenuAction>(this, m_actions);
|
||||
return QDeclarativeListProperty<QMenuItem>(this, m_actions);
|
||||
}
|
||||
|
||||
int QMenuProxy::actionCount() const
|
||||
@ -41,7 +44,7 @@ int QMenuProxy::actionCount() const
|
||||
return m_actions.count();
|
||||
}
|
||||
|
||||
QMenuAction *QMenuProxy::action(int index) const
|
||||
QMenuItem *QMenuProxy::action(int index) const
|
||||
{
|
||||
return m_actions.at(index);
|
||||
}
|
||||
@ -49,7 +52,7 @@ QMenuAction *QMenuProxy::action(int index) const
|
||||
void QMenuProxy::showMenu(int x, int y)
|
||||
{
|
||||
m_menu->clear();
|
||||
foreach(QMenuAction* item, m_actions) {
|
||||
foreach(QMenuItem* item, m_actions) {
|
||||
m_menu->addAction (item);
|
||||
}
|
||||
|
||||
@ -57,5 +60,54 @@ void QMenuProxy::showMenu(int x, int y)
|
||||
m_menu->popup(screenPos);
|
||||
}
|
||||
|
||||
void QMenuProxy::open()
|
||||
{
|
||||
QGraphicsObject *parentItem = qobject_cast<QGraphicsObject *>(parent());
|
||||
|
||||
if (!parentItem || !parentItem->scene()) {
|
||||
showMenu(0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
QList<QGraphicsView*> views = parentItem->scene()->views();
|
||||
|
||||
if (views.size() < 1) {
|
||||
showMenu(0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
QGraphicsView *view = 0;
|
||||
if (views.size() == 1) {
|
||||
view = views[0];
|
||||
} else {
|
||||
QGraphicsView *found = 0;
|
||||
QGraphicsView *possibleFind = 0;
|
||||
foreach (QGraphicsView *v, views) {
|
||||
if (v->sceneRect().intersects(parentItem->sceneBoundingRect()) ||
|
||||
v->sceneRect().contains(parentItem->scenePos())) {
|
||||
if (v->isActiveWindow()) {
|
||||
found = v;
|
||||
} else {
|
||||
possibleFind = v;
|
||||
}
|
||||
}
|
||||
}
|
||||
view = found ? found : possibleFind;
|
||||
}
|
||||
|
||||
if (!view) {
|
||||
showMenu(0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
QPoint viewPos = view->mapFromScene(parentItem->scenePos());
|
||||
showMenu(viewPos.x(), viewPos.y());
|
||||
}
|
||||
|
||||
void QMenuProxy::close()
|
||||
{
|
||||
m_menu->hide();
|
||||
}
|
||||
|
||||
#include "qmenu.moc"
|
||||
|
@ -23,27 +23,29 @@
|
||||
#include <QObject>
|
||||
#include <QMenu>
|
||||
#include <QDeclarativeListProperty>
|
||||
#include "qmenuaction.h"
|
||||
#include "qmenuitem.h"
|
||||
|
||||
class QMenuProxy : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(QDeclarativeListProperty<QMenuAction> actions READ actions)
|
||||
Q_PROPERTY(QDeclarativeListProperty<QMenuItem> actions READ actions)
|
||||
Q_CLASSINFO("DefaultProperty", "actions")
|
||||
|
||||
public:
|
||||
QMenuProxy(QObject *parent = 0);
|
||||
~QMenuProxy();
|
||||
|
||||
QDeclarativeListProperty<QMenuAction> actions();
|
||||
QDeclarativeListProperty<QMenuItem> actions();
|
||||
int actionCount() const;
|
||||
QMenuAction *action(int) const;
|
||||
QMenuItem *action(int) const;
|
||||
|
||||
Q_INVOKABLE void showMenu(int x, int y);
|
||||
void showMenu(int x, int y);
|
||||
Q_INVOKABLE void open();
|
||||
Q_INVOKABLE void close();
|
||||
|
||||
private:
|
||||
QList<QMenuAction*> m_actions;
|
||||
QList<QMenuItem*> m_actions;
|
||||
QMenu *m_menu;
|
||||
};
|
||||
|
@ -17,11 +17,13 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
***************************************************************************/
|
||||
|
||||
#include "qmenuaction.h"
|
||||
#include "qmenuitem.h"
|
||||
|
||||
QMenuAction::QMenuAction(QObject *parent) : QAction(parent)
|
||||
QMenuItem::QMenuItem(QObject *parent)
|
||||
: QAction(parent)
|
||||
{
|
||||
connect(this, SIGNAL(triggered(bool)), this, SIGNAL(clicked()));
|
||||
}
|
||||
|
||||
#include "qmenuaction.moc"
|
||||
#include "qmenuitem.moc"
|
||||
|
@ -17,21 +17,24 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef QMENUACTION_H
|
||||
#define QMENUACTION_H
|
||||
#ifndef QMENUITEM_H
|
||||
#define QMENUITEM_H
|
||||
|
||||
#include <QAction>
|
||||
#include <QObject>
|
||||
|
||||
class QMenuAction : public QAction
|
||||
class QMenuItem : public QAction
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(bool separator READ isSeparator WRITE setSeparator)
|
||||
|
||||
public:
|
||||
QMenuAction(QObject *parent = 0);
|
||||
QMenuItem(QObject *parent = 0);
|
||||
|
||||
Q_SIGNALS:
|
||||
void clicked();
|
||||
};
|
||||
|
||||
#endif // QMENUACTION_H
|
||||
#endif // QMENUITEM_H
|
||||
|
@ -25,15 +25,11 @@ ToolButton 0.1 ToolButton.qml
|
||||
ListItem 0.1 ToolButton.qml
|
||||
|
||||
Window 0.1 Window.qml
|
||||
Menu 0.1 Menu.qml
|
||||
MenuItem 0.1 MenuItem.qml
|
||||
MenuLayout 0.1 MenuLayout.qml
|
||||
Page 0.1 Page.qml
|
||||
PageStack 0.1 PageStack.qml
|
||||
SelectionDialog 0.1 SelectionDialog.qml
|
||||
Dialog 0.1 Dialog.qml
|
||||
QueryDialog 0.1 QueryDialog.qml
|
||||
ContextMenu 0.1 ContextMenu.qml
|
||||
TabBar 0.1 TabBar.qml
|
||||
TabBarLayout 0.1 TabBarLayout.qml
|
||||
TabButton 0.1 TabButton.qml
|
||||
|
@ -7,8 +7,6 @@ set(qtextracomponents_SRCS
|
||||
qpixmapitem.cpp
|
||||
qimageitem.cpp
|
||||
qiconitem.cpp
|
||||
qmenu.cpp
|
||||
qmenuaction.cpp
|
||||
)
|
||||
|
||||
INCLUDE_DIRECTORIES(
|
||||
|
@ -26,8 +26,7 @@
|
||||
#include "qpixmapitem.h"
|
||||
#include "qimageitem.h"
|
||||
#include "qiconitem.h"
|
||||
#include "qmenu.h"
|
||||
#include "qmenuaction.h"
|
||||
|
||||
|
||||
void QtExtraComponentsPlugin::registerTypes(const char *uri)
|
||||
{
|
||||
@ -36,8 +35,6 @@ void QtExtraComponentsPlugin::registerTypes(const char *uri)
|
||||
qmlRegisterType<QPixmapItem>(uri, 0, 1, "QPixmapItem");
|
||||
qmlRegisterType<QImageItem>(uri, 0, 1, "QImageItem");
|
||||
qmlRegisterType<QIconItem>(uri, 0, 1, "QIconItem");
|
||||
qmlRegisterType<QMenuProxy>(uri, 0, 1, "QMenu");
|
||||
qmlRegisterType<QMenuAction>(uri, 0, 1, "QMenuAction");
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user