tree changes
@@ -21,6 +21,8 @@ endif()
|
||||
set(_COMPANY SHS)
|
||||
set(_DOMAIN org.SHS)
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR}/pip)
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/qad)
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR}/piqt)
|
||||
if(MINGW)
|
||||
find_package(MinGW REQUIRED)
|
||||
else()
|
||||
@@ -115,6 +117,7 @@ if(WIN32)
|
||||
endif()
|
||||
|
||||
set(QAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/qad)
|
||||
set(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
if (CROSSTOOLS)
|
||||
|
||||
@@ -154,9 +157,10 @@ else()
|
||||
message(STATUS "Building Qt-derived targets for ${QtVersions}")
|
||||
add_subdirectory(qad)
|
||||
include_directories(${qad_includes})
|
||||
set(_DIRS piqt piqt_utils qcd_utils)
|
||||
add_subdirectory(piqt)
|
||||
include_directories(${piqt_includes})
|
||||
set(_DIRS)
|
||||
if (Qt5)
|
||||
list(APPEND _DIRS)
|
||||
if (QGLVIEW)
|
||||
list(APPEND _DIRS qglview)
|
||||
endif()
|
||||
@@ -166,16 +170,11 @@ else()
|
||||
endif()
|
||||
foreach(_D ${_DIRS})
|
||||
list(APPEND QT_MULTILIB_LIST ${_D})
|
||||
add_subdirectory(${_D})
|
||||
endforeach(_D)
|
||||
include_directories(piqt)
|
||||
else()
|
||||
message(STATUS "None of Qt found, skip Qt-derived targets")
|
||||
endif()
|
||||
include_directories(cd_utils)
|
||||
list(INSERT _DIRS 0 cd_utils)
|
||||
foreach(_D ${_DIRS})
|
||||
add_subdirectory(${_D})
|
||||
endforeach(_D)
|
||||
|
||||
endif()
|
||||
|
||||
|
||||
@@ -1,35 +1,96 @@
|
||||
|
||||
macro(sdk_install _DIR _TARGET _H_FILES _QM_FILES)
|
||||
macro(sdk_install _DIR IS_APP _TARGET _H_FILES _QM_FILES)
|
||||
#message("QM=${_QM_FILES}")
|
||||
if(LIB)
|
||||
if(WIN32)
|
||||
if(NOT "x${_H_FILES}" STREQUAL "x")
|
||||
install(FILES ${_H_FILES} DESTINATION ${MINGW_INCLUDE}/${_DIR})
|
||||
if (${IS_APP})
|
||||
qt_install(TARGETS ${_TARGET} DESTINATION ${MINGW_BIN})
|
||||
qt_install(TARGETS ${_TARGET} DESTINATION QtBin)
|
||||
else()
|
||||
if(NOT "x${_H_FILES}" STREQUAL "x")
|
||||
install(FILES ${_H_FILES} DESTINATION ${MINGW_INCLUDE}/${_DIR})
|
||||
endif()
|
||||
qt_install(TARGETS ${_TARGET} ARCHIVE DESTINATION ${MINGW_LIB})
|
||||
qt_install(TARGETS ${_TARGET} RUNTIME DESTINATION ${MINGW_BIN})
|
||||
qt_install(TARGETS ${_TARGET} RUNTIME DESTINATION QtBin)
|
||||
endif()
|
||||
qt_install(TARGETS ${_TARGET} ARCHIVE DESTINATION ${MINGW_LIB})
|
||||
qt_install(TARGETS ${_TARGET} RUNTIME DESTINATION ${MINGW_BIN})
|
||||
qt_install(TARGETS ${_TARGET} RUNTIME DESTINATION QtBin)
|
||||
else()
|
||||
if (NOT "x${_H_FILES}" STREQUAL "x")
|
||||
install(FILES ${_H_FILES} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/${_DIR})
|
||||
if (${IS_APP})
|
||||
qt_install(TARGETS ${_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||
else()
|
||||
if (NOT "x${_H_FILES}" STREQUAL "x")
|
||||
install(FILES ${_H_FILES} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/${_DIR})
|
||||
endif()
|
||||
qt_install(TARGETS ${_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
|
||||
endif()
|
||||
qt_install(TARGETS ${_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
|
||||
endif()
|
||||
if(NOT "x${_QM_FILES}" STREQUAL "x")
|
||||
qt_install(LANG ${_QM_FILES} DESTINATION QtLang)
|
||||
endif()
|
||||
else()
|
||||
if(NOT "x${_H_FILES}" STREQUAL "x")
|
||||
install(FILES ${_H_FILES} DESTINATION include/${_DIR})
|
||||
endif()
|
||||
if(WIN32)
|
||||
qt_install(TARGETS ${_TARGET} RUNTIME DESTINATION bin)
|
||||
qt_install(TARGETS ${_TARGET} ARCHIVE DESTINATION lib)
|
||||
if(${IS_APP})
|
||||
qt_install(TARGETS ${_TARGET} DESTINATION bin)
|
||||
else()
|
||||
qt_install(TARGETS ${_TARGET} DESTINATION lib)
|
||||
if(NOT "x${_H_FILES}" STREQUAL "x")
|
||||
install(FILES ${_H_FILES} DESTINATION include/${_DIR})
|
||||
endif()
|
||||
if(WIN32)
|
||||
qt_install(TARGETS ${_TARGET} RUNTIME DESTINATION bin)
|
||||
qt_install(TARGETS ${_TARGET} ARCHIVE DESTINATION lib)
|
||||
else()
|
||||
qt_install(TARGETS ${_TARGET} DESTINATION lib)
|
||||
endif()
|
||||
endif()
|
||||
if(NOT "x${_QM_FILES}" STREQUAL "x")
|
||||
qt_install(LANG ${_QM_FILES} DESTINATION lang)
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(add_directories_with_include multilib_prefix)
|
||||
set(DIRS)
|
||||
file(GLOB _dl "[^.]*")
|
||||
foreach(_d ${_dl})
|
||||
if(IS_DIRECTORY ${_d})
|
||||
list(APPEND DIRS ${_d})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
set(inc_var ${multilib_prefix}includes)
|
||||
set(${inc_var})
|
||||
foreach(_d ${DIRS})
|
||||
get_filename_component(_dname "${_d}" NAME)
|
||||
list(APPEND QT_MULTILIB_LIST ${multilib_prefix}${_dname})
|
||||
list(APPEND ${inc_var} "${_d}")
|
||||
endforeach()
|
||||
|
||||
foreach(_d ${DIRS})
|
||||
include_directories(${_d})
|
||||
endforeach()
|
||||
foreach(_d ${DIRS})
|
||||
add_subdirectory(${_d})
|
||||
endforeach()
|
||||
|
||||
set(QT_MULTILIB_LIST ${QT_MULTILIB_LIST} PARENT_SCOPE)
|
||||
set(${inc_var} ${${inc_var}} PARENT_SCOPE)
|
||||
if (LIB)
|
||||
set(_ALL_TARGETS ${_ALL_TARGETS} PARENT_SCOPE)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(add_directories multilib_prefix)
|
||||
include_directories(${${multilib_prefix}includes})
|
||||
file(GLOB _dl "[^.]*")
|
||||
foreach(_d ${_dl})
|
||||
if(IS_DIRECTORY ${_d})
|
||||
add_subdirectory(${_d})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if (LIB)
|
||||
set(_ALL_TARGETS ${_ALL_TARGETS} PARENT_SCOPE)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY FIRST)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE FIRST)
|
||||
set(CMAKE_PREFIX_PATH /soft/android/${ANDROID_ABI})
|
||||
list(APPEND CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH}/lib)
|
||||
include_directories(${CMAKE_PREFIX_PATH}/include)
|
||||
@@ -1,67 +1,16 @@
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
project(cd_utils)
|
||||
if (NOT LIBPROJECT)
|
||||
find_package(PIP REQUIRED)
|
||||
option(LIB "System install" 1)
|
||||
option(DEBUG "Build with -g3" 0)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall")
|
||||
if (DEBUG)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
|
||||
endif()
|
||||
endif()
|
||||
if (MINGW)
|
||||
find_package(MinGW REQUIRED)
|
||||
endif()
|
||||
find_package(MinGW REQUIRED)
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${PIP_INCLUDES})
|
||||
#file(GLOB HDRS_UTILS "*.h")
|
||||
#file(GLOB CPPS_UTILS "*.cpp")
|
||||
file(GLOB CPPS_UTILS "cdutils_*.cpp")
|
||||
file(GLOB HDRS_UTILS "cdutils_*.h")
|
||||
if (DEFINED ENV{QNX_HOST})
|
||||
add_library(${PROJECT_NAME} STATIC ${CPPS_UTILS} ${HDRS_UTILS})
|
||||
else()
|
||||
add_library(${PROJECT_NAME} SHARED ${CPPS_UTILS} ${HDRS_UTILS})
|
||||
endif()
|
||||
add_library(${PROJECT_NAME} SHARED ${CPPS_UTILS} ${HDRS_UTILS})
|
||||
target_link_libraries(${PROJECT_NAME} ${PIP_LIBRARY})
|
||||
|
||||
# # Apple crosscompiling rpath patch
|
||||
# if (APPLE AND CMAKE_CROSSCOMPILING AND CMAKE_MACOSX_RPATH)
|
||||
# foreach(_RP ${CMAKE_INSTALL_RPATH})
|
||||
# add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
||||
# COMMAND "${CMAKE_INSTALL_NAME_TOOL}"
|
||||
# "-add_rpath" "${_RP}"
|
||||
# "$<TARGET_FILE_DIR:${PROJECT_NAME}>/$<TARGET_FILE_NAME:${PROJECT_NAME}>"
|
||||
# COMMENT "Add to ${PROJECT_NAME} rpath \"${_RP}\"")
|
||||
# endforeach()
|
||||
# endif()
|
||||
|
||||
add_executable(cdutilstest "cdutilstest.cpp" "cdtest.h")
|
||||
target_link_libraries(cdutilstest ${PIP_LIBRARY} ${PROJECT_NAME})
|
||||
message(STATUS "Building ${PROJECT_NAME}")
|
||||
|
||||
if(NOT LIBPROJECT)
|
||||
if(LIB)
|
||||
if(WIN32)
|
||||
if(MINGW)
|
||||
set(CMAKE_INSTALL_PREFIX ${MINGW_DIR})
|
||||
endif()
|
||||
else()
|
||||
if (DEFINED ANDROID_PLATFORM)
|
||||
set(CMAKE_INSTALL_PREFIX ${ANDROID_SYSTEM_LIBRARY_PATH}/usr)
|
||||
else()
|
||||
if(CMAKE_CROSSCOMPILING)
|
||||
set(CMAKE_INSTALL_PREFIX ${CMAKE_STAGING_PREFIX})
|
||||
else()
|
||||
set(CMAKE_INSTALL_PREFIX ${INSTALL_PREFIX}/usr/local)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"")
|
||||
else()
|
||||
message(STATUS "Install ${PROJECT_NAME} to local \"bin\", \"lib\" and \"include\"")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(LIB)
|
||||
list(APPEND _ALL_TARGETS ${PROJECT_NAME})
|
||||
set(_ALL_TARGETS ${_ALL_TARGETS} PARENT_SCOPE)
|
||||
|
||||
2
pip
@@ -1,49 +1,50 @@
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
project(piqt)
|
||||
if(NOT LIBPROJECT)
|
||||
find_package(PIP REQUIRED)
|
||||
option(LIB "System install" 0)
|
||||
option(DEBUG "Build with -g3" 0)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall")
|
||||
if(DEBUG)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
|
||||
endif()
|
||||
cmake_policy(SET CMP0017 NEW) # need include() with .cmake
|
||||
set(_PIQt_MAJOR 1)
|
||||
set(_PIQt_MINOR 0)
|
||||
set(_PIQt_REVISION 0)
|
||||
set(_PIQt_SUFFIX )
|
||||
set(_PIQt_COMPANY SHS)
|
||||
set(_PIQt_DOMAIN org.SHS)
|
||||
if(NOT DEFINED BUILD_NUMBER)
|
||||
set(BUILD_NUMBER 9999)
|
||||
endif()
|
||||
find_package(QAD REQUIRED)
|
||||
list(APPEND QT_MULTILIB_LIST ${PROJECT_NAME})
|
||||
set(PIQt_LIB_TYPE SHARED)
|
||||
|
||||
set(QAD_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/piqt_version.h")
|
||||
set_version(PIQt
|
||||
MAJOR "${_PIQt_MAJOR}"
|
||||
MINOR "${_PIQt_MINOR}"
|
||||
REVISION "${_PIQt_REVISION}"
|
||||
BUILD "${BUILD_NUMBER}"
|
||||
SUFFIX "${_PIQt_SUFFIX}"
|
||||
OUTPUT "${PIQt_VERSION_FILE}")
|
||||
set_deploy_property(PIQt ${_PIQt_LIB_TYPE}
|
||||
FULLNAME "${_PIQt_DOMAIN}.*"
|
||||
COMPANY "${_PIQt_COMPANY}")
|
||||
|
||||
include(QADMacros)
|
||||
|
||||
macro(piqt_library NAME _MODULES _LIBS)
|
||||
_qt_project(${NAME} FALSE "PIQt" "${_MODULES}" "pip;${_LIBS}" ${ARGN})
|
||||
_qt_install(${NAME} FALSE "pip" "out_HDR" "out_QM")
|
||||
endmacro()
|
||||
|
||||
macro(piqt_application NAME _MODULES _LIBS)
|
||||
_qt_project(${NAME} TRUE "PIQt" "${_MODULES}" "pip;${_LIBS}" ${ARGN})
|
||||
_qt_install(${NAME} TRUE "pip" "" "out_QM")
|
||||
endmacro()
|
||||
|
||||
|
||||
include_directories(${PIP_INCLUDES})
|
||||
add_subdirectory(libs)
|
||||
if (UTILS)
|
||||
add_subdirectory(utils)
|
||||
endif()
|
||||
|
||||
set(QT_MULTILIB_LIST ${QT_MULTILIB_LIST} PARENT_SCOPE)
|
||||
include_directories(${PIP_INCLUDES} ${QAD_INCLUDES})
|
||||
file(GLOB SRC "*.h" "*.cpp" "*.ui" "*.qrc" "lang/*.ts")
|
||||
find_qt(${QtVersions} Core Gui Positioning)
|
||||
qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM)
|
||||
qt_add_library(${PROJECT_NAME} SHARED out_CPP)
|
||||
qt_target_link_libraries(${PROJECT_NAME} pip qad_utils qad_widgets)
|
||||
message(STATUS "Building ${PROJECT_NAME}")
|
||||
if(LIBPROJECT)
|
||||
sdk_install("pip" "${PROJECT_NAME}" "${out_HDR}" "${out_QM}")
|
||||
else()
|
||||
if(LIB)
|
||||
if(WIN32)
|
||||
install(FILES ${out_HDR} DESTINATION ${MINGW_INCLUDE}/pip)
|
||||
if(NOT "x${out_QM}" STREQUAL "x")
|
||||
qt_install(FILES ${out_QM} DESTINATION QtLang)
|
||||
endif()
|
||||
qt_install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION ${MINGW_LIB})
|
||||
qt_install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${MINGW_BIN})
|
||||
qt_install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION QtBin)
|
||||
else()
|
||||
install(FILES ${out_HDR} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/pip)
|
||||
qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
|
||||
endif()
|
||||
message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"")
|
||||
else()
|
||||
if(WIN32)
|
||||
qt_install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
|
||||
qt_install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION lib)
|
||||
else()
|
||||
qt_install(TARGETS ${PROJECT_NAME} DESTINATION lib)
|
||||
endif()
|
||||
install(FILES ${out_HDR} DESTINATION include/pip)
|
||||
message(STATUS "Install ${PROJECT_NAME} to local \"bin\", \"lib\" and \"include\"")
|
||||
endif()
|
||||
set(piqt_includes ${piqt_includes} PARENT_SCOPE)
|
||||
if (LIB)
|
||||
set(_ALL_TARGETS ${_ALL_TARGETS} PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
|
||||
1
piqt/libs/CMakeLists.txt
Normal file
@@ -0,0 +1 @@
|
||||
add_directories_with_include("piqt_")
|
||||
1
piqt/libs/core/CMakeLists.txt
Normal file
@@ -0,0 +1 @@
|
||||
piqt_library(piqt "Gui;Positioning" "qad_utils;qad_widgets")
|
||||
1
piqt/libs/qcd/CMakeLists.txt
Normal file
@@ -0,0 +1 @@
|
||||
piqt_library(qcd_utils "Gui" "pip;qad_utils;qad_widgets;qad_graphic;cd_utils;piqt")
|
||||
@@ -1,297 +1,297 @@
|
||||
#include "qcd_core.h"
|
||||
#include "cdutils_k.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>
|
||||
#include <evalspinbox.h>
|
||||
#include <qvariantedit.h>
|
||||
#include <qcd_view.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(&K, changedGlobal, this, K_ChangedGlobal);
|
||||
updating = direct_on = 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;
|
||||
QList<PIDeque<int> > pathes = binded_widgets.values(w);
|
||||
foreach (const PIDeque<int> & path, pathes)
|
||||
K[path].setValue(PIString::fromBool(v));
|
||||
K.calculate();
|
||||
emit updateViewRequest();
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::slotInt(int v) {
|
||||
QWidget * w = (QWidget*)sender();
|
||||
if (!w || updating) return;
|
||||
QList<PIDeque<int> > pathes = binded_widgets.values(w);
|
||||
foreach (const PIDeque<int> & path, pathes)
|
||||
K[path].setValue(PIString::fromNumber(v));
|
||||
finishEdit(pathes);
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::slotDouble(double v) {
|
||||
QWidget * w = (QWidget*)sender();
|
||||
if (!w || updating) return;
|
||||
QList<PIDeque<int> > pathes = binded_widgets.values(w);
|
||||
foreach (const PIDeque<int> & path, pathes)
|
||||
K[path].setValue(PIString::fromNumber(v));
|
||||
finishEdit(pathes);
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::slotText(QString v) {
|
||||
QWidget * w = (QWidget*)sender();
|
||||
if (!w || updating) return;
|
||||
QList<PIDeque<int> > pathes = binded_widgets.values(w);
|
||||
foreach (const PIDeque<int> & path, pathes)
|
||||
K[path].setValue(Q2PIString(v));
|
||||
finishEdit(pathes);
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::slotVariant(QVariant v) {
|
||||
QWidget * w = (QWidget*)sender();
|
||||
if (!w || updating) return;
|
||||
QList<PIDeque<int> > pathes = binded_widgets.values(w);
|
||||
foreach (const PIDeque<int> & path, pathes)
|
||||
K[path].setVariantValue(Q2PIVariant(v));
|
||||
finishEdit(pathes);
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::slotDestroyed(QObject * o) {
|
||||
if (!o) return;
|
||||
if (!binded_widgets.contains((QWidget*)o)) return;
|
||||
binded_widgets.remove((QWidget*)o);
|
||||
}
|
||||
|
||||
|
||||
int QCDCore::bindWindow(QWidget * wnd) {
|
||||
if (!wnd) return 0;
|
||||
//K.root().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();
|
||||
QString cn = w->metaObject()->className();
|
||||
if (cn == "CDView") {
|
||||
bindView(w);
|
||||
return false;
|
||||
}
|
||||
PIVector<CDType * > ak = K.root().children();
|
||||
piForeachC (CDType * k, ak) {
|
||||
if (!on.endsWith(PI2QString(k->pathString().join("_")))) continue;
|
||||
if (bindWidget(w, *k)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool QCDCore::bindWidget(QWidget * w, const CDType & k) {
|
||||
if (!w) return false;
|
||||
//piCout << "bind..." << k.name() << k.path();
|
||||
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" || cn == "EvalSpinBox") {
|
||||
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 (cn == "QVariantEdit") {
|
||||
connect(w, SIGNAL(valueChanged(QVariant)), this, SLOT(slotVariant(QVariant)), Qt::UniqueConnection);
|
||||
ok = true;
|
||||
}
|
||||
if (cn == "CDView") {
|
||||
bindView(w);
|
||||
}
|
||||
connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(slotDestroyed(QObject*)), Qt::UniqueConnection);
|
||||
setWidgetValue(w, k);
|
||||
if (!ok) return false;
|
||||
//piCout << k.name() << k.path() << "ok";
|
||||
binded_widgets.insert(w, k.path());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::updateBindedWidgets() {
|
||||
QMapIterator<QWidget * , PIDeque<int> > it(binded_widgets);
|
||||
QWidgetList to_remove;
|
||||
updating = true;
|
||||
while (it.hasNext()) {
|
||||
QWidget * w = it.next().key();
|
||||
if (!K.exists(it.value()))
|
||||
to_remove << w;
|
||||
else
|
||||
setWidgetValue(w, K[it.value()]);
|
||||
}
|
||||
foreach (QWidget * w, to_remove)
|
||||
unbindWidget(w);
|
||||
updating = false;
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::bindView(QWidget * v) {
|
||||
CDView * w = qobject_cast<CDView * >(v);
|
||||
if (!w) return;
|
||||
connect(this, SIGNAL(updateViewRequest()), w, SLOT(refreshValues()), Qt::UniqueConnection);
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::setWidgetValue(QWidget * w, const CDType & k) {
|
||||
if (!w) return;
|
||||
QString cn = w->metaObject()->className();
|
||||
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()));
|
||||
if (cn == "EvalSpinBox") qobject_cast<EvalSpinBox*>(w)->setValue(k.toDouble());
|
||||
if (cn == "QVariantEdit") qobject_cast<QVariantEdit*>(w)->setValue(PI2QVariant(k.variantValue()));
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::finishEdit(const QList<PIDeque<int> > & pathes) {
|
||||
K.calculate();
|
||||
if (direct_on) {
|
||||
foreach (const PIDeque<int> & path, pathes)
|
||||
K.directChange(K[path]);
|
||||
}
|
||||
emit updateViewRequest();
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
//qDebug() << "unbind" << w;
|
||||
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" || cn == "EvalSpinBox")
|
||||
disconnect(w, SIGNAL(valueChanged(double)), this, SLOT(slotDouble(double)));
|
||||
if (cn == "QLineEdit" || cn == "CLineEdit")
|
||||
disconnect(w, SIGNAL(textChanged(QString)), this, SLOT(slotText(QString)));
|
||||
if (cn == "QVariantEdit")
|
||||
disconnect(w, SIGNAL(valueChanged(QVariant)), this, SLOT(slotVariant(QVariant)));
|
||||
//qDebug() << "remove b" << binded_widgets.size();
|
||||
binded_widgets.remove(w);
|
||||
//qDebug() << "remove a" << binded_widgets.size();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::unbindAllWidgets() {
|
||||
QMap<QWidget * , PIDeque<int> > bwm = binded_widgets;
|
||||
QMapIterator<QWidget * , PIDeque<int> > it(bwm);
|
||||
while (it.hasNext()) {
|
||||
QWidget * w = it.next().key();
|
||||
unbindWidget(w);
|
||||
}
|
||||
binded_widgets.clear();
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::updateBindedWidget(const CDType & k_) {
|
||||
QMapIterator<QWidget * , PIDeque<int> > it(binded_widgets);
|
||||
updating = true;
|
||||
while (it.hasNext()) {
|
||||
QWidget * w = it.next().key();
|
||||
const CDType & k(K[it.value()]);
|
||||
if (k.path() != k_.path()) continue;
|
||||
setWidgetValue(w, k);
|
||||
}
|
||||
updating = false;
|
||||
}
|
||||
#include "qcd_core.h"
|
||||
#include "cdutils_k.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>
|
||||
#include <evalspinbox.h>
|
||||
#include <qvariantedit.h>
|
||||
#include <qcd_view.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(&K, changedGlobal, this, K_ChangedGlobal);
|
||||
updating = direct_on = 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;
|
||||
QList<PIDeque<int> > pathes = binded_widgets.values(w);
|
||||
foreach (const PIDeque<int> & path, pathes)
|
||||
K[path].setValue(PIString::fromBool(v));
|
||||
K.calculate();
|
||||
emit updateViewRequest();
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::slotInt(int v) {
|
||||
QWidget * w = (QWidget*)sender();
|
||||
if (!w || updating) return;
|
||||
QList<PIDeque<int> > pathes = binded_widgets.values(w);
|
||||
foreach (const PIDeque<int> & path, pathes)
|
||||
K[path].setValue(PIString::fromNumber(v));
|
||||
finishEdit(pathes);
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::slotDouble(double v) {
|
||||
QWidget * w = (QWidget*)sender();
|
||||
if (!w || updating) return;
|
||||
QList<PIDeque<int> > pathes = binded_widgets.values(w);
|
||||
foreach (const PIDeque<int> & path, pathes)
|
||||
K[path].setValue(PIString::fromNumber(v));
|
||||
finishEdit(pathes);
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::slotText(QString v) {
|
||||
QWidget * w = (QWidget*)sender();
|
||||
if (!w || updating) return;
|
||||
QList<PIDeque<int> > pathes = binded_widgets.values(w);
|
||||
foreach (const PIDeque<int> & path, pathes)
|
||||
K[path].setValue(Q2PIString(v));
|
||||
finishEdit(pathes);
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::slotVariant(QVariant v) {
|
||||
QWidget * w = (QWidget*)sender();
|
||||
if (!w || updating) return;
|
||||
QList<PIDeque<int> > pathes = binded_widgets.values(w);
|
||||
foreach (const PIDeque<int> & path, pathes)
|
||||
K[path].setVariantValue(Q2PIVariant(v));
|
||||
finishEdit(pathes);
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::slotDestroyed(QObject * o) {
|
||||
if (!o) return;
|
||||
if (!binded_widgets.contains((QWidget*)o)) return;
|
||||
binded_widgets.remove((QWidget*)o);
|
||||
}
|
||||
|
||||
|
||||
int QCDCore::bindWindow(QWidget * wnd) {
|
||||
if (!wnd) return 0;
|
||||
//K.root().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();
|
||||
QString cn = w->metaObject()->className();
|
||||
if (cn == "CDView") {
|
||||
bindView(w);
|
||||
return false;
|
||||
}
|
||||
PIVector<CDType * > ak = K.root().children();
|
||||
piForeachC (CDType * k, ak) {
|
||||
if (!on.endsWith(PI2QString(k->pathString().join("_")))) continue;
|
||||
if (bindWidget(w, *k)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool QCDCore::bindWidget(QWidget * w, const CDType & k) {
|
||||
if (!w) return false;
|
||||
//piCout << "bind..." << k.name() << k.path();
|
||||
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" || cn == "EvalSpinBox") {
|
||||
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 (cn == "QVariantEdit") {
|
||||
connect(w, SIGNAL(valueChanged(QVariant)), this, SLOT(slotVariant(QVariant)), Qt::UniqueConnection);
|
||||
ok = true;
|
||||
}
|
||||
if (cn == "CDView") {
|
||||
bindView(w);
|
||||
}
|
||||
connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(slotDestroyed(QObject*)), Qt::UniqueConnection);
|
||||
setWidgetValue(w, k);
|
||||
if (!ok) return false;
|
||||
//piCout << k.name() << k.path() << "ok";
|
||||
binded_widgets.insert(w, k.path());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::updateBindedWidgets() {
|
||||
QMapIterator<QWidget * , PIDeque<int> > it(binded_widgets);
|
||||
QWidgetList to_remove;
|
||||
updating = true;
|
||||
while (it.hasNext()) {
|
||||
QWidget * w = it.next().key();
|
||||
if (!K.exists(it.value()))
|
||||
to_remove << w;
|
||||
else
|
||||
setWidgetValue(w, K[it.value()]);
|
||||
}
|
||||
foreach (QWidget * w, to_remove)
|
||||
unbindWidget(w);
|
||||
updating = false;
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::bindView(QWidget * v) {
|
||||
CDView * w = qobject_cast<CDView * >(v);
|
||||
if (!w) return;
|
||||
connect(this, SIGNAL(updateViewRequest()), w, SLOT(refreshValues()), Qt::UniqueConnection);
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::setWidgetValue(QWidget * w, const CDType & k) {
|
||||
if (!w) return;
|
||||
QString cn = w->metaObject()->className();
|
||||
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()));
|
||||
if (cn == "EvalSpinBox") qobject_cast<EvalSpinBox*>(w)->setValue(k.toDouble());
|
||||
if (cn == "QVariantEdit") qobject_cast<QVariantEdit*>(w)->setValue(PI2QVariant(k.variantValue()));
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::finishEdit(const QList<PIDeque<int> > & pathes) {
|
||||
K.calculate();
|
||||
if (direct_on) {
|
||||
foreach (const PIDeque<int> & path, pathes)
|
||||
K.directChange(K[path]);
|
||||
}
|
||||
emit updateViewRequest();
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
//qDebug() << "unbind" << w;
|
||||
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" || cn == "EvalSpinBox")
|
||||
disconnect(w, SIGNAL(valueChanged(double)), this, SLOT(slotDouble(double)));
|
||||
if (cn == "QLineEdit" || cn == "CLineEdit")
|
||||
disconnect(w, SIGNAL(textChanged(QString)), this, SLOT(slotText(QString)));
|
||||
if (cn == "QVariantEdit")
|
||||
disconnect(w, SIGNAL(valueChanged(QVariant)), this, SLOT(slotVariant(QVariant)));
|
||||
//qDebug() << "remove b" << binded_widgets.size();
|
||||
binded_widgets.remove(w);
|
||||
//qDebug() << "remove a" << binded_widgets.size();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::unbindAllWidgets() {
|
||||
QMap<QWidget * , PIDeque<int> > bwm = binded_widgets;
|
||||
QMapIterator<QWidget * , PIDeque<int> > it(bwm);
|
||||
while (it.hasNext()) {
|
||||
QWidget * w = it.next().key();
|
||||
unbindWidget(w);
|
||||
}
|
||||
binded_widgets.clear();
|
||||
}
|
||||
|
||||
|
||||
void QCDCore::updateBindedWidget(const CDType & k_) {
|
||||
QMapIterator<QWidget * , PIDeque<int> > it(binded_widgets);
|
||||
updating = true;
|
||||
while (it.hasNext()) {
|
||||
QWidget * w = it.next().key();
|
||||
const CDType & k(K[it.value()]);
|
||||
if (k.path() != k_.path()) continue;
|
||||
setWidgetValue(w, k);
|
||||
}
|
||||
updating = false;
|
||||
}
|
||||
@@ -1,96 +1,96 @@
|
||||
/*
|
||||
QCD Utils - Qt bindings/utilites for CD Utils
|
||||
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef QCD_CORE_H
|
||||
#define QCD_CORE_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QMultiMap>
|
||||
#include <QVariant>
|
||||
#include "piobject.h"
|
||||
#include "cdutils_types.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);
|
||||
bool bindWidget(QWidget * w, const CDUtils::CDType & k);
|
||||
|
||||
int unbindWindow(QWidget * wnd);
|
||||
int unbindWidgets(QList<QWidget * > wl);
|
||||
bool unbindWidget(QWidget * w);
|
||||
void unbindAllWidgets();
|
||||
|
||||
void updateBindedWidget(const CDUtils::CDType & k_);
|
||||
void setDirectKEnabled(bool yes) {direct_on = yes;}
|
||||
bool isDirectKEnabled() const {return direct_on;}
|
||||
|
||||
private:
|
||||
QCDCore();
|
||||
~QCDCore();
|
||||
|
||||
void bindView(QWidget * v);
|
||||
void setWidgetValue(QWidget * w, const CDUtils::CDType & k);
|
||||
void finishEdit(const QList<PIDeque<int> > & pathes);
|
||||
EVENT_HANDLER(void, K_ChangedGlobal);
|
||||
|
||||
QMultiMap<QWidget * , PIDeque<int> > binded_widgets;
|
||||
bool updating, direct_on;
|
||||
|
||||
private slots:
|
||||
void slotBool(bool v);
|
||||
void slotInt(int v);
|
||||
void slotDouble(double v);
|
||||
void slotText(QString v);
|
||||
void slotVariant(QVariant v);
|
||||
void slotDestroyed(QObject * );
|
||||
|
||||
public slots:
|
||||
void updateBindedWidgets();
|
||||
|
||||
signals:
|
||||
void updateViewRequest();
|
||||
|
||||
};
|
||||
|
||||
|
||||
static __QCore_Initializer__ __QCore_initializer__;
|
||||
|
||||
|
||||
#endif // QCD_CORE_H
|
||||
/*
|
||||
QCD Utils - Qt bindings/utilites for CD Utils
|
||||
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef QCD_CORE_H
|
||||
#define QCD_CORE_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QMultiMap>
|
||||
#include <QVariant>
|
||||
#include "piobject.h"
|
||||
#include "cdutils_types.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);
|
||||
bool bindWidget(QWidget * w, const CDUtils::CDType & k);
|
||||
|
||||
int unbindWindow(QWidget * wnd);
|
||||
int unbindWidgets(QList<QWidget * > wl);
|
||||
bool unbindWidget(QWidget * w);
|
||||
void unbindAllWidgets();
|
||||
|
||||
void updateBindedWidget(const CDUtils::CDType & k_);
|
||||
void setDirectKEnabled(bool yes) {direct_on = yes;}
|
||||
bool isDirectKEnabled() const {return direct_on;}
|
||||
|
||||
private:
|
||||
QCDCore();
|
||||
~QCDCore();
|
||||
|
||||
void bindView(QWidget * v);
|
||||
void setWidgetValue(QWidget * w, const CDUtils::CDType & k);
|
||||
void finishEdit(const QList<PIDeque<int> > & pathes);
|
||||
EVENT_HANDLER(void, K_ChangedGlobal);
|
||||
|
||||
QMultiMap<QWidget * , PIDeque<int> > binded_widgets;
|
||||
bool updating, direct_on;
|
||||
|
||||
private slots:
|
||||
void slotBool(bool v);
|
||||
void slotInt(int v);
|
||||
void slotDouble(double v);
|
||||
void slotText(QString v);
|
||||
void slotVariant(QVariant v);
|
||||
void slotDestroyed(QObject * );
|
||||
|
||||
public slots:
|
||||
void updateBindedWidgets();
|
||||
|
||||
signals:
|
||||
void updateViewRequest();
|
||||
|
||||
};
|
||||
|
||||
|
||||
static __QCore_Initializer__ __QCore_initializer__;
|
||||
|
||||
|
||||
#endif // QCD_CORE_H
|
||||
@@ -1,40 +1,40 @@
|
||||
#include "qcd_graphic.h"
|
||||
#include "ui_qcd_graphic.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "cdutils_x.h"
|
||||
#include "graphic.h"
|
||||
#include "piqt.h"
|
||||
|
||||
using namespace CDUtils;
|
||||
|
||||
|
||||
CDGraphicWidget::CDGraphicWidget(QWidget * p): QWidget(p) {
|
||||
ui = new Ui::CDGraphicWidget();
|
||||
ui->setupUi(this);
|
||||
ui->graphic->setGraphicsCount(0);
|
||||
}
|
||||
|
||||
|
||||
Graphic * CDGraphicWidget::graphic() const {
|
||||
return ui->graphic;
|
||||
}
|
||||
|
||||
|
||||
void CDGraphicWidget::setConfigVisible(bool on) {
|
||||
ui->widgetConfig->setVisible(on);
|
||||
}
|
||||
|
||||
|
||||
bool CDGraphicWidget::isConfigVisible() const {
|
||||
return ui->widgetConfig->isVisible();
|
||||
}
|
||||
|
||||
|
||||
EvalSpinBox * CDGraphicWidget::evalSpinBoxHistory() {
|
||||
return ui->evalHistory;
|
||||
}
|
||||
|
||||
|
||||
EvalSpinBox * CDGraphicWidget::evalSpinBoxVisible() {
|
||||
return ui->evalVisible;
|
||||
}
|
||||
#include "qcd_graphic.h"
|
||||
#include "ui_qcd_graphic.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "cdutils_x.h"
|
||||
#include "graphic.h"
|
||||
#include "piqt.h"
|
||||
|
||||
using namespace CDUtils;
|
||||
|
||||
|
||||
CDGraphicWidget::CDGraphicWidget(QWidget * p): QWidget(p) {
|
||||
ui = new Ui::CDGraphicWidget();
|
||||
ui->setupUi(this);
|
||||
ui->graphic->setGraphicsCount(0);
|
||||
}
|
||||
|
||||
|
||||
Graphic * CDGraphicWidget::graphic() const {
|
||||
return ui->graphic;
|
||||
}
|
||||
|
||||
|
||||
void CDGraphicWidget::setConfigVisible(bool on) {
|
||||
ui->widgetConfig->setVisible(on);
|
||||
}
|
||||
|
||||
|
||||
bool CDGraphicWidget::isConfigVisible() const {
|
||||
return ui->widgetConfig->isVisible();
|
||||
}
|
||||
|
||||
|
||||
EvalSpinBox * CDGraphicWidget::evalSpinBoxHistory() {
|
||||
return ui->evalHistory;
|
||||
}
|
||||
|
||||
|
||||
EvalSpinBox * CDGraphicWidget::evalSpinBoxVisible() {
|
||||
return ui->evalVisible;
|
||||
}
|
||||
@@ -1,66 +1,66 @@
|
||||
/*
|
||||
QCD Utils - Qt bindings/utilites for CD Utils
|
||||
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef QCD_GRAPHIC_H
|
||||
#define QCD_GRAPHIC_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <evalspinbox.h>
|
||||
#include <pistring.h>
|
||||
|
||||
namespace CDUtils {
|
||||
class CDType;
|
||||
class CDSection;
|
||||
}
|
||||
|
||||
namespace Ui {
|
||||
class CDGraphicWidget;
|
||||
}
|
||||
|
||||
class Graphic;
|
||||
class Graphic;
|
||||
|
||||
|
||||
class CDGraphicWidget: public QWidget {
|
||||
Q_OBJECT
|
||||
friend class CDGraphics;
|
||||
friend class GDockWidget;
|
||||
public:
|
||||
CDGraphicWidget(QWidget * p = 0);
|
||||
|
||||
Graphic * graphic() const;
|
||||
bool isConfigVisible() const;
|
||||
|
||||
EvalSpinBox * evalSpinBoxHistory();
|
||||
EvalSpinBox * evalSpinBoxVisible();
|
||||
|
||||
public slots:
|
||||
void setConfigVisible(bool on);
|
||||
|
||||
private:
|
||||
Ui::CDGraphicWidget * ui;
|
||||
|
||||
private slots:
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // QCD_GRAPHIC_H
|
||||
/*
|
||||
QCD Utils - Qt bindings/utilites for CD Utils
|
||||
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef QCD_GRAPHIC_H
|
||||
#define QCD_GRAPHIC_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <evalspinbox.h>
|
||||
#include <pistring.h>
|
||||
|
||||
namespace CDUtils {
|
||||
class CDType;
|
||||
class CDSection;
|
||||
}
|
||||
|
||||
namespace Ui {
|
||||
class CDGraphicWidget;
|
||||
}
|
||||
|
||||
class Graphic;
|
||||
class Graphic;
|
||||
|
||||
|
||||
class CDGraphicWidget: public QWidget {
|
||||
Q_OBJECT
|
||||
friend class CDGraphics;
|
||||
friend class GDockWidget;
|
||||
public:
|
||||
CDGraphicWidget(QWidget * p = 0);
|
||||
|
||||
Graphic * graphic() const;
|
||||
bool isConfigVisible() const;
|
||||
|
||||
EvalSpinBox * evalSpinBoxHistory();
|
||||
EvalSpinBox * evalSpinBoxVisible();
|
||||
|
||||
public slots:
|
||||
void setConfigVisible(bool on);
|
||||
|
||||
private:
|
||||
Ui::CDGraphicWidget * ui;
|
||||
|
||||
private slots:
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // QCD_GRAPHIC_H
|
||||
@@ -1,169 +1,169 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CDGraphicWidget</class>
|
||||
<widget class="QWidget" name="CDGraphicWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>470</width>
|
||||
<height>380</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CD Pult</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="layoutMain">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="Graphic" name="graphic">
|
||||
<property name="buttons">
|
||||
<set>Graphic::Autofit|Graphic::BorderInputs|Graphic::Clear|Graphic::Configure|Graphic::CursorAxis|Graphic::Fullscreen|Graphic::Legend|Graphic::OnlyExpandY|Graphic::Pause|Graphic::Save</set>
|
||||
</property>
|
||||
<property name="borderInputsVisible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="statusVisible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="historySize">
|
||||
<double>100.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widgetConfig" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>History:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="EvalSpinBox" name="evalHistory">
|
||||
<property name="value">
|
||||
<double>100.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>1</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Visible:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="EvalSpinBox" name="evalVisible">
|
||||
<property name="value">
|
||||
<double>-1.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>1</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>Graphic</class>
|
||||
<extends>QFrame</extends>
|
||||
<header>graphic.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>EvalSpinBox</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>evalspinbox.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>evalHistory</sender>
|
||||
<signal>valueChanged(double)</signal>
|
||||
<receiver>graphic</receiver>
|
||||
<slot>setHistorySize(double)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>148</x>
|
||||
<y>363</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>156</x>
|
||||
<y>297</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>evalVisible</sender>
|
||||
<signal>valueChanged(double)</signal>
|
||||
<receiver>graphic</receiver>
|
||||
<slot>setMaxVisibleTime(double)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>345</x>
|
||||
<y>361</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>342</x>
|
||||
<y>337</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CDGraphicWidget</class>
|
||||
<widget class="QWidget" name="CDGraphicWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>470</width>
|
||||
<height>380</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CD Pult</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="layoutMain">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="Graphic" name="graphic">
|
||||
<property name="buttons">
|
||||
<set>Graphic::Autofit|Graphic::BorderInputs|Graphic::Clear|Graphic::Configure|Graphic::CursorAxis|Graphic::Fullscreen|Graphic::Legend|Graphic::OnlyExpandY|Graphic::Pause|Graphic::Save</set>
|
||||
</property>
|
||||
<property name="borderInputsVisible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="statusVisible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="historySize">
|
||||
<double>100.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widgetConfig" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>History:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="EvalSpinBox" name="evalHistory">
|
||||
<property name="value">
|
||||
<double>100.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>1</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Visible:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="EvalSpinBox" name="evalVisible">
|
||||
<property name="value">
|
||||
<double>-1.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>1</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>Graphic</class>
|
||||
<extends>QFrame</extends>
|
||||
<header>graphic.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>EvalSpinBox</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>evalspinbox.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>evalHistory</sender>
|
||||
<signal>valueChanged(double)</signal>
|
||||
<receiver>graphic</receiver>
|
||||
<slot>setHistorySize(double)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>148</x>
|
||||
<y>363</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>156</x>
|
||||
<y>297</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>evalVisible</sender>
|
||||
<signal>valueChanged(double)</signal>
|
||||
<receiver>graphic</receiver>
|
||||
<slot>setMaxVisibleTime(double)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>345</x>
|
||||
<y>361</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>342</x>
|
||||
<y>337</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -1,46 +1,46 @@
|
||||
#include "qcd_modedialog.h"
|
||||
#include "ui_qcd_modedialog.h"
|
||||
|
||||
|
||||
QCDModeDialog::QCDModeDialog(QWidget * parent): QDialog(parent) {
|
||||
ui = new Ui::QCDModeDialog();
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
|
||||
QCDModeDialog::~QCDModeDialog() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
CDUtils::UpdateModeFlags QCDModeDialog::mode() const {
|
||||
CDUtils::UpdateModeFlags ret = 0;
|
||||
if (ui->checkSaveIndex->isChecked()) ret |= CDUtils::SaveByIndex;
|
||||
if (ui->checkSaveName->isChecked()) ret |= CDUtils::SaveByName;
|
||||
if (ui->checkMerge->isChecked()) ret |= CDUtils::Merge;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void QCDModeDialog::changeEvent(QEvent *e) {
|
||||
QDialog::changeEvent(e);
|
||||
switch (e->type()) {
|
||||
case QEvent::LanguageChange:
|
||||
ui->retranslateUi(this);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void QCDModeDialog::on_checkSaveIndex_clicked(bool checked) {
|
||||
if (!checked) return;
|
||||
ui->checkSaveName->setChecked(false);
|
||||
}
|
||||
|
||||
|
||||
void QCDModeDialog::on_checkSaveName_clicked(bool checked) {
|
||||
if (!checked) return;
|
||||
ui->checkSaveIndex->setChecked(false);
|
||||
}
|
||||
#include "qcd_modedialog.h"
|
||||
#include "ui_qcd_modedialog.h"
|
||||
|
||||
|
||||
QCDModeDialog::QCDModeDialog(QWidget * parent): QDialog(parent) {
|
||||
ui = new Ui::QCDModeDialog();
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
|
||||
QCDModeDialog::~QCDModeDialog() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
CDUtils::UpdateModeFlags QCDModeDialog::mode() const {
|
||||
CDUtils::UpdateModeFlags ret = 0;
|
||||
if (ui->checkSaveIndex->isChecked()) ret |= CDUtils::SaveByIndex;
|
||||
if (ui->checkSaveName->isChecked()) ret |= CDUtils::SaveByName;
|
||||
if (ui->checkMerge->isChecked()) ret |= CDUtils::Merge;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void QCDModeDialog::changeEvent(QEvent *e) {
|
||||
QDialog::changeEvent(e);
|
||||
switch (e->type()) {
|
||||
case QEvent::LanguageChange:
|
||||
ui->retranslateUi(this);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void QCDModeDialog::on_checkSaveIndex_clicked(bool checked) {
|
||||
if (!checked) return;
|
||||
ui->checkSaveName->setChecked(false);
|
||||
}
|
||||
|
||||
|
||||
void QCDModeDialog::on_checkSaveName_clicked(bool checked) {
|
||||
if (!checked) return;
|
||||
ui->checkSaveIndex->setChecked(false);
|
||||
}
|
||||
@@ -1,50 +1,50 @@
|
||||
/*
|
||||
QCD Utils - Qt bindings/utilites for CD Utils
|
||||
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef QCD_MODEDIALOG_H
|
||||
#define QCD_MODEDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <cdutils_types.h>
|
||||
|
||||
namespace Ui {
|
||||
class QCDModeDialog;
|
||||
}
|
||||
|
||||
class QCDModeDialog: public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit QCDModeDialog(QWidget * parent = 0);
|
||||
~QCDModeDialog();
|
||||
|
||||
CDUtils::UpdateModeFlags mode() const;
|
||||
|
||||
protected:
|
||||
void changeEvent(QEvent *e);
|
||||
|
||||
Ui::QCDModeDialog * ui;
|
||||
|
||||
private slots:
|
||||
void on_checkSaveIndex_clicked(bool checked);
|
||||
void on_checkSaveName_clicked(bool checked);
|
||||
|
||||
};
|
||||
|
||||
#endif // QCD_MODEDIALOG_H
|
||||
/*
|
||||
QCD Utils - Qt bindings/utilites for CD Utils
|
||||
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef QCD_MODEDIALOG_H
|
||||
#define QCD_MODEDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <cdutils_types.h>
|
||||
|
||||
namespace Ui {
|
||||
class QCDModeDialog;
|
||||
}
|
||||
|
||||
class QCDModeDialog: public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit QCDModeDialog(QWidget * parent = 0);
|
||||
~QCDModeDialog();
|
||||
|
||||
CDUtils::UpdateModeFlags mode() const;
|
||||
|
||||
protected:
|
||||
void changeEvent(QEvent *e);
|
||||
|
||||
Ui::QCDModeDialog * ui;
|
||||
|
||||
private slots:
|
||||
void on_checkSaveIndex_clicked(bool checked);
|
||||
void on_checkSaveName_clicked(bool checked);
|
||||
|
||||
};
|
||||
|
||||
#endif // QCD_MODEDIALOG_H
|
||||
@@ -1,98 +1,98 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>QCDModeDialog</class>
|
||||
<widget class="QDialog" name="QCDModeDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>251</width>
|
||||
<height>152</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Update description mode</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkSaveIndex">
|
||||
<property name="text">
|
||||
<string>Save by index</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkSaveName">
|
||||
<property name="text">
|
||||
<string>Save by name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkMerge">
|
||||
<property name="text">
|
||||
<string>Merge</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>1</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>QCDModeDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>106</x>
|
||||
<y>131</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>101</x>
|
||||
<y>146</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>QCDModeDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>182</x>
|
||||
<y>127</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>169</x>
|
||||
<y>146</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>QCDModeDialog</class>
|
||||
<widget class="QDialog" name="QCDModeDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>251</width>
|
||||
<height>152</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Update description mode</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkSaveIndex">
|
||||
<property name="text">
|
||||
<string>Save by index</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkSaveName">
|
||||
<property name="text">
|
||||
<string>Save by name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkMerge">
|
||||
<property name="text">
|
||||
<string>Merge</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>1</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>QCDModeDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>106</x>
|
||||
<y>131</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>101</x>
|
||||
<y>146</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>QCDModeDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>182</x>
|
||||
<y>127</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>169</x>
|
||||
<y>146</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -1,460 +1,460 @@
|
||||
#include "qcd_model.h"
|
||||
#include "cdutils_interface.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "cdutils_x.h"
|
||||
#include "piqt.h"
|
||||
#include <QDebug>
|
||||
#include <QBrush>
|
||||
#include <QColor>
|
||||
#include <QMimeData>
|
||||
#include "qvariantedit.h"
|
||||
#include "qad_types.h"
|
||||
|
||||
|
||||
using namespace CDUtils;
|
||||
|
||||
// CDKItem
|
||||
|
||||
CDItem::CDItem(CDUtils::Interface * i, int _index, CDItem::CDItemType type, CDItem *parent) {
|
||||
interface = i;
|
||||
index_ = _index;
|
||||
parent_ = parent;
|
||||
type_ = type;
|
||||
item_count = 0;
|
||||
expanded = true;
|
||||
}
|
||||
|
||||
|
||||
CDItem::~CDItem() {
|
||||
qDeleteAll(childs);
|
||||
}
|
||||
|
||||
|
||||
QVariant CDItem::data(int column, int role) const {
|
||||
if (role == Qt::BackgroundRole) {
|
||||
switch (type_) {
|
||||
case ItemCDType: {
|
||||
CDType & t(interface->section(buildPath())[index_]);
|
||||
if (t.errorString().isEmpty()) return QBrush(QColor(255, 250, 230));
|
||||
else return QBrush(QColor(255, 128, 128));
|
||||
}
|
||||
case ItemCDSection: return QBrush(QColor(230, 250, 230));
|
||||
}
|
||||
}
|
||||
if (role == Qt::CheckStateRole && type_ == ItemCDType) {
|
||||
CDType & t(interface->section(buildPath())[index_]);
|
||||
if (column == cValue && t.cd_type() == CDType::cdK) {
|
||||
if (t.type() == "b") return t.toBool() ? Qt::Checked : Qt::Unchecked;
|
||||
else QVariant();
|
||||
}
|
||||
if (column == cName_Cmd && t.cd_type() == CDType::cdX) {
|
||||
return t.isSelectedX() ? Qt::Checked : Qt::Unchecked;
|
||||
}
|
||||
}
|
||||
if (role == Qt::ToolTipRole && type_ == ItemCDType) {
|
||||
CDType & t(interface->section(buildPath())[index_]);
|
||||
return PI2QString(t.errorString());
|
||||
}
|
||||
if (role != Qt::DisplayRole && role != Qt::EditRole) return QVariant();
|
||||
PIDeque<int> path = buildPath();
|
||||
CDSection & rs = interface->section(path);
|
||||
CDSection s;
|
||||
switch (type_) {
|
||||
case ItemCDType:
|
||||
switch (column) {
|
||||
case cID: return QString::number(index_);
|
||||
case cName_Cmd: return PI2QString(rs[index_].name());
|
||||
case cType: return stringType(rs[index_].type());
|
||||
case cXMode: return QVariant::fromValue(xModeEnum(rs[index_].xmode()));
|
||||
case cXAvg: return rs[index_].avg();
|
||||
case cExpression: return PI2QString(rs[index_].formula());
|
||||
case cValue: return value(rs[index_], role);
|
||||
case cComment: return PI2QString(rs[index_].comment());
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
case ItemCDSection:
|
||||
s = rs.section(index_);
|
||||
// piCout << rs.name << rs.alias << s.name << s.alias;
|
||||
switch (column) {
|
||||
case cID: return QString("[") + QString::number(index_) + QString("]");
|
||||
case cName_Cmd: return PI2QString(s.alias);
|
||||
case cType: return PI2QString(s.name);
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
|
||||
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();
|
||||
if (t.type() == "e") {
|
||||
QAD::Enum et = PI2QADEnum(t.enumValues());
|
||||
et.selectValue(t.toInt());
|
||||
if (role == Qt::EditRole) return QVariant::fromValue<QAD::Enum>(et);
|
||||
else return et.selectedName();
|
||||
}
|
||||
return PI2QString(t.value());
|
||||
}
|
||||
|
||||
|
||||
bool CDItem::setData(int column, const QVariant & value) {
|
||||
if (type_ == ItemCDType) {
|
||||
CDType & t(interface->section(buildPath())[index_]);
|
||||
if ((column == cExpression || column == cValue) && (t.cd_type() == CDType::cdK)) {
|
||||
interface->section(buildPath())[index_].setValue(Q2PIString(value.toString()));
|
||||
interface->calculate();
|
||||
return true;
|
||||
}
|
||||
if (t.cd_type() == CDType::cdX) {
|
||||
switch (column) {
|
||||
case cName_Cmd:
|
||||
X.setEnabled(t, value.toBool());
|
||||
return true;
|
||||
case cXMode:
|
||||
t.setXMode((CDType::XMode)value.toInt());
|
||||
return true;
|
||||
case cXAvg:
|
||||
t.setAvg(piMax(value.toInt(), 1));
|
||||
return true;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
PIDeque<int> CDItem::buildPath() const {
|
||||
PIDeque<int> path;
|
||||
CDItem * p = parent_;
|
||||
while (p) {
|
||||
path.push_front(p->index_);
|
||||
p = p->parent_;
|
||||
}
|
||||
path.take_front();
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
QString CDItem::stringType(const PIString & t) const {
|
||||
QString n = PI2QString(t);
|
||||
if (n.isEmpty()) return QString("");
|
||||
switch (n[0].toLatin1()) {
|
||||
case 'l': return QString("list"); break;
|
||||
case 'b': return QString("bool"); break;
|
||||
case 'n': return QString("int"); break;
|
||||
case 'f': return QString("double"); break;
|
||||
case 'c': return QString("color"); break;
|
||||
case 'r': return QString("rect"); break;
|
||||
case 'a': return QString("rect"); break;
|
||||
case 'p': return QString("point"); break;
|
||||
case 'v': return QString("vector"); break;
|
||||
case 'i': return QString("IP"); break;
|
||||
case 'e': return QString("enum"); break;
|
||||
case 'F': return QString("file"); break;
|
||||
case 'D': return QString("dir"); break;
|
||||
}
|
||||
return QString("string");
|
||||
}
|
||||
|
||||
|
||||
QAD::Enum CDItem::xModeEnum(int v) const {
|
||||
QAD::Enum ret;
|
||||
ret << QAD::Enumerator(CDType::X_Current, "Current")
|
||||
<< QAD::Enumerator(CDType::X_All_Avg, "All, Averaging");
|
||||
ret.selectValue(v);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
// CDKDelegate
|
||||
|
||||
CDDelegate::CDDelegate(QObject *parent) : QStyledItemDelegate(parent) {
|
||||
}
|
||||
|
||||
|
||||
void CDDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const {
|
||||
CDItem * item = ((CDItemModel*)index.model())->getItem(index);
|
||||
if (item) {
|
||||
if (item->itemType() == CDItem::ItemCDType && item->interface->cdType() == CDType::cdC) {
|
||||
QStyleOptionButton bo;
|
||||
bo.direction = option.direction;
|
||||
bo.fontMetrics = option.fontMetrics;
|
||||
bo.palette = option.palette;
|
||||
bo.rect = option.rect;
|
||||
bo.state = option.state;// & ~(QStyle::State_HasFocus | QStyle::State_MouseOver);
|
||||
bo.text = item->data(1, Qt::DisplayRole).toString();
|
||||
QWidget * v = (QWidget*)(painter->device());
|
||||
if (v) {
|
||||
QPoint cp = v->mapFromGlobal(QCursor::pos());
|
||||
if (bo.rect.contains(cp, true)) {
|
||||
//bo.state |= QStyle::State_MouseOver;
|
||||
if (qApp->mouseButtons().testFlag(Qt::LeftButton))
|
||||
bo.state |= QStyle::State_On;
|
||||
}
|
||||
}
|
||||
qApp->style()->drawControl(QStyle::CE_PushButton, &bo, painter);
|
||||
return;
|
||||
}
|
||||
}
|
||||
QStyledItemDelegate::paint(painter, option, index);
|
||||
|
||||
}
|
||||
|
||||
|
||||
QWidget * CDDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const {
|
||||
return new QVariantEdit(parent);
|
||||
}
|
||||
|
||||
|
||||
void CDDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const {
|
||||
QVariantEdit *edit = static_cast<QVariantEdit*>(editor);
|
||||
edit->setValue(index.model()->data(index, Qt::EditRole));
|
||||
}
|
||||
|
||||
|
||||
void CDDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const {
|
||||
QVariantEdit *edit = static_cast<QVariantEdit*>(editor);
|
||||
QVariant v = edit->value();
|
||||
if (v.canConvert<QAD::Enum>()) {
|
||||
QAD::Enum et = v.value<QAD::Enum>();
|
||||
model->setData(index, et.selectedValue(), Qt::EditRole);
|
||||
} else model->setData(index, v, Qt::EditRole);
|
||||
}
|
||||
|
||||
|
||||
void CDDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const {
|
||||
editor->setGeometry(option.rect);
|
||||
}
|
||||
|
||||
|
||||
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 cID: return tr("Index");
|
||||
case cName_Cmd: return interface->cdType() == CDType::cdC ? tr("Command") : tr("Name");
|
||||
case cType: return tr("Type");
|
||||
case cXMode: return tr("Mode");
|
||||
case cXAvg: return tr("Averaging");
|
||||
case cExpression: return tr("Expression");
|
||||
case cValue: return tr("Value");
|
||||
case cComment: return tr("Comment");
|
||||
}
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
|
||||
QModelIndex CDItemModel::index(int row, int column, const QModelIndex &parent) const {
|
||||
if (parent.isValid() && parent.column() != cID) 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), cID, p);
|
||||
}
|
||||
|
||||
|
||||
int CDItemModel::rowCount(const QModelIndex &parent) const {
|
||||
CDItem * p = getItem(parent);
|
||||
return p->childs.count();
|
||||
}
|
||||
|
||||
|
||||
int CDItemModel::columnCount(const QModelIndex &parent) const {
|
||||
return cLastColumn;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
if (item->type_ == CDItem::ItemCDType) {
|
||||
CDType & t(interface->section(item->buildPath())[item->index_]);
|
||||
if (t.cd_type() == CDType::cdK) {
|
||||
if (index.column() == cExpression || index.column() == cValue)
|
||||
f |= Qt::ItemIsEditable;
|
||||
if (index.column() == cValue && t.type() == "b")
|
||||
f |= Qt::ItemIsUserCheckable;
|
||||
if (index.column() == cName_Cmd)
|
||||
f |= Qt::ItemIsDragEnabled;
|
||||
}
|
||||
if (t.cd_type() == CDType::cdX) {
|
||||
if (index.column() == cXMode || index.column() == cXAvg)
|
||||
f |= Qt::ItemIsEditable;
|
||||
if (index.column() == cName_Cmd)
|
||||
f |= Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled;
|
||||
}
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
|
||||
bool CDItemModel::setData(const QModelIndex & index, const QVariant & value, int role) {
|
||||
if (role == Qt::CheckStateRole && (index.column() == cName_Cmd || index.column() == cValue)) {
|
||||
CDItem * item = getItem(index);
|
||||
if (item->type_ == CDItem::ItemCDType) {
|
||||
CDType & t(interface->section(item->buildPath())[item->index_]);
|
||||
if (index.column() == cValue && (t.cd_type() == CDType::cdK)) {
|
||||
if (t.type() == "b") {
|
||||
bool result = item->setData(index.column(), PI2QString(PIString::fromBool(value.toBool())));
|
||||
QModelIndex rin(CDItemModel::index(index.row(), cExpression, index.parent()));
|
||||
emit dataChanged(rin, rin);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
if (index.column() == cName_Cmd && (t.cd_type() == CDType::cdX)) {
|
||||
bool result = item->setData(index.column(), value);
|
||||
//QModelIndex rin(CDItemModel::index(index.row(), 1, 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(), cExpression, index.parent()));
|
||||
emit dataChanged(rin, rin);
|
||||
emit dataChanged(index, index);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
QMimeData * CDItemModel::mimeData(const QModelIndexList & indexes) const {
|
||||
if (indexes.size() == 1) {
|
||||
QModelIndex index = indexes[0];
|
||||
if (index.isValid()/* && interface->cdType() == CDType::cdX*/) {
|
||||
CDItem * item = getItem(index);
|
||||
if (item) {
|
||||
CDType & t(interface->section(item->buildPath())[item->index_]);
|
||||
QMimeData * mime = new QMimeData();
|
||||
mime->setText(PI2QString(CDCore::instance()->typeLetter(interface->cdType()) +
|
||||
CDCore::pathToString(t.path())));
|
||||
return mime;
|
||||
}
|
||||
}
|
||||
}
|
||||
return QAbstractItemModel::mimeData(indexes);
|
||||
}
|
||||
|
||||
|
||||
void CDItemModel::rebuildModel() {
|
||||
beginResetModel();
|
||||
internalRebuild();
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
|
||||
void CDItemModel::buildItem(CDItem * it, CDSection & r) {
|
||||
//piCout << "build item" << r.name << r.alias;
|
||||
auto i = r.cd.makeIterator();
|
||||
while (i.next()) {
|
||||
it->childs << new CDItem(interface, i.key(), CDItem::ItemCDType, it);
|
||||
}
|
||||
it->item_count = it->childs.size();
|
||||
auto j = r.s.makeIterator();
|
||||
while (j.next()) {
|
||||
it->childs << new CDItem(interface, j.key(), CDItem::ItemCDSection, it);
|
||||
buildItem(it->childs.back(), j.valueRef());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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<CDItem*>(index.internalPointer());
|
||||
if (item) return item;
|
||||
}
|
||||
return root;
|
||||
}
|
||||
|
||||
|
||||
QModelIndex CDItemModel::indexByPath(const PIDeque<int> & path, int column) const {
|
||||
if (path.isEmpty()) return QModelIndex();
|
||||
CDItem * item = root;
|
||||
//piCout << path << "...";
|
||||
bool ok = false;
|
||||
for (int i = 0; i < path.size_s() - 1; ++i) {
|
||||
ok = false;
|
||||
foreach (CDItem * j, item->childs)
|
||||
if (j->type_ == CDItem::ItemCDSection && j->index_ == path[i]) {
|
||||
item = j;
|
||||
ok = true;
|
||||
break;
|
||||
}
|
||||
if (!ok) return QModelIndex();
|
||||
}
|
||||
ok = false;
|
||||
foreach (CDItem * j, item->childs)
|
||||
if (j->type_ == CDItem::ItemCDType && j->index_ == path.back()) {
|
||||
item = j;
|
||||
ok = true;
|
||||
break;
|
||||
}
|
||||
if (!ok || !item->parent_) return QModelIndex();
|
||||
QModelIndex ret = createIndex(item->parent_->childs.indexOf(item), column, item);
|
||||
//piCout << path << Q2PIString(item->data(cName_Cmd, Qt::DisplayRole).toString()) << getItem(ret)->buildPath();
|
||||
return ret;
|
||||
}
|
||||
#include "qcd_model.h"
|
||||
#include "cdutils_interface.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "cdutils_x.h"
|
||||
#include "piqt.h"
|
||||
#include <QDebug>
|
||||
#include <QBrush>
|
||||
#include <QColor>
|
||||
#include <QMimeData>
|
||||
#include "qvariantedit.h"
|
||||
#include "qad_types.h"
|
||||
|
||||
|
||||
using namespace CDUtils;
|
||||
|
||||
// CDKItem
|
||||
|
||||
CDItem::CDItem(CDUtils::Interface * i, int _index, CDItem::CDItemType type, CDItem *parent) {
|
||||
interface = i;
|
||||
index_ = _index;
|
||||
parent_ = parent;
|
||||
type_ = type;
|
||||
item_count = 0;
|
||||
expanded = true;
|
||||
}
|
||||
|
||||
|
||||
CDItem::~CDItem() {
|
||||
qDeleteAll(childs);
|
||||
}
|
||||
|
||||
|
||||
QVariant CDItem::data(int column, int role) const {
|
||||
if (role == Qt::BackgroundRole) {
|
||||
switch (type_) {
|
||||
case ItemCDType: {
|
||||
CDType & t(interface->section(buildPath())[index_]);
|
||||
if (t.errorString().isEmpty()) return QBrush(QColor(255, 250, 230));
|
||||
else return QBrush(QColor(255, 128, 128));
|
||||
}
|
||||
case ItemCDSection: return QBrush(QColor(230, 250, 230));
|
||||
}
|
||||
}
|
||||
if (role == Qt::CheckStateRole && type_ == ItemCDType) {
|
||||
CDType & t(interface->section(buildPath())[index_]);
|
||||
if (column == cValue && t.cd_type() == CDType::cdK) {
|
||||
if (t.type() == "b") return t.toBool() ? Qt::Checked : Qt::Unchecked;
|
||||
else QVariant();
|
||||
}
|
||||
if (column == cName_Cmd && t.cd_type() == CDType::cdX) {
|
||||
return t.isSelectedX() ? Qt::Checked : Qt::Unchecked;
|
||||
}
|
||||
}
|
||||
if (role == Qt::ToolTipRole && type_ == ItemCDType) {
|
||||
CDType & t(interface->section(buildPath())[index_]);
|
||||
return PI2QString(t.errorString());
|
||||
}
|
||||
if (role != Qt::DisplayRole && role != Qt::EditRole) return QVariant();
|
||||
PIDeque<int> path = buildPath();
|
||||
CDSection & rs = interface->section(path);
|
||||
CDSection s;
|
||||
switch (type_) {
|
||||
case ItemCDType:
|
||||
switch (column) {
|
||||
case cID: return QString::number(index_);
|
||||
case cName_Cmd: return PI2QString(rs[index_].name());
|
||||
case cType: return stringType(rs[index_].type());
|
||||
case cXMode: return QVariant::fromValue(xModeEnum(rs[index_].xmode()));
|
||||
case cXAvg: return rs[index_].avg();
|
||||
case cExpression: return PI2QString(rs[index_].formula());
|
||||
case cValue: return value(rs[index_], role);
|
||||
case cComment: return PI2QString(rs[index_].comment());
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
case ItemCDSection:
|
||||
s = rs.section(index_);
|
||||
// piCout << rs.name << rs.alias << s.name << s.alias;
|
||||
switch (column) {
|
||||
case cID: return QString("[") + QString::number(index_) + QString("]");
|
||||
case cName_Cmd: return PI2QString(s.alias);
|
||||
case cType: return PI2QString(s.name);
|
||||
default: break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
|
||||
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();
|
||||
if (t.type() == "e") {
|
||||
QAD::Enum et = PI2QADEnum(t.enumValues());
|
||||
et.selectValue(t.toInt());
|
||||
if (role == Qt::EditRole) return QVariant::fromValue<QAD::Enum>(et);
|
||||
else return et.selectedName();
|
||||
}
|
||||
return PI2QString(t.value());
|
||||
}
|
||||
|
||||
|
||||
bool CDItem::setData(int column, const QVariant & value) {
|
||||
if (type_ == ItemCDType) {
|
||||
CDType & t(interface->section(buildPath())[index_]);
|
||||
if ((column == cExpression || column == cValue) && (t.cd_type() == CDType::cdK)) {
|
||||
interface->section(buildPath())[index_].setValue(Q2PIString(value.toString()));
|
||||
interface->calculate();
|
||||
return true;
|
||||
}
|
||||
if (t.cd_type() == CDType::cdX) {
|
||||
switch (column) {
|
||||
case cName_Cmd:
|
||||
X.setEnabled(t, value.toBool());
|
||||
return true;
|
||||
case cXMode:
|
||||
t.setXMode((CDType::XMode)value.toInt());
|
||||
return true;
|
||||
case cXAvg:
|
||||
t.setAvg(piMax(value.toInt(), 1));
|
||||
return true;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
PIDeque<int> CDItem::buildPath() const {
|
||||
PIDeque<int> path;
|
||||
CDItem * p = parent_;
|
||||
while (p) {
|
||||
path.push_front(p->index_);
|
||||
p = p->parent_;
|
||||
}
|
||||
path.take_front();
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
QString CDItem::stringType(const PIString & t) const {
|
||||
QString n = PI2QString(t);
|
||||
if (n.isEmpty()) return QString("");
|
||||
switch (n[0].toLatin1()) {
|
||||
case 'l': return QString("list"); break;
|
||||
case 'b': return QString("bool"); break;
|
||||
case 'n': return QString("int"); break;
|
||||
case 'f': return QString("double"); break;
|
||||
case 'c': return QString("color"); break;
|
||||
case 'r': return QString("rect"); break;
|
||||
case 'a': return QString("rect"); break;
|
||||
case 'p': return QString("point"); break;
|
||||
case 'v': return QString("vector"); break;
|
||||
case 'i': return QString("IP"); break;
|
||||
case 'e': return QString("enum"); break;
|
||||
case 'F': return QString("file"); break;
|
||||
case 'D': return QString("dir"); break;
|
||||
}
|
||||
return QString("string");
|
||||
}
|
||||
|
||||
|
||||
QAD::Enum CDItem::xModeEnum(int v) const {
|
||||
QAD::Enum ret;
|
||||
ret << QAD::Enumerator(CDType::X_Current, "Current")
|
||||
<< QAD::Enumerator(CDType::X_All_Avg, "All, Averaging");
|
||||
ret.selectValue(v);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
// CDKDelegate
|
||||
|
||||
CDDelegate::CDDelegate(QObject *parent) : QStyledItemDelegate(parent) {
|
||||
}
|
||||
|
||||
|
||||
void CDDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const {
|
||||
CDItem * item = ((CDItemModel*)index.model())->getItem(index);
|
||||
if (item) {
|
||||
if (item->itemType() == CDItem::ItemCDType && item->interface->cdType() == CDType::cdC) {
|
||||
QStyleOptionButton bo;
|
||||
bo.direction = option.direction;
|
||||
bo.fontMetrics = option.fontMetrics;
|
||||
bo.palette = option.palette;
|
||||
bo.rect = option.rect;
|
||||
bo.state = option.state;// & ~(QStyle::State_HasFocus | QStyle::State_MouseOver);
|
||||
bo.text = item->data(1, Qt::DisplayRole).toString();
|
||||
QWidget * v = (QWidget*)(painter->device());
|
||||
if (v) {
|
||||
QPoint cp = v->mapFromGlobal(QCursor::pos());
|
||||
if (bo.rect.contains(cp, true)) {
|
||||
//bo.state |= QStyle::State_MouseOver;
|
||||
if (qApp->mouseButtons().testFlag(Qt::LeftButton))
|
||||
bo.state |= QStyle::State_On;
|
||||
}
|
||||
}
|
||||
qApp->style()->drawControl(QStyle::CE_PushButton, &bo, painter);
|
||||
return;
|
||||
}
|
||||
}
|
||||
QStyledItemDelegate::paint(painter, option, index);
|
||||
|
||||
}
|
||||
|
||||
|
||||
QWidget * CDDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const {
|
||||
return new QVariantEdit(parent);
|
||||
}
|
||||
|
||||
|
||||
void CDDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const {
|
||||
QVariantEdit *edit = static_cast<QVariantEdit*>(editor);
|
||||
edit->setValue(index.model()->data(index, Qt::EditRole));
|
||||
}
|
||||
|
||||
|
||||
void CDDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const {
|
||||
QVariantEdit *edit = static_cast<QVariantEdit*>(editor);
|
||||
QVariant v = edit->value();
|
||||
if (v.canConvert<QAD::Enum>()) {
|
||||
QAD::Enum et = v.value<QAD::Enum>();
|
||||
model->setData(index, et.selectedValue(), Qt::EditRole);
|
||||
} else model->setData(index, v, Qt::EditRole);
|
||||
}
|
||||
|
||||
|
||||
void CDDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const {
|
||||
editor->setGeometry(option.rect);
|
||||
}
|
||||
|
||||
|
||||
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 cID: return tr("Index");
|
||||
case cName_Cmd: return interface->cdType() == CDType::cdC ? tr("Command") : tr("Name");
|
||||
case cType: return tr("Type");
|
||||
case cXMode: return tr("Mode");
|
||||
case cXAvg: return tr("Averaging");
|
||||
case cExpression: return tr("Expression");
|
||||
case cValue: return tr("Value");
|
||||
case cComment: return tr("Comment");
|
||||
}
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
|
||||
QModelIndex CDItemModel::index(int row, int column, const QModelIndex &parent) const {
|
||||
if (parent.isValid() && parent.column() != cID) 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), cID, p);
|
||||
}
|
||||
|
||||
|
||||
int CDItemModel::rowCount(const QModelIndex &parent) const {
|
||||
CDItem * p = getItem(parent);
|
||||
return p->childs.count();
|
||||
}
|
||||
|
||||
|
||||
int CDItemModel::columnCount(const QModelIndex &parent) const {
|
||||
return cLastColumn;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
if (item->type_ == CDItem::ItemCDType) {
|
||||
CDType & t(interface->section(item->buildPath())[item->index_]);
|
||||
if (t.cd_type() == CDType::cdK) {
|
||||
if (index.column() == cExpression || index.column() == cValue)
|
||||
f |= Qt::ItemIsEditable;
|
||||
if (index.column() == cValue && t.type() == "b")
|
||||
f |= Qt::ItemIsUserCheckable;
|
||||
if (index.column() == cName_Cmd)
|
||||
f |= Qt::ItemIsDragEnabled;
|
||||
}
|
||||
if (t.cd_type() == CDType::cdX) {
|
||||
if (index.column() == cXMode || index.column() == cXAvg)
|
||||
f |= Qt::ItemIsEditable;
|
||||
if (index.column() == cName_Cmd)
|
||||
f |= Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled;
|
||||
}
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
|
||||
bool CDItemModel::setData(const QModelIndex & index, const QVariant & value, int role) {
|
||||
if (role == Qt::CheckStateRole && (index.column() == cName_Cmd || index.column() == cValue)) {
|
||||
CDItem * item = getItem(index);
|
||||
if (item->type_ == CDItem::ItemCDType) {
|
||||
CDType & t(interface->section(item->buildPath())[item->index_]);
|
||||
if (index.column() == cValue && (t.cd_type() == CDType::cdK)) {
|
||||
if (t.type() == "b") {
|
||||
bool result = item->setData(index.column(), PI2QString(PIString::fromBool(value.toBool())));
|
||||
QModelIndex rin(CDItemModel::index(index.row(), cExpression, index.parent()));
|
||||
emit dataChanged(rin, rin);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
if (index.column() == cName_Cmd && (t.cd_type() == CDType::cdX)) {
|
||||
bool result = item->setData(index.column(), value);
|
||||
//QModelIndex rin(CDItemModel::index(index.row(), 1, 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(), cExpression, index.parent()));
|
||||
emit dataChanged(rin, rin);
|
||||
emit dataChanged(index, index);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
QMimeData * CDItemModel::mimeData(const QModelIndexList & indexes) const {
|
||||
if (indexes.size() == 1) {
|
||||
QModelIndex index = indexes[0];
|
||||
if (index.isValid()/* && interface->cdType() == CDType::cdX*/) {
|
||||
CDItem * item = getItem(index);
|
||||
if (item) {
|
||||
CDType & t(interface->section(item->buildPath())[item->index_]);
|
||||
QMimeData * mime = new QMimeData();
|
||||
mime->setText(PI2QString(CDCore::instance()->typeLetter(interface->cdType()) +
|
||||
CDCore::pathToString(t.path())));
|
||||
return mime;
|
||||
}
|
||||
}
|
||||
}
|
||||
return QAbstractItemModel::mimeData(indexes);
|
||||
}
|
||||
|
||||
|
||||
void CDItemModel::rebuildModel() {
|
||||
beginResetModel();
|
||||
internalRebuild();
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
|
||||
void CDItemModel::buildItem(CDItem * it, CDSection & r) {
|
||||
//piCout << "build item" << r.name << r.alias;
|
||||
auto i = r.cd.makeIterator();
|
||||
while (i.next()) {
|
||||
it->childs << new CDItem(interface, i.key(), CDItem::ItemCDType, it);
|
||||
}
|
||||
it->item_count = it->childs.size();
|
||||
auto j = r.s.makeIterator();
|
||||
while (j.next()) {
|
||||
it->childs << new CDItem(interface, j.key(), CDItem::ItemCDSection, it);
|
||||
buildItem(it->childs.back(), j.valueRef());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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<CDItem*>(index.internalPointer());
|
||||
if (item) return item;
|
||||
}
|
||||
return root;
|
||||
}
|
||||
|
||||
|
||||
QModelIndex CDItemModel::indexByPath(const PIDeque<int> & path, int column) const {
|
||||
if (path.isEmpty()) return QModelIndex();
|
||||
CDItem * item = root;
|
||||
//piCout << path << "...";
|
||||
bool ok = false;
|
||||
for (int i = 0; i < path.size_s() - 1; ++i) {
|
||||
ok = false;
|
||||
foreach (CDItem * j, item->childs)
|
||||
if (j->type_ == CDItem::ItemCDSection && j->index_ == path[i]) {
|
||||
item = j;
|
||||
ok = true;
|
||||
break;
|
||||
}
|
||||
if (!ok) return QModelIndex();
|
||||
}
|
||||
ok = false;
|
||||
foreach (CDItem * j, item->childs)
|
||||
if (j->type_ == CDItem::ItemCDType && j->index_ == path.back()) {
|
||||
item = j;
|
||||
ok = true;
|
||||
break;
|
||||
}
|
||||
if (!ok || !item->parent_) return QModelIndex();
|
||||
QModelIndex ret = createIndex(item->parent_->childs.indexOf(item), column, item);
|
||||
//piCout << path << Q2PIString(item->data(cName_Cmd, Qt::DisplayRole).toString()) << getItem(ret)->buildPath();
|
||||
return ret;
|
||||
}
|
||||
@@ -1,132 +1,132 @@
|
||||
/*
|
||||
QCD Utils - Qt bindings/utilites for CD Utils
|
||||
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef QCD_MODEL_H
|
||||
#define QCD_MODEL_H
|
||||
|
||||
#include <QAbstractItemModel>
|
||||
#include <QItemDelegate>
|
||||
#include <QStyledItemDelegate>
|
||||
#include "pistring.h"
|
||||
|
||||
namespace CDUtils {
|
||||
class CDType;
|
||||
class CDSection;
|
||||
class Interface;
|
||||
|
||||
enum Column {
|
||||
cID ,
|
||||
cName_Cmd ,
|
||||
cType ,
|
||||
cXMode ,
|
||||
cXAvg ,
|
||||
cExpression,
|
||||
cValue ,
|
||||
cComment ,
|
||||
cLastColumn,
|
||||
};
|
||||
}
|
||||
|
||||
namespace QAD {
|
||||
struct Enum;
|
||||
}
|
||||
|
||||
class CDItemModel;
|
||||
|
||||
|
||||
class CDItem {
|
||||
friend class CDItemModel;
|
||||
friend class CDView;
|
||||
public:
|
||||
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);
|
||||
CDItemType itemType() const {return type_;}
|
||||
PIDeque<int> buildPath() const;
|
||||
int index() const {return index_;}
|
||||
|
||||
CDUtils::Interface * interface;
|
||||
bool expanded;
|
||||
|
||||
private:
|
||||
QString stringType(const PIString & t) const;
|
||||
QAD::Enum xModeEnum(int v) const;
|
||||
|
||||
CDItem * parent_;
|
||||
int index_, item_count;
|
||||
CDItemType type_;
|
||||
QList<CDItem *> childs;
|
||||
};
|
||||
|
||||
|
||||
class CDDelegate : public QStyledItemDelegate
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CDDelegate(QObject *parent = 0);
|
||||
|
||||
void paint(QPainter * painter, 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;
|
||||
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
||||
|
||||
};
|
||||
|
||||
|
||||
class CDItemModel : public QAbstractItemModel {
|
||||
Q_OBJECT
|
||||
friend class CDView;
|
||||
public:
|
||||
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;
|
||||
QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const;
|
||||
QModelIndex parent(const QModelIndex &index) const;
|
||||
int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
|
||||
QMimeData * mimeData(const QModelIndexList & indexes) const;
|
||||
CDItem * getItem(const QModelIndex & index) const;
|
||||
QModelIndex indexByPath(const PIDeque<int> & path, int column = CDUtils::cID) const;
|
||||
|
||||
void buildItem(CDItem * it, CDUtils::CDSection &r);
|
||||
|
||||
public slots:
|
||||
void rebuildModel();
|
||||
void updateModel();
|
||||
|
||||
private:
|
||||
void internalRebuild();
|
||||
|
||||
CDUtils::Interface * interface;
|
||||
CDItem * root;
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
#endif // QCD_MODEL_H
|
||||
/*
|
||||
QCD Utils - Qt bindings/utilites for CD Utils
|
||||
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef QCD_MODEL_H
|
||||
#define QCD_MODEL_H
|
||||
|
||||
#include <QAbstractItemModel>
|
||||
#include <QItemDelegate>
|
||||
#include <QStyledItemDelegate>
|
||||
#include "pistring.h"
|
||||
|
||||
namespace CDUtils {
|
||||
class CDType;
|
||||
class CDSection;
|
||||
class Interface;
|
||||
|
||||
enum Column {
|
||||
cID ,
|
||||
cName_Cmd ,
|
||||
cType ,
|
||||
cXMode ,
|
||||
cXAvg ,
|
||||
cExpression,
|
||||
cValue ,
|
||||
cComment ,
|
||||
cLastColumn,
|
||||
};
|
||||
}
|
||||
|
||||
namespace QAD {
|
||||
struct Enum;
|
||||
}
|
||||
|
||||
class CDItemModel;
|
||||
|
||||
|
||||
class CDItem {
|
||||
friend class CDItemModel;
|
||||
friend class CDView;
|
||||
public:
|
||||
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);
|
||||
CDItemType itemType() const {return type_;}
|
||||
PIDeque<int> buildPath() const;
|
||||
int index() const {return index_;}
|
||||
|
||||
CDUtils::Interface * interface;
|
||||
bool expanded;
|
||||
|
||||
private:
|
||||
QString stringType(const PIString & t) const;
|
||||
QAD::Enum xModeEnum(int v) const;
|
||||
|
||||
CDItem * parent_;
|
||||
int index_, item_count;
|
||||
CDItemType type_;
|
||||
QList<CDItem *> childs;
|
||||
};
|
||||
|
||||
|
||||
class CDDelegate : public QStyledItemDelegate
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CDDelegate(QObject *parent = 0);
|
||||
|
||||
void paint(QPainter * painter, 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;
|
||||
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
||||
|
||||
};
|
||||
|
||||
|
||||
class CDItemModel : public QAbstractItemModel {
|
||||
Q_OBJECT
|
||||
friend class CDView;
|
||||
public:
|
||||
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;
|
||||
QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const;
|
||||
QModelIndex parent(const QModelIndex &index) const;
|
||||
int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
|
||||
QMimeData * mimeData(const QModelIndexList & indexes) const;
|
||||
CDItem * getItem(const QModelIndex & index) const;
|
||||
QModelIndex indexByPath(const PIDeque<int> & path, int column = CDUtils::cID) const;
|
||||
|
||||
void buildItem(CDItem * it, CDUtils::CDSection &r);
|
||||
|
||||
public slots:
|
||||
void rebuildModel();
|
||||
void updateModel();
|
||||
|
||||
private:
|
||||
void internalRebuild();
|
||||
|
||||
CDUtils::Interface * interface;
|
||||
CDItem * root;
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
#endif // QCD_MODEL_H
|
||||
@@ -1,371 +1,371 @@
|
||||
#include <QDir>
|
||||
#include <QMouseEvent>
|
||||
#include <QSortFilterProxyModel>
|
||||
#include "cdutils_k.h"
|
||||
#include "cdutils_x.h"
|
||||
#include "cdutils_c.h"
|
||||
#include "cdutils_m.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;
|
||||
proxy_ = 0;
|
||||
connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(indexClicked(QModelIndex)));
|
||||
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);
|
||||
connect(this, SIGNAL(_qcd_receivedX()), this, SLOT(cd_receivedX()), Qt::QueuedConnection);
|
||||
connect(this, SIGNAL(_qcd_changedGlobal()), this, SLOT(cd_changedGlobal()), Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
|
||||
CDView::~CDView() {
|
||||
if (model_) {
|
||||
delete model_;
|
||||
delete proxy_;
|
||||
}
|
||||
model_ = 0;
|
||||
proxy_ = 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);
|
||||
CONNECTU(&K, changedGlobal, this, pi_cd_changedGlobal);
|
||||
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);
|
||||
CONNECTU(&X, receivedX, this, pi_cd_receivedX);
|
||||
CONNECTU(&X, changedGlobal, this, pi_cd_changedGlobal);
|
||||
break;
|
||||
case CDType::cdC:
|
||||
CONNECTU(&C, sended, this, pi_cd_sendSucceed);
|
||||
CONNECTU(&C, sendFailed, this, pi_cd_sendFailed);
|
||||
CONNECTU(&C, received, this, pi_cd_receiveSucceed);
|
||||
CONNECTU(&C, receiveFailed, this, pi_cd_receiveFailed);
|
||||
CONNECTU(&C, changedGlobal, this, pi_cd_changedGlobal);
|
||||
break;
|
||||
case CDType::cdM:
|
||||
CONNECTU(&M, sended, this, pi_cd_sendSucceed);
|
||||
CONNECTU(&M, sendFailed, this, pi_cd_sendFailed);
|
||||
CONNECTU(&M, received, this, pi_cd_receiveSucceed);
|
||||
CONNECTU(&M, receiveFailed, this, pi_cd_receiveFailed);
|
||||
CONNECTU(&M, changedGlobal, this, pi_cd_changedGlobal);
|
||||
CONNECTU(&M, messageReceived, this, pi_cd_messageReceived);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void CDView::mousePressEvent(QMouseEvent * e) {
|
||||
if (type_ == CDType::cdC) {
|
||||
QModelIndex i = indexAt(e->pos());
|
||||
if (i.isValid() && i.column() == cName_Cmd)
|
||||
update(i);
|
||||
}
|
||||
QTreeView::mousePressEvent(e);
|
||||
}
|
||||
|
||||
|
||||
void CDView::mouseReleaseEvent(QMouseEvent * e) {
|
||||
if (type_ == CDType::cdC) {
|
||||
QModelIndex i = indexAt(e->pos());
|
||||
if (i.isValid() && i.column() == cName_Cmd)
|
||||
update(i);
|
||||
}
|
||||
QTreeView::mouseReleaseEvent(e);
|
||||
}
|
||||
|
||||
|
||||
void CDView::currentChanged(const QModelIndex & cur, const QModelIndex & prev) {
|
||||
if (type_ == CDType::cdC) {
|
||||
if (prev.isValid() && prev.column() == cName_Cmd)
|
||||
update(prev);
|
||||
}
|
||||
QTreeView::currentChanged(cur, prev);
|
||||
}
|
||||
|
||||
|
||||
void CDView::refresh() {
|
||||
if (type_ < 0) return;
|
||||
if (!model_) {
|
||||
model_ = new CDItemModel(type_);
|
||||
proxy_ = new QSortFilterProxyModel();
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
|
||||
proxy_->setRecursiveFilteringEnabled(true);
|
||||
#endif
|
||||
proxy_->setFilterKeyColumn(-1);
|
||||
proxy_->setFilterCaseSensitivity(Qt::CaseInsensitive);
|
||||
proxy_->setSourceModel(model_);
|
||||
setModel(proxy_);
|
||||
setItemDelegateForColumn(type_ == CDType::cdC ? cName_Cmd : cValue, new CDDelegate());
|
||||
if (type_ == CDType::cdX)
|
||||
setItemDelegateForColumn(cXMode, new CDDelegate());
|
||||
}
|
||||
model_->rebuildModel();
|
||||
switch ((CDType::cdT)type_) {
|
||||
case CDType::cdK:
|
||||
setColumnHidden(cXMode, true);
|
||||
setColumnHidden(cXAvg, true);
|
||||
break;
|
||||
case CDType::cdX:
|
||||
setColumnHidden(cExpression, true);
|
||||
break;
|
||||
case CDType::cdC:
|
||||
case CDType::cdM:
|
||||
setColumnHidden(cType, true);
|
||||
setColumnHidden(cXMode, true);
|
||||
setColumnHidden(cXAvg, true);
|
||||
setColumnHidden(cExpression, true);
|
||||
setColumnHidden(cValue, true);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
expandAll();
|
||||
for (int i = 0; i < model_->columnCount(); i++) resizeColumnToContents(i);
|
||||
}
|
||||
|
||||
|
||||
void CDView::refreshValues() {
|
||||
if (!model_) return;
|
||||
model_->dataChanged(model_->index(0, 0), model_->index(model_->columnCount() - 1, model_->rowCount() - 1));
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
case CDType::cdC: C.setFileName(Q2PIString(filename)); break;
|
||||
case CDType::cdM: M.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;
|
||||
case CDType::cdC: return C.inProgress(); break;
|
||||
case CDType::cdM: return M.inProgress(); break;
|
||||
default: break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void CDView::startX(double freq) {
|
||||
switch ((CDType::cdT)type_) {
|
||||
case CDType::cdX: X.start(freq); 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;
|
||||
case CDType::cdC: C.send(); break;
|
||||
case CDType::cdM: M.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;
|
||||
case CDType::cdC: C.request(); break;
|
||||
case CDType::cdM: M.request(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CDView::save() {
|
||||
switch ((CDType::cdT)type_) {
|
||||
case CDType::cdK: K.writeFile(); break;
|
||||
case CDType::cdX: X.writeFile(); break;
|
||||
case CDType::cdC: C.writeFile(); break;
|
||||
case CDType::cdM: M.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;
|
||||
case CDType::cdC:
|
||||
C.readFile();
|
||||
C.calculate();
|
||||
break;
|
||||
case CDType::cdM:
|
||||
M.readFile();
|
||||
M.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;
|
||||
case CDType::cdC: C.root() = CDSection(); break;
|
||||
case CDType::cdM: M.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;
|
||||
case CDType::cdC: C.update(&f, mode); break;
|
||||
case CDType::cdM: M.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;
|
||||
case CDType::cdC: C.calculate(); break;
|
||||
case CDType::cdM: M.calculate(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CDView::filter(const QString & f) {
|
||||
proxy_->setFilterRegExp(QRegExp(f, Qt::CaseInsensitive));
|
||||
}
|
||||
|
||||
|
||||
void CDView::indexClicked(const QModelIndex & i) {
|
||||
if (!model_ || !i.isValid() || type_ != CDType::cdC || i.column() != cName_Cmd) return;
|
||||
CDItem * item = model_->getItem(i);
|
||||
if (!item) return;
|
||||
if (item->itemType() != CDItem::ItemCDType) return;
|
||||
CDType & t(model_->interface->section(item->buildPath())[item->index()]);
|
||||
C.sendCommand(t);
|
||||
emit commandSended(PI2QString(t.pathString().join(".")));
|
||||
//piCout << t;
|
||||
qDebug() << PI2QString(t.pathString().join("."));
|
||||
}
|
||||
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
void CDView::cd_receivedX() {
|
||||
X.lock();
|
||||
PIVector<PIDeque<int> > xl = X.enabledList();
|
||||
//piCout << "X" << xl.size();
|
||||
piForeachC (PIDeque<int> & x, xl) {
|
||||
CDType & t(X[x]);
|
||||
//piCout << t;
|
||||
//piCout << t.path();
|
||||
if (t.cd_type() != CDType::cdX) continue;
|
||||
update(model_->indexByPath(t.path(), cValue));
|
||||
//piCout << CDCore::pathToString(t.path()) << t.toDouble() << "model";
|
||||
//qDebug() << "val" << model_->data(model_->indexByPath(t.path(), cValue), Qt::DisplayRole).toDouble();
|
||||
}
|
||||
X.unlock();
|
||||
emit receivedX();
|
||||
}
|
||||
|
||||
|
||||
void CDView::cd_changedGlobal() {
|
||||
emit changedGlobal();
|
||||
}
|
||||
|
||||
|
||||
void CDView::pi_cd_messageReceived(PIDeque<int> path, int type, PIString msg) {
|
||||
QMetaObject::invokeMethod(this, "messageReceived", Qt::QueuedConnection,
|
||||
Q_ARG(QString, PI2QString(CDCore::pathToString(path))),
|
||||
Q_ARG(int, type),
|
||||
Q_ARG(QString, PI2QString(msg)));
|
||||
}
|
||||
#include <QDir>
|
||||
#include <QMouseEvent>
|
||||
#include <QSortFilterProxyModel>
|
||||
#include "cdutils_k.h"
|
||||
#include "cdutils_x.h"
|
||||
#include "cdutils_c.h"
|
||||
#include "cdutils_m.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;
|
||||
proxy_ = 0;
|
||||
connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(indexClicked(QModelIndex)));
|
||||
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);
|
||||
connect(this, SIGNAL(_qcd_receivedX()), this, SLOT(cd_receivedX()), Qt::QueuedConnection);
|
||||
connect(this, SIGNAL(_qcd_changedGlobal()), this, SLOT(cd_changedGlobal()), Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
|
||||
CDView::~CDView() {
|
||||
if (model_) {
|
||||
delete model_;
|
||||
delete proxy_;
|
||||
}
|
||||
model_ = 0;
|
||||
proxy_ = 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);
|
||||
CONNECTU(&K, changedGlobal, this, pi_cd_changedGlobal);
|
||||
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);
|
||||
CONNECTU(&X, receivedX, this, pi_cd_receivedX);
|
||||
CONNECTU(&X, changedGlobal, this, pi_cd_changedGlobal);
|
||||
break;
|
||||
case CDType::cdC:
|
||||
CONNECTU(&C, sended, this, pi_cd_sendSucceed);
|
||||
CONNECTU(&C, sendFailed, this, pi_cd_sendFailed);
|
||||
CONNECTU(&C, received, this, pi_cd_receiveSucceed);
|
||||
CONNECTU(&C, receiveFailed, this, pi_cd_receiveFailed);
|
||||
CONNECTU(&C, changedGlobal, this, pi_cd_changedGlobal);
|
||||
break;
|
||||
case CDType::cdM:
|
||||
CONNECTU(&M, sended, this, pi_cd_sendSucceed);
|
||||
CONNECTU(&M, sendFailed, this, pi_cd_sendFailed);
|
||||
CONNECTU(&M, received, this, pi_cd_receiveSucceed);
|
||||
CONNECTU(&M, receiveFailed, this, pi_cd_receiveFailed);
|
||||
CONNECTU(&M, changedGlobal, this, pi_cd_changedGlobal);
|
||||
CONNECTU(&M, messageReceived, this, pi_cd_messageReceived);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void CDView::mousePressEvent(QMouseEvent * e) {
|
||||
if (type_ == CDType::cdC) {
|
||||
QModelIndex i = indexAt(e->pos());
|
||||
if (i.isValid() && i.column() == cName_Cmd)
|
||||
update(i);
|
||||
}
|
||||
QTreeView::mousePressEvent(e);
|
||||
}
|
||||
|
||||
|
||||
void CDView::mouseReleaseEvent(QMouseEvent * e) {
|
||||
if (type_ == CDType::cdC) {
|
||||
QModelIndex i = indexAt(e->pos());
|
||||
if (i.isValid() && i.column() == cName_Cmd)
|
||||
update(i);
|
||||
}
|
||||
QTreeView::mouseReleaseEvent(e);
|
||||
}
|
||||
|
||||
|
||||
void CDView::currentChanged(const QModelIndex & cur, const QModelIndex & prev) {
|
||||
if (type_ == CDType::cdC) {
|
||||
if (prev.isValid() && prev.column() == cName_Cmd)
|
||||
update(prev);
|
||||
}
|
||||
QTreeView::currentChanged(cur, prev);
|
||||
}
|
||||
|
||||
|
||||
void CDView::refresh() {
|
||||
if (type_ < 0) return;
|
||||
if (!model_) {
|
||||
model_ = new CDItemModel(type_);
|
||||
proxy_ = new QSortFilterProxyModel();
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
|
||||
proxy_->setRecursiveFilteringEnabled(true);
|
||||
#endif
|
||||
proxy_->setFilterKeyColumn(-1);
|
||||
proxy_->setFilterCaseSensitivity(Qt::CaseInsensitive);
|
||||
proxy_->setSourceModel(model_);
|
||||
setModel(proxy_);
|
||||
setItemDelegateForColumn(type_ == CDType::cdC ? cName_Cmd : cValue, new CDDelegate());
|
||||
if (type_ == CDType::cdX)
|
||||
setItemDelegateForColumn(cXMode, new CDDelegate());
|
||||
}
|
||||
model_->rebuildModel();
|
||||
switch ((CDType::cdT)type_) {
|
||||
case CDType::cdK:
|
||||
setColumnHidden(cXMode, true);
|
||||
setColumnHidden(cXAvg, true);
|
||||
break;
|
||||
case CDType::cdX:
|
||||
setColumnHidden(cExpression, true);
|
||||
break;
|
||||
case CDType::cdC:
|
||||
case CDType::cdM:
|
||||
setColumnHidden(cType, true);
|
||||
setColumnHidden(cXMode, true);
|
||||
setColumnHidden(cXAvg, true);
|
||||
setColumnHidden(cExpression, true);
|
||||
setColumnHidden(cValue, true);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
expandAll();
|
||||
for (int i = 0; i < model_->columnCount(); i++) resizeColumnToContents(i);
|
||||
}
|
||||
|
||||
|
||||
void CDView::refreshValues() {
|
||||
if (!model_) return;
|
||||
model_->dataChanged(model_->index(0, 0), model_->index(model_->columnCount() - 1, model_->rowCount() - 1));
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
case CDType::cdC: C.setFileName(Q2PIString(filename)); break;
|
||||
case CDType::cdM: M.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;
|
||||
case CDType::cdC: return C.inProgress(); break;
|
||||
case CDType::cdM: return M.inProgress(); break;
|
||||
default: break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void CDView::startX(double freq) {
|
||||
switch ((CDType::cdT)type_) {
|
||||
case CDType::cdX: X.start(freq); 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;
|
||||
case CDType::cdC: C.send(); break;
|
||||
case CDType::cdM: M.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;
|
||||
case CDType::cdC: C.request(); break;
|
||||
case CDType::cdM: M.request(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CDView::save() {
|
||||
switch ((CDType::cdT)type_) {
|
||||
case CDType::cdK: K.writeFile(); break;
|
||||
case CDType::cdX: X.writeFile(); break;
|
||||
case CDType::cdC: C.writeFile(); break;
|
||||
case CDType::cdM: M.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;
|
||||
case CDType::cdC:
|
||||
C.readFile();
|
||||
C.calculate();
|
||||
break;
|
||||
case CDType::cdM:
|
||||
M.readFile();
|
||||
M.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;
|
||||
case CDType::cdC: C.root() = CDSection(); break;
|
||||
case CDType::cdM: M.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;
|
||||
case CDType::cdC: C.update(&f, mode); break;
|
||||
case CDType::cdM: M.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;
|
||||
case CDType::cdC: C.calculate(); break;
|
||||
case CDType::cdM: M.calculate(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CDView::filter(const QString & f) {
|
||||
proxy_->setFilterRegExp(QRegExp(f, Qt::CaseInsensitive));
|
||||
}
|
||||
|
||||
|
||||
void CDView::indexClicked(const QModelIndex & i) {
|
||||
if (!model_ || !i.isValid() || type_ != CDType::cdC || i.column() != cName_Cmd) return;
|
||||
CDItem * item = model_->getItem(i);
|
||||
if (!item) return;
|
||||
if (item->itemType() != CDItem::ItemCDType) return;
|
||||
CDType & t(model_->interface->section(item->buildPath())[item->index()]);
|
||||
C.sendCommand(t);
|
||||
emit commandSended(PI2QString(t.pathString().join(".")));
|
||||
//piCout << t;
|
||||
qDebug() << PI2QString(t.pathString().join("."));
|
||||
}
|
||||
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
void CDView::cd_receivedX() {
|
||||
X.lock();
|
||||
PIVector<PIDeque<int> > xl = X.enabledList();
|
||||
//piCout << "X" << xl.size();
|
||||
piForeachC (PIDeque<int> & x, xl) {
|
||||
CDType & t(X[x]);
|
||||
//piCout << t;
|
||||
//piCout << t.path();
|
||||
if (t.cd_type() != CDType::cdX) continue;
|
||||
update(model_->indexByPath(t.path(), cValue));
|
||||
//piCout << CDCore::pathToString(t.path()) << t.toDouble() << "model";
|
||||
//qDebug() << "val" << model_->data(model_->indexByPath(t.path(), cValue), Qt::DisplayRole).toDouble();
|
||||
}
|
||||
X.unlock();
|
||||
emit receivedX();
|
||||
}
|
||||
|
||||
|
||||
void CDView::cd_changedGlobal() {
|
||||
emit changedGlobal();
|
||||
}
|
||||
|
||||
|
||||
void CDView::pi_cd_messageReceived(PIDeque<int> path, int type, PIString msg) {
|
||||
QMetaObject::invokeMethod(this, "messageReceived", Qt::QueuedConnection,
|
||||
Q_ARG(QString, PI2QString(CDCore::pathToString(path))),
|
||||
Q_ARG(int, type),
|
||||
Q_ARG(QString, PI2QString(msg)));
|
||||
}
|
||||
@@ -1,112 +1,112 @@
|
||||
/*
|
||||
QCD Utils - Qt bindings/utilites for CD Utils
|
||||
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef QCD_VIEW_H
|
||||
#define QCD_VIEW_H
|
||||
|
||||
#include "piobject.h"
|
||||
#include <QTreeView>
|
||||
|
||||
namespace CDUtils {
|
||||
class CDType;
|
||||
class CDSection;
|
||||
}
|
||||
|
||||
class CDItemModel;
|
||||
class QSortFilterProxyModel;
|
||||
|
||||
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 startX(double freq = 20.);
|
||||
CDUtils::CDSection * root();
|
||||
QString typeLetter() const;
|
||||
|
||||
CDItemModel * CDModel() {return model_;}
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent * );
|
||||
void mouseReleaseEvent(QMouseEvent * );
|
||||
void currentChanged(const QModelIndex & cur, const QModelIndex & prev);
|
||||
|
||||
public slots:
|
||||
void refresh();
|
||||
void refreshValues();
|
||||
void send();
|
||||
void receive();
|
||||
void save();
|
||||
void load();
|
||||
void clear();
|
||||
void buildFromHeader(const QString & description, int mode = 2);
|
||||
void calculate();
|
||||
void filter(const QString & f);
|
||||
|
||||
private slots:
|
||||
void indexClicked(const QModelIndex & i);
|
||||
void cd_sendFailed();
|
||||
void cd_sendSucceed();
|
||||
void cd_receiveFailed();
|
||||
void cd_receiveSucceed();
|
||||
void cd_receivedX();
|
||||
void cd_changedGlobal();
|
||||
|
||||
private:
|
||||
bool filterTree(const QModelIndex & ti, const QString & filter);
|
||||
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();}
|
||||
EVENT_HANDLER(void, pi_cd_receivedX) {emit _qcd_receivedX();}
|
||||
EVENT_HANDLER(void, pi_cd_changedGlobal) {emit _qcd_changedGlobal();}
|
||||
EVENT_HANDLER3(void, pi_cd_messageReceived, PIDeque<int>, path, int, type, PIString, msg);
|
||||
|
||||
CDItemModel * model_;
|
||||
QSortFilterProxyModel * proxy_;
|
||||
int type_;
|
||||
|
||||
signals:
|
||||
void sendFailed();
|
||||
void sendSucceed();
|
||||
void receiveFailed();
|
||||
void receiveSucceed();
|
||||
void receivedX();
|
||||
void changedGlobal();
|
||||
void messageStatus(QString msg);
|
||||
void commandSended(QString msg);
|
||||
void messageReceived(QString path, int type, QString msg);
|
||||
void busyStatusChanged(bool busy);
|
||||
|
||||
void _qcd_sendFailed(); // PRIVATE
|
||||
void _qcd_sendSucceed(); // PRIVATE
|
||||
void _qcd_receiveFailed(); // PRIVATE
|
||||
void _qcd_receiveSucceed(); // PRIVATE
|
||||
void _qcd_receivedX(); // PRIVATE
|
||||
void _qcd_changedGlobal(); // PRIVATE
|
||||
|
||||
};
|
||||
|
||||
#endif // QCD_VIEW_H
|
||||
/*
|
||||
QCD Utils - Qt bindings/utilites for CD Utils
|
||||
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef QCD_VIEW_H
|
||||
#define QCD_VIEW_H
|
||||
|
||||
#include "piobject.h"
|
||||
#include <QTreeView>
|
||||
|
||||
namespace CDUtils {
|
||||
class CDType;
|
||||
class CDSection;
|
||||
}
|
||||
|
||||
class CDItemModel;
|
||||
class QSortFilterProxyModel;
|
||||
|
||||
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 startX(double freq = 20.);
|
||||
CDUtils::CDSection * root();
|
||||
QString typeLetter() const;
|
||||
|
||||
CDItemModel * CDModel() {return model_;}
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent * );
|
||||
void mouseReleaseEvent(QMouseEvent * );
|
||||
void currentChanged(const QModelIndex & cur, const QModelIndex & prev);
|
||||
|
||||
public slots:
|
||||
void refresh();
|
||||
void refreshValues();
|
||||
void send();
|
||||
void receive();
|
||||
void save();
|
||||
void load();
|
||||
void clear();
|
||||
void buildFromHeader(const QString & description, int mode = 2);
|
||||
void calculate();
|
||||
void filter(const QString & f);
|
||||
|
||||
private slots:
|
||||
void indexClicked(const QModelIndex & i);
|
||||
void cd_sendFailed();
|
||||
void cd_sendSucceed();
|
||||
void cd_receiveFailed();
|
||||
void cd_receiveSucceed();
|
||||
void cd_receivedX();
|
||||
void cd_changedGlobal();
|
||||
|
||||
private:
|
||||
bool filterTree(const QModelIndex & ti, const QString & filter);
|
||||
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();}
|
||||
EVENT_HANDLER(void, pi_cd_receivedX) {emit _qcd_receivedX();}
|
||||
EVENT_HANDLER(void, pi_cd_changedGlobal) {emit _qcd_changedGlobal();}
|
||||
EVENT_HANDLER3(void, pi_cd_messageReceived, PIDeque<int>, path, int, type, PIString, msg);
|
||||
|
||||
CDItemModel * model_;
|
||||
QSortFilterProxyModel * proxy_;
|
||||
int type_;
|
||||
|
||||
signals:
|
||||
void sendFailed();
|
||||
void sendSucceed();
|
||||
void receiveFailed();
|
||||
void receiveSucceed();
|
||||
void receivedX();
|
||||
void changedGlobal();
|
||||
void messageStatus(QString msg);
|
||||
void commandSended(QString msg);
|
||||
void messageReceived(QString path, int type, QString msg);
|
||||
void busyStatusChanged(bool busy);
|
||||
|
||||
void _qcd_sendFailed(); // PRIVATE
|
||||
void _qcd_sendSucceed(); // PRIVATE
|
||||
void _qcd_receiveFailed(); // PRIVATE
|
||||
void _qcd_receiveSucceed(); // PRIVATE
|
||||
void _qcd_receivedX(); // PRIVATE
|
||||
void _qcd_changedGlobal(); // PRIVATE
|
||||
|
||||
};
|
||||
|
||||
#endif // QCD_VIEW_H
|
||||
9
piqt/libs/widgets/CMakeLists.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
include(PIPMacros)
|
||||
pip_code_model(CCM "${ROOT_DIR}/pip/libs/main/io_devices/piiodevice.h" "${ROOT_DIR}/pip/libs/main/io_utils/pipacketextractor.h" OPTIONS "-DPIP_EXPORT" "-Es")
|
||||
piqt_library(piqt_utils "Gui" "qad_utils;qad_widgets;qad_blockview;piqt" ${CCM})
|
||||
|
||||
foreach(_v ${_QT_VERSIONS_})
|
||||
if (LOCAL_FOUND${_v})
|
||||
add_dependencies(piqt_utils${_v} pip_cmg)
|
||||
endif()
|
||||
endforeach()
|
||||
1
piqt/utils/CMakeLists.txt
Normal file
@@ -0,0 +1 @@
|
||||
add_directories("piqt_")
|
||||
14
piqt/utils/cd_pult/CMakeLists.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
project(cd_pult)
|
||||
if(APPLE)
|
||||
set(APP_ICON "")
|
||||
elseif(WIN32)
|
||||
set(APP_ICON "")
|
||||
else()
|
||||
set(APP_ICON "")
|
||||
endif()
|
||||
set(APP_INFO "CD Pult")
|
||||
piqt_application(${PROJECT_NAME} "Gui;Widgets" "qad_utils;qad_widgets;qad_graphic;qad_application;qcd_utils;piqt_utils")
|
||||
if (Qt5_FOUND)
|
||||
import_version(${PROJ_NAME}5 ${PROJECT_NAME})
|
||||
deploy_target(${PROJECT_NAME}5 DEPLOY_DIR ${CMAKE_CURRENT_BINARY_DIR} DESTINATION ${ROOT_DIR}/release)
|
||||
endif()
|
||||
@@ -1,312 +1,312 @@
|
||||
#include "cddirectk.h"
|
||||
#include "ui_cddirectk_type_dialog.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "cdutils_k.h"
|
||||
#include "qcd_core.h"
|
||||
#include "qcd_model.h"
|
||||
#include "graphic.h"
|
||||
#include "piqt.h"
|
||||
#include "qvariantedit.h"
|
||||
#include <QFormLayout>
|
||||
#include <QMimeData>
|
||||
#include <QDragEnterEvent>
|
||||
#include <QDragMoveEvent>
|
||||
#include <QDropEvent>
|
||||
#include <QMainWindow>
|
||||
#include <QDockWidget>
|
||||
#include <QInputDialog>
|
||||
|
||||
using namespace CDUtils;
|
||||
|
||||
|
||||
KDockWidget::KDockWidget(QString title, QMainWindow * p): QDockWidget(title, p) {
|
||||
da = p;
|
||||
menu = new QMenu(this);
|
||||
QAction * a = new QAction(QIcon(":/icons/document-edit.png"), "Rename ...", this);
|
||||
connect(a, SIGNAL(triggered(bool)), this, SLOT(rename()));
|
||||
dactions << a;
|
||||
a = new QAction(QIcon(":/icons/edit-delete.png"), "Remove", this);
|
||||
connect(a, SIGNAL(triggered(bool)), this, SIGNAL(removeRequest()));
|
||||
dactions << a;
|
||||
menu_k = new QMenu(this);
|
||||
menu_k->setTitle(tr("Remove K"));
|
||||
lay = new QFormLayout();
|
||||
lay->setContentsMargins(0, qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin), 0, 0);
|
||||
lay->setLabelAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
||||
QWidget * w = new QWidget();
|
||||
w->setAcceptDrops(true);
|
||||
w->installEventFilter(this);
|
||||
w->setLayout(lay);
|
||||
setWidget(w);
|
||||
type_dialog = new CDDirectKTypeDialog();
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::addK(const CDType & t, CDDirectKTypeDialog::TypeInfo ti) {
|
||||
if (t.cd_type() != CDType::cdK) return;
|
||||
PIDeque<int> xp = t.path();
|
||||
if (k_list.contains(xp)) return;
|
||||
k_list << xp;
|
||||
info_list << ti;
|
||||
//piCout << "add" << xp;
|
||||
QWidget * ve = ti.create();
|
||||
//qDebug() << "add" << ve;
|
||||
lay->addRow(PI2QString(t.pathString().join(".")) + ":", ve);
|
||||
QCDCore::instance()->bindWidget(ve, t);
|
||||
//ve->setValue();
|
||||
}
|
||||
|
||||
|
||||
QByteArray KDockWidget::save() const {
|
||||
ChunkStream cs;
|
||||
cs.add(1, windowTitle())
|
||||
.add(2, getList(k_list))
|
||||
.add(3, info_list);
|
||||
return cs.data();
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::load(QByteArray ba) {
|
||||
clear();
|
||||
if (ba.isEmpty()) return;
|
||||
ChunkStream cs(ba);
|
||||
PIVector<PIDeque<int> > list;
|
||||
QVector<CDDirectKTypeDialog::TypeInfo> ilist;
|
||||
while (!cs.atEnd()) {
|
||||
switch (cs.read()) {
|
||||
case 1: setWindowTitle(cs.getData<QString>()); break;
|
||||
case 2: list = setList(cs.getData<QStringList>()); break;
|
||||
case 3: ilist = cs.getData<QVector<CDDirectKTypeDialog::TypeInfo> >(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
ilist.resize(list.size());
|
||||
for (int i = 0; i < list.size_s(); ++i) {
|
||||
addK(K[list[i]], ilist[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::clear() {
|
||||
while (lay->rowCount() > 0)
|
||||
removeRow(0);
|
||||
k_list.clear();
|
||||
info_list.clear();
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::changedGlobal() {
|
||||
//piCout << "changedGlobal ..." << k_list.size_s() << info_list.size() << lay->count() << lay->rowCount();
|
||||
for (int i = 0; i < k_list.size_s(); ++i) {
|
||||
//piCout << "update" << i << "0";
|
||||
if (!K.exists(k_list[i])) {
|
||||
k_list.remove(i);
|
||||
info_list.remove(i);
|
||||
removeRow(i);
|
||||
--i;
|
||||
continue;
|
||||
}
|
||||
//piCout << "update" << i << "1";
|
||||
QLabel * lbl = qobject_cast<QLabel*>(lay->itemAt(i, QFormLayout::LabelRole)->widget());
|
||||
//piCout << "update" << i << "2";
|
||||
if (lbl) lbl->setText(PI2QString(K[k_list[i]].pathString().join(".")) + ":");
|
||||
//piCout << "update" << i << "3";
|
||||
}
|
||||
//piCout << "changedGlobal ok";
|
||||
}
|
||||
|
||||
|
||||
bool KDockWidget::eventFilter(QObject * o, QEvent * e) {
|
||||
//if (o == graphic->viewport()) {
|
||||
switch (e->type()) {
|
||||
case QEvent::DragMove: {
|
||||
QDragMoveEvent * de = (QDragMoveEvent*)e;
|
||||
const QMimeData * mime = de->mimeData();
|
||||
if (!mime) break;
|
||||
if (!mime->text().startsWith("k")) break;
|
||||
de->setDropAction(Qt::CopyAction);
|
||||
de->accept();
|
||||
return true;
|
||||
} break;
|
||||
case QEvent::DragEnter: {
|
||||
QDragEnterEvent * de = (QDragEnterEvent*)e;
|
||||
const QMimeData * mime = de->mimeData();
|
||||
if (!mime) break;
|
||||
if (!mime->text().startsWith("k")) break;
|
||||
de->setDropAction(Qt::CopyAction);
|
||||
de->accept();
|
||||
return true;
|
||||
} break;
|
||||
case QEvent::Drop: {
|
||||
QDropEvent * de = (QDropEvent*)e;
|
||||
const QMimeData * mime = de->mimeData();
|
||||
if (!mime) break;
|
||||
//qDebug() << "drop" << mime->text();
|
||||
if (!mime->text().startsWith("k")) break;
|
||||
CDDirectKTypeDialog::TypeInfo ti;
|
||||
CDType & k(K[CDCore::stringToPath(Q2PIString(mime->text().mid(1)))]);
|
||||
if (k.type().left(1) == "n" || k.type().left(1) == "f") {
|
||||
if (type_dialog->exec() == QDialog::Accepted)
|
||||
ti = type_dialog->getType();
|
||||
else
|
||||
return true;
|
||||
}
|
||||
addK(k, ti);
|
||||
de->accept();
|
||||
return true;
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
//}
|
||||
return QWidget::eventFilter(o, e);
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::contextMenuEvent(QContextMenuEvent * e) {
|
||||
qDeleteAll(menu_k->actions());
|
||||
menu_k->clear();
|
||||
for (int i = 0; i < k_list.size_s(); ++i) {
|
||||
QAction * a = new QAction(PI2QString(K[k_list[i]].pathString().join(".")), this);
|
||||
a->setData(i);
|
||||
connect(a, SIGNAL(triggered(bool)), this, SLOT(removeK()));
|
||||
menu_k->addAction(a);
|
||||
}
|
||||
QMenu * mwm = da->createPopupMenu();
|
||||
menu->clear();
|
||||
menu->addActions(dactions);
|
||||
menu->addMenu(menu_k);
|
||||
menu->addSeparator();
|
||||
menu->addActions(mwm->actions());
|
||||
menu->popup(e->globalPos());
|
||||
mwm->deleteLater();
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::removeRow(int r) {
|
||||
if (r < 0 || r >= lay->rowCount()) return;
|
||||
#if QT_VERSION >= 0x050800
|
||||
QFormLayout::TakeRowResult rr = lay->takeRow(r);
|
||||
if (rr.fieldItem) {delete rr.fieldItem->widget(); delete rr.fieldItem;}
|
||||
if (rr.labelItem) {delete rr.labelItem->widget(); delete rr.labelItem;}
|
||||
#else
|
||||
piForTimes (2) {
|
||||
QLayoutItem * i = lay->itemAt(r+r);
|
||||
lay->removeItem(i);
|
||||
if (i) {delete i->widget(); delete i;}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::rename() {
|
||||
QString nn = QInputDialog::getText(this, tr("Rename area"), tr("New area name:"),
|
||||
QLineEdit::Normal, windowTitle());
|
||||
if (nn.isEmpty()) return;
|
||||
setWindowTitle(nn);
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::removeK() {
|
||||
QAction * a = qobject_cast<QAction * >(sender());
|
||||
if (!a) return;
|
||||
int ind = a->data().toInt();
|
||||
if (ind < 0 || ind >= k_list.size_s()) return;
|
||||
k_list.remove(ind);
|
||||
if (ind >= 0 && ind < info_list.size())
|
||||
info_list.remove(ind);
|
||||
removeRow(ind);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
CDDirectK::CDDirectK(QWidget * parent) : QWidget(parent), Ui::CDDirectK() {
|
||||
setupUi(this);
|
||||
da = new QMainWindow();
|
||||
da->setWindowFlags(frame->windowFlags());
|
||||
da->setDockNestingEnabled(true);
|
||||
layoutMain->addWidget(da);
|
||||
}
|
||||
|
||||
|
||||
CDDirectK::~CDDirectK() {
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::reset() {
|
||||
qDeleteAll(docks);
|
||||
docks.clear();
|
||||
}
|
||||
|
||||
|
||||
QByteArray CDDirectK::save() const {
|
||||
ChunkStream cs;
|
||||
QVector<QByteArray> dstates;
|
||||
foreach (KDockWidget * d, docks) {
|
||||
dstates << d->save();
|
||||
}
|
||||
cs.add(1, docks.size())
|
||||
.add(2, dstates)
|
||||
.add(3, da->saveState());
|
||||
return cs.data();
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::load(QByteArray ba) {
|
||||
reset();
|
||||
if (ba.isEmpty()) return;
|
||||
ChunkStream cs(ba);
|
||||
while (!cs.atEnd()) {
|
||||
switch (cs.read()) {
|
||||
case 1: {
|
||||
int s = cs.getData<int>();
|
||||
piForTimes (s)
|
||||
addArea();
|
||||
} break;
|
||||
case 2: {
|
||||
QVector<QByteArray> dstates = cs.getData<QVector<QByteArray> >();
|
||||
for (int i = 0; i < piMini(dstates.size(), docks.size()); ++i)
|
||||
docks[i]->load(dstates[i]);
|
||||
} break;
|
||||
case 3: da->restoreState(cs.getData<QByteArray>()); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::addArea() {
|
||||
KDockWidget * dw = new KDockWidget(QString("area %1").arg(docks.size()), da);
|
||||
connect(dw, SIGNAL(removeRequest()), this, SLOT(removeArea()));
|
||||
da->addDockWidget(Qt::RightDockWidgetArea, dw);
|
||||
docks << dw;
|
||||
for (int i = 0; i < docks.size(); ++i)
|
||||
docks[i]->setObjectName(QString("dock_%1").arg(i));
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::changedGlobal() {
|
||||
foreach (KDockWidget * d, docks)
|
||||
d->changedGlobal();
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::removeArea() {
|
||||
KDockWidget * d = qobject_cast<KDockWidget * >(sender());
|
||||
if (!d) return;
|
||||
docks.removeAll(d);
|
||||
d->deleteLater();
|
||||
for (int i = 0; i < docks.size(); ++i)
|
||||
docks[i]->setObjectName(QString("dock_%1").arg(i));
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::on_buttonAdd_clicked() {
|
||||
addArea();
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::on_buttonRemoveAll_clicked() {
|
||||
qDeleteAll(docks);
|
||||
docks.clear();
|
||||
}
|
||||
#include "cddirectk.h"
|
||||
#include "ui_cddirectk_type_dialog.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "cdutils_k.h"
|
||||
#include "qcd_core.h"
|
||||
#include "qcd_model.h"
|
||||
#include "graphic.h"
|
||||
#include "piqt.h"
|
||||
#include "qvariantedit.h"
|
||||
#include <QFormLayout>
|
||||
#include <QMimeData>
|
||||
#include <QDragEnterEvent>
|
||||
#include <QDragMoveEvent>
|
||||
#include <QDropEvent>
|
||||
#include <QMainWindow>
|
||||
#include <QDockWidget>
|
||||
#include <QInputDialog>
|
||||
|
||||
using namespace CDUtils;
|
||||
|
||||
|
||||
KDockWidget::KDockWidget(QString title, QMainWindow * p): QDockWidget(title, p) {
|
||||
da = p;
|
||||
menu = new QMenu(this);
|
||||
QAction * a = new QAction(QIcon(":/icons/document-edit.png"), "Rename ...", this);
|
||||
connect(a, SIGNAL(triggered(bool)), this, SLOT(rename()));
|
||||
dactions << a;
|
||||
a = new QAction(QIcon(":/icons/edit-delete.png"), "Remove", this);
|
||||
connect(a, SIGNAL(triggered(bool)), this, SIGNAL(removeRequest()));
|
||||
dactions << a;
|
||||
menu_k = new QMenu(this);
|
||||
menu_k->setTitle(tr("Remove K"));
|
||||
lay = new QFormLayout();
|
||||
lay->setContentsMargins(0, qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin), 0, 0);
|
||||
lay->setLabelAlignment(Qt::AlignRight | Qt::AlignVCenter);
|
||||
QWidget * w = new QWidget();
|
||||
w->setAcceptDrops(true);
|
||||
w->installEventFilter(this);
|
||||
w->setLayout(lay);
|
||||
setWidget(w);
|
||||
type_dialog = new CDDirectKTypeDialog();
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::addK(const CDType & t, CDDirectKTypeDialog::TypeInfo ti) {
|
||||
if (t.cd_type() != CDType::cdK) return;
|
||||
PIDeque<int> xp = t.path();
|
||||
if (k_list.contains(xp)) return;
|
||||
k_list << xp;
|
||||
info_list << ti;
|
||||
//piCout << "add" << xp;
|
||||
QWidget * ve = ti.create();
|
||||
//qDebug() << "add" << ve;
|
||||
lay->addRow(PI2QString(t.pathString().join(".")) + ":", ve);
|
||||
QCDCore::instance()->bindWidget(ve, t);
|
||||
//ve->setValue();
|
||||
}
|
||||
|
||||
|
||||
QByteArray KDockWidget::save() const {
|
||||
ChunkStream cs;
|
||||
cs.add(1, windowTitle())
|
||||
.add(2, getList(k_list))
|
||||
.add(3, info_list);
|
||||
return cs.data();
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::load(QByteArray ba) {
|
||||
clear();
|
||||
if (ba.isEmpty()) return;
|
||||
ChunkStream cs(ba);
|
||||
PIVector<PIDeque<int> > list;
|
||||
QVector<CDDirectKTypeDialog::TypeInfo> ilist;
|
||||
while (!cs.atEnd()) {
|
||||
switch (cs.read()) {
|
||||
case 1: setWindowTitle(cs.getData<QString>()); break;
|
||||
case 2: list = setList(cs.getData<QStringList>()); break;
|
||||
case 3: ilist = cs.getData<QVector<CDDirectKTypeDialog::TypeInfo> >(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
ilist.resize(list.size());
|
||||
for (int i = 0; i < list.size_s(); ++i) {
|
||||
addK(K[list[i]], ilist[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::clear() {
|
||||
while (lay->rowCount() > 0)
|
||||
removeRow(0);
|
||||
k_list.clear();
|
||||
info_list.clear();
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::changedGlobal() {
|
||||
//piCout << "changedGlobal ..." << k_list.size_s() << info_list.size() << lay->count() << lay->rowCount();
|
||||
for (int i = 0; i < k_list.size_s(); ++i) {
|
||||
//piCout << "update" << i << "0";
|
||||
if (!K.exists(k_list[i])) {
|
||||
k_list.remove(i);
|
||||
info_list.remove(i);
|
||||
removeRow(i);
|
||||
--i;
|
||||
continue;
|
||||
}
|
||||
//piCout << "update" << i << "1";
|
||||
QLabel * lbl = qobject_cast<QLabel*>(lay->itemAt(i, QFormLayout::LabelRole)->widget());
|
||||
//piCout << "update" << i << "2";
|
||||
if (lbl) lbl->setText(PI2QString(K[k_list[i]].pathString().join(".")) + ":");
|
||||
//piCout << "update" << i << "3";
|
||||
}
|
||||
//piCout << "changedGlobal ok";
|
||||
}
|
||||
|
||||
|
||||
bool KDockWidget::eventFilter(QObject * o, QEvent * e) {
|
||||
//if (o == graphic->viewport()) {
|
||||
switch (e->type()) {
|
||||
case QEvent::DragMove: {
|
||||
QDragMoveEvent * de = (QDragMoveEvent*)e;
|
||||
const QMimeData * mime = de->mimeData();
|
||||
if (!mime) break;
|
||||
if (!mime->text().startsWith("k")) break;
|
||||
de->setDropAction(Qt::CopyAction);
|
||||
de->accept();
|
||||
return true;
|
||||
} break;
|
||||
case QEvent::DragEnter: {
|
||||
QDragEnterEvent * de = (QDragEnterEvent*)e;
|
||||
const QMimeData * mime = de->mimeData();
|
||||
if (!mime) break;
|
||||
if (!mime->text().startsWith("k")) break;
|
||||
de->setDropAction(Qt::CopyAction);
|
||||
de->accept();
|
||||
return true;
|
||||
} break;
|
||||
case QEvent::Drop: {
|
||||
QDropEvent * de = (QDropEvent*)e;
|
||||
const QMimeData * mime = de->mimeData();
|
||||
if (!mime) break;
|
||||
//qDebug() << "drop" << mime->text();
|
||||
if (!mime->text().startsWith("k")) break;
|
||||
CDDirectKTypeDialog::TypeInfo ti;
|
||||
CDType & k(K[CDCore::stringToPath(Q2PIString(mime->text().mid(1)))]);
|
||||
if (k.type().left(1) == "n" || k.type().left(1) == "f") {
|
||||
if (type_dialog->exec() == QDialog::Accepted)
|
||||
ti = type_dialog->getType();
|
||||
else
|
||||
return true;
|
||||
}
|
||||
addK(k, ti);
|
||||
de->accept();
|
||||
return true;
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
//}
|
||||
return QWidget::eventFilter(o, e);
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::contextMenuEvent(QContextMenuEvent * e) {
|
||||
qDeleteAll(menu_k->actions());
|
||||
menu_k->clear();
|
||||
for (int i = 0; i < k_list.size_s(); ++i) {
|
||||
QAction * a = new QAction(PI2QString(K[k_list[i]].pathString().join(".")), this);
|
||||
a->setData(i);
|
||||
connect(a, SIGNAL(triggered(bool)), this, SLOT(removeK()));
|
||||
menu_k->addAction(a);
|
||||
}
|
||||
QMenu * mwm = da->createPopupMenu();
|
||||
menu->clear();
|
||||
menu->addActions(dactions);
|
||||
menu->addMenu(menu_k);
|
||||
menu->addSeparator();
|
||||
menu->addActions(mwm->actions());
|
||||
menu->popup(e->globalPos());
|
||||
mwm->deleteLater();
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::removeRow(int r) {
|
||||
if (r < 0 || r >= lay->rowCount()) return;
|
||||
#if QT_VERSION >= 0x050800
|
||||
QFormLayout::TakeRowResult rr = lay->takeRow(r);
|
||||
if (rr.fieldItem) {delete rr.fieldItem->widget(); delete rr.fieldItem;}
|
||||
if (rr.labelItem) {delete rr.labelItem->widget(); delete rr.labelItem;}
|
||||
#else
|
||||
piForTimes (2) {
|
||||
QLayoutItem * i = lay->itemAt(r+r);
|
||||
lay->removeItem(i);
|
||||
if (i) {delete i->widget(); delete i;}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::rename() {
|
||||
QString nn = QInputDialog::getText(this, tr("Rename area"), tr("New area name:"),
|
||||
QLineEdit::Normal, windowTitle());
|
||||
if (nn.isEmpty()) return;
|
||||
setWindowTitle(nn);
|
||||
}
|
||||
|
||||
|
||||
void KDockWidget::removeK() {
|
||||
QAction * a = qobject_cast<QAction * >(sender());
|
||||
if (!a) return;
|
||||
int ind = a->data().toInt();
|
||||
if (ind < 0 || ind >= k_list.size_s()) return;
|
||||
k_list.remove(ind);
|
||||
if (ind >= 0 && ind < info_list.size())
|
||||
info_list.remove(ind);
|
||||
removeRow(ind);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
CDDirectK::CDDirectK(QWidget * parent) : QWidget(parent), Ui::CDDirectK() {
|
||||
setupUi(this);
|
||||
da = new QMainWindow();
|
||||
da->setWindowFlags(frame->windowFlags());
|
||||
da->setDockNestingEnabled(true);
|
||||
layoutMain->addWidget(da);
|
||||
}
|
||||
|
||||
|
||||
CDDirectK::~CDDirectK() {
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::reset() {
|
||||
qDeleteAll(docks);
|
||||
docks.clear();
|
||||
}
|
||||
|
||||
|
||||
QByteArray CDDirectK::save() const {
|
||||
ChunkStream cs;
|
||||
QVector<QByteArray> dstates;
|
||||
foreach (KDockWidget * d, docks) {
|
||||
dstates << d->save();
|
||||
}
|
||||
cs.add(1, docks.size())
|
||||
.add(2, dstates)
|
||||
.add(3, da->saveState());
|
||||
return cs.data();
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::load(QByteArray ba) {
|
||||
reset();
|
||||
if (ba.isEmpty()) return;
|
||||
ChunkStream cs(ba);
|
||||
while (!cs.atEnd()) {
|
||||
switch (cs.read()) {
|
||||
case 1: {
|
||||
int s = cs.getData<int>();
|
||||
piForTimes (s)
|
||||
addArea();
|
||||
} break;
|
||||
case 2: {
|
||||
QVector<QByteArray> dstates = cs.getData<QVector<QByteArray> >();
|
||||
for (int i = 0; i < piMini(dstates.size(), docks.size()); ++i)
|
||||
docks[i]->load(dstates[i]);
|
||||
} break;
|
||||
case 3: da->restoreState(cs.getData<QByteArray>()); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::addArea() {
|
||||
KDockWidget * dw = new KDockWidget(QString("area %1").arg(docks.size()), da);
|
||||
connect(dw, SIGNAL(removeRequest()), this, SLOT(removeArea()));
|
||||
da->addDockWidget(Qt::RightDockWidgetArea, dw);
|
||||
docks << dw;
|
||||
for (int i = 0; i < docks.size(); ++i)
|
||||
docks[i]->setObjectName(QString("dock_%1").arg(i));
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::changedGlobal() {
|
||||
foreach (KDockWidget * d, docks)
|
||||
d->changedGlobal();
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::removeArea() {
|
||||
KDockWidget * d = qobject_cast<KDockWidget * >(sender());
|
||||
if (!d) return;
|
||||
docks.removeAll(d);
|
||||
d->deleteLater();
|
||||
for (int i = 0; i < docks.size(); ++i)
|
||||
docks[i]->setObjectName(QString("dock_%1").arg(i));
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::on_buttonAdd_clicked() {
|
||||
addArea();
|
||||
}
|
||||
|
||||
|
||||
void CDDirectK::on_buttonRemoveAll_clicked() {
|
||||
qDeleteAll(docks);
|
||||
docks.clear();
|
||||
}
|
||||
@@ -1,77 +1,77 @@
|
||||
#ifndef CDDIRECTK_H
|
||||
#define CDDIRECTK_H
|
||||
|
||||
#include "cdgraphics.h"
|
||||
#include "ui_cddirectk.h"
|
||||
#include "cddirectk_type_dialog.h"
|
||||
|
||||
class QFormLayout;
|
||||
|
||||
|
||||
class KDockWidget: public QDockWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
KDockWidget(QString title = QString(), QMainWindow * p = 0);
|
||||
|
||||
void addK(const CDUtils::CDType & t, CDDirectKTypeDialog::TypeInfo ti);
|
||||
QByteArray save() const;
|
||||
void load(QByteArray ba);
|
||||
void clear();
|
||||
void changedGlobal();
|
||||
|
||||
QFormLayout * lay;
|
||||
|
||||
private:
|
||||
bool eventFilter(QObject * o, QEvent * e);
|
||||
void contextMenuEvent(QContextMenuEvent * e);
|
||||
void removeRow(int r);
|
||||
|
||||
QMenu * menu, * menu_k;
|
||||
QList<QAction*> dactions;
|
||||
QMainWindow * da;
|
||||
CDDirectKTypeDialog * type_dialog;
|
||||
PIVector<PIDeque<int> > k_list;
|
||||
QVector<CDDirectKTypeDialog::TypeInfo> info_list;
|
||||
|
||||
private slots:
|
||||
void rename();
|
||||
void removeK();
|
||||
|
||||
signals:
|
||||
void removeRequest();
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
class CDDirectK: public QWidget, public Ui::CDDirectK
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit CDDirectK(QWidget *parent = 0);
|
||||
~CDDirectK();
|
||||
|
||||
void reset();
|
||||
QByteArray save() const;
|
||||
void load(QByteArray ba);
|
||||
|
||||
private:
|
||||
void addArea();
|
||||
|
||||
QList<KDockWidget * > docks;
|
||||
QMainWindow * da;
|
||||
|
||||
public slots:
|
||||
void changedGlobal();
|
||||
|
||||
private slots:
|
||||
void removeArea();
|
||||
void on_buttonAdd_clicked();
|
||||
void on_buttonRemoveAll_clicked();
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
#endif // CDDIRECTK_H
|
||||
#ifndef CDDIRECTK_H
|
||||
#define CDDIRECTK_H
|
||||
|
||||
#include "cdgraphics.h"
|
||||
#include "ui_cddirectk.h"
|
||||
#include "cddirectk_type_dialog.h"
|
||||
|
||||
class QFormLayout;
|
||||
|
||||
|
||||
class KDockWidget: public QDockWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
KDockWidget(QString title = QString(), QMainWindow * p = 0);
|
||||
|
||||
void addK(const CDUtils::CDType & t, CDDirectKTypeDialog::TypeInfo ti);
|
||||
QByteArray save() const;
|
||||
void load(QByteArray ba);
|
||||
void clear();
|
||||
void changedGlobal();
|
||||
|
||||
QFormLayout * lay;
|
||||
|
||||
private:
|
||||
bool eventFilter(QObject * o, QEvent * e);
|
||||
void contextMenuEvent(QContextMenuEvent * e);
|
||||
void removeRow(int r);
|
||||
|
||||
QMenu * menu, * menu_k;
|
||||
QList<QAction*> dactions;
|
||||
QMainWindow * da;
|
||||
CDDirectKTypeDialog * type_dialog;
|
||||
PIVector<PIDeque<int> > k_list;
|
||||
QVector<CDDirectKTypeDialog::TypeInfo> info_list;
|
||||
|
||||
private slots:
|
||||
void rename();
|
||||
void removeK();
|
||||
|
||||
signals:
|
||||
void removeRequest();
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
class CDDirectK: public QWidget, public Ui::CDDirectK
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit CDDirectK(QWidget *parent = 0);
|
||||
~CDDirectK();
|
||||
|
||||
void reset();
|
||||
QByteArray save() const;
|
||||
void load(QByteArray ba);
|
||||
|
||||
private:
|
||||
void addArea();
|
||||
|
||||
QList<KDockWidget * > docks;
|
||||
QMainWindow * da;
|
||||
|
||||
public slots:
|
||||
void changedGlobal();
|
||||
|
||||
private slots:
|
||||
void removeArea();
|
||||
void on_buttonAdd_clicked();
|
||||
void on_buttonRemoveAll_clicked();
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
#endif // CDDIRECTK_H
|
||||
@@ -1,85 +1,85 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CDDirectK</class>
|
||||
<widget class="QWidget" name="CDDirectK">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>624</width>
|
||||
<height>411</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CD Pult</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="layoutMain" stretch="0">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonAdd">
|
||||
<property name="toolTip">
|
||||
<string>Add new</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/list-add.png</normaloff>:/icons/list-add.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonRemoveAll">
|
||||
<property name="toolTip">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/edit-delete.png</normaloff>:/icons/edit-delete.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>1</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../qad/application/qad_application.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CDDirectK</class>
|
||||
<widget class="QWidget" name="CDDirectK">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>624</width>
|
||||
<height>411</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CD Pult</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="layoutMain" stretch="0">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonAdd">
|
||||
<property name="toolTip">
|
||||
<string>Add new</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/list-add.png</normaloff>:/icons/list-add.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonRemoveAll">
|
||||
<property name="toolTip">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/edit-delete.png</normaloff>:/icons/edit-delete.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>1</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../qad/application/qad_application.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -1,76 +1,76 @@
|
||||
#include "cddirectk_type_dialog.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "qcd_core.h"
|
||||
#include "qcd_model.h"
|
||||
#include "piqt.h"
|
||||
#include "spinslider.h"
|
||||
#include "qvariantedit.h"
|
||||
|
||||
|
||||
CDDirectKTypeDialog::CDDirectKTypeDialog(QWidget * parent) : QDialog(parent), Ui::CDDirectKTypeDialog() {
|
||||
setupUi(this);
|
||||
}
|
||||
|
||||
|
||||
CDDirectKTypeDialog::~CDDirectKTypeDialog() {
|
||||
}
|
||||
|
||||
|
||||
CDDirectKTypeDialog::TypeInfo CDDirectKTypeDialog::getType() const {
|
||||
if (!groupBox->isChecked()) return TypeInfo();
|
||||
TypeInfo ret;
|
||||
ret.type = comboType->currentIndex();
|
||||
ret.params_d[0] = evalMin->value();
|
||||
ret.params_d[1] = evalMax->value();
|
||||
ret.params_d[2] = spinDecimals->value();
|
||||
ret.params_d[3] = evalStep->value();
|
||||
ret.params_s[0] = linePrefix->text();
|
||||
ret.params_s[1] = lineSuffix->text();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
CDDirectKTypeDialog::TypeInfo::TypeInfo(int type_) {
|
||||
type = type_;
|
||||
params_d.resize(4);
|
||||
params_s.resize(2);
|
||||
}
|
||||
|
||||
|
||||
QWidget * CDDirectKTypeDialog::TypeInfo::create() {
|
||||
params_d.resize(4);
|
||||
params_s.resize(2);
|
||||
switch (type) {
|
||||
case 0: {
|
||||
QDoubleSpinBox * ret = new QDoubleSpinBox();
|
||||
ret->setMinimum(params_d[0]);
|
||||
ret->setMaximum(params_d[1]);
|
||||
ret->setDecimals(params_d[2]);
|
||||
ret->setSingleStep(params_d[3]);
|
||||
ret->setPrefix(params_s[0]);
|
||||
ret->setSuffix(params_s[1]);
|
||||
return ret;
|
||||
} break;
|
||||
case 1: {
|
||||
QSlider * ret = new QSlider(Qt::Horizontal);
|
||||
ret->setMinimum(params_d[0]);
|
||||
ret->setMaximum(params_d[1]);
|
||||
ret->setSingleStep(params_d[3]);
|
||||
return ret;
|
||||
} break;
|
||||
case 2: {
|
||||
SpinSlider * ret = new SpinSlider();
|
||||
ret->setMinimum(params_d[0]);
|
||||
ret->setMaximum(params_d[1]);
|
||||
ret->setDecimals(params_d[2]);
|
||||
ret->setSingleStep(params_d[3]);
|
||||
ret->setPrefix(params_s[0]);
|
||||
ret->setSuffix(params_s[1]);
|
||||
return ret;
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
return new QVariantEdit();
|
||||
}
|
||||
#include "cddirectk_type_dialog.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "qcd_core.h"
|
||||
#include "qcd_model.h"
|
||||
#include "piqt.h"
|
||||
#include "spinslider.h"
|
||||
#include "qvariantedit.h"
|
||||
|
||||
|
||||
CDDirectKTypeDialog::CDDirectKTypeDialog(QWidget * parent) : QDialog(parent), Ui::CDDirectKTypeDialog() {
|
||||
setupUi(this);
|
||||
}
|
||||
|
||||
|
||||
CDDirectKTypeDialog::~CDDirectKTypeDialog() {
|
||||
}
|
||||
|
||||
|
||||
CDDirectKTypeDialog::TypeInfo CDDirectKTypeDialog::getType() const {
|
||||
if (!groupBox->isChecked()) return TypeInfo();
|
||||
TypeInfo ret;
|
||||
ret.type = comboType->currentIndex();
|
||||
ret.params_d[0] = evalMin->value();
|
||||
ret.params_d[1] = evalMax->value();
|
||||
ret.params_d[2] = spinDecimals->value();
|
||||
ret.params_d[3] = evalStep->value();
|
||||
ret.params_s[0] = linePrefix->text();
|
||||
ret.params_s[1] = lineSuffix->text();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
CDDirectKTypeDialog::TypeInfo::TypeInfo(int type_) {
|
||||
type = type_;
|
||||
params_d.resize(4);
|
||||
params_s.resize(2);
|
||||
}
|
||||
|
||||
|
||||
QWidget * CDDirectKTypeDialog::TypeInfo::create() {
|
||||
params_d.resize(4);
|
||||
params_s.resize(2);
|
||||
switch (type) {
|
||||
case 0: {
|
||||
QDoubleSpinBox * ret = new QDoubleSpinBox();
|
||||
ret->setMinimum(params_d[0]);
|
||||
ret->setMaximum(params_d[1]);
|
||||
ret->setDecimals(params_d[2]);
|
||||
ret->setSingleStep(params_d[3]);
|
||||
ret->setPrefix(params_s[0]);
|
||||
ret->setSuffix(params_s[1]);
|
||||
return ret;
|
||||
} break;
|
||||
case 1: {
|
||||
QSlider * ret = new QSlider(Qt::Horizontal);
|
||||
ret->setMinimum(params_d[0]);
|
||||
ret->setMaximum(params_d[1]);
|
||||
ret->setSingleStep(params_d[3]);
|
||||
return ret;
|
||||
} break;
|
||||
case 2: {
|
||||
SpinSlider * ret = new SpinSlider();
|
||||
ret->setMinimum(params_d[0]);
|
||||
ret->setMaximum(params_d[1]);
|
||||
ret->setDecimals(params_d[2]);
|
||||
ret->setSingleStep(params_d[3]);
|
||||
ret->setPrefix(params_s[0]);
|
||||
ret->setSuffix(params_s[1]);
|
||||
return ret;
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
return new QVariantEdit();
|
||||
}
|
||||
@@ -1,44 +1,44 @@
|
||||
#ifndef CDDIRECTK_TYPE_DIALOG_H
|
||||
#define CDDIRECTK_TYPE_DIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include "ui_cddirectk_type_dialog.h"
|
||||
|
||||
|
||||
class CDDirectKTypeDialog: public QDialog, public Ui::CDDirectKTypeDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit CDDirectKTypeDialog(QWidget * parent = 0);
|
||||
~CDDirectKTypeDialog();
|
||||
|
||||
struct TypeInfo {
|
||||
TypeInfo(int type_ = -1);
|
||||
QWidget * create();
|
||||
int type;
|
||||
QVector<double> params_d;
|
||||
QVector<QString> params_s;
|
||||
};
|
||||
|
||||
TypeInfo getType() const;
|
||||
|
||||
private:
|
||||
|
||||
public slots:
|
||||
|
||||
private slots:
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
inline QDataStream & operator <<(QDataStream & s, const CDDirectKTypeDialog::TypeInfo & v) {
|
||||
s << v.type << v.params_d << v.params_s;
|
||||
return s;
|
||||
}
|
||||
inline QDataStream & operator >>(QDataStream & s, CDDirectKTypeDialog::TypeInfo & v) {
|
||||
s >> v.type >> v.params_d >> v.params_s;
|
||||
return s;
|
||||
}
|
||||
|
||||
#endif // CDDIRECTK_TYPE_DIALOG_H
|
||||
#ifndef CDDIRECTK_TYPE_DIALOG_H
|
||||
#define CDDIRECTK_TYPE_DIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include "ui_cddirectk_type_dialog.h"
|
||||
|
||||
|
||||
class CDDirectKTypeDialog: public QDialog, public Ui::CDDirectKTypeDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit CDDirectKTypeDialog(QWidget * parent = 0);
|
||||
~CDDirectKTypeDialog();
|
||||
|
||||
struct TypeInfo {
|
||||
TypeInfo(int type_ = -1);
|
||||
QWidget * create();
|
||||
int type;
|
||||
QVector<double> params_d;
|
||||
QVector<QString> params_s;
|
||||
};
|
||||
|
||||
TypeInfo getType() const;
|
||||
|
||||
private:
|
||||
|
||||
public slots:
|
||||
|
||||
private slots:
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
inline QDataStream & operator <<(QDataStream & s, const CDDirectKTypeDialog::TypeInfo & v) {
|
||||
s << v.type << v.params_d << v.params_s;
|
||||
return s;
|
||||
}
|
||||
inline QDataStream & operator >>(QDataStream & s, CDDirectKTypeDialog::TypeInfo & v) {
|
||||
s >> v.type >> v.params_d >> v.params_s;
|
||||
return s;
|
||||
}
|
||||
|
||||
#endif // CDDIRECTK_TYPE_DIALOG_H
|
||||
@@ -1,232 +1,232 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CDDirectKTypeDialog</class>
|
||||
<widget class="QDialog" name="CDDirectKTypeDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>275</width>
|
||||
<height>310</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CD Pult</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Custom</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||
</property>
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Type:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="comboType">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Spin</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Slider</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>SpinSlider</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Min:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="EvalSpinBox" name="evalMin"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Max:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="EvalSpinBox" name="evalMax">
|
||||
<property name="value">
|
||||
<double>100.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Decimals:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QSpinBox" name="spinDecimals"/>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Single step:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="EvalSpinBox" name="evalStep">
|
||||
<property name="value">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Prefix:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="CLineEdit" name="linePrefix"/>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Suffix:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="CLineEdit" name="lineSuffix"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>1</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>CLineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>clineedit.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>EvalSpinBox</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>evalspinbox.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>groupBox</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>widget</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>86</x>
|
||||
<y>49</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>94</x>
|
||||
<y>91</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>CDDirectKTypeDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>297</x>
|
||||
<y>285</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>315</x>
|
||||
<y>280</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>CDDirectKTypeDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>281</x>
|
||||
<y>290</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>283</x>
|
||||
<y>307</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CDDirectKTypeDialog</class>
|
||||
<widget class="QDialog" name="CDDirectKTypeDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>275</width>
|
||||
<height>310</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CD Pult</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Custom</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||
</property>
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Type:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="comboType">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Spin</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Slider</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>SpinSlider</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Min:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="EvalSpinBox" name="evalMin"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Max:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="EvalSpinBox" name="evalMax">
|
||||
<property name="value">
|
||||
<double>100.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Decimals:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QSpinBox" name="spinDecimals"/>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Single step:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="EvalSpinBox" name="evalStep">
|
||||
<property name="value">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Prefix:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="CLineEdit" name="linePrefix"/>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Suffix:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="CLineEdit" name="lineSuffix"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>1</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>CLineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>clineedit.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>EvalSpinBox</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>evalspinbox.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>groupBox</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>widget</receiver>
|
||||
<slot>setEnabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>86</x>
|
||||
<y>49</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>94</x>
|
||||
<y>91</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>CDDirectKTypeDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>297</x>
|
||||
<y>285</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>315</x>
|
||||
<y>280</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>CDDirectKTypeDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>281</x>
|
||||
<y>290</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>283</x>
|
||||
<y>307</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -1,354 +1,354 @@
|
||||
#include "cdgraphics.h"
|
||||
//#include "ui_qcd_graphic.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "cdutils_x.h"
|
||||
#include "qcd_core.h"
|
||||
#include "qcd_model.h"
|
||||
#include "qcd_graphic.h"
|
||||
#include "graphic.h"
|
||||
#include "piqt.h"
|
||||
#include <QMimeData>
|
||||
#include <QDragEnterEvent>
|
||||
#include <QDragMoveEvent>
|
||||
#include <QDropEvent>
|
||||
#include <QMainWindow>
|
||||
#include <QDockWidget>
|
||||
#include <QInputDialog>
|
||||
|
||||
using namespace CDUtils;
|
||||
|
||||
|
||||
QStringList CDUtils::getList(const PIVector<PIDeque<int> > & x_list) {
|
||||
QStringList ret;
|
||||
piForeachC (PIDeque<int> & p, x_list)
|
||||
ret << PI2QString(CDCore::pathToString(p));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
PIVector<PIDeque<int> > CDUtils::setList(const QStringList & l) {
|
||||
PIVector<PIDeque<int> > ret;
|
||||
foreach (QString s, l)
|
||||
ret << CDCore::stringToPath(Q2PIString(s));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
GDockWidget::GDockWidget(QString title, QMainWindow * p): QDockWidget(title, p) {
|
||||
da = p;
|
||||
menu = new QMenu(this);
|
||||
QAction * a = new QAction(QIcon(":/icons/document-edit.png"), "Rename ...", this);
|
||||
connect(a, SIGNAL(triggered(bool)), this, SLOT(rename()));
|
||||
dactions << a;
|
||||
a = new QAction(QIcon(":/icons/edit-delete.png"), "Remove", this);
|
||||
connect(a, SIGNAL(triggered(bool)), this, SIGNAL(removeRequest()));
|
||||
dactions << a;
|
||||
menu_x = new QMenu(this);
|
||||
menu_x->setTitle(tr("Remove X"));
|
||||
graphic = new CDGraphicWidget();
|
||||
graphic->graphic()->viewport()->setAcceptDrops(true);
|
||||
graphic->graphic()->viewport()->installEventFilter(this);
|
||||
setWidget(graphic);
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::addX(const CDType & t) {
|
||||
if (t.cd_type() != CDType::cdX) return;
|
||||
PIDeque<int> xp = t.path();
|
||||
if (x_list.contains(xp)) return;
|
||||
x_list << xp;
|
||||
int gind = graphic->graphic()->graphicsCount();
|
||||
graphic->graphic()->setGraphicsCount(gind + 1);
|
||||
graphic->graphic()->setGraphicName(PI2QString(t.pathString().join(".")), gind);
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::drawX(const PIMap<PIString, PIVector<double> > & data) {
|
||||
for (int i = 0; i < x_list.size_s(); ++i) {
|
||||
PIString sp = CDCore::pathToString(x_list[i]);
|
||||
const PIVector<double> & ch(data[sp]);
|
||||
for (int j = 0; j < ch.size_s(); ++j)
|
||||
graphic->graphic()->addPoint(ch[j], i, false);
|
||||
}
|
||||
graphic->graphic()->updateGraphics();
|
||||
}
|
||||
|
||||
|
||||
QByteArray GDockWidget::save() const {
|
||||
ChunkStream cs;
|
||||
cs.add(1, windowTitle())
|
||||
.add(2, getList(x_list))
|
||||
.add(3, graphic->graphic()->save())
|
||||
.add(4, graphic->evalSpinBoxHistory()->expression())
|
||||
.add(5, graphic->evalSpinBoxVisible()->expression());
|
||||
return cs.data();
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::load(QByteArray ba) {
|
||||
if (ba.isEmpty()) return;
|
||||
ChunkStream cs(ba);
|
||||
while (!cs.atEnd()) {
|
||||
switch (cs.read()) {
|
||||
case 1: setWindowTitle(cs.getData<QString>()); break;
|
||||
case 2: x_list = setList(cs.getData<QStringList>()); break;
|
||||
case 3: graphic->graphic()->load(cs.getData<QByteArray>()); break;
|
||||
case 4: graphic->evalSpinBoxHistory()->setExpression(cs.getData<QString>()); break;
|
||||
case 5: graphic->evalSpinBoxVisible()->setExpression(cs.getData<QString>()); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::changedGlobal() {
|
||||
for (int i = 0; i < x_list.size_s(); ++i) {
|
||||
if (!X.exists(x_list[i])) {
|
||||
x_list.remove(i);
|
||||
graphic->graphic()->removeGraphic(i);
|
||||
--i;
|
||||
continue;
|
||||
}
|
||||
graphic->graphic()->setGraphicName(PI2QString(X[x_list[i]].pathString().join(".")), i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool GDockWidget::eventFilter(QObject * o, QEvent * e) {
|
||||
//if (o == graphic->viewport()) {
|
||||
switch (e->type()) {
|
||||
case QEvent::DragMove: {
|
||||
QDragMoveEvent * de = (QDragMoveEvent*)e;
|
||||
const QMimeData * mime = de->mimeData();
|
||||
//qDebug() << "enter" << mime;
|
||||
if (!mime) break;
|
||||
if (!mime->text().startsWith("x")) break;
|
||||
de->setDropAction(Qt::CopyAction);
|
||||
de->accept();
|
||||
return true;
|
||||
} break;
|
||||
case QEvent::DragEnter: {
|
||||
QDragEnterEvent * de = (QDragEnterEvent*)e;
|
||||
const QMimeData * mime = de->mimeData();
|
||||
//qDebug() << "enter" << mime;
|
||||
if (!mime) break;
|
||||
if (!mime->text().startsWith("x")) break;
|
||||
de->setDropAction(Qt::CopyAction);
|
||||
de->accept();
|
||||
return true;
|
||||
} break;
|
||||
case QEvent::Drop: {
|
||||
QDropEvent * de = (QDropEvent*)e;
|
||||
const QMimeData * mime = de->mimeData();
|
||||
if (!mime) break;
|
||||
//qDebug() << "drop" << mime->text();
|
||||
if (!mime->text().startsWith("x")) break;
|
||||
addX(X[CDCore::stringToPath(Q2PIString(mime->text().mid(1)))]);
|
||||
de->accept();
|
||||
return true;
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
//}
|
||||
return QWidget::eventFilter(o, e);
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::contextMenuEvent(QContextMenuEvent * e) {
|
||||
if (graphic->graphic()->underMouse()) return;
|
||||
qDeleteAll(menu_x->actions());
|
||||
menu_x->clear();
|
||||
for (int i = 0; i < graphic->graphic()->graphicsCount(); ++i) {
|
||||
QPixmap icon(da->iconSize());
|
||||
icon.fill(graphic->graphic()->graphic(i).pen.color());
|
||||
QAction * a = new QAction(QIcon(icon), graphic->graphic()->graphic(i).name, this);
|
||||
a->setData(i);
|
||||
connect(a, SIGNAL(triggered(bool)), this, SLOT(removeX()));
|
||||
menu_x->addAction(a);
|
||||
}
|
||||
QMenu * mwm = da->createPopupMenu();
|
||||
menu->clear();
|
||||
menu->addActions(dactions);
|
||||
menu->addMenu(menu_x);
|
||||
menu->addSeparator();
|
||||
menu->addActions(mwm->actions());
|
||||
menu->popup(e->globalPos());
|
||||
mwm->deleteLater();
|
||||
}
|
||||
|
||||
|
||||
CDGraphicWidget * GDockWidget::viewportGraphic(QObject * o) const {
|
||||
if (!o) return 0;
|
||||
while (!qobject_cast<CDGraphicWidget*>(o) && o)
|
||||
o = o->parent();
|
||||
return qobject_cast<CDGraphicWidget*>(o);
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::rename() {
|
||||
QString nn = QInputDialog::getText(this, tr("Rename area"), tr("New area name:"),
|
||||
QLineEdit::Normal, windowTitle());
|
||||
if (nn.isEmpty()) return;
|
||||
setWindowTitle(nn);
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::removeX() {
|
||||
QAction * a = qobject_cast<QAction * >(sender());
|
||||
if (!a) return;
|
||||
int ind = a->data().toInt();
|
||||
if (ind < 0 || ind >= x_list.size_s()) return;
|
||||
x_list.remove(ind);
|
||||
graphic->graphic()->removeGraphic(ind);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
CDGraphics::CDGraphics(QWidget * parent) : QWidget(parent), Ui::CDGraphics() {
|
||||
setupUi(this);
|
||||
da = new QMainWindow();
|
||||
da->setWindowFlags(frame->windowFlags());
|
||||
da->setDockNestingEnabled(true);
|
||||
layoutMain->addWidget(da);
|
||||
}
|
||||
|
||||
|
||||
CDGraphics::~CDGraphics() {
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::reset() {
|
||||
qDeleteAll(docks);
|
||||
docks.clear();
|
||||
}
|
||||
|
||||
|
||||
QByteArray CDGraphics::save() const {
|
||||
ChunkStream cs;
|
||||
QVector<QByteArray> dstates;
|
||||
foreach (GDockWidget * d, docks) {
|
||||
dstates << d->save();
|
||||
}
|
||||
cs.add(1, docks.size())
|
||||
.add(2, dstates)
|
||||
.add(3, da->saveState());
|
||||
X.lock();
|
||||
cs.add(4, getList(X.enabledList()));
|
||||
X.unlock();
|
||||
cs.add(5, buttonConfigVisible->isChecked());
|
||||
return cs.data();
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::load(QByteArray ba) {
|
||||
reset();
|
||||
if (ba.isEmpty()) return;
|
||||
ChunkStream cs(ba);
|
||||
while (!cs.atEnd()) {
|
||||
switch (cs.read()) {
|
||||
case 1: {
|
||||
int s = cs.getData<int>();
|
||||
piForTimes (s)
|
||||
addGraphic();
|
||||
} break;
|
||||
case 2: {
|
||||
QVector<QByteArray> dstates = cs.getData<QVector<QByteArray> >();
|
||||
for (int i = 0; i < piMini(dstates.size(), docks.size()); ++i)
|
||||
docks[i]->load(dstates[i]);
|
||||
} break;
|
||||
case 3: da->restoreState(cs.getData<QByteArray>()); break;
|
||||
case 4:
|
||||
X.lock();
|
||||
X.setEnabledList(setList(cs.getData<QStringList>()));
|
||||
X.unlock();
|
||||
break;
|
||||
case 5:
|
||||
buttonConfigVisible->setChecked(cs.getData<bool>());
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
GDockWidget * CDGraphics::graphicDock(Graphic * o) const {
|
||||
if (!o) return 0;
|
||||
foreach (GDockWidget * d, docks)
|
||||
if (d->widget() == o)
|
||||
return d;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::addGraphic() {
|
||||
GDockWidget * dw = new GDockWidget(QString("area %1").arg(docks.size()), da);
|
||||
connect(dw, SIGNAL(removeRequest()), this, SLOT(removeGraphic()));
|
||||
connect(buttonConfigVisible, SIGNAL(toggled(bool)), dw->graphic, SLOT(setConfigVisible(bool)));
|
||||
connect(buttonLegendVisible, SIGNAL(clicked(bool)), dw->graphic->graphic(), SLOT(setLegendVisible(bool)));
|
||||
connect(buttonBorderInputsVisible, SIGNAL(clicked(bool)), dw->graphic->graphic(), SLOT(setBorderInputsVisible(bool)));
|
||||
connect(buttonPause, SIGNAL(clicked(bool)), dw->graphic->graphic(), SLOT(setPaused(bool)));
|
||||
dw->graphic->setConfigVisible(buttonConfigVisible->isChecked());
|
||||
dw->graphic->graphic()->setLegendVisible(buttonLegendVisible->isChecked());
|
||||
dw->graphic->graphic()->setBorderInputsVisible(buttonBorderInputsVisible->isChecked());
|
||||
da->addDockWidget(Qt::RightDockWidgetArea, dw);
|
||||
docks << dw;
|
||||
for (int i = 0; i < docks.size(); ++i)
|
||||
docks[i]->setObjectName(QString("dock_%1").arg(i));
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::receivedX() {
|
||||
PIMap<PIString, PIVector<double> > data;
|
||||
X.lock();
|
||||
PIVector<PIDeque<int> > x_list = X.enabledList();
|
||||
PIVector<double> ch;
|
||||
piForeachC (PIDeque<int> & p, x_list) {
|
||||
CDType & t(X[p]);
|
||||
if (t.xmode_rec() == CDType::X_Current)
|
||||
ch.resize(1).fill(t.toDouble());
|
||||
else
|
||||
ch = t.history;
|
||||
t.history.clear();
|
||||
data[CDCore::pathToString(t.path())] = ch;
|
||||
}
|
||||
//piCout << data;
|
||||
X.unlock();
|
||||
foreach (GDockWidget * d, docks)
|
||||
d->drawX(data);
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::changedGlobal() {
|
||||
foreach (GDockWidget * d, docks)
|
||||
d->changedGlobal();
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::removeGraphic() {
|
||||
GDockWidget * d = qobject_cast<GDockWidget * >(sender());
|
||||
if (!d) return;
|
||||
docks.removeAll(d);
|
||||
d->deleteLater();
|
||||
for (int i = 0; i < docks.size(); ++i)
|
||||
docks[i]->setObjectName(QString("dock_%1").arg(i));
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::on_buttonAdd_clicked() {
|
||||
addGraphic();
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::on_buttonClear_clicked() {
|
||||
foreach (GDockWidget * d, docks)
|
||||
d->graphic->graphic()->clear();
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::on_buttonRemoveAll_clicked() {
|
||||
qDeleteAll(docks);
|
||||
docks.clear();
|
||||
}
|
||||
#include "cdgraphics.h"
|
||||
//#include "ui_qcd_graphic.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "cdutils_x.h"
|
||||
#include "qcd_core.h"
|
||||
#include "qcd_model.h"
|
||||
#include "qcd_graphic.h"
|
||||
#include "graphic.h"
|
||||
#include "piqt.h"
|
||||
#include <QMimeData>
|
||||
#include <QDragEnterEvent>
|
||||
#include <QDragMoveEvent>
|
||||
#include <QDropEvent>
|
||||
#include <QMainWindow>
|
||||
#include <QDockWidget>
|
||||
#include <QInputDialog>
|
||||
|
||||
using namespace CDUtils;
|
||||
|
||||
|
||||
QStringList CDUtils::getList(const PIVector<PIDeque<int> > & x_list) {
|
||||
QStringList ret;
|
||||
piForeachC (PIDeque<int> & p, x_list)
|
||||
ret << PI2QString(CDCore::pathToString(p));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
PIVector<PIDeque<int> > CDUtils::setList(const QStringList & l) {
|
||||
PIVector<PIDeque<int> > ret;
|
||||
foreach (QString s, l)
|
||||
ret << CDCore::stringToPath(Q2PIString(s));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
GDockWidget::GDockWidget(QString title, QMainWindow * p): QDockWidget(title, p) {
|
||||
da = p;
|
||||
menu = new QMenu(this);
|
||||
QAction * a = new QAction(QIcon(":/icons/document-edit.png"), "Rename ...", this);
|
||||
connect(a, SIGNAL(triggered(bool)), this, SLOT(rename()));
|
||||
dactions << a;
|
||||
a = new QAction(QIcon(":/icons/edit-delete.png"), "Remove", this);
|
||||
connect(a, SIGNAL(triggered(bool)), this, SIGNAL(removeRequest()));
|
||||
dactions << a;
|
||||
menu_x = new QMenu(this);
|
||||
menu_x->setTitle(tr("Remove X"));
|
||||
graphic = new CDGraphicWidget();
|
||||
graphic->graphic()->viewport()->setAcceptDrops(true);
|
||||
graphic->graphic()->viewport()->installEventFilter(this);
|
||||
setWidget(graphic);
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::addX(const CDType & t) {
|
||||
if (t.cd_type() != CDType::cdX) return;
|
||||
PIDeque<int> xp = t.path();
|
||||
if (x_list.contains(xp)) return;
|
||||
x_list << xp;
|
||||
int gind = graphic->graphic()->graphicsCount();
|
||||
graphic->graphic()->setGraphicsCount(gind + 1);
|
||||
graphic->graphic()->setGraphicName(PI2QString(t.pathString().join(".")), gind);
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::drawX(const PIMap<PIString, PIVector<double> > & data) {
|
||||
for (int i = 0; i < x_list.size_s(); ++i) {
|
||||
PIString sp = CDCore::pathToString(x_list[i]);
|
||||
const PIVector<double> & ch(data[sp]);
|
||||
for (int j = 0; j < ch.size_s(); ++j)
|
||||
graphic->graphic()->addPoint(ch[j], i, false);
|
||||
}
|
||||
graphic->graphic()->updateGraphics();
|
||||
}
|
||||
|
||||
|
||||
QByteArray GDockWidget::save() const {
|
||||
ChunkStream cs;
|
||||
cs.add(1, windowTitle())
|
||||
.add(2, getList(x_list))
|
||||
.add(3, graphic->graphic()->save())
|
||||
.add(4, graphic->evalSpinBoxHistory()->expression())
|
||||
.add(5, graphic->evalSpinBoxVisible()->expression());
|
||||
return cs.data();
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::load(QByteArray ba) {
|
||||
if (ba.isEmpty()) return;
|
||||
ChunkStream cs(ba);
|
||||
while (!cs.atEnd()) {
|
||||
switch (cs.read()) {
|
||||
case 1: setWindowTitle(cs.getData<QString>()); break;
|
||||
case 2: x_list = setList(cs.getData<QStringList>()); break;
|
||||
case 3: graphic->graphic()->load(cs.getData<QByteArray>()); break;
|
||||
case 4: graphic->evalSpinBoxHistory()->setExpression(cs.getData<QString>()); break;
|
||||
case 5: graphic->evalSpinBoxVisible()->setExpression(cs.getData<QString>()); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::changedGlobal() {
|
||||
for (int i = 0; i < x_list.size_s(); ++i) {
|
||||
if (!X.exists(x_list[i])) {
|
||||
x_list.remove(i);
|
||||
graphic->graphic()->removeGraphic(i);
|
||||
--i;
|
||||
continue;
|
||||
}
|
||||
graphic->graphic()->setGraphicName(PI2QString(X[x_list[i]].pathString().join(".")), i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool GDockWidget::eventFilter(QObject * o, QEvent * e) {
|
||||
//if (o == graphic->viewport()) {
|
||||
switch (e->type()) {
|
||||
case QEvent::DragMove: {
|
||||
QDragMoveEvent * de = (QDragMoveEvent*)e;
|
||||
const QMimeData * mime = de->mimeData();
|
||||
//qDebug() << "enter" << mime;
|
||||
if (!mime) break;
|
||||
if (!mime->text().startsWith("x")) break;
|
||||
de->setDropAction(Qt::CopyAction);
|
||||
de->accept();
|
||||
return true;
|
||||
} break;
|
||||
case QEvent::DragEnter: {
|
||||
QDragEnterEvent * de = (QDragEnterEvent*)e;
|
||||
const QMimeData * mime = de->mimeData();
|
||||
//qDebug() << "enter" << mime;
|
||||
if (!mime) break;
|
||||
if (!mime->text().startsWith("x")) break;
|
||||
de->setDropAction(Qt::CopyAction);
|
||||
de->accept();
|
||||
return true;
|
||||
} break;
|
||||
case QEvent::Drop: {
|
||||
QDropEvent * de = (QDropEvent*)e;
|
||||
const QMimeData * mime = de->mimeData();
|
||||
if (!mime) break;
|
||||
//qDebug() << "drop" << mime->text();
|
||||
if (!mime->text().startsWith("x")) break;
|
||||
addX(X[CDCore::stringToPath(Q2PIString(mime->text().mid(1)))]);
|
||||
de->accept();
|
||||
return true;
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
//}
|
||||
return QWidget::eventFilter(o, e);
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::contextMenuEvent(QContextMenuEvent * e) {
|
||||
if (graphic->graphic()->underMouse()) return;
|
||||
qDeleteAll(menu_x->actions());
|
||||
menu_x->clear();
|
||||
for (int i = 0; i < graphic->graphic()->graphicsCount(); ++i) {
|
||||
QPixmap icon(da->iconSize());
|
||||
icon.fill(graphic->graphic()->graphic(i).pen.color());
|
||||
QAction * a = new QAction(QIcon(icon), graphic->graphic()->graphic(i).name, this);
|
||||
a->setData(i);
|
||||
connect(a, SIGNAL(triggered(bool)), this, SLOT(removeX()));
|
||||
menu_x->addAction(a);
|
||||
}
|
||||
QMenu * mwm = da->createPopupMenu();
|
||||
menu->clear();
|
||||
menu->addActions(dactions);
|
||||
menu->addMenu(menu_x);
|
||||
menu->addSeparator();
|
||||
menu->addActions(mwm->actions());
|
||||
menu->popup(e->globalPos());
|
||||
mwm->deleteLater();
|
||||
}
|
||||
|
||||
|
||||
CDGraphicWidget * GDockWidget::viewportGraphic(QObject * o) const {
|
||||
if (!o) return 0;
|
||||
while (!qobject_cast<CDGraphicWidget*>(o) && o)
|
||||
o = o->parent();
|
||||
return qobject_cast<CDGraphicWidget*>(o);
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::rename() {
|
||||
QString nn = QInputDialog::getText(this, tr("Rename area"), tr("New area name:"),
|
||||
QLineEdit::Normal, windowTitle());
|
||||
if (nn.isEmpty()) return;
|
||||
setWindowTitle(nn);
|
||||
}
|
||||
|
||||
|
||||
void GDockWidget::removeX() {
|
||||
QAction * a = qobject_cast<QAction * >(sender());
|
||||
if (!a) return;
|
||||
int ind = a->data().toInt();
|
||||
if (ind < 0 || ind >= x_list.size_s()) return;
|
||||
x_list.remove(ind);
|
||||
graphic->graphic()->removeGraphic(ind);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
CDGraphics::CDGraphics(QWidget * parent) : QWidget(parent), Ui::CDGraphics() {
|
||||
setupUi(this);
|
||||
da = new QMainWindow();
|
||||
da->setWindowFlags(frame->windowFlags());
|
||||
da->setDockNestingEnabled(true);
|
||||
layoutMain->addWidget(da);
|
||||
}
|
||||
|
||||
|
||||
CDGraphics::~CDGraphics() {
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::reset() {
|
||||
qDeleteAll(docks);
|
||||
docks.clear();
|
||||
}
|
||||
|
||||
|
||||
QByteArray CDGraphics::save() const {
|
||||
ChunkStream cs;
|
||||
QVector<QByteArray> dstates;
|
||||
foreach (GDockWidget * d, docks) {
|
||||
dstates << d->save();
|
||||
}
|
||||
cs.add(1, docks.size())
|
||||
.add(2, dstates)
|
||||
.add(3, da->saveState());
|
||||
X.lock();
|
||||
cs.add(4, getList(X.enabledList()));
|
||||
X.unlock();
|
||||
cs.add(5, buttonConfigVisible->isChecked());
|
||||
return cs.data();
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::load(QByteArray ba) {
|
||||
reset();
|
||||
if (ba.isEmpty()) return;
|
||||
ChunkStream cs(ba);
|
||||
while (!cs.atEnd()) {
|
||||
switch (cs.read()) {
|
||||
case 1: {
|
||||
int s = cs.getData<int>();
|
||||
piForTimes (s)
|
||||
addGraphic();
|
||||
} break;
|
||||
case 2: {
|
||||
QVector<QByteArray> dstates = cs.getData<QVector<QByteArray> >();
|
||||
for (int i = 0; i < piMini(dstates.size(), docks.size()); ++i)
|
||||
docks[i]->load(dstates[i]);
|
||||
} break;
|
||||
case 3: da->restoreState(cs.getData<QByteArray>()); break;
|
||||
case 4:
|
||||
X.lock();
|
||||
X.setEnabledList(setList(cs.getData<QStringList>()));
|
||||
X.unlock();
|
||||
break;
|
||||
case 5:
|
||||
buttonConfigVisible->setChecked(cs.getData<bool>());
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
GDockWidget * CDGraphics::graphicDock(Graphic * o) const {
|
||||
if (!o) return 0;
|
||||
foreach (GDockWidget * d, docks)
|
||||
if (d->widget() == o)
|
||||
return d;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::addGraphic() {
|
||||
GDockWidget * dw = new GDockWidget(QString("area %1").arg(docks.size()), da);
|
||||
connect(dw, SIGNAL(removeRequest()), this, SLOT(removeGraphic()));
|
||||
connect(buttonConfigVisible, SIGNAL(toggled(bool)), dw->graphic, SLOT(setConfigVisible(bool)));
|
||||
connect(buttonLegendVisible, SIGNAL(clicked(bool)), dw->graphic->graphic(), SLOT(setLegendVisible(bool)));
|
||||
connect(buttonBorderInputsVisible, SIGNAL(clicked(bool)), dw->graphic->graphic(), SLOT(setBorderInputsVisible(bool)));
|
||||
connect(buttonPause, SIGNAL(clicked(bool)), dw->graphic->graphic(), SLOT(setPaused(bool)));
|
||||
dw->graphic->setConfigVisible(buttonConfigVisible->isChecked());
|
||||
dw->graphic->graphic()->setLegendVisible(buttonLegendVisible->isChecked());
|
||||
dw->graphic->graphic()->setBorderInputsVisible(buttonBorderInputsVisible->isChecked());
|
||||
da->addDockWidget(Qt::RightDockWidgetArea, dw);
|
||||
docks << dw;
|
||||
for (int i = 0; i < docks.size(); ++i)
|
||||
docks[i]->setObjectName(QString("dock_%1").arg(i));
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::receivedX() {
|
||||
PIMap<PIString, PIVector<double> > data;
|
||||
X.lock();
|
||||
PIVector<PIDeque<int> > x_list = X.enabledList();
|
||||
PIVector<double> ch;
|
||||
piForeachC (PIDeque<int> & p, x_list) {
|
||||
CDType & t(X[p]);
|
||||
if (t.xmode_rec() == CDType::X_Current)
|
||||
ch.resize(1).fill(t.toDouble());
|
||||
else
|
||||
ch = t.history;
|
||||
t.history.clear();
|
||||
data[CDCore::pathToString(t.path())] = ch;
|
||||
}
|
||||
//piCout << data;
|
||||
X.unlock();
|
||||
foreach (GDockWidget * d, docks)
|
||||
d->drawX(data);
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::changedGlobal() {
|
||||
foreach (GDockWidget * d, docks)
|
||||
d->changedGlobal();
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::removeGraphic() {
|
||||
GDockWidget * d = qobject_cast<GDockWidget * >(sender());
|
||||
if (!d) return;
|
||||
docks.removeAll(d);
|
||||
d->deleteLater();
|
||||
for (int i = 0; i < docks.size(); ++i)
|
||||
docks[i]->setObjectName(QString("dock_%1").arg(i));
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::on_buttonAdd_clicked() {
|
||||
addGraphic();
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::on_buttonClear_clicked() {
|
||||
foreach (GDockWidget * d, docks)
|
||||
d->graphic->graphic()->clear();
|
||||
}
|
||||
|
||||
|
||||
void CDGraphics::on_buttonRemoveAll_clicked() {
|
||||
qDeleteAll(docks);
|
||||
docks.clear();
|
||||
}
|
||||
@@ -1,92 +1,92 @@
|
||||
#ifndef CDGRAPHICS_H
|
||||
#define CDGRAPHICS_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QDockWidget>
|
||||
#include <QMenu>
|
||||
#include "ui_cdgraphics.h"
|
||||
#include "qcd_graphic.h"
|
||||
#include <pistring.h>
|
||||
|
||||
namespace CDUtils {
|
||||
class CDType;
|
||||
class CDSection;
|
||||
QStringList getList(const PIVector<PIDeque<int> > & x_list);
|
||||
PIVector<PIDeque<int> > setList(const QStringList & l);
|
||||
}
|
||||
|
||||
class QMainWindow;
|
||||
class Graphic;
|
||||
|
||||
|
||||
|
||||
|
||||
class GDockWidget: public QDockWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
GDockWidget(QString title = QString(), QMainWindow * p = 0);
|
||||
|
||||
void addX(const CDUtils::CDType & t);
|
||||
void drawX(const PIMap<PIString, PIVector<double> > & data);
|
||||
QByteArray save() const;
|
||||
void load(QByteArray ba);
|
||||
void changedGlobal();
|
||||
|
||||
CDGraphicWidget * graphic;
|
||||
|
||||
private:
|
||||
bool eventFilter(QObject * o, QEvent * e);
|
||||
void contextMenuEvent(QContextMenuEvent * e);
|
||||
CDGraphicWidget * viewportGraphic(QObject * o) const;
|
||||
|
||||
QMenu * menu, * menu_x;
|
||||
QList<QAction*> dactions;
|
||||
QMainWindow * da;
|
||||
PIVector<PIDeque<int> > x_list;
|
||||
|
||||
private slots:
|
||||
void rename();
|
||||
void removeX();
|
||||
|
||||
signals:
|
||||
void removeRequest();
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
class CDGraphics : public QWidget, public Ui::CDGraphics
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit CDGraphics(QWidget *parent = 0);
|
||||
~CDGraphics();
|
||||
|
||||
void reset();
|
||||
QByteArray save() const;
|
||||
void load(QByteArray ba);
|
||||
|
||||
private:
|
||||
GDockWidget * graphicDock(Graphic * o) const;
|
||||
void addXToGraphic(const QString & xp, Graphic * g);
|
||||
void addGraphic();
|
||||
|
||||
QList<GDockWidget * > docks;
|
||||
QMainWindow * da;
|
||||
|
||||
public slots:
|
||||
void receivedX();
|
||||
void changedGlobal();
|
||||
|
||||
private slots:
|
||||
void removeGraphic();
|
||||
void on_buttonAdd_clicked();
|
||||
void on_buttonClear_clicked();
|
||||
void on_buttonRemoveAll_clicked();
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
#endif // CDGRAPHICS_H
|
||||
#ifndef CDGRAPHICS_H
|
||||
#define CDGRAPHICS_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QDockWidget>
|
||||
#include <QMenu>
|
||||
#include "ui_cdgraphics.h"
|
||||
#include "qcd_graphic.h"
|
||||
#include <pistring.h>
|
||||
|
||||
namespace CDUtils {
|
||||
class CDType;
|
||||
class CDSection;
|
||||
QStringList getList(const PIVector<PIDeque<int> > & x_list);
|
||||
PIVector<PIDeque<int> > setList(const QStringList & l);
|
||||
}
|
||||
|
||||
class QMainWindow;
|
||||
class Graphic;
|
||||
|
||||
|
||||
|
||||
|
||||
class GDockWidget: public QDockWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
GDockWidget(QString title = QString(), QMainWindow * p = 0);
|
||||
|
||||
void addX(const CDUtils::CDType & t);
|
||||
void drawX(const PIMap<PIString, PIVector<double> > & data);
|
||||
QByteArray save() const;
|
||||
void load(QByteArray ba);
|
||||
void changedGlobal();
|
||||
|
||||
CDGraphicWidget * graphic;
|
||||
|
||||
private:
|
||||
bool eventFilter(QObject * o, QEvent * e);
|
||||
void contextMenuEvent(QContextMenuEvent * e);
|
||||
CDGraphicWidget * viewportGraphic(QObject * o) const;
|
||||
|
||||
QMenu * menu, * menu_x;
|
||||
QList<QAction*> dactions;
|
||||
QMainWindow * da;
|
||||
PIVector<PIDeque<int> > x_list;
|
||||
|
||||
private slots:
|
||||
void rename();
|
||||
void removeX();
|
||||
|
||||
signals:
|
||||
void removeRequest();
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
class CDGraphics : public QWidget, public Ui::CDGraphics
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit CDGraphics(QWidget *parent = 0);
|
||||
~CDGraphics();
|
||||
|
||||
void reset();
|
||||
QByteArray save() const;
|
||||
void load(QByteArray ba);
|
||||
|
||||
private:
|
||||
GDockWidget * graphicDock(Graphic * o) const;
|
||||
void addXToGraphic(const QString & xp, Graphic * g);
|
||||
void addGraphic();
|
||||
|
||||
QList<GDockWidget * > docks;
|
||||
QMainWindow * da;
|
||||
|
||||
public slots:
|
||||
void receivedX();
|
||||
void changedGlobal();
|
||||
|
||||
private slots:
|
||||
void removeGraphic();
|
||||
void on_buttonAdd_clicked();
|
||||
void on_buttonClear_clicked();
|
||||
void on_buttonRemoveAll_clicked();
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
#endif // CDGRAPHICS_H
|
||||
@@ -1,168 +1,168 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CDGraphics</class>
|
||||
<widget class="QWidget" name="CDGraphics">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>624</width>
|
||||
<height>411</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CD Pult</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="layoutMain" stretch="0">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonAdd">
|
||||
<property name="toolTip">
|
||||
<string>Add new</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/utils/qad_utils.qrc">
|
||||
<normaloff>:/icons/list-add.png</normaloff>:/icons/list-add.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonClear">
|
||||
<property name="toolTip">
|
||||
<string>Clear all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/utils/qad_utils.qrc">
|
||||
<normaloff>:/icons/edit-clear.png</normaloff>:/icons/edit-clear.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonRemoveAll">
|
||||
<property name="toolTip">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/utils/qad_utils.qrc">
|
||||
<normaloff>:/icons/edit-delete.png</normaloff>:/icons/edit-delete.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonConfigVisible">
|
||||
<property name="toolTip">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/layer-visible-off.png</normaloff>
|
||||
<normalon>:/icons/layer-visible-on.png</normalon>:/icons/layer-visible-off.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonLegendVisible">
|
||||
<property name="toolTip">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/widgets/qad_widgets.qrc">
|
||||
<normaloff>:/icons/legend.png</normaloff>:/icons/legend.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonPause">
|
||||
<property name="toolTip">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/graphic/qad_graphic.qrc">
|
||||
<normaloff>:/icons/media-playback-pause.png</normaloff>:/icons/media-playback-pause.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonBorderInputsVisible">
|
||||
<property name="toolTip">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/widgets/qad_widgets.qrc">
|
||||
<normaloff>:/icons/border-line.png</normaloff>:/icons/border-line.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>1</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../qad/utils/qad_utils.qrc"/>
|
||||
<include location="../../qad/widgets/qad_widgets.qrc"/>
|
||||
<include location="../../qad/application/qad_application.qrc"/>
|
||||
<include location="../../qad/graphic/qad_graphic.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CDGraphics</class>
|
||||
<widget class="QWidget" name="CDGraphics">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>624</width>
|
||||
<height>411</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CD Pult</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="layoutMain" stretch="0">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonAdd">
|
||||
<property name="toolTip">
|
||||
<string>Add new</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/utils/qad_utils.qrc">
|
||||
<normaloff>:/icons/list-add.png</normaloff>:/icons/list-add.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonClear">
|
||||
<property name="toolTip">
|
||||
<string>Clear all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/utils/qad_utils.qrc">
|
||||
<normaloff>:/icons/edit-clear.png</normaloff>:/icons/edit-clear.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonRemoveAll">
|
||||
<property name="toolTip">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/utils/qad_utils.qrc">
|
||||
<normaloff>:/icons/edit-delete.png</normaloff>:/icons/edit-delete.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonConfigVisible">
|
||||
<property name="toolTip">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/layer-visible-off.png</normaloff>
|
||||
<normalon>:/icons/layer-visible-on.png</normalon>:/icons/layer-visible-off.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonLegendVisible">
|
||||
<property name="toolTip">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/widgets/qad_widgets.qrc">
|
||||
<normaloff>:/icons/legend.png</normaloff>:/icons/legend.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonPause">
|
||||
<property name="toolTip">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/graphic/qad_graphic.qrc">
|
||||
<normaloff>:/icons/media-playback-pause.png</normaloff>:/icons/media-playback-pause.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="buttonBorderInputsVisible">
|
||||
<property name="toolTip">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/widgets/qad_widgets.qrc">
|
||||
<normaloff>:/icons/border-line.png</normaloff>:/icons/border-line.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>1</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../qad/utils/qad_utils.qrc"/>
|
||||
<include location="../../qad/widgets/qad_widgets.qrc"/>
|
||||
<include location="../../qad/application/qad_application.qrc"/>
|
||||
<include location="../../qad/graphic/qad_graphic.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
16
piqt/utils/cd_pult/cdpult.qrc
Normal file
@@ -0,0 +1,16 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>../../../qad/icons/dialog-information.png</file>
|
||||
<file>../../../qad/icons/dialog-cancel.png</file>
|
||||
<file>../../../qad/icons/dialog-ok-apply.png</file>
|
||||
<file>../../../qad/icons/document-revert.png</file>
|
||||
<file>../../../qad/icons/view-refresh.png</file>
|
||||
<file>../../../qad/icons/format-stroke-color.png</file>
|
||||
<file>icons/db-export.png</file>
|
||||
<file>icons/db-import.png</file>
|
||||
<file>icons/timer.png</file>
|
||||
<file>icons/flame.png</file>
|
||||
<file>icons/Apps-accessories-calculator-icon.png</file>
|
||||
<file>icons/accessories-text-editor.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
@@ -1,292 +1,292 @@
|
||||
#include "edockwidget.h"
|
||||
#include "cdpultwindow.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "cdutils_k.h"
|
||||
#include "cdutils_x.h"
|
||||
#include "cdutils_m.h"
|
||||
#include "qcd_core.h"
|
||||
#include "qcd_view.h"
|
||||
#include "qcd_model.h"
|
||||
#include "qcd_modedialog.h"
|
||||
#include "chunkstream.h"
|
||||
#include "qvariantedit.h"
|
||||
#include "piqt.h"
|
||||
#include "piqt_highlighter.h"
|
||||
#include "qcodeedit.h"
|
||||
#include <QFileDialog>
|
||||
#include <QScrollBar>
|
||||
#include <QImageReader>
|
||||
#include <QMessageBox>
|
||||
|
||||
using namespace CDUtils;
|
||||
|
||||
|
||||
CDPultWindow::CDPultWindow(QWidget *parent) : EMainWindow(parent), Ui::CDPultWindow() {
|
||||
setupUi(this);
|
||||
centralWidget()->hide();
|
||||
setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::North);
|
||||
CDCore::instance()->initPult();
|
||||
def_config = codeConfig->text();
|
||||
checkDefaultConfig->setChecked(true);
|
||||
new ConfigHighlighter(codeConfig->document());
|
||||
widgetK->setType(CDUtils::CDType::cdK);
|
||||
widgetX->setType(CDUtils::CDType::cdX);
|
||||
widgetC->setType(CDUtils::CDType::cdC);
|
||||
widgetM->setType(CDUtils::CDType::cdM);
|
||||
editFileK->setValue(QVariant::fromValue(QAD::File("", "*.dat")));
|
||||
editFileX->setValue(QVariant::fromValue(QAD::File("", "*.dat")));
|
||||
editFileC->setValue(QVariant::fromValue(QAD::File("", "*.dat")));
|
||||
editFileM->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(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)));
|
||||
connect(widgetC, SIGNAL(addToLog(CDViewWidget::LogIcon,QString)), this, SLOT(addToLog(CDViewWidget::LogIcon,QString)));
|
||||
connect(widgetM, SIGNAL(addToLog(CDViewWidget::LogIcon,QString)), this, SLOT(addToLog(CDViewWidget::LogIcon,QString)));
|
||||
connect(widgetK->view, SIGNAL(changedGlobal()), widgetDirectK, SLOT(changedGlobal()));
|
||||
connect(widgetX->view, SIGNAL(changedGlobal()), widgetGraphics, SLOT(changedGlobal()));
|
||||
connect(widgetX->view, SIGNAL(receivedX()), widgetGraphics, SLOT(receivedX()));
|
||||
connect(widgetM->view, SIGNAL(messageReceived(QString,int,QString)), this, SLOT(messageReceived(QString,int,QString)));
|
||||
QCDCore::instance()->bindWidget(widgetK->view);
|
||||
QCDCore::instance()->setDirectKEnabled(true);
|
||||
X.start();
|
||||
if (windowState() == Qt::WindowMinimized)
|
||||
setWindowState(Qt::WindowNoState);
|
||||
}
|
||||
|
||||
|
||||
CDPultWindow::~CDPultWindow() {
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::loadFile(const QString & fp) {
|
||||
load(fp);
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::apply(bool sessions) {
|
||||
CDCore::instance()->stop();
|
||||
widgetK->setFile(editFileK->value().value<QAD::File>().file);
|
||||
widgetX->setFile(editFileX->value().value<QAD::File>().file);
|
||||
widgetC->setFile(editFileC->value().value<QAD::File>().file);
|
||||
widgetM->setFile(editFileM->value().value<QAD::File>().file);
|
||||
if (checkDefaultConfig->isChecked())
|
||||
CDCore::instance()->initPult();
|
||||
else
|
||||
CDCore::instance()->init(Q2PIString(codeConfig->text()), true);
|
||||
widgetX->view->startX();
|
||||
if (sessions) {
|
||||
widgetGraphics->load(session_gr);
|
||||
widgetDirectK->load(session_dk);
|
||||
if (!session_mw.isEmpty())
|
||||
restoreState(session_mw);
|
||||
X.lock();
|
||||
PIVector<PIDeque<int> > x_list = X.enabledList();
|
||||
X.unlock();
|
||||
piForeachC (PIDeque<int> & p, x_list)
|
||||
X.enable(X[p]);
|
||||
((CDItemModel*)widgetX->view->model())->updateModel();
|
||||
widgetX->view->expandAll();
|
||||
}
|
||||
dockCDKView->setVisible(checkHasK->isChecked());
|
||||
dockCDXView->setVisible(checkHasX->isChecked());
|
||||
dockCDCView->setVisible(checkHasC->isChecked());
|
||||
dockCDMView->setVisible(checkHasM->isChecked());
|
||||
QMetaObject::invokeMethod(this, "changedDock", Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::closeEvent(QCloseEvent *e) {
|
||||
EMainWindow::closeEvent(e);
|
||||
if (!e->isAccepted())
|
||||
return;
|
||||
QApplication::closeAllWindows();
|
||||
session.save();
|
||||
session.setFile(QString());
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::reset(bool full) {
|
||||
setWindowTitle(QString("CD Pult"));
|
||||
widgetK->reset();
|
||||
setChanged(false);
|
||||
}
|
||||
|
||||
|
||||
bool CDPultWindow::load(const QString & path) {
|
||||
qApp->setOverrideCursor(Qt::WaitCursor);
|
||||
QPIConfig conf(path, QIODevice::ReadOnly);
|
||||
QAD::File f = editFileK->value().value<QAD::File>();
|
||||
checkSyncFiles->setChecked(false);
|
||||
editFileK->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_k").toString(), f.filter)));
|
||||
editFileX->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_x").toString(), f.filter)));
|
||||
editFileC->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_c").toString(), f.filter)));
|
||||
editFileM->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_m").toString(), f.filter)));
|
||||
checkSyncFiles->setChecked(conf.getValue("sync_files").toBool());
|
||||
lineSessionName->setText(conf.getValue("session_name").toString());
|
||||
last_icon = conf.getValue("icon_path").toString();
|
||||
setAppIcon(conf.getValue("icon").toByteArray());
|
||||
checkHasK->setChecked(conf.getValue("has_k").toBool());
|
||||
checkHasX->setChecked(conf.getValue("has_x").toBool());
|
||||
checkHasC->setChecked(conf.getValue("has_c").toBool());
|
||||
checkHasM->setChecked(conf.getValue("has_m").toBool());
|
||||
checkDefaultConfig->setChecked(conf.getValue("default_config").toBool());
|
||||
codeConfig->setText(QByteArray2QString(conf.getValue("config").toByteArray()));
|
||||
if (codeConfig->text().isEmpty())
|
||||
codeConfig->setText(def_config);
|
||||
session_gr = conf.getValue("session_gr").toByteArray();
|
||||
session_dk = conf.getValue("session_dk").toByteArray();
|
||||
session_mw = conf.getValue("session_mw").toByteArray();
|
||||
setChanged(false);
|
||||
file_name = path;
|
||||
apply(true);
|
||||
qApp->restoreOverrideCursor();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool CDPultWindow::save(const QString & path) {
|
||||
session_gr = widgetGraphics->save();
|
||||
session_dk = widgetDirectK->save();
|
||||
session_mw = saveState();
|
||||
QPIConfig conf(path, QIODevice::ReadWrite);
|
||||
conf.clear();
|
||||
conf.setValue("file_k", editFileK->value().value<QAD::File>().file);
|
||||
conf.setValue("file_x", editFileX->value().value<QAD::File>().file);
|
||||
conf.setValue("file_c", editFileC->value().value<QAD::File>().file);
|
||||
conf.setValue("file_m", editFileM->value().value<QAD::File>().file);
|
||||
conf.setValue("sync_files", checkSyncFiles->isChecked());
|
||||
conf.setValue("session_name", lineSessionName->text());
|
||||
conf.setValue("icon_path", last_icon);
|
||||
conf.setValue("icon", appIcon());
|
||||
conf.setValue("has_k", checkHasK->isChecked());
|
||||
conf.setValue("has_x", checkHasX->isChecked());
|
||||
conf.setValue("has_c", checkHasC->isChecked());
|
||||
conf.setValue("has_m", checkHasM->isChecked());
|
||||
conf.setValue("default_config", checkDefaultConfig->isChecked());
|
||||
conf.setValue("config", QString2QByteArray(codeConfig->text()));
|
||||
conf.setValue("session_gr", session_gr);
|
||||
conf.setValue("session_dk", session_dk);
|
||||
conf.setValue("session_mw", session_mw);
|
||||
file_name = path;
|
||||
return true;
|
||||
|
||||
//widgetK->setFile(path);
|
||||
//widgetK->save();
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::loadingSession(QPIConfig & conf) {
|
||||
setRecentFiles(conf.getValue("recent files").toStringList());
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::savingSession(QPIConfig & conf) {
|
||||
conf.setValue("recent files", recentFiles());
|
||||
}
|
||||
|
||||
|
||||
QByteArray CDPultWindow::appIcon() const {
|
||||
QByteArray ret;
|
||||
if (icon.isNull()) return ret;
|
||||
QBuffer buff(&ret);
|
||||
buff.open(QIODevice::WriteOnly);
|
||||
icon.save(&buff, "png");
|
||||
//qDebug() << "s" << ret.size();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::setAppIcon(QByteArray ba) {
|
||||
if (ba.isEmpty()) {
|
||||
icon = QImage();
|
||||
setWindowIcon(QIcon());
|
||||
return;
|
||||
}
|
||||
//qDebug() << "l" << ba.size();
|
||||
icon = QImage::fromData(ba);
|
||||
setWindowIcon(QIcon(QPixmap::fromImage(icon)));
|
||||
//qDebug() << QApplication::windowIcon().availableSizes();
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::addToLog(CDViewWidget::LogIcon icon, const QString & msg) {
|
||||
QListWidgetItem * ni = new QListWidgetItem(log_icons[icon], "(" + QTime::currentTime().toString() + ") " + msg);
|
||||
bool s = listLog->verticalScrollBar()->value() == listLog->verticalScrollBar()->maximum();
|
||||
listLog->addItem(ni);
|
||||
if (s) listLog->scrollToBottom();
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::messageReceived(QString path, int type, QString msg) {
|
||||
MessageType mt = (MessageType)type;
|
||||
const CDType & t(M.root()[CDCore::stringToPath(Q2PIString(path))]);
|
||||
if (t.cd_type() != CDType::cdM) return;
|
||||
if (mt == MessageBox)
|
||||
QMessageBox::information(this, windowTitle(), QString("[%1]\n%2").arg(PI2QString(t.name()), msg));
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::on_editFileK_valueChanged(const QVariant & p) {
|
||||
if (!checkSyncFiles->isChecked()) return;
|
||||
QFileInfo fi(p.value<QAD::File>().file);
|
||||
if (fi.path().isEmpty()) return;
|
||||
QString n = fi.baseName();
|
||||
QString xn(n), cn(n), mn(n);
|
||||
if (n.contains("k")) {
|
||||
xn.replace(n.indexOf("k"), 1, "x");
|
||||
cn.replace(n.indexOf("k"), 1, "c");
|
||||
mn.replace(n.indexOf("k"), 1, "m");
|
||||
} else {
|
||||
xn += "_x";
|
||||
cn += "_c";
|
||||
mn += "_m";
|
||||
}
|
||||
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<QAD::File>();
|
||||
f.file = dir + xn + dot + ext; editFileX->setValue(QVariant::fromValue(f));
|
||||
f.file = dir + cn + dot + ext; editFileC->setValue(QVariant::fromValue(f));
|
||||
f.file = dir + mn + dot + ext; editFileM->setValue(QVariant::fromValue(f));
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::on_buttonSessionApply_clicked() {
|
||||
apply(false);
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::on_lineSessionName_textChanged(const QString & t) {
|
||||
setWindowTitle(QString("CD Pult - %1").arg(t));
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::on_buttonIcon_clicked() {
|
||||
QList<QByteArray> ifl = QImageReader::supportedImageFormats();
|
||||
QStringList sfl; foreach (QByteArray s, ifl) sfl << ("*." + QString(s).toLower());
|
||||
QString f = QFileDialog::getOpenFileName(this, tr("Select icon"), last_icon, tr("Images") + " (" + sfl.join(" ") + ")");
|
||||
if (f.isEmpty()) return;
|
||||
last_icon = f;
|
||||
icon = QImage(last_icon);
|
||||
setWindowIcon(QIcon(QPixmap::fromImage(icon)));
|
||||
}
|
||||
#include "edockwidget.h"
|
||||
#include "cdpultwindow.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "cdutils_k.h"
|
||||
#include "cdutils_x.h"
|
||||
#include "cdutils_m.h"
|
||||
#include "qcd_core.h"
|
||||
#include "qcd_view.h"
|
||||
#include "qcd_model.h"
|
||||
#include "qcd_modedialog.h"
|
||||
#include "chunkstream.h"
|
||||
#include "qvariantedit.h"
|
||||
#include "piqt.h"
|
||||
#include "piqt_highlighter.h"
|
||||
#include "qcodeedit.h"
|
||||
#include <QFileDialog>
|
||||
#include <QScrollBar>
|
||||
#include <QImageReader>
|
||||
#include <QMessageBox>
|
||||
|
||||
using namespace CDUtils;
|
||||
|
||||
|
||||
CDPultWindow::CDPultWindow(QWidget *parent) : EMainWindow(parent), Ui::CDPultWindow() {
|
||||
setupUi(this);
|
||||
centralWidget()->hide();
|
||||
setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::North);
|
||||
CDCore::instance()->initPult();
|
||||
def_config = codeConfig->text();
|
||||
checkDefaultConfig->setChecked(true);
|
||||
new ConfigHighlighter(codeConfig->document());
|
||||
widgetK->setType(CDUtils::CDType::cdK);
|
||||
widgetX->setType(CDUtils::CDType::cdX);
|
||||
widgetC->setType(CDUtils::CDType::cdC);
|
||||
widgetM->setType(CDUtils::CDType::cdM);
|
||||
editFileK->setValue(QVariant::fromValue(QAD::File("", "*.dat")));
|
||||
editFileX->setValue(QVariant::fromValue(QAD::File("", "*.dat")));
|
||||
editFileC->setValue(QVariant::fromValue(QAD::File("", "*.dat")));
|
||||
editFileM->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(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)));
|
||||
connect(widgetC, SIGNAL(addToLog(CDViewWidget::LogIcon,QString)), this, SLOT(addToLog(CDViewWidget::LogIcon,QString)));
|
||||
connect(widgetM, SIGNAL(addToLog(CDViewWidget::LogIcon,QString)), this, SLOT(addToLog(CDViewWidget::LogIcon,QString)));
|
||||
connect(widgetK->view, SIGNAL(changedGlobal()), widgetDirectK, SLOT(changedGlobal()));
|
||||
connect(widgetX->view, SIGNAL(changedGlobal()), widgetGraphics, SLOT(changedGlobal()));
|
||||
connect(widgetX->view, SIGNAL(receivedX()), widgetGraphics, SLOT(receivedX()));
|
||||
connect(widgetM->view, SIGNAL(messageReceived(QString,int,QString)), this, SLOT(messageReceived(QString,int,QString)));
|
||||
QCDCore::instance()->bindWidget(widgetK->view);
|
||||
QCDCore::instance()->setDirectKEnabled(true);
|
||||
X.start();
|
||||
if (windowState() == Qt::WindowMinimized)
|
||||
setWindowState(Qt::WindowNoState);
|
||||
}
|
||||
|
||||
|
||||
CDPultWindow::~CDPultWindow() {
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::loadFile(const QString & fp) {
|
||||
load(fp);
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::apply(bool sessions) {
|
||||
CDCore::instance()->stop();
|
||||
widgetK->setFile(editFileK->value().value<QAD::File>().file);
|
||||
widgetX->setFile(editFileX->value().value<QAD::File>().file);
|
||||
widgetC->setFile(editFileC->value().value<QAD::File>().file);
|
||||
widgetM->setFile(editFileM->value().value<QAD::File>().file);
|
||||
if (checkDefaultConfig->isChecked())
|
||||
CDCore::instance()->initPult();
|
||||
else
|
||||
CDCore::instance()->init(Q2PIString(codeConfig->text()), true);
|
||||
widgetX->view->startX();
|
||||
if (sessions) {
|
||||
widgetGraphics->load(session_gr);
|
||||
widgetDirectK->load(session_dk);
|
||||
if (!session_mw.isEmpty())
|
||||
restoreState(session_mw);
|
||||
X.lock();
|
||||
PIVector<PIDeque<int> > x_list = X.enabledList();
|
||||
X.unlock();
|
||||
piForeachC (PIDeque<int> & p, x_list)
|
||||
X.enable(X[p]);
|
||||
((CDItemModel*)widgetX->view->model())->updateModel();
|
||||
widgetX->view->expandAll();
|
||||
}
|
||||
dockCDKView->setVisible(checkHasK->isChecked());
|
||||
dockCDXView->setVisible(checkHasX->isChecked());
|
||||
dockCDCView->setVisible(checkHasC->isChecked());
|
||||
dockCDMView->setVisible(checkHasM->isChecked());
|
||||
QMetaObject::invokeMethod(this, "changedDock", Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::closeEvent(QCloseEvent *e) {
|
||||
EMainWindow::closeEvent(e);
|
||||
if (!e->isAccepted())
|
||||
return;
|
||||
QApplication::closeAllWindows();
|
||||
session.save();
|
||||
session.setFile(QString());
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::reset(bool full) {
|
||||
setWindowTitle(QString("CD Pult"));
|
||||
widgetK->reset();
|
||||
setChanged(false);
|
||||
}
|
||||
|
||||
|
||||
bool CDPultWindow::load(const QString & path) {
|
||||
qApp->setOverrideCursor(Qt::WaitCursor);
|
||||
QPIConfig conf(path, QIODevice::ReadOnly);
|
||||
QAD::File f = editFileK->value().value<QAD::File>();
|
||||
checkSyncFiles->setChecked(false);
|
||||
editFileK->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_k").toString(), f.filter)));
|
||||
editFileX->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_x").toString(), f.filter)));
|
||||
editFileC->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_c").toString(), f.filter)));
|
||||
editFileM->setValue(QVariant::fromValue(QAD::File(conf.getValue("file_m").toString(), f.filter)));
|
||||
checkSyncFiles->setChecked(conf.getValue("sync_files").toBool());
|
||||
lineSessionName->setText(conf.getValue("session_name").toString());
|
||||
last_icon = conf.getValue("icon_path").toString();
|
||||
setAppIcon(conf.getValue("icon").toByteArray());
|
||||
checkHasK->setChecked(conf.getValue("has_k").toBool());
|
||||
checkHasX->setChecked(conf.getValue("has_x").toBool());
|
||||
checkHasC->setChecked(conf.getValue("has_c").toBool());
|
||||
checkHasM->setChecked(conf.getValue("has_m").toBool());
|
||||
checkDefaultConfig->setChecked(conf.getValue("default_config").toBool());
|
||||
codeConfig->setText(QByteArray2QString(conf.getValue("config").toByteArray()));
|
||||
if (codeConfig->text().isEmpty())
|
||||
codeConfig->setText(def_config);
|
||||
session_gr = conf.getValue("session_gr").toByteArray();
|
||||
session_dk = conf.getValue("session_dk").toByteArray();
|
||||
session_mw = conf.getValue("session_mw").toByteArray();
|
||||
setChanged(false);
|
||||
file_name = path;
|
||||
apply(true);
|
||||
qApp->restoreOverrideCursor();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool CDPultWindow::save(const QString & path) {
|
||||
session_gr = widgetGraphics->save();
|
||||
session_dk = widgetDirectK->save();
|
||||
session_mw = saveState();
|
||||
QPIConfig conf(path, QIODevice::ReadWrite);
|
||||
conf.clear();
|
||||
conf.setValue("file_k", editFileK->value().value<QAD::File>().file);
|
||||
conf.setValue("file_x", editFileX->value().value<QAD::File>().file);
|
||||
conf.setValue("file_c", editFileC->value().value<QAD::File>().file);
|
||||
conf.setValue("file_m", editFileM->value().value<QAD::File>().file);
|
||||
conf.setValue("sync_files", checkSyncFiles->isChecked());
|
||||
conf.setValue("session_name", lineSessionName->text());
|
||||
conf.setValue("icon_path", last_icon);
|
||||
conf.setValue("icon", appIcon());
|
||||
conf.setValue("has_k", checkHasK->isChecked());
|
||||
conf.setValue("has_x", checkHasX->isChecked());
|
||||
conf.setValue("has_c", checkHasC->isChecked());
|
||||
conf.setValue("has_m", checkHasM->isChecked());
|
||||
conf.setValue("default_config", checkDefaultConfig->isChecked());
|
||||
conf.setValue("config", QString2QByteArray(codeConfig->text()));
|
||||
conf.setValue("session_gr", session_gr);
|
||||
conf.setValue("session_dk", session_dk);
|
||||
conf.setValue("session_mw", session_mw);
|
||||
file_name = path;
|
||||
return true;
|
||||
|
||||
//widgetK->setFile(path);
|
||||
//widgetK->save();
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::loadingSession(QPIConfig & conf) {
|
||||
setRecentFiles(conf.getValue("recent files").toStringList());
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::savingSession(QPIConfig & conf) {
|
||||
conf.setValue("recent files", recentFiles());
|
||||
}
|
||||
|
||||
|
||||
QByteArray CDPultWindow::appIcon() const {
|
||||
QByteArray ret;
|
||||
if (icon.isNull()) return ret;
|
||||
QBuffer buff(&ret);
|
||||
buff.open(QIODevice::WriteOnly);
|
||||
icon.save(&buff, "png");
|
||||
//qDebug() << "s" << ret.size();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::setAppIcon(QByteArray ba) {
|
||||
if (ba.isEmpty()) {
|
||||
icon = QImage();
|
||||
setWindowIcon(QIcon());
|
||||
return;
|
||||
}
|
||||
//qDebug() << "l" << ba.size();
|
||||
icon = QImage::fromData(ba);
|
||||
setWindowIcon(QIcon(QPixmap::fromImage(icon)));
|
||||
//qDebug() << QApplication::windowIcon().availableSizes();
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::addToLog(CDViewWidget::LogIcon icon, const QString & msg) {
|
||||
QListWidgetItem * ni = new QListWidgetItem(log_icons[icon], "(" + QTime::currentTime().toString() + ") " + msg);
|
||||
bool s = listLog->verticalScrollBar()->value() == listLog->verticalScrollBar()->maximum();
|
||||
listLog->addItem(ni);
|
||||
if (s) listLog->scrollToBottom();
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::messageReceived(QString path, int type, QString msg) {
|
||||
MessageType mt = (MessageType)type;
|
||||
const CDType & t(M.root()[CDCore::stringToPath(Q2PIString(path))]);
|
||||
if (t.cd_type() != CDType::cdM) return;
|
||||
if (mt == MessageBox)
|
||||
QMessageBox::information(this, windowTitle(), QString("[%1]\n%2").arg(PI2QString(t.name()), msg));
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::on_editFileK_valueChanged(const QVariant & p) {
|
||||
if (!checkSyncFiles->isChecked()) return;
|
||||
QFileInfo fi(p.value<QAD::File>().file);
|
||||
if (fi.path().isEmpty()) return;
|
||||
QString n = fi.baseName();
|
||||
QString xn(n), cn(n), mn(n);
|
||||
if (n.contains("k")) {
|
||||
xn.replace(n.indexOf("k"), 1, "x");
|
||||
cn.replace(n.indexOf("k"), 1, "c");
|
||||
mn.replace(n.indexOf("k"), 1, "m");
|
||||
} else {
|
||||
xn += "_x";
|
||||
cn += "_c";
|
||||
mn += "_m";
|
||||
}
|
||||
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<QAD::File>();
|
||||
f.file = dir + xn + dot + ext; editFileX->setValue(QVariant::fromValue(f));
|
||||
f.file = dir + cn + dot + ext; editFileC->setValue(QVariant::fromValue(f));
|
||||
f.file = dir + mn + dot + ext; editFileM->setValue(QVariant::fromValue(f));
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::on_buttonSessionApply_clicked() {
|
||||
apply(false);
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::on_lineSessionName_textChanged(const QString & t) {
|
||||
setWindowTitle(QString("CD Pult - %1").arg(t));
|
||||
}
|
||||
|
||||
|
||||
void CDPultWindow::on_buttonIcon_clicked() {
|
||||
QList<QByteArray> ifl = QImageReader::supportedImageFormats();
|
||||
QStringList sfl; foreach (QByteArray s, ifl) sfl << ("*." + QString(s).toLower());
|
||||
QString f = QFileDialog::getOpenFileName(this, tr("Select icon"), last_icon, tr("Images") + " (" + sfl.join(" ") + ")");
|
||||
if (f.isEmpty()) return;
|
||||
last_icon = f;
|
||||
icon = QImage(last_icon);
|
||||
setWindowIcon(QIcon(QPixmap::fromImage(icon)));
|
||||
}
|
||||
@@ -1,53 +1,53 @@
|
||||
#ifndef CDPULTWINDOW_H
|
||||
#define CDPULTWINDOW_H
|
||||
|
||||
#include "emainwindow.h"
|
||||
#include "ui_cdpultwindow.h"
|
||||
#include "cdviewwidget.h"
|
||||
#include "ribbon.h"
|
||||
#include "piobject.h"
|
||||
|
||||
|
||||
class CDPultWindow : public EMainWindow, public Ui::CDPultWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_ENUMS(LogIcon)
|
||||
public:
|
||||
|
||||
explicit CDPultWindow(QWidget *parent = 0);
|
||||
~CDPultWindow();
|
||||
void loadFile(const QString & fp);
|
||||
void apply(bool sessions);
|
||||
|
||||
private:
|
||||
|
||||
void closeEvent(QCloseEvent *);
|
||||
void reset(bool full = false);
|
||||
bool load(const QString & path);
|
||||
bool save(const QString & path);
|
||||
QString loadFilter() {return "Pult session(*.conf)";}
|
||||
QString saveFilter() {return loadFilter();}
|
||||
void loadingSession(QPIConfig & conf);
|
||||
void savingSession(QPIConfig & conf);
|
||||
|
||||
QByteArray appIcon() const;
|
||||
void setAppIcon(QByteArray ba);
|
||||
|
||||
Ribbon * ribbon;
|
||||
QMap<CDViewWidget::LogIcon, QIcon> log_icons;
|
||||
QByteArray session_gr, session_dk, session_mw;
|
||||
QString def_config, last_icon;
|
||||
QImage icon;
|
||||
|
||||
private slots:
|
||||
void addToLog(CDViewWidget::LogIcon icon, const QString & msg);
|
||||
void messageReceived(QString path, int type, QString msg);
|
||||
|
||||
void on_editFileK_valueChanged(const QVariant & p);
|
||||
void on_buttonSessionApply_clicked();
|
||||
|
||||
void on_lineSessionName_textChanged(const QString & t);
|
||||
void on_buttonIcon_clicked();
|
||||
};
|
||||
|
||||
#endif // CDPULTWINDOW_H
|
||||
#ifndef CDPULTWINDOW_H
|
||||
#define CDPULTWINDOW_H
|
||||
|
||||
#include "emainwindow.h"
|
||||
#include "ui_cdpultwindow.h"
|
||||
#include "cdviewwidget.h"
|
||||
#include "ribbon.h"
|
||||
#include "piobject.h"
|
||||
|
||||
|
||||
class CDPultWindow : public EMainWindow, public Ui::CDPultWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_ENUMS(LogIcon)
|
||||
public:
|
||||
|
||||
explicit CDPultWindow(QWidget *parent = 0);
|
||||
~CDPultWindow();
|
||||
void loadFile(const QString & fp);
|
||||
void apply(bool sessions);
|
||||
|
||||
private:
|
||||
|
||||
void closeEvent(QCloseEvent *);
|
||||
void reset(bool full = false);
|
||||
bool load(const QString & path);
|
||||
bool save(const QString & path);
|
||||
QString loadFilter() {return "Pult session(*.conf)";}
|
||||
QString saveFilter() {return loadFilter();}
|
||||
void loadingSession(QPIConfig & conf);
|
||||
void savingSession(QPIConfig & conf);
|
||||
|
||||
QByteArray appIcon() const;
|
||||
void setAppIcon(QByteArray ba);
|
||||
|
||||
Ribbon * ribbon;
|
||||
QMap<CDViewWidget::LogIcon, QIcon> log_icons;
|
||||
QByteArray session_gr, session_dk, session_mw;
|
||||
QString def_config, last_icon;
|
||||
QImage icon;
|
||||
|
||||
private slots:
|
||||
void addToLog(CDViewWidget::LogIcon icon, const QString & msg);
|
||||
void messageReceived(QString path, int type, QString msg);
|
||||
|
||||
void on_editFileK_valueChanged(const QVariant & p);
|
||||
void on_buttonSessionApply_clicked();
|
||||
|
||||
void on_lineSessionName_textChanged(const QString & t);
|
||||
void on_buttonIcon_clicked();
|
||||
};
|
||||
|
||||
#endif // CDPULTWINDOW_H
|
||||
@@ -1,612 +1,612 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CDPultWindow</class>
|
||||
<widget class="EMainWindow" name="CDPultWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>798</width>
|
||||
<height>593</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CD Pult</string>
|
||||
</property>
|
||||
<property name="dockNestingEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="dockOptions">
|
||||
<set>QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks</set>
|
||||
</property>
|
||||
<widget class="QWidget" name="central"/>
|
||||
<widget class="QMenuBar" name="menuBar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>798</width>
|
||||
<height>24</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuMain">
|
||||
<property name="title">
|
||||
<string>Main</string>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuOpen_recent">
|
||||
<property name="title">
|
||||
<string>Open recent</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-open-recent.png</normaloff>:/icons/document-open-recent.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
<addaction name="actionOpen"/>
|
||||
<addaction name="menuOpen_recent"/>
|
||||
<addaction name="actionSave"/>
|
||||
<addaction name="actionSaveAs"/>
|
||||
</widget>
|
||||
<addaction name="menuMain"/>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockCDKView">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-edit.png</normaloff>:/icons/document-edit.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>K</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>1</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="CDViewWidget" name="widgetK" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockLog">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="cdpult.qrc">
|
||||
<normaloff>:/icons/dialog-information.png</normaloff>:/icons/dialog-information.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Log</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>8</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_2">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QListWidget" name="listLog">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="verticalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockCDXView">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../qad/widgets/qad_widgets.qrc">
|
||||
<normaloff>:/icons/qvariantedit.png</normaloff>:/icons/qvariantedit.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>X</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>1</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_3">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="CDViewWidget" name="widgetX" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockSession">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/configure.png</normaloff>:/icons/configure.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Session</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>2</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_4">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonSessionApply">
|
||||
<property name="text">
|
||||
<string>Apply</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/widgets/qad_widgets.qrc">
|
||||
<normaloff>:/icons/dialog-ok-apply.png</normaloff>:/icons/dialog-ok-apply.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||
</property>
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Name:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="CLineEdit" name="lineSessionName"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonIcon">
|
||||
<property name="toolTip">
|
||||
<string>Select icon...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/blockview/qad_blockview.qrc">
|
||||
<normaloff>:/icons/view-preview.png</normaloff>:/icons/view-preview.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>K file:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QVariantEdit" name="editFileK"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>X file:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QVariantEdit" name="editFileX"/>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>C file:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QVariantEdit" name="editFileC"/>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkSyncFiles">
|
||||
<property name="text">
|
||||
<string>Sync files</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkHasK">
|
||||
<property name="text">
|
||||
<string>K</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkHasX">
|
||||
<property name="text">
|
||||
<string>X</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkHasC">
|
||||
<property name="text">
|
||||
<string>C</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkHasM">
|
||||
<property name="text">
|
||||
<string>M</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkDefaultConfig">
|
||||
<property name="text">
|
||||
<string>Default config</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>M file:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QVariantEdit" name="editFileM"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCodeEdit" name="codeConfig">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>include = ip.conf
|
||||
[connection]
|
||||
device.cd = eth://udp:${ip.pult}:27002:${ip.app}:27001 #s
|
||||
[]
|
||||
</string>
|
||||
</property>
|
||||
<property name="editorFont">
|
||||
<font>
|
||||
<family>DejaVu Sans Mono</family>
|
||||
<pointsize>9</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockCDCView">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../qad/blockview/qad_blockview.qrc">
|
||||
<normaloff>:/icons/legend.png</normaloff>:/icons/legend.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>C</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>1</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_5">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<widget class="CDViewWidget" name="widgetC" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockGraphics">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../qad/blockview/qad_blockview.qrc">
|
||||
<normaloff>:/icons/format-stroke-color.png</normaloff>:/icons/format-stroke-color.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Graphics</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>8</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_6">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="CDGraphics" name="widgetGraphics" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockDirectK">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../qad/widgets/qad_widgets.qrc">
|
||||
<normaloff>:/icons/tools-wizard.png</normaloff>:/icons/tools-wizard.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Direct K</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>8</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_7">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="CDDirectK" name="widgetDirectK" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockCDMView">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="cdpult.qrc">
|
||||
<normaloff>:/icons/accessories-text-editor.png</normaloff>:/icons/accessories-text-editor.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>M</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>1</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_8">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||
<item>
|
||||
<widget class="CDViewWidget" name="widgetM" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<action name="actionOpen">
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-open.png</normaloff>:/icons/document-open.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open...</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+O</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSave">
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-save.png</normaloff>:/icons/document-save.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+S</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSaveAs">
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-save-as.png</normaloff>:/icons/document-save-as.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save As...</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+Shift+S</string>
|
||||
</property>
|
||||
</action>
|
||||
<addaction name="actionOpen"/>
|
||||
<addaction name="actionSave"/>
|
||||
<addaction name="actionSaveAs"/>
|
||||
<addaction name="menuMain"/>
|
||||
<addaction name="menuOpen_recent"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>EMainWindow</class>
|
||||
<extends>QMainWindow</extends>
|
||||
<header>emainwindow.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>CLineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>clineedit.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QCodeEdit</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>qcodeedit.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QVariantEdit</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>qvariantedit.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>EDockWidget</class>
|
||||
<extends>QDockWidget</extends>
|
||||
<header>edockwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>CDViewWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>cdviewwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>CDGraphics</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>cdgraphics.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>CDDirectK</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>cddirectk.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="../../qad/application/qad_application.qrc"/>
|
||||
<include location="../../qad/blockview/qad_blockview.qrc"/>
|
||||
<include location="../../qad/widgets/qad_widgets.qrc"/>
|
||||
<include location="cdpult.qrc"/>
|
||||
</resources>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>actionSave</sender>
|
||||
<signal>triggered()</signal>
|
||||
<receiver>CDPultWindow</receiver>
|
||||
<slot>saveFile()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>-1</x>
|
||||
<y>-1</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>399</x>
|
||||
<y>299</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>actionSaveAs</sender>
|
||||
<signal>triggered()</signal>
|
||||
<receiver>CDPultWindow</receiver>
|
||||
<slot>saveAsFile()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>-1</x>
|
||||
<y>-1</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>399</x>
|
||||
<y>299</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>actionOpen</sender>
|
||||
<signal>triggered()</signal>
|
||||
<receiver>CDPultWindow</receiver>
|
||||
<slot>openFile()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>-1</x>
|
||||
<y>-1</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>399</x>
|
||||
<y>299</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>checkSyncFiles</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>editFileX</receiver>
|
||||
<slot>setDisabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>786</x>
|
||||
<y>220</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>786</x>
|
||||
<y>151</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>checkSyncFiles</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>editFileC</receiver>
|
||||
<slot>setDisabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>786</x>
|
||||
<y>220</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>786</x>
|
||||
<y>172</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>checkDefaultConfig</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>codeConfig</receiver>
|
||||
<slot>setDisabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>786</x>
|
||||
<y>276</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>581</x>
|
||||
<y>304</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>checkSyncFiles</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>editFileM</receiver>
|
||||
<slot>setDisabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>767</x>
|
||||
<y>205</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>767</x>
|
||||
<y>187</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CDPultWindow</class>
|
||||
<widget class="EMainWindow" name="CDPultWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>798</width>
|
||||
<height>593</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CD Pult</string>
|
||||
</property>
|
||||
<property name="dockNestingEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="dockOptions">
|
||||
<set>QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks</set>
|
||||
</property>
|
||||
<widget class="QWidget" name="central"/>
|
||||
<widget class="QMenuBar" name="menuBar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>798</width>
|
||||
<height>24</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuMain">
|
||||
<property name="title">
|
||||
<string>Main</string>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuOpen_recent">
|
||||
<property name="title">
|
||||
<string>Open recent</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-open-recent.png</normaloff>:/icons/document-open-recent.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
<addaction name="actionOpen"/>
|
||||
<addaction name="menuOpen_recent"/>
|
||||
<addaction name="actionSave"/>
|
||||
<addaction name="actionSaveAs"/>
|
||||
</widget>
|
||||
<addaction name="menuMain"/>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockCDKView">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-edit.png</normaloff>:/icons/document-edit.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>K</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>1</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="CDViewWidget" name="widgetK" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockLog">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="cdpult.qrc">
|
||||
<normaloff>:/icons/dialog-information.png</normaloff>:/icons/dialog-information.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Log</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>8</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_2">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QListWidget" name="listLog">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="verticalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockCDXView">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../qad/widgets/qad_widgets.qrc">
|
||||
<normaloff>:/icons/qvariantedit.png</normaloff>:/icons/qvariantedit.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>X</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>1</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_3">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="CDViewWidget" name="widgetX" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockSession">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/configure.png</normaloff>:/icons/configure.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Session</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>2</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_4">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonSessionApply">
|
||||
<property name="text">
|
||||
<string>Apply</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/widgets/qad_widgets.qrc">
|
||||
<normaloff>:/icons/dialog-ok-apply.png</normaloff>:/icons/dialog-ok-apply.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||
</property>
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Name:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="CLineEdit" name="lineSessionName"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonIcon">
|
||||
<property name="toolTip">
|
||||
<string>Select icon...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/blockview/qad_blockview.qrc">
|
||||
<normaloff>:/icons/view-preview.png</normaloff>:/icons/view-preview.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>K file:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QVariantEdit" name="editFileK"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>X file:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QVariantEdit" name="editFileX"/>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>C file:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QVariantEdit" name="editFileC"/>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkSyncFiles">
|
||||
<property name="text">
|
||||
<string>Sync files</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkHasK">
|
||||
<property name="text">
|
||||
<string>K</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkHasX">
|
||||
<property name="text">
|
||||
<string>X</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkHasC">
|
||||
<property name="text">
|
||||
<string>C</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkHasM">
|
||||
<property name="text">
|
||||
<string>M</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkDefaultConfig">
|
||||
<property name="text">
|
||||
<string>Default config</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>M file:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QVariantEdit" name="editFileM"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCodeEdit" name="codeConfig">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>include = ip.conf
|
||||
[connection]
|
||||
device.cd = eth://udp:${ip.pult}:27002:${ip.app}:27001 #s
|
||||
[]
|
||||
</string>
|
||||
</property>
|
||||
<property name="editorFont">
|
||||
<font>
|
||||
<family>DejaVu Sans Mono</family>
|
||||
<pointsize>9</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockCDCView">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../qad/blockview/qad_blockview.qrc">
|
||||
<normaloff>:/icons/legend.png</normaloff>:/icons/legend.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>C</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>1</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_5">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<widget class="CDViewWidget" name="widgetC" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockGraphics">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../qad/blockview/qad_blockview.qrc">
|
||||
<normaloff>:/icons/format-stroke-color.png</normaloff>:/icons/format-stroke-color.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Graphics</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>8</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_6">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="CDGraphics" name="widgetGraphics" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockDirectK">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../qad/widgets/qad_widgets.qrc">
|
||||
<normaloff>:/icons/tools-wizard.png</normaloff>:/icons/tools-wizard.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Direct K</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>8</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_7">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="CDDirectK" name="widgetDirectK" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="EDockWidget" name="dockCDMView">
|
||||
<property name="windowIcon">
|
||||
<iconset resource="cdpult.qrc">
|
||||
<normaloff>:/icons/accessories-text-editor.png</normaloff>:/icons/accessories-text-editor.png</iconset>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>M</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>1</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_8">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||
<item>
|
||||
<widget class="CDViewWidget" name="widgetM" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<action name="actionOpen">
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-open.png</normaloff>:/icons/document-open.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open...</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+O</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSave">
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-save.png</normaloff>:/icons/document-save.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+S</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSaveAs">
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-save-as.png</normaloff>:/icons/document-save-as.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save As...</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+Shift+S</string>
|
||||
</property>
|
||||
</action>
|
||||
<addaction name="actionOpen"/>
|
||||
<addaction name="actionSave"/>
|
||||
<addaction name="actionSaveAs"/>
|
||||
<addaction name="menuMain"/>
|
||||
<addaction name="menuOpen_recent"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="separator"/>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>EMainWindow</class>
|
||||
<extends>QMainWindow</extends>
|
||||
<header>emainwindow.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>CLineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>clineedit.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QCodeEdit</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>qcodeedit.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QVariantEdit</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>qvariantedit.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>EDockWidget</class>
|
||||
<extends>QDockWidget</extends>
|
||||
<header>edockwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>CDViewWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>cdviewwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>CDGraphics</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>cdgraphics.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>CDDirectK</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>cddirectk.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="../../qad/application/qad_application.qrc"/>
|
||||
<include location="../../qad/blockview/qad_blockview.qrc"/>
|
||||
<include location="../../qad/widgets/qad_widgets.qrc"/>
|
||||
<include location="cdpult.qrc"/>
|
||||
</resources>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>actionSave</sender>
|
||||
<signal>triggered()</signal>
|
||||
<receiver>CDPultWindow</receiver>
|
||||
<slot>saveFile()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>-1</x>
|
||||
<y>-1</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>399</x>
|
||||
<y>299</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>actionSaveAs</sender>
|
||||
<signal>triggered()</signal>
|
||||
<receiver>CDPultWindow</receiver>
|
||||
<slot>saveAsFile()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>-1</x>
|
||||
<y>-1</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>399</x>
|
||||
<y>299</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>actionOpen</sender>
|
||||
<signal>triggered()</signal>
|
||||
<receiver>CDPultWindow</receiver>
|
||||
<slot>openFile()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>-1</x>
|
||||
<y>-1</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>399</x>
|
||||
<y>299</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>checkSyncFiles</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>editFileX</receiver>
|
||||
<slot>setDisabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>786</x>
|
||||
<y>220</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>786</x>
|
||||
<y>151</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>checkSyncFiles</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>editFileC</receiver>
|
||||
<slot>setDisabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>786</x>
|
||||
<y>220</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>786</x>
|
||||
<y>172</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>checkDefaultConfig</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>codeConfig</receiver>
|
||||
<slot>setDisabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>786</x>
|
||||
<y>276</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>581</x>
|
||||
<y>304</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>checkSyncFiles</sender>
|
||||
<signal>toggled(bool)</signal>
|
||||
<receiver>editFileM</receiver>
|
||||
<slot>setDisabled(bool)</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>767</x>
|
||||
<y>205</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>767</x>
|
||||
<y>187</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -1,78 +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 <QFileDialog>
|
||||
|
||||
|
||||
CDViewWidget::CDViewWidget(QWidget * parent) : QWidget(parent), Ui::CDViewWidget() {
|
||||
qRegisterMetaType<CDViewWidget::LogIcon>("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);
|
||||
}
|
||||
#include "cdviewwidget.h"
|
||||
#include "cdutils_core.h"
|
||||
#include "qcd_core.h"
|
||||
#include "qcd_model.h"
|
||||
#include "qcd_modedialog.h"
|
||||
#include "qvariantedit.h"
|
||||
#include <QFileDialog>
|
||||
|
||||
|
||||
CDViewWidget::CDViewWidget(QWidget * parent) : QWidget(parent), Ui::CDViewWidget() {
|
||||
qRegisterMetaType<CDViewWidget::LogIcon>("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);
|
||||
}
|
||||
@@ -1,41 +1,41 @@
|
||||
#ifndef CDVIEWWIDGET_H
|
||||
#define CDVIEWWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
#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
|
||||
#ifndef CDVIEWWIDGET_H
|
||||
#define CDVIEWWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
#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
|
||||
@@ -1,176 +1,176 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CDViewWidget</class>
|
||||
<widget class="QWidget" name="CDViewWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>689</width>
|
||||
<height>459</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CD Pult</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonSend">
|
||||
<property name="text">
|
||||
<string>Send</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="cdpult.qrc">
|
||||
<normaloff>:/icons/flame.png</normaloff>:/icons/flame.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonReceive">
|
||||
<property name="text">
|
||||
<string>Receive</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="cdpult.qrc">
|
||||
<normaloff>:/icons/document-revert.png</normaloff>:/icons/document-revert.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Preferred</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonLoad">
|
||||
<property name="text">
|
||||
<string>Load</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-open.png</normaloff>:/icons/document-open.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonSave">
|
||||
<property name="text">
|
||||
<string>Save</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-save.png</normaloff>:/icons/document-save.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Preferred</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonParse">
|
||||
<property name="text">
|
||||
<string>Update description ...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="cdpult.qrc">
|
||||
<normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Expanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>1</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CDView" name="view">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed</set>
|
||||
</property>
|
||||
<property name="dragEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="dragDropMode">
|
||||
<enum>QAbstractItemView::DragOnly</enum>
|
||||
</property>
|
||||
<property name="verticalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>CDView</class>
|
||||
<extends>QTreeView</extends>
|
||||
<header>qcd_view.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="../../qad/application/qad_application.qrc"/>
|
||||
<include location="cdpult.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CDViewWidget</class>
|
||||
<widget class="QWidget" name="CDViewWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>689</width>
|
||||
<height>459</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>CD Pult</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonSend">
|
||||
<property name="text">
|
||||
<string>Send</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="cdpult.qrc">
|
||||
<normaloff>:/icons/flame.png</normaloff>:/icons/flame.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonReceive">
|
||||
<property name="text">
|
||||
<string>Receive</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="cdpult.qrc">
|
||||
<normaloff>:/icons/document-revert.png</normaloff>:/icons/document-revert.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Preferred</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonLoad">
|
||||
<property name="text">
|
||||
<string>Load</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-open.png</normaloff>:/icons/document-open.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonSave">
|
||||
<property name="text">
|
||||
<string>Save</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../qad/application/qad_application.qrc">
|
||||
<normaloff>:/icons/document-save.png</normaloff>:/icons/document-save.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Preferred</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonParse">
|
||||
<property name="text">
|
||||
<string>Update description ...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="cdpult.qrc">
|
||||
<normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Expanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>1</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CDView" name="view">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed</set>
|
||||
</property>
|
||||
<property name="dragEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="dragDropMode">
|
||||
<enum>QAbstractItemView::DragOnly</enum>
|
||||
</property>
|
||||
<property name="verticalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>CDView</class>
|
||||
<extends>QTreeView</extends>
|
||||
<header>qcd_view.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="../../qad/application/qad_application.qrc"/>
|
||||
<include location="cdpult.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
@@ -1,373 +1,373 @@
|
||||
#include <QApplication>
|
||||
#include "cdpultwindow.h"
|
||||
|
||||
template <typename Key, typename T>
|
||||
class PIHash {
|
||||
//template <typename Key1, typename T1> friend PIByteArray & operator >>(PIByteArray & s, PIHash<Key1, T1> & v);
|
||||
//template <typename Key1, typename T1> friend PIByteArray & operator <<(PIByteArray & s, const PIHash<Key1, T1> & v);
|
||||
public:
|
||||
PIHash() {;}
|
||||
PIHash(const PIHash<Key, T> & other) {*this = other;}
|
||||
virtual ~PIHash() {;}
|
||||
|
||||
PIHash<Key, T> & operator =(const PIHash<Key, T> & other) {
|
||||
if (this == &other) return *this;
|
||||
clear();
|
||||
pih_content = other.pih_content;
|
||||
return *this;
|
||||
}
|
||||
|
||||
typedef T mapped_type;
|
||||
typedef Key key_type;
|
||||
typedef PIPair<Key, T> value_type;
|
||||
/*
|
||||
class iterator {
|
||||
friend class PIHash<Key, T>;
|
||||
private:
|
||||
iterator(const PIHash<Key, T> * v, ssize_t p): parent(v), pos(p) {}
|
||||
const PIHash<Key, T> * parent;
|
||||
ssize_t pos;
|
||||
public:
|
||||
iterator(): parent(0), pos(0) {}
|
||||
const Key & key() const {return const_cast<PIHash<Key, T> * >(parent)->_key(pos);}
|
||||
T & value() {return const_cast<PIHash<Key, T> * >(parent)->_value(pos);}
|
||||
void operator ++() {++pos;}
|
||||
void operator ++(int) {++pos;}
|
||||
void operator --() {--pos;}
|
||||
void operator --(int) {--pos;}
|
||||
bool operator ==(const iterator & it) const {return (pos == it.pos);}
|
||||
bool operator !=(const iterator & it) const {return (pos != it.pos);}
|
||||
};
|
||||
|
||||
class reverse_iterator {
|
||||
friend class PIHash<Key, T>;
|
||||
private:
|
||||
reverse_iterator(const PIHash<Key, T> * v, ssize_t p): parent(v), pos(p) {}
|
||||
const PIHash<Key, T> * parent;
|
||||
ssize_t pos;
|
||||
public:
|
||||
reverse_iterator(): parent(0), pos(0) {}
|
||||
const Key & key() const {return const_cast<PIHash<Key, T> * >(parent)->_key(pos);}
|
||||
T & value() const {return const_cast<PIHash<Key, T> * >(parent)->_value(pos);}
|
||||
void operator ++() {--pos;}
|
||||
void operator ++(int) {--pos;}
|
||||
void operator --() {++pos;}
|
||||
void operator --(int) {++pos;}
|
||||
bool operator ==(const reverse_iterator & it) const {return (pos == it.pos);}
|
||||
bool operator !=(const reverse_iterator & it) const {return (pos != it.pos);}
|
||||
};
|
||||
*/
|
||||
class const_iterator {
|
||||
friend class PIHash<Key, T>;
|
||||
private:
|
||||
const_iterator(const PIHash<Key, T> * v, ssize_t p): parent(v), pos(p), bpos(0) {
|
||||
if (pos == 0) {
|
||||
pos = -1;
|
||||
nextPos();
|
||||
}
|
||||
}
|
||||
void nextPos() {
|
||||
while (++pos < parent->pih_content.size_s()) {
|
||||
if (!parent->pih_content[pos].isEmpty())
|
||||
return;
|
||||
}
|
||||
}
|
||||
const PIHash<Key, T> * parent;
|
||||
ssize_t pos, bpos;
|
||||
public:
|
||||
const_iterator(): parent(0), pos(0) {}
|
||||
//const value_type operator *() const {return parent->_pair(pos);}
|
||||
//const value_type* operator ->() const {cval = parent->_pair(pos); return &cval;}
|
||||
const Key & key() const {return const_cast<PIHash<Key, T> * >(parent)->pih_content[pos][bpos].key;}
|
||||
const T & value() const {return const_cast<PIHash<Key, T> * >(parent)->pih_content[pos][bpos].value;}
|
||||
void operator ++() {
|
||||
if (pos < parent->pih_content.size_s()) {
|
||||
if (bpos >= parent->pih_content[pos].size_s() - 1) {
|
||||
bpos = 0;
|
||||
nextPos();
|
||||
} else
|
||||
++bpos;
|
||||
} else {
|
||||
bpos = 0;
|
||||
++pos;
|
||||
}
|
||||
printf(" ++: %d %d\n", pos, bpos);
|
||||
}
|
||||
//void operator ++(int) {++pos;}
|
||||
void operator --() {
|
||||
--pos;
|
||||
}
|
||||
//void operator --(int) {--pos;}
|
||||
bool operator ==(const const_iterator & it) const {return (pos == it.pos && bpos == it.bpos);}
|
||||
bool operator !=(const const_iterator & it) const {return !(*this == it);}
|
||||
mutable value_type cval;
|
||||
};
|
||||
/*
|
||||
class const_reverse_iterator {
|
||||
friend class PIHash<Key, T>;
|
||||
private:
|
||||
const_reverse_iterator(const PIHash<Key, T> * v, ssize_t p): parent(v), pos(p) {}
|
||||
const PIHash<Key, T> * parent;
|
||||
ssize_t pos;
|
||||
public:
|
||||
const_reverse_iterator(): parent(0), pos(0) {}
|
||||
const value_type operator *() const {return parent->_pair(pos);}
|
||||
const value_type* operator ->() const {cval = parent->_pair(pos); return &cval;}
|
||||
void operator ++() {--pos;}
|
||||
void operator ++(int) {--pos;}
|
||||
void operator --() {++pos;}
|
||||
void operator --(int) {++pos;}
|
||||
bool operator ==(const const_reverse_iterator & it) const {return (pos == it.pos);}
|
||||
bool operator !=(const const_reverse_iterator & it) const {return (pos != it.pos);}
|
||||
mutable value_type cval;
|
||||
};
|
||||
*/
|
||||
//iterator begin() {return iterator(this, 0);}
|
||||
//iterator end() {return iterator(this, size());}
|
||||
const_iterator begin() const {return const_iterator(this, 0);}
|
||||
const_iterator end() const {return const_iterator(this, size());}
|
||||
const_iterator constBegin() const {return const_iterator(this, 0);}
|
||||
const_iterator constEnd() const {return const_iterator(this, size());}
|
||||
//reverse_iterator rbegin() {return reverse_iterator(this, size() - 1);}
|
||||
//reverse_iterator rend() {return reverse_iterator(this, -1);}
|
||||
//const_reverse_iterator rbegin() const {return const_reverse_iterator(this, size() - 1);}
|
||||
//const_reverse_iterator rend() const {return const_reverse_iterator(this, -1);}
|
||||
//const_reverse_iterator constRbegin() const {return const_reverse_iterator(this, size() - 1);}
|
||||
//const_reverse_iterator constRend() const {return const_reverse_iterator(this, -1);}
|
||||
|
||||
size_t size() const {return pih_content.size();}
|
||||
int size_s() const {return pih_content.size_s();}
|
||||
size_t length() const {return pih_content.size();}
|
||||
size_t capacity() const {return pih_content.size();}
|
||||
bool isEmpty() const {return (pih_content.size() == 0);}
|
||||
|
||||
T & operator [](const Key & key) {
|
||||
if (pih_content.isEmpty()) _rehash(1);
|
||||
uint k = piHash(key);
|
||||
int i = _index(k);
|
||||
if (i < pih_content.size_s()) {
|
||||
PIVector<HashEntry> & hv(pih_content[i]);
|
||||
if (hv.size_s() == 1) {
|
||||
if (hv[0].key == k)
|
||||
return hv[0].value;
|
||||
}
|
||||
for (int j = 0; j < hv.size_s(); ++j)
|
||||
if (hv[j].key == k)
|
||||
return hv[j].value;
|
||||
}
|
||||
if (pih_content[i].size_s() >= 4)
|
||||
_rehash(pih_content.size_s() * 2);
|
||||
i = _index(k);
|
||||
pih_content[i] << HashEntry(k);
|
||||
return pih_content[i].back().value;
|
||||
}
|
||||
const T operator [](const Key & key) const {return value(key);}
|
||||
T & at(const Key & key) {return (*this)[key];}
|
||||
const T at(const Key & key) const {return (*this)[key];}
|
||||
|
||||
PIHash<Key, T> & operator <<(const PIHash<Key, T> & other) {
|
||||
if (other.isEmpty()) return *this;
|
||||
for (int i = 0; i < other.pih_content.size_s(); ++i)
|
||||
for (int j = 0; j < other.pih_content[i].size_s(); ++j)
|
||||
insert(other.pih_content[i][j].key, other.pih_content[i][j].value);
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator ==(const PIHash<Key, T> & t) const {return (pih_content == t.pih_content);}
|
||||
bool operator !=(const PIHash<Key, T> & t) const {return (pih_content != t.pih_content);}
|
||||
bool contains(const Key & key) const {
|
||||
bool f(false);
|
||||
_find(key, f);
|
||||
return f;
|
||||
}
|
||||
|
||||
PIHash<Key, T> & reserve(size_t new_size) {_rehash(new_size); return *this;}
|
||||
|
||||
PIHash<Key, T> & remove(const Key & key) {
|
||||
uint k = piHash(key);
|
||||
int i = _index(k);
|
||||
if (i >= pih_content.size_s()) return *this;
|
||||
PIVector<HashEntry> & hv(pih_content[i]);
|
||||
for (int j = 0; j < hv.size_s(); ++j)
|
||||
if (hv[j].key == k) {
|
||||
hv.remove(j);
|
||||
--j;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
PIHash<Key, T> & erase(const Key & key) {return remove(key);}
|
||||
PIHash<Key, T> & clear() {pih_content.clear(); return *this;}
|
||||
|
||||
void swap(PIHash<Key, T> & other) {
|
||||
pih_content.swap(other.pih_content);
|
||||
}
|
||||
|
||||
PIHash<Key, T> & insert(const Key & key, const T & value) {
|
||||
(*this)[key] = value;
|
||||
return *this;
|
||||
}
|
||||
const T value(const Key & key, const T & default_ = T()) const {
|
||||
uint k = piHash(key);
|
||||
int i = _index(k);
|
||||
if (i >= pih_content.size_s()) return default_;
|
||||
const PIVector<HashEntry> & hv(pih_content[i]);
|
||||
for (int j = 0; j < hv.size_s(); ++j)
|
||||
if (hv[j].key == k)
|
||||
return hv[j].value;
|
||||
return default_;
|
||||
}
|
||||
PIVector<T> values() const {
|
||||
PIVector<T> ret;
|
||||
for (int i = 0; i < pih_content.size_s(); ++i)
|
||||
for (int j = 0; j < pih_content[i].size_s(); ++j)
|
||||
ret << pih_content[i][j].value;
|
||||
return ret;
|
||||
}
|
||||
/*Key key(const T & value_, const Key & default_ = Key()) const {
|
||||
for (int i = 0; i < pih_content.size_s(); ++i)
|
||||
for (int j = 0; j < pih_content[i].size_s(); ++j)
|
||||
if (pih_content[i][j].value == value_)
|
||||
return pih_content[i][j].key;
|
||||
return default_;
|
||||
}
|
||||
PIVector<Key> keys() const {
|
||||
PIVector<Key> ret;
|
||||
for (int i = 0; i < pih_content.size_s(); ++i)
|
||||
for (int j = 0; j < pih_content[i].size_s(); ++j)
|
||||
ret << pih_content[i][j].key;
|
||||
return ret;
|
||||
}*/
|
||||
|
||||
/*void dump() {
|
||||
piCout << "PIHash" << size() << "entries" << PICoutManipulators::NewLine << "content:";
|
||||
for (size_t i = 0; i < pih_content.size(); ++i)
|
||||
piCout << PICoutManipulators::Tab << i << ":" << pih_content[i];
|
||||
piCout << "index:";
|
||||
for (size_t i = 0; i < pim_index.size(); ++i)
|
||||
piCout << PICoutManipulators::Tab << i << ":" << pim_index[i].key << "->" << pim_index[i].index;
|
||||
}*/
|
||||
|
||||
protected:
|
||||
struct HashEntry {
|
||||
HashEntry(uint k = 0, const T & v = T()): key(k), value(v) {;}
|
||||
uint key;
|
||||
T value;
|
||||
bool operator ==(const HashEntry & s) const {return key == s.key;}
|
||||
bool operator !=(const HashEntry & s) const {return key != s.key;}
|
||||
bool operator <(const HashEntry & s) const {return key < s.key;}
|
||||
bool operator >(const HashEntry & s) const {return key > s.key;}
|
||||
};
|
||||
/*template <typename Key1, typename T1> friend PIByteArray & operator >>(PIByteArray & s, PIDeque<typename PIHash<Key1, T1>::HashEntry> & v);
|
||||
template <typename Key1, typename T1> friend PIByteArray & operator <<(PIByteArray & s, const PIDeque<typename PIHash<Key1, T1>::HashEntry> & v);
|
||||
|
||||
const value_type _pair(ssize_t index) const {
|
||||
if (index < 0 || index >= pim_index.size_s())
|
||||
return value_type();
|
||||
//piCout << "_pair" << index << pim_index[index].index;
|
||||
return value_type(pim_index[index].key, pih_content[pim_index[index].index]);
|
||||
}
|
||||
Key & _key(ssize_t index) {return pim_index[index].key;}
|
||||
T & _value(ssize_t index) {return pih_content[pim_index[index].index];}*/
|
||||
|
||||
inline size_t asize(size_t s) {
|
||||
if (s == 0) return 0;
|
||||
if (pih_content.size() + pih_content.size() >= s && pih_content.size() < s)
|
||||
return pih_content.size() + pih_content.size();
|
||||
ssize_t t = 0, s_ = s - 1;
|
||||
while (s_ >> t) ++t;
|
||||
return (1 << t);
|
||||
}
|
||||
int _index(const uint & k) const {
|
||||
return k % pih_content.size_s();
|
||||
}
|
||||
void _rehash(int ns) {
|
||||
ns = asize(ns);
|
||||
if (pih_content.size_s() == ns) return;
|
||||
PIVector<PIVector<HashEntry> > nhc;
|
||||
nhc.resize(ns);
|
||||
for (int i = 0; i < pih_content.size_s(); ++i) {
|
||||
for (int j = 0; j < pih_content[i].size_s(); ++j) {
|
||||
HashEntry & e(pih_content[i][j]);
|
||||
int ni = e.key % ns;
|
||||
nhc[ni] << e;
|
||||
}
|
||||
}
|
||||
pih_content.swap(nhc);
|
||||
}
|
||||
|
||||
PIVector<PIVector<HashEntry> > pih_content;
|
||||
};
|
||||
|
||||
|
||||
uint qHash(const PIString & v, uint seed = 0) {return piHash(v);}
|
||||
|
||||
|
||||
#include "logview.h"
|
||||
int main(int argc, char *argv[]) {
|
||||
QApplication a(argc, argv);
|
||||
#if QT_VERSION >= 0x050000
|
||||
a.setAttribute(Qt::AA_UseHighDpiPixmaps, true);
|
||||
#endif
|
||||
//################################
|
||||
/*QHash<PIString, PIString> h2;
|
||||
QMap<PIString, PIString> m2;
|
||||
PIString prefix = "1234567890";
|
||||
PITimeMeasurer tm;
|
||||
double el = 0.;
|
||||
|
||||
tm.reset();
|
||||
for (int i=0; i<10000; ++i) {
|
||||
h2[prefix + PIString::fromNumber(i)+"1234567890"] = PIString::fromNumber(randomi());
|
||||
}
|
||||
el = tm.elapsed_m(); piCout << el << h2.capacity();
|
||||
|
||||
tm.reset();
|
||||
for (int i=0; i<10000; ++i) {
|
||||
m2[prefix + PIString::fromNumber(i)+"1234567890"] = PIString::fromNumber(randomi());
|
||||
}
|
||||
el = tm.elapsed_m(); piCout << el;
|
||||
piCout << "*********";
|
||||
|
||||
PIString _s;
|
||||
tm.reset();
|
||||
for (int i=0; i<10000; ++i) {
|
||||
_s = h2.value(prefix + PIString::fromNumber(i)+"1234567890");
|
||||
}
|
||||
el = tm.elapsed_m(); piCout << el << h2.capacity();
|
||||
|
||||
tm.reset();
|
||||
for (int i=0; i<10000; ++i) {
|
||||
_s = m2.value(prefix + PIString::fromNumber(i)+"1234567890");
|
||||
}
|
||||
el = tm.elapsed_m(); piCout << el;
|
||||
|
||||
return 0;*/
|
||||
//################################
|
||||
//1245hghgfhfdgshrgnhdsgfhjshdszdgsdgnjedghrbnlcvleabjmbassfdggfhbnsjkgnfdvfdsdfojbwasv213443gr2t4sfth
|
||||
/*LogView lw;
|
||||
lw.setLogFont(QFont("dejavu sans mono", 9));
|
||||
lw.registerCategory("Warning", "Warning", QImage(":/icons/flame.png"), Qt::darkYellow);
|
||||
lw.registerCategory("Error", "Error", QImage(":/icons/dialog-cancel.png"), Qt::darkRed, true);
|
||||
//lw.setLinesLimit(12);
|
||||
lw.show();
|
||||
piForTimes(100)
|
||||
lw.addText(QString("row %1").arg(_i100));
|
||||
lw.addText("-- Up-to-date: C:/sdk/MinGW/x32/i686-w64-mingw32/include/qglengine/scene_tree.h");
|
||||
lw.addText("-- Up-to-date: C:/sdk/MinGW/x32/i686-w64-mingw32/include/qglengine/scene_tree.h");
|
||||
lw.addText("-- Up-to-date: C:/sdk/MinGW/x32/i686-w64-mingw32/include/qglengine/view_editor.h");
|
||||
lw.addText("-- Up-to-date: C:/sdk/MinGW/x32/i686-w64-mingw32/include/qglengine/material_map_editor.h\n"
|
||||
"-- Up-to-date: C:/sdk/MinGW/x32/i686-w64-mingw32/include/qglengine/materials_editor\n"
|
||||
"-- Up-to-date: C:/sdk/MinGW/x32/i686-w64-mingw32/include/qglengine/object_editor.h");
|
||||
lw.addText("[Warning] sdfkjhdfgj");
|
||||
lw.addText("[Error] gbflknwed");
|
||||
QLineEdit * le = new QLineEdit();
|
||||
QObject::connect(le, &QLineEdit::returnPressed, [&](){lw.addText(le->text());});
|
||||
le->show();
|
||||
return a.exec();*/
|
||||
|
||||
CDPultWindow w;
|
||||
w.show();
|
||||
if (a.arguments().size() > 1)
|
||||
w.loadFile(a.arguments()[1]);
|
||||
return a.exec();
|
||||
}
|
||||
#include <QApplication>
|
||||
#include "cdpultwindow.h"
|
||||
|
||||
template <typename Key, typename T>
|
||||
class PIHash {
|
||||
//template <typename Key1, typename T1> friend PIByteArray & operator >>(PIByteArray & s, PIHash<Key1, T1> & v);
|
||||
//template <typename Key1, typename T1> friend PIByteArray & operator <<(PIByteArray & s, const PIHash<Key1, T1> & v);
|
||||
public:
|
||||
PIHash() {;}
|
||||
PIHash(const PIHash<Key, T> & other) {*this = other;}
|
||||
virtual ~PIHash() {;}
|
||||
|
||||
PIHash<Key, T> & operator =(const PIHash<Key, T> & other) {
|
||||
if (this == &other) return *this;
|
||||
clear();
|
||||
pih_content = other.pih_content;
|
||||
return *this;
|
||||
}
|
||||
|
||||
typedef T mapped_type;
|
||||
typedef Key key_type;
|
||||
typedef PIPair<Key, T> value_type;
|
||||
/*
|
||||
class iterator {
|
||||
friend class PIHash<Key, T>;
|
||||
private:
|
||||
iterator(const PIHash<Key, T> * v, ssize_t p): parent(v), pos(p) {}
|
||||
const PIHash<Key, T> * parent;
|
||||
ssize_t pos;
|
||||
public:
|
||||
iterator(): parent(0), pos(0) {}
|
||||
const Key & key() const {return const_cast<PIHash<Key, T> * >(parent)->_key(pos);}
|
||||
T & value() {return const_cast<PIHash<Key, T> * >(parent)->_value(pos);}
|
||||
void operator ++() {++pos;}
|
||||
void operator ++(int) {++pos;}
|
||||
void operator --() {--pos;}
|
||||
void operator --(int) {--pos;}
|
||||
bool operator ==(const iterator & it) const {return (pos == it.pos);}
|
||||
bool operator !=(const iterator & it) const {return (pos != it.pos);}
|
||||
};
|
||||
|
||||
class reverse_iterator {
|
||||
friend class PIHash<Key, T>;
|
||||
private:
|
||||
reverse_iterator(const PIHash<Key, T> * v, ssize_t p): parent(v), pos(p) {}
|
||||
const PIHash<Key, T> * parent;
|
||||
ssize_t pos;
|
||||
public:
|
||||
reverse_iterator(): parent(0), pos(0) {}
|
||||
const Key & key() const {return const_cast<PIHash<Key, T> * >(parent)->_key(pos);}
|
||||
T & value() const {return const_cast<PIHash<Key, T> * >(parent)->_value(pos);}
|
||||
void operator ++() {--pos;}
|
||||
void operator ++(int) {--pos;}
|
||||
void operator --() {++pos;}
|
||||
void operator --(int) {++pos;}
|
||||
bool operator ==(const reverse_iterator & it) const {return (pos == it.pos);}
|
||||
bool operator !=(const reverse_iterator & it) const {return (pos != it.pos);}
|
||||
};
|
||||
*/
|
||||
class const_iterator {
|
||||
friend class PIHash<Key, T>;
|
||||
private:
|
||||
const_iterator(const PIHash<Key, T> * v, ssize_t p): parent(v), pos(p), bpos(0) {
|
||||
if (pos == 0) {
|
||||
pos = -1;
|
||||
nextPos();
|
||||
}
|
||||
}
|
||||
void nextPos() {
|
||||
while (++pos < parent->pih_content.size_s()) {
|
||||
if (!parent->pih_content[pos].isEmpty())
|
||||
return;
|
||||
}
|
||||
}
|
||||
const PIHash<Key, T> * parent;
|
||||
ssize_t pos, bpos;
|
||||
public:
|
||||
const_iterator(): parent(0), pos(0) {}
|
||||
//const value_type operator *() const {return parent->_pair(pos);}
|
||||
//const value_type* operator ->() const {cval = parent->_pair(pos); return &cval;}
|
||||
const Key & key() const {return const_cast<PIHash<Key, T> * >(parent)->pih_content[pos][bpos].key;}
|
||||
const T & value() const {return const_cast<PIHash<Key, T> * >(parent)->pih_content[pos][bpos].value;}
|
||||
void operator ++() {
|
||||
if (pos < parent->pih_content.size_s()) {
|
||||
if (bpos >= parent->pih_content[pos].size_s() - 1) {
|
||||
bpos = 0;
|
||||
nextPos();
|
||||
} else
|
||||
++bpos;
|
||||
} else {
|
||||
bpos = 0;
|
||||
++pos;
|
||||
}
|
||||
printf(" ++: %d %d\n", pos, bpos);
|
||||
}
|
||||
//void operator ++(int) {++pos;}
|
||||
void operator --() {
|
||||
--pos;
|
||||
}
|
||||
//void operator --(int) {--pos;}
|
||||
bool operator ==(const const_iterator & it) const {return (pos == it.pos && bpos == it.bpos);}
|
||||
bool operator !=(const const_iterator & it) const {return !(*this == it);}
|
||||
mutable value_type cval;
|
||||
};
|
||||
/*
|
||||
class const_reverse_iterator {
|
||||
friend class PIHash<Key, T>;
|
||||
private:
|
||||
const_reverse_iterator(const PIHash<Key, T> * v, ssize_t p): parent(v), pos(p) {}
|
||||
const PIHash<Key, T> * parent;
|
||||
ssize_t pos;
|
||||
public:
|
||||
const_reverse_iterator(): parent(0), pos(0) {}
|
||||
const value_type operator *() const {return parent->_pair(pos);}
|
||||
const value_type* operator ->() const {cval = parent->_pair(pos); return &cval;}
|
||||
void operator ++() {--pos;}
|
||||
void operator ++(int) {--pos;}
|
||||
void operator --() {++pos;}
|
||||
void operator --(int) {++pos;}
|
||||
bool operator ==(const const_reverse_iterator & it) const {return (pos == it.pos);}
|
||||
bool operator !=(const const_reverse_iterator & it) const {return (pos != it.pos);}
|
||||
mutable value_type cval;
|
||||
};
|
||||
*/
|
||||
//iterator begin() {return iterator(this, 0);}
|
||||
//iterator end() {return iterator(this, size());}
|
||||
const_iterator begin() const {return const_iterator(this, 0);}
|
||||
const_iterator end() const {return const_iterator(this, size());}
|
||||
const_iterator constBegin() const {return const_iterator(this, 0);}
|
||||
const_iterator constEnd() const {return const_iterator(this, size());}
|
||||
//reverse_iterator rbegin() {return reverse_iterator(this, size() - 1);}
|
||||
//reverse_iterator rend() {return reverse_iterator(this, -1);}
|
||||
//const_reverse_iterator rbegin() const {return const_reverse_iterator(this, size() - 1);}
|
||||
//const_reverse_iterator rend() const {return const_reverse_iterator(this, -1);}
|
||||
//const_reverse_iterator constRbegin() const {return const_reverse_iterator(this, size() - 1);}
|
||||
//const_reverse_iterator constRend() const {return const_reverse_iterator(this, -1);}
|
||||
|
||||
size_t size() const {return pih_content.size();}
|
||||
int size_s() const {return pih_content.size_s();}
|
||||
size_t length() const {return pih_content.size();}
|
||||
size_t capacity() const {return pih_content.size();}
|
||||
bool isEmpty() const {return (pih_content.size() == 0);}
|
||||
|
||||
T & operator [](const Key & key) {
|
||||
if (pih_content.isEmpty()) _rehash(1);
|
||||
uint k = piHash(key);
|
||||
int i = _index(k);
|
||||
if (i < pih_content.size_s()) {
|
||||
PIVector<HashEntry> & hv(pih_content[i]);
|
||||
if (hv.size_s() == 1) {
|
||||
if (hv[0].key == k)
|
||||
return hv[0].value;
|
||||
}
|
||||
for (int j = 0; j < hv.size_s(); ++j)
|
||||
if (hv[j].key == k)
|
||||
return hv[j].value;
|
||||
}
|
||||
if (pih_content[i].size_s() >= 4)
|
||||
_rehash(pih_content.size_s() * 2);
|
||||
i = _index(k);
|
||||
pih_content[i] << HashEntry(k);
|
||||
return pih_content[i].back().value;
|
||||
}
|
||||
const T operator [](const Key & key) const {return value(key);}
|
||||
T & at(const Key & key) {return (*this)[key];}
|
||||
const T at(const Key & key) const {return (*this)[key];}
|
||||
|
||||
PIHash<Key, T> & operator <<(const PIHash<Key, T> & other) {
|
||||
if (other.isEmpty()) return *this;
|
||||
for (int i = 0; i < other.pih_content.size_s(); ++i)
|
||||
for (int j = 0; j < other.pih_content[i].size_s(); ++j)
|
||||
insert(other.pih_content[i][j].key, other.pih_content[i][j].value);
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator ==(const PIHash<Key, T> & t) const {return (pih_content == t.pih_content);}
|
||||
bool operator !=(const PIHash<Key, T> & t) const {return (pih_content != t.pih_content);}
|
||||
bool contains(const Key & key) const {
|
||||
bool f(false);
|
||||
_find(key, f);
|
||||
return f;
|
||||
}
|
||||
|
||||
PIHash<Key, T> & reserve(size_t new_size) {_rehash(new_size); return *this;}
|
||||
|
||||
PIHash<Key, T> & remove(const Key & key) {
|
||||
uint k = piHash(key);
|
||||
int i = _index(k);
|
||||
if (i >= pih_content.size_s()) return *this;
|
||||
PIVector<HashEntry> & hv(pih_content[i]);
|
||||
for (int j = 0; j < hv.size_s(); ++j)
|
||||
if (hv[j].key == k) {
|
||||
hv.remove(j);
|
||||
--j;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
PIHash<Key, T> & erase(const Key & key) {return remove(key);}
|
||||
PIHash<Key, T> & clear() {pih_content.clear(); return *this;}
|
||||
|
||||
void swap(PIHash<Key, T> & other) {
|
||||
pih_content.swap(other.pih_content);
|
||||
}
|
||||
|
||||
PIHash<Key, T> & insert(const Key & key, const T & value) {
|
||||
(*this)[key] = value;
|
||||
return *this;
|
||||
}
|
||||
const T value(const Key & key, const T & default_ = T()) const {
|
||||
uint k = piHash(key);
|
||||
int i = _index(k);
|
||||
if (i >= pih_content.size_s()) return default_;
|
||||
const PIVector<HashEntry> & hv(pih_content[i]);
|
||||
for (int j = 0; j < hv.size_s(); ++j)
|
||||
if (hv[j].key == k)
|
||||
return hv[j].value;
|
||||
return default_;
|
||||
}
|
||||
PIVector<T> values() const {
|
||||
PIVector<T> ret;
|
||||
for (int i = 0; i < pih_content.size_s(); ++i)
|
||||
for (int j = 0; j < pih_content[i].size_s(); ++j)
|
||||
ret << pih_content[i][j].value;
|
||||
return ret;
|
||||
}
|
||||
/*Key key(const T & value_, const Key & default_ = Key()) const {
|
||||
for (int i = 0; i < pih_content.size_s(); ++i)
|
||||
for (int j = 0; j < pih_content[i].size_s(); ++j)
|
||||
if (pih_content[i][j].value == value_)
|
||||
return pih_content[i][j].key;
|
||||
return default_;
|
||||
}
|
||||
PIVector<Key> keys() const {
|
||||
PIVector<Key> ret;
|
||||
for (int i = 0; i < pih_content.size_s(); ++i)
|
||||
for (int j = 0; j < pih_content[i].size_s(); ++j)
|
||||
ret << pih_content[i][j].key;
|
||||
return ret;
|
||||
}*/
|
||||
|
||||
/*void dump() {
|
||||
piCout << "PIHash" << size() << "entries" << PICoutManipulators::NewLine << "content:";
|
||||
for (size_t i = 0; i < pih_content.size(); ++i)
|
||||
piCout << PICoutManipulators::Tab << i << ":" << pih_content[i];
|
||||
piCout << "index:";
|
||||
for (size_t i = 0; i < pim_index.size(); ++i)
|
||||
piCout << PICoutManipulators::Tab << i << ":" << pim_index[i].key << "->" << pim_index[i].index;
|
||||
}*/
|
||||
|
||||
protected:
|
||||
struct HashEntry {
|
||||
HashEntry(uint k = 0, const T & v = T()): key(k), value(v) {;}
|
||||
uint key;
|
||||
T value;
|
||||
bool operator ==(const HashEntry & s) const {return key == s.key;}
|
||||
bool operator !=(const HashEntry & s) const {return key != s.key;}
|
||||
bool operator <(const HashEntry & s) const {return key < s.key;}
|
||||
bool operator >(const HashEntry & s) const {return key > s.key;}
|
||||
};
|
||||
/*template <typename Key1, typename T1> friend PIByteArray & operator >>(PIByteArray & s, PIDeque<typename PIHash<Key1, T1>::HashEntry> & v);
|
||||
template <typename Key1, typename T1> friend PIByteArray & operator <<(PIByteArray & s, const PIDeque<typename PIHash<Key1, T1>::HashEntry> & v);
|
||||
|
||||
const value_type _pair(ssize_t index) const {
|
||||
if (index < 0 || index >= pim_index.size_s())
|
||||
return value_type();
|
||||
//piCout << "_pair" << index << pim_index[index].index;
|
||||
return value_type(pim_index[index].key, pih_content[pim_index[index].index]);
|
||||
}
|
||||
Key & _key(ssize_t index) {return pim_index[index].key;}
|
||||
T & _value(ssize_t index) {return pih_content[pim_index[index].index];}*/
|
||||
|
||||
inline size_t asize(size_t s) {
|
||||
if (s == 0) return 0;
|
||||
if (pih_content.size() + pih_content.size() >= s && pih_content.size() < s)
|
||||
return pih_content.size() + pih_content.size();
|
||||
ssize_t t = 0, s_ = s - 1;
|
||||
while (s_ >> t) ++t;
|
||||
return (1 << t);
|
||||
}
|
||||
int _index(const uint & k) const {
|
||||
return k % pih_content.size_s();
|
||||
}
|
||||
void _rehash(int ns) {
|
||||
ns = asize(ns);
|
||||
if (pih_content.size_s() == ns) return;
|
||||
PIVector<PIVector<HashEntry> > nhc;
|
||||
nhc.resize(ns);
|
||||
for (int i = 0; i < pih_content.size_s(); ++i) {
|
||||
for (int j = 0; j < pih_content[i].size_s(); ++j) {
|
||||
HashEntry & e(pih_content[i][j]);
|
||||
int ni = e.key % ns;
|
||||
nhc[ni] << e;
|
||||
}
|
||||
}
|
||||
pih_content.swap(nhc);
|
||||
}
|
||||
|
||||
PIVector<PIVector<HashEntry> > pih_content;
|
||||
};
|
||||
|
||||
|
||||
uint qHash(const PIString & v, uint seed = 0) {return piHash(v);}
|
||||
|
||||
|
||||
#include "logview.h"
|
||||
int main(int argc, char *argv[]) {
|
||||
QApplication a(argc, argv);
|
||||
#if QT_VERSION >= 0x050000
|
||||
a.setAttribute(Qt::AA_UseHighDpiPixmaps, true);
|
||||
#endif
|
||||
//################################
|
||||
/*QHash<PIString, PIString> h2;
|
||||
QMap<PIString, PIString> m2;
|
||||
PIString prefix = "1234567890";
|
||||
PITimeMeasurer tm;
|
||||
double el = 0.;
|
||||
|
||||
tm.reset();
|
||||
for (int i=0; i<10000; ++i) {
|
||||
h2[prefix + PIString::fromNumber(i)+"1234567890"] = PIString::fromNumber(randomi());
|
||||
}
|
||||
el = tm.elapsed_m(); piCout << el << h2.capacity();
|
||||
|
||||
tm.reset();
|
||||
for (int i=0; i<10000; ++i) {
|
||||
m2[prefix + PIString::fromNumber(i)+"1234567890"] = PIString::fromNumber(randomi());
|
||||
}
|
||||
el = tm.elapsed_m(); piCout << el;
|
||||
piCout << "*********";
|
||||
|
||||
PIString _s;
|
||||
tm.reset();
|
||||
for (int i=0; i<10000; ++i) {
|
||||
_s = h2.value(prefix + PIString::fromNumber(i)+"1234567890");
|
||||
}
|
||||
el = tm.elapsed_m(); piCout << el << h2.capacity();
|
||||
|
||||
tm.reset();
|
||||
for (int i=0; i<10000; ++i) {
|
||||
_s = m2.value(prefix + PIString::fromNumber(i)+"1234567890");
|
||||
}
|
||||
el = tm.elapsed_m(); piCout << el;
|
||||
|
||||
return 0;*/
|
||||
//################################
|
||||
//1245hghgfhfdgshrgnhdsgfhjshdszdgsdgnjedghrbnlcvleabjmbassfdggfhbnsjkgnfdvfdsdfojbwasv213443gr2t4sfth
|
||||
/*LogView lw;
|
||||
lw.setLogFont(QFont("dejavu sans mono", 9));
|
||||
lw.registerCategory("Warning", "Warning", QImage(":/icons/flame.png"), Qt::darkYellow);
|
||||
lw.registerCategory("Error", "Error", QImage(":/icons/dialog-cancel.png"), Qt::darkRed, true);
|
||||
//lw.setLinesLimit(12);
|
||||
lw.show();
|
||||
piForTimes(100)
|
||||
lw.addText(QString("row %1").arg(_i100));
|
||||
lw.addText("-- Up-to-date: C:/sdk/MinGW/x32/i686-w64-mingw32/include/qglengine/scene_tree.h");
|
||||
lw.addText("-- Up-to-date: C:/sdk/MinGW/x32/i686-w64-mingw32/include/qglengine/scene_tree.h");
|
||||
lw.addText("-- Up-to-date: C:/sdk/MinGW/x32/i686-w64-mingw32/include/qglengine/view_editor.h");
|
||||
lw.addText("-- Up-to-date: C:/sdk/MinGW/x32/i686-w64-mingw32/include/qglengine/material_map_editor.h\n"
|
||||
"-- Up-to-date: C:/sdk/MinGW/x32/i686-w64-mingw32/include/qglengine/materials_editor\n"
|
||||
"-- Up-to-date: C:/sdk/MinGW/x32/i686-w64-mingw32/include/qglengine/object_editor.h");
|
||||
lw.addText("[Warning] sdfkjhdfgj");
|
||||
lw.addText("[Error] gbflknwed");
|
||||
QLineEdit * le = new QLineEdit();
|
||||
QObject::connect(le, &QLineEdit::returnPressed, [&](){lw.addText(le->text());});
|
||||
le->show();
|
||||
return a.exec();*/
|
||||
|
||||
CDPultWindow w;
|
||||
w.show();
|
||||
if (a.arguments().size() > 1)
|
||||
w.loadFile(a.arguments()[1]);
|
||||
return a.exec();
|
||||
}
|
||||
10
piqt/utils/piconnedit/CMakeLists.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
project(piconnedit)
|
||||
if(APPLE)
|
||||
set(APP_ICON "")
|
||||
elseif(WIN32)
|
||||
set(APP_ICON "")
|
||||
else()
|
||||
set(APP_ICON "")
|
||||
endif()
|
||||
set(APP_INFO "PIConnection GUI editor")
|
||||
piqt_application(${PROJECT_NAME} "Gui;Widgets" "qad_utils;qad_widgets;qad_blockview;piqt_utils")
|
||||
4
piqt/utils/piconnedit/piconnedit.qrc
Normal file
@@ -0,0 +1,4 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
</qresource>
|
||||
</RCC>
|
||||
10
piqt/utils/pidumper/CMakeLists.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
project(pidumper)
|
||||
if(APPLE)
|
||||
set(APP_ICON "")
|
||||
elseif(WIN32)
|
||||
set(APP_ICON "")
|
||||
else()
|
||||
set(APP_ICON "")
|
||||
endif()
|
||||
set(APP_INFO "PIConnection GUI editor")
|
||||
piqt_application(${PROJECT_NAME} "Gui;Widgets" "qad_utils;qad_widgets;piqt_utils")
|
||||
13
piqt/utils/piintrospector/CMakeLists.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
project(piintrospector)
|
||||
if(APPLE)
|
||||
set(APP_ICON "")
|
||||
elseif(WIN32)
|
||||
set(APP_ICON "")
|
||||
else()
|
||||
set(APP_ICON "")
|
||||
endif()
|
||||
set(APP_INFO "PIConnection GUI editor")
|
||||
include(PIPMacros)
|
||||
set(PII_ROOT "${ROOT_DIR}/pip/libs/main/introspection")
|
||||
pip_code_model(CCM "${PII_ROOT}/piintrospection_server_p.h" "${PII_ROOT}/piintrospection_threads_p.h" OPTIONS "-DPIP_EXPORT" "-Es")
|
||||
piqt_application(${PROJECT_NAME} "Gui;Widgets" "qad_utils;qad_widgets;qad_application;piqt_utils" ${CCM})
|
||||
@@ -1,73 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
project(piqt_utils)
|
||||
set(PIQT_UTILS_UTILS 1)
|
||||
if(LIBPROJECT)
|
||||
include(PIPMacros)
|
||||
include(SDKMacros)
|
||||
set(PIQT_UTILS_UTILS ${UTILS})
|
||||
else()
|
||||
find_package(PIP REQUIRED)
|
||||
option(LIB "System install" 0)
|
||||
option(DEBUG "Build with -g3" 0)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall")
|
||||
if(DEBUG)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
|
||||
endif()
|
||||
endif()
|
||||
set(LIBTYPE SHARED)
|
||||
if(DEFINED ENV{QNX_HOST})
|
||||
set(LIBTYPE STATIC)
|
||||
endif()
|
||||
find_package(QAD REQUIRED)
|
||||
list(APPEND QT_MULTILIB_LIST ${PROJECT_NAME})
|
||||
set(QT_MULTILIB_LIST ${QT_MULTILIB_LIST} PARENT_SCOPE)
|
||||
include_directories(${PIP_INCLUDES} ${QAD_INCLUDES})
|
||||
file(GLOB SRC "*.h" "*.cpp" "*.ui" "*.qrc" "lang/*.ts")
|
||||
pip_code_model(CCM "../pip/libs/main/io_devices/piiodevice.h" "../pip/libs/main/io_utils/pipacketextractor.h" OPTIONS "-DPIP_EXPORT" "-Es")
|
||||
find_qt(${QtVersions} Core Gui)
|
||||
qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM)
|
||||
qt_add_library(${PROJECT_NAME} ${LIBTYPE} out_CPP CCM)
|
||||
qt_target_link_libraries(${PROJECT_NAME} pip qad_utils qad_widgets qad_blockview piqt)
|
||||
message(STATUS "Building ${PROJECT_NAME}")
|
||||
|
||||
if (LIBPROJECT)
|
||||
foreach(_v ${_QT_VERSIONS_})
|
||||
if (LOCAL_FOUND${_v})
|
||||
add_dependencies(piqt_utils${_v} pip_cmg)
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED ENV{QNX_HOST})
|
||||
if (PIQT_UTILS_UTILS)
|
||||
add_subdirectory(piconnedit)
|
||||
add_subdirectory(pidumper)
|
||||
add_subdirectory(piintrospector)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(LIBPROJECT)
|
||||
sdk_install("pip" "${PROJECT_NAME}" "${out_HDR}" "${out_QM}")
|
||||
else()
|
||||
if(LIB)
|
||||
if(WIN32)
|
||||
install(FILES ${out_HDR} DESTINATION ${MINGW_INCLUDE}/pip)
|
||||
qt_install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION ${MINGW_LIB})
|
||||
qt_install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${MINGW_BIN})
|
||||
qt_install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION QtBin)
|
||||
else()
|
||||
install(FILES ${out_HDR} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/pip)
|
||||
qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
|
||||
endif()
|
||||
message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"")
|
||||
else()
|
||||
if(WIN32)
|
||||
qt_install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
|
||||
qt_install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION lib)
|
||||
else()
|
||||
qt_install(TARGETS ${PROJECT_NAME} DESTINATION lib)
|
||||
endif()
|
||||
install(FILES ${out_HDR} DESTINATION include/pip)
|
||||
message(STATUS "Install ${PROJECT_NAME} to local \"bin\", \"lib\" and \"include\"")
|
||||
endif()
|
||||
endif()
|
||||
@@ -1,165 +0,0 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
@@ -1,23 +0,0 @@
|
||||
project(piconnedit)
|
||||
file(GLOB SRC "*.h" "*.cpp" "*.ui" "*.qrc" "lang/*.ts")
|
||||
find_qt(${QtVersions} Core Gui)
|
||||
qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM)
|
||||
qt_add_executable(${PROJECT_NAME} WIN32 out_CPP)
|
||||
qt_target_link_libraries(${PROJECT_NAME} pip qad_utils qad_widgets piqt_utils)
|
||||
qt_target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../")
|
||||
message(STATUS "Building ${PROJECT_NAME}")
|
||||
if(LIB)
|
||||
if(WIN32)
|
||||
qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN})
|
||||
else()
|
||||
if (DEFINED ANDROID_PLATFORM)
|
||||
qt_install(TARGETS ${PROJECT_NAME} DESTINATION ${ANDROID_SYSTEM_LIBRARY_PATH}/usr/bin)
|
||||
else()
|
||||
qt_install(TARGETS ${PROJECT_NAME} DESTINATION /usr/local/bin)
|
||||
endif()
|
||||
endif()
|
||||
#message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"")
|
||||
else()
|
||||
qt_install(TARGETS ${PROJECT_NAME} DESTINATION bin)
|
||||
#message(STATUS "Install ${PROJECT_NAME} to local \"bin\"")
|
||||
endif()
|
||||
|
Before Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 158 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 626 B |
|
Before Width: | Height: | Size: 588 B |
|
Before Width: | Height: | Size: 433 B |
|
Before Width: | Height: | Size: 525 B |
|
Before Width: | Height: | Size: 484 B |
|
Before Width: | Height: | Size: 235 B |
|
Before Width: | Height: | Size: 259 B |
|
Before Width: | Height: | Size: 326 B |