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

This commit is contained in:
2016-07-13 13:40:33 +00:00
parent f14a58cf19
commit f30c749428
10 changed files with 346 additions and 36 deletions

View File

@@ -13,7 +13,7 @@ set(PIP_FOLDERS "." "core" "containers" "thread" "system" "io" "console" "math"
foreach(F ${PIP_FOLDERS})
set(PIP_INCLUDES ${PIP_INCLUDES} "../pip/src/${F}")
endforeach(F)
set(LIST_LIBS pip qad_widgets qad_utils qad_application qad_blockview qad_graphic qad_sql_table piqt mbricks kx_utils piqt_utils touch_widgets qglview)
set(LIST_LIBS pip qad_widgets qad_utils qad_application qad_blockview qad_graphic qad_sql_table piqt mbricks cd_utils kx_utils piqt_utils touch_widgets qglview)
foreach(L ${LIST_LIBS})
add_subdirectory(${L})
include_directories(${L})

View File

@@ -15,8 +15,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall")
if (DEBUG)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
endif ()
set(CPPS_UTILS "cdutils_core.cpp")
set(HDRS_UTILS "cdutils_core.h")
set(CPPS_UTILS "cdutils_core.cpp" "cdutils_k_types.cpp" "cdutils_k.cpp")
set(HDRS_UTILS "cdutils_core.h" "cdutils_k_types.h" "cdutils_k.h")
if (DEFINED ENV{QNX_HOST})
add_library(${PROJECT_NAME} STATIC ${CPPS_UTILS} ${HDRS_UTILS})
else ()
@@ -25,6 +25,7 @@ endif ()
target_link_libraries(${PROJECT_NAME} ${PIP_LIBRARY})
add_executable(cdutilsngtest "cdutilstest.cpp")
add_definitions(-DCDPULT)
target_link_libraries(cdutilsngtest ${PIP_LIBRARY} ${PROJECT_NAME})
# if (NOT DEFINED ENV{QNX_HOST})

View File

@@ -1,21 +1,24 @@
#include "cdutils_core.h"
#include "piconfig.h"
using namespace CDUtils;
static const char connection_config[] =
"include = ip.conf\n\
const char Core::app_config[] =
"include = cd_ip.conf\n\
port_rec = 2\n\
port_send = 1\n\
[connection]\n\
device.c = eth://UDP:127.0.0.1:36102:127.0.0.1:36101 #s\n\
device.c = eth://UDP:127.0.0.1:3610${port_rec}:127.0.0.1:3610${port_send} #s\n\
device.c.disconnectTimeout = 3.00000000 #f\n\
device.k = eth://UDP:127.0.0.1:26102:127.0.0.1:26101 #s\n\
device.k = eth://UDP:127.0.0.1:2610${port_rec}:127.0.0.1:2610${port_send} #s\n\
device.k.disconnectTimeout = 3.00000000 #f\n\
device.x = eth://UDP:127.0.0.1:16102:127.0.0.1:16101 #s\n\
device.x = eth://UDP:127.0.0.1:1610${port_rec}:127.0.0.1:1610${port_send} #s\n\
device.x.disconnectTimeout = 3.00000000 #f\n\
device.c_eth = eth://UDP:${ip_kx}:36102:${ip_kxpult}:36101 #s\n\
device.c_eth = eth://UDP:${ip_app}:3610${port_rec}:${ip_pult}:3610${port_send} #s\n\
device.c_eth.disconnectTimeout = 3.00000000 #f\n\
device.k_eth = eth://UDP:${ip_kx}:26102:${ip_kxpult}:26101 #s\n\
device.k_eth = eth://UDP:${ip_app}:2610${port_rec}:${ip_pult}:2610${port_send} #s\n\
device.k_eth.disconnectTimeout = 3.00000000 #f\n\
device.x_eth = eth://UDP:${ip_kx}:16102:${ip_kxpult}:16101 #s\n\
device.x_eth = eth://UDP:${ip_app}:1610${port_rec}:${ip_pult}:1610${port_send} #s\n\
device.x_eth.disconnectTimeout = 3.00000000 #f\n\
channel.0.from = c_eth #s\n\
channel.0.to = c #s\n\
@@ -24,8 +27,29 @@ channel.1.to = k #s\n\
channel.2.from = x_eth #s\n\
channel.2.to = x #s\n\
[]\n\
connectionmodel = AAAWNHja7ZbfShtBFMa/Xf9UrYLSXnqhErxrdSNYKBRXEMQbEVGhBBRJgob4J6SxSZBC38ELb32UBR/AV/ARfAP9MjmzyQ7TGGkaGzeznMycmTNnZn/zLRkAH5HGOc74ZNkqIac8YBhwLlk7tEHUi1trP7KwHqCN+AhLLeYHpqC7HEeFqbLygJal3XHfPjxE2/kX69UxYK32en62vnqwIXvJwOr7m1JLvPZZ3tGmBR0ErSNYXY20gbuPvxl/eSaKuxxY/RC/xPfxdwb/3u8o7u+w+iF+ie/j7wj+IBXFH+zD6mvcOr7L+PXW3xz+nIH7KLD6If4c+urvIP6qgb96Y/VD/NW/xa/W5rj7SeImg2Jg5nRlji7M4dwJk1U9jzaOAz4lVFHgHUuOsjEHo9IXnrceXJe+cbXQGQ5xak3wgTYG9ZPnSlmudWykuo7sJ8OYn7zppa3pDnS6PUn1FQt8dnkYW2wncMmpBYblUcEv9iSxDA+LrM3RAi5wwhzNUZ6xtW+Rtzzl9TPTGtOAkSAlCeZpc5yc48cQvdPusK+G7pzbKVlST6gT90ciX9Rgk8TnZdIYyigyWUntEGrHRbYPkWkIq0k0CfSCaCqvIRqvLdF48RONX7jvBdGkX0M0S22JZik2opk1RaP/Ev8gmttOimalTdG816fsElE0xdULxJLSabatYvEoii/4zGOvm2fIpdV4jISi7zH/uVDy3RVK8hmhJGMolAR6QSiV7grFe0YoMbivPAGq7YwD"
;
connectionmodel = AAAWNHja7ZbfShtBFMa/Xf9UrYLSXnqhErxrdSNYKBRXEMQbEVGhBBRJgob4J6SxSZBC38ELb32UBR/AV/ARfAP9MjmzyQ7TGGkaGzeznMycmTNnZn/zLRkAH5HGOc74ZNkqIac8YBhwLlk7tEHUi1trP7KwHqCN+AhLLeYHpqC7HEeFqbLygJal3XHfPjxE2/kX69UxYK32en62vnqwIXvJwOr7m1JLvPZZ3tGmBR0ErSNYXY20gbuPvxl/eSaKuxxY/RC/xPfxdwb/3u8o7u+w+iF+ie/j7wj+IBXFH+zD6mvcOr7L+PXW3xz+nIH7KLD6If4c+urvIP6qgb96Y/VD/NW/xa/W5rj7SeImg2Jg5nRlji7M4dwJk1U9jzaOAz4lVFHgHUuOsjEHo9IXnrceXJe+cbXQGQ5xak3wgTYG9ZPnSlmudWykuo7sJ8OYn7zppa3pDnS6PUn1FQt8dnkYW2wncMmpBYblUcEv9iSxDA+LrM3RAi5wwhzNUZ6xtW+Rtzzl9TPTGtOAkSAlCeZpc5yc48cQvdPusK+G7pzbKVlST6gT90ciX9Rgk8TnZdIYyigyWUntEGrHRbYPkWkIq0k0CfSCaCqvIRqvLdF48RONX7jvBdGkX0M0S22JZik2opk1RaP/Ev8gmttOimalTdG816fsElE0xdULxJLSabatYvEoii/4zGOvm2fIpdV4jISi7zH/uVDy3RVK8hmhJGMolAR6QSiV7grFe0YoMbivPAGq7YwD\n\
";
const char Core::pult_config[] =
"include = cd_ip.conf\n\
port_rec = 1\n\
port_send = 2\n\
[connection]\n\
device.c = eth://UDP:127.0.0.1:3610${port_rec}:127.0.0.1:3610${port_send} #s\n\
device.c.disconnectTimeout = 3.00000000 #f\n\
device.k = eth://UDP:127.0.0.1:2610${port_rec}:127.0.0.1:2610${port_send} #s\n\
device.k.disconnectTimeout = 3.00000000 #f\n\
device.x = eth://UDP:127.0.0.1:1610${port_rec}:127.0.0.1:1610${port_send} #s\n\
device.x.disconnectTimeout = 3.00000000 #f\n\
device.c_eth = eth://UDP:${ip_pult}:3610${port_rec}:${ip_app}:3610${port_send} #s\n\
device.c_eth.disconnectTimeout = 3.00000000 #f\n\
device.k_eth = eth://UDP:${ip_pult}:2610${port_rec}:${ip_app}:2610${port_send} #s\n\
device.k_eth.disconnectTimeout = 3.00000000 #f\n\
device.x_eth = eth://UDP:${ip_pult}:1610${port_rec}:${ip_app}:1610${port_send} #s\n\
device.x_eth.disconnectTimeout = 3.00000000 #f\n\
[]\n\
connectionmodel = AAAWNHja7ZbfShtBFMa/Xf9UrYLSXnqhErxrdSNYKBRXEMQbEVGhBBRJgob4J6SxSZBC38ELb32UBR/AV/ARfAP9MjmzyQ7TGGkaGzeznMycmTNnZn/zLRkAH5HGOc74ZNkqIac8YBhwLlk7tEHUi1trP7KwHqCN+AhLLeYHpqC7HEeFqbLygJal3XHfPjxE2/kX69UxYK32en62vnqwIXvJwOr7m1JLvPZZ3tGmBR0ErSNYXY20gbuPvxl/eSaKuxxY/RC/xPfxdwb/3u8o7u+w+iF+ie/j7wj+IBXFH+zD6mvcOr7L+PXW3xz+nIH7KLD6If4c+urvIP6qgb96Y/VD/NW/xa/W5rj7SeImg2Jg5nRlji7M4dwJk1U9jzaOAz4lVFHgHUuOsjEHo9IXnrceXJe+cbXQGQ5xak3wgTYG9ZPnSlmudWykuo7sJ8OYn7zppa3pDnS6PUn1FQt8dnkYW2wncMmpBYblUcEv9iSxDA+LrM3RAi5wwhzNUZ6xtW+Rtzzl9TPTGtOAkSAlCeZpc5yc48cQvdPusK+G7pzbKVlST6gT90ciX9Rgk8TnZdIYyigyWUntEGrHRbYPkWkIq0k0CfSCaCqvIRqvLdF48RONX7jvBdGkX0M0S22JZik2opk1RaP/Ev8gmttOimalTdG816fsElE0xdULxJLSabatYvEoii/4zGOvm2fIpdV4jISi7zH/uVDy3RVK8hmhJGMolAR6QSiV7grFe0YoMbivPAGq7YwD\n\
";
int __Core_Initializer__::count_(0);
@@ -52,19 +76,65 @@ __Core_Initializer__::~__Core_Initializer__() {
Core::Core() {
Core::Core(const char * conf) {
CONNECTU(&connection, dataReceivedEvent, this, dataReceived);
PIString s(connection_config);
PIString s(conf);
connection.configureFromString(&s);
connection.start();
k_[1] = KType(1, "123", "120+3", "comment");
k_[2] = KType(2, "1", "2", "comm");
k_[4] = KType(4, "-0.6", "-6/10", "mment");
k_.section(10)[5] = KType(5, "8", "2*2*2", "88");
k_.section(10).section(50)[100] = KType(100, "8", "2*2*2", "88");
k_.section(11)[3] = KType(3, "1", "1", "88");
k_.section(11)[4] = KType(4, "0", "0", "88");
k_.section(11)[6] = KType(6, "0", "0", "88");
//piCout << s;
}
void Core::k_rec(const PIByteArray & data) {
}
void Core::x_rec(const PIByteArray & data) {
}
void Core::c_rec(const PIByteArray & data) {
}
void Core::k_write(PIIODevice * d) {
k_.write(d, PIString());
}
void Core::k_read(PIIODevice * d) {
PIConfig conf(d, PIIODevice::ReadOnly);
k_.read(&(conf.rootEntry()));
}
void CDUtils::Core::dataReceived(const PIString & from, const PIByteArray & data) {
piCout << from << data;
if (data.size_s() < 4) return;
if (from == "k") k_rec(data);
if (from == "x") x_rec(data);
if (from == "c") c_rec(data);
}
void Core::K_Send() {
piCoutObj << "K_Send";
}
void Core::K_Request() {
piCoutObj << "K_Request";
}

View File

@@ -27,16 +27,32 @@ class Core: public PIObject
public:
static Core * instance() {return __Core_Initializer__::__instance__;}
EVENT(K_Sended)
EVENT(K_Received)
EVENT_HANDLER(void, K_Send);
EVENT_HANDLER(void, K_Request);
KSection k_;
void k_write(PIIODevice * d);
void k_read(PIIODevice * d);
private:
Core();
Core(const char * conf =
#ifdef CDPULT
pult_config
#else
app_config
#endif
);
EVENT_HANDLER2(void, dataReceived, const PIString &, from, const PIByteArray &, data);
void k_rec(const PIByteArray & data);
void x_rec(const PIByteArray & data);
void c_rec(const PIByteArray & data);
static const char app_config[], pult_config[];
PIConnection connection;
KSection k_plain;
PIMap<int, PIMap<int, KSection> > k_sections; // [enum KSection][index] = CDUtils::KSection
};

55
cd_utils/cdutils_k.cpp Normal file
View File

@@ -0,0 +1,55 @@
#include "cdutils_k.h"
#include "cdutils_core.h"
using namespace CDUtils;
KInterface::KInterface() {
core = Core::instance();
CONNECTU(core, K_Sended, this, sended);
CONNECTU(core, K_Received, this, received);
}
bool KInterface::test(int v) {
return core->k_.test(v);
}
KType & KInterface::operator [](int v) {
return core->k_[v];
}
const KType KInterface::operator [](int v) const {
return core->k_[v];
}
KSection & KInterface::section(int v) {
return core->k_.section(v);
}
const KSection KInterface::section(int v) const {
return core->k_.section(v);
}
void KInterface::send() {
core->K_Send();
}
void KInterface::request() {
core->K_Request();
}
void KInterface::write(PIIODevice * d) {
core->k_write(d);
}
void KInterface::read(PIIODevice * d) {
core->k_read(d);
}

41
cd_utils/cdutils_k.h Normal file
View File

@@ -0,0 +1,41 @@
#ifndef CDUTILS_K_H
#define CDUTILS_K_H
#include "cdutils_k_types.h"
#include "piobject.h"
namespace CDUtils {
class Core;
class KInterface: public PIObject
{
PIOBJECT(CDUtils::KInterface)
public:
KInterface();
bool test(int v);
KType & operator [](int v);
const KType operator [](int v) const;
KSection & section(int v);
const KSection section(int v) const;
EVENT(sended)
EVENT(received)
EVENT_HANDLER(void, send);
EVENT_HANDLER(void, request);
void write(PIIODevice * d);
void read(PIIODevice * d);
private:
Core * core;
};
static KInterface K;
}
#endif // CDUTILS_K_H

View File

@@ -0,0 +1,77 @@
#include "cdutils_k_types.h"
#include "piconfig.h"
using namespace CDUtils;
KType::KType() {
index_ = -1;
value_d = 0.;
value_i = 0;
value_b = false;
}
KType::KType(int i, const PIString & v, const PIString & f, const PIString & c) {
index_ = i;
value_s = v;
formula_ = f;
comment_ = c;
value_d = v.toDouble();
value_i = v.toInt();
value_b = v.toBool();
}
void KSection::write(PIIODevice * d, const PIString & prefix) {
if (!d) return;
if (k.isEmpty() && s.isEmpty()) return;
PIString l;
if (!k.isEmpty()) {
if (prefix.isEmpty()) l = "[k]";
else l = "[" + prefix + ".k]";
l += "\n";
d->write(l.toByteArray());
PIMap<int, KType>::iterator i;
for (i = k.begin(); i != k.end(); ++i) {
KType & ck(i.value());
l.clear();
l << ck.index() << ".f = " << ck.formula() << " #s " << ck.comment() << "\n";
l << ck.index() << ".v = " << ck.value() << "\n";
d->write(l.toByteArray());
}
}
if (!s.isEmpty()) {
if (prefix.isEmpty()) l = "s";
else l = prefix + ".s";
PIMap<int, KSection>::iterator j;
for (j = s.begin(); j != s.end(); ++j) {
j.value().write(d, l + "." + PIString::fromNumber(j.key()));
}
}
if (prefix.isEmpty()) {
l = "[]\n";
d->write(l.toByteArray());
}
}
void KSection::read(const void * ep) {
k.clear();
s.clear();
PIConfig::Entry & e(*(PIConfig::Entry*)ep);
PIConfig::Entry & kl = e.getValue("k");
for (int i = 0; i < kl.childCount(); ++i) {
const PIConfig::Entry * ke(kl.child(i));
int kid = ke->name().toInt();
k[kid] = KType(kid, ke->getValue("v").value(), ke->getValue("f").value(), ke->getValue("f").comment());
}
PIConfig::Entry & sl = e.getValue("s");
for (int i = 0; i < sl.childCount(); ++i) {
const PIConfig::Entry * se(sl.child(i));
int sid = se->name().toInt();
KSection cs;
cs.read(se);
s[sid] = cs;
}
}

View File

@@ -2,26 +2,18 @@
#define CDUTILS_K_TYPES_H
#include "pistring.h"
#include "pimap.h"
class PIIODevice;
namespace CDUtils {
class KType {
public:
KType() {
value_d = 0.;
value_i = 0;
value_b = false;
}
KType(const PIString & v, const PIString & f, const PIString & c) {
value_s = v;
formula_ = f;
comment_ = c;
value_d = v.toDouble();
value_i = v.toInt();
value_b = v.toBool();
}
KType();
KType(int i, const PIString & v, const PIString & f, const PIString & c);
int index() const {return index_;}
PIString value() const {return value_s;}
PIString formula() const {return formula_;}
PIString comment() const {return comment_;}
@@ -32,6 +24,7 @@ public:
operator double() const {return value_d;}
private:
int index_;
PIString value_s, formula_, comment_;
double value_d;
int value_i;
@@ -42,18 +35,31 @@ private:
class KSection {
friend class Core;
friend class KInterface;
public:
KSection() {}
bool test(int v) {return k.value(v).toBool();}
KType operator [](int v) const {return k[v];}
KType & operator [](int v) {return k[v];}
const KType operator [](int v) const {return k[v];}
KSection & section(int v) {return s[v];}
const KSection section(int v) const {return s[v];}
private:
KSection(PIMap<int, KType> k_ = PIMap<int, KType>()) {k = k_;}
KSection(PIMap<int, KType> k_, PIMap<int, KSection> s_) {
k = k_;
s = s_;
}
void write(PIIODevice * d, const PIString & prefix = PIString());
void read(const void * ep);
PIMap<int, KType> k;
PIMap<int, KSection> s;
};
}
inline PICout operator <<(PICout s, const CDUtils::KType & v) {s.space(); s.setControl(0, true); s << "K[" << v.index() << "] = " << v.value(); s.restoreControl(); return s;}
#endif // CDUTILS_K_TYPES_H

View File

@@ -1,12 +1,42 @@
#include "cdutils_core.h"
#include "cdutils_k.h"
#include "piethernet.h"
#include "piiostring.h"
int main(int argc, char *argv[]) {
PIEthernet eth;
eth.send("127.0.0.1:16102", PIByteArray("data\n", 5));
eth.send("127.0.0.1:26102", PIByteArray("data\n", 5));
eth.send("127.0.0.1:36102", PIByteArray("data\n", 5));
piMSleep(1000);
PIString s = "[k]\n\
1.f = 120+3 #s comment\n\
1.v = 123\n\
2.f = 2 #s comm\n\
2.v = 1\n\
4.f = -6/10 #s mment\n\
4.v = -0.6\n\
[s.10.k]\n\
5.f = 2*2*2\n\
5.v = 8 #s 88\n\
[s.10.s.50.k]\n\
100.f = 2*2*2\n\
100.v = 8 #s 88\n\
[s.11.k]\n\
3.f = 1\n\
3.v = 1 #s 88 \n\
4.f = 0\n\
4.v = 0 #s 88 \n\
6.f = 0\n\
6.v = 0 #s 881 \n\
[]\n\
";
PIIOString ios(&s);
CDUtils::K.read(&ios);
s.clear();
PIIOString iosw(&s);
CDUtils::K.write(&iosw);
piCout << s;
//piMSleep(1000);
//CDUtils::Core::instance()->test();
return 0;
}

View File

@@ -881,6 +881,13 @@ void Graphic::drawGrid() {
painter->drawText(cx - rect.width() - dx, cy, str.first);
}
}
cy = real2canvasY(0.);
if (cy >= 0 && cy <= (hei + 5)) {
QPen _p(grid_pen);
_p.setStyle(Qt::SolidLine);
painter->setPen(_p);
painter->drawLine(gbx, cy, cwid, cy);
}
if (hasLblY) {
painter->setPen(text_color);
painter->save();
@@ -923,6 +930,13 @@ void Graphic::drawGrid() {
}
}
}
cx = real2canvasX(0.);
if (cx <= cwid && cx >= gbx) {
QPen _p(grid_pen);
_p.setStyle(Qt::SolidLine);
painter->setPen(_p);
painter->drawLine(cx, hei + 5, cx, 0);
}
} else {
int cur_scl[7] = {0,0,0,0,0,0,0};
step = splitRangeDate(range, wid / gridx / font_sz.width() * 1.4, &df, cur_scl);