From 85b87b8adefb38054219373351b91b7724c76adc Mon Sep 17 00:00:00 2001 From: dismine Date: Wed, 17 Jul 2013 21:35:08 +0300 Subject: [PATCH] Validation for table increments --- Valentina.pro | 8 +++- dialogs/dialogincrements.cpp | 7 +++ widgets/delegate.cpp | 91 ++++++++++++++++++++++++++++++++++++ widgets/delegate.h | 68 +++++++++++++++++++++++++++ widgets/doubledelegate.cpp | 91 ++++++++++++++++++++++++++++++++++++ widgets/doubledelegate.h | 68 +++++++++++++++++++++++++++ 6 files changed, 331 insertions(+), 2 deletions(-) create mode 100644 widgets/delegate.cpp create mode 100644 widgets/delegate.h create mode 100644 widgets/doubledelegate.cpp create mode 100644 widgets/doubledelegate.h diff --git a/Valentina.pro b/Valentina.pro index 082d92577..bb5c3ee31 100644 --- a/Valentina.pro +++ b/Valentina.pro @@ -24,7 +24,9 @@ SOURCES += main.cpp\ container/calculator.cpp \ dialogs/dialogincrements.cpp \ container/vstandarttablecell.cpp \ - container/vincrementtablerow.cpp + container/vincrementtablerow.cpp \ + widgets/delegate.cpp \ + widgets/doubledelegate.cpp HEADERS += mainwindow.h \ widgets/vmaingraphicsscene.h \ @@ -39,7 +41,9 @@ HEADERS += mainwindow.h \ container/calculator.h \ dialogs/dialogincrements.h \ container/vstandarttablecell.h \ - container/vincrementtablerow.h + container/vincrementtablerow.h \ + widgets/delegate.h \ + widgets/doubledelegate.h FORMS += mainwindow.ui \ dialogs/dialogsinglepoint.ui \ diff --git a/dialogs/dialogincrements.cpp b/dialogs/dialogincrements.cpp index c8f8a6e30..8f5635c20 100644 --- a/dialogs/dialogincrements.cpp +++ b/dialogs/dialogincrements.cpp @@ -4,6 +4,8 @@ #include #include "../container/vincrementtablerow.h" +#include "../widgets/delegate.h" +#include "../widgets/doubledelegate.h" DialogIncrements::DialogIncrements(VContainer *data, VDomDocument *doc, QWidget *parent) : QDialog(parent), ui(new Ui::DialogIncrements){ @@ -28,6 +30,11 @@ DialogIncrements::DialogIncrements(VContainer *data, VDomDocument *doc, QWidget ui->tableWidgetIncrement->setHorizontalHeaderItem(3, new QTableWidgetItem("В розмірі")); ui->tableWidgetIncrement->setHorizontalHeaderItem(4, new QTableWidgetItem("В рості")); ui->tableWidgetIncrement->setHorizontalHeaderItem(5, new QTableWidgetItem("Опис")); + SpinBoxDelegate *delegate = new SpinBoxDelegate(ui->tableWidgetIncrement); + DoubleSpinBoxDelegate *doubleDelegate = new DoubleSpinBoxDelegate(ui->tableWidgetIncrement); + ui->tableWidgetIncrement->setItemDelegateForColumn(2, delegate); + ui->tableWidgetIncrement->setItemDelegateForColumn(3, doubleDelegate); + ui->tableWidgetIncrement->setItemDelegateForColumn(4, doubleDelegate); FillStandartTable(); FillIncrementTable(); diff --git a/widgets/delegate.cpp b/widgets/delegate.cpp new file mode 100644 index 000000000..a6cebda7d --- /dev/null +++ b/widgets/delegate.cpp @@ -0,0 +1,91 @@ + /**************************************************************************** + ** + ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). + ** Contact: http://www.qt-project.org/legal + ** + ** This file is part of the examples of the Qt Toolkit. + ** + ** $QT_BEGIN_LICENSE:BSD$ + ** You may use this file under the terms of the BSD license as follows: + ** + ** "Redistribution and use in source and binary forms, with or without + ** modification, are permitted provided that the following conditions are + ** met: + ** * Redistributions of source code must retain the above copyright + ** notice, this list of conditions and the following disclaimer. + ** * Redistributions in binary form must reproduce the above copyright + ** notice, this list of conditions and the following disclaimer in + ** the documentation and/or other materials provided with the + ** distribution. + ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names + ** of its contributors may be used to endorse or promote products derived + ** from this software without specific prior written permission. + ** + ** + ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + ** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ + + /* + delegate.cpp + + A delegate that allows the user to change integer values from the model + using a spin box widget. + */ + + #include + + #include "delegate.h" + + SpinBoxDelegate::SpinBoxDelegate(QObject *parent) + : QItemDelegate(parent) + { + } + + QWidget *SpinBoxDelegate::createEditor(QWidget *parent, + const QStyleOptionViewItem &/* option */, + const QModelIndex &/* index */) const + { + QSpinBox *editor = new QSpinBox(parent); + editor->setMinimum(0); + editor->setMaximum(1000); + + return editor; + } + + void SpinBoxDelegate::setEditorData(QWidget *editor, + const QModelIndex &index) const + { + int value = index.model()->data(index, Qt::EditRole).toInt(); + + QSpinBox *spinBox = static_cast(editor); + spinBox->setValue(value); + } + + void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const + { + QSpinBox *spinBox = static_cast(editor); + spinBox->interpretText(); + int value = spinBox->value(); + + model->setData(index, value, Qt::EditRole); + } + + void SpinBoxDelegate::updateEditorGeometry(QWidget *editor, + const QStyleOptionViewItem &option, const QModelIndex &/* index */) const + { + editor->setGeometry(option.rect); + } diff --git a/widgets/delegate.h b/widgets/delegate.h new file mode 100644 index 000000000..94152ef34 --- /dev/null +++ b/widgets/delegate.h @@ -0,0 +1,68 @@ +/**************************************************************************** + ** + ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). + ** Contact: http://www.qt-project.org/legal + ** + ** This file is part of the examples of the Qt Toolkit. + ** + ** $QT_BEGIN_LICENSE:BSD$ + ** You may use this file under the terms of the BSD license as follows: + ** + ** "Redistribution and use in source and binary forms, with or without + ** modification, are permitted provided that the following conditions are + ** met: + ** * Redistributions of source code must retain the above copyright + ** notice, this list of conditions and the following disclaimer. + ** * Redistributions in binary form must reproduce the above copyright + ** notice, this list of conditions and the following disclaimer in + ** the documentation and/or other materials provided with the + ** distribution. + ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names + ** of its contributors may be used to endorse or promote products derived + ** from this software without specific prior written permission. + ** + ** + ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + ** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ + + #ifndef DELEGATE_H + #define DELEGATE_H + + #include + #include + #include + #include + #include + + class SpinBoxDelegate : public QItemDelegate + { + Q_OBJECT + + public: + SpinBoxDelegate(QObject *parent = 0); + + 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; + }; + + #endif diff --git a/widgets/doubledelegate.cpp b/widgets/doubledelegate.cpp new file mode 100644 index 000000000..445752679 --- /dev/null +++ b/widgets/doubledelegate.cpp @@ -0,0 +1,91 @@ + /**************************************************************************** + ** + ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). + ** Contact: http://www.qt-project.org/legal + ** + ** This file is part of the examples of the Qt Toolkit. + ** + ** $QT_BEGIN_LICENSE:BSD$ + ** You may use this file under the terms of the BSD license as follows: + ** + ** "Redistribution and use in source and binary forms, with or without + ** modification, are permitted provided that the following conditions are + ** met: + ** * Redistributions of source code must retain the above copyright + ** notice, this list of conditions and the following disclaimer. + ** * Redistributions in binary form must reproduce the above copyright + ** notice, this list of conditions and the following disclaimer in + ** the documentation and/or other materials provided with the + ** distribution. + ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names + ** of its contributors may be used to endorse or promote products derived + ** from this software without specific prior written permission. + ** + ** + ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + ** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ + + /* + doubledelegate.cpp + + A delegate that allows the user to change integer values from the model + using a spin box widget. + */ + + #include + + #include "doubledelegate.h" + + DoubleSpinBoxDelegate::DoubleSpinBoxDelegate(QObject *parent) + : QItemDelegate(parent) + { + } + + QWidget *DoubleSpinBoxDelegate::createEditor(QWidget *parent, + const QStyleOptionViewItem &/* option */, + const QModelIndex &/* index */) const + { + QDoubleSpinBox *editor = new QDoubleSpinBox(parent); + editor->setMinimum(-1000); + editor->setMaximum(1000); + + return editor; + } + + void DoubleSpinBoxDelegate::setEditorData(QWidget *editor, + const QModelIndex &index) const + { + int value = index.model()->data(index, Qt::EditRole).toInt(); + + QDoubleSpinBox *spinBox = static_cast(editor); + spinBox->setValue(value); + } + + void DoubleSpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const + { + QDoubleSpinBox *spinBox = static_cast(editor); + spinBox->interpretText(); + int value = spinBox->value(); + + model->setData(index, value, Qt::EditRole); + } + + void DoubleSpinBoxDelegate::updateEditorGeometry(QWidget *editor, + const QStyleOptionViewItem &option, const QModelIndex &/* index */) const + { + editor->setGeometry(option.rect); + } diff --git a/widgets/doubledelegate.h b/widgets/doubledelegate.h new file mode 100644 index 000000000..ce1d89052 --- /dev/null +++ b/widgets/doubledelegate.h @@ -0,0 +1,68 @@ +/**************************************************************************** + ** + ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). + ** Contact: http://www.qt-project.org/legal + ** + ** This file is part of the examples of the Qt Toolkit. + ** + ** $QT_BEGIN_LICENSE:BSD$ + ** You may use this file under the terms of the BSD license as follows: + ** + ** "Redistribution and use in source and binary forms, with or without + ** modification, are permitted provided that the following conditions are + ** met: + ** * Redistributions of source code must retain the above copyright + ** notice, this list of conditions and the following disclaimer. + ** * Redistributions in binary form must reproduce the above copyright + ** notice, this list of conditions and the following disclaimer in + ** the documentation and/or other materials provided with the + ** distribution. + ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names + ** of its contributors may be used to endorse or promote products derived + ** from this software without specific prior written permission. + ** + ** + ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + ** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ + + #ifndef DOUBLEDELEGATE_H + #define DOUBLEDELEGATE_H + + #include + #include + #include + #include + #include + + class DoubleSpinBoxDelegate : public QItemDelegate + { + Q_OBJECT + + public: + DoubleSpinBoxDelegate(QObject *parent = 0); + + 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; + }; + + #endif