From 27bcf6071ec42b0016d4b23ec95ffd7fbfdf92d0 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 5 Dec 2007 23:01:49 +0000 Subject: [PATCH] Add ability to specify frequently used directories on linux --- src/libprs500/gui2/__init__.py | 11 ++- src/libprs500/gui2/dialogs/config.py | 28 ++++++- src/libprs500/gui2/dialogs/config.ui | 110 +++++++++++++++++++++++++-- src/libprs500/gui2/main.py | 8 +- 4 files changed, 143 insertions(+), 14 deletions(-) diff --git a/src/libprs500/gui2/__init__.py b/src/libprs500/gui2/__init__.py index 72ba56380b..3c186174c0 100644 --- a/src/libprs500/gui2/__init__.py +++ b/src/libprs500/gui2/__init__.py @@ -15,7 +15,7 @@ """ The GUI for libprs500. """ import sys, os, re, StringIO, traceback from PyQt4.QtCore import QVariant, QSettings, QFileInfo, QObject, SIGNAL, QBuffer, \ - QByteArray, QLocale, QTranslator + QByteArray, QLocale, QTranslator, QUrl from PyQt4.QtGui import QFileDialog, QMessageBox, QPixmap, QFileIconProvider, \ QIcon, QTableView @@ -173,6 +173,13 @@ def initialize_file_icon_provider(): def file_icon_provider(): global _file_icon_provider return _file_icon_provider + +_sidebar_directories = [] +def set_sidebar_directories(dirs): + global _sidebar_directories + if dirs is None: + dirs = QSettings().value('frequently used directories', QVariant([])).toStringList() + _sidebar_directories = [QUrl.fromLocalFile(i) for i in dirs] class FileDialog(QObject): def __init__(self, title='Choose Files', @@ -208,6 +215,8 @@ class FileDialog(QObject): state = settings.value(name, QVariant()).toByteArray() if not self.fd.restoreState(state): self.fd.setDirectory(os.path.expanduser('~')) + osu = [i for i in self.fd.sidebarUrls()] + self.fd.setSidebarUrls(osu + _sidebar_directories) QObject.connect(self.fd, SIGNAL('accepted()'), self.save_dir) self.accepted = self.fd.exec_() == QFileDialog.Accepted else: diff --git a/src/libprs500/gui2/dialogs/config.py b/src/libprs500/gui2/dialogs/config.py index e204cc89ea..e0c52c8b4d 100644 --- a/src/libprs500/gui2/dialogs/config.py +++ b/src/libprs500/gui2/dialogs/config.py @@ -12,14 +12,14 @@ ## 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 error_dialog import os from PyQt4.QtGui import QDialog -from PyQt4.QtCore import QSettings, QVariant, SIGNAL +from PyQt4.QtCore import QSettings, QVariant, SIGNAL, QStringList +from libprs500 import islinux from libprs500.gui2.dialogs.config_ui import Ui_Dialog -from libprs500.gui2 import qstring_to_unicode, choose_dir +from libprs500.gui2 import qstring_to_unicode, choose_dir, error_dialog class ConfigDialog(QDialog, Ui_Dialog): @@ -36,10 +36,28 @@ class ConfigDialog(QDialog, Ui_Dialog): self.location.setText(os.path.dirname(path)) self.connect(self.browse_button, SIGNAL('clicked(bool)'), self.browse) + dirs = settings.value('frequently used directories', QVariant(QStringList())).toStringList() + self.directory_list.addItems(dirs) + self.connect(self.add_button, SIGNAL('clicked(bool)'), self.add_dir) + self.connect(self.remove_button, SIGNAL('clicked(bool)'), self.remove_dir) + if not islinux: + self.dirs_box.setVisible(False) + def browse(self): dir = choose_dir(self, 'database location dialog', 'Select database location') - self.location.setText(dir) + if dir: + self.location.setText(dir) + def add_dir(self): + dir = choose_dir(self, 'Add freq dir dialog', 'select directory') + if dir: + self.directory_list.addItem(dir) + + def remove_dir(self): + idx = self.directory_list.currentRow() + if idx >= 0: + self.directory_list.takeItem(idx) + def accept(self): path = qstring_to_unicode(self.location.text()) if not path or not os.path.exists(path) or not os.path.isdir(path): @@ -50,4 +68,6 @@ class ConfigDialog(QDialog, Ui_Dialog): d.exec_() else: self.database_location = os.path.abspath(path) + self.directories = [qstring_to_unicode(self.directory_list.item(i).text()) for i in range(self.directory_list.count())] + QSettings().setValue('frequently used directories', QVariant(self.directories)) QDialog.accept(self) diff --git a/src/libprs500/gui2/dialogs/config.ui b/src/libprs500/gui2/dialogs/config.ui index b2a8ddee7b..7c35b6c27b 100644 --- a/src/libprs500/gui2/dialogs/config.ui +++ b/src/libprs500/gui2/dialogs/config.ui @@ -5,8 +5,8 @@ 0 0 - 400 - 300 + 408 + 412 @@ -39,6 +39,9 @@ + + Browse for the new database location + ... @@ -52,6 +55,101 @@ + + + Frequently used directories + + + + + + + + true + + + + 22 + 22 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Add a directory to the frequently used directories list + + + ... + + + :/images/plus.svg + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Remove a directory from the frequently used directories list + + + ... + + + :/images/list_remove.svg + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + Qt::Vertical @@ -92,8 +190,8 @@ accept() - 248 - 254 + 227 + 279 157 @@ -108,8 +206,8 @@ reject() - 316 - 260 + 295 + 285 286 diff --git a/src/libprs500/gui2/main.py b/src/libprs500/gui2/main.py index e94fe9aa4d..a7fb57596a 100644 --- a/src/libprs500/gui2/main.py +++ b/src/libprs500/gui2/main.py @@ -19,7 +19,7 @@ from libprs500 import isosx import os, sys, textwrap, cStringIO, collections, traceback, shutil from PyQt4.QtCore import Qt, SIGNAL, QObject, QCoreApplication, \ - QSettings, QVariant, QSize, QThread, QTimer + QSettings, QVariant, QSize, QThread from PyQt4.QtGui import QPixmap, QColor, QPainter, QMenu, QIcon, QMessageBox, \ QToolButton, QDialog from PyQt4.QtSvg import QSvgRenderer @@ -33,7 +33,8 @@ from libprs500.devices.errors import FreeSpaceError from libprs500.devices.interface import Device from libprs500.gui2 import APP_UID, warning_dialog, choose_files, error_dialog, \ initialize_file_icon_provider, BOOK_EXTENSIONS, \ - pixmap_to_data, choose_dir, ORG_NAME, qstring_to_unicode + pixmap_to_data, choose_dir, ORG_NAME, \ + qstring_to_unicode, set_sidebar_directories from libprs500.gui2.main_window import MainWindow from libprs500.gui2.main_ui import Ui_MainWindow from libprs500.gui2.device import DeviceDetector, DeviceManager @@ -703,7 +704,7 @@ class Main(MainWindow, Ui_MainWindow): self.library_view.set_database(self.database_path) self.library_view.sortByColumn(3, Qt.DescendingOrder) self.library_view.resizeRowsToContents() - + set_sidebar_directories(d.directories) ############################################################################ @@ -776,6 +777,7 @@ class Main(MainWindow, Ui_MainWindow): settings.endGroup() self.database_path = qstring_to_unicode(settings.value("database path", QVariant(os.path.join(os.path.expanduser('~'),'library1.db'))).toString()) + set_sidebar_directories(None) def write_settings(self): settings = QSettings()