diff --git a/src/calibre/gui2/convert/__init__.py b/src/calibre/gui2/convert/__init__.py index fe5a6330a5..73b478ac47 100644 --- a/src/calibre/gui2/convert/__init__.py +++ b/src/calibre/gui2/convert/__init__.py @@ -10,7 +10,7 @@ import textwrap, codecs, importlib from functools import partial from PyQt4.Qt import QWidget, QSpinBox, QDoubleSpinBox, QLineEdit, QTextEdit, \ - QCheckBox, QComboBox, Qt, QIcon, pyqtSignal, QLabel, QTableWidget + QCheckBox, QComboBox, Qt, QIcon, pyqtSignal, QLabel from calibre.customize.conversion import OptionRecommendation from calibre.ebooks.conversion.config import load_defaults, \ @@ -160,15 +160,6 @@ class Widget(QWidget): return g.xpath if g.xpath else None elif isinstance(g, RegexEdit): return g.regex if g.regex else None - elif isinstance(g, QTableWidget): - import json - ans = [] - for row in xrange(0, g.rowCount()): - colItems = [] - for col in xrange(0, g.columnCount()): - colItems.append(unicode(g.item(row, col).text())) - ans.append(colItems) - return json.dumps(ans) else: raise Exception('Can\'t get value from %s'%type(g)) @@ -196,8 +187,6 @@ class Widget(QWidget): elif isinstance(g, (XPathEdit, RegexEdit)): g.edit.editTextChanged.connect(f) g.edit.currentIndexChanged.connect(f) - elif isinstance(g, QTableWidget): - g.cellChanged.connect(f) else: raise Exception('Can\'t connect %s'%type(g)) @@ -231,23 +220,6 @@ class Widget(QWidget): g.setCheckState(Qt.Checked if bool(val) else Qt.Unchecked) elif isinstance(g, (XPathEdit, RegexEdit)): g.edit.setText(val if val else '') - elif isinstance(g, (QTableWidget)): - import json - try: - rowItems = json.loads(val) - if not isinstance(rowItems, list): - rowItems = [] - except: - rowItems = [] - - - g.setRowCount(len(rowItems)) - - for row, colItems in enumerate(rowItems): - for col, cellValue in enumerate(colItems): - newItem = g.itemPrototype().clone() - newItem.setText(cellValue) - g.setItem(row,col, newItem) else: raise Exception('Can\'t set value %s in %s'%(repr(val), unicode(g.objectName()))) diff --git a/src/calibre/gui2/convert/search_and_replace.py b/src/calibre/gui2/convert/search_and_replace.py index 900f74804f..d0ad43e1b4 100644 --- a/src/calibre/gui2/convert/search_and_replace.py +++ b/src/calibre/gui2/convert/search_and_replace.py @@ -4,10 +4,10 @@ __license__ = 'GPL 3' __copyright__ = '2011, John Schember ' __docformat__ = 'restructuredtext en' -import re +import re, json from PyQt4.QtCore import SIGNAL, Qt -from PyQt4.QtGui import QTableWidgetItem, QFileDialog +from PyQt4.QtGui import QTableWidget, QTableWidgetItem, QFileDialog from calibre.gui2.convert.search_and_replace_ui import Ui_Form from calibre.gui2.convert import Widget from calibre.gui2 import error_dialog @@ -123,3 +123,36 @@ class SearchAndReplaceWidget(Widget, Ui_Form): _('Invalid regular expression: %s')%err, show=True) return False return True + + + # Options handling + + def connect_gui_obj_handler(self, g, slot): + if isinstance(g, QTableWidget): + g.cellChanged.connect(slot) + + def get_value_handler(self, g): + ans = [] + for row in xrange(0, g.rowCount()): + colItems = [] + for col in xrange(0, g.columnCount()): + colItems.append(unicode(g.item(row, col).text())) + ans.append(colItems) + return json.dumps(ans) + + def set_value_handler(self, g, val): + try: + rowItems = json.loads(val) + if not isinstance(rowItems, list): + rowItems = [] + except: + rowItems = [] + + g.setRowCount(len(rowItems)) + + for row, colItems in enumerate(rowItems): + for col, cellValue in enumerate(colItems): + newItem = g.itemPrototype().clone() + newItem.setText(cellValue) + g.setItem(row,col, newItem) + return True