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

This commit is contained in:
2017-01-22 21:14:32 +00:00
parent 30fd5d2a07
commit 9f9b624124
65 changed files with 547 additions and 144 deletions

View File

@@ -21,7 +21,7 @@ if (WIN32)
set(PIP_DLL_DIR "${CMAKE_CURRENT_BINARY_DIR}/pip")
endif()
set(LIST_LIBS pip qad_widgets qad_utils qad_application qad_blockview qad_graphic qad_sql_table piqt cd_utils 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 cd_utils qcd_utils kx_utils piqt_utils touch_widgets qglview)
foreach(L ${LIST_LIBS})
add_subdirectory(${L})
include_directories(${L})

View File

@@ -8,7 +8,6 @@ if (MINGW)
endif()
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${PIP_INCLUDES})
set(PULT_NAME "cd_pult")
option(PULT "Build ${PULT_NAME}" 1)
option(LIB "System install" 1)
option(DEBUG "Build with -g3" 0)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall")
@@ -29,24 +28,6 @@ target_link_libraries(${PROJECT_NAME} ${PIP_LIBRARY})
add_executable(cdutilstest "cdutilstest.cpp" "cdtest.h")
target_link_libraries(cdutilstest ${PIP_LIBRARY} ${PROJECT_NAME})
if (NOT DEFINED ENV{QNX_HOST})
if (PULT)
add_subdirectory(pult)
# find_package(Qt4 REQUIRED)
# find_package(OpenGL REQUIRED)
# include_directories(${QT_INCLUDES})
# set(CPPS "kx_pult.cpp" "kx_pult.h" "kx_pult.ui" "main_kx_pult.cpp")
# set(MOCS "kx_pult.h")
# file(GLOB UIS "*.ui")
# file(GLOB RES "*.qrc")
# qt4_wrap_cpp(CMOCS ${MOCS} OPTIONS -nw)
# qt4_wrap_ui(CUIS ${UIS})
# qt4_add_resources(RESS ${RES})
# add_executable(${KX_PULT_NAME} WIN32 ${CPPS} ${CMOCS} ${CUIS} ${RESS} ${MOCS})
# set(LIBS ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY} ${OPENGL_LIBRARIES} ${PIP_LIBRARY} qad_graphic qad_utils qad_widgets)
# target_link_libraries(${KX_PULT_NAME} ${LIBS} ${PROJECT_NAME})
endif ()
endif ()
if (LIB)
if (WIN32)
set(CMAKE_INSTALL_PREFIX ${MINGW_DIR})
@@ -63,8 +44,3 @@ else ()
install(TARGETS ${PROJECT_NAME} DESTINATION bin)
message(STATUS "Install to local \"bin\"")
endif ()
#if (NOT DEFINED ENV{QNX_HOST})
# if (KX_PULT)
# install(TARGETS ${KX_PULT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
# endif ()
#endif ()

View File

