add project model edit
This commit is contained in:
parent
f311795535
commit
49991aa476
|
|
@ -68,8 +68,11 @@ public:
|
|||
virtual ~BaseModelProperty();
|
||||
|
||||
virtual void addProData(QString sPage,BaseProperty* pData) {_generatedData.insert(sPage,pData);}
|
||||
virtual PropertyModel& getModelProperty() {return pm;}
|
||||
virtual void setModelProperty(PropertyModel pro) {pm = pro;}
|
||||
private:
|
||||
QMap<QString,BaseProperty*> _generatedData; //该数据生成过的工程模数据
|
||||
PropertyModel pm; //工程模的选择状态
|
||||
};
|
||||
|
||||
class BaseProperty:public ModelProperty //图像工程模模属性类,存放电路元件属性
|
||||
|
|
|
|||
|
|
@ -9,12 +9,14 @@
|
|||
#include <QJsonObject>
|
||||
#include <QWidget>
|
||||
#include <QStandardItemModel>
|
||||
#include "tools.h"
|
||||
|
||||
const double g_dGriaphicsScene_Width = 800;
|
||||
const double g_dGriaphicsScene_Height = 600;
|
||||
|
||||
const int g_dEditorItem_Width = 150;
|
||||
const int g_dEditorItem_Height = 80;
|
||||
|
||||
//Q_NAMESPACE
|
||||
enum GraphicsItemType
|
||||
{
|
||||
|
|
@ -194,6 +196,12 @@ struct projectManager //工程模管理类
|
|||
QJsonObject checkState; //属性选择状态
|
||||
};
|
||||
|
||||
struct projectModelSetting //工程模设定类,如图标
|
||||
{
|
||||
QString modelName; //工程模名
|
||||
QMap<QString,QByteArray> mapSvg; //存放选择的svg图片
|
||||
};
|
||||
|
||||
/*struct baseModelSelectManger
|
||||
{
|
||||
int id = 0;
|
||||
|
|
@ -236,11 +244,31 @@ struct PropertyModel //工程模
|
|||
{
|
||||
MapProperty mapProperty;
|
||||
int nType = 0; //工程模类型,选择图标后确定
|
||||
QStandardItemModel* pBase; //基础属性
|
||||
QStandardItemModel* pSelect; //已选择属性
|
||||
QStandardItemModel* pBase = nullptr; //基础属性
|
||||
QStandardItemModel* pSelect = nullptr; //已选择属性
|
||||
FormerName formerMeta; //曾用元模名
|
||||
FormerName formerProject; //曾用工程模名
|
||||
QMap<QString,projectManager> dataInfo; //存放数据库内容
|
||||
projectModelSetting modelSetting;
|
||||
PropertyModel deepCopy() //深拷贝
|
||||
{
|
||||
PropertyModel copy;
|
||||
copy.mapProperty = mapProperty;
|
||||
copy.pBase = deepCloneModel(pBase);
|
||||
copy.pSelect = deepCloneModel(pSelect);
|
||||
copy.formerMeta = formerMeta;
|
||||
copy.formerProject = formerProject;
|
||||
copy.dataInfo = dataInfo;
|
||||
copy.modelSetting = modelSetting;
|
||||
return copy;
|
||||
}
|
||||
void release()
|
||||
{
|
||||
delete pBase;
|
||||
delete pSelect;
|
||||
pBase = nullptr;
|
||||
pSelect = nullptr;
|
||||
}
|
||||
};
|
||||
typedef QMap<QString,PropertyModel> MapProject; //str为工程名,PropertyModel为工程属性
|
||||
typedef QMap<QString,MapProject> MapMeta; //str为元模名,PropertyModel为工程模集
|
||||
|
|
|
|||
|
|
@ -69,4 +69,10 @@ private:
|
|||
int getLevel(QStandardItem *item);
|
||||
QModelIndex findIndex(const QAbstractItemModel* model, const QVariant& target,
|
||||
int role = Qt::DisplayRole, const QModelIndex& parent = QModelIndex());
|
||||
|
||||
// 使用 clone() 方法深拷贝item
|
||||
QStandardItem* deepCloneItem(const QStandardItem* source);
|
||||
|
||||
// 深拷贝整个模型(不复制表头)
|
||||
QStandardItemModel* deepCloneModel(const QStandardItemModel* source);
|
||||
#endif // DATABASE_H
|
||||
|
|
|
|||
|
|
@ -33,3 +33,41 @@ QModelIndex findIndex(const QAbstractItemModel* model, const QVariant& target,
|
|||
}
|
||||
return QModelIndex(); // 未找到
|
||||
}
|
||||
|
||||
QStandardItem* deepCloneItem(const QStandardItem* source) {
|
||||
if (!source) return nullptr;
|
||||
|
||||
// 使用 clone() 方法创建副本
|
||||
QStandardItem* clone = source->clone();
|
||||
|
||||
// 递归复制所有子项
|
||||
for (int row = 0; row < source->rowCount(); ++row) {
|
||||
for (int col = 0; col < source->columnCount(); ++col) {
|
||||
if (QStandardItem* child = source->child(row, col)) {
|
||||
clone->setChild(row, col, deepCloneItem(child));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return clone;
|
||||
}
|
||||
|
||||
QStandardItemModel* deepCloneModel(const QStandardItemModel* source) {
|
||||
if (source == nullptr) return nullptr;
|
||||
|
||||
// 设置相同的行列数
|
||||
QStandardItemModel* dest = new QStandardItemModel(source->parent());
|
||||
|
||||
dest->setRowCount(source->rowCount());
|
||||
dest->setColumnCount(source->columnCount());
|
||||
|
||||
// 复制所有数据项
|
||||
for (int row = 0; row < source->rowCount(); ++row) {
|
||||
for (int col = 0; col < source->columnCount(); ++col) {
|
||||
if (QStandardItem* item = source->item(row, col)) {
|
||||
dest->setItem(row, col, deepCloneItem(item));
|
||||
}
|
||||
}
|
||||
}
|
||||
return dest;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ set(DIAGRAMCAVAS_HEADER_FILES
|
|||
include/ptExtraInfoDlg.h
|
||||
include/ctExtraInfoDlg.h
|
||||
include/projectModelSetting.h
|
||||
include/projectDiagramNameInput.h
|
||||
include/diagramEditor/editPanel.h
|
||||
include/diagramEditor/editView.h
|
||||
include/diagramEditor/editScene.h
|
||||
|
|
@ -57,6 +58,7 @@ set(DIAGRAMCAVAS_HEADER_FILES
|
|||
include/util/selectorManager.h
|
||||
include/util/subMovingSelector.h
|
||||
../common/include/httpInterface.h
|
||||
../common/include/tools.h
|
||||
../common/include/global.h
|
||||
../common/include/baseProperty.h
|
||||
../common/include/compiler.hpp
|
||||
|
|
@ -82,6 +84,7 @@ set(DIAGRAMCAVAS_SOURCE_FILES
|
|||
source/ptExtraInfoDlg.cpp
|
||||
source/ctExtraInfoDlg.cpp
|
||||
source/projectModelSetting.cpp
|
||||
source/projectDiagramNameInput.cpp
|
||||
source/diagramEditor/editPanel.cpp
|
||||
source/diagramEditor/editView.cpp
|
||||
source/diagramEditor/editScene.cpp
|
||||
|
|
@ -121,6 +124,7 @@ set(DIAGRAMCAVAS_SOURCE_FILES
|
|||
source/util/subMovingSelector.cpp
|
||||
../common/source/httpInterface.cpp
|
||||
../common/source/baseProperty.cpp
|
||||
../common/source/tools.cpp
|
||||
)
|
||||
|
||||
set(UI_FILES
|
||||
|
|
@ -132,6 +136,7 @@ set(UI_FILES
|
|||
ui/editorSettingDlg.ui
|
||||
ui/diagramEditorWizard.ui
|
||||
ui/projectModelSetting.ui
|
||||
ui/projectDiagramNameInput.ui
|
||||
)
|
||||
|
||||
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ class SelectorManager;
|
|||
class GraphicsItemGroup;
|
||||
class StatusBar;
|
||||
class PowerEntity;
|
||||
class ProjectDiagramNameInput;
|
||||
|
||||
class DrawingPanel : public QWidget
|
||||
{
|
||||
|
|
@ -45,12 +46,15 @@ public:
|
|||
QJsonObject getDiagramInfo() const; //返回图元位置信息
|
||||
void loadNodes(QJsonObject obj); //加载图元信息
|
||||
void saveNodes(int pageId); //保存到数据库
|
||||
|
||||
DesignerScene* getScene() {return m_pGraphicsScene;}
|
||||
signals:
|
||||
void panelDelete(const QString&);
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *closeEvent);
|
||||
public slots:
|
||||
void onSignal_addGraphicsItem(modelStateInfo&);
|
||||
void onSignal_Generate(); //由基模组态生成工程模组态
|
||||
private:
|
||||
Ui::drawingPanel *ui;
|
||||
DesignerView* m_pGraphicsView;
|
||||
|
|
@ -61,6 +65,7 @@ private:
|
|||
DiagramMode _mode;
|
||||
QString _name;
|
||||
PowerEntity* _pEntity; //组态图拓扑对象
|
||||
ProjectDiagramNameInput* m_pDiagramNameInputer;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ public:
|
|||
//QJsonObject saveNode(QUuid const) const;
|
||||
void saveNode(int nPageId);
|
||||
void setScene(DesignerScene* p){_scene = p;}
|
||||
DesignerScene* getScene() {return _scene;}
|
||||
void setTopWidget(DrawingPanel* p) {_widget = p;}
|
||||
QWidget* getTopWidget();
|
||||
QPointF getTerminalPos(const QString& sTerminalId); //获取拓扑接线点在当前diagram中的位置
|
||||
|
|
@ -69,7 +70,8 @@ public:
|
|||
BaseModelProperty* addBaseNodeData(QUuid id,int type,QString name,QString metaName); //添加图元基模数据
|
||||
|
||||
void showProjectModelSettingDlg(GraphicsBaseModelItem*); //在基模拓扑图上打开工程模设置对话框
|
||||
void generateProjectModel(const QString&,QList<BaseModelProperty*>); //由基模生成工程模
|
||||
void generateProjectModel(const QString&,QList<GraphicsBaseModelItem*>); //由基模生成工程模
|
||||
void addProjectItemByBaseData(DrawingPanel*,GraphicsBaseModelItem*,BaseProperty*); //从基模item生成工程模item
|
||||
void addTestData(); //生成测试基模
|
||||
Q_SIGNALS:
|
||||
void activatePage(const QString&); //激活当前model所在page
|
||||
|
|
@ -83,7 +85,6 @@ public Q_SLOTS:
|
|||
void onSignal_ifExits(QUuid id,const QString&,int type,GraphicsProjectModelItem*); //判断用户输入的名称是否已存在
|
||||
void onTimeOut();
|
||||
void onSignal_GetPointData(QString type,QMap<qint64,double> map);
|
||||
|
||||
private:
|
||||
|
||||
QMap<QUuid,GraphicsProjectModelItem*> _nodeItem; //工程模对象
|
||||
|
|
|
|||
|
|
@ -13,12 +13,12 @@ public:
|
|||
void resize(int,double, double, const QPointF&);
|
||||
void updateCoordinate();
|
||||
void move(const QPointF&);
|
||||
virtual void loadSvg(const QByteArray& data);
|
||||
|
||||
protected:
|
||||
virtual QPainterPath shape();
|
||||
virtual void editShape(int, const QPointF&);
|
||||
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*);
|
||||
virtual void loadSvg(const QString&);
|
||||
protected:
|
||||
QRectF m_lastBoudingRect; //记录上一时刻的boundingRect
|
||||
QSvgRenderer* m_pRender;
|
||||
|
|
|
|||
|
|
@ -461,8 +461,6 @@ public:
|
|||
virtual bool itemChanged() const {return _itemChanged;}
|
||||
virtual void setItemType(GraphicsItemType type){m_Itemtype = type;}
|
||||
virtual GraphicsItemType getItemType() const {return m_Itemtype;}
|
||||
virtual void setInnerType(int type){m_inerType = type;}
|
||||
virtual int getInnerType() const {return m_inerType;}
|
||||
virtual void renderSelectBackground(QPainter*);
|
||||
virtual ItemPort* getPortById(QString) const;
|
||||
virtual ItemPort* getPortPtr(int) const;
|
||||
|
|
@ -475,7 +473,6 @@ public slots:
|
|||
protected:
|
||||
QUuid m_itemId;
|
||||
GraphicsItemType m_Itemtype; //显示类型
|
||||
int m_inerType; //实际类型
|
||||
ModelProperty* _property;
|
||||
PowerEntity* _pEntity; //图元拓扑
|
||||
bool _itemChanged; //图元变化标志,判断是否需要保存
|
||||
|
|
|
|||
|
|
@ -41,6 +41,8 @@ public:
|
|||
QJsonObject toJson() const;
|
||||
static PowerTerminal* fromJson(const QJsonObject& json, QObject* parent = nullptr);
|
||||
|
||||
void setGenerateBy(const QString& sName) {m_generateBy = sName;}
|
||||
QString getGenerateBy() {return m_generateBy;}
|
||||
signals:
|
||||
void positionChanged(const QPointF& newPosition);
|
||||
|
||||
|
|
@ -50,5 +52,6 @@ private:
|
|||
const TerminalType m_type;
|
||||
QString m_name;
|
||||
QPointF m_relativePosition;
|
||||
QString m_generateBy; //被哪个Terminal生成
|
||||
};
|
||||
#endif //POWERTERMINAL_H
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
#ifndef PROJECTDIAGRAMNAMEINPUT_H
|
||||
#define PROJECTDIAGRAMNAMEINPUT_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
namespace Ui { class projectDiagramNameInput; }
|
||||
QT_END_NAMESPACE
|
||||
|
||||
class FixedPortsModel;
|
||||
|
||||
class ProjectDiagramNameInput : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
ProjectDiagramNameInput(QWidget *parent = nullptr);
|
||||
~ProjectDiagramNameInput();
|
||||
|
||||
void initial();
|
||||
void setModel(FixedPortsModel* p) {_model = p;}
|
||||
public slots:
|
||||
void onOkClicked();
|
||||
void onCancelClicked();
|
||||
void onNameEdited(const QString&);
|
||||
private:
|
||||
Ui::projectDiagramNameInput *ui;
|
||||
FixedPortsModel* _model;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -8,6 +8,7 @@ namespace Ui { class projectModelSetting; }
|
|||
QT_END_NAMESPACE
|
||||
|
||||
class GraphicsBaseModelItem;
|
||||
class BaseModelProperty;
|
||||
|
||||
class ProjectModelSetting : public QDialog
|
||||
{
|
||||
|
|
@ -17,16 +18,27 @@ public:
|
|||
~ProjectModelSetting();
|
||||
|
||||
void initial();
|
||||
void loadPicture();
|
||||
void setSelectedItems(QStringList);
|
||||
void showDlg(GraphicsBaseModelItem*);
|
||||
void loadProject(const QString& sMeta);
|
||||
protected:
|
||||
void onOkClicked();
|
||||
void onCancelClicked();
|
||||
void onSaveAsClicked();
|
||||
void onSelectClicked(); //选择图片
|
||||
|
||||
void onAddClicked(); //添加属性
|
||||
void onDecreaseClicked(); //减少属性
|
||||
public slots:
|
||||
void onSaveAsFinished(); //另存输入完毕
|
||||
void onCurrentTextChanged(const QString&);
|
||||
private:
|
||||
void showTestPic(QByteArray);
|
||||
private:
|
||||
Ui::projectModelSetting *ui;
|
||||
BaseModelProperty* _curItemData; //当前操作对象的属性
|
||||
QString _curPath;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <QStatusBar>
|
||||
|
||||
class QLabel;
|
||||
class QPushButton;
|
||||
|
||||
class StatusBar : public QStatusBar
|
||||
{
|
||||
|
|
@ -12,9 +13,16 @@ class StatusBar : public QStatusBar
|
|||
public:
|
||||
explicit StatusBar(QWidget *parent = nullptr);
|
||||
~StatusBar();
|
||||
|
||||
void initial();
|
||||
void setButtonVisible(bool);
|
||||
signals:
|
||||
void generateDiagram();
|
||||
public slots:
|
||||
void onScaleLevelChanged(double f);
|
||||
void onGenerateClicked();
|
||||
private:
|
||||
QLabel *m_pScaleLevel;
|
||||
QPushButton *m_pButtonGenerate;
|
||||
};
|
||||
#endif // STATUSBAR_H
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#include "dataBase.h"
|
||||
#include "powerEntity.h"
|
||||
#include "topologyManager.h"
|
||||
#include "projectDiagramNameInput.h"
|
||||
|
||||
DrawingPanel::DrawingPanel(PowerEntity* pEntity,QWidget *parent,DiagramMode mode)
|
||||
: QWidget(parent)
|
||||
|
|
@ -18,6 +19,7 @@ DrawingPanel::DrawingPanel(PowerEntity* pEntity,QWidget *parent,DiagramMode mode
|
|||
,_pModel(nullptr)
|
||||
,_mode(mode)
|
||||
,_pEntity(pEntity)
|
||||
,m_pDiagramNameInputer(nullptr)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
|
|
@ -37,9 +39,11 @@ DrawingPanel::DrawingPanel(PowerEntity* pEntity,QWidget *parent,DiagramMode mode
|
|||
_pModel->setScene(m_pGraphicsScene);
|
||||
|
||||
m_pStatusBar = new StatusBar(this);
|
||||
if(mode == DM_edit)
|
||||
m_pStatusBar->setButtonVisible(false);
|
||||
ui->mainLayout->addWidget(m_pStatusBar);
|
||||
connect(m_pGraphicsView,&DesignerView::onScaleChanged,m_pStatusBar,&StatusBar::onScaleLevelChanged);
|
||||
|
||||
connect(m_pStatusBar,&StatusBar::generateDiagram,this,&DrawingPanel::onSignal_Generate);
|
||||
}
|
||||
|
||||
DrawingPanel::~DrawingPanel()
|
||||
|
|
@ -162,6 +166,15 @@ void DrawingPanel::onSignal_addGraphicsItem(modelStateInfo& info)
|
|||
}
|
||||
}
|
||||
|
||||
void DrawingPanel::onSignal_Generate()
|
||||
{
|
||||
if(m_pDiagramNameInputer == nullptr){
|
||||
m_pDiagramNameInputer = new ProjectDiagramNameInput(this);
|
||||
m_pDiagramNameInputer->setModel(_pModel);
|
||||
}
|
||||
m_pDiagramNameInputer->show();
|
||||
}
|
||||
|
||||
QJsonObject DrawingPanel::getDiagramInfo() const
|
||||
{
|
||||
QJsonObject obj;
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos)
|
|||
pro = mapData[id];
|
||||
if(pro)
|
||||
{
|
||||
int type = pro->type();
|
||||
int type = pro->graphicsType();
|
||||
if(type == GIT_itemTri)
|
||||
{
|
||||
item = new ElectricSvgItemTriangle(QRect(-15, -15, 30, 30));
|
||||
|
|
@ -783,6 +783,7 @@ void FixedPortsModel::createTopoTerminalsByItem(GraphicsBaseItem* pItem,ModelFun
|
|||
default:
|
||||
break;
|
||||
}
|
||||
QPointF f = port->pos();
|
||||
TopologyManager::instance().createTerminal(pEntity->id(),terType,"",port->pos(),port->getId(),funType);
|
||||
}
|
||||
}
|
||||
|
|
@ -906,7 +907,7 @@ void FixedPortsModel::showProjectModelSettingDlg(GraphicsBaseModelItem* srcItem)
|
|||
m_proModelSettingDlg->showDlg(srcItem);
|
||||
}
|
||||
|
||||
void FixedPortsModel::generateProjectModel(const QString& sPageName,QList<BaseModelProperty*> lstData)
|
||||
void FixedPortsModel::generateProjectModel(const QString& sPageName,QList<GraphicsBaseModelItem*> lstItem)
|
||||
{
|
||||
DrawingPanel* pProPanel = nullptr;
|
||||
if(_cavas){
|
||||
|
|
@ -919,19 +920,117 @@ void FixedPortsModel::generateProjectModel(const QString& sPageName,QList<BaseMo
|
|||
pProPanel = _cavas->getPanel(sPageName);
|
||||
}
|
||||
|
||||
for(auto& pBase:lstData)
|
||||
for(auto& pBaseItem:lstItem) //首次循环处理所有非连线对象
|
||||
{
|
||||
QUuid id = QUuid::createUuid();
|
||||
BaseProperty* pData = addNodeData(id,pBase->type(),pBase->name(),pBase->modelName());
|
||||
if(pData)
|
||||
{
|
||||
//pitem->setProperty(pData);
|
||||
pData->setDataChanged(true); //数据状态改变
|
||||
BaseModelProperty* pBase = dynamic_cast<BaseModelProperty*>(pBaseItem->getProperty());
|
||||
if(pBase->type() != 8){ //不是电缆
|
||||
QUuid id = QUuid::createUuid();
|
||||
BaseProperty* pData = pProPanel->getModel()->addNodeData(id,pBase->type(),pBase->name(),pBase->modelName());
|
||||
if(pData)
|
||||
{
|
||||
pData->setDataChanged(true); //数据状态改变
|
||||
addProjectItemByBaseData(pProPanel,pBaseItem,pData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PowerEntity* pEntity = TopologyManager::instance().createEntity(EntityType::Component,id.toString(),pBase->name());
|
||||
//if(pEntity)
|
||||
//pitem->setEntity(pEntity);
|
||||
//createTopoTerminalsByItem(pitem); //创建item对象的逻辑接线点
|
||||
for(auto& pBaseItem:lstItem) //第二次循环处理所有连线对象
|
||||
{
|
||||
BaseModelProperty* pBase = dynamic_cast<BaseModelProperty*>(pBaseItem->getProperty());
|
||||
if(pBase->type() == 8){ //电缆
|
||||
QUuid id = QUuid::createUuid();
|
||||
BaseProperty* pData = pProPanel->getModel()->addNodeData(id,pBase->type(),pBase->name(),pBase->modelName());
|
||||
if(pData)
|
||||
{
|
||||
pData->setDataChanged(true); //数据状态改变
|
||||
//addProjectItemByBaseData(pProPanel,pBaseItem,pData);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBaseModelItem* pBaseItem,BaseProperty* pPro)
|
||||
{
|
||||
BaseModelProperty* pBase = dynamic_cast<BaseModelProperty*>(pBaseItem->getProperty());
|
||||
if(pBase){
|
||||
if(_baseItem.contains(pBase->uuid())){
|
||||
GraphicsProjectModelItem* pProItem = nullptr;
|
||||
GraphicsBaseModelItem* pBaseItem = _baseItem.value(pBase->uuid());
|
||||
int type = pBase->graphicsType();
|
||||
if(type == GIT_baseBus)
|
||||
{
|
||||
QRectF rec = pBaseItem->boundingRect();
|
||||
pProItem = new ElectricSvgItemBus(rec.toRect());
|
||||
pProItem->setItemType(GIT_bus);
|
||||
QByteArray svg = pBase->getModelProperty().modelSetting.mapSvg.first();
|
||||
}
|
||||
else if(type == GIT_baseBreaker)
|
||||
{
|
||||
QRectF rec = pBaseItem->boundingRect();
|
||||
pProItem = new ElectricSvgItemRect(rec.toRect());
|
||||
pProItem->setItemType(GIT_itemRect);
|
||||
QByteArray svg = pBase->getModelProperty().modelSetting.mapSvg.first();
|
||||
}
|
||||
|
||||
if(pBase->graphicsType() == GIT_baseLine)
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
PowerEntity* pEntity = TopologyManager::instance().createEntity(EntityType::Component,pPro->uuid().toString(),pBase->name());
|
||||
QList<PowerTerminal*> lstBase = TopologyManager::instance().getTerminalsForEntity(pBase->uuid().toString(),ModelFunctionType::BaseModel); //获取基模的逻辑点
|
||||
for(auto& baseTer:lstBase)
|
||||
{
|
||||
QUuid uid = QUuid::createUuid();
|
||||
PowerTerminal* proTer = TopologyManager::instance().createTerminal(pEntity->id(),baseTer->type(),"",baseTer->relativePosition(),uid.toString(),ModelFunctionType::ProjectModel);
|
||||
proTer->setGenerateBy(baseTer->id());
|
||||
if(proTer->type() == TerminalType::PowerConnect)
|
||||
{
|
||||
pProItem->addPort(p_movable,proTer->relativePosition(),proTer->id());
|
||||
}
|
||||
else if(proTer->type() == TerminalType::PowerInput || proTer->type() == TerminalType::PowerOutput)
|
||||
{
|
||||
HandleType typ;
|
||||
if(proTer->type() == TerminalType::PowerInput){
|
||||
typ = T_lineIn;
|
||||
}
|
||||
else{
|
||||
typ = T_lineOut;
|
||||
}
|
||||
QPointF pos = proTer->relativePosition();
|
||||
PortPos locate;
|
||||
if(pos.x() < 0)
|
||||
{
|
||||
locate = P_left;
|
||||
}
|
||||
else if(pos.x() > 0)
|
||||
{
|
||||
locate = P_right;
|
||||
}
|
||||
else if(pos.y() > 0)
|
||||
{
|
||||
locate = P_top;
|
||||
}
|
||||
else if(pos.y() < 0)
|
||||
{
|
||||
locate = P_down;
|
||||
}
|
||||
pProItem->addPort(P_const,pos,proTer->id(),typ,locate);
|
||||
}
|
||||
}
|
||||
|
||||
pProItem->setItemId(QUuid(pEntity->id()));
|
||||
pProItem->updateHandles();
|
||||
pProItem->setPos(pBaseItem->pos());
|
||||
pPanel->getScene()->addItem(pProItem);
|
||||
pProItem->setProperty(pPro); //绑定模型
|
||||
pProItem->updateByProperty(); //使用模型更新自身
|
||||
//QString sModel = _projectModelName.value(id.toString());
|
||||
QString sModel = pBase->getModelProperty().modelSetting.modelName;
|
||||
pProItem->setModelName(sModel);
|
||||
pPanel->getModel()->addNodeItem(QUuid(pEntity->id()),pProItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -942,18 +1041,17 @@ void FixedPortsModel::addTestData()
|
|||
ElectricBaseModelSvgItem* pBreaker = new ElectricBaseModelSvgItem(QRect(-15, -15, 30, 30));
|
||||
pBreaker->setItemId(breakerId);
|
||||
pBreaker->setItemType(GIT_baseBreaker);
|
||||
pBreaker->setInnerType(3);
|
||||
pBreaker->initialPortsByDatabase();
|
||||
QByteArray byte = DataBase::GetInstance()->ModelType()[3].icon;
|
||||
pBreaker->loadSvg(byte);
|
||||
PowerEntity* pEntityBreaker = TopologyManager::instance().createEntity(EntityType::Component,breakerId.toString(),"断路器1",ModelFunctionType::BaseModel);
|
||||
if(pEntityBreaker)
|
||||
pBreaker->setEntity(pEntityBreaker);
|
||||
createTopoTerminalsByItem(pBreaker,ModelFunctionType::BaseModel);
|
||||
BaseModelProperty* pBreakerData = addBaseNodeData(breakerId,3,"断路器1",DataBase::GetInstance()->ModelType()[3].modelType);
|
||||
if(pBreakerData)
|
||||
{
|
||||
pBreaker->setProperty(pBreakerData);
|
||||
pBreaker->initialPortsByDatabase();
|
||||
createTopoTerminalsByItem(pBreaker,ModelFunctionType::BaseModel);
|
||||
pBreakerData->setDataChanged(true); //数据状态改变
|
||||
}
|
||||
addBaseItem(breakerId,pBreaker);
|
||||
|
|
@ -965,7 +1063,6 @@ void FixedPortsModel::addTestData()
|
|||
ElectricBaseModelSvgBus* pBus = new ElectricBaseModelSvgBus(QRect(-200, -3, 400, 6));
|
||||
pBus->setItemId(busId);
|
||||
pBus->setItemType(GIT_baseBus);
|
||||
pBus->setInnerType(1);
|
||||
//pBreaker->initialPortsByDatabase();
|
||||
QByteArray byte1 = DataBase::GetInstance()->ModelType()[1].icon;
|
||||
pBus->loadSvg(byte1);
|
||||
|
|
@ -987,8 +1084,7 @@ void FixedPortsModel::addTestData()
|
|||
ElectricBaseModelLineItem* pLine = new ElectricBaseModelLineItem();
|
||||
pLine->setItemId(lineId);
|
||||
pLine->setItemType(GIT_baseLine);
|
||||
pLine->setInnerType(4);
|
||||
BaseModelProperty* pLineData = addBaseNodeData(lineId,4,"电缆1",DataBase::GetInstance()->ModelType()[4].modelType);
|
||||
BaseModelProperty* pLineData = addBaseNodeData(lineId,8,"电缆1",DataBase::GetInstance()->ModelType()[4].modelType);
|
||||
if(pLineData)
|
||||
{
|
||||
pLine->setProperty(pLineData);
|
||||
|
|
|
|||
|
|
@ -76,11 +76,6 @@ void ElectricSvgItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
|
|||
}
|
||||
}
|
||||
|
||||
void ElectricSvgItem::loadSvg(const QString& str)
|
||||
{
|
||||
m_pRender = new QSvgRenderer(str);
|
||||
}
|
||||
|
||||
void ElectricSvgItem::resize(int nHandle,double dSX, double dSY, const QPointF& basePoint)
|
||||
{
|
||||
switch (nHandle)
|
||||
|
|
@ -115,6 +110,11 @@ void ElectricSvgItem::move(const QPointF& point)
|
|||
moveBy(point.x(), point.y());
|
||||
}
|
||||
|
||||
void ElectricSvgItem::loadSvg(const QByteArray& data)
|
||||
{
|
||||
m_pRender = new QSvgRenderer(data);
|
||||
}
|
||||
|
||||
void ElectricSvgItem::editShape(int nHandle,const QPointF& ptMouse)
|
||||
{
|
||||
prepareGeometryChange();
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
ElectricSvgItemBus::ElectricSvgItemBus(const QRect &rect, QGraphicsItem *parent)
|
||||
: ElectricSvgItem(rect,parent)
|
||||
{
|
||||
loadSvg(":/images/element/svg_bus.svg");
|
||||
//loadSvg(":/images/element/svg_bus.svg");
|
||||
setHandleIfShow(H_textCaption,false);
|
||||
setHandleVisible(false);
|
||||
setFunctionHandleIfShow(false);
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
ElectricSvgItemRect::ElectricSvgItemRect(const QRect &rect, bool genNewPort, QGraphicsItem *parent)
|
||||
: ElectricSvgItem(rect,parent)
|
||||
{
|
||||
loadSvg(":/images/element/svg_rect.svg");
|
||||
//loadSvg(":/images/element/svg_rect.svg");
|
||||
setHandleIfShow(H_textCaption,false);
|
||||
setHandleIfShow(H_textCurrent,false);
|
||||
setHandleIfShow(h_textVoltage,false);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
ElectricSvgItemTriangle::ElectricSvgItemTriangle(const QRect &rect, QGraphicsItem *parent)
|
||||
: ElectricSvgItem(rect,parent)
|
||||
{
|
||||
loadSvg(":/images/element/svg_triangle.svg");
|
||||
//loadSvg(":/images/element/svg_triangle.svg");
|
||||
setHandleIfShow(H_textCaption,false);
|
||||
setHandleVisible(false);
|
||||
setFunctionHandleIfShow(false);
|
||||
|
|
|
|||
|
|
@ -158,9 +158,13 @@ void GraphicsBaseItem::initialPortsByDatabase()
|
|||
{
|
||||
QMap<int,componentTypeInfo> mapType = DataBase::GetInstance()->getAllComponentType();
|
||||
|
||||
if(mapType.contains(m_inerType))
|
||||
if(_property == nullptr){
|
||||
qDebug()<<"item property null";
|
||||
return;
|
||||
}
|
||||
if(mapType.contains(_property->type()))
|
||||
{
|
||||
QJsonArray nodesJsonArray = mapType[m_inerType].config["port"].toArray();
|
||||
QJsonArray nodesJsonArray = mapType[_property->type()].config["port"].toArray();
|
||||
|
||||
for (QJsonValueRef nodeJson : nodesJsonArray)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
#include <QPushButton>
|
||||
#include "projectDiagramNameInput.h"
|
||||
#include "dataBase.h"
|
||||
#include "ui_projectDiagramNameInput.h"
|
||||
|
||||
ProjectDiagramNameInput::ProjectDiagramNameInput(QWidget *parent)
|
||||
: QDialog(parent)
|
||||
,ui(new Ui::projectDiagramNameInput)
|
||||
,_model(nullptr)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
this->setWindowFlags(Qt::FramelessWindowHint | windowFlags());
|
||||
initial();
|
||||
}
|
||||
|
||||
ProjectDiagramNameInput::~ProjectDiagramNameInput()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void ProjectDiagramNameInput::initial()
|
||||
{
|
||||
connect(ui->btn_ok,&QPushButton::clicked,this,&ProjectDiagramNameInput::onOkClicked);
|
||||
connect(ui->btn_cancel,&QPushButton::clicked,this,&ProjectDiagramNameInput::onCancelClicked);
|
||||
connect(ui->le_name,&QLineEdit::textEdited,this,&ProjectDiagramNameInput::onNameEdited);
|
||||
}
|
||||
|
||||
void ProjectDiagramNameInput::onOkClicked()
|
||||
{
|
||||
if(DataBase::GetInstance()->getPageIdByName(ui->le_name->text()) != -1)
|
||||
{
|
||||
hide();
|
||||
}
|
||||
}
|
||||
|
||||
void ProjectDiagramNameInput::onCancelClicked()
|
||||
{
|
||||
hide();
|
||||
}
|
||||
|
||||
void ProjectDiagramNameInput::onNameEdited(const QString& text)
|
||||
{
|
||||
if(_model)
|
||||
{
|
||||
if(DataBase::GetInstance()->getPageIdByName(text) == -1){ //不存在,可以创建
|
||||
ui->label_info->setText("名称可用");
|
||||
}else{
|
||||
ui->label_info->setText("名称重复!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,13 +1,27 @@
|
|||
#include <QPushButton>
|
||||
#include <QMessageBox>
|
||||
#include <QCoreApplication>
|
||||
#include <QDir>
|
||||
#include <QFileInfo>
|
||||
#include <QSvgRenderer>
|
||||
#include <QPainter>
|
||||
#include "projectModelSetting.h"
|
||||
#include "ui_projectModelSetting.h"
|
||||
#include <QPushButton>
|
||||
#include "baseProperty.h"
|
||||
#include "graphicsItem/graphicsBaseItem.h"
|
||||
#include "projectModelManager.h"
|
||||
#include "tools.h"
|
||||
#include "global.h"
|
||||
#include "logger.h"
|
||||
|
||||
ProjectModelSetting::ProjectModelSetting(QWidget *parent)
|
||||
: QDialog(parent)
|
||||
,ui(new Ui::projectModelSetting)
|
||||
,_curItemData(nullptr)
|
||||
{
|
||||
setWindowFlags(Qt::Widget);
|
||||
ui->setupUi(this);
|
||||
this->setWindowFlags(Qt::FramelessWindowHint | windowFlags());
|
||||
initial();
|
||||
}
|
||||
|
||||
ProjectModelSetting::~ProjectModelSetting()
|
||||
|
|
@ -20,14 +34,100 @@ void ProjectModelSetting::initial()
|
|||
connect(ui->btn_ok,&QPushButton::clicked,this,&ProjectModelSetting::onOkClicked);
|
||||
connect(ui->btn_cancel,&QPushButton::clicked,this,&ProjectModelSetting::onCancelClicked);
|
||||
connect(ui->btn_saveAs,&QPushButton::clicked,this,&ProjectModelSetting::onSaveAsClicked);
|
||||
connect(ui->btn_select,&QPushButton::clicked,this,&ProjectModelSetting::onSelectClicked);
|
||||
|
||||
connect(ui->btn_apply,&QPushButton::clicked,this,&ProjectModelSetting::onAddClicked);
|
||||
connect(ui->btn_revoke,&QPushButton::clicked,this,&ProjectModelSetting::onDecreaseClicked);
|
||||
|
||||
connect(ui->le_saveAs,&QLineEdit::editingFinished,this,&ProjectModelSetting::onSaveAsFinished);
|
||||
connect(ui->cb_modelType,&QComboBox::currentTextChanged,this,&ProjectModelSetting::onCurrentTextChanged);
|
||||
_curPath = QCoreApplication::applicationDirPath()+"/proModelImage/";
|
||||
ui->cb_modelType->setPlaceholderText(" ");
|
||||
}
|
||||
|
||||
void ProjectModelSetting::loadPicture()
|
||||
{
|
||||
ui->listWidget_icon->clear();
|
||||
QString path = _curPath+_curItemData->metaModelName()+"/";
|
||||
QDir dir(path);
|
||||
QStringList namefiles;
|
||||
namefiles<<"*.png"<<"*.svg";
|
||||
|
||||
QStringList files=dir.entryList(namefiles,QDir::Files|QDir::Readable,QDir::Name);
|
||||
//动态添加item到QListWidget里
|
||||
for(int i=0;i<files.size();i++)
|
||||
{
|
||||
QString sPath = path+files.at(i);
|
||||
QListWidgetItem *newitem=new QListWidgetItem(QIcon(QPixmap(sPath).scaled(100, 100)),files.at(i));
|
||||
QFile file(sPath);
|
||||
if (!file.open(QIODevice::ReadOnly)) {
|
||||
LOG_WARN("File", QString("%1 svgfile open failed").arg(sPath));
|
||||
return;
|
||||
}
|
||||
// Read SVG content
|
||||
QByteArray svgData = file.readAll().toHex();
|
||||
file.close();
|
||||
newitem->setData(Qt::UserRole + 1,svgData); //item附带二进制数据
|
||||
QFileInfo fi(path+files.at(i)); //获取文件信息
|
||||
newitem->setText(fi.baseName());//Returns the base name of the file without the path
|
||||
newitem->setTextAlignment(Qt::AlignHCenter);//设置文字对齐方式:水平居中
|
||||
ui->listWidget_icon->addItem(newitem);
|
||||
}
|
||||
}
|
||||
|
||||
void ProjectModelSetting::setSelectedItems(QStringList lst)
|
||||
{
|
||||
QList<QListWidgetItem*> lstItem = ui->listWidget_icon->findItems(lst.first(),Qt::MatchExactly);
|
||||
if(!lstItem.empty())
|
||||
{
|
||||
ui->listWidget_icon->setCurrentItem(lstItem.first());
|
||||
}
|
||||
}
|
||||
|
||||
void ProjectModelSetting::showDlg(GraphicsBaseModelItem* srcNode)
|
||||
{
|
||||
show();
|
||||
ui->treeView_base->setModel(nullptr);
|
||||
ui->treeView_sub->setModel(nullptr);
|
||||
ModelProperty* p = srcNode->getProperty();
|
||||
BaseModelProperty* pro = dynamic_cast<BaseModelProperty*>(p);
|
||||
if(pro)
|
||||
{
|
||||
QString sName = pro->name();
|
||||
QString sMetaModel = pro->metaModelName();
|
||||
QString sModel = pro->modelName();
|
||||
_curItemData = pro;
|
||||
loadProject(sMetaModel);
|
||||
|
||||
bool bExist = ProjectModelManager::instance().ifProjectExsit(sModel);
|
||||
if(bExist){ //使用存在的属性
|
||||
ui->cb_modelType->setCurrentText(sModel);
|
||||
}
|
||||
else{ //新建当前对象的属性
|
||||
if(pro->getModelProperty().pBase == nullptr && pro->getModelProperty().pSelect == nullptr){
|
||||
pro->getModelProperty().pBase = new QStandardItemModel(this);
|
||||
pro->getModelProperty().pSelect = new QStandardItemModel(this);
|
||||
pro->getModelProperty().mapProperty = ProjectModelManager::instance().addNewProject(sMetaModel,sModel,pro->getModelProperty());
|
||||
}
|
||||
ui->treeView_base->setModel(pro->getModelProperty().pBase);
|
||||
ui->treeView_sub->setModel(pro->getModelProperty().pSelect);
|
||||
ui->treeView_sub->expandAll();
|
||||
ui->treeView_base->expandAll();
|
||||
}
|
||||
ui->le_saveAs->clear();
|
||||
ui->le_name->setText(sName);
|
||||
ui->le_base->setText(sMetaModel);
|
||||
}
|
||||
loadPicture();
|
||||
}
|
||||
|
||||
void ProjectModelSetting::loadProject(const QString& sMeta)
|
||||
{
|
||||
ui->cb_modelType->blockSignals(true);
|
||||
ui->cb_modelType->clear();
|
||||
QStringList lst = ProjectModelManager::instance().getProjectModelLst(sMeta);
|
||||
ui->cb_modelType->addItems(lst);
|
||||
ui->cb_modelType->blockSignals(false);
|
||||
}
|
||||
|
||||
void ProjectModelSetting::onOkClicked()
|
||||
|
|
@ -42,15 +142,176 @@ void ProjectModelSetting::onCancelClicked()
|
|||
|
||||
void ProjectModelSetting::onSaveAsClicked()
|
||||
{
|
||||
QString sModelName = ui->le_saveAs->text();
|
||||
bool bExist = ProjectModelManager::instance().ifProjectExsit(sModelName);
|
||||
if(bExist){
|
||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"该模型已存在"));
|
||||
}
|
||||
else{ //新建的模型拷贝当前内容到全局队列
|
||||
_curItemData->getModelProperty().modelSetting.modelName = sModelName;
|
||||
PropertyModel pro = _curItemData->getModelProperty().deepCopy();
|
||||
ProjectModelManager::instance().getData()[_curItemData->metaModelName()].insert(sModelName,pro);
|
||||
ProjectModelManager::instance().generate(_curItemData->metaModelName(),sModelName);
|
||||
ProjectModelManager::instance().updateSetting(_curItemData->metaModelName(),sModelName);
|
||||
ui->cb_modelType->blockSignals(true);
|
||||
ui->cb_modelType->addItem(sModelName);
|
||||
ui->cb_modelType->setCurrentText(sModelName);
|
||||
ui->cb_modelType->blockSignals(false);
|
||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"另存成功"));
|
||||
}
|
||||
ui->label_info->clear();
|
||||
}
|
||||
|
||||
void ProjectModelSetting::onSelectClicked()
|
||||
{
|
||||
QList<QListWidgetItem*> items = ui->listWidget_icon->selectedItems();
|
||||
for(auto& item:items)
|
||||
{
|
||||
if(!_curItemData->getModelProperty().modelSetting.mapSvg.contains(item->text()))
|
||||
{
|
||||
QByteArray data = item->data(Qt::UserRole + 1).toByteArray();
|
||||
_curItemData->getModelProperty().modelSetting.mapSvg.insert(item->text(),data);
|
||||
ui->label_infoIcon->setText("当前选择:"+item->text());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ProjectModelSetting::onAddClicked()
|
||||
{
|
||||
if(_curItemData == nullptr)
|
||||
return;
|
||||
QModelIndex selected = ui->treeView_base->currentIndex();
|
||||
QStandardItem* pItem = _curItemData->getModelProperty().pBase->itemFromIndex(selected);
|
||||
|
||||
if(pItem)
|
||||
{
|
||||
int nLevel = getLevel(pItem);
|
||||
if(nLevel != 1) //不是二级节点就返回
|
||||
return;
|
||||
else{
|
||||
QString strGroup = pItem->parent()->text();
|
||||
|
||||
QStandardItem *parentItem = pItem->parent();
|
||||
if (parentItem) {
|
||||
parentItem->takeRow(pItem->row());
|
||||
}
|
||||
|
||||
QList<QStandardItem*> groupItem = _curItemData->getModelProperty().pSelect->findItems(strGroup);
|
||||
if(groupItem.isEmpty()) //已选对象中是否存在该组,没有则添加
|
||||
{
|
||||
QStandardItem* pGroup = new QStandardItem(strGroup);
|
||||
_curItemData->getModelProperty().pSelect->appendRow(pGroup);
|
||||
pGroup->appendRow(pItem);
|
||||
}
|
||||
else{
|
||||
QStandardItem* pGroup = groupItem[0];
|
||||
pGroup->appendRow(pItem);
|
||||
}
|
||||
|
||||
_curItemData->getModelProperty().mapProperty[strGroup].mCheckState[pItem->text()].checkState = true; //选择状态设为1
|
||||
}
|
||||
}
|
||||
|
||||
ui->treeView_sub->expandAll();
|
||||
ui->treeView_base->expandAll();
|
||||
}
|
||||
|
||||
void ProjectModelSetting::onDecreaseClicked()
|
||||
{
|
||||
if(_curItemData == nullptr)
|
||||
return;
|
||||
QStringList lstPub = ProjectModelManager::instance().getPublicGroupList();
|
||||
QModelIndex selected = ui->treeView_sub->currentIndex();
|
||||
QStandardItem* pItem = _curItemData->getModelProperty().pSelect->itemFromIndex(selected);
|
||||
|
||||
if(pItem)
|
||||
{
|
||||
if(lstPub.contains(pItem->parent()->text())){
|
||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"公共属性无法编辑"));
|
||||
return;
|
||||
}
|
||||
int nLevel = getLevel(pItem);
|
||||
if(nLevel != 1) //不是二级节点就返回
|
||||
return;
|
||||
else{
|
||||
QString strGroup = pItem->parent()->text();
|
||||
|
||||
QStandardItem *parentItem = pItem->parent();
|
||||
if (parentItem) {
|
||||
parentItem->takeRow(pItem->row());
|
||||
if(!parentItem->hasChildren()){
|
||||
_curItemData->getModelProperty().pSelect->takeRow(parentItem->row());
|
||||
}
|
||||
}
|
||||
|
||||
QList<QStandardItem*> groupItem = _curItemData->getModelProperty().pBase->findItems(strGroup);
|
||||
if(groupItem.isEmpty()) //已选对象中是否存在该组,没有则添加
|
||||
{
|
||||
QStandardItem* pGroup = new QStandardItem(strGroup);
|
||||
_curItemData->getModelProperty().pBase->appendRow(pGroup);
|
||||
pGroup->appendRow(pItem);
|
||||
}
|
||||
else{
|
||||
QStandardItem* pGroup = groupItem[0];
|
||||
pGroup->appendRow(pItem);
|
||||
}
|
||||
|
||||
_curItemData->getModelProperty().mapProperty[strGroup].mCheckState[pItem->text()].checkState = false; //选择状态设为1
|
||||
}
|
||||
}
|
||||
|
||||
ui->treeView_base->expandAll();
|
||||
}
|
||||
|
||||
void ProjectModelSetting::onSaveAsFinished()
|
||||
{
|
||||
QString sModelName = ui->le_saveAs->text();
|
||||
bool bExist = ProjectModelManager::instance().ifProjectExsit(sModelName);
|
||||
if(bExist){
|
||||
ui->label_info->setText(QString::fromWCharArray(L"名称已存在"));
|
||||
}
|
||||
else{
|
||||
ui->label_info->setText(QString::fromWCharArray(L"名称可用"));
|
||||
}
|
||||
}
|
||||
|
||||
void ProjectModelSetting::onCurrentTextChanged(const QString& text)
|
||||
{
|
||||
if(text.isEmpty())
|
||||
return;
|
||||
if(_curItemData)
|
||||
{
|
||||
_curItemData->getModelProperty().release();
|
||||
PropertyModel model = ProjectModelManager::instance().getData()[_curItemData->metaModelName()][text].deepCopy();
|
||||
_curItemData->setModelProperty(model);
|
||||
ui->treeView_base->setModel(_curItemData->getModelProperty().pBase);
|
||||
ui->treeView_sub->setModel(_curItemData->getModelProperty().pSelect);
|
||||
ui->treeView_sub->expandAll();
|
||||
ui->treeView_base->expandAll();
|
||||
loadPicture();
|
||||
setSelectedItems(_curItemData->getModelProperty().modelSetting.mapSvg.keys());
|
||||
showTestPic(_curItemData->getModelProperty().modelSetting.mapSvg.first());
|
||||
}
|
||||
}
|
||||
|
||||
void ProjectModelSetting::showTestPic(QByteArray arr)
|
||||
{
|
||||
QSvgRenderer renderer(arr);
|
||||
bool a = renderer.isValid();
|
||||
qreal dipScale = qApp->devicePixelRatio();
|
||||
QSize scaledSize = ui->modelImagePreview->size() * dipScale;
|
||||
//创建透明背景的高分辨率图像
|
||||
QImage image(scaledSize, QImage::Format_A2BGR30_Premultiplied);
|
||||
image.fill(Qt::transparent);
|
||||
//高质量渲染设置
|
||||
QPainter painter(&image);
|
||||
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing);
|
||||
//渲染到目标对象
|
||||
renderer.render(&painter, QRect(0, 0, scaledSize.width(), scaledSize.height()));
|
||||
//转换为像素图
|
||||
QPixmap pixmap = QPixmap::fromImage(image);
|
||||
pixmap.setDevicePixelRatio(dipScale);
|
||||
//显示图片
|
||||
ui->modelImagePreview->clear();
|
||||
ui->modelImagePreview->setPixmap(pixmap);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,18 @@
|
|||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#include "statusBar.h"
|
||||
|
||||
StatusBar::StatusBar(QWidget *parent)
|
||||
: QStatusBar(parent)
|
||||
,m_pScaleLevel(nullptr)
|
||||
,m_pButtonGenerate(nullptr)
|
||||
{
|
||||
m_pScaleLevel = new QLabel("当前级数:10",this);
|
||||
m_pScaleLevel->setMinimumWidth(250);
|
||||
m_pButtonGenerate = new QPushButton("生成工程组态",this);
|
||||
addWidget(m_pScaleLevel);
|
||||
addPermanentWidget(m_pButtonGenerate);
|
||||
initial();
|
||||
}
|
||||
|
||||
StatusBar::~StatusBar()
|
||||
|
|
@ -15,7 +20,22 @@ StatusBar::~StatusBar()
|
|||
|
||||
}
|
||||
|
||||
void StatusBar::initial()
|
||||
{
|
||||
connect(m_pButtonGenerate,&QPushButton::clicked,this,&StatusBar::onGenerateClicked);
|
||||
}
|
||||
|
||||
void StatusBar::setButtonVisible(bool val)
|
||||
{
|
||||
setVisible(m_pButtonGenerate);
|
||||
}
|
||||
|
||||
void StatusBar::onScaleLevelChanged(double f)
|
||||
{
|
||||
m_pScaleLevel->setText(QString::fromWCharArray(L"当前级数:")+QString::number(f));
|
||||
}
|
||||
|
||||
void StatusBar::onGenerateClicked()
|
||||
{
|
||||
emit generateDiagram();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,222 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>projectDiagramNameInput</class>
|
||||
<widget class="QDialog" name="projectDiagramNameInput">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>330</width>
|
||||
<height>138</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>25</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>25</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgb(200, 200, 200);</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">color: rgb(0, 0, 0);</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>输入组态图名称</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>227</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget_2" native="true">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">color: rgb(0, 0, 0);</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>名称</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="le_name"/>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_info_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">color: rgb(0, 0, 0);</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>提示:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_info">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>60</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">color: rgb(0, 0, 0);</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_ok">
|
||||
<property name="text">
|
||||
<string>确定</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_cancel">
|
||||
<property name="text">
|
||||
<string>取消</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>634</width>
|
||||
<height>596</height>
|
||||
<width>814</width>
|
||||
<height>723</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
|
|
@ -236,23 +236,103 @@ color: rgb(8, 8, 8);</string>
|
|||
<attribute name="title">
|
||||
<string>其他设置</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3" stretch="1,1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3" stretch="1,0,1">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>工程图标设置</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QListWidget" name="listWidget_icon">
|
||||
<property name="dragDropMode">
|
||||
<enum>QAbstractItemView::DragDropMode::DragDrop</enum>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>100</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="viewMode">
|
||||
<enum>QListView::ViewMode::IconMode</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_infoIcon">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_select">
|
||||
<property name="text">
|
||||
<string>选择</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="modelImagePreview">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>100</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>100</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
|
|
@ -298,7 +378,20 @@ color: rgb(8, 8, 8);</string>
|
|||
<item>
|
||||
<widget class="QLineEdit" name="le_saveAs">
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_info">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
|||
|
|
@ -86,6 +86,12 @@ public:
|
|||
QMap<int,modelAttributePublic> ModelAttributePublic() const {return _modelAttributePublic;}
|
||||
QMap<int,modelConnectivity> ModelConnectivity() const {return _modelConnectivity;}
|
||||
//***********工程模
|
||||
bool insertProjectSetting(const QString& baseModel,const QString& modelName,QJsonObject setting); //插入工程模设置信息(图标等选择信息)
|
||||
bool updateProjectSetting(const QString& baseModel,const QString& modelName,QJsonObject setting);
|
||||
QJsonObject getProjectSetting(const QString& baseModel,const QString& modelName);
|
||||
QStringList getProjectWithinBase(const QString& baseModel); //获取基模下的所有工程模名称
|
||||
bool deleteProjectSetting(const QString& baseModel,const QString& modelName);
|
||||
|
||||
bool createProjectManager(); //生成记录表,包含工程模名称,属性组名,启用和关闭的属性字段(json类型)[一个属性组建一个表]
|
||||
bool insertProjectManager(const QString& name,const QString& tag,const QString& metaModel,const QString& groupName,int linkType,QJsonObject checkState,bool isPublic = false);
|
||||
bool updateCheckState(const QString& tableName,QJsonObject checkState); //更新属性选中状态
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ public:
|
|||
QList<QStandardItem*> getGroupSub(QStandardItemModel*,const QString&); //返回指定组下的属性(如果存在)
|
||||
MapMeta& getData() {return m_mapTotalData;}
|
||||
void deleteData(const QString& meta,const QString& proj);
|
||||
void updateSetting(const QString& sMeta,const QString& sPro); //更新模型数据(图片
|
||||
QStringList getProjectModelLst(const QString& sMeta);
|
||||
public:
|
||||
QStringList getModelList() const; //获取元模型列表
|
||||
QStringList getGroupList(const QString& model) const; //返回该元模下的属性组列表
|
||||
|
|
@ -42,6 +44,7 @@ private:
|
|||
int createPropertyTable(const QString& sMeta,const QString& sProject,const QString& sGroup,QList<QStandardItem*> lstSelect,QList<QStandardItem*> lstBase,int nLinkType,bool isPublic = false); //创建属性组表并插入记录到管理表(工程名,当前项迭代器,关联图元类型)
|
||||
QJsonObject getSelectedState(QList<QStandardItem*> select,QList<QStandardItem*> base); //返回json格式的选中状态
|
||||
QString getItemDataType(const QStandardItem* pItem); //返回数据类型
|
||||
projectModelSetting getModelSetting(const QString& sMeta,const QString& sProject); //获取指定工程模的设定
|
||||
private:
|
||||
MapMeta m_mapTotalData;
|
||||
bool _bInitialised;
|
||||
|
|
|
|||
|
|
@ -1427,6 +1427,121 @@ bool DataBase::getModelConnectivity()
|
|||
}
|
||||
}
|
||||
//=================================工程模===========================================//
|
||||
|
||||
bool DataBase::insertProjectSetting(const QString& baseModel,const QString& modelName,QJsonObject setting)
|
||||
{
|
||||
QString strSQL = "INSERT INTO diagramui_projectmodelSetting(base_name,model_name, context) VALUES (?, ?, ?)";
|
||||
QJsonDocument contextDoc(setting);
|
||||
QString strContext = contextDoc.toJson(QJsonDocument::Compact);
|
||||
|
||||
QVariantList params;
|
||||
params.append(baseModel);
|
||||
params.append(modelName);
|
||||
params.append(strContext);
|
||||
try
|
||||
{
|
||||
executeSQL(strSQL,false,params);
|
||||
return true;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
LOG_ERROR("DB", QString("Insert diagramui_projectmodelSetting fail"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool DataBase::updateProjectSetting(const QString& baseModel,const QString& modelName,QJsonObject setting)
|
||||
{
|
||||
QJsonDocument contextDoc(setting);
|
||||
QString strContext = contextDoc.toJson(QJsonDocument::Compact);
|
||||
|
||||
QString strSQL = "UPDATE diagramui_projectmodelsetting SET context = ? WHERE base_name = ? AND model_name = ?";
|
||||
QVariantList params;
|
||||
params.append(strContext);
|
||||
params.append(baseModel);
|
||||
params.append(modelName);
|
||||
|
||||
try
|
||||
{
|
||||
executeSQL(strSQL,false,params);
|
||||
return true;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
LOG_ERROR("DB", QString("Update model %1 setting %2 fail").arg(modelName,strContext));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
QJsonObject DataBase::getProjectSetting(const QString& baseModel,const QString& modelName)
|
||||
{
|
||||
|
||||
QString strSQL = "SELECT context FROM diagramui_projectmodelsetting WHERE base_name = ? AND model_name = ?";
|
||||
QVariantList params;
|
||||
params.append(baseModel);
|
||||
params.append(modelName);
|
||||
|
||||
try
|
||||
{
|
||||
QJsonObject obj;
|
||||
QSqlQuery query = executeSQL(strSQL,false,params);
|
||||
while (query.next())
|
||||
{
|
||||
QString con = query.value(0).toString();
|
||||
obj= QstringToJson(con);
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
return QJsonObject();
|
||||
}
|
||||
}
|
||||
|
||||
QStringList DataBase::getProjectWithinBase(const QString& baseModel)
|
||||
{
|
||||
QStringList lst;
|
||||
|
||||
QString strSQL = "SELECT model_name FROM diagramui_projectmodelsetting WHERE base_name = ?";
|
||||
QVariantList params;
|
||||
params.append(baseModel);
|
||||
|
||||
try
|
||||
{
|
||||
QSqlQuery query = executeSQL(strSQL,false,params);
|
||||
while (query.next())
|
||||
{
|
||||
QString name = query.value(0).toString();
|
||||
lst.append(name);
|
||||
}
|
||||
return lst;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
return lst;
|
||||
}
|
||||
}
|
||||
|
||||
bool DataBase::deleteProjectSetting(const QString& baseModel,const QString& modelName)
|
||||
{
|
||||
QString strSQL = "DELETE FROM diagramui_projectmodelsetting WHERE base_name = ? AND model_name = ?";
|
||||
QVariantList params;
|
||||
params.append(baseModel);
|
||||
params.append(modelName);
|
||||
|
||||
try
|
||||
{
|
||||
executeSQL(strSQL,false,params);
|
||||
LOG_INFO("DB", QString("Delete row %1 success").arg(modelName));
|
||||
return true;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
LOG_ERROR("DB", QString("Delete row %1 failed").arg(modelName));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool DataBase::createProjectManager()
|
||||
{
|
||||
QString strSQL = R"(
|
||||
|
|
|
|||
|
|
@ -27,30 +27,28 @@ void ProjectModelManager::initialModel()
|
|||
if(_bInitialised)
|
||||
return;
|
||||
QStringList lstModel = getModelList();
|
||||
for(auto &model:lstModel)
|
||||
for(auto &sModel:lstModel)
|
||||
{
|
||||
MapProject mp;
|
||||
QMap<QString,int> mapProject = DataBase::GetInstance()->getProjectFromManager(model);
|
||||
QMap<QString,int> mapProject = DataBase::GetInstance()->getProjectFromManager(sModel);
|
||||
|
||||
|
||||
QMap<QString,int>::Iterator iter;
|
||||
for(iter = mapProject.begin();iter != mapProject.end(); ++iter)
|
||||
{
|
||||
//QStandardItem* propertyItem = new QStandardItem(iter.key());
|
||||
|
||||
PropertyModel pm;
|
||||
pm.pBase = new QStandardItemModel(this);
|
||||
pm.pSelect = new QStandardItemModel(this);
|
||||
pm.mapProperty = addNewProject(model,iter.key(),pm);
|
||||
pm.mapProperty = addNewProject(sModel,iter.key(),pm);
|
||||
pm.nType = iter.value();
|
||||
pm.formerMeta.sName = model;
|
||||
pm.formerMeta.sName = sModel;
|
||||
pm.formerProject.sName = iter.key();
|
||||
pm.dataInfo = DataBase::GetInstance()->getProjectModelGroupInfo(iter.key());
|
||||
pm.modelSetting = getModelSetting(sModel,iter.key());
|
||||
mp.insert(iter.key(),pm);
|
||||
}
|
||||
|
||||
//todo:读取存储,按分类遍历名称
|
||||
m_mapTotalData.insert(model,mp);
|
||||
m_mapTotalData.insert(sModel,mp);
|
||||
}
|
||||
|
||||
_bInitialised = true;
|
||||
|
|
@ -266,6 +264,42 @@ void ProjectModelManager::deleteData(const QString& sMeta,const QString& sProjec
|
|||
m_mapTotalData[sMeta].remove(sProject);
|
||||
}
|
||||
|
||||
void ProjectModelManager::updateSetting(const QString& sMeta,const QString& sProject)
|
||||
{
|
||||
QJsonObject object;
|
||||
QJsonArray arr;
|
||||
QMap<QString,QByteArray> mapSvg = m_mapTotalData[sMeta][sProject].modelSetting.mapSvg;
|
||||
|
||||
for(auto iter = mapSvg.begin();iter != mapSvg.end();++iter)
|
||||
{
|
||||
QJsonObject obj;
|
||||
obj["name"] = iter.key();
|
||||
obj["data"] = QString::fromUtf8(iter.value());
|
||||
arr.push_back(obj);
|
||||
}
|
||||
object["picture"] = arr;
|
||||
|
||||
QJsonObject jsVal = DataBase::GetInstance()->getProjectSetting(sMeta,sProject);
|
||||
if(jsVal.empty()){
|
||||
DataBase::GetInstance()->insertProjectSetting(sMeta,sProject,object);
|
||||
}
|
||||
else{
|
||||
DataBase::GetInstance()->updateProjectSetting(sMeta,sProject,object);
|
||||
}
|
||||
}
|
||||
|
||||
QStringList ProjectModelManager::getProjectModelLst(const QString& sMeta)
|
||||
{
|
||||
//return DataBase::GetInstance()->getProjectWithinBase(sMeta);
|
||||
QStringList lst;
|
||||
QMap<QString,PropertyModel> mapPro = m_mapTotalData.value(sMeta);
|
||||
for(auto it = mapPro.begin();it != mapPro.end();++it)
|
||||
{
|
||||
lst.append(it.key());
|
||||
}
|
||||
return lst;
|
||||
}
|
||||
|
||||
QStringList ProjectModelManager::getModelList() const
|
||||
{
|
||||
QMap<int,modelType> modelMap = DataBase::GetInstance()->ModelType();
|
||||
|
|
@ -588,7 +622,7 @@ QString ProjectModelManager::modifyProjectModel(const QString& sMeta,const QStri
|
|||
}
|
||||
}
|
||||
else{ //非空且库模型中不存在,新增
|
||||
bool res = createPropertyTable(sMeta,sProject,iter.key(),lstSelected,lstBase,nType);
|
||||
bool res = createPropertyTable(sMeta,sProject,iter.key(),lstSelected,lstBase,iter->isPublic);
|
||||
if(res)
|
||||
{
|
||||
sRes = QString::fromWCharArray(L"修改模型成功");
|
||||
|
|
@ -681,14 +715,8 @@ int ProjectModelManager::createPropertyTable(const QString& sMeta,const QString&
|
|||
if(!DataBase::GetInstance()->ifDynamicTableExist(sName))
|
||||
{
|
||||
bool val = DataBase::GetInstance()->createDynamicTable(sName,fields);
|
||||
if(val)
|
||||
{
|
||||
DataBase::GetInstance()->insertProjectManager(sName,sName,"NULL",sGroup,0,objState,true);
|
||||
return int(AlertInfo::success);
|
||||
}
|
||||
else {
|
||||
return int(AlertInfo::fail);
|
||||
}
|
||||
DataBase::GetInstance()->insertProjectManager(sName,sName,"NULL",sGroup,0,objState,true);
|
||||
return val;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -776,3 +804,19 @@ QString ProjectModelManager::getItemDataType(const QStandardItem* pItem)
|
|||
}
|
||||
return dataTypePart;
|
||||
}
|
||||
|
||||
projectModelSetting ProjectModelManager::getModelSetting(const QString& sMeta,const QString& sProject)
|
||||
{
|
||||
projectModelSetting setting;
|
||||
setting.modelName = sProject;
|
||||
QJsonObject obj = DataBase::GetInstance()->getProjectSetting(sMeta,sProject);
|
||||
QJsonArray arr = obj["picture"].toArray();
|
||||
for (QJsonValueRef jsonObj : arr)
|
||||
{
|
||||
QJsonObject node = jsonObj.toObject();
|
||||
QString sName = node["name"].toString();
|
||||
QByteArray bData = QByteArray::fromHex(node["data"].toString().toUtf8());
|
||||
setting.mapSvg.insert(sName,bData);
|
||||
}
|
||||
return setting;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -687,8 +687,8 @@ void projectModelDlg::onDelegateFinishEdit(const QModelIndex &index, const QStri
|
|||
}
|
||||
else //新建
|
||||
{
|
||||
_curModel.mapProperty = ProjectModelManager::instance().addNewProject(value,_curProject,_curModel);
|
||||
ProjectModelManager::instance().getData()[value].insert(_curProject,_curModel);
|
||||
_curModel.mapProperty = ProjectModelManager::instance().addNewProject(value,_curProject,_curModel); //新建(不添加到队列
|
||||
ProjectModelManager::instance().getData()[value].insert(_curProject,_curModel); //添加
|
||||
|
||||
ui->treeView_base->setModel(nullptr);
|
||||
ui->treeView_sub->setModel(nullptr);
|
||||
|
|
|
|||
Loading…
Reference in New Issue