mirror of
				https://gitlab.com/Syping/luaengineapp.git
				synced 2025-10-31 02:20:20 +01:00 
			
		
		
		
	improvements
This commit is contained in:
		
							parent
							
								
									fb6a449d83
								
							
						
					
					
						commit
						ad1505251d
					
				
					 4 changed files with 246 additions and 62 deletions
				
			
		|  | @ -22,11 +22,16 @@ | |||
| #include <QMetaObject> | ||||
| #include <QMetaMethod> | ||||
| #include <QTextStream> | ||||
| #include <QSpacerItem> | ||||
| #include <QHBoxLayout> | ||||
| #include <QVBoxLayout> | ||||
| #include <QSizePolicy> | ||||
| #include <QEventLoop> | ||||
| #include <QLineEdit> | ||||
| #include <QCheckBox> | ||||
| #include <QMenuBar> | ||||
| #include <QProcess> | ||||
| #include <QWindow> | ||||
| #include <QObject> | ||||
| #include <QDialog> | ||||
| #include <QTimer> | ||||
|  | @ -52,6 +57,7 @@ void LuaEngineGui::pushClass(lua_State *L_p) | |||
| 
 | ||||
|     // Widget
 | ||||
|     pushFunction(L_p, "closeWidget", closeWidget); | ||||
|     pushFunction(L_p, "executeWidget", executeWidget); | ||||
|     pushFunction(L_p, "showWidget", showWidget); | ||||
|     pushFunction(L_p, "setWidgetLayout", setWidgetLayout); | ||||
|     pushVariant(L_p, "ShowCurrent", 0); | ||||
|  | @ -63,6 +69,9 @@ void LuaEngineGui::pushClass(lua_State *L_p) | |||
|     // Check Box
 | ||||
|     pushFunction(L_p, "createCheckBox", createCheckBox); | ||||
| 
 | ||||
|     // Dialog
 | ||||
|     pushFunction(L_p, "createDialog", createDialog); | ||||
| 
 | ||||
|     // Label
 | ||||
|     pushFunction(L_p, "createLabel", createLabel); | ||||
| 
 | ||||
|  | @ -73,6 +82,9 @@ void LuaEngineGui::pushClass(lua_State *L_p) | |||
|     pushVariant(L_p, "HorizontalLayout", 0); | ||||
|     pushVariant(L_p, "VerticalLayout", 1); | ||||
| 
 | ||||
|     // Line Edit
 | ||||
|     pushFunction(L_p, "createLineEdit", createLineEdit); | ||||
| 
 | ||||
|     // Main Window
 | ||||
|     pushFunction(L_p, "createMainWindow", createMainWindow); | ||||
|     pushFunction(L_p, "createCentralWidget", createCentralWidget); | ||||
|  | @ -84,6 +96,20 @@ void LuaEngineGui::pushClass(lua_State *L_p) | |||
| 
 | ||||
|     // Push Button
 | ||||
|     pushFunction(L_p, "createPushButton", createPushButton); | ||||
| 
 | ||||
|     // Spacer Item
 | ||||
|     pushFunction(L_p, "createSpacerItem", createSpacerItem); | ||||
| 
 | ||||
|     // Size Policy
 | ||||
|     pushVariant(L_p, "SizePolicyFixed", (int)QSizePolicy::Fixed); | ||||
|     pushVariant(L_p, "SizePolicyMinimum", (int)QSizePolicy::Minimum); | ||||
|     pushVariant(L_p, "SizePolicyMaximum", (int)QSizePolicy::Maximum); | ||||
|     pushVariant(L_p, "SizePolicyPreferred", (int)QSizePolicy::Preferred); | ||||
|     pushVariant(L_p, "SizePolicyExpanding", (int)QSizePolicy::Expanding); | ||||
|     pushVariant(L_p, "SizePolicyIgnored", (int)QSizePolicy::Ignored); | ||||
| 
 | ||||
|     // Object functions
 | ||||
|     pushFunction(L_p, "getParent", getParent); | ||||
| } | ||||
| 
 | ||||
