From 63f971dd92918c609c489ccb244d94cabf64694a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 4 Feb 2008 20:03:00 +0000 Subject: [PATCH] Make visible columns in the library view configurable via the config dialog. --- src/libprs500/gui2/__init__.py | 22 ++++++++++++++++++++++ src/libprs500/gui2/dialogs/config.py | 20 ++++++++++++++++---- src/libprs500/gui2/dialogs/config.ui | 24 ++++++++++++++++++++---- src/libprs500/gui2/library.py | 2 ++ src/libprs500/gui2/main.py | 7 ++++++- 5 files changed, 66 insertions(+), 9 deletions(-) diff --git a/src/libprs500/gui2/__init__.py b/src/libprs500/gui2/__init__.py index 5ec0f11e89..7183538be5 100644 --- a/src/libprs500/gui2/__init__.py +++ b/src/libprs500/gui2/__init__.py @@ -102,6 +102,28 @@ class TableView(QTableView): for i in range(len(self.cw)): self.setColumnWidth(i, self.cw[i]) return True + + def set_visible_columns(self, cols=None): + ''' + @param cols: A list of booleans or None. If an entry is False the corresponding column + is hidden, if True it is shown. + ''' + if cols: + QSettings().setValue(self.__class__.__name__ + ' visible columns', + QVariant(repr(cols))) + else: + cols = qstring_to_unicode(QSettings().value(self.__class__.__name__ + ' visible columns', + QVariant('')).toString()) + if cols: + cols = eval(cols) + else: + cols = [True for i in range(self.model().columnCount(self))] + + for i in range(len(cols)): + hidden = self.isColumnHidden(i) + self.setColumnHidden(i, not cols[i]) + if hidden and cols[i]: + self.resizeColumnToContents(i) class FileIconProvider(QFileIconProvider): diff --git a/src/libprs500/gui2/dialogs/config.py b/src/libprs500/gui2/dialogs/config.py index 7a843579a8..3fce643c96 100644 --- a/src/libprs500/gui2/dialogs/config.py +++ b/src/libprs500/gui2/dialogs/config.py @@ -14,8 +14,8 @@ ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os -from PyQt4.QtGui import QDialog, QMessageBox -from PyQt4.QtCore import QSettings, QVariant, SIGNAL, QStringList, QTimer +from PyQt4.QtGui import QDialog, QMessageBox, QListWidgetItem +from PyQt4.QtCore import QSettings, QVariant, SIGNAL, QStringList, QTimer, Qt from libprs500 import islinux from libprs500.gui2.dialogs.config_ui import Ui_Dialog @@ -23,12 +23,13 @@ from libprs500.gui2 import qstring_to_unicode, choose_dir, error_dialog class ConfigDialog(QDialog, Ui_Dialog): - def __init__(self, window, db): + def __init__(self, window, db, columns): QDialog.__init__(self, window) Ui_Dialog.__init__(self) self.setupUi(self) self.db = db + self.current_cols = columns settings = QSettings() path = qstring_to_unicode(\ settings.value("database path", @@ -52,6 +53,15 @@ class ConfigDialog(QDialog, Ui_Dialog): self.priority.addItem('Idle') if not islinux: self.dirs_box.setVisible(False) + + for hidden, hdr in self.current_cols: + item = QListWidgetItem(hdr, self.columns) + item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsUserCheckable) + if hidden: + item.setCheckState(Qt.Unchecked) + else: + item.setCheckState(Qt.Checked) + def compact(self, toggled): d = Vacuum(self, self.db) @@ -76,7 +86,9 @@ class ConfigDialog(QDialog, Ui_Dialog): settings = QSettings() settings.setValue('use roman numerals for series number', QVariant(self.roman_numerals.isChecked())) settings.setValue('network timeout', QVariant(self.timeout.value())) - path = qstring_to_unicode(self.location.text()) + path = qstring_to_unicode(self.location.text()) + self.final_columns = [self.columns.item(i).checkState() == Qt.Checked for i in range(self.columns.count())] + if not path or not os.path.exists(path) or not os.path.isdir(path): d = error_dialog(self, _('Invalid database location'), _('Invalid database location ')+path+_('
Must be a directory.')) d.exec_() diff --git a/src/libprs500/gui2/dialogs/config.ui b/src/libprs500/gui2/dialogs/config.ui index d6d14796c6..78f3a9c247 100644 --- a/src/libprs500/gui2/dialogs/config.ui +++ b/src/libprs500/gui2/dialogs/config.ui @@ -5,8 +5,8 @@ 0 0 - 408 - 378 + 451 + 507 @@ -154,7 +154,7 @@ - + Frequently used directories @@ -249,7 +249,7 @@ - + Qt::Vertical @@ -262,6 +262,22 @@ + + + + Select visible &columns in library view + + + + + + QAbstractItemView::NoSelection + + + + + + diff --git a/src/libprs500/gui2/library.py b/src/libprs500/gui2/library.py index 15aa6553c5..1d5043cfec 100644 --- a/src/libprs500/gui2/library.py +++ b/src/libprs500/gui2/library.py @@ -12,6 +12,7 @@ ## You should have received a copy of the GNU General Public License along ## with this program; if not, write to the Free Software Foundation, Inc., ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +from libprs500.gui2 import qstring_to_unicode import os, textwrap, traceback, time, re, sre_constants from datetime import timedelta, datetime from operator import attrgetter @@ -411,6 +412,7 @@ class BooksView(TableView): QObject.connect(self.model(), SIGNAL('rowsInserted(QModelIndex, int, int)'), self.resizeRowsToContents) # Resetting the model should resize rows (model is reset after search and sort operations) QObject.connect(self.model(), SIGNAL('modelReset()'), self.resizeRowsToContents) + self.set_visible_columns() def set_database(self, db): diff --git a/src/libprs500/gui2/main.py b/src/libprs500/gui2/main.py index d10585c5c2..e1f9dcdcdb 100644 --- a/src/libprs500/gui2/main.py +++ b/src/libprs500/gui2/main.py @@ -676,9 +676,14 @@ class Main(MainWindow, Ui_MainWindow): d = error_dialog(self, _('Cannot configure'), _('Cannot configure while there are running jobs.')) d.exec_() return - d = ConfigDialog(self, self.library_view.model().db) + columns = [(self.library_view.isColumnHidden(i), \ + self.library_view.model().headerData(i, Qt.Horizontal, Qt.DisplayRole).toString())\ + for i in range(self.library_view.model().columnCount(None))] + d = ConfigDialog(self, self.library_view.model().db, columns) d.exec_() if d.result() == d.Accepted: + self.library_view.set_visible_columns(d.final_columns) + if os.path.dirname(self.database_path) != d.database_location: try: newloc = os.path.join(d.database_location, os.path.basename(self.database_path))