forked from M-Labs/artiq
1
0
Fork 0

browser: cleanup late select, align options with variables

This commit is contained in:
Robert Jördens 2016-04-20 19:16:19 +02:00
parent 3578ba17a3
commit 9a01d38439
2 changed files with 26 additions and 23 deletions

View File

@ -59,9 +59,9 @@ class DirsOnlyProxy(QtCore.QSortFilterProxyModel):
class ZoomIconView(QtWidgets.QListView): class ZoomIconView(QtWidgets.QListView):
zoom_step = 2**.25 zoom_step = 2**.25
aspect = 2/3 aspect = 2/3
default_size = 15 default_size = 25
min_size = 2 min_size = 10
max_size = 200 max_size = 1000
def __init__(self): def __init__(self):
QtWidgets.QListView.__init__(self) QtWidgets.QListView.__init__(self)
@ -75,10 +75,10 @@ class ZoomIconView(QtWidgets.QListView):
def wheelEvent(self, ev): def wheelEvent(self, ev):
if ev.modifiers() & QtCore.Qt.ControlModifier: if ev.modifiers() & QtCore.Qt.ControlModifier:
z = self.zoom_step**(ev.angleDelta().y()/120.)
a = self._char_width*self.min_size a = self._char_width*self.min_size
b = self._char_width*self.max_size b = self._char_width*self.max_size
w = self.iconSize().width()*z w = self.iconSize().width()*self.zoom_step**(
ev.angleDelta().y()/120.)
if a <= w <= b: if a <= w <= b:
self.setIconSize(QtCore.QSize(w, w*self.aspect)) self.setIconSize(QtCore.QSize(w, w*self.aspect))
else: else:
@ -86,8 +86,7 @@ class ZoomIconView(QtWidgets.QListView):
class FilesDock(QtWidgets.QDockWidget): class FilesDock(QtWidgets.QDockWidget):
def __init__(self, datasets, main_window, root="", def __init__(self, datasets, main_window, browse_root="", select=None):
select_file=None):
QtWidgets.QDockWidget.__init__(self, "Files") QtWidgets.QDockWidget.__init__(self, "Files")
self.setObjectName("Files") self.setObjectName("Files")
self.setFeatures(self.DockWidgetMovable | self.DockWidgetFloatable) self.setFeatures(self.DockWidgetMovable | self.DockWidgetFloatable)
@ -97,7 +96,6 @@ class FilesDock(QtWidgets.QDockWidget):
self.datasets = datasets self.datasets = datasets
self.main_window = main_window self.main_window = main_window
self.override_restore_file = select_file
self.model = QtWidgets.QFileSystemModel() self.model = QtWidgets.QFileSystemModel()
self.model.setFilter(QtCore.QDir.Drives | QtCore.QDir.NoDotAndDotDot | self.model.setFilter(QtCore.QDir.Drives | QtCore.QDir.NoDotAndDotDot |
@ -114,7 +112,7 @@ class FilesDock(QtWidgets.QDockWidget):
lambda: self.rt.resizeColumnToContents(0)) lambda: self.rt.resizeColumnToContents(0))
self.rt.setAnimated(False) self.rt.setAnimated(False)
self.rt.setRootIndex(rt_model.mapFromSource( self.rt.setRootIndex(rt_model.mapFromSource(
self.model.setRootPath(root))) self.model.setRootPath(os.path.abspath(browse_root))))
self.rt.setSelectionBehavior(self.rt.SelectRows) self.rt.setSelectionBehavior(self.rt.SelectRows)
self.rt.setSelectionMode(self.rt.SingleSelection) self.rt.setSelectionMode(self.rt.SingleSelection)
self.rt.selectionModel().currentChanged.connect( self.rt.selectionModel().currentChanged.connect(
@ -131,6 +129,14 @@ class FilesDock(QtWidgets.QDockWidget):
self.rl.activated.connect(self.open_experiment) self.rl.activated.connect(self.open_experiment)
self.splitter.addWidget(self.rl) self.splitter.addWidget(self.rl)
self.restore_selected = select is None
if select is not None:
f = os.path.abspath(select)
if os.path.isdir(f):
self.select_dir(f)
else:
self.select_file(f)
def tree_current_changed(self, current, previous): def tree_current_changed(self, current, previous):
idx = self.rt.model().mapToSource(current) idx = self.rt.model().mapToSource(current)
self.rl.setRootIndex(idx) self.rl.setRootIndex(idx)
@ -172,14 +178,16 @@ class FilesDock(QtWidgets.QDockWidget):
return return
self.rl.setRootIndex(idx) self.rl.setRootIndex(idx)
# ugly, see Spyder: late indexing, late scroll
def scroll_when_loaded(p): def scroll_when_loaded(p):
if p != path: if p != path:
return return
self.model.directoryLoaded.disconnect(scroll_when_loaded) self.model.directoryLoaded.disconnect(scroll_when_loaded)
QtCore.QTimer.singleShot( QtCore.QTimer.singleShot(
100, lambda: 100, lambda:
self.rt.scrollTo(self.rt.model().mapFromSource( self.rt.scrollTo(
self.model.index(path)), self.rt.PositionAtCenter)) self.rt.model().mapFromSource(self.model.index(path)),
self.rt.PositionAtCenter))
self.model.directoryLoaded.connect(scroll_when_loaded) self.model.directoryLoaded.connect(scroll_when_loaded)
idx = self.rt.model().mapFromSource(idx) idx = self.rt.model().mapFromSource(idx)
self.rt.expand(idx) self.rt.expand(idx)
@ -203,13 +211,7 @@ class FilesDock(QtWidgets.QDockWidget):
} }
def restore_state(self, state): def restore_state(self, state):
if self.override_restore_file: if self.restore_selected:
f = os.path.normpath(self.override_restore_file)
if os.path.isdir(f):
self.select_dir(f)
else:
self.select_file(f)
else:
self.select_dir(state["dir"]) self.select_dir(state["dir"])
self.select_file(state["file"]) self.select_file(state["file"])
self.rt.header().restoreState(QtCore.QByteArray(state["header"])) self.rt.header().restoreState(QtCore.QByteArray(state["header"]))

