diff --git a/mainwindow.ui b/mainwindow.ui index 4cbc93c..2ffd373 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -58,6 +58,9 @@ 0 + + + diff --git a/qubesmanager/main.py b/qubesmanager/main.py index 88eb3fa..803f195 100755 --- a/qubesmanager/main.py +++ b/qubesmanager/main.py @@ -294,6 +294,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): update_interval = 1000 # in msec show_inactive_vms = True show_internal_vms = False + search = "" # suppress saving settings while initializing widgets settings_loaded = False columns_indices = {"Type": 0, @@ -461,6 +462,9 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): self.connect(self.logs_menu, SIGNAL("triggered(QAction *)"), self.show_log) + self.connect(self.searchbox, SIGNAL("textChanged(const QString&)"), + self.do_search) + self.table.setContentsMargins(0, 0, 0, 0) self.centralwidget.layout().setContentsMargins(0, 0, 0, 0) self.layout().setContentsMargins(0, 0, 0, 0) @@ -563,17 +567,15 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): if w >= desktop_width: available_space -= self.table.horizontalScrollBar().height() h += self.table.horizontalScrollBar().height() + + # account for search box height + available_space -= self.searchbox.height() + h += self.searchbox.height() + default_rows = int(available_space / self.row_height) - if self.show_internal_vms: - if self.show_inactive_vms: - n = self.table.rowCount() - else: - n = self.running_vms_count - elif self.show_inactive_vms: - n = self.table.rowCount() - self.internal_vms_count - else: - n = self.running_vms_count + n = sum(not self.table.isRowHidden(row) for row in + xrange(self.table.rowCount())) if n > default_rows: h += default_rows * self.row_height @@ -674,14 +676,11 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): self.vms_in_table[selected_qid].name_widget) self.table.setSortingEnabled(True) - self.showhide_vms(True, True) + self.showhide_vms() self.set_table_geom_size() - if (not self.show_inactive_vms) or (not self.show_internal_vms): - self.showhide_vms(self.show_inactive_vms, self.show_internal_vms) - self.set_table_geom_size() - def showhide_vms(self, show_inactive, show_internal): - if show_inactive and show_internal: + def showhide_vms(self): + if self.show_inactive_vms and self.show_internal_vms and not self.search: for row_no in xrange(self.table.rowCount()): self.table.setRowHidden(row_no, False) else: @@ -690,11 +689,18 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): self.columns_indices["State"]) running = widget.vm.last_running internal = widget.vm.internal - if not (show_inactive or running) or not ( - show_internal or not internal): - self.table.setRowHidden(row_no, True) - else: - self.table.setRowHidden(row_no, False) + name = widget.vm.name + + show = (running or self.show_inactive_vms) and \ + (not internal or self.show_internal_vms) and \ + (self.search in widget.vm.name or not self.search) + self.table.setRowHidden(row_no, not show) + + @pyqtSlot(str) + def do_search(self, search): + self.search = str(search) + self.showhide_vms() + self.set_table_geom_size() def mark_table_for_update(self): self.reload_table = True @@ -750,8 +756,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): if not self.show_inactive_vms and \ some_vms_have_changed_power_state: - self.showhide_vms(True, True) - self.showhide_vms(False, self.show_internal_vms) + self.showhide_vms() self.set_table_geom_size() if self.sort_by_column == \ @@ -1500,7 +1505,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): def action_showallvms_triggered(self): self.show_inactive_vms = self.action_showallvms.isChecked() - self.showhide_vms(self.show_inactive_vms, self.show_internal_vms) + self.showhide_vms() self.set_table_geom_size() if self.settings_loaded: self.manager_settings.setValue('view/show_inactive_vms', @@ -1511,7 +1516,7 @@ class VmManagerWindow(Ui_VmManagerWindow, QMainWindow): def action_showinternalvms_triggered(self): self.show_internal_vms = self.action_showinternalvms.isChecked() - self.showhide_vms(self.show_inactive_vms, self.show_internal_vms) + self.showhide_vms() self.set_table_geom_size() if self.settings_loaded: self.manager_settings.setValue('view/show_internal_vms',