@@ -57,11 +57,11 @@ __Core_Initializer__::~__Core_Initializer__() {
CDCore::CDCore() {
setName("CDCore");
CONNECTU(&connection, dataReceivedEvent, this, dataReceived);
PIString s(app_config);
connection.configureFromString(&s);
datatr.setPacketSize(960);
connection.start();
CONNECTU(&connection, dataReceivedEvent, this, dataReceived);
/*PIString s(app_config);
connection.configureFromString(&s);
connection.start();*/
k_.name = "__root__";
k_.alias = "root";
@@ -99,6 +99,8 @@ void CDCore::k_write(PIIODevice * d) {
void CDCore::k_read(PIIODevice * d) {
PIConfig conf(d, PIIODevice::ReadOnly);
k_.read(&(conf.rootEntry()));
k_.makePath();
K_ChangedGlobal();
PIVector<PIIODevice * > ds = connection.allDevices();
// piForeach(PIIODevice * d, ds) {
// if (d)
@@ -109,6 +111,8 @@ void CDCore::k_read(PIIODevice * d) {
void CDCore::k_parse(PIIODevice * d) {
k_ = CDParser::parse(d, CDType::cdK);
k_.makePath();
K_ChangedGlobal();
k_.name = "__root__";
k_.alias = "root";
}
@@ -126,15 +130,28 @@ void CDCore::k_update(PIIODevice * d) {
uk.update(k_, kn);
//piCout << k_.count() << uk.count();
k_ = uk;
k_.makePath();
K_ChangedGlobal();
}
void CDCore::k_calculate() {
k_.calculate();
K_ChangedGlobal();
}
void CDCore::reinitConnection(const PIString & configuration) {
void CDCore::initApp() {
init(appConfig());
}
void CDCore::initPult() {
init(pultConfig());
}
void CDCore::init(const PIString & configuration) {
PIString c = configuration;
connection.stop();
connection.removeAllDevices();

View File

@@ -25,6 +25,8 @@ class CDCore: public PIObject
{
PIOBJECT(CDUtils::CDCore)
friend class __Core_Initializer__;
friend class CDSection;
friend class KInterface;
public:
static CDCore * instance() {return __Core_Initializer__::__instance__;}
@@ -32,23 +34,27 @@ public:
EVENT(K_SendFail)
EVENT(K_Received)
EVENT(K_ReceiveFail)
EVENT(K_ChangedGlobal)
EVENT1(K_KeepNamesRequest, bool*, kn)
EVENT_HANDLER(void, K_Send);
EVENT_HANDLER(void, K_Request);
CDSection k_;
void k_write(PIIODevice * d);
void k_read(PIIODevice * d);
void k_parse(PIIODevice * d);
void k_update(PIIODevice * d);
void k_calculate();
PIString pultConfig() {return PIString(pult_config);}
PIString appConfig() {return PIString(app_config);}
void reinitConnection(const PIString & configuration);
void initApp();
void initPult();
void init(const PIString & configuration);
void startPing();
bool inProgress() {return sendt.isRunning();}
CDSection & k() {return k_;}
static PIString pultConfig() {return PIString(pult_config);}
static PIString appConfig() {return PIString(app_config);}
private:
CDCore();
~CDCore();
@@ -65,6 +71,7 @@ private:
PIByteArray send_data;
PIThread sendt;
PITimer x_timer;
CDSection k_;
};

View File

@@ -89,7 +89,7 @@ bool KInterface::configure(const PIString & config, const PIString & sect) {
void KInterface::reinitConnection(const PIString &configuration) {
core->reinitConnection(configuration);
core->init(configuration);
}

View File

@@ -231,6 +231,14 @@ CDType & CDSection::operator [](const PIString & name_) {
}
CDType & CDSection::operator [](const PIDeque<int> & path_) {
if (path_.isEmpty()) return null;
CDSection & s(*this);
for (int i = 0; i < path_.size_s() - 1; ++i)
s = s.section(path_[i]);
return s[path_.back()];
}
int CDSection::count(bool recursive) const {
int ret = k.size_s();
if (recursive) {
@@ -333,18 +341,14 @@ void CDSection::read(const void * ep) {
void CDSection::update(CDSection & v, bool keep_names) {
// piCout << "[CDSection] update start";
PIMap<PIString, int> vk_ids;
PIMap<PIString, PIString> prev_k_f;
PISet<int> used;
PIMap<int, CDType>::iterator i;
for (i = v.k.begin(); i != v.k.end(); ++i)
vk_ids[i.value().name_] = i.value().index_;
for (i = k.begin(); i != k.end(); ++i) {
if (keep_names) {
if (vk_ids.contains(i.value().name_)) {
k[i.key()] = v.k[vk_ids[i.value().name_]];
continue;
}
for (i = k.begin(); i != k.end(); ++i)
prev_k_f[i.value().name_] = i.value().formula();
}
for (i = k.begin(); i != k.end(); ++i) {
if (v.k.contains(i.key())) {
PIString f = k[i.key()].formula_;
CDType & cdt = v.k[i.key()];
@@ -352,10 +356,17 @@ void CDSection::update(CDSection & v, bool keep_names) {
k[i.key()] = cdt;
used << i.key();
}
if (keep_names) {
CDType & ck(k[i.key()]);
if (prev_k_f.contains(ck.name_))
ck.setFormula(prev_k_f[ck.name_]);
}
}
for (i = v.k.begin(); i != v.k.end(); ++i) {
if (!used.contains(i.key()))
k[i.key()] = i.value();
CDType & ck(k[i.key()]);
ck.setFormula(prev_k_f.value(ck.name_));
}
used.clear();
PIMap<int, CDSection>::iterator j;
@@ -415,3 +426,33 @@ void CDSection::calculateRecursive(PIEvaluator * e) {
}
void CDSection::makePath(PIDeque<int> p) {
PIDeque<int> tp;
PIMap<int, CDType>::iterator i;
for (i = k.begin(); i != k.end(); ++i) {
tp = p;
tp << i.key();
i.value().path_ = tp;
}
PIMap<int, CDSection>::iterator j;
for (j = s.begin(); j != s.end(); ++j) {
tp = p;
tp << j.key();
j.value().makePath(tp);
}
}
PIVector<CDType * > CDSection::children(bool recursive) const {
PIVector<CDType * > ret;
PIMap<int, CDType>::const_iterator i;
for (i = k.begin(); i != k.end(); ++i)
ret << const_cast<CDType * >(&(i.value()));
if (!recursive) return ret;
PIMap<int, CDSection>::const_iterator j;
for (j = s.begin(); j != s.end(); ++j)
ret << j.value().children(true);
return ret;
}

View File

@@ -35,6 +35,7 @@ public:
operator double() const {return value_d;}
const PIStringList & enumValues() const {return enum_values;}
const PIString & errorString() const {return error_;}
PIDeque<int> path() const {return path_;}
protected:
bool calculate(PIEvaluator * e, PIVector<const CDType * > stack = PIVector<const CDType * >());
@@ -44,6 +45,7 @@ protected:
PIString value_s, formula_, comment_, error_;
PIStringList enum_values;
CDSection * parent;
PIDeque<int> path_;
double value_d;
int value_i;
bool value_b, calculated;
@@ -66,6 +68,8 @@ public:
const CDType operator [](int v) const {return k[v];}
CDType & operator [](const PIString & name_);
const CDType operator [](const PIString & name_) const {return (*this)[name_];}
CDType & operator [](const PIDeque<int> & path_);
const CDType operator [](const PIDeque<int> & path_) const {return (*this)[path_];}
CDSection & section(int v) {return s[v];}
const CDSection section(int v) const {return s[v];}
@@ -75,6 +79,8 @@ public:
PIVector<int> indexes() const {return k.keys();}
PIStringList index_names() const;
void calculate();
void makePath(PIDeque<int> p = PIDeque<int>());
PIVector<CDType * > children(bool recursive = true) const;
PIString name;
PIString alias;
@@ -110,7 +116,7 @@ inline PICout operator <<(PICout s, const CDUtils::CDType & v) {
}
s << v.name() << "(" << v.index() << ")] = " << v.value();
s.restoreControl();
return s;\
return s;
}
#endif // CDUTILS_TYPES_H

View File

@@ -1,60 +0,0 @@
project(cd_pult)
cmake_minimum_required(VERSION 2.6)
if (NOT LIBPROJECT)
find_package(PIP REQUIRED)
endif ()
if (MINGW)
find_package(MinGW REQUIRED)
endif()
find_package(Qt4 REQUIRED)
find_package(OpenGL REQUIRED)
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${PIP_INCLUDES} ${QT_INCLUDES} ${CMAKE_CURRENT_SOURCE_DIR}/../)
file(GLOB CPPS "*.cpp")
file(GLOB MOCS "*.h")
file(GLOB UIS "*.ui")
file(GLOB RES "*.qrc")
qt4_wrap_cpp(CMOCS ${MOCS} OPTIONS -nw)
qt4_wrap_ui(CUIS ${UIS})
qt4_add_resources(RESS ${RES})
add_executable(${PROJECT_NAME} ${CPPS} ${CMOCS} ${CUIS} ${RESS} ${MOCS})
set(LIBS ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY} ${OPENGL_LIBRARIES} ${PIP_LIBRARY} qad_graphic qad_utils qad_widgets)
target_link_libraries(${PROJECT_NAME} ${LIBS} cd_utils)
# if (NOT DEFINED ENV{QNX_HOST})
# if (PULT)
# find_package(Qt4 REQUIRED)
# find_package(OpenGL REQUIRED)
# include_directories(${QT_INCLUDES})
# set(CPPS "kx_pult.cpp" "kx_pult.h" "kx_pult.ui" "main_kx_pult.cpp")
# set(MOCS "kx_pult.h")
# file(GLOB UIS "*.ui")
# file(GLOB RES "*.qrc")
# qt4_wrap_cpp(CMOCS ${MOCS} OPTIONS -nw)
# qt4_wrap_ui(CUIS ${UIS})
# qt4_add_resources(RESS ${RES})
# add_executable(${KX_PULT_NAME} WIN32 ${CPPS} ${CMOCS} ${CUIS} ${RESS} ${MOCS})
# set(LIBS ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY} ${OPENGL_LIBRARIES} ${PIP_LIBRARY} qad_graphic qad_utils qad_widgets)
# target_link_libraries(${KX_PULT_NAME} ${LIBS} ${PROJECT_NAME})
# endif ()
# endif ()
# if (LIB)
# if (WIN32)
# set(CMAKE_INSTALL_PREFIX ${MINGW_DIR})
# install(FILES ${HDRS_UTILS} DESTINATION ${MINGW_INCLUDE})
# install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_LIB})
# install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN})
# else ()
# set(CMAKE_INSTALL_PREFIX /usr)
# install(FILES ${HDRS_UTILS} DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
# install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
# endif ()
# message(STATUS "Install to system \"${CMAKE_INSTALL_PREFIX}\"")
# else ()
# install(TARGETS ${PROJECT_NAME} DESTINATION bin)
# message(STATUS "Install to local \"bin\"")
# endif ()
# if (NOT DEFINED ENV{QNX_HOST})
# if (KX_PULT)
# install(TARGETS ${KX_PULT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
# endif ()
# endif ()

52
qcd_utils/CMakeLists.txt Normal file
View File

@@ -0,0 +1,52 @@
project(qcd_utils)
cmake_minimum_required(VERSION 2.6)
if (NOT LIBPROJECT)
find_package(PIP REQUIRED)
endif ()
if (MINGW)
find_package(MinGW REQUIRED)
endif()
find_package(Qt4 REQUIRED)
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${PIP_INCLUDES} ${QT_INCLUDES})
set(PULT_NAME "cd_pult")
option(PULT "Build ${PULT_NAME}" 1)
option(LIB "System install" 1)
option(DEBUG "Build with -g3" 0)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall")
if (DEBUG)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
endif ()
file(GLOB CPPS "*.cpp")
file(GLOB MOCS "*.h")
file(GLOB UIS "*.ui")
file(GLOB RES "*.qrc")
qt4_wrap_cpp(CMOCS ${MOCS} OPTIONS -nw)
qt4_wrap_ui(CUIS ${UIS})
qt4_add_resources(RESS ${RES})
add_library(${PROJECT_NAME} SHARED ${CPPS} ${CMOCS} ${CUIS} ${RESS} ${MOCS})
set(LIBS ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${PIP_LIBRARY} qad_widgets cd_utils piqt)
target_link_libraries(${PROJECT_NAME} ${LIBS})
if (NOT DEFINED ENV{QNX_HOST})
if (PULT)
add_subdirectory(pult)
endif ()
endif ()
if (LIB)
if (WIN32)
set(CMAKE_INSTALL_PREFIX ${MINGW_DIR})
install(FILES ${MOCS} DESTINATION ${MINGW_INCLUDE})
install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_LIB})
install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN})
get_filename_component(QTDIR ${QT_QMAKE_EXECUTABLE} PATH)
install(TARGETS ${PROJECT_NAME} DESTINATION ${QTDIR})
else ()
set(CMAKE_INSTALL_PREFIX /usr)
install(FILES ${MOCS} DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
endif ()
message(STATUS "Install to system \"${CMAKE_INSTALL_PREFIX}\"")
else ()
install(TARGETS ${PROJECT_NAME} DESTINATION bin)
message(STATUS "Install to local \"bin\"")
endif ()

4
qcd_utils/clean.bat Normal file
View File

@@ -0,0 +1,4 @@
#make clean
del /q /f /s CMakeFiles
rmdir /q /s CMakeFiles
del /q /f CMakeCache.txt Makefile cmake_install.cmake install_manifest.txt *.user* *~ *cxx moc_* ui_* qrc_* *.o *.exe *.a *.dll *.lib core *.qrc.depends

1
qcd_utils/make_lib.bat Normal file
View File

@@ -0,0 +1 @@
cmake -G "MinGW Makefiles" -DLIB=1 && make install . %*

View File

@@ -0,0 +1,21 @@
project(cd_pult)
cmake_minimum_required(VERSION 2.6)
if (NOT LIBPROJECT)
find_package(PIP REQUIRED)
endif ()
if (MINGW)
find_package(MinGW REQUIRED)
endif()
find_package(Qt4 REQUIRED)
find_package(OpenGL REQUIRED)
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${PIP_INCLUDES} ${QT_INCLUDES} ${CMAKE_CURRENT_SOURCE_DIR}/../)
file(GLOB PULT_CPPS "*.cpp")
file(GLOB PULT_MOCS "*.h")
file(GLOB PULT_UIS "*.ui")
file(GLOB PULT_RES "*.qrc")
qt4_wrap_cpp(PULT_CMOCS ${PULT_MOCS} OPTIONS -nw)
qt4_wrap_ui(PULT_CUIS ${PULT_UIS})
qt4_add_resources(PULT_RESS ${PULT_RES})
add_executable(${PROJECT_NAME} ${PULT_CPPS} ${PULT_CMOCS} ${PULT_CUIS} ${PULT_RESS} ${PULT_MOCS})
set(LIBS ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY} ${OPENGL_LIBRARIES} ${PIP_LIBRARY} qad_graphic qad_utils qad_widgets qcd_utils)
target_link_libraries(${PROJECT_NAME} ${LIBS} cd_utils)

View File

@@ -24,7 +24,7 @@
#include "qpievaluator.h"
#include "cdutils_core.h"
#include "cdutils_k.h"
#include "cd_kmodel.h"
#include "qcd_kmodel.h"
namespace Ui {

View File

@@ -1,14 +1,19 @@
#include "form.h"
#include "ui_form.h"
#include "QFileDialog"
#include <QFileDialog>
#include <QDebug>
#include "cdutils_k.h"
#include "cdutils_core.h"
#include "qcd_core.h"
using namespace CDUtils;
Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) {
CDCore::instance()->initPult();
ui->setupUi(this);
ui->treeView->setKFile("");
ui->treeView->refresh();
}
@@ -28,6 +33,7 @@ void Form::on_pushButton_4_clicked() {
ui->treeView->setKFile(QFileDialog::getOpenFileName(this, "Open"));
ui->treeView->loadK();
ui->treeView->setKFile("");
qDebug() << QCDCore::instance()->bindWindow(this);
}

View File

@@ -6,21 +6,18 @@
<rect>
<x>0</x>
<y>0</y>
<width>581</width>
<height>432</height>
<width>731</width>
<height>508</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="4" column="0" colspan="2">
<widget class="CDKView" name="treeView"/>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="pushButton_3">
<item row="3" column="1">
<widget class="QPushButton" name="buttonRefresh">
<property name="text">
<string>Save</string>
<string>Refresh</string>
</property>
</widget>
</item>
@@ -31,10 +28,20 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="pushButton_2">
<item row="0" column="0">
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>Receive</string>
<string>Save</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="CDKView" name="treeView"/>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="buttonCalc">
<property name="text">
<string>Calculate</string>
</property>
</widget>
</item>
@@ -59,20 +66,66 @@
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="buttonCalc">
<item row="1" column="1">
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>Calculate</string>
<string>Receive</string>
</property>
</widget>
</item>
<item row="0" column="2" rowspan="5">
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>GroupBox</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QCheckBox" name="checkRadar_ADA_On">
<property name="text">
<string>CheckBox</string>
</property>
</widget>
</item>
<item>
<widget class="SpinSlider" name="spinSliderRadar_Antenna_Distance"/>
</item>
<item>
<widget class="QSpinBox" name="spinRadar_Antenna_SwitchRate"/>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>SpinSlider</class>
<extends>QWidget</extends>
<header>spinslider.h</header>
</customwidget>
<customwidget>
<class>CDKView</class>
<extends>QTreeView</extends>
<header location="global">cdkview.h</header>
<header location="global">qcd_kview.h</header>
<slots>
<signal>busyStatusChanged(bool)</signal>
<slot>sendK()</slot>
@@ -81,6 +134,7 @@
<slot>loadK()</slot>
<slot>clear()</slot>
<slot>clearK()</slot>
<slot>refresh()</slot>
</slots>
</customwidget>
</customwidgets>
@@ -93,11 +147,11 @@
<slot>receiveK()</slot>
<hints>
<hint type="sourcelabel">
<x>571</x>
<x>264</x>
<y>60</y>
</hint>
<hint type="destinationlabel">
<x>410</x>
<x>264</x>
<y>152</y>
</hint>
</hints>
@@ -109,11 +163,11 @@
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>309</x>
<x>264</x>
<y>174</y>
</hint>
<hint type="destinationlabel">
<x>571</x>
<x>264</x>
<y>60</y>
</hint>
</hints>
@@ -125,11 +179,11 @@
<slot>clearK()</slot>
<hints>
<hint type="sourcelabel">
<x>571</x>
<x>264</x>
<y>89</y>
</hint>
<hint type="destinationlabel">
<x>468</x>
<x>264</x>
<y>188</y>
</hint>
</hints>
@@ -141,7 +195,7 @@
<slot>sendK()</slot>
<hints>
<hint type="sourcelabel">
<x>199</x>
<x>137</x>
<y>60</y>
</hint>
<hint type="destinationlabel">
@@ -166,5 +220,21 @@
</hint>
</hints>
</connection>
<connection>
<sender>buttonRefresh</sender>
<signal>clicked()</signal>
<receiver>treeView</receiver>
<slot>refresh()</slot>
<hints>
<hint type="sourcelabel">
<x>223</x>
<y>114</y>
</hint>
<hint type="destinationlabel">
<x>217</x>
<y>134</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 158 B

After

Width:  |  Height:  |  Size: 158 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1005 B

After

Width:  |  Height:  |  Size: 1005 B

View File

Before

Width:  |  Height:  |  Size: 717 B

After

Width:  |  Height:  |  Size: 717 B

View File

Before

Width:  |  Height:  |  Size: 813 B

After

Width:  |  Height:  |  Size: 813 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1017 B

After

Width:  |  Height:  |  Size: 1017 B

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 563 B

After

Width:  |  Height:  |  Size: 563 B

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 644 B

After

Width:  |  Height:  |  Size: 644 B

View File

Before

Width:  |  Height:  |  Size: 802 B

After

Width:  |  Height:  |  Size: 802 B

View File

Before

Width:  |  Height:  |  Size: 485 B

After

Width:  |  Height:  |  Size: 485 B

View File

Before

Width:  |  Height:  |  Size: 640 B

After

Width:  |  Height:  |  Size: 640 B

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 634 B

After

Width:  |  Height:  |  Size: 634 B

View File

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 544 B

View File

Before

Width:  |  Height:  |  Size: 529 B

After

Width:  |  Height:  |  Size: 529 B

View File

Before

Width:  |  Height:  |  Size: 571 B

After

Width:  |  Height:  |  Size: 571 B

View File

Before

Width:  |  Height:  |  Size: 577 B

After

Width:  |  Height:  |  Size: 577 B

View File

Before

Width:  |  Height:  |  Size: 579 B

After

Width:  |  Height:  |  Size: 579 B

View File

Before

Width:  |  Height:  |  Size: 577 B

After

Width:  |  Height:  |  Size: 577 B

View File

Before

Width:  |  Height:  |  Size: 639 B

After

Width:  |  Height:  |  Size: 639 B

View File

Before

Width:  |  Height:  |  Size: 448 B

After

Width:  |  Height:  |  Size: 448 B

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 564 B

After

Width:  |  Height:  |  Size: 564 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 694 B

After

Width:  |  Height:  |  Size: 694 B

View File

Before

Width:  |  Height:  |  Size: 658 B

After

Width:  |  Height:  |  Size: 658 B

View File

Before

Width:  |  Height:  |  Size: 691 B

After

Width:  |  Height:  |  Size: 691 B

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 539 B

After

Width:  |  Height:  |  Size: 539 B

View File

Before

Width:  |  Height:  |  Size: 929 B

After

Width:  |  Height:  |  Size: 929 B

196
qcd_utils/qcd_core.cpp Normal file
View File

@@ -0,0 +1,196 @@
#include "qcd_core.h"
#include "cdutils_core.h"
#include "piqt.h"
#include <QWidget>
#include <QCheckBox>
#include <QGroupBox>
#include <QSpinBox>
#include <QSlider>
#include <QScrollBar>
#include <QDoubleSpinBox>
#include <QLineEdit>
#include <spinslider.h>
#include <clineedit.h>
using namespace CDUtils;
int __QCore_Initializer__::count_(0);
QCDCore * __QCore_Initializer__::__instance__(0);
__QCore_Initializer__::__QCore_Initializer__() {
count_++;
if (count_ > 1) return;
__instance__ = new QCDCore();
}
__QCore_Initializer__::~__QCore_Initializer__() {
count_--;
if (count_ > 0) return;
if (__instance__ != 0) {
delete __instance__;
__instance__ = 0;
}
}
QCDCore::QCDCore() {
setObjectName("QCDCore");
setName("QCDCore");
CONNECTU(CDCore::instance(), K_ChangedGlobal, this, K_ChangedGlobal);
updating = false;
}
QCDCore::~QCDCore() {
}
void QCDCore::K_ChangedGlobal() {
QMetaObject::invokeMethod(this, "updateBindedWidgets", Qt::QueuedConnection);
}
void QCDCore::slotBool(bool v) {
QWidget * w = (QWidget*)sender();
if (!w || updating) return;
PIDeque<int> path = binded_widgets.value(w);
CDCore::instance()->k()[path].setValue(PIString::fromBool(v));
}
void QCDCore::slotInt(int v) {
QWidget * w = (QWidget*)sender();
if (!w || updating) return;
PIDeque<int> path = binded_widgets.value(w);
CDCore::instance()->k()[path].setValue(PIString::fromNumber(v));
}
void QCDCore::slotDouble(double v) {
QWidget * w = (QWidget*)sender();
if (!w || updating) return;
PIDeque<int> path = binded_widgets.value(w);
CDCore::instance()->k()[path].setValue(PIString::fromNumber(v));
}
void QCDCore::slotText(QString v) {
QWidget * w = (QWidget*)sender();
if (!w || updating) return;
PIDeque<int> path = binded_widgets.value(w);
CDCore::instance()->k()[path].setValue(Q2PIString(v));
}
int QCDCore::bindWindow(QWidget * wnd) {
if (!wnd) return 0;
CDCore::instance()->k().makePath();
return bindWidgets(wnd->findChildren<QWidget * >());
}
int QCDCore::bindWidgets(QList<QWidget * > wl) {
int ret = 0;
foreach (QWidget * w, wl)
if (bindWidget(w)) ++ret;
return ret;
}
bool QCDCore::bindWidget(QWidget * w) {
if (!w) return false;
QString on = w->objectName();
PIVector<CDType * > ak = CDCore::instance()->k().children();
piForeachC (CDType * k, ak) {
if (!on.endsWith(PI2QString(k->name()))) continue;
QString cn = w->metaObject()->className();
bool ok = false;
if (cn == "QCheckBox" || cn == "QGroupBox") {
connect(w, SIGNAL(toggled(bool)), this, SLOT(slotBool(bool)), Qt::UniqueConnection);
ok = true;
}
if (cn == "QSpinBox" || cn == "QSlider" || cn == "QScrollBar") {
connect(w, SIGNAL(valueChanged(int)), this, SLOT(slotInt(int)), Qt::UniqueConnection);
ok = true;
}
if (cn == "QDoubleSpinBox" || cn == "SpinSlider") {
connect(w, SIGNAL(valueChanged(double)), this, SLOT(slotDouble(double)), Qt::UniqueConnection);
ok = true;
}
if (cn == "QLineEdit" || cn == "CLineEdit") {
connect(w, SIGNAL(textChanged(QString)), this, SLOT(slotText(QString)), Qt::UniqueConnection);
ok = true;
}
if (!ok) continue;
binded_widgets[w] = k->path();
return true;
}
return false;
}
void QCDCore::updateBindedWidgets() {
QMapIterator<QWidget * , PIDeque<int> > it(binded_widgets);
updating = true;
while (it.hasNext()) {
QWidget * w = it.next().key();
QString cn = w->metaObject()->className();
const CDType k(CDCore::instance()->k()[it.value()]);
if (cn == "QCheckBox") qobject_cast<QCheckBox*>(w)->setChecked(k.toBool());
if (cn == "QGroupBox") qobject_cast<QGroupBox*>(w)->setChecked(k.toBool());
if (cn == "QSpinBox") qobject_cast<QSpinBox*>(w)->setValue(k.toInt());
if (cn == "QSlider") qobject_cast<QSlider*>(w)->setValue(k.toInt());
if (cn == "QScrollBar") qobject_cast<QScrollBar*>(w)->setValue(k.toInt());
if (cn == "QDoubleSpinBox") qobject_cast<QDoubleSpinBox*>(w)->setValue(k.toDouble());
if (cn == "SpinSlider") qobject_cast<SpinSlider*>(w)->setValue(k.toDouble());
if (cn == "QLineEdit") qobject_cast<QLineEdit*>(w)->setText(PI2QString(k.value()));
if (cn == "CLineEdit") qobject_cast<CLineEdit*>(w)->setText(PI2QString(k.value()));
}
updating = false;
}
int QCDCore::unbindWindow(QWidget * wnd) {
if (!wnd) return 0;
return unbindWidgets(wnd->findChildren<QWidget * >());
}
int QCDCore::unbindWidgets(QList<QWidget * > wl) {
int ret = 0;
foreach (QWidget * w, wl)
if (unbindWidget(w)) ++ret;
return ret;
}
bool QCDCore::unbindWidget(QWidget * w) {
if (!w) return false;
if (!binded_widgets.contains(w)) return false;
QString cn = w->metaObject()->className();
if (cn == "QCheckBox" || cn == "QGroupBox")
disconnect(w, SIGNAL(toggled(bool)), this, SLOT(slotBool(bool)));
if (cn == "QSpinBox" || cn == "QSlider" || cn == "QScrollBar")
disconnect(w, SIGNAL(valueChanged(int)), this, SLOT(slotInt(int)));
if (cn == "QDoubleSpinBox" || cn == "SpinSlider")
disconnect(w, SIGNAL(valueChanged(double)), this, SLOT(slotDouble(double)));
if (cn == "QLineEdit" || cn == "CLineEdit")
disconnect(w, SIGNAL(textChanged(QString)), this, SLOT(slotText(QString)));
binded_widgets.remove(w);
return true;
}
void QCDCore::unbindAllWidgets() {
QMapIterator<QWidget * , PIDeque<int> > it(binded_widgets);
while (it.hasNext()) {
QWidget * w = it.next().key();
unbindWidget(w);
}
binded_widgets.clear();
}

65
qcd_utils/qcd_core.h Normal file
View File

@@ -0,0 +1,65 @@
#ifndef QCD_CORE_H
#define QCD_CORE_H
#include <QObject>
#include <QMap>
#include "piobject.h"
class QCDCore;
class __QCore_Initializer__ {
public:
__QCore_Initializer__();
~__QCore_Initializer__();
static int count_;
static QCDCore * __instance__;
};
class QCDCore: public QObject, public PIObject
{
Q_OBJECT
PIOBJECT(QCDCore)
friend class __QCore_Initializer__;
public:
static QCDCore * instance() {return __QCore_Initializer__::__instance__;}
int bindWindow(QWidget * wnd);
int bindWidgets(QList<QWidget * > wl);
bool bindWidget(QWidget * w);
void updateBindedWidgets();
int unbindWindow(QWidget * wnd);
int unbindWidgets(QList<QWidget * > wl);
bool unbindWidget(QWidget * w);
void unbindAllWidgets();
private:
QCDCore();
~QCDCore();
EVENT_HANDLER(void, K_ChangedGlobal);
QMap<QWidget * , PIDeque<int> > binded_widgets;
bool updating;
private slots:
void slotBool(bool v);
void slotInt(int v);
void slotDouble(double v);
void slotText(QString v);
public slots:
signals:
};
static __QCore_Initializer__ __QCore_initializer__;
#endif // QCD_CORE_H

View File

@@ -1,4 +1,4 @@
#include "cd_kmodel.h"
#include "qcd_kmodel.h"
#include "cdutils_k.h"
#include "piqt.h"
#include <QDebug>

View File

@@ -1,7 +1,6 @@
#ifndef CD_KMODEL_H
#define CD_KMODEL_H
#ifndef QCD_KMODEL_H
#define QCD_KMODEL_H
//#include "cdutils_k.h"
#include <QAbstractItemModel>
#include <QItemDelegate>
#include <QStyledItemDelegate>
@@ -78,4 +77,4 @@ signals:
};
#endif // CD_KMODEL_H
#endif // QCD_KMODEL_H

View File

@@ -1,7 +1,7 @@
#include <QDir>
#include "cdutils_k.h"
#include "cdkview.h"
#include "cd_kmodel.h"
#include "qcd_kview.h"
#include "qcd_kmodel.h"
#include "piqt.h"
#include "pifile.h"
@@ -69,6 +69,7 @@ void CDKView::saveK() {
void CDKView::loadK() {
K.readFile();
K.calculate();
refresh();
}

View File

@@ -1,25 +1,26 @@
#ifndef CDKVIEW_H
#define CDKVIEW_H
#ifndef QCD_KVIEW_H
#define QCD_KVIEW_H
#include "piobject.h"
#include <QTreeView>
class CDKItemModel;
class CDKView : public QTreeView, public PIObject
class CDKView: public QTreeView, public PIObject
{
Q_OBJECT
PIOBJECT(CDKView)
public:
explicit CDKView(QWidget *parent = 0);
~CDKView();
void refresh();
void setKFile(const QString & filename);
void startPing();
CDKItemModel * CDKModel() {return kmodel;}
public slots:
void refresh();
void sendK();
void receiveK();
void saveK();
@@ -57,4 +58,4 @@ signals:
};
#endif // CDKVIEW_H
#endif // QCD_KVIEW_H