diff --git a/reprounzip-qt/reprounzip_qt/gui/run.py b/reprounzip-qt/reprounzip_qt/gui/run.py index 6e3f61da4..4bc427078 100644 --- a/reprounzip-qt/reprounzip_qt/gui/run.py +++ b/reprounzip-qt/reprounzip_qt/gui/run.py @@ -135,13 +135,18 @@ def __init__(self, directory, unpacker=None, root=None, **kwargs): layout = QtGui.QHBoxLayout() + left_layout = QtGui.QVBoxLayout() + self.searchbar = QtGui.QLineEdit(placeholderText="Search...") + self.searchbar.textChanged.connect(self._search_changed) + left_layout.addWidget(self.searchbar) self.files_widget = QtGui.QListWidget( selectionMode=QtGui.QListWidget.SingleSelection) self.files_widget.itemSelectionChanged.connect(self._file_changed) - layout.addWidget(self.files_widget) + left_layout.addWidget(self.files_widget) + layout.addLayout(left_layout) right_layout = QtGui.QGridLayout() - right_layout.addWidget(QtGui.QLabel("name:"), 0, 0) + right_layout.addWidget(QtGui.QLabel("Name:"), 0, 0) self.f_name = QtGui.QLineEdit('', readOnly=True) right_layout.addWidget(self.f_name, 0, 1) right_layout.addWidget(QtGui.QLabel("Path:"), 1, 0) @@ -167,11 +172,20 @@ def __init__(self, directory, unpacker=None, root=None, **kwargs): self.files_status = reprounzip.FilesStatus(directory) + class FileItem(QtGui.QListWidgetItem): + def __init__(self, file_status): + text = "[%s%s] %s" % (("I" if file_status.is_input else ''), + ("O" if file_status.is_output else ''), + file_status.name) + super(FileItem, self).__init__(text) + + self.file_name = file_status.name + for file_status in self.files_status: - text = "[%s%s] %s" % (("I" if file_status.is_input else ''), - ("O" if file_status.is_output else ''), - file_status.name) - self.files_widget.addItem(text) + self.files_widget.addItem(FileItem(file_status)) + + def _search_changed(self): + TODO def _file_changed(self): selected = [i.row() for i in self.files_widget.selectedIndexes()] diff --git a/reprounzip-qt/reprounzip_qt/reprounzip_interface.py b/reprounzip-qt/reprounzip_qt/reprounzip_interface.py index 80fbfc8d1..a2fc0c126 100644 --- a/reprounzip-qt/reprounzip_qt/reprounzip_interface.py +++ b/reprounzip-qt/reprounzip_qt/reprounzip_interface.py @@ -78,6 +78,11 @@ def __init__(self, name, path, is_input, is_output): self.is_input = is_input self.is_output = is_output + def __cmp__(self, other): + if not isinstance(other, FileStatus): + raise TypeError + return cmp(self.name, other.name) + class FilesStatus(object): def __init__(self, directory): @@ -85,26 +90,30 @@ def __init__(self, directory): with open(os.path.join(directory, 'config.yml')) as fp: config = yaml.safe_load(fp) - self.files = [FileStatus(f['name'], f['path'], - f.get('read_by_runs'), - f.get('written_by_runs')) - for f in config.get('inputs_outputs') or []] + self.files = dict((f['name'], FileStatus(f['name'], f['path'], + f.get('read_by_runs'), + f.get('written_by_runs'))) + for f in config.get('inputs_outputs') or []) self._refresh() def _refresh(self): with open(os.path.join(self.directory, '.reprounzip'), 'rb') as fp: unpacked_info = pickle.load(fp) assigned_input_files = unpacked_info.get('input_files', {}) - for f in self.files: + for f in self.files.itervalues(): f.assigned = assigned_input_files.get(f.name) def __getitem__(self, item): - self._refresh() + f = self.files[item] + with open(os.path.join(self.directory, '.reprounzip'), 'rb') as fp: + unpacked_info = pickle.load(fp) + assigned_input_files = unpacked_info.get('input_files', {}) + f.assigned = assigned_input_files.get(f.name) return self.files[item] def __iter__(self): self._refresh() - return iter(self.files) + return iter(sorted(self.files.itervalues())) def find_command(cmd):