## Client UI To create a new simulator ui follow these steps 1. Make sure the client folder is folded down 2. Right click on unisim_client and select Add new 3. Choose Qt in files and classes and then select Qt widgets designer form class + Choose 4. Select Mainwindow + Next 5. Change the classname to the name of your sim use underscores as spaces, don't forget classnames always start with a capital letter 6. Select the path by clicking browse, and make sure it is in the client/simulators folder + Next 7. Set add to project to None + Finished 8. Refresh CMake by right clicking on the project name + Run Cmake, it should show your sim as ui_ + filename 9. Change the hpp file as following. This is an example out of test sim OPTIONAL Add id_to_label is optional if you want to use value labels ```cpp #pragma once #include "simulator_base.hpp" namespace Ui { class Test_Sim; } class Test_Sim : public Simulator_base { Q_OBJECT public: explicit Test_Sim(Web_socket_wrapper *web_socket = nullptr, QWidget *parent = nullptr); ~Test_Sim(); // Optional QLabel *id_to_label(QWidget* widget) override; private: Ui::Test_Sim *ui; }; ``` 10. Change the cpp file as following. This is an example out of test sim. PUSH_UI_ITEM is the method to add new QWidgets to the similator UI OPTIONAL Add id_to_label is optional if you want to use value labels switch case is also an option instead of if ```cpp #include "test.hpp" #include "ui_test.h" EXPORT_UI(Test_Sim); Test_Sim::Test_Sim(Web_socket_wrapper *web_socket, QWidget *parent) : Simulator_base("Test Sim", web_socket, parent), ui(new Ui::Test_Sim) { ui->setupUi(this); PUSH_UI_ITEM(item); } Test_Sim::~Test_Sim() { delete ui; } QLabel *Test_Sim::id_to_label(QWidget* widget) { if (widget == ui->slider) return ui->slider_label; if (widget == ui->thermo) return ui->thermo_label; if (widget == ui->dial) return ui->dial_label; return nullptr; } ``` For extra examples look at the existing simulators