Reverted Widget in __init__.py and moved functionality to search_and_replace.py by subclassing set_value_handler, get_value_handler and connect_gui_obj_handler

This commit is contained in:
Eli Algranti 2012-04-12 09:35:09 +10:00
parent 9fc6dc6878
commit 051d7c71c2
2 changed files with 36 additions and 31 deletions

View File

@ -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())))

View File

@ -4,10 +4,10 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>'
__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