diff --git a/CMakeLists.txt b/CMakeLists.txt index 27bc7a4..8b0eb17 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,7 @@ if (DEBUG) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3") endif () +include(SDKMacros.cmake) set(PIP_LIBRARY pip) set(PIP_FOLDERS "." "core" "containers" "thread" "system" "io" "console" "math" "code" "geo" "resources" "opencl") diff --git a/cd_utils/CMakeLists.txt b/cd_utils/CMakeLists.txt index 673caaf..7c0240a 100644 --- a/cd_utils/CMakeLists.txt +++ b/cd_utils/CMakeLists.txt @@ -28,28 +28,23 @@ target_link_libraries(${PROJECT_NAME} ${PIP_LIBRARY}) add_executable(cdutilstest "cdutilstest.cpp" "cdtest.h") target_link_libraries(cdutilstest ${PIP_LIBRARY} ${PROJECT_NAME}) message(STATUS "Building ${PROJECT_NAME}") -#if (LIBPROJECT) -# include(SDKMacros) -# sdk_install("" "${PROJECT_NAME}" "${HDRS_UTILS}") -#else() - if(LIB) - if(WIN32) - set(CMAKE_INSTALL_PREFIX ${MINGW_DIR}) - install(FILES ${HDRS_UTILS} DESTINATION ${MINGW_INCLUDE}) - install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_LIB}) - install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN}) - else() - if(APPLE) - set(CMAKE_INSTALL_PREFIX /usr/local) - else() - set(CMAKE_INSTALL_PREFIX /usr) - endif() - install(FILES ${HDRS_UTILS} DESTINATION ${CMAKE_INSTALL_PREFIX}/include) - install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) - endif() - #message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") +if(LIB) + if(WIN32) + set(CMAKE_INSTALL_PREFIX ${MINGW_DIR}) + install(FILES ${HDRS_UTILS} DESTINATION ${MINGW_INCLUDE}) + install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_LIB}) + install(TARGETS ${PROJECT_NAME} DESTINATION ${MINGW_BIN}) else() - install(TARGETS ${PROJECT_NAME} DESTINATION bin) - #message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") + if(APPLE) + set(CMAKE_INSTALL_PREFIX /usr/local) + else() + set(CMAKE_INSTALL_PREFIX /usr) + endif() + install(FILES ${HDRS_UTILS} DESTINATION ${CMAKE_INSTALL_PREFIX}/include) + install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) endif() -#endif() + #message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") +else() + install(TARGETS ${PROJECT_NAME} DESTINATION bin) + #message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") +endif() diff --git a/piqt/CMakeLists.txt b/piqt/CMakeLists.txt index b44861a..58c4c55 100644 --- a/piqt/CMakeLists.txt +++ b/piqt/CMakeLists.txt @@ -21,7 +21,6 @@ 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) - include(SDKMacros) sdk_install("pip" "${PROJECT_NAME}" "${out_HDR}" "${out_QM}") else() if(LIB) diff --git a/qad/graphic/graphic.cpp b/qad/graphic/graphic.cpp index 85b7ac6..1954126 100644 --- a/qad/graphic/graphic.cpp +++ b/qad/graphic/graphic.cpp @@ -13,34 +13,6 @@ __GraphicRegistrator__ __graphic_registrator__; -ELineEdit::ELineEdit(QWidget * parent): CLineEdit(parent) { - last_ret = complexd_0; - is_auto = false; - is_reset = true; - connect(this, SIGNAL(editingFinished()), this, SLOT(calculate())); - connect(this, SIGNAL(cleared()), this, SLOT(toDefaultClicked())); -} - - -void ELineEdit::wheelEvent(QWheelEvent * e) { - double mul = 1.1; - if (e->delta() < 0) mul = 0.9; - CLineEdit::setText(QString::number(last_ret.real() * mul).toUpper()); - calculate(); -} - - -void ELineEdit::calculate() { - evaluator.check(text().replace(",", ".")); - if (!evaluator.isCorrect()) return; - is_reset = false; - last_ret = evaluator.evaluate(); - CLineEdit::setText(QString::number(last_ret.real()).toUpper()); - emit valueChanged(last_ret.real()); -} - - - Graphic::Graphic(QWidget * parent): QFrame(parent), line_x_min(this), line_x_max(this), line_y_min(this), line_y_max(this) { QTranslator * trans = new QTranslator(); trans->load(":/lang/qad_graphic_" + QLocale::system().name().left(2)); @@ -66,6 +38,10 @@ Graphic::Graphic(QWidget * parent): QFrame(parent), line_x_min(this), line_x_max LN2 = qLn(2.); LN5 = qLn(5.); LN10 = qLn(10.); + line_x_min.setClearButtonVisible(true); + line_x_max.setClearButtonVisible(true); + line_y_min.setClearButtonVisible(true); + line_y_max.setClearButtonVisible(true); connect(&line_x_min, SIGNAL(valueChanged(double)), this, SLOT(lineXMinChanged(double))); connect(&line_x_max, SIGNAL(valueChanged(double)), this, SLOT(lineXMaxChanged(double))); connect(&line_y_min, SIGNAL(valueChanged(double)), this, SLOT(lineYMinChanged(double))); @@ -1249,26 +1225,44 @@ void Graphic::swapToBuffer() { void Graphic::setRectToLines() { is_lines_update = true; - line_x_min.is_auto = line_x_max.is_auto = line_y_min.is_auto = line_y_max.is_auto = true; + //line_x_min.is_auto = line_x_max.is_auto = line_y_min.is_auto = line_y_max.is_auto = true; //qDebug() << "set to lines" << selrect; - line_x_min.is_reset = line_x_max.is_reset = line_y_min.is_reset = line_y_max.is_reset = isFit; - if (!line_x_min.hasFocus()) line_x_min.setValue(selrect.left()); - if (!line_x_max.hasFocus()) line_x_max.setValue(selrect.right()); - if (!line_y_min.hasFocus()) line_y_min.setValue(selrect.bottom()); - if (!line_y_max.hasFocus()) line_y_max.setValue(selrect.top()); - if (!isFit) { + //line_x_min.is_reset = line_x_max.is_reset = line_y_min.is_reset = line_y_max.is_reset = isFit; + if (line_x_min.isVisible() && line_x_max.isVisible() && line_y_min.isVisible() && line_y_max.isVisible()) { + line_x_min.blockSignals(true); line_x_max.blockSignals(true); line_y_min.blockSignals(true); line_y_max.blockSignals(true); + if (!line_x_min.hasFocus()) { + if (isFit) line_x_min.setValue(grect.left()); + else line_x_min.setValue(selrect.left()); + } + if (!line_x_max.hasFocus()) { + if(isFit) line_x_max.setValue(grect.right()); + else line_x_max.setValue(selrect.right()); + } + if (!line_y_min.hasFocus()) { + if(isFit) line_y_min.setValue(grect.bottom()); + else line_y_min.setValue(selrect.bottom()); + } + if (!line_y_max.hasFocus()) { + if(isFit) line_y_max.setValue(grect.top()); + else line_y_max.setValue(selrect.top()); + } line_x_min.setDefaultText(QString::number(grect.left()).toUpper()); line_x_max.setDefaultText(QString::number(grect.right()).toUpper()); line_y_min.setDefaultText(QString::number(grect.bottom()).toUpper()); line_y_max.setDefaultText(QString::number(grect.top()).toUpper()); + line_x_min.blockSignals(false); line_x_max.blockSignals(false); line_y_min.blockSignals(false); line_y_max.blockSignals(false); +// if(isFit) { +// line_y_min.setValue(grect.left()); +// line_y_max.setValue(grect.left()); +// } } - line_x_min.is_auto = line_x_max.is_auto = line_y_min.is_auto = line_y_max.is_auto = false; + //line_x_min.is_auto = line_x_max.is_auto = line_y_min.is_auto = line_y_max.is_auto = false; is_lines_update = false; } void Graphic::checkLines() { - isFit = (line_x_min.isDefault() && line_x_max.isDefault() && line_y_min.isDefault() && line_y_max.isDefault()); + isFit = (line_x_min.isCleared() && line_x_max.isCleared() && line_y_min.isCleared() && line_y_max.isCleared()); update(true); } @@ -1549,6 +1543,7 @@ void Graphic::setBorderInputsVisible(bool visible) { ui->widgetLX->setVisible(visible); ui->widgetLY->setVisible(visible); ui->checkBorderInputs->setChecked(visible); + if (visible) setRectToLines(); } diff --git a/qad/graphic/graphic.h b/qad/graphic/graphic.h index e14b520..f277e07 100644 --- a/qad/graphic/graphic.h +++ b/qad/graphic/graphic.h @@ -16,34 +16,12 @@ #include #include #include "graphic_conf.h" -#include "clineedit.h" -#include "qpievaluator.h" +#include "evalspinbox.h" QT_BEGIN_HEADER QT_BEGIN_NAMESPACE -class ELineEdit: public CLineEdit { - Q_OBJECT -public: - explicit ELineEdit(QWidget * parent = 0); - //void setText(const QString & v) {if (!is_auto) is_reset = false; CLineEdit::setText(v); setDefaultText(v, is_reset); last_ret = complexd(v.toDouble(), 0.); emit valueChanged(last_ret.real());} - void setValue(const int & v) {if (is_reset) setDefaultText(QString::number(v).toUpper(), is_reset); else setText(QString::number(v).toUpper()); last_ret = complexd(v, 0.); if (!is_auto) emit valueChanged(last_ret.real());} - void setValue(const double & v) {if (is_reset) setDefaultText(QString::number(v).toUpper(), is_reset); else setText(QString::number(v).toUpper()); last_ret = complexd(v, 0.); if (!is_auto) emit valueChanged(last_ret.real());} - double value() const {return last_ret.real();} - bool isDefault() const {return !cw->isVisible();} - bool is_reset, is_auto; -protected: - void wheelEvent(QWheelEvent * e); - QPIEvaluator evaluator; - complexd last_ret; -private slots: - void toDefaultClicked() {is_reset = true; calculate();} - void calculate(); -signals: - void valueChanged(double value); -}; - namespace Ui { class Graphic; @@ -381,7 +359,7 @@ protected: Graphic::Buttons buttons_; Graphic::Alignment align; GraphicConf * conf; - ELineEdit line_x_min, line_x_max, line_y_min, line_y_max; + EvalSpinBox line_x_min, line_x_max, line_y_min, line_y_max; QTime tm; QIcon icon_exp_x, icon_exp_y, icon_exp_sx, icon_exp_sy; QImage icon_pause_b, icon_pause_f; diff --git a/qad/graphic/graphic_conf.ui b/qad/graphic/graphic_conf.ui index 1d32b42..7b26a2a 100644 --- a/qad/graphic/graphic_conf.ui +++ b/qad/graphic/graphic_conf.ui @@ -193,6 +193,9 @@ 2 + + 999.990000000000009 + 1.000000000000000 @@ -265,22 +268,6 @@ - - - - 3 - - - 0.001000000000000 - - - 9999999.000000000000000 - - - 50.000000000000000 - - - @@ -295,22 +282,6 @@ - - - - 3 - - - 0.001000000000000 - - - 9999999.000000000000000 - - - 30.000000000000000 - - - @@ -331,6 +302,32 @@ + + + + 30 + + + 30 + + + true + + + + + + + 50 + + + 50 + + + true + + + @@ -474,6 +471,11 @@ colorChanged(QColor) + + EvalSpinBox + QWidget +
evalspinbox.h
+
checkAAlias diff --git a/qad/icons/dialog-warning.png b/qad/icons/dialog-warning.png new file mode 100644 index 0000000..c62afad Binary files /dev/null and b/qad/icons/dialog-warning.png differ diff --git a/qad/icons/evalspinbox.png b/qad/icons/evalspinbox.png new file mode 100644 index 0000000..5c80df1 Binary files /dev/null and b/qad/icons/evalspinbox.png differ diff --git a/qad/widgets/clineedit.h b/qad/widgets/clineedit.h index dcf6b72..2ee32b1 100644 --- a/qad/widgets/clineedit.h +++ b/qad/widgets/clineedit.h @@ -16,7 +16,7 @@ public: explicit CLineEdit(QWidget * parent = 0); ~CLineEdit() {delete cw;} - inline QString defaultText() const {return dt;} + const QString & defaultText() const {return dt;} protected: QWidget * cw; diff --git a/qad/widgets/evalspinbox.cpp b/qad/widgets/evalspinbox.cpp new file mode 100644 index 0000000..eb14d41 --- /dev/null +++ b/qad/widgets/evalspinbox.cpp @@ -0,0 +1,303 @@ +#include "evalspinbox.h" +#include +#include +#include +#include +#include +#include +#include +#include "qad_types.h" + + +EvalSpinBox::EvalSpinBox(QWidget * parent): QAbstractSpinBox(parent) { + status = new QWidget(lineEdit()); + cw = new QWidget(lineEdit()); + label = new QLabel(lineEdit()); +// label->hide(); + clear_im.load(":/icons/edit-clear-locationbar-rtl.png"); + icon_ok.load(":/icons/dialog-ok-apply.png"); + icon_fail.load(":/icons/dialog-warning.png"); + icon_calc.load(":/icons/tools-wizard.png"); + icon = icon_ok; + status->setCursor(Qt::ArrowCursor); + status->setToolTip("OK -> 0"); + status->hide(); + cw->setCursor(Qt::ArrowCursor); + cw->setToolTip(tr("Clear")); + cw->hide(); + cw_visible = false; + //lineEdit()->setStyleSheet("color: darkgreen;"); + //lineEdit()->setText(eval.expression() + " -> " + QString::number(value(), 'G', 10)); + cw->installEventFilter(this); + status->installEventFilter(this); + connect(lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(textChanged_(QString))); + connect(this, SIGNAL(editingFinished()), this, SLOT(setExpression_())); + label->setText("0"); + //connect(cw, SIGNAL(mouseReleaseEvent(QMouseEvent * )), this, SLOT(clearMouseRelease(QMouseEvent * ))); +} + + +EvalSpinBox::~EvalSpinBox() { + delete cw; + delete status; + delete label; +} + + +bool EvalSpinBox::eventFilter(QObject * o, QEvent * e) { + switch (e->type()) { + case QEvent::MouseButtonRelease: + if (o == cw) clearMouseRelease((QMouseEvent * )e); + break; + case QEvent::Paint: + if (o == status) statusPaintEvent(); + if (o == cw) cwPaintEvent(); + break; + default : break; + } + return QAbstractSpinBox::eventFilter(o, e); +} + + +void EvalSpinBox::resizeIcons() { + int is = fontHeight(); + int tm = (lineEdit()->height() - is + 1) / 2; + QStyleOptionFrame so; + so.initFrom(lineEdit()); + QRect r = style()->subElementRect(QStyle::SE_LineEditContents, &so, lineEdit()); + label->setGeometry(r.x() + 2, r.y() + (r.height() - fontMetrics().height() + 1) / 2, lineEdit()->width() - 2*tm - (is * 1.2) * ((status->isVisible() ? 1 : 0) + (cw->isVisible() ? 1 : 0)), lineEdit()->height() - 2*tm); + status->setGeometry(lineEdit()->width() - (is + tm) * (cw->isVisible() ? 2 : 1), tm, is, is); + cw->setGeometry(lineEdit()->width() - (is + tm) * 1, tm, is, is); + lineEdit()->setTextMargins(0, 0, (is * 1.2) * ((status->isVisible() ? 1 : 0) + (cw->isVisible() ? 1 : 0)), 0); +} + + +void EvalSpinBox::resizeEvent(QResizeEvent * e) { + QAbstractSpinBox::resizeEvent(e); + resizeIcons(); +} + + +void EvalSpinBox::changeEvent(QEvent * e) { + if (e->type() == QEvent::LanguageChange) { + cw->setToolTip(tr("Clear")); + return; + } + QAbstractSpinBox::changeEvent(e); +} + + +void EvalSpinBox::cwPaintEvent() { + QPainter p(cw); + p.setRenderHint(QPainter::SmoothPixmapTransform); + p.drawImage(cw->rect(), clear_im); +} + + +void EvalSpinBox::statusPaintEvent() { + QPainter p(status); + p.setRenderHint(QPainter::SmoothPixmapTransform); + p.drawImage(status->rect(), icon); +} + + +void EvalSpinBox::clearMouseRelease(QMouseEvent * e) { + if (cw->rect().contains(e->pos())) clear(); +} + + +void EvalSpinBox::textChanged_(const QString & text) { + double pv = value(); + QString t = text; + cw->setVisible(text != dt && cw_visible); + bool td = false; + if (t.endsWith('=')) { + td = true; + t.chop(1); + } + bool ok = eval.check(t); + if (ok) { + eval.evaluate(); + if (td) { + icon = icon_calc; + status->setToolTip("Enter to calc -> "+QString::number(value(), 'G', 10)); + } else { + icon = icon_ok; + status->setToolTip("OK -> "+QString::number(value(), 'G', 10)); + } +// qDebug() << "value =" << value(); + if (pv != value()) emit valueChanged(value()); + } else { + icon = icon_fail; + status->setToolTip(eval.error()); + } + resizeIcons(); +} + + +void EvalSpinBox::setExpression_() { + bool td = false; + double pv = value(); + QString t = text(); + if (t.endsWith('=')) { + td = true; + t.chop(1); + } + if (eval.check(t)) { + if (eval.expression() == "0") lineEdit()->clear(); + else lineEdit()->setText(eval.expression()); + eval.evaluate(); + if (td) lineEdit()->setText(QString::number(value(), 'G', 10)); + status->setToolTip("OK -> " + QString::number(value(), 'G', 10)); + icon = icon_ok; + } else { + icon = icon_fail; + status->setToolTip(eval.error()); +// qDebug() << eval.expression(); + } + if (!label->isHidden()) { + if (eval.expression() != QString::number(value(), 'G', 10) && eval.expression() != QString::number(value(), 'G', 11) && eval.isCorrect()) + label->setText("

