DiagramDesigner/source/mainwindow.cpp

264 lines
9.1 KiB
C++

#include "mainwindow.h"
#include "graphicsItem/graphicsItemGroup.h"
#include "ui_mainwindow.h"
#include <QWidgetAction>
#include <QTableWidget>
#include <QSettings>
#include <QUndoStack>
#include <QGraphicsScene>
#include <QGraphicsItem>
#include <QDockWidget>
#include <QDebug>
#include <QSqlDatabase>
#include <QMessageBox>
#include <QVBoxLayout>
#include "diagramCavas.h"
#include "designerScene.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"
//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;
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_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(m_pProjectModelDlg,&projectModelDlg::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(ui->actionNew,&QAction::triggered,m_pDiagramCavas,&DiagramCavas::onSignal_addPage);
connect(ui->actionOpen,&QAction::triggered,this,&CMainWindow::onSignal_loadPage);
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* actEdit = ui->menuProject->addAction(QString::fromWCharArray(L"编辑工程模"));
connect(actEdit,&QAction::triggered,this,&CMainWindow::onAction_editProject);
QAction* actEditBay = ui->menuBay->addAction(QString::fromWCharArray(L"编辑间隔"));
connect(actEditBay,&QAction::triggered,this,&CMainWindow::onAction_editBay);
}
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<QGraphicsItem*> listItem = scene->selectedItems();
if(listItem.count() != 1)
return; //只能选择一个解组
QGraphicsItem* item = listItem.first();
if(!item)
return;
GraphicsItemGroup *group = dynamic_cast<GraphicsItemGroup*>(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()
{
}
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_loadPage()
{
if(m_pLoadPageDlg == nullptr)
{
m_pLoadPageDlg = new LoadPageDlg(this);
//connect(m_pLoadPageDlg,&LoadPageDlg::selectedPage,m_pDiagramCavas,&DiagramCavas::onSignal_loadPage);
}
m_pLoadPageDlg->updateList();
m_pLoadPageDlg->show();
}
void CMainWindow::onAction_createEditor()
{
if(m_pCreateEdiotr == nullptr){
m_pCreateEdiotr = new CreateEditor(this);
connect(m_pCreateEdiotr,&CreateEditor::createEditor,m_pDiagramCavas,&DiagramCavas::onSignal_createEditPanel);
}
m_pCreateEdiotr->showDlg();
}
GraphicElementsPanel* CMainWindow::graphicsElementsPanel() const
{
if(m_pGraphicElementsPanel)
return m_pGraphicElementsPanel;
else
{
qDebug("get m_pGraphicElementsPanel err");
return NULL;
}
}