10 changes: 2 additions & 8 deletions src/libkstmath/basicplugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,6 @@ class KSTMATH_EXPORT BasicPlugin : public DataObject {
ScalarPtr inputScalar(const QString& name) const;
StringPtr inputString(const QString& name) const;

//Returns the respective output object for name
VectorPtr outputVector(const QString& name) const;
ScalarPtr outputScalar(const QString& name) const;
StringPtr outputString(const QString& name) const;

void setInputVector(const QString &type, VectorPtr ptr);
void setInputScalar(const QString &type, ScalarPtr ptr);
void setInputString(const QString &type, StringPtr ptr);
void setOutputVector(const QString &type, const QString &name);
void setOutputScalar(const QString &type, const QString &name);
void setOutputString(const QString &type, const QString &name);
Expand All @@ -96,6 +88,8 @@ class KSTMATH_EXPORT BasicPlugin : public DataObject {
virtual bool hasParameterVector() const { return _outputVectors.contains("Parameters Vector");}
virtual QString parameterVectorToString() const { return label(9);}

virtual ScriptInterface* createScriptInterface();

protected:
BasicPlugin(ObjectStore *store);
virtual ~BasicPlugin();
Expand Down
54 changes: 54 additions & 0 deletions src/libkstmath/dataobject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,60 @@ void DataObject::replaceInput(PrimitivePtr p, PrimitivePtr new_p) {
}
}


VectorPtr DataObject::outputVector(const QString& vector) const {
VectorMap::ConstIterator i = _outputVectors.constFind(vector);
if (i != _outputVectors.constEnd())
return *i;
else
return 0;
}


ScalarPtr DataObject::outputScalar(const QString& scalar) const {
ScalarMap::ConstIterator i = _outputScalars.constFind(scalar);
if (i != _outputScalars.constEnd())
return *i;
else
return 0;
}


StringPtr DataObject::outputString(const QString& string) const {
StringMap::ConstIterator i = _outputStrings.constFind(string);
if (i != _outputStrings.constEnd())
return *i;
else
return 0;
}


void DataObject::setInputVector(const QString &type, VectorPtr ptr) {
if (ptr) {
_inputVectors[type] = ptr;
} else {
_inputVectors.remove(type);
}
}


void DataObject::setInputScalar(const QString &type, ScalarPtr ptr) {
if (ptr) {
_inputScalars[type] = ptr;
} else {
_inputScalars.remove(type);
}
}


void DataObject::setInputString(const QString &type, StringPtr ptr) {
if (ptr) {
_inputStrings[type] = ptr;
} else {
_inputStrings.remove(type);
}
}

PrimitiveList DataObject::inputPrimitives() const {
PrimitiveList primitive_list;

Expand Down
8 changes: 8 additions & 0 deletions src/libkstmath/dataobject.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,14 @@ class KSTMATH_EXPORT DataObject : public Object
MatrixMap& inputMatrices() { return _inputMatrices; }
MatrixMap& outputMatrices() { return _outputMatrices; }

VectorPtr outputVector(const QString& name) const;
ScalarPtr outputScalar(const QString& name) const;
StringPtr outputString(const QString& name) const;

void setInputVector(const QString &type, VectorPtr ptr);
void setInputScalar(const QString &type, ScalarPtr ptr);
void setInputString(const QString &type, StringPtr ptr);

virtual PrimitiveList inputPrimitives() const;
PrimitiveList outputPrimitives(bool include_descendants = true) const;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,41 +10,44 @@
* *
***************************************************************************/

#include "pluginscriptinterface.h"
#include "dataobjectscriptinterface.h"

#include <QStringBuilder>

namespace Kst {

PluginSI::PluginSI(BasicPluginPtr plugin) {
DataObjectSI::DataObjectSI(DataObjectPtr plugin) {
if (plugin) {
_plugin = plugin;
} else {
_plugin = 0;
}
}

bool PluginSI::isValid() {
bool DataObjectSI::isValid() {
return _plugin;
}

QByteArray PluginSI::endEditUpdate() {
QByteArray DataObjectSI::endEditUpdate() {
if (_plugin) {
_plugin->registerChange();
UpdateManager::self()->doUpdates(true);
UpdateServer::self()->requestUpdateSignal();

return ("Finished editing "%_plugin->Name()).toLatin1();
} else {
return ("Finished editing invalid plugin");
}
}

QString PluginSI::doCommand(QString x) {
QString DataObjectSI::doCommand(QString x) {

if (isValid()) {

QString v=doNamedObjectCommand(x, _plugin);
if (!v.isEmpty()) {
return v;
}

QStringList params;
if (x.startsWith("setInputVector(")) {
x.remove("setInputVector(");
Expand All @@ -66,18 +69,41 @@ QString PluginSI::doCommand(QString x) {
_plugin->setInputScalar(params[0], S);
}
}
} else if (x.startsWith("outputVector(")) {
x.remove("outputVector(");
x.remove(x.lastIndexOf(")"),1);
VectorPtr vout = _plugin->outputVector(x);
if (vout) {
return vout->shortName();
} else {
return "Invalid";
}
} else if (x.startsWith("outputScalar(")) {
x.remove("outputScalar(");
x.remove(x.lastIndexOf(")"),1);
ScalarPtr xout = _plugin->outputScalar(x);
if (xout) {
return xout->shortName();
} else {
return "Invalid";
}
}

return "Done";
} else {
return "Invalid";
}

}

ScriptInterface* newPlugin(ObjectStore *store, QByteArray pluginName) {
BasicPluginPtr plugin;
ScriptInterface* DataObjectSI::newPlugin(ObjectStore *store, QByteArray pluginName) {
DataObjectConfigWidget* configWidget = DataObject::pluginWidget(pluginName);

if (configWidget) {
BasicPluginPtr plugin = kst_cast<BasicPlugin>(DataObject::createPlugin(pluginName, store, configWidget));
return new DataObjectSI(kst_cast<DataObject>(plugin));
}

return 0L;
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,26 @@
#include "scriptinterface.h"
#include "basicplugin.h"
#include "objectstore.h"
#include "updatemanager.h"
#include "updateserver.h"

#ifndef PLUGINSCRIPTINTERFACE_H
#define PLUGINSCRIPTINTERFACE_H

namespace Kst {

class PluginSI : public ScriptInterface
class DataObjectSI : public ScriptInterface
{
Q_OBJECT
public:
explicit PluginSI(BasicPluginPtr plugin);
explicit DataObjectSI(DataObjectPtr plugin);
QString doCommand(QString);
bool isValid();
QByteArray endEditUpdate();

static ScriptInterface* newPlugin(ObjectStore *store, QByteArray pluginName);
private:
BasicPluginPtr _plugin;
DataObjectPtr _plugin;
};


Expand Down