#include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "diagramCavas.h" #include "graphicElementsPanel.h" #include "operationCommand.h" #include "electricElementsBox.h" #include "electricElementsPanel.h" #include "toolBox.h" #include "loadPageDlg.h" #include "projectModelDlg.h" #include "topologyView.h" #include "diagramView.h" #include "createEditor.h" #include "projectModelManager.h" #include "projectManager.h" #include "monitorItemsDlg.h" #include "monitorPagesDlg.h" //using namespace ads; CMainWindow::CMainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::CMainWindow) { ui->setupUi(this); m_pUndoStack = nullptr; m_pLoadPageDlg = nullptr; m_pTopologyView = nullptr; m_pDiagramView = nullptr; m_pCreateEdiotr = nullptr; m_pMonitorItemsDlg = nullptr; m_pMonitorPagesDlg = nullptr; m_pMonitorItemsDock = nullptr; m_pMonitorPagesDock = nullptr; _pActMonitor = nullptr; initializeDockUi(); initializeAction(); } CMainWindow::~CMainWindow() { delete ui; if(m_pElectricElementsBox) delete m_pElectricElementsBox; } void CMainWindow::closeEvent(QCloseEvent* event) { // Delete dock manager here to delete all floating widgets. This ensures // that all top level windows of the dock manager are properly closed QMainWindow::closeEvent(event); } void CMainWindow::changeEvent(QEvent* event) { //if (event->type() == QEvent::WindowStateChange) //m_pDrawingPanel->grahpicsViewZoomFit(); } void CMainWindow::initializeDockUi() { m_pElectricElementsBox = new ElectricElementsBox(); /*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);*/ m_pTopologyView = new TopologyView(this); m_pTopologyView->initial(); QDockWidget* topologyDock = new QDockWidget(QString::fromWCharArray(L"拓扑关系"),this); topologyDock->setWidget(m_pTopologyView); //topologyDock->setMinimumSize(120,550); topologyDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); this->addDockWidget(Qt::LeftDockWidgetArea,topologyDock); m_pDiagramView = new DiagramView(this); m_pDiagramView->initial(); QDockWidget* diagramDock = new QDockWidget(QString::fromWCharArray(L"组态图列表"),this); diagramDock->setWidget(m_pDiagramView); diagramDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); this->addDockWidget(Qt::LeftDockWidgetArea,diagramDock); m_pMonitorItemsDlg = new MonitorItemsDlg(this); m_pMonitorItemsDock = new QDockWidget(QString::fromWCharArray(L"当前设备列表"),this); m_pMonitorItemsDock->setWidget(m_pMonitorItemsDlg); m_pMonitorItemsDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); this->addDockWidget(Qt::RightDockWidgetArea,m_pMonitorItemsDock); m_pMonitorPagesDlg = new MonitorPagesDlg(this); m_pMonitorPagesDock = new QDockWidget(QString::fromWCharArray(L"监控列表"),this); m_pMonitorPagesDock->setWidget(m_pMonitorPagesDlg); m_pMonitorPagesDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); m_pMonitorPagesDock->setMinimumSize(120,550); this->addDockWidget(Qt::RightDockWidgetArea,m_pMonitorPagesDock); m_pMonitorItemsDock->hide(); m_pMonitorPagesDock->hide(); m_pDiagramCavas = new DiagramCavas(); m_pDiagramCavas->initial(); this->setCentralWidget(m_pDiagramCavas); connect(m_pElectricElementsBox,&ElectricElementsBox::addEletricItem,m_pDiagramCavas,&DiagramCavas::onSignal_addGraphicsItem); m_pProjectModelDlg = new projectModelDlg(this); connect(&ProjectModelManager::instance(),&ProjectModelManager::modelChange,m_pElectricElementsBox,&ElectricElementsBox::onSignal_modelChanged); } void CMainWindow::initializeAction() { //撤销、重做 /*m_pUndoStack = new QUndoStack(this); ui->actionUndo = m_pUndoStack->createUndoAction(this, tr("撤销")); ui->actionUndo->setIcon(QIcon::fromTheme(QString::fromUtf8("edit-undo"))); ui->actionUndo->setShortcuts(QKeySequence::Undo); ui->actionRedo = m_pUndoStack->createRedoAction(this, tr("重做")); ui->actionRedo->setIcon(QIcon::fromTheme(QString::fromUtf8("edit-redo"))); ui->actionRedo->setShortcuts(QKeySequence::Redo); ui->toolBar->addAction(ui->actionUndo); ui->toolBar->addAction(ui->actionRedo); ui->actionUndo->setEnabled(m_pUndoStack->canUndo()); ui->actionRedo->setEnabled(m_pUndoStack->canRedo()); ui->actionDelete->setShortcut(QKeySequence::Delete);*/ //connect(ui->actionDelete, SIGNAL(triggered()), this, SLOT(onSignal_deleteItem())); //connect(ui->actionZoomIn, SIGNAL(triggered()), this, SLOT(onAction_zoomIn())); //connect(ui->actionZoomOut, SIGNAL(triggered()), this, SLOT(onAction_zoomOut())); //connect(ui->actionZoomFit, SIGNAL(triggered()), this, SLOT(onAction_zoomFit())); //connect(ui->actionGroup, SIGNAL(triggered()), this, SLOT(onAction_createGroup())); //connect(ui->actionUngroup, SIGNAL(triggered()), this, SLOT(onAction_destroyGroup())); connect(m_pTopologyView,&TopologyView::entityCreate,m_pDiagramCavas,&DiagramCavas::onSignal_createEntity); connect(m_pTopologyView,&TopologyView::entityChange,m_pDiagramCavas,&DiagramCavas::onSignal_changeEntity); connect(m_pTopologyView,&TopologyView::entityDelete,m_pDiagramCavas,&DiagramCavas::onSignal_deleteEntity); connect(m_pTopologyView,&TopologyView::entitySelected,m_pDiagramCavas,&DiagramCavas::onSignal_selectEntity); //connect(m_pDiagramView,&DiagramView::diagramCreate,m_pDiagramCavas,&DiagramCavas::onSignal_createDiagram); 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(m_pDiagramCavas,&DiagramCavas::prepareUpdateItems,m_pMonitorItemsDlg,&MonitorItemsDlg::onUpdateItems); connect(m_pDiagramCavas,&DiagramCavas::prepareSelectItems,m_pMonitorItemsDlg,&MonitorItemsDlg::onSelectItems); connect(m_pDiagramCavas,&DiagramCavas::updateMonitorList,m_pMonitorPagesDlg,&MonitorPagesDlg::onMonitorCreated); connect(m_pDiagramCavas,&DiagramCavas::createdMonitorItems,m_pMonitorItemsDlg,&MonitorItemsDlg::onMonitorCreated); connect(m_pMonitorItemsDlg,&MonitorItemsDlg::generateMonitor,m_pDiagramCavas,&DiagramCavas::onSignal_generate); connect(m_pMonitorPagesDlg,&MonitorPagesDlg::monitorSelected,m_pDiagramCavas,&DiagramCavas::onSignal_monitorSelected); connect(m_pMonitorPagesDlg,&MonitorPagesDlg::prepareSaveMonitor,m_pDiagramCavas,&DiagramCavas::onSignal_saveMonitor); connect(&ProjectManager::instance(),&ProjectManager::prepareUnloadProject,this,&CMainWindow::onAction_unloadEditor); 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_loadProject); connect(ui->actionSave,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onSignal_savePage); connect(ui->actionDelete,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onSignal_deletePage); QAction* actNewEditor = ui->menuFile->addAction(QString::fromWCharArray(L"新建组态")); connect(actNewEditor,&QAction::triggered,this,&CMainWindow::onAction_createEditor); QAction* actRun = ui->menuMode->addAction(QString::fromWCharArray(L"运行")); connect(actRun,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onSignal_runPage); QAction* actEditBay = ui->menuProject->addAction(QString::fromWCharArray(L"管理间隔")); connect(actEditBay,&QAction::triggered,this,&CMainWindow::onAction_editBay); QAction* actEdit = ui->menuProject->addAction(QString::fromWCharArray(L"编辑工程模")); connect(actEdit,&QAction::triggered,this,&CMainWindow::onAction_editProject); ui->menuProject->addSeparator(); _pActMonitor = ui->menuProject->addAction(QString::fromWCharArray(L"管理监控")); _pActMonitor->setCheckable(true); connect(_pActMonitor,&QAction::triggered,this,[&](){ if(!_pActMonitor->isChecked()){ _pActMonitor->setChecked(false); m_pMonitorItemsDock->hide(); m_pMonitorPagesDock->hide(); } else{ _pActMonitor->setChecked(true); m_pMonitorItemsDock->show(); m_pMonitorPagesDock->show(); } }); QAction* testAct = ui->menuTest->addAction(QString::fromWCharArray(L"生成测试基模")); connect(testAct,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onCreateTestBaseModelDiagram); } void CMainWindow::onAction_zoomIn() { //m_pDrawingPanel->grahpicsViewZoomIn(); } void CMainWindow::onAction_zoomOut() { //m_pDrawingPanel->grahpicsViewZoomOut(); } void CMainWindow::onAction_zoomFit() { //m_pDrawingPanel->grahpicsViewZoomFit(); } void CMainWindow::onAction_createGroup() { /*GraphicsItemGroup* group = m_pDrawingPanel->createItemGroup(); if(group) { QGraphicsScene* scene = m_pDrawingPanel->getQGraphicsScene(); QUndoCommand* createItemGropu = new CreateItemGoupCommand(group, scene); m_pUndoStack->push(createItemGropu); }*/ } void CMainWindow::onAction_destroyGroup() { /*QGraphicsScene* scene = m_pDrawingPanel->getQGraphicsScene(); QList listItem = scene->selectedItems(); if(listItem.count() != 1) return; //只能选择一个解组 QGraphicsItem* item = listItem.first(); if(!item) return; GraphicsItemGroup *group = dynamic_cast(item); if(group) { QUndoCommand* destroyItemGropu = new DestroyItemGoupCommand(group, scene); m_pUndoStack->push(destroyItemGropu); }*/ } void CMainWindow::onAction_editProject() { if(m_pProjectModelDlg) m_pProjectModelDlg->show(); } void CMainWindow::onAction_editBay() { m_pDiagramCavas->onSignl_openCurrentBay(); } void CMainWindow::onSignal_addItem(QGraphicsItem* item) { if(item) { QUndoCommand* addItemCommand = new AddItemCommand(item, item->scene()); m_pUndoStack->push(addItemCommand); } } void CMainWindow::onSignal_deleteItem() { /*QGraphicsScene* scene = m_pDrawingPanel->getQGraphicsScene(); if (scene && scene->selectedItems().isEmpty()) return; QUndoCommand* deleteItemCommand = new DeleteItemCommand(scene); m_pUndoStack->push(deleteItemCommand); //push时会自动调用一次command的redo函数*/ } void CMainWindow::onSignal_loadProject() { if(m_pLoadPageDlg == nullptr) { m_pLoadPageDlg = new LoadPageDlg(this); 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(); } void CMainWindow::onAction_createEditor() { if(m_pCreateEdiotr == nullptr){ 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) return m_pGraphicElementsPanel; else { qDebug("get m_pGraphicElementsPanel err"); return NULL; } }