diff --git a/src/luaenginegui/luaengine/LuaEngineGui.cpp b/src/luaenginegui/luaengine/LuaEngineGui.cpp index 7bf87de..3e3cc31 100644 --- a/src/luaenginegui/luaengine/LuaEngineGui.cpp +++ b/src/luaenginegui/luaengine/LuaEngineGui.cpp @@ -107,6 +107,7 @@ void LuaEngineGui::pushClass(lua_State *L_p) pushFunction(L_p, "setWidgetParent", setWidgetParent); pushFunction(L_p, "setWidgetReadOnly", setWidgetReadOnly); pushFunction(L_p, "setWidgetSize", setWidgetSize); + pushFunction(L_p, "setWidgetSizePolicy", setWidgetSizePolicy); pushFunction(L_p, "setWidgetValue", setWidgetValue); pushFunction(L_p, "setWidgetVisible", setWidgetVisible); pushFunction(L_p, "widgetAddText", widgetAddText); @@ -464,25 +465,7 @@ int LuaEngineGui::setObjectImage(lua_State *L_p) if (getArgumentCount(L_p) >= 2) { void *pointer = getPointer(L_p, 1); if (pointer != NULL) { - QString imagePath = getVariant(L_p, 2).toString(); - if (QFileInfo(imagePath).isRelative()) { - LuaEngine *engine = (LuaEngine*)engineRegistry->getEngine(L_p); - QString engineType = engine->property("EngineType").toString(); - if (engineType == "Runtime") { - QString scriptPath = engine->property("ScriptPath").toString(); - QString scriptDirPath = QFileInfo(scriptPath).canonicalPath(); - QString newImagePath = QString("%1/%2").arg(scriptDirPath, imagePath); - if (QFile(newImagePath).exists()) { - imagePath = newImagePath; - } - } - else { - QString newImagePath = QString("%1/%2").arg(QApplication::applicationDirPath(), imagePath); - if (QFile(newImagePath).exists()) { - imagePath = newImagePath; - } - } - } + QString imagePath = pathForString(getVariant(L_p, 2).toString(), (LuaEngine*)engineRegistry->getEngine(L_p)); double pixelRatio = 1; if (getArgumentCount(L_p) >= 3) { bool pixelRatioOk; @@ -791,6 +774,20 @@ int LuaEngineGui::setWidgetSize(lua_State *L_p) return 0; } +int LuaEngineGui::setWidgetSizePolicy(lua_State *L_p) +{ + if (getArgumentCount(L_p) >= 3) { + void *pointer = getPointer(L_p, 1); + if (pointer != NULL && ((QObject*)pointer)->inherits("QWidget")) { + QSizePolicy::Policy horizontalPolicy = (QSizePolicy::Policy)getVariant(L_p, 2).toInt(); + QSizePolicy::Policy verticalPolicy = (QSizePolicy::Policy)getVariant(L_p, 3).toInt(); + ((QWidget*)pointer)->setSizePolicy(horizontalPolicy, verticalPolicy); + return 0; + } + } + return 0; +} + int LuaEngineGui::setWidgetValue(lua_State *L_p) { if (getArgumentCount(L_p) >= 2) { @@ -982,16 +979,35 @@ int LuaEngineGui::createLabel(lua_State *L_p) { QLayout *layout = nullptr; QWidget *parent = nullptr; - QString labelText = "LuaEngine"; + QString labelInput = "LuaEngine"; if (getArgumentCount(L_p) >= 1) { - labelText = getVariant(L_p, 1).toString(); + labelInput = getVariant(L_p, 1).toString(); if (getArgumentCount(L_p) >= 2) { lpForPointer(getPointer(L_p, 2), &layout, &parent); } } QLabel *label = new QLabel(parent); label->setObjectName(nameForPointer(label)); - label->setText(labelText); + if (labelInput.startsWith("!image:")) { + QString imagePath = pathForString(QString(labelInput).remove(0, 7), (LuaEngine*)engineRegistry->getEngine(L_p)); + double pixelRatio = 1; + if (getArgumentCount(L_p) >= 3) { + bool pixelRatioOk; + double newPixelRatio = getVariant(L_p, 3).toDouble(&pixelRatioOk); + if (pixelRatioOk) { + pixelRatio = newPixelRatio; + } + } + QPixmap labelImage(imagePath); + labelImage.setDevicePixelRatio(pixelRatio); + label->setPixmap(labelImage); + } + else { + if (labelInput.startsWith(" !")) { + labelInput = QString(labelInput).remove(0, 1); + } + label->setText(labelInput); + } if (layout != nullptr) { layout->addWidget(label); } @@ -1621,6 +1637,28 @@ QWidget* LuaEngineGui::windowForObject(QObject *object) return nullptr; } +QString LuaEngineGui::pathForString(const QString &string, LuaEngine *engine) +{ + if (QFileInfo(string).isRelative()) { + QString engineType = engine->property("EngineType").toString(); + if (engineType == "Runtime") { + QString scriptPath = engine->property("ScriptPath").toString(); + QString scriptDirPath = QFileInfo(scriptPath).canonicalPath(); + QString newImagePath = QString("%1/%2").arg(scriptDirPath, string); + if (QFile(newImagePath).exists()) { + return newImagePath; + } + } + else { + QString newImagePath = QString("%1/%2").arg(QApplication::applicationDirPath(), string); + if (QFile(newImagePath).exists()) { + return newImagePath; + } + } + } + return string; +} + void LuaEngineGui::lpForPointer(void *pointer, QLayout **layout, QWidget **parent) { if (pointer != NULL) { diff --git a/src/luaenginegui/luaengine/LuaEngineGui.h b/src/luaenginegui/luaengine/LuaEngineGui.h index 93e8128..782b23a 100644 --- a/src/luaenginegui/luaengine/LuaEngineGui.h +++ b/src/luaenginegui/luaengine/LuaEngineGui.h @@ -53,6 +53,7 @@ public: static int setWidgetParent(lua_State *L_p); static int setWidgetReadOnly(lua_State *L_p); static int setWidgetSize(lua_State *L_p); + static int setWidgetSizePolicy(lua_State *L_p); static int setWidgetValue(lua_State *L_p); static int setWidgetVisible(lua_State *L_p); static int layoutAddLayout(lua_State *L_p); @@ -96,6 +97,7 @@ public: private: lua_State *L; static QWidget* windowForObject(QObject *object); + static QString pathForString(const QString &string, LuaEngine *engine); static void lpForPointer(void *pointer, QLayout **layout, QWidget **parent); static QString nameForPointer(void *pointer); };