" + eval.expression() + " -> " + QString::number(value(), 'G', 10) + "

"); + else label->setText(eval.expression()); + lineEdit()->blockSignals(true); + if (!eval.isCorrect()) { + lineEdit()->setStyleSheet("color: darkred;"); + status->show(); + } else { + lineEdit()->setStyleSheet("color: black;"); + status->hide(); + } + // lineEdit()->setText(eval.expression() + " -> " + QString::number(value(), 'G', 10)); + lineEdit()->setText(""); + lineEdit()->blockSignals(false); + } + +// qDebug() << "value =" << value(); + if (pv != value()) emit valueChanged(value()); +} + + +void EvalSpinBox::setExpression(const QString & expr) { + lineEdit()->setText(expr); + //if (eval.expression() == "0") lineEdit()->clear(); + cw->setVisible(text() != dt && cw_visible); + setExpression_(); +} + + +void EvalSpinBox::setValue(double val) { + lineEdit()->setText(QString::number(val)); + //if (val == 0) lineEdit()->clear(); + cw->setVisible(text() != dt && cw_visible); + setExpression_(); +} + + +void EvalSpinBox::stepBy(int steps) { + QString t = text(); + if (eval.check(t)) { + t = eval.expression(); + QRegExp re("(\\-?\\d+)"); + int pos = 0; + if ((pos = re.indexIn(t)) != -1) { + double v = t.mid(pos, re.matchedLength()).toDouble(); + v += steps; + t.remove(pos, re.matchedLength()); + t.insert(pos, QString::number(v)); + } else { + double v = steps; + t = QString::number(v) + t; + } + eval.check(t); + lineEdit()->setText(eval.expression()); + } +} + + +void EvalSpinBox::clear() { + lineEdit()->setText(dt); + setExpression_(); + cw->hide(); + resizeIcons(); + emit cleared(); +} + + +double EvalSpinBox::value() const { + if (eval.isCorrect()) { + return eval.lastResult().real(); + } + return 0; +} + + +const QString & EvalSpinBox::expression() const { + return eval.expression(); +} + + +bool EvalSpinBox::isCleared() const { + return (dt == eval.expression() || (value() == 0 && dt.isEmpty())); +} + + +QSize EvalSpinBox::sizeHint() const { + QSize s = QAbstractSpinBox::sizeHint(); + s.setWidth(120); + return s; +} + + +QAbstractSpinBox::StepEnabled EvalSpinBox::stepEnabled() const { + return StepUpEnabled | StepDownEnabled; +} + + +void EvalSpinBox::focusInEvent(QFocusEvent * event) { +// qDebug() << "focus_in"; + label->hide(); + status->show(); + lineEdit()->blockSignals(true); + lineEdit()->setStyleSheet("color: black;"); + if (eval.expression() != "0") lineEdit()->setText(eval.expression()); + lineEdit()->blockSignals(false); + QAbstractSpinBox::focusInEvent(event); + resizeIcons(); +} + + +void EvalSpinBox::focusOutEvent(QFocusEvent * event) { + QAbstractSpinBox::focusOutEvent(event); +// qDebug() << eval.expression() << QString::number(value(), 'G', 10); + if (eval.expression() != QString::number(value(), 'G', 10) && eval.expression() != QString::number(value(), 'G', 11) && eval.isCorrect()) + label->setText("

