This commit is contained in:
Kovid Goyal 2012-08-08 20:46:45 +05:30
commit 7c42571c4a
2 changed files with 61 additions and 44 deletions

View File

@ -465,8 +465,7 @@ class GenericRulesTable(QTableWidget):
self.db = db self.db = db
QTableWidget.__init__(self) QTableWidget.__init__(self)
self.setObjectName(object_name) self.setObjectName(object_name)
self.layout = QHBoxLayout() self.layout = parent_gb.layout()
parent_gb.setLayout(self.layout)
# Add ourselves to the layout # Add ourselves to the layout
#print("verticalHeader: %s" % dir(self.verticalHeader())) #print("verticalHeader: %s" % dir(self.verticalHeader()))
@ -537,7 +536,7 @@ class GenericRulesTable(QTableWidget):
def create_blank_row_data(self): def create_blank_row_data(self):
''' '''
ovverride override
''' '''
pass pass
@ -570,6 +569,9 @@ class GenericRulesTable(QTableWidget):
self.clearSelection() self.clearSelection()
def get_data(self): def get_data(self):
'''
override
'''
pass pass
def move_row_down(self): def move_row_down(self):
@ -597,6 +599,7 @@ class GenericRulesTable(QTableWidget):
# Populate it with the saved data # Populate it with the saved data
self.populate_table_row(src_row, saved_data) self.populate_table_row(src_row, saved_data)
self.blockSignals(False) self.blockSignals(False)
scroll_to_row = last_sel_row + 1 scroll_to_row = last_sel_row + 1
if scroll_to_row < self.rowCount() - 1: if scroll_to_row < self.rowCount() - 1:
@ -650,23 +653,21 @@ class GenericRulesTable(QTableWidget):
self.selectRow(row) self.selectRow(row)
self.scrollToItem(self.currentItem()) self.scrollToItem(self.currentItem())
def tweak_height(self, height=4):
for i in range(min(3,self.rowCount())):
height += self.rowHeight(i)
height += self.verticalHeader().sizeHint().height()
print("computed table height for %d rows: %d" % (self.rowCount(),height, ))
self.setMinimumSize(QSize(16777215, height))
self.setMaximumSize(QSize(16777215, height))
class ExclusionRules(GenericRulesTable): class ExclusionRules(GenericRulesTable):
COLUMNS = { 'ENABLED':{'ordinal': 0, 'name': ''},
'NAME': {'ordinal': 1, 'name': 'Name'},
'FIELD': {'ordinal': 2, 'name': 'Field'},
'PATTERN': {'ordinal': 3, 'name': 'Value'},}
def __init__(self, parent_gb_hl, object_name, rules, eligible_custom_fields, db): def __init__(self, parent_gb_hl, object_name, rules, eligible_custom_fields, db):
super(ExclusionRules, self).__init__(parent_gb_hl, object_name, rules, eligible_custom_fields, db) super(ExclusionRules, self).__init__(parent_gb_hl, object_name, rules, eligible_custom_fields, db)
self._init_table_widget() self._init_table_widget()
self._initialize() self._initialize()
def _init_table_widget(self): def _init_table_widget(self):
header_labels = ['','Name','Field','Value'] header_labels = [self.COLUMNS[index]['name'] \
for index in sorted(self.COLUMNS.keys(), key=lambda c: self.COLUMNS[c]['ordinal'])]
self.setColumnCount(len(header_labels)) self.setColumnCount(len(header_labels))
self.setHorizontalHeaderLabels(header_labels) self.setHorizontalHeaderLabels(header_labels)
self.setSortingEnabled(False) self.setSortingEnabled(False)
@ -682,10 +683,10 @@ class ExclusionRules(GenericRulesTable):
def convert_row_to_data(self, row): def convert_row_to_data(self, row):
data = self.create_blank_row_data() data = self.create_blank_row_data()
data['ordinal'] = row data['ordinal'] = row
data['enabled'] = self.item(row,0).checkState() == Qt.Checked data['enabled'] = self.item(row,self.COLUMNS['ENABLED']['ordinal']).checkState() == Qt.Checked
data['name'] = unicode(self.cellWidget(row,1).text()).strip() data['name'] = unicode(self.cellWidget(row,self.COLUMNS['NAME']['ordinal']).text()).strip()
data['field'] = unicode(self.cellWidget(row,2).currentText()).strip() data['field'] = unicode(self.cellWidget(row,self.COLUMNS['FIELD']['ordinal']).currentText()).strip()
data['pattern'] = unicode(self.cellWidget(row,3).currentText()).strip() data['pattern'] = unicode(self.cellWidget(row,self.COLUMNS['PATTERN']['ordinal']).currentText()).strip()
return data return data
def create_blank_row_data(self): def create_blank_row_data(self):
@ -740,18 +741,18 @@ class ExclusionRules(GenericRulesTable):
# Entry point # Entry point
self.blockSignals(True) self.blockSignals(True)
# Column 0: Enabled # Enabled
self.setItem(row, 0, CheckableTableWidgetItem(data['enabled'])) self.setItem(row, self.COLUMNS['ENABLED']['ordinal'], CheckableTableWidgetItem(data['enabled']))
# Column 1: Rule name # Rule name
set_rule_name_in_row(row, 1, name=data['name']) set_rule_name_in_row(row, self.COLUMNS['NAME']['ordinal'], name=data['name'])
# Column 2: Source field # Source field
source_combo = set_source_field_in_row(row, 2, field=data['field']) source_combo = set_source_field_in_row(row, self.COLUMNS['FIELD']['ordinal'], field=data['field'])
# Column 3: Pattern # Pattern
# The contents of the Pattern field is driven by the Source field # The contents of the Pattern field is driven by the Source field
self.source_index_changed(source_combo, row, 3, pattern=data['pattern']) self.source_index_changed(source_combo, row, self.COLUMNS['PATTERN']['ordinal'], pattern=data['pattern'])
self.blockSignals(False) self.blockSignals(False)
@ -775,17 +776,24 @@ class ExclusionRules(GenericRulesTable):
values = ['any date','unspecified'] values = ['any date','unspecified']
values_combo = ComboBox(self, values, pattern) values_combo = ComboBox(self, values, pattern)
self.setCellWidget(row, 3, values_combo) self.setCellWidget(row, self.COLUMNS['PATTERN']['ordinal'], values_combo)
class PrefixRules(GenericRulesTable): class PrefixRules(GenericRulesTable):
COLUMNS = { 'ENABLED':{'ordinal': 0, 'name': ''},
'NAME': {'ordinal': 1, 'name': 'Name'},
'PREFIX': {'ordinal': 2, 'name': 'Prefix'},
'FIELD': {'ordinal': 3, 'name': 'Field'},
'PATTERN':{'ordinal': 4, 'name': 'Value'},}
def __init__(self, parent_gb_hl, object_name, rules, eligible_custom_fields, db): def __init__(self, parent_gb_hl, object_name, rules, eligible_custom_fields, db):
super(PrefixRules, self).__init__(parent_gb_hl, object_name, rules, eligible_custom_fields, db) super(PrefixRules, self).__init__(parent_gb_hl, object_name, rules, eligible_custom_fields, db)
self._init_table_widget() self._init_table_widget()
self._initialize() self._initialize()
def _init_table_widget(self): def _init_table_widget(self):
header_labels = ['','Name','Prefix','Field','Value'] header_labels = [self.COLUMNS[index]['name'] \
for index in sorted(self.COLUMNS.keys(), key=lambda c: self.COLUMNS[c]['ordinal'])]
self.setColumnCount(len(header_labels)) self.setColumnCount(len(header_labels))
self.setHorizontalHeaderLabels(header_labels) self.setHorizontalHeaderLabels(header_labels)
self.setSortingEnabled(False) self.setSortingEnabled(False)
@ -803,10 +811,10 @@ class PrefixRules(GenericRulesTable):
data = self.create_blank_row_data() data = self.create_blank_row_data()
data['ordinal'] = row data['ordinal'] = row
data['enabled'] = self.item(row,0).checkState() == Qt.Checked data['enabled'] = self.item(row,0).checkState() == Qt.Checked
data['name'] = unicode(self.cellWidget(row,1).text()).strip() data['name'] = unicode(self.cellWidget(row,self.COLUMNS['NAME']['ordinal']).text()).strip()
data['prefix'] = unicode(self.cellWidget(row,2).currentText()).strip() data['prefix'] = unicode(self.cellWidget(row,self.COLUMNS['PREFIX']['ordinal']).currentText()).strip()
data['field'] = unicode(self.cellWidget(row,3).currentText()).strip() data['field'] = unicode(self.cellWidget(row,self.COLUMNS['FIELD']['ordinal']).currentText()).strip()
data['pattern'] = unicode(self.cellWidget(row,4).currentText()).strip() data['pattern'] = unicode(self.cellWidget(row,self.COLUMNS['PATTERN']['ordinal']).currentText()).strip()
return data return data
def create_blank_row_data(self): def create_blank_row_data(self):
@ -1003,22 +1011,21 @@ class PrefixRules(GenericRulesTable):
self.blockSignals(True) self.blockSignals(True)
#print("prefix_rules_populate_table_row processing rule:\n%s\n" % data) #print("prefix_rules_populate_table_row processing rule:\n%s\n" % data)
# Column 0: Enabled # Enabled
self.setItem(row, 0, CheckableTableWidgetItem(data['enabled'])) self.setItem(row, self.COLUMNS['ENABLED']['ordinal'], CheckableTableWidgetItem(data['enabled']))
# Column 1: Rule name # Rule name
#rule_name = QTableWidgetItem(data['name']) set_rule_name_in_row(row, self.COLUMNS['NAME']['ordinal'], name=data['name'])
set_rule_name_in_row(row, 1, name=data['name'])
# Column 2: Prefix # Prefix
set_prefix_field_in_row(row, 2, field=data['prefix']) set_prefix_field_in_row(row, self.COLUMNS['PREFIX']['ordinal'], field=data['prefix'])
# Column 3: Source field # Source field
source_combo = set_source_field_in_row(row, 3, field=data['field']) source_combo = set_source_field_in_row(row, self.COLUMNS['FIELD']['ordinal'], field=data['field'])
# Column 4: Pattern # Pattern
# The contents of the Pattern field is driven by the Source field # The contents of the Pattern field is driven by the Source field
self.source_index_changed(source_combo, row, 4, pattern=data['pattern']) self.source_index_changed(source_combo, row, self.COLUMNS['PATTERN']['ordinal'], pattern=data['pattern'])
self.blockSignals(False) self.blockSignals(False)
@ -1044,5 +1051,5 @@ class PrefixRules(GenericRulesTable):
values = ['any date','unspecified'] values = ['any date','unspecified']
values_combo = ComboBox(self, values, pattern) values_combo = ComboBox(self, values, pattern)
self.setCellWidget(row, 4, values_combo) self.setCellWidget(row, self.COLUMNS['PATTERN']['ordinal'], values_combo)

View File

@ -210,6 +210,11 @@ The default pattern \[.+\]|\+ excludes tags of the form [tag], e.g., [Test book]
<property name="title"> <property name="title">
<string>Excluded books</string> <string>Excluded books</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3"/>
</item>
</layout>
</widget> </widget>
</item> </item>
<item> <item>
@ -221,11 +226,16 @@ The default pattern \[.+\]|\+ excludes tags of the form [tag], e.g., [Test book]
</sizepolicy> </sizepolicy>
</property> </property>
<property name="toolTip"> <property name="toolTip">
<string>The first enabled matching rule will be used to add a prefix to book listings in the generated catalog.</string> <string>The first matching prefix rule applies a prefix to book listings in the generated catalog.</string>
</property> </property>
<property name="title"> <property name="title">
<string>Prefix rules</string> <string>Prefixes</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6"/>
</item>
</layout>
</widget> </widget>
</item> </item>
<item> <item>