add editor save/load
This commit is contained in:
parent
1edfb1cb3d
commit
3a369e0b97
|
|
@ -427,14 +427,14 @@ struct DiagramEditorWizardBusInfo //组态编辑母线信息
|
|||
int nNum1 = 0; //1母
|
||||
int nNum2 = 0; //2母
|
||||
int connectType = 0; //接线方式,1为分段连接
|
||||
bool bChanged = false; //是否改变
|
||||
int nState = 0; //母线状态位 0已保存1新建2修改
|
||||
|
||||
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorWizardBusInfo &data) {
|
||||
out << data.nIndex << data.dVoltage << data.nLineType << data.nNum1 << data.nNum2 << data.connectType << data.bChanged;
|
||||
out << data.nIndex << data.dVoltage << data.nLineType << data.nNum1 << data.nNum2 << data.connectType << data.nState;
|
||||
return out;
|
||||
}
|
||||
friend QDataStream &operator>>(QDataStream &in, DiagramEditorWizardBusInfo &data) {
|
||||
in >> data.nIndex >> data.dVoltage >> data.nLineType >> data.nNum1 >> data.nNum2 >> data.connectType >> data.bChanged;
|
||||
in >> data.nIndex >> data.dVoltage >> data.nLineType >> data.nNum1 >> data.nNum2 >> data.connectType >> data.nState;
|
||||
return in;
|
||||
}
|
||||
};
|
||||
|
|
@ -921,7 +921,17 @@ struct editorProjectInfo //editor工程数据
|
|||
QUuid uuid;
|
||||
QString name;
|
||||
QString tag;
|
||||
QByteArray context;
|
||||
};
|
||||
|
||||
struct editorBaseSettingInfo //editor基础设置
|
||||
{
|
||||
int id = 0;
|
||||
QUuid uuid;
|
||||
QString projectName; //所属工程名
|
||||
QString autor; //作者
|
||||
QByteArray context; //内容
|
||||
QUuid generateUid; //生成的图uuid
|
||||
QString ts; //时间戳
|
||||
};
|
||||
|
||||
//==================================================
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ public slots:
|
|||
void onSignal_deletePage();
|
||||
|
||||
void onSignal_activatePage(const QString& name);
|
||||
void onSignal_panelDelete(const QString& name);
|
||||
void onSignal_panelDelete(const QString& name,int nType); //type:0editorPanel,1drawPanel
|
||||
|
||||
void onSignal_createEntity(EntityInfo);
|
||||
void onSignal_changeEntity(EntityInfo);
|
||||
|
|
@ -55,10 +55,13 @@ public slots:
|
|||
void onCreateTestBaseModelDiagram(); //生成测试基模图
|
||||
/******************************生成组态***********************************/
|
||||
void onSignal_createEditPanel(QString,QUuid);
|
||||
void onSignal_prepareOpenSetting(QString);
|
||||
void onSignal_prepareSaveEdit(QString);
|
||||
void onSignal_prepareDeleteEditor(const QString&,QUuid);
|
||||
EditPanel* onSignal_addEditPanel(QString);
|
||||
void onSignal_addEditWizard(QString,QUuid);
|
||||
void onSignal_addEditWizard(QString,QUuid,bool val = true); //bool:是否显示wizard
|
||||
void onSignal_wizardFinished(QString,QMap<QUuid,GraphicsBaseModelItem*>,QList<EditBaseItem*>);
|
||||
void onSignal_unloadProject(const QString&);
|
||||
/*********************************间隔**************************************/
|
||||
void onSignl_openCurrentBay();
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ public:
|
|||
void setMaxDownH(double d){dMaxDownH = d;}
|
||||
double getMaxDownH() {return dMaxDownH;}
|
||||
QMap<int,QList<DiagramEditorBlockInfo>> getMapBlocksData(); //返回mapBlock中的数据
|
||||
void clearData();
|
||||
private:
|
||||
|
||||
QMap<int,QList<DiagramEditorBaseBlock*>> _mapBlocks; //容器中包含的对象列表,<pos,listBlocks> pos当前容器中的位置:0上,1中上,2中下,3下
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ public:
|
|||
int getContainerIndex(int nLevel,DiagramEditorStructContainer*); //返回目标层级container的序号
|
||||
QUuid addConnection(const QString& str1,const QString& str2,int nType1,int nType2,int nPara = 0); //插入连接
|
||||
QMap<QUuid,DiagramEditorBriefConnect>& getConnection() {return _mapConnect;}
|
||||
QList<QUuid> findConnectionByBlock(QString,int); //通过block找到连接
|
||||
void removeConnection(QUuid);
|
||||
DiagramEditorProjectInfo getCurPara(); //获取当前的向导设置参数(同步数据到projectManager)
|
||||
void setPara(DiagramEditorProjectInfo); //使用load数据初始化
|
||||
|
|
@ -69,6 +70,11 @@ private:
|
|||
void generateBayStruct(); //根据bus设置生成bay结构
|
||||
void addTransformer(DiagramEditorWizardTransformerInfo); //界面上添加变压器
|
||||
template <typename T> void reindexQMap(QMap<int, T> &map); //重新排序函数
|
||||
void clearTargetLevelContent(int); //清除目标层的数据
|
||||
|
||||
void resetBusByData(); //根据数据设置bus界面
|
||||
void resetBayByData();
|
||||
void resetTransByData();
|
||||
private:
|
||||
Ui::diagramEditorWizard *ui;
|
||||
BiDirectionalMap<int,QString> _divideType; //划分段数名对照
|
||||
|
|
@ -78,7 +84,6 @@ private:
|
|||
QMap<int,DiagramEditorWizardBusInfo> _mapBus; //母线信息
|
||||
QMap<int,QList<DiagramEditorStructContainer*>> _mapSturctContainer; //划分后的区块
|
||||
QMap<QUuid,DiagramEditorBriefConnect> _mapConnect; //连接列表
|
||||
bool _busPageChanged; //母线页改变
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -34,7 +34,8 @@ public:
|
|||
void initByWizardInfo();
|
||||
void initBlockConnection(); //初始化block之间的连接信息
|
||||
void showPreview(); //展示预览
|
||||
void showConfirmDlg(); //展示确认对话框
|
||||
void showConfirmDlg(); //展示确认对话框 bool:保存后是否生成
|
||||
void generate();
|
||||
void showWizard();
|
||||
|
||||
DiagramEditorModel* getModel() {return _pModel;}
|
||||
|
|
@ -46,10 +47,12 @@ public:
|
|||
void setUuid(QUuid uid) {_uid = uid;}
|
||||
QUuid getUuid() {return _uid;}
|
||||
void setCavas(QPointer<DiagramCavas> p){_pCavas = p;}
|
||||
void setTag(const QString& s){_tagName = s;}
|
||||
QString getTag(){return _tagName;}
|
||||
QPointer<DiagramCavas> getCavas(){return _pCavas;}
|
||||
|
||||
void prepareSaveEditor(); //准备保存
|
||||
void loadEditor(const QString&);
|
||||
void loadBaseSetting(QUuid);
|
||||
public slots:
|
||||
void onWidthChanged(int width);
|
||||
void onContainerSizeChanged(EditContainerItem*); //容器大小改变时调整内部大小
|
||||
|
|
@ -59,6 +62,10 @@ private:
|
|||
void calculateContainerWidth(EditContainerItem*); //根据间隔数量计算容器宽度 todo:区分上下间隔
|
||||
int getContainerBusType(QMap<int,QList<DiagramEditorBaseBlock*>>); //返回容器中母线类型(单双)
|
||||
EditBaseItem* getItemByName(const QString&); //根据名称获取指定item
|
||||
signals:
|
||||
void panelDelete(const QString&,int);
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *closeEvent);
|
||||
private:
|
||||
EditView* m_pEditView;
|
||||
EditScene* m_pEditScene;
|
||||
|
|
@ -75,8 +82,11 @@ private:
|
|||
DiagramEditorModel* _pModel;
|
||||
DiagramEditorPreviewDlg* _pPreview;
|
||||
ConfirmEditorDlg* _confirmEditor;
|
||||
QString _tagName; //显示的名称(load后,新建不用)
|
||||
QString _projectName;
|
||||
QUuid _uid;
|
||||
QString _author;
|
||||
QString _timeStamp;
|
||||
DiagramEditorWizard* _pEditorWizard;
|
||||
QPointer<DiagramCavas> _pCavas; //顶层界面容器
|
||||
};
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ public:
|
|||
DesignerScene* getScene() {return m_pGraphicsScene;}
|
||||
DesignerView* getView() {return m_pGraphicsView;}
|
||||
signals:
|
||||
void panelDelete(const QString&);
|
||||
void panelDelete(const QString&,int);
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *closeEvent);
|
||||
public slots:
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ public:
|
|||
EditPanel* getPanel(){return _pPanel;}
|
||||
void setWizard(QPointer<DiagramEditorWizard> p){_pWizard = p;}
|
||||
QMap<QUuid,GraphicsBaseModelItem*> getPreviewItem(){return _previewItem;};
|
||||
void clearItems(){_previewItem.clear();}
|
||||
|
||||
void generatePreview(); //生成预览
|
||||
void calculateBlockPos(); //重新计算block位置
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ void DiagramCavas::initial()
|
|||
{
|
||||
//todo:读取数据并初始化
|
||||
QList<pageInfo> lst = DataBase::GetInstance()->getAllPage();
|
||||
for(auto info:lst)
|
||||
for(auto &info:lst)
|
||||
{
|
||||
TopologyManager::instance().createDiagram(QString::number(info.id),info.name);
|
||||
}
|
||||
|
|
@ -179,8 +179,8 @@ void DiagramCavas::onSignal_loadEdit(const QString& sProject,QUuid uid)
|
|||
if(!m_mapEditPanel.contains(sProject))
|
||||
{
|
||||
//todo:加载数据
|
||||
onSignal_addEditWizard(sProject,uid);
|
||||
m_mapEditPanel[sProject].first->loadEditor(sProject);
|
||||
onSignal_addEditWizard(sProject,uid,false);
|
||||
m_mapEditPanel[sProject].first->loadBaseSetting(uid);
|
||||
}
|
||||
else //已存在
|
||||
{
|
||||
|
|
@ -219,15 +219,23 @@ void DiagramCavas::onSignal_activatePage(const QString& name)
|
|||
_curPage = name;
|
||||
}
|
||||
|
||||
void DiagramCavas::onSignal_panelDelete(const QString& name)
|
||||
void DiagramCavas::onSignal_panelDelete(const QString& name,int nType)
|
||||
{
|
||||
if(nType == 0){
|
||||
EditPanel* pPanel = m_mapEditPanel.take(name).first;
|
||||
BasePropertyManager::instance().clearEditorData(); //关闭前清空当前单例 todo:测试其他单例
|
||||
this->removeSubWindow(pPanel);
|
||||
delete pPanel;
|
||||
}
|
||||
else if(nType == 1){
|
||||
DrawingPanel* pPanel = m_mapDrawPanel.take(name).first;
|
||||
if(m_mapDrawPanel.isEmpty())
|
||||
{
|
||||
//FixedPortsModel::_dataInitialised = false;
|
||||
|
||||
}
|
||||
this->removeSubWindow(pPanel);
|
||||
delete pPanel;
|
||||
}
|
||||
}
|
||||
|
||||
void DiagramCavas::onSignal_createEntity(EntityInfo info)
|
||||
|
|
@ -391,21 +399,43 @@ void DiagramCavas::onSignal_createEditPanel(QString sName,QUuid uid)
|
|||
onSignal_addEditWizard(sName,uid);
|
||||
}
|
||||
|
||||
void DiagramCavas::onSignal_prepareSaveEdit(QString sProject)
|
||||
void DiagramCavas::onSignal_prepareOpenSetting(QString sProject)
|
||||
{
|
||||
EditPanel* pPanel = getEditPanel(sProject);
|
||||
if(pPanel){
|
||||
pPanel->showWizard();
|
||||
}
|
||||
}
|
||||
|
||||
void DiagramCavas::onSignal_prepareSaveEdit(QString sProject)
|
||||
{
|
||||
QString sName = sProject;
|
||||
if(sProject == "currentPage"){
|
||||
sName = _curPage;
|
||||
}
|
||||
EditPanel* pPanel = getEditPanel(sName);
|
||||
if(pPanel){
|
||||
pPanel->prepareSaveEditor();
|
||||
}
|
||||
}
|
||||
|
||||
void DiagramCavas::onSignal_prepareDeleteEditor(const QString& sProject,QUuid uid)
|
||||
{
|
||||
EditPanel* pPanel = getEditPanel(sProject);
|
||||
if(pPanel){
|
||||
pPanel->close();
|
||||
}
|
||||
}
|
||||
|
||||
EditPanel* DiagramCavas::onSignal_addEditPanel(QString sName)
|
||||
{
|
||||
EditPanel* pPanel = new EditPanel(this);
|
||||
pPanel->setProjectName(sName);
|
||||
pPanel->setTag(sName);
|
||||
_curPage = sName;
|
||||
pPanel->setWindowTitle(_curPage);
|
||||
pPanel->setCavas(this);
|
||||
connect(pPanel,&EditPanel::panelDelete,this,&DiagramCavas::onSignal_panelDelete);
|
||||
|
||||
QMdiSubWindow* pSub = this->addSubWindow(pPanel);
|
||||
m_mapEditPanel.insert(_curPage,qMakePair(pPanel,pSub));
|
||||
|
|
@ -413,10 +443,11 @@ EditPanel* DiagramCavas::onSignal_addEditPanel(QString sName)
|
|||
return pPanel;
|
||||
}
|
||||
|
||||
void DiagramCavas::onSignal_addEditWizard(QString name,QUuid uid)
|
||||
void DiagramCavas::onSignal_addEditWizard(QString name,QUuid uid,bool val)
|
||||
{
|
||||
EditPanel* pPanel = onSignal_addEditPanel(name);
|
||||
pPanel->setUuid(uid);
|
||||
if(val)
|
||||
pPanel->showWizard();
|
||||
}
|
||||
|
||||
|
|
@ -438,6 +469,18 @@ void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBase
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DiagramCavas::onSignal_unloadProject(const QString& sName)
|
||||
{
|
||||
BasePropertyManager::instance().clearEditorData();
|
||||
|
||||
for(auto &pair:m_mapEditPanel){
|
||||
EditPanel* pPanel = pair.first;
|
||||
this->removeSubWindow(pPanel);
|
||||
delete pPanel;
|
||||
}
|
||||
m_mapEditPanel.clear();
|
||||
}
|
||||
/*******************bay************************/
|
||||
void DiagramCavas::onSignl_openCurrentBay()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ void ConfirmEditorDlg::onOkClicked()
|
|||
QDateTime currentDateTime = QDateTime::currentDateTime();
|
||||
|
||||
// 将日期和时间格式化为字符串
|
||||
QString dateTimeString = currentDateTime.toString("yyyy-MM-dd hh:mm:ss");
|
||||
QString dateTimeString = currentDateTime.toString("yyyy-MM-dd_hh:mm:ss");
|
||||
|
||||
emit onConfirmEditor(ui->le_name->text(),dateTimeString);
|
||||
hide();
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ void DiagramEditorBayDetailAddDlg::showDlg()
|
|||
for(int i = 0;i < nCount;++i){
|
||||
QStandardItem *itemRouteName = pRoute->item(i, 0);
|
||||
int nMain = itemRouteName->data().toInt();
|
||||
if(nMain == 1){ //主线已存在
|
||||
if(nMain == 1){ //主线已存在,新路线(本路线)设置为支线
|
||||
ui->cb_lineType->setCurrentIndex(1);
|
||||
}
|
||||
}
|
||||
|
|
@ -153,6 +153,9 @@ void DiagramEditorBayDetailAddDlg::showDlg()
|
|||
void DiagramEditorBayDetailAddDlg::showDlg(DiagramEditorRouteInfo info)
|
||||
{
|
||||
if(_pParent){
|
||||
auto pCompo = _pParent->getComponentModel();
|
||||
auto pRoute = _pParent->getRouteModel();
|
||||
ui->tableView_items->setModel(pCompo);
|
||||
_selectedModel->clear();
|
||||
_selectedModel->setHorizontalHeaderLabels({"分类", "名称", "类型", "关联对象", "引用线路"});
|
||||
ui->le_routeName->setText(info.sRouteName);
|
||||
|
|
@ -233,20 +236,18 @@ void DiagramEditorBayDetailAddDlg::showDlg(DiagramEditorRouteInfo info)
|
|||
_curMode = 1;
|
||||
updateBindLst();
|
||||
|
||||
auto pRoute = _pParent->getRouteModel();
|
||||
int nCount = pRoute->rowCount();
|
||||
for(int i = 0;i < nCount;++i){
|
||||
QStandardItem *itemRouteName = pRoute->item(i, 0);
|
||||
if(itemRouteName->text() == info.sRouteName){
|
||||
int nMain = itemRouteName->data().toInt();
|
||||
if(nMain == 1){ //读取并设置是否主线
|
||||
ui->cb_lineType->setCurrentIndex(1);
|
||||
}
|
||||
else{
|
||||
ui->cb_lineType->setCurrentIndex(0);
|
||||
}
|
||||
else{
|
||||
ui->cb_lineType->setCurrentIndex(1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -175,6 +175,7 @@ void DiagramEditorBayDetailSettingDlg::refreshModel()
|
|||
QStandardItem *itemComponents = new QStandardItem();
|
||||
|
||||
itemRoute->setText(sRoute);
|
||||
itemRoute->setData(route.bMainRoute);
|
||||
itemComponents->setText(lstComp.join(","));
|
||||
QList<QStandardItem*> lstItems;
|
||||
lstItems<<itemRoute<<itemComponents;
|
||||
|
|
|
|||
|
|
@ -44,6 +44,8 @@ void DiagramEditorBaySettingDlg::showDlg(int nLevel,DiagramEditorBayBlock* p)
|
|||
show();
|
||||
addNewBay();
|
||||
if(_pWizard){
|
||||
int nType = int(p->getBayType());
|
||||
ui->cb_type->setCurrentIndex(nType);
|
||||
ui->le_name->setText(p->getName());
|
||||
ui->cb_level->setCurrentIndex(nLevel);
|
||||
if(p){
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ DiagramEditorStructContainer::DiagramEditorStructContainer(QObject *parent)
|
|||
}
|
||||
DiagramEditorStructContainer::~DiagramEditorStructContainer()
|
||||
{
|
||||
clearData();
|
||||
}
|
||||
|
||||
bool DiagramEditorStructContainer::insertBlock(int nPos,DiagramEditorBaseBlock* p)
|
||||
|
|
@ -38,3 +39,11 @@ QMap<int,QList<DiagramEditorBlockInfo>> DiagramEditorStructContainer::getMapBloc
|
|||
|
||||
return map;
|
||||
}
|
||||
|
||||
void DiagramEditorStructContainer::clearData()
|
||||
{
|
||||
for(auto &lstCon:_mapBlocks){
|
||||
qDeleteAll(lstCon);
|
||||
}
|
||||
_mapBlocks.clear();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#include <QMessageBox>
|
||||
#include <QUuid>
|
||||
#include <QtNumeric>
|
||||
#include <QComboBox>
|
||||
#include "diagramEditor/diagramEditorWizard.h"
|
||||
#include "diagramEditor/wizardBusTableDelegate.h"
|
||||
#include "ui_diagramEditorWizard.h"
|
||||
|
|
@ -18,7 +19,6 @@ DiagramEditorWizard::DiagramEditorWizard(QWidget *parent)
|
|||
,_transSettingDlg(nullptr)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
_busPageChanged = false;
|
||||
this->setWindowFlags(Qt::FramelessWindowHint | windowFlags());
|
||||
setStyleSheet("background-color: white;");
|
||||
initial();
|
||||
|
|
@ -83,6 +83,7 @@ void DiagramEditorWizard::initial()
|
|||
void DiagramEditorWizard::reOrderBus()
|
||||
{
|
||||
reindexQMap(_mapBus);
|
||||
//移动后结构只变序号(待测试)
|
||||
|
||||
for(int row = 0 ;row < ui->tableWidget_bus->rowCount();++row)
|
||||
{
|
||||
|
|
@ -96,12 +97,17 @@ void DiagramEditorWizard::generateBayStruct()
|
|||
{
|
||||
for(auto iter = _mapBus.begin();iter != _mapBus.end();++iter)
|
||||
{
|
||||
if(!iter->bChanged) //只生成修改过的程序
|
||||
if(iter->nState == 0) //只生成修改过的程序
|
||||
continue;
|
||||
iter->bChanged = false;
|
||||
if(iter->nState == 2){ //已修改
|
||||
clearTargetLevelContent(iter.key());
|
||||
}
|
||||
else if(iter->nState == 1){
|
||||
QListWidgetItem* item = new QListWidgetItem("第"+QString::number(iter->nIndex+1)+"层");
|
||||
item->setData(Qt::UserRole,iter->nIndex);
|
||||
ui->listWidget_bay->addItem(item);
|
||||
}
|
||||
iter->nState = 0;
|
||||
|
||||
QString sVoltage; //电压前缀
|
||||
sVoltage = QString::number(iter->dVoltage)+"kV";
|
||||
|
|
@ -229,13 +235,6 @@ void DiagramEditorWizard::flushTransPage()
|
|||
info.sName = pItem->getName();
|
||||
info.nType = pItem->getTransType();
|
||||
auto lstCon = pItem->getConnect(); //获取间隔所连对象的名称
|
||||
/*for(auto& conId:lstCon){
|
||||
if(_mapConnect.contains(conId)){
|
||||
auto con = _mapConnect.value(conId);
|
||||
QString sOpposite = con.getOppositeName(pItem->getName());
|
||||
info.lstBindObj.append(sOpposite);
|
||||
}
|
||||
}*/
|
||||
|
||||
for(auto& conId:lstCon){
|
||||
if(_mapConnect.contains(conId)){
|
||||
|
|
@ -298,6 +297,20 @@ QUuid DiagramEditorWizard::addConnection(const QString& str1,const QString& str2
|
|||
return con.uid;
|
||||
}
|
||||
|
||||
QList<QUuid> DiagramEditorWizard::findConnectionByBlock(QString sName,int nType)
|
||||
{
|
||||
QList<QUuid> lst;
|
||||
for(auto iter = _mapConnect.begin(); iter != _mapConnect.end();++iter){
|
||||
auto con = iter.value();
|
||||
if((con.con1.sName == sName && con.con1.nType == nType) || (con.con2.sName == sName && con.con2.nType == nType)){
|
||||
if(!lst.contains(con.uid))
|
||||
lst.append(con.uid);
|
||||
}
|
||||
}
|
||||
|
||||
return lst;
|
||||
}
|
||||
|
||||
void DiagramEditorWizard::removeConnection(QUuid uid)
|
||||
{
|
||||
_mapConnect.remove(uid);
|
||||
|
|
@ -336,14 +349,73 @@ DiagramEditorProjectInfo DiagramEditorWizard::getCurPara()
|
|||
void DiagramEditorWizard::setPara(DiagramEditorProjectInfo info)
|
||||
{
|
||||
_mapBus = info.mapBus;
|
||||
|
||||
_mapConnect = info.mapConnect;
|
||||
for(auto iter = info.mapSturctContainer.begin(); iter != info.mapSturctContainer.end();++iter){
|
||||
|
||||
QList<DiagramEditorStructContainer*> lstCon;
|
||||
for(auto &conInfo:iter.value()){
|
||||
for(int i = 0;i < iter.value().size();++i){
|
||||
auto conInfo = iter.value()[i];
|
||||
auto pContainer = new DiagramEditorStructContainer(this);
|
||||
pContainer->setId(conInfo.sId);
|
||||
|
||||
pContainer->setMidUpY(conInfo.dMidUpY);
|
||||
pContainer->setMidDownY(conInfo.dMidDownY);
|
||||
pContainer->setWidth(conInfo.dWidth);
|
||||
pContainer->setHeight(conInfo.dHeight);
|
||||
pContainer->setStartX(conInfo.dStartX);
|
||||
pContainer->setStartY(conInfo.dStartY);
|
||||
pContainer->setMaxUpH(conInfo.dMaxUpH);
|
||||
pContainer->setMaxDownH(conInfo.dMaxDownH);
|
||||
for(auto ite = conInfo.mapBlockInfo.begin(); ite != conInfo.mapBlockInfo.end();++ite){ //<位置0123,容器列表>
|
||||
for(auto &blockInfo:ite.value()){
|
||||
DiagramEditorBaseBlock* pBlock = nullptr;
|
||||
if(blockInfo.nType == 1){
|
||||
auto pBus = new DiagramEditorBusBlock(this);
|
||||
pBus->setId(blockInfo.uid);
|
||||
pBus->setType(blockInfo.nType);
|
||||
pBus->setBusPro(blockInfo.sName,1,blockInfo.fVoltage,blockInfo.nBusType,blockInfo.nIndex);
|
||||
pBlock = pBus;
|
||||
}
|
||||
else if(blockInfo.nType == 2){
|
||||
DiagramEditorBayBlock* pBay = new DiagramEditorBayBlock(this);
|
||||
pBay->setId(blockInfo.uid);
|
||||
pBay->setName(blockInfo.sName);
|
||||
pBay->setType(blockInfo.nType);
|
||||
pBay->setBayType(blockInfo.nBayType);
|
||||
for(auto& uid:blockInfo._lstCon){
|
||||
pBay->addConnect(uid);
|
||||
}
|
||||
pBay->setBayInfo(blockInfo.bayInfo);
|
||||
pBlock = pBay;
|
||||
}
|
||||
else if(blockInfo.nType == 3){
|
||||
auto pTrans = new DiagramEditorTransformerBlock(this);
|
||||
pTrans->setId(blockInfo.uid);
|
||||
pTrans->setName(blockInfo.sName);
|
||||
pTrans->setType(blockInfo.nType);
|
||||
pTrans->setTransType(blockInfo.nTransType);
|
||||
for(auto& uid:blockInfo._lstCon){
|
||||
pTrans->addConnect(uid);
|
||||
}
|
||||
pTrans->setTransInfo(blockInfo.transInfo);
|
||||
pBlock = pTrans;
|
||||
}
|
||||
if(pBlock){
|
||||
pBlock->setContainerLevel(blockInfo.nContainerLevel);
|
||||
pBlock->setRecSize(blockInfo.recSize);
|
||||
pBlock->setSeceneDelta(blockInfo.sceneDelta);
|
||||
pBlock->setEditState(blockInfo.bEditState);
|
||||
pContainer->insertBlock(ite.key(),pBlock);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_mapSturctContainer[iter.key()].insert(i,pContainer);
|
||||
}
|
||||
}
|
||||
resetBusByData();
|
||||
resetBayByData();
|
||||
resetTransByData();
|
||||
emit wizardFinish();
|
||||
}
|
||||
|
||||
void DiagramEditorWizard::addTransformer(DiagramEditorWizardTransformerInfo info)
|
||||
|
|
@ -397,6 +469,113 @@ template <typename T> void DiagramEditorWizard::reindexQMap(QMap<int, T> &map) {
|
|||
}
|
||||
}
|
||||
|
||||
void DiagramEditorWizard::clearTargetLevelContent(int nLevel)
|
||||
{
|
||||
if(_mapSturctContainer.contains(nLevel)){
|
||||
auto lstCon = _mapSturctContainer.take(nLevel);
|
||||
for(auto &pCon:lstCon){
|
||||
auto mapBlock = pCon->getBlockMap();
|
||||
for(auto &lstBlock:mapBlock){
|
||||
for(auto& pBlock:lstBlock){
|
||||
auto lst = findConnectionByBlock(pBlock->getName(),pBlock->getType()); //断开删除block相关的连接
|
||||
if(!lst.empty()){
|
||||
for(auto &uid:lst){
|
||||
removeConnection(uid);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
delete pCon;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DiagramEditorWizard::resetBusByData()
|
||||
{
|
||||
ui->tableWidget_bus->clearContents();
|
||||
ui->tableWidget_bus->setRowCount(0);
|
||||
|
||||
for(auto iter = _mapBus.begin();iter != _mapBus.end();++iter){
|
||||
int row = ui->tableWidget_bus->rowCount();
|
||||
ui->tableWidget_bus->insertRow(row);
|
||||
const DiagramEditorWizardBusInfo& data = iter.value();
|
||||
|
||||
QTableWidgetItem* pItem = new QTableWidgetItem("第"+QString::number(iter.key()+1)+"层");
|
||||
pItem->setData(Qt::UserRole,data.nIndex);
|
||||
ui->tableWidget_bus->setItem(iter.key(), 0, pItem);
|
||||
|
||||
QTableWidgetItem* pItemVoltage = new QTableWidgetItem(QString::number(data.dVoltage)+"KV");
|
||||
ui->tableWidget_bus->setItem(iter.key(), 1, pItemVoltage);
|
||||
|
||||
// 列2 - 单双母 (ComboBox)
|
||||
QString sLineType;
|
||||
if(data.nLineType == 1){
|
||||
sLineType = "单母线";
|
||||
}
|
||||
else if(data.nLineType == 2){
|
||||
sLineType = "双母线";
|
||||
}
|
||||
QTableWidgetItem* pItemLine = new QTableWidgetItem(sLineType);
|
||||
ui->tableWidget_bus->setItem(iter.key(), 2, pItemLine);
|
||||
|
||||
QString sDivide;
|
||||
QTableWidgetItem* pItemDivide = new QTableWidgetItem();
|
||||
if(data.nLineType == 1){
|
||||
QString sD1;
|
||||
if(data.nNum1 == 1)
|
||||
sD1 = "不分段";
|
||||
else
|
||||
sD1 = QString::number(data.nNum1);
|
||||
sDivide = "母线:"+sD1;
|
||||
}
|
||||
else if(data.nLineType == 2){
|
||||
QString sD1;
|
||||
if(data.nNum1 == 1)
|
||||
sD1 = "不分段";
|
||||
else
|
||||
sD1 = QString::number(data.nNum1);
|
||||
|
||||
QString sD2;
|
||||
if(data.nNum2 == 1)
|
||||
sD2 = "不分段";
|
||||
else
|
||||
sD2 = QString::number(data.nNum2);
|
||||
sDivide = "母线1:"+sD1+";"+"母线2:"+sD2;
|
||||
}
|
||||
pItemDivide->setText(sDivide);
|
||||
ui->tableWidget_bus->setItem(iter.key(), 3, pItemDivide);
|
||||
|
||||
// 列4 - 接线方式 (ComboBox)
|
||||
QString sConnectType;
|
||||
if(data.connectType == 1){
|
||||
sConnectType = "分段连接";
|
||||
}
|
||||
QTableWidgetItem* pItemConnect = new QTableWidgetItem(sConnectType);
|
||||
ui->tableWidget_bus->setItem(row, 4, pItemConnect);
|
||||
}
|
||||
}
|
||||
|
||||
void DiagramEditorWizard::resetBayByData()
|
||||
{
|
||||
if(_baySettingDlg == nullptr){
|
||||
_baySettingDlg = new DiagramEditorBaySettingDlg(this);
|
||||
_baySettingDlg->setParent(this);
|
||||
}
|
||||
ui->listWidget_bay->clear();
|
||||
for(auto iter = _mapBus.begin();iter != _mapBus.end();++iter)
|
||||
{
|
||||
iter->nState = 0;
|
||||
QListWidgetItem* item = new QListWidgetItem("第"+QString::number(iter->nIndex+1)+"层");
|
||||
item->setData(Qt::UserRole,iter->nIndex);
|
||||
ui->listWidget_bay->addItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
void DiagramEditorWizard::resetTransByData()
|
||||
{
|
||||
flushTransPage();
|
||||
}
|
||||
|
||||
void DiagramEditorWizard::onOkClicked()
|
||||
{
|
||||
emit wizardFinish();
|
||||
|
|
@ -476,7 +655,7 @@ void DiagramEditorWizard::onAddBusClicked()
|
|||
|
||||
DiagramEditorWizardBusInfo info;
|
||||
info.nIndex = row;
|
||||
info.bChanged = true;
|
||||
info.nState = 1; //新建
|
||||
_mapBus.insert(row,info);
|
||||
}
|
||||
|
||||
|
|
@ -486,7 +665,9 @@ void DiagramEditorWizard::onAddBayClicked()
|
|||
_baySettingDlg = new DiagramEditorBaySettingDlg(this);
|
||||
_baySettingDlg->setParent(this);
|
||||
}
|
||||
_baySettingDlg->showDlg(ui->listWidget_bay->currentItem()->data(Qt::UserRole).toInt());
|
||||
auto pItem = ui->listWidget_bay->currentItem();
|
||||
if(pItem)
|
||||
_baySettingDlg->showDlg(pItem->data(Qt::UserRole).toInt());
|
||||
}
|
||||
|
||||
void DiagramEditorWizard::onAddTransClicked()
|
||||
|
|
@ -601,7 +782,7 @@ void DiagramEditorWizard::onAddBayFinished(DiagramEditorWizardBayInfo info)
|
|||
}
|
||||
}
|
||||
}
|
||||
else if(info.nType == BayType::incomingBay || info.nType == BayType::ptBay){ //进线间隔和pt间隔在上边
|
||||
else if(info.nType == BayType::incomingBay || info.nType == BayType::ptBay || info.nType == BayType::busCouplerBay){ //进线间隔、母联间隔、pt间隔在上边
|
||||
auto pContainer = getContainerByBlock(curIndex,1,info.lstBindObj.first());
|
||||
pContainer->insertBlock(0,pBlock);
|
||||
}
|
||||
|
|
@ -644,7 +825,7 @@ void DiagramEditorWizard::onDelegateFinishEdit(const QModelIndex &index, const Q
|
|||
{
|
||||
int row = index.row();
|
||||
int col = index.column();
|
||||
if(_mapBus.contains(row)){
|
||||
if(_mapBus.contains(row)){ //todo:增加缓存,点击下页保存
|
||||
if(col == 1){
|
||||
_mapBus[row].dVoltage = value.toDouble();
|
||||
}
|
||||
|
|
@ -668,8 +849,7 @@ void DiagramEditorWizard::onDelegateFinishEdit(const QModelIndex &index, const Q
|
|||
else if(col == 4){
|
||||
_mapBus[row].connectType = value.toInt();
|
||||
}
|
||||
_busPageChanged = true;
|
||||
//qDebug() << row<<","<<col<<":"<<value;
|
||||
_mapBus[row].nState = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -700,6 +880,21 @@ void DiagramEditorWizard::onBusDeleteClicked()
|
|||
int nIndex = indexName.data(Qt::UserRole).toInt();
|
||||
if(_mapBus.contains(nIndex)){
|
||||
_mapBus.remove(nIndex);
|
||||
if(_mapSturctContainer.contains(nIndex)){ //如果删除行,同步删除该行关联的内容
|
||||
clearTargetLevelContent(nIndex);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < ui->listWidget_bay->count(); ++i) {
|
||||
QListWidgetItem *item = ui->listWidget_bay->item(i);
|
||||
// 处理每个项
|
||||
QString text = item->text();
|
||||
qDebug() << "Item" << i << ":" << text;
|
||||
int idx = item->data(Qt::UserRole).toInt();
|
||||
if(idx == nIndex){
|
||||
auto item = ui->listWidget_bay->takeItem(i);
|
||||
delete item;
|
||||
}
|
||||
}
|
||||
|
||||
int currentRow = ui->tableWidget_bus->currentRow();
|
||||
|
|
@ -851,6 +1046,7 @@ QList<DiagramEditorBaseBlock*> DiagramEditorWizard::getTargetLevelBlocks(int nL
|
|||
for(auto& container:iter.value())
|
||||
{
|
||||
auto mapBlock = container->getBlockMap();
|
||||
if(!mapBlock.isEmpty()){
|
||||
for(auto& lst:mapBlock)
|
||||
{
|
||||
for(auto& block:lst)
|
||||
|
|
@ -863,6 +1059,7 @@ QList<DiagramEditorBaseBlock*> DiagramEditorWizard::getTargetLevelBlocks(int nL
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return lstBlock;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,6 +60,17 @@ EditPanel::~EditPanel()
|
|||
|
||||
void EditPanel::initByWizardInfo()
|
||||
{
|
||||
if(!_lstData.empty()){
|
||||
_pModel->clearItems();
|
||||
m_pEditScene->clear();
|
||||
_lstData.clear();
|
||||
_mainWidget = new EditMainRect;
|
||||
_widgetLayout = new QGraphicsLinearLayout(Qt::Vertical);
|
||||
_widgetLayout->setSpacing(40);
|
||||
_mainWidget->setLayout(_widgetLayout);
|
||||
m_pEditScene->addItem(_mainWidget);
|
||||
_mainWidget->setGeometry(m_pEditScene->sceneRect());
|
||||
}
|
||||
auto& mapTotal = _pEditorWizard->getContainerStruct();
|
||||
for(auto iter = mapTotal.begin();iter != mapTotal.end();++iter){
|
||||
if(iter.key() == g_transformerLevel)
|
||||
|
|
@ -233,6 +244,8 @@ void EditPanel::initBlockConnection()
|
|||
int nPara = con.nPara;
|
||||
auto item1 = _pEditorWizard->getBlockByName_all(con.con1.sName);
|
||||
auto item2 = _pEditorWizard->getBlockByName_all(con.con2.sName);
|
||||
if(!item1 || !item2)
|
||||
continue;
|
||||
|
||||
auto con1 = _pEditorWizard->getContainerByBlock_all(con.con1.sName);
|
||||
auto con2 = _pEditorWizard->getContainerByBlock_all(con.con2.sName);
|
||||
|
|
@ -374,15 +387,20 @@ void EditPanel::showConfirmDlg()
|
|||
connect(_confirmEditor,&ConfirmEditorDlg::onConfirmEditor,this,[&](QString sAuthor,QString sTime){
|
||||
auto pCavas = getCavas();
|
||||
if(pCavas){
|
||||
|
||||
//QList<DiagramEditorBayBlock*> lstBocks;
|
||||
QList<EditBaseItem*> pBays = getBlockItems(EditorItemType::bay);
|
||||
|
||||
pCavas->onSignal_wizardFinished(_projectName,_pModel->getPreviewItem(),pBays);
|
||||
QByteArray btWizard = _pModel->getWizardInfo();
|
||||
setWindowTitle(sTime);
|
||||
ProjectManager::instance().saveEditorDataToDB(_uid,_projectName,_projectName,btWizard,sAuthor,sTime);
|
||||
}
|
||||
});
|
||||
}
|
||||
_confirmEditor->show();
|
||||
_confirmEditor->showDlg(_author,_timeStamp);
|
||||
}
|
||||
|
||||
void EditPanel::generate()
|
||||
{
|
||||
auto pCavas = getCavas();
|
||||
QList<EditBaseItem*> pBays = getBlockItems(EditorItemType::bay);
|
||||
pCavas->onSignal_wizardFinished(_projectName,_pModel->getPreviewItem(),pBays);
|
||||
}
|
||||
|
||||
void EditPanel::showWizard()
|
||||
|
|
@ -558,18 +576,26 @@ EditBaseItem* EditPanel::getItemByName(const QString& sName)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
void EditPanel::closeEvent(QCloseEvent *closeEvent)
|
||||
{
|
||||
emit panelDelete(_tagName,0);
|
||||
}
|
||||
|
||||
void EditPanel::prepareSaveEditor()
|
||||
{
|
||||
if(_pModel){
|
||||
QByteArray btWizard = _pModel->getWizardInfo();
|
||||
ProjectManager::instance().saveEditorDataToDB(_uid,_projectName,_projectName,btWizard);
|
||||
showConfirmDlg();
|
||||
}
|
||||
}
|
||||
|
||||
void EditPanel::loadEditor(const QString& str)
|
||||
void EditPanel::loadBaseSetting(QUuid uid)
|
||||
{
|
||||
QByteArray byte = ProjectManager::instance().getEditorDataByName(str);
|
||||
auto info = ProjectManager::instance().getBaseSetting(uid);
|
||||
if(_pModel){
|
||||
_pModel->setWizardInfo(byte);
|
||||
_author = info.autor;
|
||||
_timeStamp = info.ts;
|
||||
_tagName = _projectName; //将临时名称保存到变量
|
||||
_projectName = info.projectName;
|
||||
_pModel->setWizardInfo(info.context);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ void EditScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
|
|||
QMenu menu;
|
||||
QAction *previewAction = menu.addAction("预览");
|
||||
QAction *generateAction = menu.addAction("生成");
|
||||
QAction *setting = menu.addAction("打开设置");
|
||||
QAction *selectedAction = menu.exec(event->screenPos());
|
||||
if (selectedAction == previewAction) {
|
||||
if(_pModel){
|
||||
|
|
@ -40,7 +41,9 @@ void EditScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
|
|||
_pModel->refreshConnection();
|
||||
}
|
||||
} else if (selectedAction == generateAction) {
|
||||
_pModel->getPanel()->showConfirmDlg();
|
||||
_pModel->getPanel()->generate();
|
||||
}else if (selectedAction == setting) {
|
||||
_pModel->getPanel()->showWizard();
|
||||
}
|
||||
}
|
||||
/************************预览*********************/
|
||||
|
|
|
|||
|
|
@ -164,8 +164,11 @@ void WizardBayContentDlg::onModifyClicked()
|
|||
DiagramEditorBaseBlock* pBlock = _pWizard->getBlockByName(_curLevel,2,sName);
|
||||
if(pBlock){
|
||||
auto pBay = dynamic_cast<DiagramEditorBayBlock*>(pBlock);
|
||||
if(pBay)
|
||||
_pWizard->getBaySettingDlg()->showDlg(_curLevel,pBay);
|
||||
if(pBay){
|
||||
auto pDlg = _pWizard->getBaySettingDlg();
|
||||
if(pDlg)
|
||||
pDlg->showDlg(_curLevel,pBay);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,23 +49,6 @@ QWidget* WizardBusTableDelegate::createEditor(QWidget* parent, const QStyleOptio
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
/*bool ProjectTableDelegate::eventFilter(QObject* obj, QEvent* event)
|
||||
{
|
||||
if (event->type() == QEvent::KeyPress) {
|
||||
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
|
||||
if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter) {
|
||||
QLineEdit* editor = qobject_cast<QLineEdit*>(obj);
|
||||
if (editor) {
|
||||
emit yourCustomSignal(editor->text());
|
||||
commitData(editor); // 显式提交数据
|
||||
closeEditor(editor); // 关闭编辑器
|
||||
return true; // 阻止事件继续传播
|
||||
}
|
||||
}
|
||||
}
|
||||
return QStyledItemDelegate::eventFilter(obj, event);
|
||||
}*/
|
||||
|
||||
void WizardBusTableDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
|
||||
{
|
||||
if(index.column() == 1 || index.column() == 2 || index.column() == 4)
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ void DrawingPanel::closeEvent(QCloseEvent *closeEvent)
|
|||
break;
|
||||
}
|
||||
}
|
||||
emit panelDelete(_name);
|
||||
emit panelDelete(_name,1);
|
||||
}
|
||||
else if(getMode() == DM_baseModel)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ font: 12pt "Microsoft YaHei UI";</string>
|
|||
<string notr="true">color: rgb(0, 0, 0);</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>生成接线</string>
|
||||
<string>保存拓扑</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
@ -152,7 +152,7 @@ font: 12pt "Microsoft YaHei UI";</string>
|
|||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>上次修改:</string>
|
||||
<string>归档时间:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ public:
|
|||
DiagramEditorItemProperty* findEditorData(QUuid);
|
||||
void deleteEditorData(QUuid);
|
||||
QMap<QUuid,DiagramEditorItemProperty*> getEditorData() const;
|
||||
void clearEditorData();
|
||||
signals:
|
||||
void dataCreated(QString uuid);
|
||||
void dataChanged(QString uuid);
|
||||
|
|
|
|||
|
|
@ -135,12 +135,18 @@ public:
|
|||
|
||||
public:
|
||||
/***********************************editor编辑器**********************************************/
|
||||
bool insertEditorProject(QUuid,QString,QString,QByteArray);
|
||||
bool updateEditorProject(QString name,QByteArray context);
|
||||
QByteArray getEditorProjectByName(QString name);
|
||||
bool insertEditorProject(QUuid,QString,QString);
|
||||
QList<editorProjectInfo> getAllEditorProject();
|
||||
bool deleteEditorProject(QString);
|
||||
bool ifEditorProjectExist(QString name);
|
||||
/***********************************baseSetting**********************************************/
|
||||
bool insertBaseSetting(QUuid,QString,QString,QByteArray,QUuid,QString ts);
|
||||
bool updateBaseSetting(QUuid,QByteArray context,QString ts);
|
||||
QByteArray getBaseSettingByUid(QUuid);
|
||||
editorBaseSettingInfo getBaseSettingInfo(QUuid);
|
||||
QList<editorBaseSettingInfo> getAllBaseSetting();
|
||||
bool deleteBaseSetting(QUuid);
|
||||
bool ifBaseSettingExist(QUuid);
|
||||
private:
|
||||
QMap<int,attributeGroup> _attributeGroup; //属性组的组
|
||||
QMap<int,dataType> _dataType; //数据类型组
|
||||
|
|
|
|||
|
|
@ -16,17 +16,28 @@ public:
|
|||
~ProjectManager();
|
||||
static ProjectManager& instance();
|
||||
|
||||
void saveEditorDataToDB(QUuid,const QString&,const QString&,QByteArray);
|
||||
QByteArray getEditorDataByName(const QString&);
|
||||
void saveEditorDataToDB(QUuid,const QString&,const QString&,QByteArray,QString autor,QString sTime);
|
||||
QByteArray getEditorBaseSettingByUid(QUuid);
|
||||
|
||||
void createEditor(const QString&);
|
||||
bool createEditorProject(const QString&); //创建项目
|
||||
void unloadEditorProject(const QString&); //卸载项目
|
||||
|
||||
void openSetting(const QString&);
|
||||
void saveEditor(const QString&);
|
||||
bool deleteEditor(const QString&,QUuid); //删除当前版本
|
||||
|
||||
void loadBaseSetting(const QString& str,QUuid id); //加载wizard与基模拓扑设置
|
||||
|
||||
QList<editorBaseSettingInfo> getBaseSettingsByProject(const QString&); //获取工程名对应的设置列表
|
||||
editorBaseSettingInfo getBaseSetting(QUuid); //获取设置
|
||||
signals:
|
||||
void prepareUnloadProject(const QString&);
|
||||
void prepareOpenSetting(const QString& str);
|
||||
void createNewEditor(const QString& str,QUuid id);
|
||||
void editorSaved(const QString& str,QUuid uid);
|
||||
void editorSaved(const QString& strPro,const QString& autor,QUuid uid,QString sTime);
|
||||
|
||||
void prepareSaveEditor(QString);
|
||||
private:
|
||||
QMap<QString,DiagramEditorProjectInfo> _wizardInfo;
|
||||
void prepareLoadBaseSetting(const QString& str,QUuid id);
|
||||
void prepareDeleteBaseSetting(const QString& str,QUuid id);
|
||||
};
|
||||
#endif // PROJECTMANAGER_H
|
||||
|
|
|
|||
|
|
@ -166,3 +166,11 @@ QMap<QUuid,DiagramEditorItemProperty*> BasePropertyManager::getEditorData() cons
|
|||
{
|
||||
return m_editorData;
|
||||
}
|
||||
|
||||
void BasePropertyManager::clearEditorData()
|
||||
{
|
||||
for(auto &pPro:m_editorData){
|
||||
delete pPro;
|
||||
}
|
||||
m_editorData.clear();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2846,15 +2846,14 @@ QStringList DataBase::ifModelOccupy(const QString& sName)
|
|||
}
|
||||
}
|
||||
|
||||
bool DataBase::insertEditorProject(QUuid uid,QString name,QString tag,QByteArray byte)
|
||||
bool DataBase::insertEditorProject(QUuid uid,QString name,QString tag)
|
||||
{
|
||||
QString strSQL = "INSERT INTO diagramui_editorprojects(global_uuid, name, tag, context) VALUES (?, ?, ?, ?)";
|
||||
QString strSQL = "INSERT INTO diagramui_editor_projects(global_uuid, name, tag) VALUES (?, ?, ?)";
|
||||
|
||||
QVariantList params;
|
||||
params.append(uid);
|
||||
params.append(name);
|
||||
params.append(tag);
|
||||
params.append(byte);
|
||||
try
|
||||
{
|
||||
executeSQL(strSQL,false,params);
|
||||
|
|
@ -2862,17 +2861,107 @@ bool DataBase::insertEditorProject(QUuid uid,QString name,QString tag,QByteArray
|
|||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
LOG_ERROR("DB", QString("Insert diagramui_editorprojects fail"));
|
||||
LOG_ERROR("DB", QString("Insert diagramui_editor_projects fail"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool DataBase::updateEditorProject(QString name,QByteArray context)
|
||||
QList<editorProjectInfo> DataBase::getAllEditorProject()
|
||||
{
|
||||
QString strSQL = "UPDATE diagramui_editorprojects SET context = ? WHERE name = ?";
|
||||
QList<editorProjectInfo> lst;
|
||||
QString strSQL = "SELECT id,global_uuid,name,tag FROM diagramui_editor_projects";
|
||||
|
||||
try
|
||||
{
|
||||
QSqlQuery query = executeSQL(strSQL);
|
||||
while (query.next())
|
||||
{
|
||||
editorProjectInfo info;
|
||||
info.id = query.value(0).toInt();
|
||||
info.uuid = QUuid(query.value(1).toString());
|
||||
info.name = query.value(2).toString();
|
||||
info.tag = query.value(3).toString();
|
||||
|
||||
lst.append(info);
|
||||
}
|
||||
query.clear();
|
||||
return lst;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
return lst;
|
||||
}
|
||||
}
|
||||
|
||||
bool DataBase::deleteEditorProject(QString name)
|
||||
{
|
||||
QString strSQL = "DELETE FROM diagramui_editor_projects WHERE name = ?";
|
||||
QVariantList params;
|
||||
params.append(name);
|
||||
|
||||
try
|
||||
{
|
||||
executeSQL(strSQL,false,params);
|
||||
LOG_INFO("DB", QString("Delete diagramui_editor_projects %1 success").arg(name));
|
||||
return true;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
LOG_INFO("DB", QString("Delete diagramui_editor_projects %1 fail").arg(name));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool DataBase::ifEditorProjectExist(QString name)
|
||||
{
|
||||
QString strSQL = "SELECT * FROM diagramui_editor_projects WHERE name = ?";
|
||||
QVariantList params;
|
||||
params.append(name);
|
||||
|
||||
try
|
||||
{
|
||||
QSqlQuery query = executeSQL(strSQL,false,params);
|
||||
while (query.next())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/***********************basesetting****************************/
|
||||
bool DataBase::insertBaseSetting(QUuid uid,QString projectName,QString autorName,QByteArray context,QUuid generateId,QString ts)
|
||||
{
|
||||
QString strSQL = "INSERT INTO diagramui_editor_basesetting(global_uuid, project_name, autor, context, generate_uuid, ts) VALUES (?, ?, ?, ?, ?, ?)";
|
||||
|
||||
QVariantList params;
|
||||
params.append(uid);
|
||||
params.append(projectName);
|
||||
params.append(autorName);
|
||||
params.append(context);
|
||||
params.append(generateId);
|
||||
params.append(ts);
|
||||
try
|
||||
{
|
||||
executeSQL(strSQL,false,params);
|
||||
return true;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
LOG_ERROR("DB", QString("Insert diagramui_editor_basesetting fail"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
bool DataBase::updateBaseSetting(QUuid uid,QByteArray context,QString ts)
|
||||
{
|
||||
QString strSQL = "UPDATE diagramui_editor_basesetting SET context = ?, ts = ? WHERE global_uuid = ?";
|
||||
QVariantList params;
|
||||
params.append(context);
|
||||
params.append(name);
|
||||
params.append(ts);
|
||||
params.append(uid);
|
||||
|
||||
try
|
||||
{
|
||||
|
|
@ -2881,17 +2970,17 @@ bool DataBase::updateEditorProject(QString name,QByteArray context)
|
|||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
LOG_ERROR("DB", QString("Update diagramui_editorprojects %1 fail").arg(name));
|
||||
LOG_ERROR("DB", QString("Update diagramui_editor_basesetting %1 fail").arg(uid.toString()));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
QByteArray DataBase::getEditorProjectByName(QString name)
|
||||
QByteArray DataBase::getBaseSettingByUid(QUuid uid)
|
||||
{
|
||||
QByteArray byte;
|
||||
QString strSQL = "SELECT context FROM diagramui_editorprojects WHERE name = ?";
|
||||
QString strSQL = "SELECT context FROM diagramui_editor_basesetting WHERE global_uuid = ?";
|
||||
QVariantList params;
|
||||
params.append(name);
|
||||
params.append(uid);
|
||||
|
||||
try
|
||||
{
|
||||
|
|
@ -2909,22 +2998,52 @@ QByteArray DataBase::getEditorProjectByName(QString name)
|
|||
}
|
||||
}
|
||||
|
||||
QList<editorProjectInfo> DataBase::getAllEditorProject()
|
||||
editorBaseSettingInfo DataBase::getBaseSettingInfo(QUuid uid)
|
||||
{
|
||||
QList<editorProjectInfo> lst;
|
||||
QString strSQL = "SELECT id,global_uuid,name,tag,context FROM diagramui_editorprojects";
|
||||
editorBaseSettingInfo info;
|
||||
QString strSQL = "SELECT project_name, autor, context, generate_uuid, ts FROM diagramui_editor_basesetting WHERE global_uuid = ?";
|
||||
QVariantList params;
|
||||
params.append(uid);
|
||||
|
||||
try
|
||||
{
|
||||
QSqlQuery query = executeSQL(strSQL,false,params);
|
||||
while (query.next())
|
||||
{
|
||||
info.projectName = query.value(0).toString();
|
||||
info.autor = query.value(1).toString();
|
||||
info.context = query.value(2).toByteArray();
|
||||
info.generateUid = QUuid(query.value(3).toString());
|
||||
info.ts = query.value(4).toString();
|
||||
info.uuid = uid;
|
||||
}
|
||||
query.clear();
|
||||
return info;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
||||
QList<editorBaseSettingInfo> DataBase::getAllBaseSetting()
|
||||
{
|
||||
QList<editorBaseSettingInfo> lst;
|
||||
QString strSQL = "SELECT id,global_uuid, project_name, autor, context, generate_uuid, ts FROM diagramui_editor_basesetting";
|
||||
|
||||
try
|
||||
{
|
||||
QSqlQuery query = executeSQL(strSQL);
|
||||
while (query.next())
|
||||
{
|
||||
editorProjectInfo info;
|
||||
editorBaseSettingInfo info;
|
||||
info.id = query.value(0).toInt();
|
||||
info.uuid = QUuid(query.value(1).toString());
|
||||
info.name = query.value(2).toString();
|
||||
info.tag = query.value(3).toString();
|
||||
info.projectName = query.value(2).toString();
|
||||
info.autor = query.value(3).toString();
|
||||
info.context = query.value(4).toByteArray();
|
||||
info.generateUid = QUuid(query.value(5).toString());
|
||||
info.ts = query.value(6).toString();
|
||||
|
||||
lst.append(info);
|
||||
}
|
||||
|
|
@ -2937,30 +3056,30 @@ QList<editorProjectInfo> DataBase::getAllEditorProject()
|
|||
}
|
||||
}
|
||||
|
||||
bool DataBase::deleteEditorProject(QString name)
|
||||
bool DataBase::deleteBaseSetting(QUuid uid)
|
||||
{
|
||||
QString strSQL = "DELETE FROM diagramui_editorprojects WHERE name = ?";
|
||||
QString strSQL = "DELETE FROM diagramui_editor_basesetting WHERE global_uuid = ?";
|
||||
QVariantList params;
|
||||
params.append(name);
|
||||
params.append(uid);
|
||||
|
||||
try
|
||||
{
|
||||
executeSQL(strSQL,false,params);
|
||||
LOG_INFO("DB", QString("Delete diagramui_editorprojects %1 success").arg(name));
|
||||
LOG_INFO("DB", QString("Delete diagramui_editor_basesetting %1 success").arg(uid.toString()));
|
||||
return true;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
LOG_INFO("DB", QString("Delete diagramui_editorprojects %1 fail").arg(name));
|
||||
LOG_INFO("DB", QString("Delete diagramui_editor_basesetting %1 fail").arg(uid.toString()));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool DataBase::ifEditorProjectExist(QString name)
|
||||
bool DataBase::ifBaseSettingExist(QUuid uid)
|
||||
{
|
||||
QString strSQL = "SELECT * FROM diagramui_editorprojects WHERE name = ?";
|
||||
QString strSQL = "SELECT * FROM diagramui_editor_basesetting WHERE global_uuid = ?";
|
||||
QVariantList params;
|
||||
params.append(name);
|
||||
params.append(uid);
|
||||
|
||||
try
|
||||
{
|
||||
|
|
|
|||
|
|
@ -20,46 +20,70 @@ ProjectManager::~ProjectManager()
|
|||
|
||||
}
|
||||
|
||||
void ProjectManager::saveEditorDataToDB(QUuid uid,const QString& name,const QString& tag,QByteArray byte)
|
||||
void ProjectManager::saveEditorDataToDB(QUuid uid,const QString& name,const QString& tag,QByteArray byte,QString autor,QString sTime)
|
||||
{
|
||||
bool val = DataBase::GetInstance()->ifEditorProjectExist(name);
|
||||
if(val)
|
||||
{
|
||||
bool res = DataBase::GetInstance()->updateEditorProject(name,byte);
|
||||
if(res){
|
||||
emit editorSaved(name,uid);
|
||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"更新成功"));
|
||||
}
|
||||
else
|
||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"更新失败"));
|
||||
}
|
||||
else{
|
||||
bool res = DataBase::GetInstance()->insertEditorProject(uid,name,tag,byte);
|
||||
if(res){
|
||||
emit editorSaved(name,uid);
|
||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存成功"));
|
||||
}
|
||||
else
|
||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"保存失败"));
|
||||
}
|
||||
if(!val)
|
||||
DataBase::GetInstance()->insertEditorProject(uid,name,tag);
|
||||
QUuid uidSetting = QUuid::createUuid(); //暂定没有更新,变更后存储为新记录
|
||||
bool res = DataBase::GetInstance()->insertBaseSetting(uidSetting,name,autor,byte,QUuid(),sTime);
|
||||
if(res)
|
||||
emit editorSaved(name,autor,uidSetting,sTime);
|
||||
}
|
||||
|
||||
QByteArray ProjectManager::getEditorDataByName(const QString& name)
|
||||
QByteArray ProjectManager::getEditorBaseSettingByUid(QUuid uid)
|
||||
{
|
||||
return DataBase::GetInstance()->getEditorProjectByName(name);
|
||||
return DataBase::GetInstance()->getBaseSettingByUid(uid);
|
||||
}
|
||||
|
||||
void ProjectManager::createEditor(const QString& name)
|
||||
bool ProjectManager::createEditorProject(const QString& name)
|
||||
{
|
||||
if(!_wizardInfo.contains(name)){
|
||||
bool bExist = DataBase::GetInstance()->ifEditorProjectExist(name);
|
||||
if(bExist)
|
||||
return true;
|
||||
QUuid uid = QUuid::createUuid();
|
||||
_wizardInfo[name].sName = name;
|
||||
_wizardInfo[name].uid = uid;
|
||||
emit createNewEditor(name,uid);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ProjectManager::unloadEditorProject(const QString& name)
|
||||
{
|
||||
emit prepareUnloadProject(name);
|
||||
}
|
||||
|
||||
void ProjectManager::openSetting(const QString& name)
|
||||
{
|
||||
emit prepareOpenSetting(name);
|
||||
}
|
||||
|
||||
void ProjectManager::saveEditor(const QString& name)
|
||||
{
|
||||
emit prepareSaveEditor(name);
|
||||
}
|
||||
|
||||
bool ProjectManager::deleteEditor(const QString& name,QUuid id)
|
||||
{
|
||||
emit prepareDeleteBaseSetting(name,id);
|
||||
return DataBase::GetInstance()->deleteBaseSetting(id);
|
||||
}
|
||||
|
||||
void ProjectManager::loadBaseSetting(const QString& str,QUuid id)
|
||||
{
|
||||
emit prepareLoadBaseSetting(str,id);
|
||||
}
|
||||
|
||||
QList<editorBaseSettingInfo> ProjectManager::getBaseSettingsByProject(const QString& strPro)
|
||||
{
|
||||
QList<editorBaseSettingInfo> lst;
|
||||
QList<editorBaseSettingInfo> lstAll = DataBase::GetInstance()->getAllBaseSetting();
|
||||
for(auto &info:lstAll){
|
||||
if(info.projectName == strPro)
|
||||
lst.append(info);
|
||||
}
|
||||
return lst;
|
||||
}
|
||||
|
||||
editorBaseSettingInfo ProjectManager::getBaseSetting(QUuid uid)
|
||||
{
|
||||
return DataBase::GetInstance()->getBaseSettingInfo(uid);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ signals:
|
|||
void diagramDelete(DiagramInfo);
|
||||
void diagramSelected(DiagramInfo);
|
||||
|
||||
void createProject();
|
||||
void loadProject();
|
||||
public slots:
|
||||
void onIndexRbtnClicked(const QPoint &pos); //索引列表右键菜单
|
||||
|
|
@ -34,9 +35,11 @@ public slots:
|
|||
void onItemClicked(const QModelIndex &index);
|
||||
|
||||
void onEditorRbtnClicked(const QPoint &pos); //editor右键菜单
|
||||
void onEditorDBClicked(QTreeWidgetItem* item, int column);
|
||||
//**********editor************
|
||||
void onNewEditorCreated(const QString&,QUuid);
|
||||
void onEditorSaved(const QString&,QUuid);
|
||||
void onEditorLoaded(const QString&,QUuid);
|
||||
void onEditorSaved(const QString& strPro,const QString& autor,QUuid uid,QString sTime);
|
||||
|
||||
void onNewEditorClicked();
|
||||
void onOpenEditorClicked();
|
||||
|
|
|
|||
|
|
@ -49,9 +49,10 @@ private slots:
|
|||
void onAction_editBay();
|
||||
void onSignal_addItem(QGraphicsItem*);
|
||||
void onSignal_deleteItem();
|
||||
void onSignal_loadPage();
|
||||
void onSignal_loadProject();
|
||||
|
||||
void onAction_createEditor();
|
||||
void onAction_unloadEditor(const QString&);
|
||||
public:
|
||||
GraphicElementsPanel* graphicsElementsPanel() const;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include <QPushButton>
|
||||
#include <QMessageBox>
|
||||
#include "createEditor.h"
|
||||
#include "projectManager.h"
|
||||
#include "ui_createEditor.h"
|
||||
|
|
@ -31,7 +32,11 @@ void CreateEditor::showDlg()
|
|||
|
||||
void CreateEditor::onOkClicked()
|
||||
{
|
||||
ProjectManager::instance().createEditor(ui->le_name->text());
|
||||
bool res = ProjectManager::instance().createEditorProject(ui->le_name->text());
|
||||
if(res){
|
||||
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"项目名已存在"));
|
||||
return;
|
||||
}
|
||||
hide();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
#include "topologyManager.h"
|
||||
#include "projectManager.h"
|
||||
#include "dataBase.h"
|
||||
#include <QMessageBox>
|
||||
|
||||
DiagramView::DiagramView(QWidget *parent)
|
||||
: QDialog(parent)
|
||||
|
|
@ -36,9 +37,9 @@ void DiagramView::initial()
|
|||
connect(ui->btn_save, &QPushButton::clicked, this, &DiagramView::onSaveEditorClicked);
|
||||
connect(&ProjectManager::instance(),&ProjectManager::createNewEditor,this,&DiagramView::onNewEditorCreated);
|
||||
connect(&ProjectManager::instance(),&ProjectManager::editorSaved,this,&DiagramView::onEditorSaved);
|
||||
connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &DiagramView::onEditorDBClicked);
|
||||
ui->treeView->setHeaderHidden(true);
|
||||
ui->treeWidget->setHeaderHidden(true);
|
||||
ui->treeWidget->setColumnCount(2);
|
||||
// 设置模型的列数
|
||||
_pModel->setColumnCount(1);
|
||||
|
||||
|
|
@ -194,20 +195,12 @@ void DiagramView::onEditorRbtnClicked(const QPoint &pos)
|
|||
|
||||
switch (level) {
|
||||
case 1:{ // 顶级节点
|
||||
QAction *actSaveTop = menu.addAction("保存");
|
||||
QAction *actGenTop = menu.addAction("生成");
|
||||
menu.addSeparator();
|
||||
QAction *actDelTop = menu.addAction("删除");
|
||||
QAction *actUnload = menu.addAction("卸载项目");
|
||||
|
||||
QAction *act = menu.exec(ui->treeWidget->mapToGlobal(pos));
|
||||
if(act == actSaveTop){
|
||||
ProjectManager::instance().saveEditor(item->text(0));
|
||||
}
|
||||
else if(act == actGenTop){
|
||||
|
||||
}
|
||||
else if(act == actDelTop){
|
||||
|
||||
if(act == actUnload){
|
||||
ProjectManager::instance().unloadEditorProject(item->text(0));
|
||||
ui->treeWidget->clear();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -215,10 +208,63 @@ void DiagramView::onEditorRbtnClicked(const QPoint &pos)
|
|||
}
|
||||
break;
|
||||
case 3:{ // 三级节点
|
||||
QAction *actOpenSetting = menu.addAction("打开设置");
|
||||
QAction *actSaveTop = menu.addAction("保存");
|
||||
//QAction *actGenTop = menu.addAction("生成");
|
||||
menu.addSeparator();
|
||||
QAction *actDelTop = menu.addAction("删除");
|
||||
|
||||
QAction *act = menu.exec(ui->treeWidget->mapToGlobal(pos));
|
||||
if(act == actOpenSetting){
|
||||
ProjectManager::instance().openSetting(item->text(0));
|
||||
}
|
||||
else if(act == actSaveTop){
|
||||
ProjectManager::instance().saveEditor(item->text(0));
|
||||
}
|
||||
/*else if(act == actGenTop){
|
||||
|
||||
}*/
|
||||
else if(act == actDelTop){
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText(QString::fromWCharArray(L"提示"));
|
||||
msgBox.setInformativeText(QString::fromWCharArray(L"确认删除?"));
|
||||
msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
|
||||
msgBox.setDefaultButton(QMessageBox::Cancel);
|
||||
int ret = msgBox.exec();
|
||||
|
||||
switch (ret) {
|
||||
case QMessageBox::Ok:
|
||||
{
|
||||
bool res = ProjectManager::instance().deleteEditor(item->text(0),item->data(0,Qt::UserRole).toUuid());
|
||||
delete item;
|
||||
QString str;
|
||||
if(res)
|
||||
str = "删除成功";
|
||||
else
|
||||
str = "删除失败";
|
||||
QMessageBox::information(NULL, QString("提示"), str);
|
||||
}
|
||||
break;
|
||||
case QMessageBox::Cancel:
|
||||
// Cancel was clicked
|
||||
default:
|
||||
// should never be reached
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void DiagramView::onEditorDBClicked(QTreeWidgetItem* item, int column)
|
||||
{
|
||||
int level = getItemLevel(item);
|
||||
if(level == 3){
|
||||
auto pAuthor = item->parent();
|
||||
auto pProject = pAuthor->parent();
|
||||
ProjectManager::instance().loadBaseSetting(item->text(0),item->data(0,Qt::UserRole).toUuid());
|
||||
}
|
||||
}
|
||||
|
||||
void DiagramView::onNewEditorCreated(const QString& str,QUuid id)
|
||||
|
|
@ -227,28 +273,75 @@ void DiagramView::onNewEditorCreated(const QString& str,QUuid id)
|
|||
QTreeWidgetItem *topLevelItem = new QTreeWidgetItem(ui->treeWidget);
|
||||
topLevelItem->setText(0, str);
|
||||
topLevelItem->setData(0,Qt::UserRole,id);
|
||||
topLevelItem->setText(1,"未保存");
|
||||
topLevelItem->setForeground(1,Qt::yellow);
|
||||
}
|
||||
|
||||
void DiagramView::onEditorSaved(const QString& str,QUuid uid)
|
||||
void DiagramView::onEditorLoaded(const QString& str,QUuid id)
|
||||
{
|
||||
QTreeWidgetItemIterator it(ui->treeWidget);
|
||||
while (*it) {
|
||||
QTreeWidgetItem* item = *it;
|
||||
if(item->data(0,Qt::UserRole).toUuid() == uid)
|
||||
{
|
||||
item->setText(1,"已保存");
|
||||
item->setForeground(1,Qt::green);
|
||||
ui->treeWidget->clear();
|
||||
QTreeWidgetItem *topLevelItem = new QTreeWidgetItem(ui->treeWidget);
|
||||
topLevelItem->setText(0, str);
|
||||
topLevelItem->setData(0,Qt::UserRole,id);
|
||||
auto lstInfo = ProjectManager::instance().getBaseSettingsByProject(str);
|
||||
|
||||
for(auto &info:lstInfo){
|
||||
bool authorCreated = false;
|
||||
for (int j = 0; j < topLevelItem->childCount(); ++j) {
|
||||
QTreeWidgetItem* authorItem = topLevelItem->child(j);
|
||||
if(authorItem->text(0) == info.autor){ //author存在
|
||||
QTreeWidgetItem* settingItem = new QTreeWidgetItem(authorItem);
|
||||
settingItem->setText(0,info.ts);
|
||||
settingItem->setData(0,Qt::UserRole,info.uuid);
|
||||
authorCreated = true;
|
||||
break;
|
||||
}
|
||||
++it;
|
||||
}
|
||||
|
||||
if(!authorCreated){ //新建author
|
||||
QTreeWidgetItem* authorItem = new QTreeWidgetItem(topLevelItem);
|
||||
authorItem->setText(0,info.autor);
|
||||
|
||||
QTreeWidgetItem* settingItem = new QTreeWidgetItem(authorItem);
|
||||
settingItem->setText(0,info.ts);
|
||||
settingItem->setData(0,Qt::UserRole,info.uuid);
|
||||
}
|
||||
}
|
||||
ui->treeWidget->expandAll();
|
||||
}
|
||||
|
||||
void DiagramView::onEditorSaved(const QString& strPro,const QString& autor,QUuid uid,QString sTime)
|
||||
{
|
||||
for (int i = 0; i < ui->treeWidget->topLevelItemCount(); ++i) {
|
||||
QTreeWidgetItem* topItem = ui->treeWidget->topLevelItem(i);
|
||||
if(topItem->text(0) == strPro){ //在指定项目下添加
|
||||
// 遍历子项
|
||||
bool exist = false; //名称已存在
|
||||
for (int j = 0; j < topItem->childCount(); ++j) {
|
||||
QTreeWidgetItem* childItem = topItem->child(j);
|
||||
if(childItem->text(0) == autor){
|
||||
exist = true;
|
||||
QTreeWidgetItem *pItem = new QTreeWidgetItem(childItem);
|
||||
pItem->setText(0, sTime);
|
||||
pItem->setData(0,Qt::UserRole,uid);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!exist){
|
||||
QTreeWidgetItem *itemName = new QTreeWidgetItem(topItem);
|
||||
itemName->setText(0, autor);
|
||||
QTreeWidgetItem *pItem = new QTreeWidgetItem(itemName);
|
||||
pItem->setText(0, sTime);
|
||||
pItem->setData(0,Qt::UserRole,uid);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DiagramView::onNewEditorClicked()
|
||||
{
|
||||
|
||||
ProjectManager::instance().unloadEditorProject(QString());
|
||||
ui->treeWidget->clear();
|
||||
emit createProject();
|
||||
}
|
||||
|
||||
void DiagramView::onOpenEditorClicked()
|
||||
|
|
@ -258,7 +351,7 @@ void DiagramView::onOpenEditorClicked()
|
|||
|
||||
void DiagramView::onSaveEditorClicked()
|
||||
{
|
||||
|
||||
ProjectManager::instance().saveEditor("currentPage");
|
||||
}
|
||||
|
||||
QString DiagramView::generateName()
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ void LoadPageDlg::initial()
|
|||
m_standardItemModel = new QStandardItemModel();
|
||||
|
||||
// 使用model设置QTreeView表头
|
||||
m_standardItemModel->setHorizontalHeaderLabels(QStringList(QStringLiteral("接线图")));
|
||||
m_standardItemModel->setHorizontalHeaderLabels(QStringList(QStringLiteral("组态编辑")));
|
||||
// TreeView控件载入model
|
||||
ui->treeView->setModel(m_standardItemModel);
|
||||
// 展开数据
|
||||
|
|
@ -52,6 +52,7 @@ void LoadPageDlg::updateList()
|
|||
pageList.append(item);
|
||||
}
|
||||
itemPage->appendRows(pageList);
|
||||
ui->treeView->expandAll();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,13 +74,13 @@ void CMainWindow::changeEvent(QEvent* event)
|
|||
void CMainWindow::initializeDockUi()
|
||||
{
|
||||
m_pElectricElementsBox = new ElectricElementsBox();
|
||||
m_pElectricElementsBox->initial();
|
||||
/*m_pElectricElementsBox->initial();
|
||||
QWidget* pBox = m_pElectricElementsBox->getToolBox();
|
||||
QDockWidget* ElectricElementsDock = new QDockWidget(QString::fromWCharArray(L"图元面板"),this);
|
||||
ElectricElementsDock->setWidget(pBox);
|
||||
ElectricElementsDock->setMinimumSize(200,150);
|
||||
ElectricElementsDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
|
||||
this->addDockWidget(Qt::RightDockWidgetArea,ElectricElementsDock);
|
||||
this->addDockWidget(Qt::RightDockWidgetArea,ElectricElementsDock);*/
|
||||
|
||||
m_pTopologyView = new TopologyView(this);
|
||||
m_pTopologyView->initial();
|
||||
|
|
@ -139,11 +139,13 @@ void CMainWindow::initializeAction()
|
|||
connect(m_pDiagramView,&DiagramView::diagramChange,m_pDiagramCavas,&DiagramCavas::onSignal_changeDiagram);
|
||||
connect(m_pDiagramView,&DiagramView::diagramDelete,m_pDiagramCavas,&DiagramCavas::onSignal_deleteDiagram);
|
||||
connect(m_pDiagramView,&DiagramView::diagramSelected,m_pDiagramCavas,&DiagramCavas::onSignal_selectDiagram);
|
||||
connect(m_pDiagramView,&DiagramView::createProject,this,&CMainWindow::onAction_createEditor);
|
||||
connect(&ProjectManager::instance(),&ProjectManager::prepareUnloadProject,this,&CMainWindow::onAction_unloadEditor);
|
||||
|
||||
connect(m_pDiagramView,&DiagramView::loadProject,this,&CMainWindow::onSignal_loadPage);
|
||||
connect(m_pDiagramView,&DiagramView::loadProject,this,&CMainWindow::onSignal_loadProject);
|
||||
|
||||
connect(ui->actionNew,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onSignal_addPage);
|
||||
connect(ui->actionOpen,&QAction::triggered,this,&CMainWindow::onSignal_loadPage);
|
||||
connect(ui->actionOpen,&QAction::triggered,this,&CMainWindow::onSignal_loadProject);
|
||||
connect(ui->actionSave,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onSignal_savePage);
|
||||
connect(ui->actionDelete,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onSignal_deletePage);
|
||||
|
||||
|
|
@ -238,12 +240,17 @@ void CMainWindow::onSignal_deleteItem()
|
|||
m_pUndoStack->push(deleteItemCommand); //push时会自动调用一次command的redo函数*/
|
||||
}
|
||||
|
||||
void CMainWindow::onSignal_loadPage()
|
||||
void CMainWindow::onSignal_loadProject()
|
||||
{
|
||||
if(m_pLoadPageDlg == nullptr)
|
||||
{
|
||||
m_pLoadPageDlg = new LoadPageDlg(this);
|
||||
connect(m_pLoadPageDlg,&LoadPageDlg::selectedProject,m_pDiagramCavas,&DiagramCavas::onSignal_loadEdit);
|
||||
connect(&ProjectManager::instance(),&ProjectManager::prepareLoadBaseSetting,m_pDiagramCavas,&DiagramCavas::onSignal_loadEdit);
|
||||
connect(m_pLoadPageDlg,&LoadPageDlg::selectedProject,m_pDiagramView,&DiagramView::onEditorLoaded);
|
||||
connect(&ProjectManager::instance(),&ProjectManager::createNewEditor,m_pDiagramCavas,&DiagramCavas::onSignal_createEditPanel);
|
||||
connect(&ProjectManager::instance(),&ProjectManager::prepareSaveEditor,m_pDiagramCavas,&DiagramCavas::onSignal_prepareSaveEdit);
|
||||
connect(&ProjectManager::instance(),&ProjectManager::prepareDeleteBaseSetting,m_pDiagramCavas,&DiagramCavas::onSignal_prepareDeleteEditor);
|
||||
connect(&ProjectManager::instance(),&ProjectManager::prepareOpenSetting,m_pDiagramCavas,&DiagramCavas::onSignal_prepareOpenSetting);
|
||||
}
|
||||
m_pLoadPageDlg->updateList();
|
||||
m_pLoadPageDlg->show();
|
||||
|
|
@ -255,11 +262,18 @@ void CMainWindow::onAction_createEditor()
|
|||
m_pCreateEdiotr = new CreateEditor(this);
|
||||
connect(&ProjectManager::instance(),&ProjectManager::createNewEditor,m_pDiagramCavas,&DiagramCavas::onSignal_createEditPanel);
|
||||
connect(&ProjectManager::instance(),&ProjectManager::prepareSaveEditor,m_pDiagramCavas,&DiagramCavas::onSignal_prepareSaveEdit);
|
||||
connect(&ProjectManager::instance(),&ProjectManager::prepareDeleteBaseSetting,m_pDiagramCavas,&DiagramCavas::onSignal_prepareDeleteEditor);
|
||||
connect(&ProjectManager::instance(),&ProjectManager::prepareOpenSetting,m_pDiagramCavas,&DiagramCavas::onSignal_prepareOpenSetting);
|
||||
}
|
||||
|
||||
m_pCreateEdiotr->showDlg();
|
||||
}
|
||||
|
||||
void CMainWindow::onAction_unloadEditor(const QString& str)
|
||||
{
|
||||
m_pDiagramCavas->onSignal_unloadProject(str);
|
||||
}
|
||||
|
||||
GraphicElementsPanel* CMainWindow::graphicsElementsPanel() const
|
||||
{
|
||||
if(m_pGraphicElementsPanel)
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@ void TopologyView::initial()
|
|||
QString sZone = nZ;
|
||||
QString sStation = nS;
|
||||
|
||||
if(info.tag.isEmpty())
|
||||
continue;
|
||||
QStandardItem *pItem = new QStandardItem(info.tag);
|
||||
pItem->setData(info.uuid.toString(),Qt::UserRole);
|
||||
addItemToView(sGrid,sZone,sStation,rootItem,pItem);
|
||||
|
|
@ -270,9 +272,17 @@ void TopologyView::onDataChanged(QString uuid)
|
|||
|
||||
void TopologyView::addItemToView(QString sGrid,QString sZone,QString sStation,QStandardItem *root,QStandardItem *pItem)
|
||||
{
|
||||
QModelIndex iG = findIndex(_pModel,sGrid);
|
||||
QModelIndex iZ = findIndex(_pModel,sZone);
|
||||
QModelIndex iS = findIndex(_pModel,sStation);
|
||||
QModelIndex iG;
|
||||
QModelIndex iZ;
|
||||
QModelIndex iS;
|
||||
|
||||
iG = findIndex(_pModel, sGrid, Qt::DisplayRole, QModelIndex());
|
||||
if (iG.isValid()) {
|
||||
iZ = findIndex(_pModel, sZone, Qt::DisplayRole, iG); // 只在Grid下查找
|
||||
if (iZ.isValid()) {
|
||||
iS = findIndex(_pModel, sStation, Qt::DisplayRole, iZ); // 只在Zone下查找
|
||||
}
|
||||
}
|
||||
|
||||
if(iG.isValid()) //已创建
|
||||
{
|
||||
|
|
|
|||
|
|
@ -45,28 +45,34 @@
|
|||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QTreeWidget" name="treeWidget"/>
|
||||
<widget class="QTreeWidget" name="treeWidget">
|
||||
<column>
|
||||
<property name="text">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_new">
|
||||
<property name="text">
|
||||
<string>新建</string>
|
||||
<string>新建项目</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_open">
|
||||
<property name="text">
|
||||
<string>打开</string>
|
||||
<string>加载项目</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_save">
|
||||
<property name="text">
|
||||
<string>保存</string>
|
||||
<string>保存设置</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
|||
Loading…
Reference in New Issue