feat(script): added source property

This commit is contained in:
maelstrom 2025-04-24 16:33:34 +02:00
parent 1858c703c7
commit 4cfb327b65
4 changed files with 27 additions and 4 deletions

View file

@ -1,5 +1,6 @@
#include "script.h" #include "script.h"
#include "objects/base/instance.h" #include "objects/base/instance.h"
#include "objects/base/member.h"
const InstanceType Script::TYPE = { const InstanceType Script::TYPE = {
.super = &Instance::TYPE, .super = &Instance::TYPE,
@ -13,6 +14,17 @@ const InstanceType* Script::GetClass() {
} }
Script::Script(): Instance(&TYPE) { Script::Script(): Instance(&TYPE) {
this->memberMap = std::make_unique<MemberMap>(MemberMap {
.super = std::move(this->memberMap),
.members = {
{ "Source", {
.backingField = &source,
.type = &Data::String::TYPE,
.codec = fieldCodecOf<Data::String, std::string>(),
.flags = PROP_HIDDEN,
}},
}
});
} }
Script::~Script() { Script::~Script() {

View file

@ -10,6 +10,8 @@ public:
Script(); Script();
~Script(); ~Script();
std::string source;
static inline std::shared_ptr<Script> New() { return std::make_shared<Script>(); }; static inline std::shared_ptr<Script> New() { return std::make_shared<Script>(); };
static inline std::shared_ptr<Instance> Create() { return std::make_shared<Script>(); }; static inline std::shared_ptr<Instance> Create() { return std::make_shared<Script>(); };
virtual const InstanceType* GetClass() override; virtual const InstanceType* GetClass() override;

View file

@ -1,6 +1,7 @@
#include "panes/propertiesview.h" #include "panes/propertiesview.h"
#include "common.h" #include "common.h"
#include "datatypes/base.h" #include "datatypes/base.h"
#include "objects/base/member.h"
#include <QColorDialog> #include <QColorDialog>
#include <QLineEdit> #include <QLineEdit>
@ -296,7 +297,7 @@ void PropertiesView::setSelected(std::optional<InstanceRef> instance) {
PropertyMeta meta = inst->GetPropertyMeta(property).expect(); PropertyMeta meta = inst->GetPropertyMeta(property).expect();
Data::Variant currentValue = inst->GetPropertyValue(property).expect(); Data::Variant currentValue = inst->GetPropertyValue(property).expect();
// if (meta.type == &CFrame::TYPE) continue; if (meta.type == &CFrame::TYPE || meta.flags & PROP_HIDDEN) continue;
QTreeWidgetItem* item = new QTreeWidgetItem; QTreeWidgetItem* item = new QTreeWidgetItem;
item->setFlags(item->flags() | Qt::ItemIsEditable | Qt::ItemIsSelectable); item->setFlags(item->flags() | Qt::ItemIsEditable | Qt::ItemIsSelectable);
@ -311,9 +312,9 @@ void PropertiesView::setSelected(std::optional<InstanceRef> instance) {
} else if (meta.type == &Vector3::TYPE) { } else if (meta.type == &Vector3::TYPE) {
Vector3 vector = currentValue.get<Vector3>(); Vector3 vector = currentValue.get<Vector3>();
item->setData(1, Qt::DisplayRole, QString::fromStdString(currentValue.ToString())); item->setData(1, Qt::DisplayRole, QString::fromStdString(currentValue.ToString()));
} else if (meta.type == &CFrame::TYPE) { // } else if (meta.type == &CFrame::TYPE) {
Vector3 vector = currentValue.get<CFrame>().Position(); // Vector3 vector = currentValue.get<CFrame>().Position();
item->setData(1, Qt::DisplayRole, QString::fromStdString(currentValue.ToString())); // item->setData(1, Qt::DisplayRole, QString::fromStdString(currentValue.ToString()));
} else { } else {
item->setData(1, Qt::DisplayRole, QString::fromStdString(currentValue.ToString())); item->setData(1, Qt::DisplayRole, QString::fromStdString(currentValue.ToString()));
} }

View file

@ -4,6 +4,8 @@
#include <Qsci/qscilexer.h> #include <Qsci/qscilexer.h>
#include <qboxlayout.h> #include <qboxlayout.h>
#include <qfont.h> #include <qfont.h>
#include <qdebug.h>
#include <qglobal.h>
#include <qlayout.h> #include <qlayout.h>
#include "objects/script.h" #include "objects/script.h"
@ -35,6 +37,12 @@ ScriptDocument::ScriptDocument(std::shared_ptr<Script> script, QWidget* parent):
scintilla->setFont(font); scintilla->setFont(font);
scintilla->setLexer(); scintilla->setLexer();
connect(scintilla, &QsciScintilla::textChanged, [this]() {
// this-> is important here, as otherwise it will refer to the
// parameter passed in, which will get gc'ed eventually
this->script->source = scintilla->text().toStdString();
});
} }
ScriptDocument::~ScriptDocument() { ScriptDocument::~ScriptDocument() {