mirror of
https://gitee.com/js-yhsec/energy_storage.git
synced 2026-05-27 18:59:26 +08:00
搭建PVB架构,实现前端的基础布局、菜单、表格、图示等功能
This commit is contained in:
113
src/pv/PvPopWidget.cpp
Normal file
113
src/pv/PvPopWidget.cpp
Normal file
@@ -0,0 +1,113 @@
|
||||
#include "PvPopWidget.h"
|
||||
|
||||
PvPopWidget::PvPopWidget(PARAM* p, int width, int height) : PvObject(p), width(width), height(height)
|
||||
{
|
||||
pvid = PvApp::widget(p, PV_ID_MAIN, 0, 0, 1920, 1080);
|
||||
PvApp::label(p, pvid, 0, 0, 1920, 1080, "", "background-color: rgba(30,30,30,180);");
|
||||
|
||||
int x = (1920-width) *0.5;
|
||||
int y = (1080-height) *0.5;
|
||||
ui.widget = PvApp::widget(p, pvid, x, y, width, height);
|
||||
PvApp::label(p, ui.widget, 2, 2, width-4, height-4, "", "background-color: rgb(12,39,58); border: 1px solid rgb(31,145,156);");
|
||||
PvApp::label(p, ui.widget, 0, 0, 60, height, "", "background-color: transparent; border: 0 solid rgb(42, 149, 245); border-width: 5px 0 5px 5px;");
|
||||
PvApp::label(p, ui.widget, width-60, 0, 60, height, "", "background-color: transparent; border: 0 solid rgb(42, 149, 245); border-width: 5px 5px 5px 0;");
|
||||
|
||||
ui.title = PvApp::label(p, ui.widget, 20, 10, width-20, 30, "", "font: bold 20px;");
|
||||
PvApp::label(p, ui.widget, 20, 40, width*0.5-20, 3, "", QSS_UNDERLINE);
|
||||
{
|
||||
int w = 100, h = 40, offset = 50;
|
||||
int x = (width- w*2 - offset) *0.5;
|
||||
int y = height - h - 40;
|
||||
|
||||
int btnOk = PvApp::button(p, ui.widget, x, y, w, h, "确定", QSS_BTN_CONFIRM);
|
||||
PvApp::bind(p, PvEvent::BUTTON_EVENT, btnOk, [=](std::string) {
|
||||
this->show(false);
|
||||
if (callbackConfirm) { callbackConfirm(); }
|
||||
});
|
||||
int btnCancel = PvApp::button(p, ui.widget, x+w+offset, y, w, h, "取消", QSS_BTN_CANCEL);
|
||||
PvApp::bind(p, PvEvent::BUTTON_EVENT, btnCancel, [=](std::string) {
|
||||
this->show(false);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void PvPopWidget::addParamLineEdit(std::string key, std::string title, int x, int y, bool editable/*= true*/)
|
||||
{
|
||||
auto line = std::make_shared<ParamLine>("lineEdit", key);
|
||||
PvApp::label(p, ui.widget, x, y, lineKeyWidth, lineHeight, title, "font: bold 14px;");
|
||||
line->widget = PvApp::lineEdit(p, ui.widget, x+lineKeyWidth, y, lineValWidth, lineHeight, "");
|
||||
if (!editable) { pvSetEnabled(p, line->widget, 0); }
|
||||
mapLines[key] = line;
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, line->widget, [=](std::string text) {
|
||||
line->val = text;
|
||||
});
|
||||
}
|
||||
|
||||
void PvPopWidget::addParamCombox(std::string key, std::string title, int x, int y, std::vector<std::string> items)
|
||||
{
|
||||
auto line = std::make_shared<ParamLine>("combox", key);
|
||||
PvApp::label(p, ui.widget, x, y, lineKeyWidth, lineHeight, title, "font: bold 14px;");
|
||||
line->widget = PvApp::combox(p, ui.widget, x+lineKeyWidth, y, lineValWidth, lineHeight, items);
|
||||
mapLines[key] = line;
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, line->widget, [=](std::string text) {
|
||||
line->val = text;
|
||||
});
|
||||
}
|
||||
|
||||
void PvPopWidget::setParamText(std::shared_ptr<ParamLine> line, std::string text)
|
||||
{
|
||||
if (line->type == "lineEdit")
|
||||
{
|
||||
pvSetText(p, line->widget, text.c_str());
|
||||
}
|
||||
else if (line->type == "combox")
|
||||
{
|
||||
int index = 0;
|
||||
for (int i = 0; i<line->items.size(); ++i)
|
||||
{
|
||||
if (line->items[i] == text) { index = i; break; }
|
||||
}
|
||||
pvSetCurrentItem(p, line->widget, index);
|
||||
}
|
||||
}
|
||||
|
||||
void PvPopWidget::setParamText(std::string key, std::string text)
|
||||
{
|
||||
auto iter = mapLines.find(key);
|
||||
if (iter != mapLines.end())
|
||||
{
|
||||
this->setParamText(iter->second, text);
|
||||
}
|
||||
}
|
||||
|
||||
void PvPopWidget::setTitle(std::string title)
|
||||
{
|
||||
pvSetText(p, ui.title, title.c_str());
|
||||
}
|
||||
|
||||
void PvPopWidget::setData(DataFields fields)
|
||||
{
|
||||
for (auto iter = mapLines.begin(); iter != mapLines.end(); ++iter)
|
||||
{
|
||||
auto& line = iter->second;
|
||||
this->setParamText(line, fields.getStr(line->key));
|
||||
}
|
||||
}
|
||||
|
||||
DataFields PvPopWidget::getData()
|
||||
{
|
||||
DataFields fields;
|
||||
for (auto iter = mapLines.begin(); iter!=mapLines.end(); ++iter)
|
||||
{
|
||||
auto& line = iter->second;
|
||||
fields.set(line->key, line->val);
|
||||
}
|
||||
return fields;
|
||||
}
|
||||
|
||||
void PvPopWidget::setLineGeometry(int wKey, int wVal, int h)
|
||||
{
|
||||
lineKeyWidth = wKey;
|
||||
lineValWidth = wVal;
|
||||
lineHeight = h;
|
||||
}
|
||||
Reference in New Issue
Block a user