/* * Copyright 2011 by Marco Martin * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "plasmacomponentsplugin.h" #include #include #include #include #include "qrangemodel.h" #include #include #include "enums.h" #include "qmenu.h" #include "qmenuitem.h" #include "kdialogproxy.h" #include "fullscreendialog.h" #include "fullscreensheet.h" Q_EXPORT_PLUGIN2(plasmacomponentsplugin, PlasmaComponentsPlugin) class BKSingleton { public: EngineBookKeeping self; }; K_GLOBAL_STATIC(BKSingleton, privateBKSelf) EngineBookKeeping::EngineBookKeeping() { } EngineBookKeeping *EngineBookKeeping::self() { return &privateBKSelf->self; } QDeclarativeEngine *EngineBookKeeping::engineFor(QObject *item) const { //for components creation, any engine will do, as long is valid return m_engines.values().first(); /* foreach (QDeclarativeEngine *engine, m_engines) { QObject *root = engine->rootContext()->contextObject(); QObject *candidate = item; while (candidate) { if (candidate == root) { return engine; } candidate = candidate->parent(); } } return 0;*/ } void EngineBookKeeping::insertEngine(QDeclarativeEngine *engine) { connect(engine, SIGNAL(destroyed(QObject *)), this, SLOT(engineDestroyed(QObject *deleted))); m_engines.insert(engine); } void EngineBookKeeping::engineDestroyed(QObject *deleted) { m_engines.remove(static_cast(deleted)); } void PlasmaComponentsPlugin::initializeEngine(QDeclarativeEngine *engine, const char *uri) { QDeclarativeExtensionPlugin::initializeEngine(engine, uri); EngineBookKeeping::self()->insertEngine(engine); } void PlasmaComponentsPlugin::registerTypes(const char *uri) { Q_ASSERT(uri == QLatin1String("org.kde.plasma.components")); QString componentsPlatform = getenv("KDE_PLASMA_COMPONENTS_PLATFORM"); if (componentsPlatform.isEmpty()) { KConfigGroup cg(KSharedConfig::openConfig("kdeclarativerc"), "Components-platform"); componentsPlatform = cg.readEntry("name", "desktop"); } //platform specific c++ components if (componentsPlatform == "desktop") { qmlRegisterType(uri, 0, 1, "QueryDialog"); qmlRegisterType(uri, 0, 1, "Menu"); qmlRegisterType(uri, 0, 1, "MenuItem"); //on touch systems the dialog is fullscreen, c++ needed to do that } else { qmlRegisterType(uri, 0, 1, "Dialog"); qmlRegisterType(uri, 0, 1, "Sheet"); } qmlRegisterType(uri, 0, 1, "RangeModel"); qmlRegisterUncreatableType(uri, 0, 1, "DialogStatus", ""); qmlRegisterUncreatableType(uri, 0, 1, "PageOrientation", ""); qmlRegisterUncreatableType(uri, 0, 1, "PageStatus", ""); } #include "plasmacomponentsplugin.moc"