| void LuaEngineGui::pushClass(LuaEngine *luaEngine) | ||||
|  | @ -149,31 +175,70 @@ int LuaEngineGui::closeWidget(lua_State *L_p) | |||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| int LuaEngineGui::executeWidget(lua_State *L_p) | ||||
| { | ||||
|     if (getArgumentCount(L_p) >= 1) { | ||||
|         void *pointer = getPointer(L_p, 1); | ||||
|         if (pointer != NULL && ((QObject*)pointer)->inherits("QWidget")) { | ||||
|             QVariant isFixed = ((QObject*)pointer)->property("isFixed"); | ||||
|             if (isFixed.type() == QVariant::Bool && isFixed.toBool()) { | ||||
|                 ((QWidget*)pointer)->setMinimumSize(((QWidget*)pointer)->sizeHint()); | ||||
|                 ((QWidget*)pointer)->setMaximumSize(((QWidget*)pointer)->sizeHint()); | ||||
|             } | ||||
|             else { | ||||
|                 ((QWidget*)pointer)->setMinimumSize(((QWidget*)pointer)->sizeHint()); | ||||
|                 ((QWidget*)pointer)->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); | ||||
|             } | ||||
|             if (((QObject*)pointer)->inherits("QDialog")) { | ||||
|                 ((QDialog*)pointer)->exec(); | ||||
|             } | ||||
|             else { | ||||
|                 ((QWidget*)pointer)->show(); | ||||
|                 QEventLoop executeLoop; | ||||
|                 while (((QWidget*)pointer)->isVisible()) { | ||||
|                     QTimer::singleShot(100, &executeLoop, SLOT(quit())); | ||||
|                     executeLoop.exec(); | ||||
|                 } | ||||
|             } | ||||
|             return 0; | ||||
|         } | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| int LuaEngineGui::showWidget(lua_State *L_p) | ||||
| { | ||||
|     if (getArgumentCount(L_p) >= 1) { | ||||
|         void *pointer = getPointer(L_p, 1); | ||||
|         if (pointer != NULL && ((QObject*)pointer)->inherits("QWidget")) { | ||||
|             QWidget *widget = (QWidget*)pointer; | ||||
|             int showMode = 0; | ||||
|             if (getArgumentCount(L_p) >= 2) { | ||||
|                 showMode = getVariant(L_p, 2).toInt(); | ||||
|             } | ||||
|             QVariant isFixed = ((QObject*)pointer)->property("isFixed"); | ||||
|             if (isFixed.type() == QVariant::Bool && isFixed.toBool()) { | ||||
|                 ((QWidget*)pointer)->setMinimumSize(((QWidget*)pointer)->sizeHint()); | ||||
|                 ((QWidget*)pointer)->setMaximumSize(((QWidget*)pointer)->sizeHint()); | ||||
|             } | ||||
|             else { | ||||
|                 ((QWidget*)pointer)->setMinimumSize(((QWidget*)pointer)->sizeHint()); | ||||
|                 ((QWidget*)pointer)->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); | ||||
|             } | ||||
|             switch (showMode) { | ||||
|             case 1: | ||||
|                 widget->showNormal(); | ||||
|                 ((QWidget*)pointer)->showNormal(); | ||||
|                 break; | ||||
|             case 2: | ||||
|                 widget->showMinimized(); | ||||
|                 ((QWidget*)pointer)->showMinimized(); | ||||
|                 break; | ||||
|             case 3: | ||||
|                 widget->showMaximized(); | ||||
|                 ((QWidget*)pointer)->showMaximized(); | ||||
|                 break; | ||||
|             case 4: | ||||
|                 widget->showFullScreen(); | ||||
|                 ((QWidget*)pointer)->showFullScreen(); | ||||
|                 break; | ||||
|             default: | ||||
|                 widget->show(); | ||||
|                 ((QWidget*)pointer)->show(); | ||||
|             } | ||||
|             return 0; | ||||
|         } | ||||
|  | @ -181,6 +246,45 @@ int LuaEngineGui::showWidget(lua_State *L_p) | |||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| int LuaEngineGui::setWidgetFixedSize(lua_State *L_p) | ||||
| { | ||||
|     if (getArgumentCount(L_p) >= 1) { | ||||
|         void *pointer = getPointer(L_p, 1); | ||||
|         if (pointer != NULL && ((QObject*)pointer)->inherits("QWidget")) { | ||||
|             bool isFixed = true; | ||||
|             if (getArgumentCount(L_p) >= 2) { | ||||
|                 isFixed = getVariant(L_p, 2).toBool(); | ||||
|             } | ||||
|             ((QObject*)pointer)->setProperty("isFixed", isFixed); | ||||
|             if (isFixed && ((QWidget*)pointer)->isVisible()) { | ||||
|                 ((QWidget*)pointer)->setMinimumSize(((QWidget*)pointer)->sizeHint()); | ||||
|                 ((QWidget*)pointer)->setMaximumSize(((QWidget*)pointer)->sizeHint()); | ||||
|             } | ||||
|             else if (((QWidget*)pointer)->isVisible()) { | ||||
|                 ((QWidget*)pointer)->setMinimumSize(((QWidget*)pointer)->sizeHint()); | ||||
|                 ((QWidget*)pointer)->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); | ||||
|             } | ||||
|             return 0; | ||||
|         } | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| int LuaEngineGui::setWidgetLayout(lua_State *L_p) | ||||
| { | ||||
|     if (getArgumentCount(L_p) >= 2) { | ||||
|         void *pointer = getPointer(L_p, 1); | ||||
|         if (pointer != NULL && ((QObject*)pointer)->inherits("QWidget")) { | ||||
|             QWidget *widget = (QWidget*)pointer; | ||||
|             void *l_pointer = getPointer(L_p, 2); | ||||
|             if (l_pointer!= NULL && ((QObject*)l_pointer)->inherits("QLayout")) { | ||||
|                 widget->setLayout((QLayout*)l_pointer); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| int LuaEngineGui::layoutAddLayout(lua_State *L_p) | ||||
| { | ||||
|     if (getArgumentCount(L_p) >= 2) { | ||||
|  | @ -254,6 +358,28 @@ int LuaEngineGui::createCheckBox(lua_State *L_p) | |||
|     return 1; | ||||
| } | ||||
| 
 | ||||
| int LuaEngineGui::createDialog(lua_State *L_p) | ||||
| { | ||||
|     QVariantList args = getArguments(L_p); | ||||
|     QWidget *parent = nullptr; | ||||
|     QString windowTitle = "LuaEngine"; | ||||
|     if (args.length() >= 1) { | ||||
|         windowTitle = args.at(0).toString(); | ||||
|         if (args.length() >= 2) { | ||||
|             if ((QMetaType::Type)args.at(1).type() == QMetaType::Void || (QMetaType::Type)args.at(1).type() == QMetaType::VoidStar) { | ||||
|                 if (((QObject*)qvariant_cast<void*>(args.at(1)))->inherits("QWidget")) { | ||||
|                     parent = (QWidget*)qvariant_cast<void*>(args.at(1)); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     QDialog *dialog = new QDialog(parent); | ||||
|     dialog->setObjectName(nameForPointer(dialog)); | ||||
|     dialog->setWindowTitle(windowTitle); | ||||
|     pushPointer(L_p, dialog); | ||||
|     return 1; | ||||
| } | ||||
| 
 | ||||
| int LuaEngineGui::createLabel(lua_State *L_p) | ||||
| { | ||||
|     QVariantList args = getArguments(L_p); | ||||
|  | @ -277,10 +403,50 @@ int LuaEngineGui::createLabel(lua_State *L_p) | |||
| } | ||||
| 
 | ||||
| int LuaEngineGui::createLayout(lua_State *L_p) | ||||
| { | ||||
|     QWidget *parent = nullptr; | ||||
|     QLayout *layoutParent = nullptr; | ||||
|     if (getArgumentCount(L_p) >= 2) { | ||||
|         void *pointer = getPointer(L_p, 2); | ||||
|         if (pointer != NULL && ((QObject*)pointer)->inherits("QWidget")) { | ||||
|             parent = (QWidget*)pointer; | ||||
|         } | ||||
|         else if (pointer != NULL && ((QObject*)pointer)->inherits("QLayout")) { | ||||
|             layoutParent = (QLayout*)pointer; | ||||
|         } | ||||
|     } | ||||
|     void *layout; | ||||
|     int layoutType = 0; | ||||
|     if (getArgumentCount(L_p) >= 1) { | ||||
|         layoutType = getVariant(L_p, 1).toInt(); | ||||
|     } | ||||
|     switch (layoutType) { | ||||
|     case 0: | ||||
|         layout = new QHBoxLayout(parent); | ||||
|         break; | ||||
|     default: | ||||
|         layout = new QVBoxLayout(parent); | ||||
|     } | ||||
|     ((QObject*)layout)->setObjectName(nameForPointer(layout)); | ||||
|     if (layoutParent != nullptr) { | ||||
|         if (layoutParent->inherits("QVBoxLayout")) { | ||||
|             ((QVBoxLayout*)layoutParent)->addLayout((QLayout*)layout); | ||||
|         } | ||||
|         else if (layoutParent->inherits("QHBoxLayout")) { | ||||
|             ((QHBoxLayout*)layoutParent)->addLayout((QLayout*)layout); | ||||
|         } | ||||
|     } | ||||
|     pushPointer(L_p, layout); | ||||
|     return 1; | ||||
| } | ||||
| 
 | ||||
| int LuaEngineGui::createLineEdit(lua_State *L_p) | ||||
| { | ||||
|     QVariantList args = getArguments(L_p); | ||||
|     QWidget *parent = nullptr; | ||||
|     QString editText = "LuaEngine"; | ||||
|     if (args.length() >= 1) { | ||||
|         editText = args.at(0).toString(); | ||||
|         if (args.length() >= 2) { | ||||
|             if ((QMetaType::Type)args.at(1).type() == QMetaType::Void || (QMetaType::Type)args.at(1).type() == QMetaType::VoidStar) { | ||||
|                 if (((QObject*)qvariant_cast<void*>(args.at(1)))->inherits("QWidget")) { | ||||
|  | @ -289,22 +455,10 @@ int LuaEngineGui::createLayout(lua_State *L_p) | |||
|             } | ||||
|         } | ||||
|     } | ||||
|     int layoutType = args.at(0).toInt(); | ||||
|     switch (layoutType) { | ||||
|     case 0: | ||||
|     { | ||||
|         QHBoxLayout *layout = new QHBoxLayout(parent); | ||||
|         layout->setObjectName(nameForPointer(layout)); | ||||
|         pushPointer(L_p, layout); | ||||
|     } | ||||
|         break; | ||||
|     default: | ||||
|     { | ||||
|         QVBoxLayout *layout = new QVBoxLayout(parent); | ||||
|         layout->setObjectName(nameForPointer(layout)); | ||||
|         pushPointer(L_p, layout); | ||||
|     } | ||||
|     } | ||||
|     QLineEdit *lineEdit = new QLineEdit(parent); | ||||
|     lineEdit->setObjectName(nameForPointer(lineEdit)); | ||||
|     lineEdit->setText(editText); | ||||
|     pushPointer(L_p, lineEdit); | ||||
|     return 1; | ||||
| } | ||||
| 
 | ||||
|  | @ -406,16 +560,37 @@ int LuaEngineGui::createPushButton(lua_State *L_p) | |||
|     return 1; | ||||
| } | ||||
| 
 | ||||
| int LuaEngineGui::setWidgetLayout(lua_State *L_p) | ||||
| int LuaEngineGui::createSpacerItem(lua_State *L_p) | ||||
| { | ||||
|     if (getArgumentCount(L_p) >= 2) { | ||||
|         void *pointer = getPointer(L_p, 1); | ||||
|         if (pointer != NULL && ((QObject*)pointer)->inherits("QWidget")) { | ||||
|             QWidget *widget = (QWidget*)pointer; | ||||
|             void *l_pointer = getPointer(L_p, 2); | ||||
|             if (l_pointer!= NULL && ((QObject*)l_pointer)->inherits("QLayout")) { | ||||
|                 widget->setLayout((QLayout*)l_pointer); | ||||
|     if (getArgumentCount(L_p) >= 3) { | ||||
|         void *pointer = getPointer(L_p, 3); | ||||
|         if (pointer != NULL && ((QObject*)pointer)->inherits("QLayout")) { | ||||
|             if (((QObject*)pointer)->inherits("QVBoxLayout")) { | ||||
|                 QSpacerItem *spacerItem = new QSpacerItem(0, 0, (QSizePolicy::Policy)getVariant(L_p, 1).toInt(), (QSizePolicy::Policy)getVariant(L_p, 2).toInt()); | ||||
|                 QVBoxLayout *layout = (QVBoxLayout*)pointer; | ||||
|                 layout->addSpacerItem(spacerItem); | ||||
|                 pushPointer(L_p, spacerItem); | ||||
|                 return 1; | ||||
|             } | ||||
|             else if (((QObject*)pointer)->inherits("QHBoxLayout")) { | ||||
|                 QSpacerItem *spacerItem = new QSpacerItem(0, 0, (QSizePolicy::Policy)getVariant(L_p, 1).toInt(), (QSizePolicy::Policy)getVariant(L_p, 2).toInt()); | ||||
|                 QHBoxLayout *layout = (QHBoxLayout*)pointer; | ||||
|                 layout->addSpacerItem(spacerItem); | ||||
|                 pushPointer(L_p, spacerItem); | ||||
|                 return 1; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| int LuaEngineGui::getParent(lua_State *L_p) | ||||
| { | ||||
|     if (getArgumentCount(L_p) >= 1) { | ||||
|         void *pointer = getPointer(L_p, 1); | ||||
|         if (pointer != NULL) { | ||||
|             pushPointer(L_p, ((QObject*)pointer)->parent()); | ||||
|             return 1; | ||||
|         } | ||||
|     } | ||||
|     return 0; | ||||
|  | @ -424,6 +599,6 @@ int LuaEngineGui::setWidgetLayout(lua_State *L_p) | |||
| QString LuaEngineGui::nameForPointer(void *pointer) | ||||
| { | ||||
|     QString nameStorage; | ||||
|     QTextStream(&nameStorage) << "LuaEngineGui_" << pointer; | ||||
|     QTextStream(&nameStorage) << "LuaEngineGui" << pointer; | ||||
|     return nameStorage; | ||||
| } | ||||
|  |  | |||
|  | @ -32,19 +32,25 @@ public: | |||
|     static void pushClass(LuaEngine *luaEngine); | ||||
|     static int showMessageBox(lua_State *L_p); | ||||
|     static int closeWidget(lua_State *L_p); | ||||
|     static int executeWidget(lua_State *L_p); | ||||
|     static int showWidget(lua_State *L_p); | ||||
|     static int setWidgetFixedSize(lua_State *L_p); | ||||
|     static int setWidgetLayout(lua_State *L_p); | ||||
|     static int layoutAddLayout(lua_State *L_p); | ||||
|     static int layoutAddWidget(lua_State *L_p); | ||||
|     static int createCentralWidget(lua_State *L_p); | ||||
|     static int createCheckBox(lua_State *L_p); | ||||
|     static int createDialog(lua_State *L_p); | ||||
|     static int createLabel(lua_State *L_p); | ||||
|     static int createLayout(lua_State *L_p); | ||||
|     static int createLineEdit(lua_State *L_p); | ||||
|     static int createMainWindow(lua_State *L_p); | ||||
|     static int createMenu(lua_State *L_p); | ||||
|     static int createMenuBar(lua_State *L_p); | ||||
|     static int createMenuEntry(lua_State *L_p); | ||||
|     static int createPushButton(lua_State *L_p); | ||||
|     static int setWidgetLayout(lua_State *L_p); | ||||
|     static int createSpacerItem(lua_State *L_p); | ||||
|     static int getParent(lua_State *L_p); | ||||
| 
 | ||||
| private: | ||||
|     lua_State *L; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue