-#!/usr/bin/python
-
# Copyright (c) Stas Shtin, 2010
# This file is part of IPyPBX.
# You should have received a copy of the GNU General Public License
# along with IPyPBX. If not, see <http://www.gnu.org/licenses/>.
+import os
import sys
-from ipypbx import ui
-from PyQt4 import QtCore, QtGui
+from ipypbx import controllers, ui
+from PyQt4 import QtCore, QtGui, QtSql
+
+
+# Working directory path.
+PREFIX = os.path.expanduser('~/.ipypbx')
+
+# Database file name.
+DB_NAME = 'ipypbx.db'
-class MainWindow(QtGui.QMainWindow):
- def __init__(self):
- QtGui.QMainWindow.__init__(self)
+def setupDb(prefix=PREFIX, dbname=DB_NAME):
+ """
+ Setup database.
+ """
+ created = False
+ # Create it if necessary.
+ if prefix:
+ if not os.path.exists(prefix):
+ created = True
+ os.mkdir(prefix, 0700)
+
+ os.chdir(prefix)
+
+ # Connect to SQLite database.
+ db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
+ db.setDatabaseName(dbname)
+
+ if db.open():
+ if created:
+ # Load script from local file.
+ sql_script = open(os.path.join(os.path.dirname(__file__), 'create.sql')).read()
- self.ui = ui.Ui_MainWindow()
- self.ui.setupUi(self)
+ # Split into individual queries.
+ sql_queries = sql_script.split(';')
+
+ # Execute all queries except last that is empty.
+ query = QtSql.QSqlQuery()
+ for query_string in sql_queries[:-1]:
+ query.exec_(query_string)
+ else:
+ # Something went horribly wrong.
+ QtGui.QMessageBox.warning(
+ None, "Fatal Error", "Database Error: %s" % db.lastError().text())
+ sys.exit(1)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
- locale = QtCore.QLocale.system().name()
- print "Locale is", locale
+ # Localize UI.
+ locale = QtCore.QLocale.system().name()
translator = QtCore.QTranslator()
if translator.load("ipypbx_%s" % locale.toLower(), "ipypbx/locale"):
- app.installTranslator(translator)
- else:
- print "Translation not found"
+ QtGui.QApplication.installTranslator(translator)
+
+ # Initialize main window.
+ setupDb()
+ main = QtGui.QMainWindow()
+ views = ui.Ui_MainWindow()
+ views.setupUi(main)
+ main.show()
+
+ # Setup controllers.
+ main.controllers = {}
+ for basename in ('Connection', 'SipProfile', 'Domain', 'Gateway',
+ 'Endpoint', 'Extension'):
+ main.controllers[basename.lower()] = getattr(
+ controllers, basename + 'Controller'
+ )(parent=main, views=views)
+
+ # 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:
+ # We have to explicitly emit row selection signal since previous state
+ # was unselected.
+ QtCore.QObject.emit(
+ main.controllers['connection'].view_list.selectionModel(),
+ QtCore.SIGNAL('currentRowChanged(QModelIndex, QModelIndex)'),
+ connection_index, connection_index)
- win = MainWindow()
- win.show()
+ sys.exit(app.exec_())
- app.exec_()