2015-05-28 13:32:09 +12:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
2016-02-07 00:34:22 +13:00
|
|
|
import faulthandler
|
2016-03-30 05:39:33 +13:00
|
|
|
import os
|
2015-05-28 13:32:09 +12:00
|
|
|
import sys
|
2016-02-06 00:25:25 +13:00
|
|
|
|
2017-06-21 01:24:15 +12:00
|
|
|
import manuskript.ui.views.webView
|
2016-02-07 00:34:22 +13:00
|
|
|
from PyQt5.QtCore import QLocale, QTranslator, QSettings
|
2016-02-29 11:48:53 +13:00
|
|
|
from PyQt5.QtGui import QIcon
|
|
|
|
from PyQt5.QtWidgets import QApplication, qApp
|
|
|
|
|
2016-03-30 05:39:33 +13:00
|
|
|
from manuskript.functions import appPath, writablePath
|
2017-09-29 08:26:04 +13:00
|
|
|
from manuskript.version import getVersion
|
2015-05-28 13:32:09 +12:00
|
|
|
|
2015-06-25 04:39:38 +12:00
|
|
|
faulthandler.enable()
|
2015-06-22 05:37:13 +12:00
|
|
|
|
2017-11-21 03:42:30 +13:00
|
|
|
def prepare(tests=False):
|
2015-05-28 13:32:09 +12:00
|
|
|
app = QApplication(sys.argv)
|
2017-11-22 11:11:08 +13:00
|
|
|
app.setOrganizationName("manuskript"+("_tests" if tests else ""))
|
2015-05-28 13:32:09 +12:00
|
|
|
app.setOrganizationDomain("www.theologeek.ch")
|
2017-11-22 11:11:08 +13:00
|
|
|
app.setApplicationName("manuskript"+("_tests" if tests else ""))
|
2017-09-29 08:26:04 +13:00
|
|
|
app.setApplicationVersion(getVersion())
|
2017-11-19 12:20:49 +13:00
|
|
|
|
2017-09-29 08:26:04 +13:00
|
|
|
print("Running manuskript version {}.".format(getVersion()))
|
2016-02-07 04:42:22 +13:00
|
|
|
icon = QIcon()
|
2017-05-10 08:54:35 +12:00
|
|
|
for i in [16, 32, 64, 128, 256, 512]:
|
2016-02-07 04:42:22 +13:00
|
|
|
icon.addFile(appPath("icons/Manuskript/icon-{}px.png".format(i)))
|
|
|
|
qApp.setWindowIcon(icon)
|
|
|
|
|
2015-06-07 00:21:48 +12:00
|
|
|
app.setStyle("Fusion")
|
2015-06-23 07:34:11 +12:00
|
|
|
|
2016-03-30 05:39:33 +13:00
|
|
|
# Load style from QSettings
|
|
|
|
settings = QSettings(app.organizationName(), app.applicationName())
|
|
|
|
if settings.contains("applicationStyle"):
|
|
|
|
style = settings.value("applicationStyle")
|
|
|
|
app.setStyle(style)
|
|
|
|
|
2016-02-06 00:25:25 +13:00
|
|
|
# Translation process
|
2015-06-08 12:10:18 +12:00
|
|
|
locale = QLocale.system().name()
|
2016-02-06 20:18:59 +13:00
|
|
|
|
2015-06-08 12:10:18 +12:00
|
|
|
appTranslator = QTranslator()
|
2016-03-30 05:39:33 +13:00
|
|
|
# By default: locale
|
|
|
|
translation = appPath(os.path.join("i18n", "manuskript_{}.qm".format(locale)))
|
|
|
|
|
|
|
|
# Load translation from settings
|
|
|
|
if settings.contains("applicationTranslation"):
|
|
|
|
translation = appPath(os.path.join("i18n", settings.value("applicationTranslation")))
|
|
|
|
print("Found translation in settings:", translation)
|
|
|
|
|
|
|
|
if appTranslator.load(translation):
|
2015-06-08 12:10:18 +12:00
|
|
|
app.installTranslator(appTranslator)
|
2016-03-30 05:39:33 +13:00
|
|
|
print(app.tr("Loaded translation: {}.").format(translation))
|
2015-06-23 07:34:11 +12:00
|
|
|
|
2016-03-30 05:39:33 +13:00
|
|
|
else:
|
2017-06-07 04:10:23 +12:00
|
|
|
print(app.tr("Note: No translator found or loaded for locale {}.").format(locale))
|
2016-02-06 00:25:25 +13:00
|
|
|
|
2015-09-29 22:17:03 +13:00
|
|
|
QIcon.setThemeSearchPaths(QIcon.themeSearchPaths() + [appPath("icons")])
|
|
|
|
QIcon.setThemeName("NumixMsk")
|
2015-06-23 07:34:11 +12:00
|
|
|
|
2017-11-30 02:34:25 +13:00
|
|
|
# Font siue
|
|
|
|
if settings.contains("appFontSize"):
|
|
|
|
f = qApp.font()
|
|
|
|
f.setPointSize(settings.value("appFontSize", type=int))
|
|
|
|
app.setFont(f)
|
|
|
|
|
2017-11-20 03:29:38 +13:00
|
|
|
# Main window
|
2017-11-19 12:20:49 +13:00
|
|
|
from manuskript.mainWindow import MainWindow
|
2015-06-23 07:34:11 +12:00
|
|
|
|
2017-11-20 03:29:38 +13:00
|
|
|
MW = MainWindow()
|
2017-10-19 23:13:20 +13:00
|
|
|
# We store the system default cursor flash time to be able to restore it
|
|
|
|
# later if necessary
|
2017-11-20 03:29:38 +13:00
|
|
|
MW._defaultCursorFlashTime = qApp.cursorFlashTime()
|
|
|
|
|
2017-12-01 05:47:23 +13:00
|
|
|
# Command line project
|
|
|
|
if len(sys.argv) > 1 and sys.argv[1][-4:] == ".msk":
|
|
|
|
if os.path.exists(sys.argv[1]):
|
|
|
|
path = os.path.abspath(sys.argv[1])
|
|
|
|
MW._autoLoadProject = path
|
|
|
|
|
2017-11-20 03:29:38 +13:00
|
|
|
return app, MW
|
|
|
|
|
|
|
|
def launch(MW = None):
|
|
|
|
if MW is None:
|
|
|
|
from manuskript.functions import mainWindow
|
|
|
|
MW = mainWindow()
|
|
|
|
|
|
|
|
MW.show()
|
2015-06-23 07:34:11 +12:00
|
|
|
|
2015-06-22 04:35:42 +12:00
|
|
|
qApp.exec_()
|
|
|
|
qApp.deleteLater()
|
2015-06-23 07:34:11 +12:00
|
|
|
|
2017-11-20 03:29:38 +13:00
|
|
|
def run():
|
|
|
|
"""
|
|
|
|
Run separates prepare and launch for two reasons:
|
|
|
|
1. I've read somewhere it helps with potential segfault (see comment below)
|
|
|
|
2. So that prepare can be used in tests, without running the whole thing
|
|
|
|
"""
|
|
|
|
# Need to return and keep `app` otherwise it gets deleted.
|
|
|
|
app, MW = prepare()
|
|
|
|
# Seperating launch to avoid segfault, so it seem.
|
|
|
|
# Cf. http://stackoverflow.com/questions/12433491/is-this-pyqt-4-python-bug-or-wrongly-behaving-code
|
|
|
|
launch(MW)
|
2015-06-08 08:06:57 +12:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2015-06-23 07:07:38 +12:00
|
|
|
run()
|