# along with IPyPBX. If not, see <http://www.gnu.org/licenses/>.
#from ipypbx import models
-from PyQt4 import QtCore
+from PyQt4 import QtCore, QtGui, QtSql
-class BaseHandler(object):
+class BaseController(QtCore.QObject):
"""
- Base class for various entity handlers.
+ Base class for other controllers.
Doesn't do anything useful on its own.
"""
- items = None
- current_items = None
+ fields = ()
+ hidden_fields = ()
+ visible_fields = ()
+
+ def __init__(self, model=None, view_list=None, view_display=None, parent=None):
+ super(BaseController, self).__init__(parent)
+
+ # Find out base name.
+ classname = self.__class__.__name__
+ self.base_name = (
+ classname[:-10] if classname.endswith('Controller')
+ else classname)
+ self.base_name = self.base_name[0].lower() + self.base_name[1:]
+
+ if model:
+ # We're given an existing model.
+ self.model = model
+ else:
+ # Initialize a new model.
+ self.model = QtSql.QSqlTableModel(parent)
+ self.model.setTable(self.base_name + 's')
+
+ # Create model header from fields list.
+ for i, field in enumerate(self.fields):
+ self.model.setHeaderData(
+ i, QtCore.Qt.Horizontal, QtCore.QVariant(field))
+
+ # Fetch model data.
+ self.model.select()
+
+ if view_list:
+ # We're given an existing view list.
+ self.view_list = view_list
+ else:
+ # Get view list from the parent.
+ self.view_list = getattr(parent, self.base_name + 'ViewList')
+ self.view_list.setModel(self.model)
+
+ # Hide fields not meant for display.
+ for i, field in enumerate(self.fields):
+ if (field in self.hidden_fields or
+ field not in self.visible_fields):
+ self.view_list.setColumnHidden(i, True)
+
+ # Stretch headers to fill all available width.
+ self.view_list.setSelectionMode(QtGui.QTableView.SingleSelection)
+ self.view_list.setSelectionBehavior(QtGui.QTableView.SelectRows)
+ self.view_list.resizeColumnsToContents()
+ self.view_list.resizeRowsToContents()
+ self.view_list.horizontalHeader().setStretchLastSection(True)
+
+ if view_display:
+ # We're given an existing view display.
+ self.view_display = view_display
+ else:
+ # Get view display from the parent.
+ self.view_display = getattr(parent, self.base_name + 'ViewDisplay')
+ self.view_display.setModel(self.model)
+
+ # Register signals for this controller.
+ for sender, signal, receiver in self.getSignalsData():
+ QtCore.QObject.connect(sender, QtCore.SIGNAL(signal), receiver)
+
+ def getSignalsData(self):
+ """
+ Default signals built from controller's base name.
+ """
+ parent = self.parent()
+
+ return (
+ (getattr(parent, self.base_name + 'Add'), 'clicked()', self.add),
+ (getattr(parent, self.base_name + 'ViewList'),
+ 'currentRowChanged(int)', self.select),
+ (getattr(parent, self.base_name + 'Save'), 'clicked()',
+ self.save),
+ )
- def __init__(self, parent):
- self.parent = parent
- self.initState()
+ def add(self):
+ """
+ TODO: Default implementation.
+ """
+ return NotImplemented
+
+ def save(self):
+ """
+ TODO: Default implementation.
+ """
+ return NotImplemented
- def initState(self):
+ def add(self):
+ """
+ TODO: Default implementation.
+ """
return NotImplemented
-class ConnectionController(QtCore.QObject):
+class ConnectionController(BaseController):
"""
Connections handler.
"""
-# def initState(self):
-# self.connections = []
-# #self.connections = list(state.store.query(models.Connection))
-# self.currentConnection = None
-
-# for connection in self.connections:
-# self.parent.ui.connectionList.addItem(connection.name)
-
-# if self.connections:
-# print self.parent.ui.connectionList.currentRow()
-# self.parent.ui.connectionList.setCurrentRow(0)
-# QtCore.QObject.emit(
-# self.parent.ui.connectionList, QtCore.SIGNAL('currentRowChanged(int)'), 0)
-
+ fields = (
+ 'ID', 'Name', 'Local IP Address', 'Local Port',
+ 'Freeswitch IP Address', 'Freeswitch Port')
+ visible_fields = ('Name', 'Freeswitch IP Address', 'Freeswitch Port')
+
def select(self, row):
"""
Select another connection as current.
"""
Add new connection.
"""
- print '!'
- print self.parent
self.currentConnection = None
name_template = 'New connection [{0:02}]'
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
setupDb()
-# import pdb; pdb.set_trace()
-# runApp()
views = ui.MainWindow()
views.show()
- connectionModel = QtSql.QSqlTableModel(views)
- connectionModel.setTable('connections')
- connectionModel.setHeaderData(
- sql.Connection.id, QtCore.Qt.Horizontal,
- QtCore.QVariant('Connection_ID'))
- connectionModel.setHeaderData(
- sql.Connection.name, QtCore.Qt.Horizontal,
- QtCore.QVariant('Name'))
- connectionModel.setHeaderData(
- sql.Connection.local_ip_address, QtCore.Qt.Horizontal,
- QtCore.QVariant('Local_IP_Address'))
- connectionModel.setHeaderData(
- sql.Connection.local_port, QtCore.Qt.Horizontal,
- QtCore.QVariant('Local_Port'))
- connectionModel.setHeaderData(
- sql.Connection.freeswitch_ip_address, QtCore.Qt.Horizontal,
- QtCore.QVariant('Freeswitch_IP_Address'))
- connectionModel.setHeaderData(
- sql.Connection.freeswitch_port, QtCore.Qt.Horizontal,
- QtCore.QVariant('Freeswitch_Port'))
- connectionModel.select()
-
- views.connectionView.setModel(connectionModel)
- views.connectionView.setColumnHidden(sql.Connection.id, True)
- views.connectionView.setSelectionMode(QtGui.QTableView.SingleSelection)
- views.connectionView.setSelectionBehavior(QtGui.QTableView.SelectRows)
- views.connectionView.resizeColumnsToContents()
- views.connectionView.resizeRowsToContents()
- views.connectionView.horizontalHeader().setStretchLastSection(True)
-
-
- views.connectionData.setModel(connectionModel)
- connectionController = controllers.ConnectionController()
-
- signals_data = (
- # (self.ui.connectionList, 'currentRowChanged(int)',
- # self.connections.select),
- # (self.ui.connectionClone, 'clicked()', self.connections.clone),
- # (self.ui.connectionSave, 'clicked()', self.connections.save),
-# (views.connectionAdd, 'clicked()', connectionController.add),
- )
-
-# for sender, signal, receiver in signals_data:
-# QtCore.QObject.connect(sender, QtCore.SIGNAL(signal), receiver)
+ connectionController = controllers.ConnectionController(parent=views)
app.exec_()
# sys.exit()
# along with IPyPBX. If not, see <http://www.gnu.org/licenses/>.
+# THIS FILE WILL BE DELETED SOON
+
from axiom.item import Item
from axiom.attributes import boolean, integer, reference, text
class Connection(object):
id, name, local_ip_address, local_port, freeswitch_ip_address, \
freeswitch_port = range(6)
+
from PyQt4 import QtCore, QtGui, QtSql
+
+class ConnectionDataMapper(QtGui.QDataWidgetMapper):
+ def add(self):
+ model = self.model()
+ model.insertRows(1, model.rowCount())
+
+
class MainWindow(QtGui.QMainWindow):
"""
Main GUI window.
self.layoutWidget.setObjectName("layoutWidget")
self.gridLayout = QtGui.QGridLayout(self.layoutWidget)
self.gridLayout.setObjectName("gridLayout")
- self.connectionData = QtGui.QDataWidgetMapper()
+ self.connectionViewDisplay = ConnectionDataMapper()
#self.formLayout_7 = QtGui.QFormLayout()
#self.formLayout_7.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
#self.formLayout_7.setObjectName("formLayout_7")
self.connectionSave = QtGui.QPushButton(self.layoutWidget)
self.connectionSave.setObjectName("connectionSave")
self.gridLayout.addWidget(self.connectionSave, 1, 1, 1, 1)
- self.connectionView = QtGui.QTableView(self.layoutWidget)
- self.connectionView.setObjectName("connectionView")
- self.gridLayout.addWidget(self.connectionView, 0, 0, 1, 1)
+ self.connectionViewList = QtGui.QTableView(self.layoutWidget)
+ self.connectionViewList.setObjectName("connectionViewList")
+ self.gridLayout.addWidget(self.connectionViewList, 0, 0, 1, 1)
self.tabWidget.addTab(self.connectionsTab, "")
self.sipProfilesTab = QtGui.QWidget()
self.sipProfilesTab.setMaximumSize(QtCore.QSize(796, 16777215))