From 586a1773327b7d2b61a30e7b561a6e54667fa524 Mon Sep 17 00:00:00 2001 From: Srivats P Date: Thu, 3 Mar 2016 18:23:25 +0530 Subject: [PATCH] Device Emulation (contd.): Change SpinBoxDelegate for our needs and relicense under GPLv3; use SpinBoxDelegate for the Vlan Table validation --- client/devicegroupdialog.cpp | 14 ++++- common/ostprotogui.pro | 4 +- common/spinboxdelegate.cpp | 118 ++++++++++++++++++++--------------- common/spinboxdelegate.h | 106 +++++++++++++++++++------------ 4 files changed, 150 insertions(+), 92 deletions(-) diff --git a/client/devicegroupdialog.cpp b/client/devicegroupdialog.cpp index a978595..c77a6b4 100644 --- a/client/devicegroupdialog.cpp +++ b/client/devicegroupdialog.cpp @@ -20,6 +20,7 @@ along with this program. If not, see #include "devicegroupdialog.h" #include "port.h" +#include "spinboxdelegate.h" #include "emulproto.pb.h" #include "uint128.h" @@ -71,7 +72,6 @@ DeviceGroupDialog::DeviceGroupDialog( // Populate the Vlan Table with placeholders - we do this so that // user entered values are retained during the lifetime of the dialog // even if user is playing around with number of vlan tags - // TODO: use spinbox delegate with rangecheck for validation vlans->setRowCount(kMaxVlanTags); vlans->setColumnCount(kVlanColumns); vlans->setHorizontalHeaderLabels(vlanTableColumnHeaders); @@ -89,6 +89,18 @@ DeviceGroupDialog::DeviceGroupDialog( vlans->setItem(i, kVlanTpid, new QTableWidgetItem(QString::number(0x8100, 16))); } + + // Set SpinBoxDelegate for all columns except TPID + SpinBoxDelegate *spd = new SpinBoxDelegate(this); + spd->setColumnRange(kVlanId, 0, 4095); + spd->setColumnRange(kVlanStep, 0, 4095); + spd->setColumnRange(kVlanCfi, 0, 1); + spd->setColumnRange(kVlanPrio, 0, 7); + for (int i = 0; i < kVlanColumns; i++) { + if (i != kVlanTpid) + vlans->setItemDelegateForColumn(i, spd); + } + // Set vlan tag count *after* adding items so connected slots // can access the items vlanTagCount->setValue(kMaxVlanTags); diff --git a/common/ostprotogui.pro b/common/ostprotogui.pro index a91beea..b39526e 100644 --- a/common/ostprotogui.pro +++ b/common/ostprotogui.pro @@ -44,7 +44,8 @@ HEADERS = \ pythonfileformat.h \ pdmlprotocol.h \ pdmlprotocols.h \ - pdmlreader.h + pdmlreader.h \ + spinboxdelegate.h HEADERS += \ abstractprotocolconfig.h \ @@ -87,6 +88,7 @@ SOURCES += \ pdmlprotocol.cpp \ pdmlprotocols.cpp \ pdmlreader.cpp \ + spinboxdelegate.cpp SOURCES += \ protocolwidgetfactory.cpp \ diff --git a/common/spinboxdelegate.cpp b/common/spinboxdelegate.cpp index c1b2e33..d0376c2 100644 --- a/common/spinboxdelegate.cpp +++ b/common/spinboxdelegate.cpp @@ -1,53 +1,66 @@ -/**************************************************************************** -** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** 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 The Qt Company Ltd 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 +Copyright (C) 2016 Srivats P. - A delegate that allows the user to change integer values from the model - using a spin box widget. +This file is part of "Ostinato" + +This is free software: you can redistribute it and/or modify +it under the terms of the GNU 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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see + +This file incorporates work covered by the following copyright and +permission notice: + + Copyright (C) 2015 The Qt Company Ltd. + Contact: http://www.qt.io/licensing/ + + 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 The Qt Company Ltd 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$ */ -#include +//#include -#include "delegate.h" +#include "spinboxdelegate.h" + +#include SpinBoxDelegate::SpinBoxDelegate(QObject *parent) : QItemDelegate(parent) @@ -56,15 +69,23 @@ SpinBoxDelegate::SpinBoxDelegate(QObject *parent) QWidget *SpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, - const QModelIndex &/* index */) const + const QModelIndex &index) const { QSpinBox *editor = new QSpinBox(parent); - editor->setMinimum(0); - editor->setMaximum(100); + editor->setMinimum(colMin_.contains(index.column()) ? + colMin_.value(index.column()) : 0); + editor->setMaximum(colMax_.contains(index.column()) ? + colMax_.value(index.column()) : INT_MAX); return editor; } +void SpinBoxDelegate::setColumnRange(int col, int min, int max) +{ + colMin_.insert(col, min); + colMax_.insert(col, max); +} + void SpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { @@ -89,4 +110,3 @@ void SpinBoxDelegate::updateEditorGeometry(QWidget *editor, { editor->setGeometry(option.rect); } - diff --git a/common/spinboxdelegate.h b/common/spinboxdelegate.h index 008bc74..a253623 100644 --- a/common/spinboxdelegate.h +++ b/common/spinboxdelegate.h @@ -1,46 +1,65 @@ -/**************************************************************************** -** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** 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 The Qt Company Ltd 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$ -** -****************************************************************************/ +/* +Copyright (C) 2016 Srivats P. -#ifndef DELEGATE_H -#define DELEGATE_H +This file is part of "Ostinato" +This is free software: you can redistribute it and/or modify +it under the terms of the GNU 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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see + +This file incorporates work covered by the following copyright and +permission notice: + + Copyright (C) 2015 The Qt Company Ltd. + Contact: http://www.qt.io/licensing/ + + 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 The Qt Company Ltd 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 _SPIN_BOX_DELEGATE_H +#define _SPIN_BOX_DELEGATE_H + +#include #include #include #include @@ -54,6 +73,8 @@ class SpinBoxDelegate : public QItemDelegate public: SpinBoxDelegate(QObject *parent = 0); + void setColumnRange(int col, int min, int max); + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; @@ -63,6 +84,9 @@ public: void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const; +private: + QHash colMin_; + QHash colMax_; }; #endif