* move more properties into AppInterface

* add 'bool multihead'

svn path=/trunk/KDE/kdebase/workspace/; revision=1198260
This commit is contained in:
Aaron J. Seigo 2010-11-18 01:16:57 +00:00 committed by Marco Martin
parent e52a934109
commit 61a7ee7247
4 changed files with 87 additions and 56 deletions

View File

@ -22,30 +22,33 @@
#include <QEventLoop> #include <QEventLoop>
#include <QTimer> #include <QTimer>
#include <KGlobalSettings>
#include <Plasma/Containment> #include <Plasma/Containment>
#include <Plasma/Corona> #include <Plasma/Corona>
#include <Plasma/DataEngineManager> #include <Plasma/DataEngineManager>
#include <Plasma/Theme>
#include "scriptengine.h" #include "scriptengine.h"
namespace WorkspaceScripting namespace WorkspaceScripting
{ {
AppInterface::AppInterface(Plasma::Corona *corona, QObject *parent) AppInterface::AppInterface(ScriptEngine *env)
: QObject(parent), : QObject(env),
m_corona(corona) m_env(env)
{ {
} }
int AppInterface::screenCount() const int AppInterface::screenCount() const
{ {
return m_corona->numScreens(); return m_env->corona()->numScreens();
} }
QRectF AppInterface::screenGeometry(int screen) const QRectF AppInterface::screenGeometry(int screen) const
{ {
return m_corona->screenGeometry(screen); return m_env->corona()->screenGeometry(screen);
} }
QList<int> AppInterface::activityIds() const QList<int> AppInterface::activityIds() const
@ -54,7 +57,7 @@ QList<int> AppInterface::activityIds() const
// however QScript deals with QList<uint> very, very poory // however QScript deals with QList<uint> very, very poory
QList<int> containments; QList<int> containments;
foreach (Plasma::Containment *c, m_corona->containments()) { foreach (Plasma::Containment *c, m_env->corona()->containments()) {
if (!ScriptEngine::isPanel(c)) { if (!ScriptEngine::isPanel(c)) {
containments.append(c->id()); containments.append(c->id());
} }
@ -69,7 +72,7 @@ QList<int> AppInterface::panelIds() const
// however QScript deals with QList<uint> very, very poory // however QScript deals with QList<uint> very, very poory
QList<int> panels; QList<int> panels;
foreach (Plasma::Containment *c, m_corona->containments()) { foreach (Plasma::Containment *c, m_env->corona()->containments()) {
//kDebug() << "checking" << (QObject*)c << isPanel(c); //kDebug() << "checking" << (QObject*)c << isPanel(c);
if (ScriptEngine::isPanel(c)) { if (ScriptEngine::isPanel(c)) {
panels.append(c->id()); panels.append(c->id());
@ -79,14 +82,44 @@ QList<int> AppInterface::panelIds() const
return panels; return panels;
} }
QString AppInterface::applicationVersion() const
{
return KGlobal::mainComponent().aboutData()->version();
}
QString AppInterface::platformVersion() const
{
return KDE::versionString();
}
int AppInterface::scriptingVersion() const
{
return PLASMA_DESKTOP_SCRIPTING_VERSION;
}
QString AppInterface::theme() const
{
return Plasma::Theme::defaultTheme()->themeName();
}
void AppInterface::setTheme(const QString &name)
{
Plasma::Theme::defaultTheme()->setThemeName(name);
}
bool AppInterface::multihead() const
{
return KGlobalSettings::isMultiHead();
}
void AppInterface::lockCorona(bool locked) void AppInterface::lockCorona(bool locked)
{ {
m_corona->setImmutability(locked ? Plasma::UserImmutable : Plasma::Mutable); m_env->corona()->setImmutability(locked ? Plasma::UserImmutable : Plasma::Mutable);
} }
bool AppInterface::coronaLocked() const bool AppInterface::coronaLocked() const
{ {
return m_corona->immutability() != Plasma::Mutable; return m_env->corona()->immutability() != Plasma::Mutable;
} }
void AppInterface::sleep(int ms) void AppInterface::sleep(int ms)

View File

@ -35,6 +35,8 @@ namespace Plasma
namespace WorkspaceScripting namespace WorkspaceScripting
{ {
class ScriptEngine;
class PLASMAGENERICSHELL_EXPORT AppInterface : public QObject class PLASMAGENERICSHELL_EXPORT AppInterface : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -46,9 +48,14 @@ class PLASMAGENERICSHELL_EXPORT AppInterface : public QObject
Q_PROPERTY(QStringList knownPanelTypes READ knownPanelTypes) Q_PROPERTY(QStringList knownPanelTypes READ knownPanelTypes)
Q_PROPERTY(QStringList knownActivityTypes READ knownActivityTypes) Q_PROPERTY(QStringList knownActivityTypes READ knownActivityTypes)
Q_PROPERTY(QStringList knownWidgetTypes READ knownWidgetTypes) Q_PROPERTY(QStringList knownWidgetTypes READ knownWidgetTypes)
Q_PROPERTY(QString theme READ theme WRITE setTheme)
Q_PROPERTY(QString applicationVersion READ applicationVersion)
Q_PROPERTY(QString platformVersion READ platformVersion)
Q_PROPERTY(int scriptingVersion READ scriptingVersion)
Q_PROPERTY(bool multihead READ multihead)
public: public:
AppInterface(Plasma::Corona *corona, QObject *parent = 0); AppInterface(ScriptEngine *env);
bool hasBattery() const; bool hasBattery() const;
int screenCount() const; int screenCount() const;
@ -60,6 +67,14 @@ public:
QStringList knownPanelTypes() const; QStringList knownPanelTypes() const;
QStringList knownContainmentTypes(const QString &type) const; QStringList knownContainmentTypes(const QString &type) const;
QString applicationVersion() const;
QString platformVersion() const;
int scriptingVersion() const;
QString theme() const;
void setTheme(const QString &name);
bool multihead() const;
bool coronaLocked() const; bool coronaLocked() const;
public Q_SLOTS: public Q_SLOTS:
@ -71,7 +86,7 @@ Q_SIGNALS:
void print(const QString &string); void print(const QString &string);
private: private:
Plasma::Corona *m_corona; ScriptEngine *m_env;
}; };
} }

View File

@ -33,7 +33,6 @@
#include <Plasma/Containment> #include <Plasma/Containment>
#include <Plasma/Corona> #include <Plasma/Corona>
#include <Plasma/Package> #include <Plasma/Package>
#include <Plasma/Theme>
#include "appinterface.h" #include "appinterface.h"
#include "containment.h" #include "containment.h"
@ -50,7 +49,7 @@ ScriptEngine::ScriptEngine(Plasma::Corona *corona, QObject *parent)
m_corona(corona) m_corona(corona)
{ {
Q_ASSERT(m_corona); Q_ASSERT(m_corona);
AppInterface *interface = new AppInterface(corona, this); AppInterface *interface = new AppInterface(this);
connect(interface, SIGNAL(print(QString)), this, SIGNAL(print(QString))); connect(interface, SIGNAL(print(QString)), this, SIGNAL(print(QString)));
m_scriptSelf = newQObject(interface, QScriptEngine::QtOwnership, m_scriptSelf = newQObject(interface, QScriptEngine::QtOwnership,
QScriptEngine::ExcludeSuperClassProperties | QScriptEngine::ExcludeSuperClassMethods); QScriptEngine::ExcludeSuperClassProperties | QScriptEngine::ExcludeSuperClassMethods);
@ -62,18 +61,6 @@ ScriptEngine::~ScriptEngine()
{ {
} }
QScriptValue ScriptEngine::theme(QScriptContext *context, QScriptEngine *engine)
{
Q_UNUSED(engine)
if (context->argumentCount() > 0) {
const QString newTheme = context->argument(0).toString();
Plasma::Theme::defaultTheme()->setThemeName(newTheme);
}
return Plasma::Theme::defaultTheme()->themeName();
}
QScriptValue ScriptEngine::activityById(QScriptContext *context, QScriptEngine *engine) QScriptValue ScriptEngine::activityById(QScriptContext *context, QScriptEngine *engine)
{ {
if (context->argumentCount() == 0) { if (context->argumentCount() == 0) {
@ -207,25 +194,6 @@ QScriptValue ScriptEngine::panelById(QScriptContext *context, QScriptEngine *eng
return engine->undefinedValue(); return engine->undefinedValue();
} }
QScriptValue ScriptEngine::activities(QScriptContext *context, QScriptEngine *engine)
{
Q_UNUSED(context)
QScriptValue containments = engine->newArray();
ScriptEngine *env = envFor(engine);
int count = 0;
foreach (Plasma::Containment *c, env->m_corona->containments()) {
if (!isPanel(c)) {
containments.setProperty(count, env->wrap(c));
++count;
}
}
containments.setProperty("length", count);
return containments;
}
QScriptValue ScriptEngine::panels(QScriptContext *context, QScriptEngine *engine) QScriptValue ScriptEngine::panels(QScriptContext *context, QScriptEngine *engine)
{ {
Q_UNUSED(context) Q_UNUSED(context)
@ -348,14 +316,6 @@ void ScriptEngine::setupEngine()
m_scriptSelf.setProperty("panels", newFunction(ScriptEngine::panels)); m_scriptSelf.setProperty("panels", newFunction(ScriptEngine::panels));
m_scriptSelf.setProperty("fileExists", newFunction(ScriptEngine::fileExists)); m_scriptSelf.setProperty("fileExists", newFunction(ScriptEngine::fileExists));
m_scriptSelf.setProperty("loadTemplate", newFunction(ScriptEngine::loadTemplate)); m_scriptSelf.setProperty("loadTemplate", newFunction(ScriptEngine::loadTemplate));
m_scriptSelf.setProperty("applicationVersion", KGlobal::mainComponent().aboutData()->version(),
QScriptValue::PropertyGetter | QScriptValue::ReadOnly | QScriptValue::Undeletable);
m_scriptSelf.setProperty("scriptingVersion", newVariant(PLASMA_DESKTOP_SCRIPTING_VERSION),
QScriptValue::PropertyGetter | QScriptValue::ReadOnly | QScriptValue::Undeletable);
m_scriptSelf.setProperty("platformVersion", KDE::versionString(),
QScriptValue::PropertyGetter | QScriptValue::ReadOnly | QScriptValue::Undeletable);
m_scriptSelf.setProperty("theme", newFunction(ScriptEngine::theme),
QScriptValue::PropertyGetter | QScriptValue::PropertySetter | QScriptValue::Undeletable);
setGlobalObject(m_scriptSelf); setGlobalObject(m_scriptSelf);
} }
@ -370,6 +330,30 @@ bool ScriptEngine::isPanel(const Plasma::Containment *c)
c->containmentType() == Plasma::Containment::CustomPanelContainment; c->containmentType() == Plasma::Containment::CustomPanelContainment;
} }
QScriptValue ScriptEngine::activities(QScriptContext *context, QScriptEngine *engine)
{
Q_UNUSED(context)
QScriptValue containments = engine->newArray();
ScriptEngine *env = envFor(engine);
int count = 0;
foreach (Plasma::Containment *c, env->corona()->containments()) {
if (!isPanel(c)) {
containments.setProperty(count, env->wrap(c));
++count;
}
}
containments.setProperty("length", count);
return containments;
}
Plasma::Corona *ScriptEngine::corona() const
{
return m_corona;
}
bool ScriptEngine::evaluateScript(const QString &script, const QString &path) bool ScriptEngine::evaluateScript(const QString &script, const QString &path)
{ {
//kDebug() << "evaluating" << m_editor->toPlainText(); //kDebug() << "evaluating" << m_editor->toPlainText();

View File

@ -48,12 +48,13 @@ public:
static QStringList pendingUpdateScripts(); static QStringList pendingUpdateScripts();
static QStringList defaultLayoutScripts(); static QStringList defaultLayoutScripts();
Plasma::Corona *corona() const;
bool evaluateScript(const QString &script, const QString &path = QString()); bool evaluateScript(const QString &script, const QString &path = QString());
static bool isPanel(const Plasma::Containment *c);
QScriptValue wrap(Plasma::Applet *w); QScriptValue wrap(Plasma::Applet *w);
virtual QScriptValue wrap(Plasma::Containment *c); virtual QScriptValue wrap(Plasma::Containment *c);
QScriptValue wrap(Containment *c); QScriptValue wrap(Containment *c);
static bool isPanel(const Plasma::Containment *c);
static ScriptEngine *envFor(QScriptEngine *engine); static ScriptEngine *envFor(QScriptEngine *engine);
Q_SIGNALS: Q_SIGNALS:
@ -75,7 +76,6 @@ private:
static QScriptValue panels(QScriptContext *context, QScriptEngine *engine); static QScriptValue panels(QScriptContext *context, QScriptEngine *engine);
static QScriptValue fileExists(QScriptContext *context, QScriptEngine *engine); static QScriptValue fileExists(QScriptContext *context, QScriptEngine *engine);
static QScriptValue loadTemplate(QScriptContext *context, QScriptEngine *engine); static QScriptValue loadTemplate(QScriptContext *context, QScriptEngine *engine);
static QScriptValue theme(QScriptContext *context, QScriptEngine *engine);
// helpers // helpers
static QScriptValue createContainment(const QString &type, const QString &defautPlugin, static QScriptValue createContainment(const QString &type, const QString &defautPlugin,
@ -87,10 +87,9 @@ private Q_SLOTS:
private: private:
Plasma::Corona *m_corona; Plasma::Corona *m_corona;
QScriptValue m_scriptSelf; QScriptValue m_scriptSelf;
static const int PLASMA_DESKTOP_SCRIPTING_VERSION = 3;
}; };
static const int PLASMA_DESKTOP_SCRIPTING_VERSION = 3;
} }
#endif #endif