Skip to content

Commit

Permalink
match matreial json
Browse files Browse the repository at this point in the history
  • Loading branch information
1445643474 committed Dec 13, 2023
1 parent 3b1d6ea commit 0616ff3
Show file tree
Hide file tree
Showing 4 changed files with 186 additions and 15 deletions.
3 changes: 2 additions & 1 deletion ui/zenoedit/dialog/zforksubgrapdlg.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <QtWidgets>
#include "zenoui/comctrl/dialog/zframelessdialog.h"
#include <rapidjson/document.h>
#include "zmathpresetsubgrapdlg.h"

class ZForkSubgraphDlg : public ZFramelessDialog
{
Expand All @@ -18,11 +19,11 @@ private slots:
void initUi();
QMap<QString, QMap<QString, QVariant>> readFile();
private:
QString m_version;
QTableWidget* m_pTableWidget;
QMap<QString, QString> m_subgsMap; // <mtlid, preset mat>
QString m_importPath;
QPushButton* m_pImportBtn;
QMap<QString, STMatchMatInfo> m_matchInfo;
};

#endif
56 changes: 42 additions & 14 deletions ui/zenoedit/dialog/zforksubgraphdlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,6 @@ QMap<QString, QMap<QString, QVariant>> ZForkSubgraphDlg::readFile()
zeno::log_error("json file is corrupted");
return matValueMap;
}
QMap<QString, QSet<QString>> presetParamMap; //<preset mat, param_names>
QMap<QString, QSet<QString>> matKeyMap; //<preset mat, keys>
auto jsonObject = doc.GetObject();
QMap<QString, QMap<QString, QString>> matchMap;//<matType, <matKey, paramName>>
if (jsonObject.HasMember("match"))
Expand All @@ -122,16 +120,17 @@ QMap<QString, QMap<QString, QVariant>> ZForkSubgraphDlg::readFile()
QString mat = m_subgsMap[mtlid];
IGraphsModel* pGraphsModel = zenoApp->graphsManagment()->currentModel();
auto subgIdx = pGraphsModel->index(mat);
if (subgIdx.isValid())
if (subgIdx.isValid() && !m_matchInfo.contains(mat) && matchMap.isEmpty())
{
m_matchInfo[mat].m_matType = mat;
//preset
QModelIndexList nodes = pGraphsModel->searchInSubgraph("SubInput", subgIdx);
for (QModelIndex subInput : nodes)
for (const QModelIndex& subInput : nodes)
{
NodeParamModel* nodeParams = QVariantPtr<NodeParamModel>::asPtr(subInput.data(ROLE_NODE_PARAMS));
QModelIndex nameIdx = nodeParams->getParam(PARAM_PARAM, "name");
QString paramName = nameIdx.data(ROLE_PARAM_VALUE).toString();
presetParamMap[mat].insert(paramName);
QString paramName = nameIdx.data(ROLE_PARAM_VALUE).toString();
m_matchInfo[mat].m_matchInfo[paramName] = paramName;
}
}
if (jsonObject.HasMember(mtlid.toUtf8()))
Expand All @@ -140,25 +139,50 @@ QMap<QString, QMap<QString, QVariant>> ZForkSubgraphDlg::readFile()
if (objVal.IsObject())
{
for (auto iter = objVal.MemberBegin(); iter != objVal.MemberEnd(); iter++) {
matKeyMap[mat].insert(iter->name.GetString());
QVariant val = UiHelper::parseJson(iter->value);
QString matKey = iter->name.GetString();
QVariant val = UiHelper::parseJson(iter->value);
if (matchMap.contains(mat))
{
if (matchMap.contains(mat))
const auto& match = matchMap[mat];
if (match.contains(matKey))
{
matKey = match[matKey];
}
}
else if (matchMap.isEmpty())
{
if (m_matchInfo[mat].m_matchInfo.contains(matKey))
{
m_matchInfo[mat].m_matchInfo.remove(matKey);
}
else
{
const auto& match = matchMap[mat];
if (match.contains(matKey))
{
matKey = match[matKey];
}
m_matchInfo[mat].m_matKeys.insert(matKey);
}
}

matValueMap[mtlid][matKey] = val;
}
}
}
}

