git-svn-id: svn://db.shs.com.ru/libs@123 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2016-09-20 20:12:24 +00:00
parent 72a1d2cffd
commit 211d498061
17 changed files with 585 additions and 68 deletions

View File

@@ -1,8 +1,7 @@
#include "cdutils_core.h" #include "cdutils_core.h"
#include "cdutils_parser.h" #include "cdutils_parser.h"
#include "piconfig.h" #include "piconfig.h"
#include "cdutils_protocol.h" #include "piiobytearray.h"
#include "piiodevice.h"
#include "piiostring.h" #include "piiostring.h"
#include "pifile.h" #include "pifile.h"
@@ -74,15 +73,20 @@ __Core_Initializer__::~__Core_Initializer__() {
CDCore::CDCore(const char * conf) { CDCore::CDCore() {
setName("CDCore");
CONNECTU(&connection, dataReceivedEvent, this, dataReceived); CONNECTU(&connection, dataReceivedEvent, this, dataReceived);
PIString s(conf); PIString s(app_config);
connection.configureFromString(&s); connection.configureFromString(&s);
datatr.setPacketSize(960); datatr.setPacketSize(960);
connection.start(); connection.start();
k_.name = "__root__"; k_.name = "__root__";
k_.alias = "root"; k_.alias = "root";
CONNECTU(&datatr, sendRequest, this, dtSendRequest)
CONNECTU(&datatr, receiveFinished, this, dtReceiveFinished)
CONNECTU(&sendt, started, this, sendThread)
/*k_[1] = KType(1, "123", "120+3", "comment"); /*k_[1] = KType(1, "123", "120+3", "comment");
k_[2] = KType(2, "1", "2", "comm"); k_[2] = KType(2, "1", "2", "comm");
k_[4] = KType(4, "-0.6", "-6/10", "mment"); k_[4] = KType(4, "-0.6", "-6/10", "mment");
@@ -118,11 +122,18 @@ void CDCore::k_write(PIIODevice * d) {
void CDCore::k_read(PIIODevice * d) { void CDCore::k_read(PIIODevice * d) {
PIConfig conf(d, PIIODevice::ReadOnly); PIConfig conf(d, PIIODevice::ReadOnly);
k_.read(&(conf.rootEntry())); k_.read(&(conf.rootEntry()));
PIVector<PIIODevice * > ds = connection.allDevices();
// piForeach(PIIODevice * d, ds) {
// if (d)
// piCoutObj << d->constructFullPath() << d->isOpened();
// }
} }
void CDCore::k_parse(PIIODevice * d) { void CDCore::k_parse(PIIODevice * d) {
k_ = CDParser::parse(d, CDType::cdK); k_ = CDParser::parse(d, CDType::cdK);
k_.name = "__root__";
k_.alias = "root";
} }
@@ -140,25 +151,47 @@ void CDCore::k_update(PIIODevice * d) {
k_ = uk; k_ = uk;
} }
void CDCore::reinitConnection(const PIString &configuration) {
PIString c = configuration;
connection.stop();
connection.removeAllDevices();
connection.configureFromString(&c);
connection.start();
}
void CDUtils::CDCore::dataReceived(const PIString & from, const PIByteArray & data) { void CDUtils::CDCore::dataReceived(const PIString & from, const PIByteArray & data) {
piCout << from << data.size(); // piCoutObj << "dataReceived" << from << data.size();
if (from == "cd") { PIIODevice * d = connection.deviceByName("cd");
if (d && d == connection.deviceByFullPath(from)) {
datatr.received(data); datatr.received(data);
} }
} }
void CDCore::K_Send() { void CDCore::K_Send() {
piCoutObj << "K_Send"; piCoutObj << "K_Send";
PIString s; PIByteArray ba;
PIIOString ios(&s); PIIOByteArray iob(&ba, PIIODevice::ReadWrite);
k_write(&ios); // PIIOByteArray iob;
// iob.open(&ba, PIIODevice::ReadWrite);
k_write(&iob);
piCoutObj << PIString(ba);
if (sendt.isRunning()) {
piCoutObj << "send in process...";
return;
}
wheader.session_id = 0;
wheader.type = CD_KSend;
send_data.clear();
send_data << wheader << ba;
sendt.startOnce();
// ios.close(); // ios.close();
piCout << s; // piCout << s;
//PIByteArray ba = PIByteArray::fromString(s); //PIByteArray ba = PIByteArray::fromString(s);
PIFile pf("k.txt", PIIODevice::ReadWrite); // PIFile pf("k.txt", PIIODevice::ReadWrite);
pf.resize(0); // pf.resize(0);
pf.write(s.toUTF8()); // pf.write(s.toUTF8());
//k_write(&pf); //k_write(&pf);
//piCout << pf.readLine(); //piCout << pf.readLine();
} }
@@ -166,5 +199,62 @@ void CDCore::K_Send() {
void CDCore::K_Request() { void CDCore::K_Request() {
piCoutObj << "K_Request"; piCoutObj << "K_Request";
if (sendt.isRunning()) {
piCoutObj << "send in process...";
return;
}
wheader.session_id = 0;
wheader.type = CD_KQuery;
send_data.clear();
send_data << wheader;
sendt.startOnce();
} }
void CDCore::sendThread() {
bool ok = datatr.send(send_data);
CDPacketType pt = (CDPacketType)wheader.type;
switch (pt) {
case CD_KSend:
if (ok) K_Sended();
else K_SendFail();
break;
case CD_KQuery:
if (!ok) K_ReceiveFail();
default:
break;
}
}
void CDCore::dtSendRequest(PIByteArray &data) {
connection.writeByName("cd", data);
// piCoutObj << "send" << data.size() << ret;
}
void CDCore::dtReceiveFinished(bool ok) {
if (ok) {
PIByteArray ba = datatr.data();
PacketHeader p;
ba >> p;
CDPacketType pt = (CDPacketType)p.type;
switch (pt) {
case CD_KQuery:
K_Send();
break;
case CD_KSend: {
piCoutObj << "K received";
PIByteArray k;
ba >> k;
k << uchar(0);
PIString s = PIString::fromUTF8((const char *)k.data());
PIIOString ios(&s);
k_read(&ios);
K_Received();
} break;
default: break;
}
}
}

View File

@@ -2,6 +2,7 @@
#define CDUTILS_CORE_H #define CDUTILS_CORE_H
#include "cdutils_types.h" #include "cdutils_types.h"
#include "cdutils_protocol.h"
#include "piconnection.h" #include "piconnection.h"
#include "pidatatransfer.h" #include "pidatatransfer.h"
@@ -28,7 +29,9 @@ public:
static CDCore * instance() {return __Core_Initializer__::__instance__;} static CDCore * instance() {return __Core_Initializer__::__instance__;}
EVENT(K_Sended) EVENT(K_Sended)
EVENT(K_SendFail)
EVENT(K_Received) EVENT(K_Received)
EVENT(K_ReceiveFail)
EVENT1(K_KeepNamesRequest, bool*, kn) EVENT1(K_KeepNamesRequest, bool*, kn)
EVENT_HANDLER(void, K_Send); EVENT_HANDLER(void, K_Send);
EVENT_HANDLER(void, K_Request); EVENT_HANDLER(void, K_Request);
@@ -39,16 +42,17 @@ public:
void k_read(PIIODevice * d); void k_read(PIIODevice * d);
void k_parse(PIIODevice * d); void k_parse(PIIODevice * d);
void k_update(PIIODevice * d); void k_update(PIIODevice * d);
PIString pultConfig() {return PIString(pult_config);}
PIString appConfig() {return PIString(app_config);}
void reinitConnection(const PIString & configuration);
bool inProgress() {return sendt.isRunning();}
private: private:
CDCore(const char * conf = CDCore();
#ifdef CDPULT
pult_config
#else
app_config
#endif
);
EVENT_HANDLER2(void, dataReceived, const PIString &, from, const PIByteArray &, data); EVENT_HANDLER2(void, dataReceived, const PIString &, from, const PIByteArray &, data);
EVENT_HANDLER1(void, dtSendRequest, PIByteArray &, data);
EVENT_HANDLER1(void, dtReceiveFinished, bool, ok);
EVENT_HANDLER(void, sendThread);
void k_rec(const PIByteArray & data); void k_rec(const PIByteArray & data);
void x_rec(const PIByteArray & data); void x_rec(const PIByteArray & data);
void c_rec(const PIByteArray & data); void c_rec(const PIByteArray & data);
@@ -56,7 +60,9 @@ private:
static const char app_config[], pult_config[]; static const char app_config[], pult_config[];
PIConnection connection; PIConnection connection;
PIDataTransfer datatr; PIDataTransfer datatr;
PacketHeader wheader;
PIByteArray send_data;
PIThread sendt;
}; };

View File

@@ -12,7 +12,9 @@ KInterface::KInterface() {
k_file = PIStringAscii("k.dat"); k_file = PIStringAscii("k.dat");
k_file_size = 0; k_file_size = 0;
CONNECTU(core, K_Sended, this, sended); CONNECTU(core, K_Sended, this, sended);
CONNECTU(core, K_SendFail, this, sendFailed);
CONNECTU(core, K_Received, this, received); CONNECTU(core, K_Received, this, received);
CONNECTU(core, K_ReceiveFail, this, receiveFailed);
CONNECTU(core, K_KeepNamesRequest, this, keepNamesRequest); CONNECTU(core, K_KeepNamesRequest, this, keepNamesRequest);
} }
@@ -86,6 +88,11 @@ bool KInterface::configure(const PIString & config, const PIString & sect) {
} }
void KInterface::reinitConnection(const PIString &configuration) {
core->reinitConnection(configuration);
}
void KInterface::write(PIIODevice * d) { void KInterface::write(PIIODevice * d) {
core->k_write(d); core->k_write(d);
} }
@@ -106,6 +113,16 @@ void KInterface::update(PIIODevice * d) {
} }
PIString KInterface::appConfig() {
return core->appConfig();
}
PIString KInterface::pultConfig() {
return core->pultConfig();
}
void KInterface::readFile() { void KInterface::readFile() {
if (k_file.isEmpty()) return; if (k_file.isEmpty()) return;
PIFile f(k_file, PIIODevice::ReadOnly); PIFile f(k_file, PIIODevice::ReadOnly);
@@ -121,3 +138,8 @@ void KInterface::writeFile() {
write(&f); write(&f);
k_file_size = f.size(); k_file_size = f.size();
} }
bool KInterface::inProgress() {
return core->inProgress();
}

View File

@@ -30,18 +30,26 @@ public:
int fileSize() const {return k_file_size;} int fileSize() const {return k_file_size;}
EVENT(sended) EVENT(sended)
EVENT(sendFailed)
EVENT(received) EVENT(received)
EVENT(receiveFailed)
EVENT1(keepNamesRequest, bool*, kn) EVENT1(keepNamesRequest, bool*, kn)
EVENT_HANDLER(void, send); EVENT_HANDLER(void, send);
EVENT_HANDLER(void, request); EVENT_HANDLER(void, request);
void setFileName(const PIString & file) {k_file = file;}
bool configure(const PIString & config, const PIString & sect = PIStringAscii("k")); bool configure(const PIString & config, const PIString & sect = PIStringAscii("k"));
void reinitConnection(const PIString & configuration);
void write(PIIODevice * d); void write(PIIODevice * d);
void read(PIIODevice * d); void read(PIIODevice * d);
void parse(PIIODevice * d); void parse(PIIODevice * d);
void update(PIIODevice * d); void update(PIIODevice * d);
PIString appConfig();
PIString pultConfig();
void readFile(); void readFile();
void writeFile(); void writeFile();
bool inProgress();
private: private:
CDCore * core; CDCore * core;

View File

@@ -13,12 +13,12 @@ enum CDPacketType {CD_Ping, CD_Pong, CD_KQuery, CD_KSend, CD_Command, CD_XData,
int type; // CDPacketType int type; // CDPacketType
}; };
struct PacketKSend : PacketHeader {
PIByteArray kdata; // file k.dat
};
# pragma pack(pop) # pragma pack(pop)
inline PIByteArray & operator <<(PIByteArray & s, const PacketHeader & v) {s << v.session_id << v.type; return s;}
inline PIByteArray & operator >>(PIByteArray & s, PacketHeader & v) {s >> v.session_id >> v.type; return s;}
} }
#endif // CDUTILS_PROTOCOL_H #endif // CDUTILS_PROTOCOL_H

View File

@@ -53,7 +53,8 @@ PIString CDType::type() const {
PIString CDType::value() const { PIString CDType::value() const {
return PIString::fromBool(value_b); if (type_ == "b") return PIString::fromBool(value_b);
return value_s;
} }

View File

@@ -57,6 +57,7 @@ public:
CDSection() {} CDSection() {}
bool test(int v) {return k.value(v).toBool();} bool test(int v) {return k.value(v).toBool();}
// CDType & operator [](int v) {if (!k.contains(v)) k[v].index_ = v; return k[v];}
CDType & operator [](int v) {return k[v];} CDType & operator [](int v) {return k[v];}
const CDType operator [](int v) const {return k[v];} const CDType operator [](int v) const {return k[v];}
CDSection & section(int v) {return s[v];} CDSection & section(int v) {return s[v];}

View File

@@ -11,7 +11,8 @@ class Core : public PIObject
public: public:
Core() { Core() {
// piCout << "testCore"; // piCout << "testCore";
CONNECTU(&t, tickEvent, this, timerDone);
t.start(1000);
} }
void load() { void load() {
@@ -42,23 +43,24 @@ class Core : public PIObject
} }
void test() { void test() {
piCoutObj << "count" << K.count(); piCout << "count" << K.count();
piCoutObj << "First" << (int)First << K[First]; piCout << K[First];
piCoutObj << "Second" << (int)Second << K[Second]; piCout << K[Second];
piCoutObj << "test Second" << K.test(Second);
} }
EVENT_HANDLER(void, ksend) {piCoutObj << "sended k";} EVENT_HANDLER(void, ksend) {piCout << "sended k";}
EVENT_HANDLER(void, krecv) {piCoutObj << "received k";} EVENT_HANDLER(void, krecv) {piCout << "received k";}
EVENT_HANDLER(void, timerDone) {test();}
private: private:
PIFile rf; PIFile rf;
PITimer t;
}; };
#include "piscreen.h" #include "piscreen.h"
#include "piscreentiles.h" #include "piscreentiles.h"
//PIScreen screen; PIScreen screen(false);
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
// PIString s; // PIString s;
// s = "df a)))(a(ttt){a(b(c)})d)e( d dws ) sds(()fads(fdas()))fda))))fdasf((((jhvw"; // s = "df a)))(a(ttt){a(b(c)})d)e( d dws ) sds(()fads(fdas()))fda))))fdasf((((jhvw";
@@ -80,7 +82,7 @@ int main(int argc, char *argv[]) {
// ba = s.toByteArray(); // ba = s.toByteArray();
// piCout << PIString(ba); // piCout << PIString(ba);
// piCout << PIString(ba.convertFromBase64()); // piCout << PIString(ba.convertFromBase64());
return 0; // return 0;
// int i = 0; // int i = 0;
// piCout << i++ << "!" << s << "!"; // piCout << i++ << "!" << s << "!";
// piCout << i << "!" << s.trimmed() << "!"; // piCout << i << "!" << s.trimmed() << "!";
@@ -158,18 +160,18 @@ int main(int argc, char *argv[]) {
//CDUtils::Core::instance()->test(); //CDUtils::Core::instance()->test();
//return 0; //return 0;
// piCout << "init"; // piCout << "init";
// screen.rootTile()->addTile(new TilePICout()); screen.rootTile()->addTile(new TilePICout());
// screen.enableExitCapture('q'); screen.enableExitCapture('q');
// screen.start(); // piMSleep(3000);
screen.start();
piCout << "start"; piCout << "start";
Core core; Core core;
core.load(); core.load();
core.test(); // core.save();
core.save(); // K.send();
K.send();
// screen.waitForFinish(); screen.waitForFinish();
return 0; return 0;
} }

View File

@@ -9,7 +9,6 @@ endif()
find_package(Qt4 REQUIRED) find_package(Qt4 REQUIRED)
find_package(OpenGL REQUIRED) find_package(OpenGL REQUIRED)
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${PIP_INCLUDES} ${QT_INCLUDES} ${CMAKE_CURRENT_SOURCE_DIR}/../) include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${PIP_INCLUDES} ${QT_INCLUDES} ${CMAKE_CURRENT_SOURCE_DIR}/../)
add_definitions(-DCDPULT)
file(GLOB CPPS "*.cpp") file(GLOB CPPS "*.cpp")
file(GLOB MOCS "*.h") file(GLOB MOCS "*.h")
file(GLOB UIS "*.ui") file(GLOB UIS "*.ui")

View File

@@ -56,6 +56,10 @@ config(piqt(config_), QIODevice::ReadWrite) {
ui->treeCDK->setModel(kmodel); ui->treeCDK->setModel(kmodel);
delegate = new CDKDelegate(); delegate = new CDKDelegate();
ui->treeCDK->setItemDelegateForColumn(4, delegate); ui->treeCDK->setItemDelegateForColumn(4, delegate);
CONNECTU(&K, sended, this, pip_sendSucceed);
CONNECTU(&K, sendFailed, this, pip_sendFailed);
CONNECTU(&K, received, this, pip_receiveSucceed);
CONNECTU(&K, receiveFailed, this, pip_receiveFailed);
connect(this, SIGNAL(q_k_sendFailed()), this, SLOT(k_sendFailed()), Qt::QueuedConnection); connect(this, SIGNAL(q_k_sendFailed()), this, SLOT(k_sendFailed()), Qt::QueuedConnection);
connect(this, SIGNAL(q_k_sendSucceed()), this, SLOT(k_sendSucceed()), Qt::QueuedConnection); connect(this, SIGNAL(q_k_sendSucceed()), this, SLOT(k_sendSucceed()), Qt::QueuedConnection);
connect(this, SIGNAL(q_k_receiveFailed()), this, SLOT(k_receiveFailed()), Qt::QueuedConnection); connect(this, SIGNAL(q_k_receiveFailed()), this, SLOT(k_receiveFailed()), Qt::QueuedConnection);
@@ -68,6 +72,7 @@ config(piqt(config_), QIODevice::ReadWrite) {
connect(ui->lineKSearch, SIGNAL(textChanged(QString)), this, SLOT(filterTree())); connect(ui->lineKSearch, SIGNAL(textChanged(QString)), this, SLOT(filterTree()));
session.load(); session.load();
on_spinBuffer_editingFinished(); on_spinBuffer_editingFinished();
K.reinitConnection(K.pultConfig());
K.configure(config_); K.configure(config_);
K.readFile(); K.readFile();
updateKDesc(); updateKDesc();
@@ -234,11 +239,6 @@ void CD_Pult::makeTreeSection(CDSection & ks, QTreeWidgetItem * pi) {
} }
void CD_Pult::received(bool ok) {
if (!ok) return;
}
void CD_Pult::on_treeK_itemClicked(QTreeWidgetItem * item, int column) { void CD_Pult::on_treeK_itemClicked(QTreeWidgetItem * item, int column) {
Qt::ItemFlags f = Qt::ItemIsEnabled | Qt::ItemIsSelectable; Qt::ItemFlags f = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
if (column == 2) f |= Qt::ItemIsEditable; if (column == 2) f |= Qt::ItemIsEditable;
@@ -256,7 +256,8 @@ void CD_Pult::on_treeK_itemChanged(QTreeWidgetItem * item, int column) {
void CD_Pult::on_buttonSendK_clicked() { void CD_Pult::on_buttonSendK_clicked() {
on_buttonWrite_clicked(); // on_buttonWrite_clicked();
K.send();
//coeffs.sendCoeffs(); //coeffs.sendCoeffs();
if (timer != 0) killTimer(timer); if (timer != 0) killTimer(timer);
timer = startTimer(100); timer = startTimer(100);
@@ -264,6 +265,8 @@ void CD_Pult::on_buttonSendK_clicked() {
void CD_Pult::on_buttonReceiveK_clicked() { void CD_Pult::on_buttonReceiveK_clicked() {
K.request();
// K.se
//coeffs.receiveCoeffs(); //coeffs.receiveCoeffs();
if (timer != 0) killTimer(timer); if (timer != 0) killTimer(timer);
timer = startTimer(100); timer = startTimer(100);
@@ -319,30 +322,27 @@ void CD_Pult::on_buttonSetCDesc_clicked() {
void CD_Pult::k_sendFailed() { void CD_Pult::k_sendFailed() {
stopWait();
addToList(trUtf8("K not sended"), Qt::darkRed); addToList(trUtf8("K not sended"), Qt::darkRed);
if (timer != 0) killTimer(timer);
} }
void CD_Pult::k_sendSucceed() { void CD_Pult::k_sendSucceed() {
stopWait(); addToList(trUtf8("K sended"), Qt::darkGreen);;
addToList(trUtf8("K sended"), Qt::darkGreen); if (timer != 0) killTimer(timer);
} }
void CD_Pult::k_receiveFailed() { void CD_Pult::k_receiveFailed() {
stopWait();
addToList(trUtf8("K not received"), Qt::darkRed); addToList(trUtf8("K not received"), Qt::darkRed);
if (timer != 0) killTimer(timer);
} }
void CD_Pult::k_receiveSucceed() { void CD_Pult::k_receiveSucceed() {
stopWait();
addToList(trUtf8("K received"), Qt::darkGreen); addToList(trUtf8("K received"), Qt::darkGreen);
//addToList(trUtf8("Write K file \"%1\": %2 coeffs, %3 bytes").arg(PI2QString(coeffs.fileName())).arg(K.size_s()).arg(coeffs.k_content.size_s()), Qt::darkMagenta); if (timer != 0) killTimer(timer);
//ui->spinSize->setValue(K.size_s());
updateTree(); updateTree();
//ui->table->setK(coeffsK.k()->data(), coeffsK.count());
} }
@@ -351,13 +351,6 @@ void CD_Pult::on_spinBuffer_editingFinished() {
} }
void CD_Pult::stopWait() {
killTimer(timer);
timer = 0;
ui->labelWait->setText(" ");
}
void CD_Pult::updateGraph() { void CD_Pult::updateGraph() {
ui->graphic->updateGraphics(); ui->graphic->updateGraphics();
} }

View File

@@ -22,6 +22,7 @@
#include "piqt.h" #include "piqt.h"
#include "session_manager.h" #include "session_manager.h"
#include "qpievaluator.h" #include "qpievaluator.h"
#include "cdutils_core.h"
#include "cdutils_k.h" #include "cdutils_k.h"
#include "cd_kmodel.h" #include "cd_kmodel.h"
@@ -52,7 +53,6 @@ private:
QString typeName(const QString & n) const; QString typeName(const QString & n) const;
void makeTreeSection(CDUtils::CDSection & ks, QTreeWidgetItem * pi); void makeTreeSection(CDUtils::CDSection & ks, QTreeWidgetItem * pi);
EVENT_HANDLER1(void, received, bool, ok);
EVENT_HANDLER(void, pip_sendFailed) {emit q_k_sendFailed();} EVENT_HANDLER(void, pip_sendFailed) {emit q_k_sendFailed();}
EVENT_HANDLER(void, pip_sendSucceed) {emit q_k_sendSucceed();} EVENT_HANDLER(void, pip_sendSucceed) {emit q_k_sendSucceed();}
EVENT_HANDLER(void, pip_receiveFailed) {emit q_k_receiveFailed();} EVENT_HANDLER(void, pip_receiveFailed) {emit q_k_receiveFailed();}

112
cd_utils/pult/cdkview.cpp Normal file
View File

@@ -0,0 +1,112 @@
#include <QDir>
#include "cdutils_k.h"
#include "cdkview.h"
#include "cd_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() {
delete kmodel;
}
void CDKView::refresh() {
if (!kmodel) {
K.reinitConnection(K.pultConfig());
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::sendK() {
bisyStatusChanged(true);
K.send();
}
void CDKView::receiveK() {
bisyStatusChanged(true);
K.request();
}
void CDKView::saveK() {
K.writeFile();
}
void CDKView::loadK() {
K.readFile();
refresh();
}
void CDKView::clearK() {
K.root() = CDSection();
refresh();
}
void CDKView::buildFromHeader(const QString &kdescription) {
if (kdescription.isEmpty()) return;
PIString kdesc_file = Q2PIString(QDir::current().relativeFilePath(kdescription));
PIFile f(kdesc_file, PIIODevice::ReadOnly);
K.update(&f);
refresh();
}
void CDKView::k_sendFailed() {
bisyStatusChanged(false);
emit messageStatus("send failed");
emit KSendFailed();
}
void CDKView::k_sendSucceed() {
bisyStatusChanged(false);
emit messageStatus("send success");
emit KSendSucceed();
}
void CDKView::k_receiveFailed() {
bisyStatusChanged(false);
emit messageStatus("receive failed");
emit KReceiveFailed();
}
void CDKView::k_receiveSucceed() {
bisyStatusChanged(false);
emit messageStatus("receive success");
refresh();
emit KReceiveSucceed();
}

58
cd_utils/pult/cdkview.h Normal file
View File

@@ -0,0 +1,58 @@
#ifndef CDKVIEW_H
#define CDKVIEW_H
#include "piobject.h"
#include <QTreeView>
class CDKItemModel;
class CDKView : public QTreeView, public PIObject
{
Q_OBJECT
PIOBJECT(CDKView)
public:
explicit CDKView(QWidget *parent = 0);
~CDKView();
void refresh();
void setKFile(const QString & filename);
CDKItemModel * CDKModel() {return kmodel;}
public slots:
void sendK();
void receiveK();
void saveK();
void loadK();
void clearK();
void buildFromHeader(const QString & kdescription);
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 bisyStatusChanged(bool bisy);
void _qcdk_sendFailed(); // PRIVATE
void _qcdk_sendSucceed(); // PRIVATE
void _qcdk_receiveFailed(); // PRIVATE
void _qcdk_receiveSucceed(); // PRIVATE
};
#endif // CDKVIEW_H

33
cd_utils/pult/form.cpp Normal file
View File

@@ -0,0 +1,33 @@
#include "form.h"
#include "ui_form.h"
#include "QFileDialog"
Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) {
ui->setupUi(this);
ui->treeView->setKFile("");
ui->treeView->refresh();
}
Form::~Form() {
delete ui;
}
void Form::on_pushButton_3_clicked() {
ui->treeView->setKFile(QFileDialog::getSaveFileName(this, "Save"));
ui->treeView->saveK();
ui->treeView->setKFile("");
}
void Form::on_pushButton_4_clicked() {
ui->treeView->setKFile(QFileDialog::getOpenFileName(this, "Open"));
ui->treeView->loadK();
ui->treeView->setKFile("");
}
void Form::on_pushButton_6_clicked() {
ui->treeView->buildFromHeader(QFileDialog::getOpenFileName(this, trUtf8("Select *.h file with K description"), "k_description.h", "C/C++ header files(*.h *.hpp);;All files(*)"));
}

29
cd_utils/pult/form.h Normal file
View File

@@ -0,0 +1,29 @@
#ifndef FORM_H
#define FORM_H
#include <QWidget>
namespace Ui {
class Form;
}
class Form : public QWidget
{
Q_OBJECT
public:
explicit Form(QWidget *parent = 0);
~Form();
private slots:
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_6_clicked();
private:
Ui::Form *ui;
};
#endif // FORM_H

163
cd_utils/pult/form.ui Normal file
View File

@@ -0,0 +1,163 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>581</width>
<height>432</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="0" colspan="2">
<widget class="CDKView" name="treeView"/>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>Send</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>Receive</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>Load</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="pushButton_5">
<property name="text">
<string>Clear</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="pushButton_6">
<property name="text">
<string>update from KDescription</string>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>CDKView</class>
<extends>QTreeView</extends>
<header location="global">cdkview.h</header>
<slots>
<signal>bisyStatusChanged(bool)</signal>
<slot>sendK()</slot>
<slot>receiveK()</slot>
<slot>saveK()</slot>
<slot>loadK()</slot>
<slot>clear()</slot>
<slot>clearK()</slot>
</slots>
</customwidget>
</customwidgets>
<resources/>
<connections>
<connection>
<sender>pushButton_2</sender>
<signal>clicked()</signal>
<receiver>treeView</receiver>
<slot>receiveK()</slot>
<hints>
<hint type="sourcelabel">
<x>569</x>
<y>69</y>
</hint>
<hint type="destinationlabel">
<x>410</x>
<y>152</y>
</hint>
</hints>
</connection>
<connection>
<sender>treeView</sender>
<signal>bisyStatusChanged(bool)</signal>
<receiver>pushButton_2</receiver>
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>309</x>
<y>174</y>
</hint>
<hint type="destinationlabel">
<x>569</x>
<y>66</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_5</sender>
<signal>clicked()</signal>
<receiver>treeView</receiver>
<slot>clearK()</slot>
<hints>
<hint type="sourcelabel">
<x>463</x>
<y>104</y>
</hint>
<hint type="destinationlabel">
<x>468</x>
<y>188</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton</sender>
<signal>clicked()</signal>
<receiver>treeView</receiver>
<slot>sendK()</slot>
<hints>
<hint type="sourcelabel">
<x>190</x>
<y>65</y>
</hint>
<hint type="destinationlabel">
<x>198</x>
<y>152</y>
</hint>
</hints>
</connection>
<connection>
<sender>treeView</sender>
<signal>bisyStatusChanged(bool)</signal>
<receiver>pushButton</receiver>
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>177</x>
<y>246</y>
</hint>
<hint type="destinationlabel">
<x>98</x>
<y>46</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@@ -1,10 +1,10 @@
#include <QtGui/QApplication> #include <QtGui/QApplication>
#include "cd_pult.h" #include "form.h"
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
QApplication a(argc, argv); QApplication a(argc, argv);
CD_Pult w; Form w;
w.show(); w.show();
return a.exec(); return a.exec();
} }