diff --git a/src/calibre/gui2/convert/search_and_replace.py b/src/calibre/gui2/convert/search_and_replace.py index 2ca237b5ec..c8206ebeae 100644 --- a/src/calibre/gui2/convert/search_and_replace.py +++ b/src/calibre/gui2/convert/search_and_replace.py @@ -50,8 +50,8 @@ class SearchAndReplaceWidget(Widget, Ui_Form): proto.setFlags(Qt.ItemFlags(Qt.ItemIsSelectable + Qt.ItemIsEnabled)) self.search_replace.setItemPrototype(proto) self.search_replace.setColumnCount(2) - self.search_replace.setColumnWidth(0, 300) - self.search_replace.setColumnWidth(1, 300) + self.search_replace.setColumnWidth(0, 320) + self.search_replace.setColumnWidth(1, 320) self.search_replace.setHorizontalHeaderLabels([ _('Search Regular Expression'), _('Replacement Text')]) @@ -60,6 +60,8 @@ class SearchAndReplaceWidget(Widget, Ui_Form): self.sr_remove.clicked.connect(self.sr_remove_clicked) self.sr_load.clicked.connect(self.sr_load_clicked) self.sr_save.clicked.connect(self.sr_save_clicked) + self.sr_up.clicked.connect(self.sr_up_clicked) + self.sr_down.clicked.connect(self.sr_down_clicked) self.search_replace.currentCellChanged.connect(self.sr_currentCellChanged) self.initialize_options(get_option, get_help, db, book_id) @@ -91,7 +93,7 @@ class SearchAndReplaceWidget(Widget, Ui_Form): row = self.search_replace.currentRow() if row >= 0: self.search_replace.removeRow(row) - self.search_replace.setCurrentCell(row-1, 0) + self.search_replace.setCurrentCell(row if row < self.search_replace.rowCount() else row-1, 0) self.sr_search.clear() self.sr_replace.clear() @@ -106,6 +108,7 @@ class SearchAndReplaceWidget(Widget, Ui_Form): try: self.set_value(self.opt_search_replace, read_sr_patterns(files[0])) + self.search_replace.setCurrentCell(0, 0) except Exception as e: error_dialog(self, _('Failed to read'), _('Failed to load patterns from %s, click Show details' @@ -123,15 +126,40 @@ class SearchAndReplaceWidget(Widget, Ui_Form): for search, replace in self.get_definitions(): f.write(search + u'\n' + replace + u'\n\n') + def sr_up_clicked(self): + self.cell_rearrange(-1) + + def sr_down_clicked(self): + self.cell_rearrange(1) + + def cell_rearrange(self, i): + row = self.search_replace.currentRow() + for col in xrange(0, self.search_replace.columnCount()): + item1 = self.search_replace.item(row, col) + item2 = self.search_replace.item(row+i, col) + value = item1.text(); + item1.setText(item2.text()) + item2.setText(value) + self.search_replace.setCurrentCell(row+i, 0) + def sr_currentCellChanged(self, row, column, previousRow, previousColumn) : if row >= 0: self.sr_change.setEnabled(True) self.sr_remove.setEnabled(True) + self.sr_save.setEnabled(True) self.sr_search.set_regex(self.search_replace.item(row, 0).text()) self.sr_replace.setText(self.search_replace.item(row, 1).text()) + # set the up/down buttons + self.sr_up.setEnabled(row > 0) + self.sr_down.setEnabled(row < self.search_replace.rowCount()-1) else: self.sr_change.setEnabled(False) self.sr_remove.setEnabled(False) + self.sr_save.setEnabled(False) + self.sr_down.setEnabled(False) + self.sr_up.setEnabled(False) + + def break_cycles(self): Widget.break_cycles(self) diff --git a/src/calibre/gui2/convert/search_and_replace.ui b/src/calibre/gui2/convert/search_and_replace.ui index 2497855abd..a5d88c5b3e 100644 --- a/src/calibre/gui2/convert/search_and_replace.ui +++ b/src/calibre/gui2/convert/search_and_replace.ui @@ -78,7 +78,7 @@ - + -1 @@ -146,25 +146,92 @@ - - Save this list of expressions so that you can re-use it easily - - - &Save - + + false + + + Save this list of expressions so that you can re-use it easily + + + &Save + - - - QAbstractItemView::SingleSelection - - - QAbstractItemView::SelectRows - - + + + -1 + + + 0 + + + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + + + + + + + + 0 + 0 + + + + + 32 + 16777215 + + + + false + + + Reorder selected expression above previous one. + + + + + + + + + + + 0 + 0 + + + + + 32 + 16777215 + + + + false + + + Reorder selected expression below next one. + + + + + + + + +