From b8d8c4b56d6ed22c37c959971ac4b1d34c8d2714 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Tue, 17 Jul 2018 12:35:27 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@415 a8b55f48-bf90-11e4-a774-851b48703e85 --- cd_utils/cdutils_core.cpp | 57 ++++++++++++++ cd_utils/cdutils_core.h | 12 ++- cd_utils/cdutils_interface.cpp | 7 ++ cd_utils/cdutils_m.cpp | 22 ++++++ cd_utils/cdutils_m.h | 36 +++++++++ cd_utils/cdutils_parser.cpp | 9 ++- cd_utils/cdutils_protocol.h | 31 ++++---- cd_utils/cdutils_types.cpp | 6 +- cd_utils/cdutils_types.h | 16 ++-- cd_utils/cdutilstest.cpp | 7 +- cd_utils/k_description.h | 6 ++ qad/widgets/evalspinbox.cpp | 1 + qcd_utils/pult/cdpult.qrc | 11 +-- qcd_utils/pult/cdpultwindow.cpp | 27 ++++++- qcd_utils/pult/cdpultwindow.h | 2 + qcd_utils/pult/cdpultwindow.ui | 70 +++++++++++++++--- .../pult/icons/accessories-text-editor.png | Bin 0 -> 36782 bytes qcd_utils/qcd_view.cpp | 30 ++++++++ qcd_utils/qcd_view.h | 2 + 19 files changed, 309 insertions(+), 43 deletions(-) create mode 100644 cd_utils/cdutils_m.cpp create mode 100644 cd_utils/cdutils_m.h create mode 100644 qcd_utils/pult/icons/accessories-text-editor.png diff --git a/cd_utils/cdutils_core.cpp b/cd_utils/cdutils_core.cpp index ea05474..dfa3a53 100644 --- a/cd_utils/cdutils_core.cpp +++ b/cd_utils/cdutils_core.cpp @@ -61,6 +61,7 @@ CDCore::CDCore() { setName("CDCore"); datatr.setPacketSize(960); CONNECTU(&connection, dataReceivedEvent, this, dataReceived); + CONNECTU(PICout::Notifier::object(), finished, this, piCoutFinished); /*PIString s(app_config); connection.configureFromString(&s); connection.start();*/ @@ -68,9 +69,11 @@ CDCore::CDCore() { k_.cd_type_ = CDType::cdK; x_.cd_type_ = CDType::cdX; c_.cd_type_ = CDType::cdC; + m_.cd_type_ = CDType::cdM; initRoot(&k_); initRoot(&x_); initRoot(&c_); + initRoot(&m_); CONNECTU(&datatr, sendRequest, this, dtSendRequest) CONNECTU(&datatr, receiveFinished, this, dtReceiveFinished) @@ -169,6 +172,7 @@ void CDCore::send(CDType::cdT cdt) { case CDType::cdK: pt = CD_KSend; break; case CDType::cdX: pt = CD_XSend; break; case CDType::cdC: pt = CD_CSend; break; + case CDType::cdM: pt = CD_MSend; break; default: break; } piCoutObj << "send" << typeLetter(cdt); @@ -182,6 +186,7 @@ void CDCore::request(CDType::cdT cdt) { case CDType::cdK: pt = CD_KQuery; break; case CDType::cdX: pt = CD_XQuery; break; case CDType::cdC: pt = CD_CQuery; break; + case CDType::cdM: pt = CD_MQuery; break; default: break; } piCoutObj << "request" << typeLetter(cdt); @@ -253,11 +258,20 @@ void CDCore::registerCHandler(const CDType & c, PIObject * o, Handler h) { } +void CDCore::sendMessage(const CDType & m, MessageType mt, const PIString & msg) { + if (msg.isEmpty() || (m.cd_type() != CDType::cdM)) return; + PIByteArray sba = makeHeader(CD_Message, 0); + sba << m.path() << int(mt) << msg; + sendDirect(sba); +} + + CDSection * CDCore::root(CDType::cdT cdt) { switch (cdt) { case CDType::cdK: return &k_; break; case CDType::cdX: return &x_; break; case CDType::cdC: return &c_; break; + case CDType::cdM: return &m_; break; default: break; } return 0; @@ -269,6 +283,7 @@ PIString CDCore::typeLetter(CDType::cdT cdt) { case CDType::cdK: return PIStringAscii("k"); break; case CDType::cdX: return PIStringAscii("x"); break; case CDType::cdC: return PIStringAscii("c"); break; + case CDType::cdM: return PIStringAscii("m"); break; default: break; } return PIString(); @@ -320,6 +335,13 @@ void CDCore::sendThread() { case CD_CQuery: if (!ok) C_ReceiveFail(); break; + case CD_MSend: + if (ok) M_Sended(); + else M_SendFail(); + break; + case CD_MQuery: + if (!ok) M_ReceiveFail(); + break; default: break; } } @@ -351,6 +373,15 @@ void CDCore::xTimerTick() { } +void CDCore::piCoutFinished(int id, PIString * buffer) { + if (!buffer || !(id == 1)) return; + PIString sp = buffer->takeRange("[", "]"); + PIDeque p = CDCore::stringToPath(sp); + sendMessage(m_[p], Log, *buffer); + delete buffer; +} + + void CDCore::initRoot(CDSection * r) { r->name = "__root__"; r->alias = "root"; @@ -470,6 +501,31 @@ void CDCore::procReceivedPacket(PIByteArray & ba) { //piCoutObj << "found" << sp << h.first; if (h.first && h.second) h.second(h.first); } break; + case CD_MQuery: + send(CDType::cdM); + break; + case CD_MSend: { + piCoutObj << "M received"; + PIByteArray c; + ba >> c; + c << uchar(0); + PIString s = PIString::fromUTF8((const char *)c.data()); + PIIOString ios(&s); + cd_read(&m_, &ios); + M_Received(); + } break; + case CD_Message: { + PIDeque p; + ba >> p; + piCoutObj << "M message" << p; + if (p.isEmpty()) return; + int t = 0; + PIString msg; + ba >> t >> msg; + //piCoutObj << "found" << sp << h.first; + //piCoutObj << "M message invoke"; + M_Message(p, t, msg); + } break; default: break; } } @@ -480,6 +536,7 @@ void CDCore::raiseChangedGlobal(CDType::cdT cdt) { case CDType::cdK: K_ChangedGlobal(); break; case CDType::cdX: X_ChangedGlobal(); break; case CDType::cdC: C_ChangedGlobal(); break; + case CDType::cdM: M_ChangedGlobal(); break; default: break; } } diff --git a/cd_utils/cdutils_core.h b/cd_utils/cdutils_core.h index b6ef02f..7db457b 100644 --- a/cd_utils/cdutils_core.h +++ b/cd_utils/cdutils_core.h @@ -51,6 +51,13 @@ public: EVENT(C_ReceiveFail) EVENT(C_ChangedGlobal) + EVENT(M_Sended) + EVENT(M_SendFail) + EVENT(M_Received) + EVENT(M_ReceiveFail) + EVENT(M_ChangedGlobal) + EVENT3(M_Message, PIDeque, path, int, type, PIString, msg) + void cd_write (CDSection * cd, PIIODevice * d); void cd_read (CDSection * cd, PIIODevice * d); void cd_parse (CDSection * cd, PIIODevice * d); @@ -69,8 +76,8 @@ public: void sendCommand(const CDType & c); void registerCHandler(const CDType & c, PIObject * o, Handler h); bool inProgress() {return sendt.isRunning();} + void sendMessage(const CDType & m, MessageType mt, const PIString & msg); - CDSection & k() {return k_;} CDSection * root(CDType::cdT cdt); PIString typeLetter(CDType::cdT cdt); static PIString pathToString(const PIDeque & p); @@ -87,6 +94,7 @@ private: EVENT_HANDLER1(void, dtReceiveFinished, bool, ok); EVENT_HANDLER(void, sendThread); EVENT_HANDLER(void, xTimerTick); + EVENT_HANDLER2(void, piCoutFinished, int, id, PIString*, buffer); void initRoot(CDSection * r); PIByteArray makeHeader(CDPacketType type, int session_id = 0) const; void sendDirect(PIByteArray & ba); @@ -102,7 +110,7 @@ private: PIByteArray send_data; PIThread sendt; PITimer x_timer; - CDSection k_, x_, c_; + CDSection k_, x_, c_, m_; PIMutex x_mutex; PIVector > x_selected; PIMap c_handlers; diff --git a/cd_utils/cdutils_interface.cpp b/cd_utils/cdutils_interface.cpp index 5fb7029..2967801 100644 --- a/cd_utils/cdutils_interface.cpp +++ b/cd_utils/cdutils_interface.cpp @@ -35,6 +35,13 @@ Interface::Interface(CDType::cdT type_) { CONNECTU(core, C_ReceiveFail, this, receiveFailed); CONNECTU(core, C_ChangedGlobal, this, changedGlobal); break; + case CDType::cdM: + CONNECTU(core, M_Sended, this, sended); + CONNECTU(core, M_SendFail, this, sendFailed); + CONNECTU(core, M_Received, this, received); + CONNECTU(core, M_ReceiveFail, this, receiveFailed); + CONNECTU(core, M_ChangedGlobal, this, changedGlobal); + break; default: break; } } diff --git a/cd_utils/cdutils_m.cpp b/cd_utils/cdutils_m.cpp new file mode 100644 index 0000000..cd326cd --- /dev/null +++ b/cd_utils/cdutils_m.cpp @@ -0,0 +1,22 @@ +#include "cdutils_m.h" +#include "cdutils_core.h" + +using namespace CDUtils; + +MInterface M; + + +MInterface::MInterface(): Interface(CDType::cdM) { + CONNECTU(core, M_Message, this, messageReceived); +} + + +void MInterface::messageBox(const CDType & m, const PIString & msg) { + core->sendMessage(m, MessageBox, msg); +} + + +PICout MInterface::createPICout(const CDType & m) const { + PIString * buff = new PIString("[" + CDCore::pathToString(m.path()) + "]"); + return PICout(buff, 1); +} diff --git a/cd_utils/cdutils_m.h b/cd_utils/cdutils_m.h new file mode 100644 index 0000000..cbc73e8 --- /dev/null +++ b/cd_utils/cdutils_m.h @@ -0,0 +1,36 @@ +#ifndef CDUTILS_M_H +#define CDUTILS_M_H + +#include "cdutils_interface.h" + + +namespace CDUtils { + + +class MInterface: public Interface +{ + PIOBJECT_SUBCLASS(MInterface, Interface) +public: + MInterface(); + + PICout operator [](int v) {return createPICout((*s)[v]);} + PICout operator [](int v) const {return createPICout((*s)[v]);} + PICout operator [](const PIString & name_) {return createPICout((*s)[name_]);} + PICout operator [](const PIString & name_) const {return createPICout((*s)[name_]);} + PICout operator [](const PIDeque & path_) {return createPICout((*s)[path_]);} + PICout operator [](const PIDeque & path_) const {return createPICout((*s)[path_]);} + + void messageBox(const CDType & m, const PIString & msg); + + EVENT3(messageReceived, PIDeque, path, int, type, PIString, msg) + +private: + PICout createPICout(const CDType & m) const; + +}; + +} + +extern CDUtils::MInterface M; + +#endif // CDUTILS_M_H diff --git a/cd_utils/cdutils_parser.cpp b/cd_utils/cdutils_parser.cpp index 1825ff2..a637e9d 100644 --- a/cd_utils/cdutils_parser.cpp +++ b/cd_utils/cdutils_parser.cpp @@ -184,10 +184,11 @@ CDSection CDParser::parse(PIIODevice * d, int cdsection_type) { } // piCout << "[CDSection] parse end"; switch (et) { - case CDType::cdK : return sections.value("KDescription"); - case CDType::cdX : return sections.value("XDescription"); - case CDType::cdC : return sections.value("CDescription"); - default: return CDSection(et); + case CDType::cdK: return sections.value("KDescription"); + case CDType::cdX: return sections.value("XDescription"); + case CDType::cdC: return sections.value("CDescription"); + case CDType::cdM: return sections.value("MDescription"); + default: return CDSection(et); } return CDSection(et); } diff --git a/cd_utils/cdutils_protocol.h b/cd_utils/cdutils_protocol.h index df9c91b..b835359 100644 --- a/cd_utils/cdutils_protocol.h +++ b/cd_utils/cdutils_protocol.h @@ -5,22 +5,27 @@ namespace CDUtils { -enum CDPacketType {CD_Ping, - CD_Pong, + enum CDPacketType { + CD_Ping, + CD_Pong, - CD_KQuery, - CD_KSend, - CD_KDirectChange, + CD_KQuery, + CD_KSend, + CD_KDirectChange, - CD_XQuery, - CD_XSend, - CD_XRequest, - CD_XValues, + CD_XQuery, + CD_XSend, + CD_XRequest, + CD_XValues, - CD_CQuery, - CD_CSend, - CD_Command, - }; + CD_CQuery, + CD_CSend, + CD_Command, + + CD_MQuery, + CD_MSend, + CD_Message, + }; # pragma pack(push,1) diff --git a/cd_utils/cdutils_types.cpp b/cd_utils/cdutils_types.cpp index d900577..ae8ce05 100644 --- a/cd_utils/cdutils_types.cpp +++ b/cd_utils/cdutils_types.cpp @@ -437,7 +437,7 @@ void CDSection::write(PIIODevice * d, const PIString & prefix) { // piCout << "[CDSection] write start"; PIString l; PIStringList cdtl; - cdtl << "null" << "k" << "x" << "c"; + cdtl << "null" << "k" << "x" << "c" << "m"; if (prefix.isEmpty()) l = "[" + cdtl[cd_type_] + "]"; else l = "[" + prefix + "." + cdtl[cd_type_] + "]"; l += "\n"; @@ -478,6 +478,7 @@ void CDSection::write(PIIODevice * d, const PIString & prefix) { d->write(l.toUTF8()); break; case CDType::cdC: + case CDType::cdM: l.clear(); l << ck.index() << ".name = " << ck.name() << " #s " << ck.comment() << " \n"; d->write(l.toUTF8()); break; @@ -502,7 +503,7 @@ void CDSection::write(PIIODevice * d, const PIString & prefix) { void CDSection::read(const void * ep) { // piCout << "[CDSection] read start"; PIStringList cdtl; - cdtl << "null" << "k" << "x" << "c"; + cdtl << "null" << "k" << "x" << "c" << "m"; cd.clear(); s.clear(); PIConfig::Entry & e(*(PIConfig::Entry*)ep); @@ -534,6 +535,7 @@ void CDSection::read(const void * ep) { c.x_enabled = e->getValue("sel", false).value().toBool(); break; case CDType::cdC: + case CDType::cdM: c = CDType(id, e->getValue("name").value(), PIString(), PIString(), PIString() , e->getValue("name").comment(), cd_type_); break; } diff --git a/cd_utils/cdutils_types.h b/cd_utils/cdutils_types.h index 41443e5..676020c 100644 --- a/cd_utils/cdutils_types.h +++ b/cd_utils/cdutils_types.h @@ -21,6 +21,11 @@ enum UpdateMode { Merge = 0x04 }; +enum MessageType { + Log = 1, + MessageBox, +}; + typedef PIFlags UpdateModeFlags; class CDType { @@ -29,7 +34,7 @@ class CDType { friend class Interface; friend class XInterface; public: - enum cdT {cdNull, cdK, cdX, cdC}; + enum cdT {cdNull, cdK, cdX, cdC, cdM}; enum XMode {X_Current, X_All_Avg}; CDType(); @@ -153,10 +158,11 @@ inline PICout operator <<(PICout s, const CDUtils::CDType & v) { s.space(); s.setControl(0, true); switch (v.cd_type()) { - case CDUtils::CDType::cdK : s << "K["; break; - case CDUtils::CDType::cdX : s << "X["; break; - case CDUtils::CDType::cdC : s << "C["; break; - default : s << "Null["; break; + case CDUtils::CDType::cdK : s << "K["; break; + case CDUtils::CDType::cdX : s << "X["; break; + case CDUtils::CDType::cdC : s << "C["; break; + case CDUtils::CDType::cdM : s << "M["; break; + default : s << "Null["; break; } s << v.name() << "(" << v.index() << ")] = " << v.value(); s.restoreControl(); diff --git a/cd_utils/cdutilstest.cpp b/cd_utils/cdutilstest.cpp index ba102d8..35603d4 100644 --- a/cd_utils/cdutilstest.cpp +++ b/cd_utils/cdutilstest.cpp @@ -1,6 +1,7 @@ #include "cdutils_k.h" #include "cdutils_x.h" #include "cdutils_c.h" +#include "cdutils_m.h" #include "cdutils_core.h" #include "cdtest.h" #include "pip.h" @@ -72,7 +73,11 @@ class Core : public PIObject } EVENT_HANDLER(void, timerDone) {test();} EVENT_HANDLER(void, cmd) {piCout << "command cmd";} - EVENT_HANDLER(void, c_Pause) {piCout << "command pause";} + EVENT_HANDLER(void, c_Pause) { + piCout << "command pause"; + M[KD::Main] << "rec command" << C[KD::Pause]; + M.messageBox(M.root()[KD::Core], "init successfull"); + } EVENT_HANDLER(void, c_Spectrometer_Connection) {piCout << "command spec_conn";} private: diff --git a/cd_utils/k_description.h b/cd_utils/k_description.h index 3723ee7..09d53ce 100644 --- a/cd_utils/k_description.h +++ b/cd_utils/k_description.h @@ -136,6 +136,12 @@ enum CDescription { Pause, //b Global fourier enable flag }; +enum MDescription { + Main, //b + Core, //s + Warnings, //b Global fourier enable flag +}; + } #endif // K_DESCRIPTION_H diff --git a/qad/widgets/evalspinbox.cpp b/qad/widgets/evalspinbox.cpp index 53353f4..a0a297e 100644 --- a/qad/widgets/evalspinbox.cpp +++ b/qad/widgets/evalspinbox.cpp @@ -279,6 +279,7 @@ void EvalSpinBox::wheelEvent(QWheelEvent * event) { void EvalSpinBox::stepByDouble(double steps) { //qDebug() << "step" << steps; + if (isReadOnly()) return; QString t = text(); if (eval.check(t)) { t = eval.expression(); diff --git a/qcd_utils/pult/cdpult.qrc b/qcd_utils/pult/cdpult.qrc index b3dc107..76a8d63 100644 --- a/qcd_utils/pult/cdpult.qrc +++ b/qcd_utils/pult/cdpult.qrc @@ -7,9 +7,10 @@ icons/dialog-cancel.png icons/dialog-ok-apply.png icons/timer.png - icons/document-revert.png - icons/flame.png - icons/view-refresh.png - icons/format-stroke-color.png - + icons/document-revert.png + icons/flame.png + icons/view-refresh.png + icons/format-stroke-color.png + icons/accessories-text-editor.png + diff --git a/qcd_utils/pult/cdpultwindow.cpp b/qcd_utils/pult/cdpultwindow.cpp index 91ba3f3..e4acefa 100644 --- a/qcd_utils/pult/cdpultwindow.cpp +++ b/qcd_utils/pult/cdpultwindow.cpp @@ -3,6 +3,7 @@ #include "cdutils_core.h" #include "cdutils_k.h" #include "cdutils_x.h" +#include "cdutils_m.h" #include "qcd_core.h" #include "qcd_view.h" #include "qcd_model.h" @@ -15,6 +16,7 @@ #include #include #include +#include using namespace CDUtils; @@ -30,9 +32,11 @@ CDPultWindow::CDPultWindow(QWidget *parent) : EMainWindow(parent), Ui::CDPultWin widgetK->setType(CDUtils::CDType::cdK); widgetX->setType(CDUtils::CDType::cdX); widgetC->setType(CDUtils::CDType::cdC); + widgetM->setType(CDUtils::CDType::cdM); editFileK->setValue(QVariant::fromValue(QAD::File("", "*.dat"))); editFileX->setValue(QVariant::fromValue(QAD::File("", "*.dat"))); editFileC->setValue(QVariant::fromValue(QAD::File("", "*.dat"))); + editFileM->setValue(QVariant::fromValue(QAD::File("", "*.dat"))); log_icons[CDViewWidget::OKIcon] = QIcon(":/icons/dialog-ok-apply.png"); log_icons[CDViewWidget::FailIcon] = QIcon(":/icons/dialog-cancel.png"); log_icons[CDViewWidget::WaitIcon] = QIcon(":/icons/timer.png"); @@ -46,9 +50,11 @@ CDPultWindow::CDPultWindow(QWidget *parent) : EMainWindow(parent), Ui::CDPultWin connect(widgetK, SIGNAL(addToLog(CDViewWidget::LogIcon,QString)), this, SLOT(addToLog(CDViewWidget::LogIcon,QString))); connect(widgetX, SIGNAL(addToLog(CDViewWidget::LogIcon,QString)), this, SLOT(addToLog(CDViewWidget::LogIcon,QString))); connect(widgetC, SIGNAL(addToLog(CDViewWidget::LogIcon,QString)), this, SLOT(addToLog(CDViewWidget::LogIcon,QString))); + connect(widgetM, SIGNAL(addToLog(CDViewWidget::LogIcon,QString)), this, SLOT(addToLog(CDViewWidget::LogIcon,QString))); connect(widgetK->view, SIGNAL(changedGlobal()), widgetDirectK, SLOT(changedGlobal())); connect(widgetX->view, SIGNAL(changedGlobal()), widgetGraphics, SLOT(changedGlobal())); connect(widgetX->view, SIGNAL(receivedX()), widgetGraphics, SLOT(receivedX())); + connect(widgetM->view, SIGNAL(messageReceived(QString,int,QString)), this, SLOT(messageReceived(QString,int,QString))); QCDCore::instance()->bindWidget(widgetK->view); QCDCore::instance()->setDirectKEnabled(true); X.start(); @@ -71,6 +77,7 @@ void CDPultWindow::apply(bool sessions) { widgetK->setFile(editFileK->value().value().file); widgetX->setFile(editFileX->value().value().file); widgetC->setFile(editFileC->value().value().file); + widgetM->setFile(editFileM->value().value().file); if (checkDefaultConfig->isChecked()) CDCore::instance()->initPult(); else @@ -92,6 +99,7 @@ void CDPultWindow::apply(bool sessions) { dockCDKView->setVisible(checkHasK->isChecked()); dockCDXView->setVisible(checkHasX->isChecked()); dockCDCView->setVisible(checkHasC->isChecked()); + dockCDMView->setVisible(checkHasM->isChecked()); QMetaObject::invokeMethod(this, "changedDock", Qt::QueuedConnection); } @@ -121,6 +129,7 @@ bool CDPultWindow::load(const QString & path) { editFileK->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_k").value(), f.filter))); editFileX->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_x").value(), f.filter))); editFileC->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_c").value(), f.filter))); + editFileM->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_m").value(), f.filter))); checkSyncFiles->setChecked(conf.getValue("sync_files")); lineSessionName->setText(conf.getValue("session_name")); last_icon = conf.getValue("icon_path", "").value(); @@ -128,6 +137,7 @@ bool CDPultWindow::load(const QString & path) { checkHasK->setChecked(conf.getValue("has_k")); checkHasX->setChecked(conf.getValue("has_x")); checkHasC->setChecked(conf.getValue("has_c")); + checkHasM->setChecked(conf.getValue("has_m")); checkDefaultConfig->setChecked(conf.getValue("default_config")); codeConfig->setText(QByteArray2QString(conf.getValue("config", QByteArray()))); if (codeConfig->text().isEmpty()) @@ -152,6 +162,7 @@ bool CDPultWindow::save(const QString & path) { conf.setValue("file_k", editFileK->value().value().file); conf.setValue("file_x", editFileX->value().value().file); conf.setValue("file_c", editFileC->value().value().file); + conf.setValue("file_m", editFileM->value().value().file); conf.setValue("sync_files", checkSyncFiles->isChecked()); conf.setValue("session_name", lineSessionName->text()); conf.setValue("icon_path", last_icon); @@ -159,7 +170,7 @@ bool CDPultWindow::save(const QString & path) { conf.setValue("has_k", checkHasK->isChecked()); conf.setValue("has_x", checkHasX->isChecked()); conf.setValue("has_c", checkHasC->isChecked()); - conf.setValue("has_c", checkHasC->isChecked()); + conf.setValue("has_m", checkHasM->isChecked()); conf.setValue("default_config", checkDefaultConfig->isChecked()); conf.setValue("config", QString2QByteArray(codeConfig->text())); conf.setValue("session_gr", session_gr); @@ -215,18 +226,29 @@ void CDPultWindow::addToLog(CDViewWidget::LogIcon icon, const QString & msg) { } +void CDPultWindow::messageReceived(QString path, int type, QString msg) { + MessageType mt = (MessageType)type; + const CDType & t(M.root()[CDCore::stringToPath(Q2PIString(path))]); + if (t.cd_type() != CDType::cdM) return; + if (mt == MessageBox) + QMessageBox::information(this, windowTitle(), QString("[%1]\n%2").arg(PI2QString(t.name()), msg)); +} + + void CDPultWindow::on_editFileK_valueChanged(const QVariant & p) { if (!checkSyncFiles->isChecked()) return; QFileInfo fi(p.value().file); if (fi.path().isEmpty()) return; QString n = fi.baseName(); - QString xn(n), cn(n); + QString xn(n), cn(n), mn(n); if (n.contains("k")) { xn.replace(n.indexOf("k"), 1, "x"); cn.replace(n.indexOf("k"), 1, "c"); + mn.replace(n.indexOf("k"), 1, "m"); } else { xn += "_x"; cn += "_c"; + mn += "_m"; } QString ext = fi.suffix(), dot, dir; QString kfn(fi.filePath()); @@ -245,6 +267,7 @@ void CDPultWindow::on_editFileK_valueChanged(const QVariant & p) { QAD::File f = editFileK->value().value(); f.file = dir + xn + dot + ext; editFileX->setValue(QVariant::fromValue(f)); f.file = dir + cn + dot + ext; editFileC->setValue(QVariant::fromValue(f)); + f.file = dir + mn + dot + ext; editFileM->setValue(QVariant::fromValue(f)); } diff --git a/qcd_utils/pult/cdpultwindow.h b/qcd_utils/pult/cdpultwindow.h index 92e027e..6e8c499 100644 --- a/qcd_utils/pult/cdpultwindow.h +++ b/qcd_utils/pult/cdpultwindow.h @@ -41,6 +41,8 @@ private: private slots: void addToLog(CDViewWidget::LogIcon icon, const QString & msg); + void messageReceived(QString path, int type, QString msg); + void on_editFileK_valueChanged(const QVariant & p); void on_buttonSessionApply_clicked(); diff --git a/qcd_utils/pult/cdpultwindow.ui b/qcd_utils/pult/cdpultwindow.ui index f8c7e2d..e7a1904 100644 --- a/qcd_utils/pult/cdpultwindow.ui +++ b/qcd_utils/pult/cdpultwindow.ui @@ -218,14 +218,14 @@ - + Sync files - + @@ -248,15 +248,32 @@ + + + + M + + + - + Default config + + + + M file: + + + + + + @@ -342,6 +359,25 @@ device.cd = eth://udp:${ip.pult}:27002:${ip.app}:27001 #s + + + + :/icons/accessories-text-editor.png:/icons/accessories-text-editor.png + + + M + + + 1 + + + + + + + + + @@ -516,11 +552,11 @@ device.cd = eth://udp:${ip.pult}:27002:${ip.app}:27001 #s 786 - 227 + 220 786 - 179 + 151 @@ -532,11 +568,11 @@ device.cd = eth://udp:${ip.pult}:27002:${ip.app}:27001 #s 786 - 227 + 220 786 - 200 + 172 @@ -547,8 +583,8 @@ device.cd = eth://udp:${ip.pult}:27002:${ip.app}:27001 #s setDisabled(bool) - 579 - 280 + 786 + 276 581 @@ -556,5 +592,21 @@ device.cd = eth://udp:${ip.pult}:27002:${ip.app}:27001 #s + + checkSyncFiles + toggled(bool) + editFileM + setDisabled(bool) + + + 767 + 205 + + + 767 + 187 + + + diff --git a/qcd_utils/pult/icons/accessories-text-editor.png b/qcd_utils/pult/icons/accessories-text-editor.png new file mode 100644 index 0000000000000000000000000000000000000000..1d9dca26221995e8939ccb7294cec284ed6ae5ba GIT binary patch literal 36782 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

(C4f(<`o2|&R5 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 VWO1`r?N10izTStu8V^M0{s$gRkv#wa literal 0 HcmV?d00001 diff --git a/qcd_utils/qcd_view.cpp b/qcd_utils/qcd_view.cpp index e7fe4d1..1edec79 100644 --- a/qcd_utils/qcd_view.cpp +++ b/qcd_utils/qcd_view.cpp @@ -3,6 +3,7 @@ #include "cdutils_k.h" #include "cdutils_x.h" #include "cdutils_c.h" +#include "cdutils_m.h" #include "cdutils_core.h" #include "qcd_view.h" #include "qcd_model.h" @@ -58,6 +59,14 @@ void CDView::setType(int cdt) { CONNECTU(&C, receiveFailed, this, pi_cd_receiveFailed); CONNECTU(&C, changedGlobal, this, pi_cd_changedGlobal); break; + case CDType::cdM: + CONNECTU(&M, sended, this, pi_cd_sendSucceed); + CONNECTU(&M, sendFailed, this, pi_cd_sendFailed); + CONNECTU(&M, received, this, pi_cd_receiveSucceed); + CONNECTU(&M, receiveFailed, this, pi_cd_receiveFailed); + CONNECTU(&M, changedGlobal, this, pi_cd_changedGlobal); + CONNECTU(&M, messageReceived, this, pi_cd_messageReceived); + break; default: break; } @@ -112,6 +121,7 @@ void CDView::refresh() { setColumnHidden(cExpression, true); break; case CDType::cdC: + case CDType::cdM: setColumnHidden(cType, true); setColumnHidden(cXMode, true); setColumnHidden(cXAvg, true); @@ -136,6 +146,7 @@ void CDView::setFile(const QString & filename) { case CDType::cdK: K.setFileName(Q2PIString(filename)); break; case CDType::cdX: X.setFileName(Q2PIString(filename)); break; case CDType::cdC: C.setFileName(Q2PIString(filename)); break; + case CDType::cdM: M.setFileName(Q2PIString(filename)); break; default: break; } } @@ -146,6 +157,7 @@ bool CDView::inProgress() const { case CDType::cdK: return K.inProgress(); break; case CDType::cdX: return X.inProgress(); break; case CDType::cdC: return C.inProgress(); break; + case CDType::cdM: return M.inProgress(); break; default: break; } return false; @@ -176,6 +188,7 @@ void CDView::send() { case CDType::cdK: K.send(); break; case CDType::cdX: X.send(); break; case CDType::cdC: C.send(); break; + case CDType::cdM: M.send(); break; default: break; } } @@ -187,6 +200,7 @@ void CDView::receive() { case CDType::cdK: K.request(); break; case CDType::cdX: X.request(); break; case CDType::cdC: C.request(); break; + case CDType::cdM: M.request(); break; default: break; } } @@ -197,6 +211,7 @@ void CDView::save() { case CDType::cdK: K.writeFile(); break; case CDType::cdX: X.writeFile(); break; case CDType::cdC: C.writeFile(); break; + case CDType::cdM: M.writeFile(); break; default: break; } } @@ -216,6 +231,10 @@ void CDView::load() { C.readFile(); C.calculate(); break; + case CDType::cdM: + M.readFile(); + M.calculate(); + break; default: break; } refresh(); @@ -228,6 +247,7 @@ void CDView::clear() { case CDType::cdK: K.root() = CDSection(); break; case CDType::cdX: X.root() = CDSection(); break; case CDType::cdC: C.root() = CDSection(); break; + case CDType::cdM: M.root() = CDSection(); break; default: break; } refresh(); @@ -242,6 +262,7 @@ void CDView::buildFromHeader(const QString & description, int mode) { case CDType::cdK: K.update(&f, mode); break; case CDType::cdX: X.update(&f, mode); break; case CDType::cdC: C.update(&f, mode); break; + case CDType::cdM: M.update(&f, mode); break; default: break; } refresh(); @@ -253,6 +274,7 @@ void CDView::calculate() { case CDType::cdK: K.calculate(); break; case CDType::cdX: X.calculate(); break; case CDType::cdC: C.calculate(); break; + case CDType::cdM: M.calculate(); break; default: break; } } @@ -321,3 +343,11 @@ void CDView::cd_receivedX() { void CDView::cd_changedGlobal() { emit changedGlobal(); } + + +void CDView::pi_cd_messageReceived(PIDeque path, int type, PIString msg) { + QMetaObject::invokeMethod(this, "messageReceived", Qt::QueuedConnection, + Q_ARG(QString, PI2QString(CDCore::pathToString(path))), + Q_ARG(int, type), + Q_ARG(QString, PI2QString(msg))); +} diff --git a/qcd_utils/qcd_view.h b/qcd_utils/qcd_view.h index 961fcc4..de21062 100644 --- a/qcd_utils/qcd_view.h +++ b/qcd_utils/qcd_view.h @@ -60,6 +60,7 @@ private: EVENT_HANDLER(void, pi_cd_receiveSucceed) {emit _qcd_receiveSucceed();} EVENT_HANDLER(void, pi_cd_receivedX) {emit _qcd_receivedX();} EVENT_HANDLER(void, pi_cd_changedGlobal) {emit _qcd_changedGlobal();} + EVENT_HANDLER3(void, pi_cd_messageReceived, PIDeque, path, int, type, PIString, msg); CDItemModel * model_; int type_; @@ -73,6 +74,7 @@ signals: void changedGlobal(); void messageStatus(QString msg); void commandSended(QString msg); + void messageReceived(QString path, int type, QString msg); void busyStatusChanged(bool busy); void _qcd_sendFailed(); // PRIVATE