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 0000000..1d9dca2 Binary files /dev/null and b/qcd_utils/pult/icons/accessories-text-editor.png differ 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