PyBitmessage-2021-04-27/src/bitmessageqt/main.py

152 lines
5.5 KiB
Python
Raw Normal View History

2021-02-25 15:17:57 +00:00
import logging
import locale
import os
import sys
2018-11-07 16:25:11 +00:00
from PyQt4 import QtCore, QtGui
import l10n
import paths
2018-11-07 16:25:11 +00:00
import settingsmixin
import widgets
from bmconfigparser import BMConfigParser
from foldertree import AddressBookCompleter
from tr import _translate
class Window(settingsmixin.SMainWindow):
2018-11-07 16:25:11 +00:00
"""The main PyBitmessage's window"""
def __init__(self, parent=None):
super(Window, self).__init__(parent)
widgets.load('main.ui', self)
2018-11-07 16:25:11 +00:00
2021-02-25 15:17:57 +00:00
self.logger = logging.getLogger('default')
self.qmytranslator = self.qsystranslator = None
self.blackwhitelist.rerenderBlackWhiteList()
addressBookCompleter = AddressBookCompleter()
addressBookCompleter.setCompletionMode(
2018-11-07 16:25:11 +00:00
QtGui.QCompleter.PopupCompletion)
addressBookCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
addressBookCompleterModel = QtGui.QStringListModel()
addressBookCompleter.setModel(addressBookCompleterModel)
self.lineEditTo.setCompleter(addressBookCompleter)
self.lineEditTo.cursorPositionChanged.connect(
addressBookCompleter.onCursorPositionChanged)
# Put the colored icon on the status bar
self.statusbar.insertPermanentWidget(0, self.pushButtonStatusIcon)
# Hide all menu action containers
for toolbar in (
self.inboxContextMenuToolbar,
self.addressContextMenuToolbarYourIdentities,
self.addressContextMenuToolbar,
self.addressBookContextMenuToolbar,
self.subscriptionsContextMenuToolbar,
self.sentContextMenuToolbar
):
toolbar.setVisible(False)
2018-11-07 16:25:11 +00:00
2018-11-07 16:28:42 +00:00
# splitters
for splitter in (
self.inboxHorizontalSplitter,
self.sendHorizontalSplitter,
self.subscriptionsHorizontalSplitter,
self.chansHorizontalSplitter
):
splitter.setStretchFactor(0, 0)
splitter.setStretchFactor(1, 1)
splitter.setCollapsible(0, False)
splitter.setCollapsible(1, False)
for splitter in (
self.inboxMessagecontrolSplitter,
self.subscriptionsMessagecontrolSplitter,
self.chansMessagecontrolSplitter
):
splitter.setStretchFactor(0, 0)
splitter.setStretchFactor(1, 1)
splitter.setStretchFactor(2, 2)
splitter.setCollapsible(0, False)
splitter.setCollapsible(1, False)
splitter.setCollapsible(2, False)
splitter.handle(1).setEnabled(False)
self.sendMessagecontrolSplitter.handle(1).setEnabled(False)
2018-11-07 16:25:11 +00:00
def updateNetworkSwitchMenuLabel(self, dontconnect=None):
"""
Set the label for "Go online"/"Go offline" menu action
depending on 'dontconnect' setting
"""
if dontconnect is None:
dontconnect = BMConfigParser().safeGetBoolean(
'bitmessagesettings', 'dontconnect')
self.actionNetworkSwitch.setText(
_translate("MainWindow", "Go online", None)
if dontconnect else
_translate("MainWindow", "Go offline", None)
)
def retranslateUi(self):
"""Update widgets' texts which is not taken from ui-file"""
self.updateHumanFriendlyTTLDescription(int(
self.horizontalSliderTTL.tickPosition() ** 3.199 + 3600))
self.networkstatus.retranslateUi()
# FIXME: this is not best place for this func
def change_translation(self, newlocale=None):
"""Change translation language for the application"""
if newlocale is None:
newlocale = l10n.getTranslationLanguage()
try:
if not self.qmytranslator.isEmpty():
QtGui.QApplication.removeTranslator(self.qmytranslator)
except:
pass
try:
if not self.qsystranslator.isEmpty():
QtGui.QApplication.removeTranslator(self.qsystranslator)
except:
pass
self.qmytranslator = QtCore.QTranslator()
translationpath = os.path.join(
paths.codePath(), 'translations', 'bitmessage_' + newlocale)
self.qmytranslator.load(translationpath)
QtGui.QApplication.installTranslator(self.qmytranslator)
self.qsystranslator = QtCore.QTranslator()
if paths.frozen:
translationpath = os.path.join(
paths.codePath(), 'translations', 'qt_' + newlocale)
else:
translationpath = os.path.join(
str(QtCore.QLibraryInfo.location(
QtCore.QLibraryInfo.TranslationsPath)), 'qt_' + newlocale)
self.qsystranslator.load(translationpath)
QtGui.QApplication.installTranslator(self.qsystranslator)
lang = locale.normalize(l10n.getTranslationLanguage())
langs = [
lang.split(".")[0] + "." + l10n.encoding,
lang.split(".")[0] + "." + 'UTF-8',
lang
]
if 'win32' in sys.platform or 'win64' in sys.platform:
langs = [l10n.getWindowsLocale(lang)]
for lang in langs:
try:
l10n.setlocale(locale.LC_ALL, lang)
if 'win32' not in sys.platform and 'win64' not in sys.platform:
l10n.encoding = locale.nl_langinfo(locale.CODESET)
else:
l10n.encoding = locale.getlocale()[1]
2021-02-25 15:17:57 +00:00
self.logger.info("Successfully set locale to %s", lang)
break
except:
2021-02-25 15:17:57 +00:00
self.logger.error("Failed to set locale to %s", lang, exc_info=True)