for (auto iter = m_matchInfo.begin(); iter != m_matchInfo.end();)
{
if (iter->m_matchInfo.isEmpty() || iter->m_matKeys.isEmpty())
m_matchInfo.erase(iter++);
else
iter++;
}

if (!m_matchInfo.isEmpty())
{
QMap<QString, STMatchMatInfo> infos = ZMatchPresetSubgraphDlg::getMatchInfo(m_matchInfo, this);
if (!infos.isEmpty())
{
m_matchInfo = infos;
}
}
return matValueMap;
}

Expand Down Expand Up @@ -223,6 +247,10 @@ void ZForkSubgraphDlg::onOkClicked()
for (const auto& inputIdx : nodeParams->getInputIndice())
{
QString name = inputIdx.data(ROLE_PARAM_NAME).toString();
if (m_matchInfo.contains(subgName) && m_matchInfo[subgName].m_matchInfo.contains(name))
{
name = m_matchInfo[subgName].m_matchInfo[name];
}
if (valueMap.contains(name))
{
pGraphsModel->ModelSetData(inputIdx, valueMap[name], ROLE_PARAM_VALUE);
Expand Down
110 changes: 110 additions & 0 deletions ui/zenoedit/dialog/zmathpresetsubgrapdlg.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#include "zmathpresetsubgrapdlg.h"
#include <zeno/utils/logger.h>
#include <zenoui/style/zenostyle.h>
#include "zenoapplication.h"
#include <zenomodel/include/graphsmanagment.h>
#include <zenomodel/include/igraphsmodel.h>
#include <zenomodel/include/nodeparammodel.h>
#include <zenomodel/include/uihelper.h>
#include "variantptr.h"
#include "nodesview/zenographseditor.h"
#include "nodesys/zenosubgraphscene.h"
#include "zenomainwindow.h"
#include <zenoui/comctrl/zlabel.h>
#include <zenoui/comctrl/zcombobox.h>

//dialog
ZMatchPresetSubgraphDlg::ZMatchPresetSubgraphDlg(const QMap<QString, STMatchMatInfo>& info, QWidget* parent)
: ZFramelessDialog(parent)
, m_matchInfos(info)
{
initUi(info);
QString path = ":/icons/zeno-logo.png";
this->setTitleIcon(QIcon(path));
this->setTitleText(tr("Math Info"));
resize(ZenoStyle::dpiScaledSize(QSize(500, 600)));
}

void ZMatchPresetSubgraphDlg::initUi(const QMap<QString, STMatchMatInfo>& info)
{
QWidget* pWidget = new QWidget(this);
QVBoxLayout* pLayout = new QVBoxLayout(pWidget);
m_pTreeView = new QTreeView(this);
m_pTreeView->setHeaderHidden(true);
m_pModel = new QStandardItemModel(this);
m_pTreeView->setModel(m_pModel);
connect(m_pModel, &QStandardItemModel::rowsInserted, this, &ZMatchPresetSubgraphDlg::onRowInserted);
initModel();
pLayout->addWidget(m_pTreeView);
QHBoxLayout* pHLayout = new QHBoxLayout(this);
QPushButton* pOkBtn = new QPushButton(tr("Ok"), this);
QPushButton* pCancelBtn = new QPushButton(tr("Cancel"), this);
int width = ZenoStyle::dpiScaled(80);
int height = ZenoStyle::dpiScaled(30);
pOkBtn->setFixedSize(width, height);
pCancelBtn->setFixedSize(width, height);
pHLayout->addStretch();
pHLayout->addWidget(pOkBtn);
pHLayout->addWidget(pCancelBtn);
pLayout->addLayout(pHLayout);
this->setMainWidget(pWidget);

connect(pOkBtn, &QPushButton::clicked, this, &ZMatchPresetSubgraphDlg::accept);
connect(pCancelBtn, &QPushButton::clicked, this, &ZMatchPresetSubgraphDlg::reject);
}

void ZMatchPresetSubgraphDlg::initModel()
{
for (const auto& key : m_matchInfos.keys())
{
const auto& info = m_matchInfos[key];
QStandardItem* pItem = new QStandardItem(info.m_matType);
pItem->setData(QVariant::fromValue(info.m_matKeys), Qt::UserRole);
m_pModel->appendRow(pItem);
for (const auto& key : info.m_matchInfo.keys())
{
const auto& match = info.m_matchInfo[key];
QStandardItem* pChildItem = new QStandardItem;
QWidget* pWidget = new QWidget;
pChildItem->setData(key, Qt::DisplayRole);
pItem->appendRow(pChildItem);
}
m_pTreeView->setExpanded(pItem->index(), true);
}
}

void ZMatchPresetSubgraphDlg::onRowInserted(const QModelIndex& parent, int first, int last)
{
const QModelIndex& idx = m_pModel->index(first, 0, parent);
if (idx.isValid() && parent.isValid())
{
QWidget* pWidget = new QWidget(this);
QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
pLayout->setMargin(0);
QString param = idx.data(Qt::DisplayRole).toString();
pLayout->addStretch();

ZComboBox* pComboBox = new ZComboBox(this);
QList<QString> lst = parent.data(Qt::UserRole).value<QSet<QString> >().toList();
lst.prepend(param);
pComboBox->addItems(lst);
pComboBox->setCurrentText(param);
pLayout->addWidget(pComboBox);
m_pTreeView->setIndexWidget(idx, pWidget);
connect(pComboBox, &ZComboBox::currentTextChanged, this, [=]() {
QString mtlid = parent.data(Qt::DisplayRole).toString();
if (m_matchInfos.contains(mtlid) && m_matchInfos[mtlid].m_matchInfo.contains(param))
{
m_matchInfos[mtlid].m_matchInfo[param] = pComboBox->currentText();
}
});
}
}

QMap<QString, STMatchMatInfo> ZMatchPresetSubgraphDlg::getMatchInfo(const QMap<QString, STMatchMatInfo>& info, QWidget* parent)
{
ZMatchPresetSubgraphDlg dlg(info, parent);
if (dlg.exec() == QDialog::Accepted)
return dlg.m_matchInfos;
return QMap<QString, STMatchMatInfo>();
}
32 changes: 32 additions & 0 deletions ui/zenoedit/dialog/zmathpresetsubgrapdlg.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#ifndef __ZMatchPresetSubgraphDlg_H__
#define __ZMatchPresetSubgraphDlg_H__

#include <QtWidgets>
#include "zenoui/comctrl/dialog/zframelessdialog.h"
#include <rapidjson/document.h>

struct STMatchMatInfo {
QString m_matType;
QMap<QString, QString> m_matchInfo;
QSet<QString> m_matKeys;
};

class ZMatchPresetSubgraphDlg : public ZFramelessDialog
{
Q_OBJECT
public:
ZMatchPresetSubgraphDlg(const QMap<QString, STMatchMatInfo>& info, QWidget* parent = nullptr);
static QMap<QString, STMatchMatInfo> getMatchInfo(const QMap<QString, STMatchMatInfo>& info, QWidget* parent = nullptr);
signals:
private slots:
void onRowInserted(const QModelIndex& parent, int first, int last);
private:
void initUi(const QMap<QString, STMatchMatInfo>& info);
void initModel();
private:
QTreeView* m_pTreeView;
QStandardItemModel*m_pModel;
QMap<QString, STMatchMatInfo> m_matchInfos;
};

#endif

0 comments on commit 0616ff3

Please sign in to comment.