#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(); }