view_display_fields = ()
view_display_fields_hidden = 'ID', 'Connection ID'
is_bound_to_connection = True
+ relations = ()
+ delegate = None
def __init__(self, model=None, view_list=None, view_display=None, parent=None, views=None):
super(BaseController, self).__init__(parent=parent)
self.model = model
# Otherwise initialize a new model.
else:
- self.model = QtSql.QSqlTableModel(parent)
+ self.model = QtSql.QSqlRelationalTableModel(parent)
self.model.setTable('ipypbxweb_%s' % self.basename.lower())
self.model.setEditStrategy(self.model.OnRowChange)
else:
self.view_display = QtGui.QDataWidgetMapper(parent)
self.view_display.setModel(self.model)
+ if self.delegate:
+ self.view_display.setItemDelegate(QtSql.QSqlRelationalDelegate(self))
display_fields = self.getDisplayFields()
field_widget = self.getFieldWidget(field)
self.view_display.addMapping(field_widget, i)
+ # Set relations for model & view display.
+ if self.relations:
+ self.delegate = QtSql.QSqlRelationalDelegate(self)
+ self.view_display.setItemDelegate(self.delegate)
+
+ for data in self.relations:
+ column, name, table, display = data
+ column_id = self.model.fieldIndex(column)
+
+ # SetRelation screws table data filtering?
+# self.model.setRelation(
+# column_id,
+# QtSql.QSqlRelation('ipypbxweb_%s' % table, 'id', display))
+
+# rel = self.model.relationModel(column_id)
+
+ widget = self.getFieldWidget(name)
+ widget.setModel(self.parent().controllers[table].model)
+ widget.setItemDelegate(self.delegate)
+
# Select first row in the view list.
self.view_display.toFirst()
"""
Listen to connection change signal.
"""
- connection_controller = self.parent().controllers[0]
+ connection_controller = self.parent().controllers['connection']
signals = [
(connection_controller.view_list.selectionModel(),
index.sibling(index.row(), 0)).toInt()
self.connection_id = connection_id
self.model.setFilter('connection_id = %i' % connection_id)
+ self.model.index(0, 0)
def setConnectionId(self, row, record):
record.setValue('connection_id', self.connection_id)
QtCore.QT_TRANSLATE_NOOP('MainWindow', 'SIP Profile ID'),
QtCore.QT_TRANSLATE_NOOP('MainWindow', 'Host Name'),
QtCore.QT_TRANSLATE_NOOP('MainWindow', 'Is Active'))
- view_list_fields = 'SIP Profile', 'Host Name'
-
+ view_list_fields = 'SIP Profile ID', 'Host Name'
+ relations = (('sip_profile_id', 'SIP Profile ID', 'sipprofile', 'Name'),)
+
class GatewayController(ConnectionChangeListenerController):
"""
QtCore.QT_TRANSLATE_NOOP('MainWindow', 'Caller ID In From Field'),
QtCore.QT_TRANSLATE_NOOP('MainWindow', 'Is Active'))
view_list_fields = 'SIP Profile ID', 'Name'
-
+ relations = (('sip_profile_id', 'SIP Profile ID', 'sipprofile', 'Name'),)
+
class EndpointController(ConnectionChangeListenerController):
"""
QtCore.QT_TRANSLATE_NOOP('MainWindow', 'Domain ID'),
QtCore.QT_TRANSLATE_NOOP('MainWindow', 'Is Active'))
view_list_fields = 'User ID', 'Domain ID'
+ relations = (('domain_id', 'Domain ID', 'domain', 'Host Name'),)
class ExtensionController(ConnectionChangeListenerController):
QtCore.QT_TRANSLATE_NOOP('MainWindow', 'Authenticate Calls'),
QtCore.QT_TRANSLATE_NOOP('MainWindow', 'Is Active'))
view_list_fields = 'Destination Match',
+ relations = (('domain_id', 'Domain ID', 'domain', 'Host Name'),)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
+ # Localize UI.
locale = QtCore.QLocale.system().name()
translator = QtCore.QTranslator()
if translator.load("ipypbx_%s" % locale.toLower(), "ipypbx/locale"):
QtGui.QApplication.installTranslator(translator)
+ # Initialize main window.
setupDb()
main = QtGui.QMainWindow()
views = ui.Ui_MainWindow()
views.setupUi(main)
main.show()
- main.controllers = []
+ # Setup controllers.
+ main.controllers = {}
for basename in ('Connection', 'SipProfile', 'Domain', 'Gateway',
'Endpoint', 'Extension'):
- main.controllers.append(getattr(
+ main.controllers[basename.lower()] = getattr(
controllers, basename + 'Controller'
- )(parent=main, views=views))
+ )(parent=main, views=views)
- connection_model = main.controllers[0].model
+ # Select first row.
+ connection_model = main.controllers['connection'].model
connection_index = connection_model.index(0, 0)
+
+ # Get first row index.
first_row_id, ok = connection_model.data(
connection_index.sibling(0, 0)).toInt()
-
- if ok:
+ if ok:
+ # We have to explicitly emit row selection signal since previous state
+ # was unselected.
QtCore.QObject.emit(
- main.controllers[0].view_list.selectionModel(),
+ main.controllers['connection'].view_list.selectionModel(),
QtCore.SIGNAL('currentRowChanged(QModelIndex, QModelIndex)'),
connection_index, connection_index)
-
-
sys.exit(app.exec_())