diff --git a/qcd_utils/pult/cdgraphics.cpp b/qcd_utils/pult/cdgraphics.cpp new file mode 100644 index 0000000..f29d94e --- /dev/null +++ b/qcd_utils/pult/cdgraphics.cpp @@ -0,0 +1,17 @@ +#include "cdgraphics.h" +#include "cdutils_core.h" +#include "qcd_core.h" +#include "qcd_model.h" + + +CDGraphics::CDGraphics(QWidget * parent) : QWidget(parent), Ui::CDGraphics() { + setupUi(this); +} + + +CDGraphics::~CDGraphics() { +} + + +void CDGraphics::reset() { +} diff --git a/qcd_utils/pult/cdgraphics.h b/qcd_utils/pult/cdgraphics.h new file mode 100644 index 0000000..9b83bf2 --- /dev/null +++ b/qcd_utils/pult/cdgraphics.h @@ -0,0 +1,25 @@ +#ifndef CDGRAPHICS_H +#define CDGRAPHICS_H + +#include +#include "ui_cdgraphics.h" + + +class CDGraphics : public QWidget, public Ui::CDGraphics +{ + Q_OBJECT +public: + explicit CDGraphics(QWidget *parent = 0); + ~CDGraphics(); + + void reset(); + +private: + +private slots: + +signals: + +}; + +#endif // CDGRAPHICS_H diff --git a/qcd_utils/pult/cdgraphics.ui b/qcd_utils/pult/cdgraphics.ui new file mode 100644 index 0000000..ec8c364 --- /dev/null +++ b/qcd_utils/pult/cdgraphics.ui @@ -0,0 +1,19 @@ + + + CDGraphics + + + + 0 + 0 + 689 + 459 + + + + CD Pult + + + + + diff --git a/qcd_utils/pult/cdpult.qrc b/qcd_utils/pult/cdpult.qrc index 6558e69..59858dc 100644 --- a/qcd_utils/pult/cdpult.qrc +++ b/qcd_utils/pult/cdpult.qrc @@ -7,5 +7,8 @@ icons/dialog-cancel.png icons/dialog-ok-apply.png icons/timer.png - + icons/document-revert.png + icons/flame.png + icons/view-refresh.png + diff --git a/qcd_utils/pult/cdpultwindow.cpp b/qcd_utils/pult/cdpultwindow.cpp index e374131..f909b72 100644 --- a/qcd_utils/pult/cdpultwindow.cpp +++ b/qcd_utils/pult/cdpultwindow.cpp @@ -1,41 +1,43 @@ -#include +#include "edockwidget.h" #include "cdpultwindow.h" -#include "ui_cdpultwindow.h" #include "cdutils_k.h" #include "cdutils_core.h" #include "qcd_core.h" -#include "qcd_kmodel.h" +#include "qcd_model.h" #include "qcd_modedialog.h" +#include "chunkstream.h" +#include "qvariantedit.h" #include #include -CDPultWindow::CDPultWindow(QWidget *parent) : EMainWindow(parent), ui(new Ui::CDPultWindow) { - CDUtils::CDCore::instance()->initPult(); - qRegisterMetaType("LogIcon"); - log_icons[OKIcon] = QIcon(":/icons/dialog-ok-apply.png"); - log_icons[FailIcon] = QIcon(":/icons/dialog-cancel.png"); - log_icons[WaitIcon] = QIcon(":/icons/timer.png"); - ui->setupUi(this); +CDPultWindow::CDPultWindow(QWidget *parent) : EMainWindow(parent), Ui::CDPultWindow() { + setupUi(this); centralWidget()->hide(); - setRecentMenu(ui->menuOpen_recent); + CDUtils::CDCore::instance()->initPult(); + widgetK->setType(CDUtils::CDType::cdK); + widgetX->setType(CDUtils::CDType::cdX); + editFileK->setValue(QVariant::fromValue(QAD::File("", "*.dat"))); + editFileX->setValue(QVariant::fromValue(QAD::File("", "*.dat"))); + editFileC->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"); + setRecentMenu(menuOpen_recent); ribbon = new Ribbon(this); session.setFile("session_cdpult.conf"); session.addEntry(this); session.addEntry(ribbon->tabWidget()); session.load(); reset(); - connect(ui->viewK, SIGNAL(KSendSucceed()), this, SLOT(KSended())); - connect(ui->viewK, SIGNAL(KReceiveSucceed()), this, SLOT(KReceived())); - connect(ui->viewK, SIGNAL(KSendFailed()), this, SLOT(KSendFailed())); - connect(ui->viewK, SIGNAL(KReceiveFailed()), this, SLOT(KReceiveFailed())); + 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))); if (windowState() == Qt::WindowMinimized) setWindowState(Qt::WindowNoState); } CDPultWindow::~CDPultWindow() { - delete ui; } @@ -44,26 +46,6 @@ void CDPultWindow::loadFile(const QString & fp) { } -void CDPultWindow::KReceived() { - addToLog(OKIcon, "K received succesfull"); -} - - -void CDPultWindow::KSended() { - addToLog(OKIcon, "K sended succesfull"); -} - - -void CDPultWindow::KSendFailed() { - addToLog(FailIcon, "K NOT sended"); -} - - -void CDPultWindow::KReceiveFailed() { - addToLog(FailIcon, "K NOT received"); -} - - void CDPultWindow::closeEvent(QCloseEvent *e) { EMainWindow::closeEvent(e); if (!e->isAccepted()) @@ -76,29 +58,45 @@ void CDPultWindow::closeEvent(QCloseEvent *e) { void CDPultWindow::reset(bool full) { setWindowTitle(QString("CD Pult")); - ui->viewK->setKFile(""); -// ui->viewK->clearK(); - file_name.clear(); - ui->viewK->refresh(); + widgetK->reset(); setChanged(false); } bool CDPultWindow::load(const QString & path) { - ui->viewK->setKFile(path); - ui->viewK->loadK(); - QFileInfo fi(path); - setWindowTitle(QString("CD Pult - %1").arg(fi.baseName())); + QPIConfig conf(path, QIODevice::ReadOnly); + QAD::File f = editFileK->value().value(); + checkSyncFiles->setChecked(false); + 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))); + checkSyncFiles->setChecked(conf.getValue("sync_files")); + lineSessionName->setText(conf.getValue("session_name")); + checkHasK->setChecked(conf.getValue("has_k")); + checkHasX->setChecked(conf.getValue("has_x")); + checkHasC->setChecked(conf.getValue("has_c")); + setChanged(false); + file_name = path; return true; } bool CDPultWindow::save(const QString & path) { - ui->viewK->setKFile(path); - ui->viewK->saveK(); - QFileInfo fi(path); - setWindowTitle(QString("CD Pult - %1").arg(fi.baseName())); + QPIConfig conf(path, QIODevice::ReadWrite); + conf.clear(); + 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("sync_files", checkSyncFiles->isChecked()); + conf.setValue("session_name", lineSessionName->text()); + conf.setValue("has_k", checkHasK->isChecked()); + conf.setValue("has_x", checkHasX->isChecked()); + conf.setValue("has_c", checkHasC->isChecked()); + file_name = path; return true; + + //widgetK->setFile(path); + //widgetK->save(); } @@ -112,42 +110,56 @@ void CDPultWindow::savingSession(QPIConfig & conf) { } -void CDPultWindow::addToLog(LogIcon icon, const QString & msg) { +void CDPultWindow::addToLog(CDViewWidget::LogIcon icon, const QString & msg) { QListWidgetItem * ni = new QListWidgetItem(log_icons[icon], "(" + QTime::currentTime().toString() + ") " + msg); - bool s = ui->listLog->verticalScrollBar()->value() == ui->listLog->verticalScrollBar()->maximum(); - ui->listLog->addItem(ni); - if (s) ui->listLog->scrollToBottom(); + bool s = listLog->verticalScrollBar()->value() == listLog->verticalScrollBar()->maximum(); + listLog->addItem(ni); + if (s) listLog->scrollToBottom(); } -void CDPultWindow::on_actionSend_K_triggered() { - if (K.inProgress()) {addToLog(WaitIcon, "processing..."); return;} - addToLog(WaitIcon, "Sending K..."); - ui->viewK->sendK(); -} - - -void CDPultWindow::on_actionReceive_K_triggered() { - if (K.inProgress()) {addToLog(WaitIcon, "processing..."); return;} - addToLog(WaitIcon, "Receiving K..."); - ui->viewK->receiveK(); -} - - -void CDPultWindow::on_actionParse_triggered() { - QString path = QFileDialog::getOpenFileName(this, "Select header file", "", "K Description(k_description.h);;Headers(*.h)"); - if (path.isEmpty()) return; - CDUtils::UpdateModeFlags mode = CDUtils::SaveByName; - if (!K.root().isEmpty()) { - QCDModeDialog cdm; - if (cdm.exec() != QDialog::Accepted) return; - mode = cdm.mode(); +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); + if (n.contains("k")) { + xn.replace(n.indexOf("k"), 1, "x"); + cn.replace(n.indexOf("k"), 1, "c"); + } else { + xn += "_x"; + cn += "_c"; } - ui->viewK->buildFromHeader(path, mode); + QString ext = fi.suffix(), dot, dir; + QString kfn(fi.filePath()); + if (!ext.isEmpty()) { + kfn.chop(ext.size()); + if (kfn.endsWith(".")) { + kfn.chop(1); + dot = "."; + } + } + if (!fi.path().isEmpty() && fi.path() != ".") { + dir = fi.path(); + if (!dir.endsWith("/")) + dir += "/"; + } + 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)); } -void CDPultWindow::on_actionCalculate_K_triggered() { - ui->viewK->calculateK(); - ui->viewK->refresh(); +void CDPultWindow::on_buttonSessionApply_clicked() { + widgetK->setFile(editFileK->value().value().file); + widgetX->setFile(editFileX->value().value().file); + dockCDKView->setVisible(checkHasK->isChecked()); + dockCDXView->setVisible(checkHasX->isChecked()); + //dockCDCView->setVisible(checkHasC->isChecked()); +} + + +void CDPultWindow::on_lineSessionName_textChanged(const QString & t) { + setWindowTitle(QString("CD Pult - %1").arg(t)); } diff --git a/qcd_utils/pult/cdpultwindow.h b/qcd_utils/pult/cdpultwindow.h index 2fc5f10..69850ab 100644 --- a/qcd_utils/pult/cdpultwindow.h +++ b/qcd_utils/pult/cdpultwindow.h @@ -2,20 +2,17 @@ #define CDPULTWINDOW_H #include "emainwindow.h" +#include "ui_cdpultwindow.h" +#include "cdviewwidget.h" #include "ribbon.h" #include "piobject.h" -namespace Ui { -class CDPultWindow; -} - -class CDPultWindow : public EMainWindow +class CDPultWindow : public EMainWindow, public Ui::CDPultWindow { Q_OBJECT Q_ENUMS(LogIcon) public: - enum LogIcon {NoIcon, OKIcon, FailIcon, WaitIcon}; explicit CDPultWindow(QWidget *parent = 0); ~CDPultWindow(); @@ -27,26 +24,20 @@ private: void reset(bool full = false); bool load(const QString & path); bool save(const QString & path); - QString loadFilter() {return "CD file(*.dat)";} - QString saveFilter() {return "CD file(*.dat)";} + QString loadFilter() {return "Pult session(*.conf)";} + QString saveFilter() {return loadFilter();} void loadingSession(QPIConfig & conf); void savingSession(QPIConfig & conf); - Ui::CDPultWindow *ui; Ribbon * ribbon; - QMap log_icons; + QMap log_icons; private slots: - void KSended(); - void KReceived(); - void KSendFailed(); - void KReceiveFailed(); - void addToLog(LogIcon icon, const QString & msg); - void on_actionSend_K_triggered(); - void on_actionReceive_K_triggered(); - void on_actionParse_triggered(); - void on_actionCalculate_K_triggered(); + void addToLog(CDViewWidget::LogIcon icon, const QString & msg); + void on_editFileK_valueChanged(const QVariant & p); + void on_buttonSessionApply_clicked(); + void on_lineSessionName_textChanged(const QString & t); }; #endif // CDPULTWINDOW_H diff --git a/qcd_utils/pult/cdpultwindow.ui b/qcd_utils/pult/cdpultwindow.ui index 0136f22..666d73a 100644 --- a/qcd_utils/pult/cdpultwindow.ui +++ b/qcd_utils/pult/cdpultwindow.ui @@ -6,8 +6,8 @@ 0 0 - 800 - 600 + 798 + 593 @@ -19,22 +19,14 @@ QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks|QMainWindow::VerticalTabs - - - - 0 - 0 - - - - + 0 0 - 800 - 21 + 798 + 24 @@ -79,20 +71,8 @@ 0 - - 0 - - - 0 - - - 0 - - - 0 - - + @@ -106,7 +86,7 @@ Log - 4 + 8 @@ -153,6 +133,184 @@ + + + + :/icons/qvariantedit.png:/icons/qvariantedit.png + + + X + + + 1 + + + + + + + + + + + + + :/icons/configure.png:/icons/configure.png + + + Session + + + 2 + + + + + + + + + Load ... + + + + :/icons/document-open-recent.png:/icons/document-open-recent.png + + + + + + + Save ... + + + + :/icons/document-save.png:/icons/document-save.png + + + + + + + Save as ... + + + + :/icons/document-save-as.png:/icons/document-save-as.png + + + + + + + + + Apply + + + + :/icons/dialog-ok-apply.png:/icons/dialog-ok-apply.png + + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Name: + + + + + + + + + + K file: + + + + + + + + + + X file: + + + + + + + + + + C file: + + + + + + + + + + Sync files + + + + + + + + + K + + + + + + + X + + + + + + + C + + + + + + + + + + + Qt::Vertical + + + + 20 + 1 + + + + + + + @@ -167,7 +325,7 @@ - + :/icons/document-save.png:/icons/document-save.png @@ -245,10 +403,7 @@ - - - - + @@ -271,6 +426,16 @@
emainwindow.h
1 + + CLineEdit + QLineEdit +
clineedit.h
+
+ + QVariantEdit + QWidget +
qvariantedit.h
+
EDockWidget QDockWidget @@ -278,16 +443,16 @@ 1 - CDKView - QTreeView -
qcd_kview.h
+ CDViewWidget + QWidget +
cdviewwidget.h
+ 1
- - + @@ -339,5 +504,85 @@ + + checkSyncFiles + toggled(bool) + editFileX + setDisabled(bool) + + + 786 + 227 + + + 786 + 179 + + + + + checkSyncFiles + toggled(bool) + editFileC + setDisabled(bool) + + + 786 + 227 + + + 786 + 200 + + + + + buttonSessionLoad + clicked() + CDPultWindow + openFile() + + + 589 + 68 + + + 803 + 62 + + + + + buttonSessionSave + clicked() + CDPultWindow + saveFile() + + + 671 + 70 + + + 806 + 48 + + + + + buttonSessionSaveAs + clicked() + CDPultWindow + saveAsFile() + + + 754 + 66 + + + 805 + 106 + + + diff --git a/qcd_utils/pult/cdviewwidget.cpp b/qcd_utils/pult/cdviewwidget.cpp new file mode 100644 index 0000000..a01c87a --- /dev/null +++ b/qcd_utils/pult/cdviewwidget.cpp @@ -0,0 +1,78 @@ +#include "cdviewwidget.h" +#include "cdutils_core.h" +#include "qcd_core.h" +#include "qcd_model.h" +#include "qcd_modedialog.h" +#include "qvariantedit.h" +#include + + +CDViewWidget::CDViewWidget(QWidget * parent) : QWidget(parent), Ui::CDViewWidget() { + qRegisterMetaType("CDViewWidget::LogIcon"); + setupUi(this); + connect(view, SIGNAL(sendSucceed()), this, SLOT(sended())); + connect(view, SIGNAL(receiveSucceed()), this, SLOT(received())); + connect(view, SIGNAL(sendFailed()), this, SLOT(sendFailed())); + connect(view, SIGNAL(receiveFailed()), this, SLOT(receiveFailed())); +} + + +CDViewWidget::~CDViewWidget() { +} + + +void CDViewWidget::reset() { + setFile(""); +} + + +void CDViewWidget::setType(int t) { + view->setType((CDUtils::CDType::cdT)t); + tl_u = view->typeLetter().toUpper(); + tl_l = view->typeLetter().toLower(); + view->refresh(); +} + + +void CDViewWidget::setFile(const QString & f) { + view->setFile(f); + view->load(); +} + + +void CDViewWidget::on_buttonSend_clicked() { + if (view->inProgress()) {addToLog(WaitIcon, "processing..."); return;} + addToLog(WaitIcon, "Sending " + tl_u + "..."); + view->send(); +} + + +void CDViewWidget::on_buttonReceive_clicked() { + if (view->inProgress()) {addToLog(WaitIcon, "processing..."); return;} + addToLog(WaitIcon, "Receiving " + tl_u + "..."); + view->receive(); +} + + +void CDViewWidget::on_buttonLoad_clicked() { + view->load(); +} + + +void CDViewWidget::on_buttonSave_clicked() { + view->save(); +} + + +void CDViewWidget::on_buttonParse_clicked() { + QString path = QFileDialog::getOpenFileName(this, "Select header file", "", + QString("%1 Description(%2_description.h);;Headers(*.h)").arg(tl_u, tl_l)); + if (path.isEmpty()) return; + CDUtils::UpdateModeFlags mode = CDUtils::SaveByName; + if (!view->root()->isEmpty()) { + QCDModeDialog cdm; + if (cdm.exec() != QDialog::Accepted) return; + mode = cdm.mode(); + } + view->buildFromHeader(path, mode); +} diff --git a/qcd_utils/pult/cdviewwidget.h b/qcd_utils/pult/cdviewwidget.h new file mode 100644 index 0000000..3145666 --- /dev/null +++ b/qcd_utils/pult/cdviewwidget.h @@ -0,0 +1,41 @@ +#ifndef CDVIEWWIDGET_H +#define CDVIEWWIDGET_H + +#include +#include "ui_cdviewwidget.h" + + +class CDViewWidget : public QWidget, public Ui::CDViewWidget +{ + Q_OBJECT +public: + explicit CDViewWidget(QWidget *parent = 0); + ~CDViewWidget(); + + enum LogIcon {NoIcon, OKIcon, FailIcon, WaitIcon}; + + void reset(); + void setType(int t); + void setFile(const QString & f); + +private: + QString tl_u, tl_l; + +private slots: + void sended() {addToLog(OKIcon, tl_u + " " + tr("sended succesfull"));} + void received() {addToLog(OKIcon, tl_u + " " + tr("received succesfull"));} + void sendFailed() {addToLog(FailIcon, tl_u + " " + tr("NOT sended"));} + void receiveFailed() {addToLog(FailIcon, tl_u + " " + tr("NOT received"));} + void on_buttonSend_clicked(); + void on_buttonReceive_clicked(); + void on_buttonLoad_clicked(); + void on_buttonSave_clicked(); + void on_buttonParse_clicked(); + //void on_buttonCalculate_clicked(); + +signals: + void addToLog(CDViewWidget::LogIcon icon, const QString & msg); + +}; + +#endif // CDVIEWWIDGET_H diff --git a/qcd_utils/pult/cdviewwidget.ui b/qcd_utils/pult/cdviewwidget.ui new file mode 100644 index 0000000..9d01778 --- /dev/null +++ b/qcd_utils/pult/cdviewwidget.ui @@ -0,0 +1,121 @@ + + + CDViewWidget + + + + 0 + 0 + 689 + 459 + + + + CD Pult + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + Save + + + + :/icons/document-save.png:/icons/document-save.png + + + + + + + Load + + + + :/icons/document-open.png:/icons/document-open.png + + + + + + + Receive + + + + :/icons/document-revert.png:/icons/document-revert.png + + + + + + + Update description ... + + + + :/icons/view-refresh.png:/icons/view-refresh.png + + + + + + + Send + + + + :/icons/flame.png:/icons/flame.png + + + + + + + + + + + Qt::CustomContextMenu + + + QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed + + + QAbstractItemView::ScrollPerPixel + + + QAbstractItemView::ScrollPerPixel + + + + + + + + CDView + QTreeView +
qcd_view.h
+
+
+ + + + +
diff --git a/qcd_utils/pult/icons/document-revert.png b/qcd_utils/pult/icons/document-revert.png new file mode 100644 index 0000000..e04514b Binary files /dev/null and b/qcd_utils/pult/icons/document-revert.png differ diff --git a/qcd_utils/pult/icons/flame.png b/qcd_utils/pult/icons/flame.png new file mode 100644 index 0000000..d267f72 Binary files /dev/null and b/qcd_utils/pult/icons/flame.png differ diff --git a/qcd_utils/pult/icons/view-refresh.png b/qcd_utils/pult/icons/view-refresh.png new file mode 100644 index 0000000..66f0ceb Binary files /dev/null and b/qcd_utils/pult/icons/view-refresh.png differ diff --git a/qcd_utils/qcd_core.cpp b/qcd_utils/qcd_core.cpp index 003d38a..b8fdfb8 100644 --- a/qcd_utils/qcd_core.cpp +++ b/qcd_utils/qcd_core.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include using namespace CDUtils; @@ -115,7 +115,7 @@ bool QCDCore::bindWidget(QWidget * w) { if (!w) return false; QString on = w->objectName(); QString cn = w->metaObject()->className(); - if (cn == "CDKView") { + if (cn == "CDView") { bindView(w); return false; } @@ -148,7 +148,7 @@ bool QCDCore::bindWidget(QWidget * w, const CDType k) { connect(w, SIGNAL(textChanged(QString)), this, SLOT(slotText(QString)), Qt::UniqueConnection); ok = true; } - if (cn == "CDKView") { + if (cn == "CDView") { bindView(w); } if (!ok) return false; @@ -180,7 +180,7 @@ void QCDCore::updateBindedWidgets() { void QCDCore::bindView(QWidget * v) { - CDKView * w = qobject_cast(v); + CDView * w = qobject_cast(v); if (!w) return; connect(this, SIGNAL(updateViewRequest()), w->model(), SLOT(updateModel()), Qt::UniqueConnection); } diff --git a/qcd_utils/qcd_kview.cpp b/qcd_utils/qcd_kview.cpp deleted file mode 100644 index 38a2fd9..0000000 --- a/qcd_utils/qcd_kview.cpp +++ /dev/null @@ -1,124 +0,0 @@ -#include -#include "cdutils_k.h" -#include "qcd_kview.h" -#include "qcd_kmodel.h" -#include "piqt.h" -#include "pifile.h" - -using namespace CDUtils; - - -CDKView::CDKView(QWidget *parent) : QTreeView(parent) { - kmodel = 0; - CONNECTU(&K, sended, this, cdk_sendSucceed); - CONNECTU(&K, sendFailed, this, cdk_sendFailed); - CONNECTU(&K, received, this, cdk_receiveSucceed); - CONNECTU(&K, receiveFailed, this, cdk_receiveFailed); - connect(this, SIGNAL(_qcdk_sendFailed()), this, SLOT(k_sendFailed()), Qt::QueuedConnection); - connect(this, SIGNAL(_qcdk_sendSucceed()), this, SLOT(k_sendSucceed()), Qt::QueuedConnection); - connect(this, SIGNAL(_qcdk_receiveFailed()), this, SLOT(k_receiveFailed()), Qt::QueuedConnection); - connect(this, SIGNAL(_qcdk_receiveSucceed()), this, SLOT(k_receiveSucceed()), Qt::QueuedConnection); -} - - -CDKView::~CDKView() { - if (kmodel) delete kmodel; - kmodel = 0; -} - - -void CDKView::refresh() { - if (!kmodel) { - kmodel = new CDKItemModel(); - setModel(kmodel); - setItemDelegateForColumn(4, new CDKDelegate()); - } - kmodel->rebuildModel(); - expandAll(); - for (int i=0; i<6; i++) resizeColumnToContents(i); -} - - -void CDKView::setKFile(const QString &filename) { - K.setFileName(Q2PIString(filename)); -} - - -void CDKView::startPing() { - K.startPing(); -} - - -void CDKView::sendK() { - busyStatusChanged(true); - K.send(); -} - - -void CDKView::receiveK() { - busyStatusChanged(true); - K.request(); -} - - -void CDKView::saveK() { - K.writeFile(); -} - - -void CDKView::loadK() { - K.readFile(); - K.calculate(); - refresh(); -} - - -void CDKView::clearK() { - //piCout << "clearK"; - K.root() = CDSection(); - refresh(); -} - - -void CDKView::buildFromHeader(const QString &kdescription, int mode) { - if (kdescription.isEmpty()) return; - PIString kdesc_file = Q2PIString(QDir::current().relativeFilePath(kdescription)); - PIFile f(kdesc_file, PIIODevice::ReadOnly); - K.update(&f, mode); - refresh(); -} - - -void CDKView::calculateK() { - K.calculate(); -} - - -void CDKView::k_sendFailed() { - busyStatusChanged(false); - emit messageStatus("send failed"); - emit KSendFailed(); -} - - -void CDKView::k_sendSucceed() { - busyStatusChanged(false); - emit messageStatus("send success"); - emit KSendSucceed(); -} - - -void CDKView::k_receiveFailed() { - busyStatusChanged(false); - emit messageStatus("receive failed"); - emit KReceiveFailed(); -} - - -void CDKView::k_receiveSucceed() { - busyStatusChanged(false); - emit messageStatus("receive success"); - refresh(); - emit KReceiveSucceed(); -} - diff --git a/qcd_utils/qcd_kview.h b/qcd_utils/qcd_kview.h deleted file mode 100644 index 2c3025c..0000000 --- a/qcd_utils/qcd_kview.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef QCD_KVIEW_H -#define QCD_KVIEW_H - -#include "piobject.h" -#include - -class CDKItemModel; - -class CDKView: public QTreeView, public PIObject -{ - Q_OBJECT - PIOBJECT(CDKView) -public: - explicit CDKView(QWidget *parent = 0); - ~CDKView(); - - void setKFile(const QString & filename); - void startPing(); - - CDKItemModel * CDKModel() {return kmodel;} - -public slots: - void refresh(); - void sendK(); - void receiveK(); - void saveK(); - void loadK(); - void clearK(); - void buildFromHeader(const QString & kdescription, int mode = 2); - void calculateK(); - -private slots: - void k_sendFailed(); - void k_sendSucceed(); - void k_receiveFailed(); - void k_receiveSucceed(); - -private: - EVENT_HANDLER(void, cdk_sendFailed) {emit _qcdk_sendFailed();} - EVENT_HANDLER(void, cdk_sendSucceed) {emit _qcdk_sendSucceed();} - EVENT_HANDLER(void, cdk_receiveFailed) {emit _qcdk_receiveFailed();} - EVENT_HANDLER(void, cdk_receiveSucceed) {emit _qcdk_receiveSucceed();} - - CDKItemModel * kmodel; - -signals: - void KSendFailed(); - void KSendSucceed(); - void KReceiveFailed(); - void KReceiveSucceed(); - void messageStatus(QString msg); - void busyStatusChanged(bool busy); - - void _qcdk_sendFailed(); // PRIVATE - void _qcdk_sendSucceed(); // PRIVATE - void _qcdk_receiveFailed(); // PRIVATE - void _qcdk_receiveSucceed(); // PRIVATE - -}; - -#endif // QCD_KVIEW_H diff --git a/qcd_utils/qcd_kmodel.cpp b/qcd_utils/qcd_model.cpp similarity index 51% rename from qcd_utils/qcd_kmodel.cpp rename to qcd_utils/qcd_model.cpp index 7239cd1..5ead0a2 100644 --- a/qcd_utils/qcd_kmodel.cpp +++ b/qcd_utils/qcd_model.cpp @@ -1,5 +1,6 @@ -#include "qcd_kmodel.h" -#include "cdutils_k.h" +#include "qcd_model.h" +#include "cdutils_interface.h" +#include "cdutils_core.h" #include "piqt.h" #include #include @@ -11,173 +12,26 @@ using namespace CDUtils; -CDKItemModel::CDKItemModel(QObject *parent) : QAbstractItemModel(parent) { - root = 0; - internalRebuild(); -} - - -CDKItemModel::~CDKItemModel() { - delete root; -} - - -QVariant CDKItemModel::data(const QModelIndex &index, int role) const { - if (!index.isValid()) return QVariant(); - CDKItem *item = getItem(index); - return item->data(index.column(), role); -} - - -QVariant CDKItemModel::headerData(int section, Qt::Orientation orientation, int role) const { - if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { - switch (section) { - case 0: return trUtf8("Index"); - case 1: return trUtf8("Name"); - case 2: return trUtf8("Type"); - case 3: return trUtf8("Expression"); - case 4: return trUtf8("Value"); - case 5: return trUtf8("Comment"); - } - } - return QVariant(); -} - - -QModelIndex CDKItemModel::index(int row, int column, const QModelIndex &parent) const { - if (parent.isValid() && parent.column() != 0) return QModelIndex(); - CDKItem * p = getItem(parent); - CDKItem * c = p->childs.value(row, 0); - if (c) return createIndex(row, column, c); - else return QModelIndex(); -} - - -QModelIndex CDKItemModel::parent(const QModelIndex &index) const { - if (!index.isValid()) return QModelIndex(); - CDKItem * c = getItem(index); - CDKItem * p = c->parent_; - if (p == root) return QModelIndex(); - return createIndex(p->parent_->childs.indexOf(p), 0, p); -} - - -int CDKItemModel::rowCount(const QModelIndex &parent) const { - CDKItem *p = getItem(parent); - return p->childs.count(); -} - - -int CDKItemModel::columnCount(const QModelIndex &parent) const { - return 6; -} - - -Qt::ItemFlags CDKItemModel::flags(const QModelIndex & index) const { - if (!index.isValid()) return 0; - Qt::ItemFlags f = Qt::ItemIsEnabled | Qt::ItemIsSelectable; - CDKItem * item = getItem(index); - if ((index.column() == 3 || index.column() == 4) && item->type_ == CDKItem::ItemCDType) f |= Qt::ItemIsEditable; - if (item->type_ == CDKItem::ItemCDType && index.column() == 4) { - CDType t = K.section(item->buildPath())[item->index_]; - if (t.type() == "b") { - f |= Qt::ItemIsUserCheckable; -// piCout << "ItemIsUserCheckable"; - } - } - return f; -} - - -bool CDKItemModel::setData(const QModelIndex & index, const QVariant &value, int role) { - if (role == Qt::CheckStateRole && index.column() == 4) { - CDKItem * item = getItem(index); - if (item->type_ == CDKItem::ItemCDType) { - CDType t = K.section(item->buildPath())[item->index_]; - if (t.type() == "b") { - bool result = item->setData(index.column(), PI2QString(PIString::fromBool(value.toBool()))); - QModelIndex rin(CDKItemModel::index(index.row(), 3, index.parent())); - emit dataChanged(rin, rin); - return result; - } - } - } - if (role != Qt::EditRole) return false; - CDKItem * item = getItem(index); - bool result = item->setData(index.column(), value); - if (result) { - QModelIndex rin(CDKItemModel::index(index.row(), 3, index.parent())); - emit dataChanged(rin, rin); - emit dataChanged(index, index); - } - return result; -} - - -void CDKItemModel::rebuildModel() { - beginResetModel(); - internalRebuild(); - endResetModel(); -} - - -void CDKItemModel::buildItem(CDKItem *it, CDSection & r) { - //piCout << "build item" << r.name << r.alias; - PIMap::iterator i; - for (i = r.cd.begin(); i != r.cd.end(); ++i) { - it->childs << new CDKItem(i.key(), CDKItem::ItemCDType, it); - } - PIMap::iterator j; - for (j = r.s.begin(); j != r.s.end(); ++j) { - it->childs << new CDKItem(j.key(), CDKItem::ItemCDSection, it); - buildItem(it->childs.back(), j.value()); - } -} - - -void CDKItemModel::updateModel() { - beginResetModel(); - endResetModel(); -} - - -void CDKItemModel::internalRebuild() { - //qDebug() << "[CDKItemModel]" << "internalRebuild()"; - if (root) delete root; - root = new CDKItem(0, CDKItem::ItemCDSection, 0); - CDSection & r = K.root(); - buildItem(root, r); -} - - -CDKItem * CDKItemModel::getItem(const QModelIndex &index) const { - if (index.isValid()) { - CDKItem * item = static_cast(index.internalPointer()); - if (item) return item; - } - return root; -} - - // CDKItem -CDKItem::CDKItem(int index, CDKItem::CDKItemType type, CDKItem *parent) { +CDItem::CDItem(CDUtils::Interface * i, int index, CDItem::CDItemType type, CDItem *parent) { + interface = i; index_ = index; parent_ = parent; type_ = type; } -CDKItem::~CDKItem() { +CDItem::~CDItem() { qDeleteAll(childs); } -QVariant CDKItem::data(int column, int role) const { +QVariant CDItem::data(int column, int role) const { if (role == Qt::BackgroundRole) { switch (type_) { case ItemCDType: { - CDType & t = K.section(buildPath())[index_]; + CDType & t = interface->section(buildPath())[index_]; if (t.errorString().isEmpty()) return QBrush(QColor(255, 250, 230)); else return QBrush(QColor(255, 128, 128)); } @@ -185,29 +39,28 @@ QVariant CDKItem::data(int column, int role) const { } } if (role == Qt::CheckStateRole && type_ == ItemCDType && column == 4) { - CDType & t = K.section(buildPath())[index_]; + CDType & t = interface->section(buildPath())[index_]; if (t.type() == "b") return t.toBool() ? Qt::Checked : Qt::Unchecked; else QVariant(); } if (role == Qt::ToolTipRole && type_ == ItemCDType) { - CDType & t = K.section(buildPath())[index_]; + CDType & t = interface->section(buildPath())[index_]; return PI2QString(t.errorString()); } if (role != Qt::DisplayRole && role != Qt::EditRole) return QVariant(); PIDeque path = buildPath(); - CDSection & rs = K.section(path); + CDSection & rs = interface->section(path); CDSection s; switch (type_) { case ItemCDType: switch (column) { - case 0: return QString::number(index_); - case 1: return PI2QString(rs[index_].name()); - case 2: return stringType(rs[index_].type()); - case 3: return PI2QString(rs[index_].formula()); - case 4: return value(rs[index_], role); - case 5: return PI2QString(rs[index_].comment()); - default: - break; + case 0: return QString::number(index_); + case 1: return PI2QString(rs[index_].name()); + case 2: return stringType(rs[index_].type()); + case 3: return PI2QString(rs[index_].formula()); + case 4: return value(rs[index_], role); + case 5: return PI2QString(rs[index_].comment()); + default: break; } break; case ItemCDSection: @@ -215,10 +68,9 @@ QVariant CDKItem::data(int column, int role) const { // piCout << rs.name << rs.alias << s.name << s.alias; switch (column) { case 0: return QString("[") + QString::number(index_) + QString("]"); - case 1: return PI2QString(s.alias); - case 2: return PI2QString(s.name); - default: - break; + case 1: return PI2QString(s.alias); + case 2: return PI2QString(s.name); + default: break; } break; } @@ -226,7 +78,7 @@ QVariant CDKItem::data(int column, int role) const { } -QVariant CDKItem::value(CDType t, int role) const { +QVariant CDItem::value(CDType t, int role) const { if (t.type() == "f") return t.toDouble(); if (t.type() == "n") return t.toInt(); if (t.type() == "b") return t.toBool(); @@ -240,19 +92,19 @@ QVariant CDKItem::value(CDType t, int role) const { } -bool CDKItem::setData(int column, const QVariant &value) { +bool CDItem::setData(int column, const QVariant &value) { if ((column == 3 || column == 4) && type_ == ItemCDType) { - K.section(buildPath())[index_].setValue(Q2PIString(value.toString())); - K.calculate(); + interface->section(buildPath())[index_].setValue(Q2PIString(value.toString())); + interface->calculate(); return true; } return false; } -PIDeque CDKItem::buildPath() const { +PIDeque CDItem::buildPath() const { PIDeque path; - CDKItem * p = parent_; + CDItem * p = parent_; while (p) { path.push_front(p->index_); p = p->parent_; @@ -262,7 +114,7 @@ PIDeque CDKItem::buildPath() const { } -QString CDKItem::stringType(const PIString & t) const { +QString CDItem::stringType(const PIString & t) const { QString n = PI2QString(t); if (n.isEmpty()) return QString(""); switch (n[0].toLatin1()) { @@ -286,22 +138,22 @@ QString CDKItem::stringType(const PIString & t) const { // CDKDelegate -CDKDelegate::CDKDelegate(QObject *parent) : QStyledItemDelegate(parent) { +CDDelegate::CDDelegate(QObject *parent) : QStyledItemDelegate(parent) { } -QWidget *CDKDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { +QWidget *CDDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { return new QVariantEdit(parent); } -void CDKDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { +void CDDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QVariantEdit *edit = static_cast(editor); edit->setValue(index.model()->data(index, Qt::EditRole)); } -void CDKDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { +void CDDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QVariantEdit *edit = static_cast(editor); QVariant v = edit->value(); if (v.canConvert()) { @@ -311,13 +163,169 @@ void CDKDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const } -void CDKDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const { +void CDDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const { editor->setGeometry(option.rect); } -QSize CDKDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { +QSize CDDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { QSize s = QStyledItemDelegate::sizeHint(option, index); s.setWidth(s.width() + 20); return s; } + + +// CDItemModel + +CDItemModel::CDItemModel(int type_, QObject *parent) : QAbstractItemModel(parent) { + interface = new Interface((CDType::cdT)type_); + root = 0; + internalRebuild(); +} + + +CDItemModel::~CDItemModel() { + delete root; + delete interface; +} + + +QVariant CDItemModel::data(const QModelIndex &index, int role) const { + if (!index.isValid()) return QVariant(); + CDItem *item = getItem(index); + return item->data(index.column(), role); +} + + +QVariant CDItemModel::headerData(int section, Qt::Orientation orientation, int role) const { + if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { + switch (section) { + case 0: return trUtf8("Index"); + case 1: return trUtf8("Name"); + case 2: return trUtf8("Type"); + case 3: return trUtf8("Expression"); + case 4: return trUtf8("Value"); + case 5: return trUtf8("Comment"); + } + } + return QVariant(); +} + + +QModelIndex CDItemModel::index(int row, int column, const QModelIndex &parent) const { + if (parent.isValid() && parent.column() != 0) return QModelIndex(); + CDItem * p = getItem(parent); + CDItem * c = p->childs.value(row, 0); + if (c) return createIndex(row, column, c); + else return QModelIndex(); +} + + +QModelIndex CDItemModel::parent(const QModelIndex &index) const { + if (!index.isValid()) return QModelIndex(); + CDItem * c = getItem(index); + CDItem * p = c->parent_; + if (p == root) return QModelIndex(); + return createIndex(p->parent_->childs.indexOf(p), 0, p); +} + + +int CDItemModel::rowCount(const QModelIndex &parent) const { + CDItem *p = getItem(parent); + return p->childs.count(); +} + + +int CDItemModel::columnCount(const QModelIndex &parent) const { + return 6; +} + + +Qt::ItemFlags CDItemModel::flags(const QModelIndex & index) const { + if (!index.isValid()) return 0; + Qt::ItemFlags f = Qt::ItemIsEnabled | Qt::ItemIsSelectable; + CDItem * item = getItem(index); + if (!item) return 0; + CDType & t(interface->section(item->buildPath())[item->index_]); + if ((index.column() == 3 || index.column() == 4) && + (item->type_ == CDItem::ItemCDType) && + (t.cd_type() == CDType::cdK)) + f |= Qt::ItemIsEditable; + if (item->type_ == CDItem::ItemCDType && index.column() == 4) { + if (t.type() == "b") { + f |= Qt::ItemIsUserCheckable; +// piCout << "ItemIsUserCheckable"; + } + } + return f; +} + + +bool CDItemModel::setData(const QModelIndex & index, const QVariant &value, int role) { + if (role == Qt::CheckStateRole && index.column() == 4) { + CDItem * item = getItem(index); + if (item->type_ == CDItem::ItemCDType) { + CDType t = interface->section(item->buildPath())[item->index_]; + if (t.type() == "b") { + bool result = item->setData(index.column(), PI2QString(PIString::fromBool(value.toBool()))); + QModelIndex rin(CDItemModel::index(index.row(), 3, index.parent())); + emit dataChanged(rin, rin); + return result; + } + } + } + if (role != Qt::EditRole) return false; + CDItem * item = getItem(index); + bool result = item->setData(index.column(), value); + if (result) { + QModelIndex rin(CDItemModel::index(index.row(), 3, index.parent())); + emit dataChanged(rin, rin); + emit dataChanged(index, index); + } + return result; +} + + +void CDItemModel::rebuildModel() { + beginResetModel(); + internalRebuild(); + endResetModel(); +} + + +void CDItemModel::buildItem(CDItem *it, CDSection & r) { + //piCout << "build item" << r.name << r.alias; + PIMap::iterator i; + for (i = r.cd.begin(); i != r.cd.end(); ++i) { + it->childs << new CDItem(interface, i.key(), CDItem::ItemCDType, it); + } + PIMap::iterator j; + for (j = r.s.begin(); j != r.s.end(); ++j) { + it->childs << new CDItem(interface, j.key(), CDItem::ItemCDSection, it); + buildItem(it->childs.back(), j.value()); + } +} + + +void CDItemModel::updateModel() { + beginResetModel(); + endResetModel(); +} + + +void CDItemModel::internalRebuild() { + //qDebug() << "[CDKItemModel]" << "internalRebuild()"; + if (root) delete root; + root = new CDItem(interface, 0, CDItem::ItemCDSection, 0); + CDSection & r = interface->root(); + buildItem(root, r); +} + + +CDItem * CDItemModel::getItem(const QModelIndex &index) const { + if (index.isValid()) { + CDItem * item = static_cast(index.internalPointer()); + if (item) return item; + } + return root; +} diff --git a/qcd_utils/qcd_kmodel.h b/qcd_utils/qcd_model.h similarity index 60% rename from qcd_utils/qcd_kmodel.h rename to qcd_utils/qcd_model.h index f77a89d..75a3357 100644 --- a/qcd_utils/qcd_kmodel.h +++ b/qcd_utils/qcd_model.h @@ -1,5 +1,5 @@ -#ifndef QCD_KMODEL_H -#define QCD_KMODEL_H +#ifndef QCD_MODEL_H +#define QCD_MODEL_H #include #include @@ -7,20 +7,24 @@ #include "pistring.h" namespace CDUtils { -class CDSection; -class CDType; + class CDType; + class CDSection; + class Interface; } -namespace QAD { -struct Enum; -} -class CDKItemModel; -class CDKItem { - friend class CDKItemModel; +namespace QAD { + struct Enum; +} + +class CDItemModel; + + +class CDItem { + friend class CDItemModel; public: - enum CDKItemType{ItemCDType, ItemCDSection}; - CDKItem(int index, CDKItemType type, CDKItem * parent); - ~CDKItem(); + enum CDItemType{ItemCDType, ItemCDSection}; + CDItem(CDUtils::Interface * interface, int index, CDItemType type, CDItem * parent); + ~CDItem(); QVariant data(int column, int role) const; QVariant value(CDUtils::CDType t, int role) const; bool setData(int column, const QVariant & value); @@ -29,20 +33,21 @@ private: PIDeque buildPath() const; QString stringType(const PIString & t) const; - CDKItem * parent_; + CDUtils::Interface * interface; + CDItem * parent_; int index_; - CDKItemType type_; - QList childs; + CDItemType type_; + QList childs; }; -class CDKDelegate : public QStyledItemDelegate +class CDDelegate : public QStyledItemDelegate { Q_OBJECT public: - CDKDelegate(QObject *parent = 0); + CDDelegate(QObject *parent = 0); - QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; + QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; void setEditorData(QWidget *editor, const QModelIndex &index) const; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const; @@ -50,11 +55,11 @@ public: }; -class CDKItemModel : public QAbstractItemModel { +class CDItemModel : public QAbstractItemModel { Q_OBJECT public: - explicit CDKItemModel(QObject *parent = 0); - ~CDKItemModel(); + explicit CDItemModel(int type_, QObject *parent = 0); + ~CDItemModel(); QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; @@ -65,7 +70,7 @@ public: Qt::ItemFlags flags(const QModelIndex &index) const; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - void buildItem(CDKItem * it, CDUtils::CDSection &r); + void buildItem(CDItem * it, CDUtils::CDSection &r); public slots: void rebuildModel(); @@ -73,12 +78,13 @@ public slots: private: void internalRebuild(); - CDKItem * getItem(const QModelIndex & index) const; + CDItem * getItem(const QModelIndex & index) const; - CDKItem * root; + CDUtils::Interface * interface; + CDItem * root; signals: }; -#endif // QCD_KMODEL_H +#endif // QCD_MODEL_H diff --git a/qcd_utils/qcd_view.cpp b/qcd_utils/qcd_view.cpp new file mode 100644 index 0000000..cdc53a4 --- /dev/null +++ b/qcd_utils/qcd_view.cpp @@ -0,0 +1,214 @@ +#include +#include "cdutils_k.h" +#include "cdutils_x.h" +#include "cdutils_core.h" +#include "qcd_view.h" +#include "qcd_model.h" +#include "piqt.h" +#include "pifile.h" + +using namespace CDUtils; + + +CDView::CDView(QWidget *parent) : QTreeView(parent) { + type_ = -1; + model_ = 0; + connect(this, SIGNAL(_qcd_sendFailed()), this, SLOT(cd_sendFailed()), Qt::QueuedConnection); + connect(this, SIGNAL(_qcd_sendSucceed()), this, SLOT(cd_sendSucceed()), Qt::QueuedConnection); + connect(this, SIGNAL(_qcd_receiveFailed()), this, SLOT(cd_receiveFailed()), Qt::QueuedConnection); + connect(this, SIGNAL(_qcd_receiveSucceed()), this, SLOT(cd_receiveSucceed()), Qt::QueuedConnection); +} + + +CDView::~CDView() { + if (model_) delete model_; + model_ = 0; +} + + +void CDView::setType(int cdt) { + if (cdt < 0) return; + if (type_ >= 0) return; + type_ = cdt; + switch ((CDType::cdT)type_) { + case CDType::cdK: + CONNECTU(&K, sended, this, pi_cd_sendSucceed); + CONNECTU(&K, sendFailed, this, pi_cd_sendFailed); + CONNECTU(&K, received, this, pi_cd_receiveSucceed); + CONNECTU(&K, receiveFailed, this, pi_cd_receiveFailed); + break; + case CDType::cdX: + CONNECTU(&X, sended, this, pi_cd_sendSucceed); + CONNECTU(&X, sendFailed, this, pi_cd_sendFailed); + CONNECTU(&X, received, this, pi_cd_receiveSucceed); + CONNECTU(&X, receiveFailed, this, pi_cd_receiveFailed); + break; + default: break; + } + +} + + +void CDView::refresh() { + if (type_ < 0) return; + if (!model_) { + model_ = new CDItemModel(type_); + setModel(model_); + setItemDelegateForColumn(4, new CDDelegate()); + } + model_->rebuildModel(); + switch ((CDType::cdT)type_) { + case CDType::cdX: + setColumnHidden(3, true); + break; + default: break; + } + expandAll(); + for (int i=0; i<6; i++) resizeColumnToContents(i); +} + + +void CDView::setFile(const QString & filename) { + switch ((CDType::cdT)type_) { + case CDType::cdK: K.setFileName(Q2PIString(filename)); break; + case CDType::cdX: X.setFileName(Q2PIString(filename)); break; + default: break; + } +} + + +bool CDView::inProgress() const { + switch ((CDType::cdT)type_) { + case CDType::cdK: return K.inProgress(); break; + case CDType::cdX: return X.inProgress(); break; + default: break; + } + return false; +} + + +void CDView::startPing() { + switch ((CDType::cdT)type_) { + case CDType::cdK: K.startPing(); break; + case CDType::cdX: X.startPing(); break; + default: break; + } +} + + +CDSection * CDView::root() { + return CDCore::instance()->root((CDType::cdT)type_); +} + + +QString CDView::typeLetter() const { + return PI2QString(CDCore::instance()->typeLetter((CDType::cdT)type_)); +} + + +void CDView::send() { + busyStatusChanged(true); + switch ((CDType::cdT)type_) { + case CDType::cdK: K.send(); break; + case CDType::cdX: X.send(); break; + default: break; + } +} + + +void CDView::receive() { + busyStatusChanged(true); + switch ((CDType::cdT)type_) { + case CDType::cdK: K.request(); break; + case CDType::cdX: X.request(); break; + default: break; + } +} + + +void CDView::save() { + switch ((CDType::cdT)type_) { + case CDType::cdK: K.writeFile(); break; + case CDType::cdX: X.writeFile(); break; + default: break; + } +} + + +void CDView::load() { + switch ((CDType::cdT)type_) { + case CDType::cdK: + K.readFile(); + K.calculate(); + break; + case CDType::cdX: + X.readFile(); + X.calculate(); + break; + default: break; + } + refresh(); +} + + +void CDView::clear() { + //piCout << "clearK"; + switch ((CDType::cdT)type_) { + case CDType::cdK: K.root() = CDSection(); break; + case CDType::cdX: X.root() = CDSection(); break; + default: break; + } + refresh(); +} + + +void CDView::buildFromHeader(const QString & description, int mode) { + if (description.isEmpty()) return; + PIString desc_file = Q2PIString(QDir::current().relativeFilePath(description)); + PIFile f(desc_file, PIIODevice::ReadOnly); + switch ((CDType::cdT)type_) { + case CDType::cdK: K.update(&f, mode); break; + case CDType::cdX: X.update(&f, mode); break; + default: break; + } + refresh(); +} + + +void CDView::calculate() { + switch ((CDType::cdT)type_) { + case CDType::cdK: K.calculate(); break; + case CDType::cdX: X.calculate(); break; + default: break; + } +} + + +void CDView::cd_sendFailed() { + busyStatusChanged(false); + emit messageStatus("send failed"); + emit sendFailed(); +} + + +void CDView::cd_sendSucceed() { + busyStatusChanged(false); + emit messageStatus("send success"); + emit sendSucceed(); +} + + +void CDView::cd_receiveFailed() { + busyStatusChanged(false); + emit messageStatus("receive failed"); + emit receiveFailed(); +} + + +void CDView::cd_receiveSucceed() { + refresh(); + busyStatusChanged(false); + emit messageStatus("receive success"); + emit receiveSucceed(); +} + diff --git a/qcd_utils/qcd_view.h b/qcd_utils/qcd_view.h new file mode 100644 index 0000000..487da91 --- /dev/null +++ b/qcd_utils/qcd_view.h @@ -0,0 +1,71 @@ +#ifndef QCD_VIEW_H +#define QCD_VIEW_H + +#include "piobject.h" +#include + +namespace CDUtils { + class CDType; + class CDSection; +} + +class CDItemModel; + +class CDView: public QTreeView, public PIObject +{ + Q_OBJECT + PIOBJECT(CDView) +public: + explicit CDView(QWidget *parent = 0); + ~CDView(); + + void setType(int cdt); + void setFile(const QString & filename); + bool inProgress() const; + void startPing(); + CDUtils::CDSection * root(); + QString typeLetter() const; + + CDItemModel * CDModel() {return model_;} + +public slots: + void refresh(); + void send(); + void receive(); + void save(); + void load(); + void clear(); + void buildFromHeader(const QString & description, int mode = 2); + void calculate(); + +private slots: + void cd_sendFailed(); + void cd_sendSucceed(); + void cd_receiveFailed(); + void cd_receiveSucceed(); + +private: + EVENT_HANDLER(void, pi_cd_sendFailed) {emit _qcd_sendFailed();} + EVENT_HANDLER(void, pi_cd_sendSucceed) {emit _qcd_sendSucceed();} + EVENT_HANDLER(void, pi_cd_receiveFailed) {emit _qcd_receiveFailed();} + EVENT_HANDLER(void, pi_cd_receiveSucceed) {emit _qcd_receiveSucceed();} + + CDItemModel * model_; + int type_; + +signals: + void sendFailed(); + void sendSucceed(); + void receiveFailed(); + void receiveSucceed(); + void messageStatus(QString msg); + void busyStatusChanged(bool busy); + + void _qcd_sendFailed(); // PRIVATE + void _qcd_sendSucceed(); // PRIVATE + void _qcd_receiveFailed(); // PRIVATE + void _qcd_receiveSucceed(); // PRIVATE + +}; + +#endif // QCD_VIEW_H