View File

@ -24,11 +24,11 @@ def get_argparser():
parser.add_argument("--db-file", default=default_db_file, parser.add_argument("--db-file", default=default_db_file,
help="database file for local browser settings " help="database file for local browser settings "
"(default: %(default)s)") "(default: %(default)s)")
parser.add_argument("--root", default="", parser.add_argument("--browse-root", default="",
help="root path for directory tree " help="root path for directory tree "
"(default %(default)s)") "(default %(default)s)")
parser.add_argument("path", metavar="PATH", nargs="?", parser.add_argument("select", metavar="SELECT", nargs="?",
help="browse path or file") help="directory to browse or file to load")
verbosity_args(parser) verbosity_args(parser)
return parser return parser
@ -86,6 +86,7 @@ def main():
smgr = state.StateManager(args.db_file) smgr = state.StateManager(args.db_file)
datasets_sub = models.LocalModelManager(datasets.Model) datasets_sub = models.LocalModelManager(datasets.Model)
datasets_sub.init({})
# initialize main window # initialize main window
main_window = MainWindow() main_window = MainWindow()
@ -93,8 +94,8 @@ def main():
status_bar = QtWidgets.QStatusBar() status_bar = QtWidgets.QStatusBar()
main_window.setStatusBar(status_bar) main_window.setStatusBar(status_bar)
d_files = files.FilesDock(datasets_sub, main_window, args.root, d_files = files.FilesDock(datasets_sub, main_window, args.browse_root,
args.path) select=args.select)
smgr.register(d_files) smgr.register(d_files)
d_applets = applets.AppletsDock(main_window, datasets_sub) d_applets = applets.AppletsDock(main_window, datasets_sub)