" + eval.expression() + " -> " + QString::number(value(), 'G', 10) + "

"); + else label->setText(eval.expression()); + label->show(); + lineEdit()->blockSignals(true); + if (!eval.isCorrect()) lineEdit()->setStyleSheet("color: darkred;"); + else status->hide(); +// lineEdit()->setText(eval.expression() + " -> " + QString::number(value(), 'G', 10)); + lineEdit()->clear(); + lineEdit()->blockSignals(false); + resizeIcons(); +} + + +void EvalSpinBox::setDefaultText(const QString & t) { +// bool def = (!cw->isHidden()); + dt = t; +// if (def) { +// lineEdit()->setText(dt); +// setExpression_(); +// } + //if (t == eval.expression() || (value() == 0 && t.isEmpty())) clear(); + cw->setVisible((eval.expression() != dt || (dt.isEmpty() && eval.expression() == "0")) && cw_visible); + resizeIcons(); +} + + +void EvalSpinBox::setClearButtonVisible(bool visible) { + cw_visible = visible; + cw->setVisible((eval.expression() != dt || (dt.isEmpty() && eval.expression() == "0")) && cw_visible); + resizeIcons(); +} diff --git a/qad/widgets/evalspinbox.h b/qad/widgets/evalspinbox.h new file mode 100644 index 0000000..a78b092 --- /dev/null +++ b/qad/widgets/evalspinbox.h @@ -0,0 +1,77 @@ +#ifndef EVALSPINBOX_H +#define EVALSPINBOX_H + +#include +#include +#include "qpievaluator.h" + +class QLabel; + +class EvalSpinBox: public QAbstractSpinBox +{ + Q_OBJECT + Q_PROPERTY(double value READ value WRITE setValue NOTIFY valueChanged USER true) + Q_PROPERTY(QString expression READ expression WRITE setExpression USER true) + Q_PROPERTY(QString defaultText READ defaultText WRITE setDefaultText) + Q_PROPERTY(bool clearButtonVisible READ isClearButtonVisible WRITE setClearButtonVisible) + +public: + explicit EvalSpinBox(QWidget * parent = 0); + ~EvalSpinBox(); + + double value() const; + const QString & expression() const; + const QString & defaultText() const {return dt;} + bool isClearButtonVisible() const {return cw_visible;} + bool isCleared() const; + + +protected: + QWidget * status; + QWidget * cw; + QPIEvaluator eval; + QLabel * label; + QImage icon_ok; + QImage icon_fail; + QImage icon_calc; + QImage icon; + QImage clear_im; + QString dt; + bool cw_visible; + +private: + bool eventFilter(QObject * o, QEvent * e); + void resizeEvent(QResizeEvent * ); + void changeEvent(QEvent * e); + void statusPaintEvent(); + void cwPaintEvent(); + void resizeIcons(); + +private slots: + void clearMouseRelease(QMouseEvent * e); + void textChanged_(const QString & text); + void setExpression_(); + +public slots: + void setExpression(const QString & expr); + void setValue(double val); + void setDefaultText(const QString & t); + void setClearButtonVisible(bool visible); + +public: + virtual void stepBy(int steps); + virtual void clear(); + virtual QSize sizeHint() const; + +protected: + virtual StepEnabled stepEnabled() const; + virtual void focusInEvent(QFocusEvent *event); + virtual void focusOutEvent(QFocusEvent *event); + + +signals: + void valueChanged(double val); + void cleared(); +}; + +#endif // EVALSPINBOX_H diff --git a/qad/widgets/plugin/evalspinboxplugin.cpp b/qad/widgets/plugin/evalspinboxplugin.cpp new file mode 100644 index 0000000..7356dc8 --- /dev/null +++ b/qad/widgets/plugin/evalspinboxplugin.cpp @@ -0,0 +1,69 @@ +#include "evalspinbox.h" +#include "evalspinboxplugin.h" +#include + + +EvalSpinBoxPlugin::EvalSpinBoxPlugin(QObject * parent): QObject(parent) { + m_initialized = false; +} + + +void EvalSpinBoxPlugin::initialize(QDesignerFormEditorInterface * /* core */) { + if (m_initialized) + return; + + // Add extension registrations, etc. here + + m_initialized = true; +} + + +bool EvalSpinBoxPlugin::isInitialized() const { + return m_initialized; +} + + +QWidget * EvalSpinBoxPlugin::createWidget(QWidget * parent) { + return new EvalSpinBox(parent); +} + + +QString EvalSpinBoxPlugin::name() const { + return QLatin1String("EvalSpinBox"); +} + + +QString EvalSpinBoxPlugin::group() const { + return QLatin1String("Input Widgets"); +} + + +QIcon EvalSpinBoxPlugin::icon() const { + return QIcon(":/icons/evalspinbox.png"); +} + + +QString EvalSpinBoxPlugin::toolTip() const { + return QLatin1String("Evaluation double SpinBox"); +} + + +QString EvalSpinBoxPlugin::whatsThis() const { + return QLatin1String("Evaluation double SpinBox"); +} + + +bool EvalSpinBoxPlugin::isContainer() const { + return false; +} + + +QString EvalSpinBoxPlugin::domXml() const { + return QLatin1String("\n\n"); +} + + +QString EvalSpinBoxPlugin::includeFile() const { + return QLatin1String("evalspinbox.h"); +} + diff --git a/qad/widgets/plugin/evalspinboxplugin.h b/qad/widgets/plugin/evalspinboxplugin.h new file mode 100644 index 0000000..d0949f0 --- /dev/null +++ b/qad/widgets/plugin/evalspinboxplugin.h @@ -0,0 +1,36 @@ +#ifndef EVALSPINBOXPLUGIN_H +#define EVALSPINBOXPLUGIN_H + +#include +#if QT_VERSION >= 0x050000 +# include +#else +# include +#endif + +class EvalSpinBoxPlugin: public QObject, public QDesignerCustomWidgetInterface +{ + Q_OBJECT + Q_INTERFACES(QDesignerCustomWidgetInterface) + +public: + EvalSpinBoxPlugin(QObject * parent = 0); + + bool isContainer() const; + bool isInitialized() const; + QIcon icon() const; + QString domXml() const; + QString group() const; + QString includeFile() const; + QString name() const; + QString toolTip() const; + QString whatsThis() const; + QWidget * createWidget(QWidget * parent); + void initialize(QDesignerFormEditorInterface * core); + +private: + bool m_initialized; + +}; + +#endif // EVALSPINBOXPLUGIN_H diff --git a/qad/widgets/plugin/qad_widgets.cpp b/qad/widgets/plugin/qad_widgets.cpp index 3e7c7be..d1ab93e 100644 --- a/qad/widgets/plugin/qad_widgets.cpp +++ b/qad/widgets/plugin/qad_widgets.cpp @@ -13,9 +13,10 @@ #include "qcodeeditplugin.h" #include "qvarianteditplugin.h" #include "qpiconfigplugin.h" +#include "evalspinboxplugin.h" -QADWidgets::QADWidgets(QObject * parent): QObject(parent) -{ + +QADWidgets::QADWidgets(QObject * parent): QObject(parent) { m_widgets.append(new SpinSliderPlugin(this)); m_widgets.append(new ColorButtonPlugin(this)); m_widgets.append(new CharDialogPlugin(this)); @@ -30,6 +31,7 @@ QADWidgets::QADWidgets(QObject * parent): QObject(parent) m_widgets.append(new QCodeEditPlugin(this)); m_widgets.append(new QVariantEditPlugin(this)); m_widgets.append(new QPIConfigPlugin(this)); + m_widgets.append(new EvalSpinBoxPlugin(this)); } diff --git a/qad/widgets/qad_widgets.qrc b/qad/widgets/qad_widgets.qrc index 38360db..2f32824 100644 --- a/qad/widgets/qad_widgets.qrc +++ b/qad/widgets/qad_widgets.qrc @@ -36,5 +36,9 @@ ../icons/qvariantedit.png ../icons/code-word.png ../icons/f1.png + ../icons/dialog-ok-apply.png + ../icons/dialog-warning.png + ../icons/tools-wizard.png + ../icons/evalspinbox.png diff --git a/qad/widgets/qvariantedit.cpp b/qad/widgets/qvariantedit.cpp index 9aff068..bbb8148 100644 --- a/qad/widgets/qvariantedit.cpp +++ b/qad/widgets/qvariantedit.cpp @@ -149,6 +149,7 @@ QVariantEdit::QVariantEdit(QWidget * parent): QWidget(parent) { _list = 0; _date = 0; _spin = 0; + _espin = 0; _rect = 0; _point = 0; _path = 0; @@ -222,11 +223,11 @@ void QVariantEdit::_recreate(const QVariant & new_value) { connect(_spin, SIGNAL(valueChanged(double)), this, SLOT(_changed())); break; case QVariant::Double: - _spin = new QDoubleSpinBox(this); - _spin->setDecimals(5); - _spin->setRange(-1E+199, 1E+199); - _cur_edit = _spin; - connect(_spin, SIGNAL(valueChanged(double)), this, SLOT(_changed())); + _espin = new EvalSpinBox(this); + //_spin->setDecimals(5); + //_spin->setRange(-1E+199, 1E+199); + _cur_edit = _espin; + connect(_espin, SIGNAL(valueChanged(double)), this, SLOT(_changed())); break; case QVariant::Color: _color = new ColorButton(this); @@ -321,7 +322,7 @@ QVariant QVariantEdit::value() const { case QVariant::UInt: return (unsigned int)(_spin->value()); case QVariant::LongLong: return qlonglong(_spin->value()); case QVariant::ULongLong: return qulonglong(_spin->value()); - case QVariant::Double: return double(_spin->value()); + case QVariant::Double: return _espin->value(); case QVariant::Color: return _color->color(); case QVariant::String: return _line->text(); case QVariant::StringList: return _list->value(); @@ -372,6 +373,7 @@ void QVariantEdit::setValue(const QVariant & v) { if (_list) {_list->setValue(v.toStringList());} if (_date) {_date->setDateTime(v.toDateTime());} if (_spin) {_spin->setValue(v.toDouble());} + if (_espin) {_espin->setValue(v.toDouble());} if (_rect) {_rect->setValue(v.toRectF());} if (_point) {_point->setValue(v.toPointF());} if (_path) { @@ -394,6 +396,7 @@ void QVariantEdit::_delete() { _list = 0; _date = 0; _spin = 0; + _espin = 0; _rect = 0; _point = 0; _path = 0; diff --git a/qad/widgets/qvariantedit.h b/qad/widgets/qvariantedit.h index a552b70..5ec352e 100644 --- a/qad/widgets/qvariantedit.h +++ b/qad/widgets/qvariantedit.h @@ -1,12 +1,13 @@ #ifndef QVARIANTEDIT_H #define QVARIANTEDIT_H +#include "qad_types.h" #include "clineedit.h" #include "ecombobox.h" #include "colorbutton.h" #include "qrectedit.h" #include "qpointedit.h" -#include "qad_types.h" +#include "evalspinbox.h" #include #include @@ -108,6 +109,7 @@ protected: StringListEdit * _list; QDateTimeEdit * _date; QDoubleSpinBox * _spin; + EvalSpinBox * _espin; QRectEdit * _rect; QPointEdit * _point; PathEdit * _path; diff --git a/qcd_utils/CMakeLists.txt b/qcd_utils/CMakeLists.txt index e8120ee..93a43ac 100644 --- a/qcd_utils/CMakeLists.txt +++ b/qcd_utils/CMakeLists.txt @@ -20,6 +20,9 @@ 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 cd_utils piqt) message(STATUS "Building ${PROJECT_NAME}") + +add_subdirectory(pult) + if(LIBPROJECT) #sdk_install("" "${PROJECT_NAME}" "${out_HDR}" "${out_QM}") else() @@ -46,5 +49,3 @@ else() endif() endif() -add_subdirectory(pult) - diff --git a/qcd_utils/pult/form.cpp b/qcd_utils/pult/form.cpp index 6dcf7eb..caf4243 100644 --- a/qcd_utils/pult/form.cpp +++ b/qcd_utils/pult/form.cpp @@ -7,6 +7,7 @@ #include "qcd_core.h" #include "qcd_kmodel.h" #include "pifile.h" +#include "evalspinbox.h" using namespace CDUtils; @@ -116,6 +117,9 @@ Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) { CDCore::instance()->initPult(); ui->setupUi(this); ui->treeView->setKFile(""); + EvalSpinBox * ev = new EvalSpinBox(); + ev->setValue(2); + ui->groupBox->layout()->addWidget(ev); PIFile f; piCout << f.open("test.kh", PIIODevice::ReadOnly); diff --git a/qcd_utils/pult/form.ui b/qcd_utils/pult/form.ui index 28d1999..0100fa2 100644 --- a/qcd_utils/pult/form.ui +++ b/qcd_utils/pult/form.ui @@ -13,105 +13,114 @@ Form - - - - - Refresh + + + + + Qt::Horizontal - - - - - - Send - - - - - - - Save - - - - - - - - - - Calculate - - - - - - - Load - - - - - - - Clear - - - - - - - update from KDescription - - - - - - - Receive - - - - - - - - 0 - 0 - - - - GroupBox - - - - - - CheckBox - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - + + + + + + Save + + + + + + + Load + + + + + + + Send + + + + + + + Receive + + + + + + + update from KDescription + + + + + + + Clear + + + + + + + Calculate + + + + + + + Refresh + + + + + + + + + + + + 0 + 0 + + + + GroupBox + + + + + + CheckBox + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + +