From adfb31f518925d1e30c432e7cef9c99bb508fef0 Mon Sep 17 00:00:00 2001 From: Chris PeBenito <pebenito@ieee.org> Date: Sat, 9 Jul 2016 18:18:47 -0400 Subject: [PATCH] apol: Implement copy from table results. Closes #123 --- data/boolquery.ui | 7 ++++- data/boundsquery.ui | 9 ++++++- data/categoryquery.ui | 7 ++++- data/commonquery.ui | 7 ++++- data/constraintquery.ui | 9 ++++++- data/defaultquery.ui | 9 ++++++- data/fsusequery.ui | 9 ++++++- data/genfsconquery.ui | 9 ++++++- data/initsidquery.ui | 9 ++++++- data/mlsrulequery.ui | 9 ++++++- data/netifconquery.ui | 9 ++++++- data/nodeconquery.ui | 9 ++++++- data/objclassquery.ui | 7 ++++- data/portconquery.ui | 9 ++++++- data/rbacrulequery.ui | 9 ++++++- data/rolequery.ui | 7 ++++- data/sensitivityquery.ui | 7 ++++- data/terulequery.ui | 9 ++++++- data/typeattrquery.ui | 7 ++++- data/typequery.ui | 7 ++++- data/userquery.ui | 7 ++++- setoolsgui/tableview.py | 56 ++++++++++++++++++++++++++++++++++++++++ 22 files changed, 206 insertions(+), 21 deletions(-) create mode 100644 setoolsgui/tableview.py diff --git a/data/boolquery.ui b/data/boolquery.ui index 477cee3..0acb7b3 100644 --- a/data/boolquery.ui +++ b/data/boolquery.ui @@ -304,7 +304,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -396,6 +396,11 @@ </widget> </widget> <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> <customwidget> <class>GetDetailsListView</class> <extends>QListView</extends> diff --git a/data/boundsquery.ui b/data/boundsquery.ui index 72572ca..6adcbdf 100644 --- a/data/boundsquery.ui +++ b/data/boundsquery.ui @@ -166,7 +166,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -522,6 +522,13 @@ </layout> </widget> </widget> + <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>criteria_expander</tabstop> <tabstop>notes_expander</tabstop> diff --git a/data/categoryquery.ui b/data/categoryquery.ui index 832d661..d0d77c9 100644 --- a/data/categoryquery.ui +++ b/data/categoryquery.ui @@ -265,7 +265,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -357,6 +357,11 @@ </widget> </widget> <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> <customwidget> <class>GetDetailsListView</class> <extends>QListView</extends> diff --git a/data/commonquery.ui b/data/commonquery.ui index fb81025..9f893b7 100644 --- a/data/commonquery.ui +++ b/data/commonquery.ui @@ -346,7 +346,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -438,6 +438,11 @@ </widget> </widget> <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> <customwidget> <class>GetDetailsListView</class> <extends>QListView</extends> diff --git a/data/constraintquery.ui b/data/constraintquery.ui index a3654fc..637412f 100644 --- a/data/constraintquery.ui +++ b/data/constraintquery.ui @@ -166,7 +166,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -767,6 +767,13 @@ </layout> </widget> </widget> + <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>criteria_expander</tabstop> <tabstop>notes_expander</tabstop> diff --git a/data/defaultquery.ui b/data/defaultquery.ui index 233fb78..8489cc9 100644 --- a/data/defaultquery.ui +++ b/data/defaultquery.ui @@ -166,7 +166,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -570,6 +570,13 @@ </layout> </widget> </widget> + <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>criteria_expander</tabstop> <tabstop>notes_expander</tabstop> diff --git a/data/fsusequery.ui b/data/fsusequery.ui index c7265fa..cf4ac02 100644 --- a/data/fsusequery.ui +++ b/data/fsusequery.ui @@ -664,7 +664,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -744,6 +744,13 @@ </layout> </widget> </widget> + <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>criteria_expander</tabstop> <tabstop>notes_expander</tabstop> diff --git a/data/genfsconquery.ui b/data/genfsconquery.ui index ac60d1e..447026b 100644 --- a/data/genfsconquery.ui +++ b/data/genfsconquery.ui @@ -173,7 +173,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -695,6 +695,13 @@ </layout> </widget> </widget> + <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>criteria_expander</tabstop> <tabstop>notes_expander</tabstop> diff --git a/data/initsidquery.ui b/data/initsidquery.ui index a430ccd..05464f7 100644 --- a/data/initsidquery.ui +++ b/data/initsidquery.ui @@ -567,7 +567,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -647,6 +647,13 @@ </layout> </widget> </widget> + <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>criteria_expander</tabstop> <tabstop>notes_expander</tabstop> diff --git a/data/mlsrulequery.ui b/data/mlsrulequery.ui index 7a36efb..18395bf 100644 --- a/data/mlsrulequery.ui +++ b/data/mlsrulequery.ui @@ -95,7 +95,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -711,6 +711,13 @@ </layout> </widget> </widget> + <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>criteria_expander</tabstop> <tabstop>notes_expander</tabstop> diff --git a/data/netifconquery.ui b/data/netifconquery.ui index 6c6270b..e2a80e4 100644 --- a/data/netifconquery.ui +++ b/data/netifconquery.ui @@ -567,7 +567,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -647,6 +647,13 @@ </layout> </widget> </widget> + <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>criteria_expander</tabstop> <tabstop>notes_expander</tabstop> diff --git a/data/nodeconquery.ui b/data/nodeconquery.ui index fe9e509..ddcd3f5 100644 --- a/data/nodeconquery.ui +++ b/data/nodeconquery.ui @@ -173,7 +173,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -705,6 +705,13 @@ </layout> </widget> </widget> + <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>criteria_expander</tabstop> <tabstop>notes_expander</tabstop> diff --git a/data/objclassquery.ui b/data/objclassquery.ui index c6e4575..d2d1948 100644 --- a/data/objclassquery.ui +++ b/data/objclassquery.ui @@ -386,7 +386,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -478,6 +478,11 @@ </widget> </widget> <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> <customwidget> <class>GetDetailsListView</class> <extends>QListView</extends> diff --git a/data/portconquery.ui b/data/portconquery.ui index 308de24..98b8ecc 100644 --- a/data/portconquery.ui +++ b/data/portconquery.ui @@ -173,7 +173,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -727,6 +727,13 @@ </layout> </widget> </widget> + <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>criteria_expander</tabstop> <tabstop>notes_expander</tabstop> diff --git a/data/rbacrulequery.ui b/data/rbacrulequery.ui index 6db7f04..b319dce 100644 --- a/data/rbacrulequery.ui +++ b/data/rbacrulequery.ui @@ -586,7 +586,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -728,6 +728,13 @@ </layout> </widget> </widget> + <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>criteria_expander</tabstop> <tabstop>notes_expander</tabstop> diff --git a/data/rolequery.ui b/data/rolequery.ui index ffe9d90..0bf4b92 100644 --- a/data/rolequery.ui +++ b/data/rolequery.ui @@ -374,7 +374,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -466,6 +466,11 @@ </widget> </widget> <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> <customwidget> <class>GetDetailsListView</class> <extends>QListView</extends> diff --git a/data/sensitivityquery.ui b/data/sensitivityquery.ui index 5585011..250d827 100644 --- a/data/sensitivityquery.ui +++ b/data/sensitivityquery.ui @@ -265,7 +265,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -357,6 +357,11 @@ </widget> </widget> <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> <customwidget> <class>GetDetailsListView</class> <extends>QListView</extends> diff --git a/data/terulequery.ui b/data/terulequery.ui index 37b5c7e..5ea9e26 100644 --- a/data/terulequery.ui +++ b/data/terulequery.ui @@ -104,7 +104,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -1001,6 +1001,13 @@ </layout> </widget> </widget> + <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> + </customwidgets> <tabstops> <tabstop>criteria_expander</tabstop> <tabstop>notes_expander</tabstop> diff --git a/data/typeattrquery.ui b/data/typeattrquery.ui index 6e24f8f..439a334 100644 --- a/data/typeattrquery.ui +++ b/data/typeattrquery.ui @@ -374,7 +374,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -466,6 +466,11 @@ </widget> </widget> <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> <customwidget> <class>GetDetailsListView</class> <extends>QListView</extends> diff --git a/data/typequery.ui b/data/typequery.ui index ca18fed..cc91fb0 100644 --- a/data/typequery.ui +++ b/data/typequery.ui @@ -399,7 +399,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -491,6 +491,11 @@ </widget> </widget> <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> <customwidget> <class>GetDetailsListView</class> <extends>QListView</extends> diff --git a/data/userquery.ui b/data/userquery.ui index 8fa366a..e3eb4d7 100644 --- a/data/userquery.ui +++ b/data/userquery.ui @@ -567,7 +567,7 @@ <number>6</number> </property> <item> - <widget class="QTableView" name="table_results"> + <widget class="SEToolsTableView" name="table_results"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -659,6 +659,11 @@ </widget> </widget> <customwidgets> + <customwidget> + <class>SEToolsTableView</class> + <extends>QTableView</extends> + <header>setoolsgui/tableview.h</header> + </customwidget> <customwidget> <class>GetDetailsListView</class> <extends>QListView</extends> diff --git a/setoolsgui/tableview.py b/setoolsgui/tableview.py new file mode 100644 index 0000000..f8ebe44 --- /dev/null +++ b/setoolsgui/tableview.py @@ -0,0 +1,56 @@ +# Copyright 2016, Chris PeBenito <pebenito@ieee.org> +# +# This file is part of SETools. +# +# SETools 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 2.1 of +# the License, or (at your option) any later version. +# +# SETools 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 SETools. If not, see +# <http://www.gnu.org/licenses/>. +# + +from PyQt5.QtCore import Qt +from PyQt5.QtGui import QKeySequence +from PyQt5.QtWidgets import QApplication, QTableView + + +class SEToolsTableView(QTableView): + + """QTableView class extended for SETools use.""" + + def event(self, e): + if e == QKeySequence.Copy or e == QKeySequence.Cut: + datamodel = self.model() + + selected_text = "" + current_row = None + current_col = None + prev_row = None + prev_col = None + for index in sorted(self.selectionModel().selectedIndexes()): + current_row = index.row() + current_col = index.column() + + if prev_row is not None and current_row != prev_row: + selected_text += '\n' + elif prev_col is not None and current_col != prev_col: + selected_text += '\t' + + selected_text += datamodel.data(index, Qt.DisplayRole) + + prev_row = current_row + prev_col = current_col + + QApplication.clipboard().setText(selected_text) + return True + + else: + return super(SEToolsTableView, self).event(e)