diff --git a/xmlview.cpp b/xmlview.cpp new file mode 100644 index 0000000000000000000000000000000000000000..75f248fc4685436cd40660895668aa456c2153e6 --- /dev/null +++ b/xmlview.cpp @@ -0,0 +1,139 @@ +#include "xmlview.h" + +XMLView::XMLView(QWidget *parent) + : QMainWindow(parent) +{ + f_resFile = new QFile("resFile.xml"); + f_resFile->open(QIODevice::WriteOnly); + f_resFile->close(); + + QWidget* centralWid = new QWidget(this); + QGridLayout* lyt = new QGridLayout(centralWid); + + parser = new DomModel(this); + m_LabelXML = new QLabel("Xml Файл:"); + m_LabelXQuery = new QLabel("XQuery:"); + + QMenu* menuFile = new QMenu("Файл", this); + menuFile->addAction("Открыть", parser, SLOT(load())); + menuFile->addAction("Закрыть все", parser, SLOT(close())); + menuFile->addSeparator(); + menuFile->addAction("Выйти", qApp, SLOT(quit())); + + menuBar()->addMenu(menuFile); + + + dock = new QDockWidget("Вывод Запроса", this, Qt::Popup); + dock->resize(600, 400); + dock->hide(); + + result = new DomModel(dock); + dock->setWidget(result); + + textEdit = new QTextEdit(this); + QPushButton* execute = new QPushButton("Выполнить"); + connect(execute, SIGNAL(clicked()), SLOT(execute())); + QPushButton* load_xq = new QPushButton("Загрузить файл .xq"); + connect(load_xq, SIGNAL(clicked()), SLOT(loadXq())); + QPalette p = execute->palette(); + p.setColor(execute->foregroundRole(),QColor(0,80,0,180)); + execute->setPalette(p); + QPalette q = load_xq->palette(); + q.setColor(load_xq->foregroundRole(),QColor(200,150,0)); + load_xq->setPalette(q); + lyt->addWidget(m_LabelXML); + lyt->addWidget(parser); + lyt->addWidget(m_LabelXQuery); + lyt->addWidget(textEdit); + lyt->addWidget(execute); + lyt->addWidget(load_xq); + centralWid->setLayout(lyt); + parser->show(); + resize (800, 600); + + setCentralWidget(centralWid); + + connect(parser, SIGNAL(sigSendFile(QFile*)), SLOT(current_file(QFile*))); + + setWindowTitle("XML reader"); +} + + +void XMLView::execute() +{ + bool check = false; + if(f_currentFile == nullptr) + return; + + if(!f_currentFile->open(QIODevice::ReadOnly)) + return; + + QFile techFile("techFile.xml"); + + QString query = textEdit->toPlainText(); + QXmlQuery xml_query(QXmlQuery::XQuery10); + + if (!xml_query.setFocus(f_currentFile)) + { + QMessageBox::warning(this, "Внимание!","Ошибка выполнения запроса!"); + check = true; + } + else + { + xml_query.setQuery(query); + if(!xml_query.isValid()) + { + QMessageBox::warning(this, "Внимание!","Ошибка выполнения запроса! Возможно, запрос составлен неправильно. Проверьте корректность запроса"); + check = true; + } + + techFile.open(QIODevice::WriteOnly); + + QXmlSerializer ser(xml_query, &techFile); + xml_query.evaluateTo(&ser); + + techFile.close(); + techFile.open(QIODevice::ReadOnly); + + f_resFile->open(QIODevice::WriteOnly); + QTextStream stream(f_resFile); + stream << "" << techFile.readAll() << ""; + } + f_currentFile->close(); + + f_resFile->close(); + f_resFile->open(QIODevice::ReadOnly); + + if (!check) { + dock->setFloating(true); + dock->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetClosable); + dock->setAllowedAreas(Qt::NoDockWidgetArea); + dock->show(); + } + + result->simpleLoad(f_resFile->fileName()); + + f_resFile->close(); + +} + + + +void XMLView::loadXq() +{ + QString directory = QFileDialog::getOpenFileName(this, "Query File", "", "*.xq"); + if (!directory.isEmpty()) + { + QFile file(directory); + if (file.open(QIODevice::ReadOnly)) + { + QString query = file.readAll(); + file.close(); + textEdit->setText(query); + } + } + +} +XMLView::~XMLView() +{ +}