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()