ui-file based Settings dialog
This commit is contained in:
parent
a961a4a2fb
commit
8a3074f3ff
|
@ -23,7 +23,6 @@ from addresses import decodeAddress, addBMIfNotPresent
|
||||||
import shared
|
import shared
|
||||||
from bitmessageui import Ui_MainWindow
|
from bitmessageui import Ui_MainWindow
|
||||||
from bmconfigparser import BMConfigParser
|
from bmconfigparser import BMConfigParser
|
||||||
import defaults
|
|
||||||
import namecoin
|
import namecoin
|
||||||
from messageview import MessageView
|
from messageview import MessageView
|
||||||
from migrationwizard import Ui_MigrationWizard
|
from migrationwizard import Ui_MigrationWizard
|
||||||
|
@ -31,15 +30,12 @@ from foldertree import (
|
||||||
AccountMixin, Ui_FolderWidget, Ui_AddressWidget, Ui_SubscriptionWidget,
|
AccountMixin, Ui_FolderWidget, Ui_AddressWidget, Ui_SubscriptionWidget,
|
||||||
MessageList_AddressWidget, MessageList_SubjectWidget,
|
MessageList_AddressWidget, MessageList_SubjectWidget,
|
||||||
Ui_AddressBookWidgetItemLabel, Ui_AddressBookWidgetItemAddress)
|
Ui_AddressBookWidgetItemLabel, Ui_AddressBookWidgetItemAddress)
|
||||||
from settings import Ui_settingsDialog
|
|
||||||
import settingsmixin
|
import settingsmixin
|
||||||
import support
|
import support
|
||||||
import debug
|
|
||||||
from helper_ackPayload import genAckPayload
|
from helper_ackPayload import genAckPayload
|
||||||
from helper_sql import sqlQuery, sqlExecute, sqlExecuteChunked, sqlStoredProcedure
|
from helper_sql import sqlQuery, sqlExecute, sqlExecuteChunked, sqlStoredProcedure
|
||||||
import helper_search
|
import helper_search
|
||||||
import l10n
|
import l10n
|
||||||
import openclpow
|
|
||||||
from utils import str_broadcast_subscribers, avatarize
|
from utils import str_broadcast_subscribers, avatarize
|
||||||
from account import (
|
from account import (
|
||||||
getSortedAccounts, getSortedSubscriptions, accountClass, BMAccount,
|
getSortedAccounts, getSortedSubscriptions, accountClass, BMAccount,
|
||||||
|
@ -47,16 +43,15 @@ from account import (
|
||||||
import dialogs
|
import dialogs
|
||||||
from network.stats import pendingDownload, pendingUpload
|
from network.stats import pendingDownload, pendingUpload
|
||||||
from uisignaler import UISignaler
|
from uisignaler import UISignaler
|
||||||
import knownnodes
|
|
||||||
import paths
|
import paths
|
||||||
from proofofwork import getPowType
|
from proofofwork import getPowType
|
||||||
import queues
|
import queues
|
||||||
import shutdown
|
import shutdown
|
||||||
import state
|
import state
|
||||||
from statusbar import BMStatusBar
|
from statusbar import BMStatusBar
|
||||||
from network.asyncore_pollchoose import set_rates
|
|
||||||
import sound
|
import sound
|
||||||
|
# This is needed for tray icon
|
||||||
|
import bitmessage_icons_rc # noqa:F401 pylint: disable=unused-import
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from plugins.plugin import get_plugin, get_plugins
|
from plugins.plugin import get_plugin, get_plugins
|
||||||
|
@ -64,49 +59,6 @@ except ImportError:
|
||||||
get_plugins = False
|
get_plugins = False
|
||||||
|
|
||||||
|
|
||||||
def change_translation(newlocale):
|
|
||||||
global qmytranslator, qsystranslator
|
|
||||||
try:
|
|
||||||
if not qmytranslator.isEmpty():
|
|
||||||
QtGui.QApplication.removeTranslator(qmytranslator)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
try:
|
|
||||||
if not qsystranslator.isEmpty():
|
|
||||||
QtGui.QApplication.removeTranslator(qsystranslator)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
qmytranslator = QtCore.QTranslator()
|
|
||||||
translationpath = os.path.join (paths.codePath(), 'translations', 'bitmessage_' + newlocale)
|
|
||||||
qmytranslator.load(translationpath)
|
|
||||||
QtGui.QApplication.installTranslator(qmytranslator)
|
|
||||||
|
|
||||||
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)
|
|
||||||
qsystranslator.load(translationpath)
|
|
||||||
QtGui.QApplication.installTranslator(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]
|
|
||||||
logger.info("Successfully set locale to %s", lang)
|
|
||||||
break
|
|
||||||
except:
|
|
||||||
logger.error("Failed to set locale to %s", lang, exc_info=True)
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: rewrite
|
# TODO: rewrite
|
||||||
def powQueueSize():
|
def powQueueSize():
|
||||||
"""Returns the size of queues.workerQueue including current unfinished work"""
|
"""Returns the size of queues.workerQueue including current unfinished work"""
|
||||||
|
@ -122,9 +74,6 @@ def powQueueSize():
|
||||||
|
|
||||||
class MyForm(settingsmixin.SMainWindow):
|
class MyForm(settingsmixin.SMainWindow):
|
||||||
|
|
||||||
# the last time that a message arrival sound was played
|
|
||||||
lastSoundTime = datetime.now() - timedelta(days=1)
|
|
||||||
|
|
||||||
# the maximum frequency of message sounds in seconds
|
# the maximum frequency of message sounds in seconds
|
||||||
maxSoundFrequencySec = 60
|
maxSoundFrequencySec = 60
|
||||||
|
|
||||||
|
@ -132,6 +81,58 @@ class MyForm(settingsmixin.SMainWindow):
|
||||||
REPLY_TYPE_CHAN = 1
|
REPLY_TYPE_CHAN = 1
|
||||||
REPLY_TYPE_UPD = 2
|
REPLY_TYPE_UPD = 2
|
||||||
|
|
||||||
|
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]
|
||||||
|
logger.info("Successfully set locale to %s", lang)
|
||||||
|
break
|
||||||
|
except:
|
||||||
|
logger.error("Failed to set locale to %s", lang, exc_info=True)
|
||||||
|
|
||||||
def init_file_menu(self):
|
def init_file_menu(self):
|
||||||
QtCore.QObject.connect(self.ui.actionExit, QtCore.SIGNAL(
|
QtCore.QObject.connect(self.ui.actionExit, QtCore.SIGNAL(
|
||||||
"triggered()"), self.quit)
|
"triggered()"), self.quit)
|
||||||
|
@ -605,6 +606,13 @@ class MyForm(settingsmixin.SMainWindow):
|
||||||
self.ui = Ui_MainWindow()
|
self.ui = Ui_MainWindow()
|
||||||
self.ui.setupUi(self)
|
self.ui.setupUi(self)
|
||||||
|
|
||||||
|
self.qmytranslator = self.qsystranslator = None
|
||||||
|
self.indicatorUpdate = None
|
||||||
|
self.actionStatus = None
|
||||||
|
|
||||||
|
# the last time that a message arrival sound was played
|
||||||
|
self.lastSoundTime = datetime.now() - timedelta(days=1)
|
||||||
|
|
||||||
# Ask the user if we may delete their old version 1 addresses if they
|
# Ask the user if we may delete their old version 1 addresses if they
|
||||||
# have any.
|
# have any.
|
||||||
for addressInKeysFile in getSortedAccounts():
|
for addressInKeysFile in getSortedAccounts():
|
||||||
|
@ -620,22 +628,9 @@ class MyForm(settingsmixin.SMainWindow):
|
||||||
BMConfigParser().remove_section(addressInKeysFile)
|
BMConfigParser().remove_section(addressInKeysFile)
|
||||||
BMConfigParser().save()
|
BMConfigParser().save()
|
||||||
|
|
||||||
# Configure Bitmessage to start on startup (or remove the
|
self.updateStartOnLogon()
|
||||||
# configuration) based on the setting in the keys.dat file
|
|
||||||
if 'win32' in sys.platform or 'win64' in sys.platform:
|
self.change_translation()
|
||||||
# Auto-startup for Windows
|
|
||||||
RUN_PATH = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"
|
|
||||||
self.settings = QtCore.QSettings(RUN_PATH, QtCore.QSettings.NativeFormat)
|
|
||||||
self.settings.remove(
|
|
||||||
"PyBitmessage") # In case the user moves the program and the registry entry is no longer valid, this will delete the old registry entry.
|
|
||||||
if BMConfigParser().getboolean('bitmessagesettings', 'startonlogon'):
|
|
||||||
self.settings.setValue("PyBitmessage", sys.argv[0])
|
|
||||||
elif 'darwin' in sys.platform:
|
|
||||||
# startup for mac
|
|
||||||
pass
|
|
||||||
elif 'linux' in sys.platform:
|
|
||||||
# startup for linux
|
|
||||||
pass
|
|
||||||
|
|
||||||
# e.g. for editing labels
|
# e.g. for editing labels
|
||||||
self.recurDepth = 0
|
self.recurDepth = 0
|
||||||
|
@ -828,6 +823,28 @@ class MyForm(settingsmixin.SMainWindow):
|
||||||
finally:
|
finally:
|
||||||
self._contact_selected = None
|
self._contact_selected = None
|
||||||
|
|
||||||
|
def updateStartOnLogon(self):
|
||||||
|
# Configure Bitmessage to start on startup (or remove the
|
||||||
|
# configuration) based on the setting in the keys.dat file
|
||||||
|
if 'win32' in sys.platform or 'win64' in sys.platform:
|
||||||
|
# Auto-startup for Windows
|
||||||
|
RUN_PATH = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"
|
||||||
|
self.settings = QtCore.QSettings(
|
||||||
|
RUN_PATH, QtCore.QSettings.NativeFormat)
|
||||||
|
# In case the user moves the program and the registry entry is
|
||||||
|
# no longer valid, this will delete the old registry entry.
|
||||||
|
self.settings.remove("PyBitmessage")
|
||||||
|
if BMConfigParser().getboolean(
|
||||||
|
'bitmessagesettings', 'startonlogon'
|
||||||
|
):
|
||||||
|
self.settings.setValue("PyBitmessage", sys.argv[0])
|
||||||
|
elif 'darwin' in sys.platform:
|
||||||
|
# startup for mac
|
||||||
|
pass
|
||||||
|
elif 'linux' in sys.platform:
|
||||||
|
# startup for linux
|
||||||
|
pass
|
||||||
|
|
||||||
def updateTTL(self, sliderPosition):
|
def updateTTL(self, sliderPosition):
|
||||||
TTL = int(sliderPosition ** 3.199 + 3600)
|
TTL = int(sliderPosition ** 3.199 + 3600)
|
||||||
self.updateHumanFriendlyTTLDescription(TTL)
|
self.updateHumanFriendlyTTLDescription(TTL)
|
||||||
|
@ -1622,7 +1639,6 @@ class MyForm(settingsmixin.SMainWindow):
|
||||||
# The window state has just been changed to
|
# The window state has just been changed to
|
||||||
# Normal/Maximised/FullScreen
|
# Normal/Maximised/FullScreen
|
||||||
pass
|
pass
|
||||||
# QtGui.QWidget.changeEvent(self, event)
|
|
||||||
|
|
||||||
def __icon_activated(self, reason):
|
def __icon_activated(self, reason):
|
||||||
if reason == QtGui.QSystemTrayIcon.Trigger:
|
if reason == QtGui.QSystemTrayIcon.Trigger:
|
||||||
|
@ -2434,225 +2450,7 @@ class MyForm(settingsmixin.SMainWindow):
|
||||||
dialogs.AboutDialog(self).exec_()
|
dialogs.AboutDialog(self).exec_()
|
||||||
|
|
||||||
def click_actionSettings(self):
|
def click_actionSettings(self):
|
||||||
self.settingsDialogInstance = settingsDialog(self)
|
dialogs.SettingsDialog(self, firstrun=self._firstrun).exec_()
|
||||||
if self._firstrun:
|
|
||||||
self.settingsDialogInstance.ui.tabWidgetSettings.setCurrentIndex(1)
|
|
||||||
if self.settingsDialogInstance.exec_():
|
|
||||||
if self._firstrun:
|
|
||||||
BMConfigParser().remove_option(
|
|
||||||
'bitmessagesettings', 'dontconnect')
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'startonlogon', str(
|
|
||||||
self.settingsDialogInstance.ui.checkBoxStartOnLogon.isChecked()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'minimizetotray', str(
|
|
||||||
self.settingsDialogInstance.ui.checkBoxMinimizeToTray.isChecked()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'trayonclose', str(
|
|
||||||
self.settingsDialogInstance.ui.checkBoxTrayOnClose.isChecked()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'hidetrayconnectionnotifications', str(
|
|
||||||
self.settingsDialogInstance.ui.checkBoxHideTrayConnectionNotifications.isChecked()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'showtraynotifications', str(
|
|
||||||
self.settingsDialogInstance.ui.checkBoxShowTrayNotifications.isChecked()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'startintray', str(
|
|
||||||
self.settingsDialogInstance.ui.checkBoxStartInTray.isChecked()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'willinglysendtomobile', str(
|
|
||||||
self.settingsDialogInstance.ui.checkBoxWillinglySendToMobile.isChecked()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'useidenticons', str(
|
|
||||||
self.settingsDialogInstance.ui.checkBoxUseIdenticons.isChecked()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'replybelow', str(
|
|
||||||
self.settingsDialogInstance.ui.checkBoxReplyBelow.isChecked()))
|
|
||||||
|
|
||||||
lang = str(self.settingsDialogInstance.ui.languageComboBox.itemData(self.settingsDialogInstance.ui.languageComboBox.currentIndex()).toString())
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'userlocale', lang)
|
|
||||||
change_translation(l10n.getTranslationLanguage())
|
|
||||||
|
|
||||||
if int(BMConfigParser().get('bitmessagesettings', 'port')) != int(self.settingsDialogInstance.ui.lineEditTCPPort.text()):
|
|
||||||
if not BMConfigParser().safeGetBoolean('bitmessagesettings', 'dontconnect'):
|
|
||||||
QtGui.QMessageBox.about(self, _translate("MainWindow", "Restart"), _translate(
|
|
||||||
"MainWindow", "You must restart Bitmessage for the port number change to take effect."))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'port', str(
|
|
||||||
self.settingsDialogInstance.ui.lineEditTCPPort.text()))
|
|
||||||
if self.settingsDialogInstance.ui.checkBoxUPnP.isChecked() != BMConfigParser().safeGetBoolean('bitmessagesettings', 'upnp'):
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'upnp', str(self.settingsDialogInstance.ui.checkBoxUPnP.isChecked()))
|
|
||||||
if self.settingsDialogInstance.ui.checkBoxUPnP.isChecked():
|
|
||||||
import upnp
|
|
||||||
upnpThread = upnp.uPnPThread()
|
|
||||||
upnpThread.start()
|
|
||||||
#print 'self.settingsDialogInstance.ui.comboBoxProxyType.currentText()', self.settingsDialogInstance.ui.comboBoxProxyType.currentText()
|
|
||||||
#print 'self.settingsDialogInstance.ui.comboBoxProxyType.currentText())[0:5]', self.settingsDialogInstance.ui.comboBoxProxyType.currentText()[0:5]
|
|
||||||
if BMConfigParser().get('bitmessagesettings', 'socksproxytype') == 'none' and self.settingsDialogInstance.ui.comboBoxProxyType.currentText()[0:5] == 'SOCKS':
|
|
||||||
if shared.statusIconColor != 'red':
|
|
||||||
QtGui.QMessageBox.about(self, _translate("MainWindow", "Restart"), _translate(
|
|
||||||
"MainWindow", "Bitmessage will use your proxy from now on but you may want to manually restart Bitmessage now to close existing connections (if any)."))
|
|
||||||
if BMConfigParser().get('bitmessagesettings', 'socksproxytype')[0:5] == 'SOCKS' and self.settingsDialogInstance.ui.comboBoxProxyType.currentText()[0:5] != 'SOCKS':
|
|
||||||
self.statusbar.clearMessage()
|
|
||||||
state.resetNetworkProtocolAvailability() # just in case we changed something in the network connectivity
|
|
||||||
if self.settingsDialogInstance.ui.comboBoxProxyType.currentText()[0:5] == 'SOCKS':
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'socksproxytype', str(
|
|
||||||
self.settingsDialogInstance.ui.comboBoxProxyType.currentText()))
|
|
||||||
else:
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'socksproxytype', 'none')
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'socksauthentication', str(
|
|
||||||
self.settingsDialogInstance.ui.checkBoxAuthentication.isChecked()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'sockshostname', str(
|
|
||||||
self.settingsDialogInstance.ui.lineEditSocksHostname.text()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'socksport', str(
|
|
||||||
self.settingsDialogInstance.ui.lineEditSocksPort.text()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'socksusername', str(
|
|
||||||
self.settingsDialogInstance.ui.lineEditSocksUsername.text()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'sockspassword', str(
|
|
||||||
self.settingsDialogInstance.ui.lineEditSocksPassword.text()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'sockslisten', str(
|
|
||||||
self.settingsDialogInstance.ui.checkBoxSocksListen.isChecked()))
|
|
||||||
try:
|
|
||||||
# Rounding to integers just for aesthetics
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'maxdownloadrate', str(
|
|
||||||
int(float(self.settingsDialogInstance.ui.lineEditMaxDownloadRate.text()))))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'maxuploadrate', str(
|
|
||||||
int(float(self.settingsDialogInstance.ui.lineEditMaxUploadRate.text()))))
|
|
||||||
except ValueError:
|
|
||||||
QtGui.QMessageBox.about(self, _translate("MainWindow", "Number needed"), _translate(
|
|
||||||
"MainWindow", "Your maximum download and upload rate must be numbers. Ignoring what you typed."))
|
|
||||||
else:
|
|
||||||
set_rates(BMConfigParser().safeGetInt("bitmessagesettings", "maxdownloadrate"),
|
|
||||||
BMConfigParser().safeGetInt("bitmessagesettings", "maxuploadrate"))
|
|
||||||
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'maxoutboundconnections', str(
|
|
||||||
int(float(self.settingsDialogInstance.ui.lineEditMaxOutboundConnections.text()))))
|
|
||||||
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'namecoinrpctype',
|
|
||||||
self.settingsDialogInstance.getNamecoinType())
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'namecoinrpchost', str(
|
|
||||||
self.settingsDialogInstance.ui.lineEditNamecoinHost.text()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'namecoinrpcport', str(
|
|
||||||
self.settingsDialogInstance.ui.lineEditNamecoinPort.text()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'namecoinrpcuser', str(
|
|
||||||
self.settingsDialogInstance.ui.lineEditNamecoinUser.text()))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'namecoinrpcpassword', str(
|
|
||||||
self.settingsDialogInstance.ui.lineEditNamecoinPassword.text()))
|
|
||||||
self.resetNamecoinConnection()
|
|
||||||
|
|
||||||
# Demanded difficulty tab
|
|
||||||
if float(self.settingsDialogInstance.ui.lineEditTotalDifficulty.text()) >= 1:
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'defaultnoncetrialsperbyte', str(int(float(
|
|
||||||
self.settingsDialogInstance.ui.lineEditTotalDifficulty.text()) * defaults.networkDefaultProofOfWorkNonceTrialsPerByte)))
|
|
||||||
if float(self.settingsDialogInstance.ui.lineEditSmallMessageDifficulty.text()) >= 1:
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'defaultpayloadlengthextrabytes', str(int(float(
|
|
||||||
self.settingsDialogInstance.ui.lineEditSmallMessageDifficulty.text()) * defaults.networkDefaultPayloadLengthExtraBytes)))
|
|
||||||
|
|
||||||
if self.settingsDialogInstance.ui.comboBoxOpenCL.currentText().toUtf8() != BMConfigParser().safeGet("bitmessagesettings", "opencl"):
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'opencl', str(self.settingsDialogInstance.ui.comboBoxOpenCL.currentText()))
|
|
||||||
queues.workerQueue.put(('resetPoW', ''))
|
|
||||||
|
|
||||||
acceptableDifficultyChanged = False
|
|
||||||
|
|
||||||
if float(self.settingsDialogInstance.ui.lineEditMaxAcceptableTotalDifficulty.text()) >= 1 or float(self.settingsDialogInstance.ui.lineEditMaxAcceptableTotalDifficulty.text()) == 0:
|
|
||||||
if BMConfigParser().get('bitmessagesettings','maxacceptablenoncetrialsperbyte') != str(int(float(
|
|
||||||
self.settingsDialogInstance.ui.lineEditMaxAcceptableTotalDifficulty.text()) * defaults.networkDefaultProofOfWorkNonceTrialsPerByte)):
|
|
||||||
# the user changed the max acceptable total difficulty
|
|
||||||
acceptableDifficultyChanged = True
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'maxacceptablenoncetrialsperbyte', str(int(float(
|
|
||||||
self.settingsDialogInstance.ui.lineEditMaxAcceptableTotalDifficulty.text()) * defaults.networkDefaultProofOfWorkNonceTrialsPerByte)))
|
|
||||||
if float(self.settingsDialogInstance.ui.lineEditMaxAcceptableSmallMessageDifficulty.text()) >= 1 or float(self.settingsDialogInstance.ui.lineEditMaxAcceptableSmallMessageDifficulty.text()) == 0:
|
|
||||||
if BMConfigParser().get('bitmessagesettings','maxacceptablepayloadlengthextrabytes') != str(int(float(
|
|
||||||
self.settingsDialogInstance.ui.lineEditMaxAcceptableSmallMessageDifficulty.text()) * defaults.networkDefaultPayloadLengthExtraBytes)):
|
|
||||||
# the user changed the max acceptable small message difficulty
|
|
||||||
acceptableDifficultyChanged = True
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'maxacceptablepayloadlengthextrabytes', str(int(float(
|
|
||||||
self.settingsDialogInstance.ui.lineEditMaxAcceptableSmallMessageDifficulty.text()) * defaults.networkDefaultPayloadLengthExtraBytes)))
|
|
||||||
if acceptableDifficultyChanged:
|
|
||||||
# It might now be possible to send msgs which were previously marked as toodifficult.
|
|
||||||
# Let us change them to 'msgqueued'. The singleWorker will try to send them and will again
|
|
||||||
# mark them as toodifficult if the receiver's required difficulty is still higher than
|
|
||||||
# we are willing to do.
|
|
||||||
sqlExecute('''UPDATE sent SET status='msgqueued' WHERE status='toodifficult' ''')
|
|
||||||
queues.workerQueue.put(('sendmessage', ''))
|
|
||||||
|
|
||||||
#start:UI setting to stop trying to send messages after X days/months
|
|
||||||
# I'm open to changing this UI to something else if someone has a better idea.
|
|
||||||
if ((self.settingsDialogInstance.ui.lineEditDays.text()=='') and (self.settingsDialogInstance.ui.lineEditMonths.text()=='')):#We need to handle this special case. Bitmessage has its default behavior. The input is blank/blank
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'stopresendingafterxdays', '')
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'stopresendingafterxmonths', '')
|
|
||||||
shared.maximumLengthOfTimeToBotherResendingMessages = float('inf')
|
|
||||||
try:
|
|
||||||
float(self.settingsDialogInstance.ui.lineEditDays.text())
|
|
||||||
lineEditDaysIsValidFloat = True
|
|
||||||
except:
|
|
||||||
lineEditDaysIsValidFloat = False
|
|
||||||
try:
|
|
||||||
float(self.settingsDialogInstance.ui.lineEditMonths.text())
|
|
||||||
lineEditMonthsIsValidFloat = True
|
|
||||||
except:
|
|
||||||
lineEditMonthsIsValidFloat = False
|
|
||||||
if lineEditDaysIsValidFloat and not lineEditMonthsIsValidFloat:
|
|
||||||
self.settingsDialogInstance.ui.lineEditMonths.setText("0")
|
|
||||||
if lineEditMonthsIsValidFloat and not lineEditDaysIsValidFloat:
|
|
||||||
self.settingsDialogInstance.ui.lineEditDays.setText("0")
|
|
||||||
if lineEditDaysIsValidFloat or lineEditMonthsIsValidFloat:
|
|
||||||
if (float(self.settingsDialogInstance.ui.lineEditDays.text()) >=0 and float(self.settingsDialogInstance.ui.lineEditMonths.text()) >=0):
|
|
||||||
shared.maximumLengthOfTimeToBotherResendingMessages = (float(str(self.settingsDialogInstance.ui.lineEditDays.text())) * 24 * 60 * 60) + (float(str(self.settingsDialogInstance.ui.lineEditMonths.text())) * (60 * 60 * 24 *365)/12)
|
|
||||||
if shared.maximumLengthOfTimeToBotherResendingMessages < 432000: # If the time period is less than 5 hours, we give zero values to all fields. No message will be sent again.
|
|
||||||
QtGui.QMessageBox.about(self, _translate("MainWindow", "Will not resend ever"), _translate(
|
|
||||||
"MainWindow", "Note that the time limit you entered is less than the amount of time Bitmessage waits for the first resend attempt therefore your messages will never be resent."))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'stopresendingafterxdays', '0')
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'stopresendingafterxmonths', '0')
|
|
||||||
shared.maximumLengthOfTimeToBotherResendingMessages = 0
|
|
||||||
else:
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'stopresendingafterxdays', str(float(
|
|
||||||
self.settingsDialogInstance.ui.lineEditDays.text())))
|
|
||||||
BMConfigParser().set('bitmessagesettings', 'stopresendingafterxmonths', str(float(
|
|
||||||
self.settingsDialogInstance.ui.lineEditMonths.text())))
|
|
||||||
|
|
||||||
BMConfigParser().save()
|
|
||||||
|
|
||||||
if 'win32' in sys.platform or 'win64' in sys.platform:
|
|
||||||
# Auto-startup for Windows
|
|
||||||
RUN_PATH = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"
|
|
||||||
self.settings = QtCore.QSettings(RUN_PATH, QtCore.QSettings.NativeFormat)
|
|
||||||
if BMConfigParser().getboolean('bitmessagesettings', 'startonlogon'):
|
|
||||||
self.settings.setValue("PyBitmessage", sys.argv[0])
|
|
||||||
else:
|
|
||||||
self.settings.remove("PyBitmessage")
|
|
||||||
elif 'darwin' in sys.platform:
|
|
||||||
# startup for mac
|
|
||||||
pass
|
|
||||||
elif 'linux' in sys.platform:
|
|
||||||
# startup for linux
|
|
||||||
pass
|
|
||||||
|
|
||||||
if state.appdata != paths.lookupExeFolder() and self.settingsDialogInstance.ui.checkBoxPortableMode.isChecked(): # If we are NOT using portable mode now but the user selected that we should...
|
|
||||||
# Write the keys.dat file to disk in the new location
|
|
||||||
sqlStoredProcedure('movemessagstoprog')
|
|
||||||
with open(paths.lookupExeFolder() + 'keys.dat', 'wb') as configfile:
|
|
||||||
BMConfigParser().write(configfile)
|
|
||||||
# Write the knownnodes.dat file to disk in the new location
|
|
||||||
knownnodes.saveKnownNodes(paths.lookupExeFolder())
|
|
||||||
os.remove(state.appdata + 'keys.dat')
|
|
||||||
os.remove(state.appdata + 'knownnodes.dat')
|
|
||||||
previousAppdataLocation = state.appdata
|
|
||||||
state.appdata = paths.lookupExeFolder()
|
|
||||||
debug.resetLogging()
|
|
||||||
try:
|
|
||||||
os.remove(previousAppdataLocation + 'debug.log')
|
|
||||||
os.remove(previousAppdataLocation + 'debug.log.1')
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if state.appdata == paths.lookupExeFolder() and not self.settingsDialogInstance.ui.checkBoxPortableMode.isChecked(): # If we ARE using portable mode now but the user selected that we shouldn't...
|
|
||||||
state.appdata = paths.lookupAppdataFolder()
|
|
||||||
if not os.path.exists(state.appdata):
|
|
||||||
os.makedirs(state.appdata)
|
|
||||||
sqlStoredProcedure('movemessagstoappdata')
|
|
||||||
# Write the keys.dat file to disk in the new location
|
|
||||||
BMConfigParser().save()
|
|
||||||
# Write the knownnodes.dat file to disk in the new location
|
|
||||||
knownnodes.saveKnownNodes(state.appdata)
|
|
||||||
os.remove(paths.lookupExeFolder() + 'keys.dat')
|
|
||||||
os.remove(paths.lookupExeFolder() + 'knownnodes.dat')
|
|
||||||
debug.resetLogging()
|
|
||||||
try:
|
|
||||||
os.remove(paths.lookupExeFolder() + 'debug.log')
|
|
||||||
os.remove(paths.lookupExeFolder() + 'debug.log.1')
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def on_action_Send(self):
|
def on_action_Send(self):
|
||||||
"""Send message to current selected address"""
|
"""Send message to current selected address"""
|
||||||
|
@ -4253,237 +4051,6 @@ class MyForm(settingsmixin.SMainWindow):
|
||||||
obj.loadSettings()
|
obj.loadSettings()
|
||||||
|
|
||||||
|
|
||||||
class settingsDialog(QtGui.QDialog):
|
|
||||||
|
|
||||||
def __init__(self, parent):
|
|
||||||
QtGui.QWidget.__init__(self, parent)
|
|
||||||
self.ui = Ui_settingsDialog()
|
|
||||||
self.ui.setupUi(self)
|
|
||||||
self.parent = parent
|
|
||||||
self.ui.checkBoxStartOnLogon.setChecked(
|
|
||||||
BMConfigParser().getboolean('bitmessagesettings', 'startonlogon'))
|
|
||||||
self.ui.checkBoxMinimizeToTray.setChecked(
|
|
||||||
BMConfigParser().getboolean('bitmessagesettings', 'minimizetotray'))
|
|
||||||
self.ui.checkBoxTrayOnClose.setChecked(
|
|
||||||
BMConfigParser().safeGetBoolean('bitmessagesettings', 'trayonclose'))
|
|
||||||
self.ui.checkBoxHideTrayConnectionNotifications.setChecked(
|
|
||||||
BMConfigParser().getboolean("bitmessagesettings", "hidetrayconnectionnotifications"))
|
|
||||||
self.ui.checkBoxShowTrayNotifications.setChecked(
|
|
||||||
BMConfigParser().getboolean('bitmessagesettings', 'showtraynotifications'))
|
|
||||||
self.ui.checkBoxStartInTray.setChecked(
|
|
||||||
BMConfigParser().getboolean('bitmessagesettings', 'startintray'))
|
|
||||||
self.ui.checkBoxWillinglySendToMobile.setChecked(
|
|
||||||
BMConfigParser().safeGetBoolean('bitmessagesettings', 'willinglysendtomobile'))
|
|
||||||
self.ui.checkBoxUseIdenticons.setChecked(
|
|
||||||
BMConfigParser().safeGetBoolean('bitmessagesettings', 'useidenticons'))
|
|
||||||
self.ui.checkBoxReplyBelow.setChecked(
|
|
||||||
BMConfigParser().safeGetBoolean('bitmessagesettings', 'replybelow'))
|
|
||||||
|
|
||||||
if state.appdata == paths.lookupExeFolder():
|
|
||||||
self.ui.checkBoxPortableMode.setChecked(True)
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
import tempfile
|
|
||||||
tempfile.NamedTemporaryFile(
|
|
||||||
dir=paths.lookupExeFolder(), delete=True
|
|
||||||
).close() # should autodelete
|
|
||||||
except:
|
|
||||||
self.ui.checkBoxPortableMode.setDisabled(True)
|
|
||||||
|
|
||||||
if 'darwin' in sys.platform:
|
|
||||||
self.ui.checkBoxStartOnLogon.setDisabled(True)
|
|
||||||
self.ui.checkBoxStartOnLogon.setText(_translate(
|
|
||||||
"MainWindow", "Start-on-login not yet supported on your OS."))
|
|
||||||
self.ui.checkBoxMinimizeToTray.setDisabled(True)
|
|
||||||
self.ui.checkBoxMinimizeToTray.setText(_translate(
|
|
||||||
"MainWindow", "Minimize-to-tray not yet supported on your OS."))
|
|
||||||
self.ui.checkBoxShowTrayNotifications.setDisabled(True)
|
|
||||||
self.ui.checkBoxShowTrayNotifications.setText(_translate(
|
|
||||||
"MainWindow", "Tray notifications not yet supported on your OS."))
|
|
||||||
elif 'linux' in sys.platform:
|
|
||||||
self.ui.checkBoxStartOnLogon.setDisabled(True)
|
|
||||||
self.ui.checkBoxStartOnLogon.setText(_translate(
|
|
||||||
"MainWindow", "Start-on-login not yet supported on your OS."))
|
|
||||||
# On the Network settings tab:
|
|
||||||
self.ui.lineEditTCPPort.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'port')))
|
|
||||||
self.ui.checkBoxUPnP.setChecked(
|
|
||||||
BMConfigParser().safeGetBoolean('bitmessagesettings', 'upnp'))
|
|
||||||
self.ui.checkBoxAuthentication.setChecked(BMConfigParser().getboolean(
|
|
||||||
'bitmessagesettings', 'socksauthentication'))
|
|
||||||
self.ui.checkBoxSocksListen.setChecked(BMConfigParser().getboolean(
|
|
||||||
'bitmessagesettings', 'sockslisten'))
|
|
||||||
if str(BMConfigParser().get('bitmessagesettings', 'socksproxytype')) == 'none':
|
|
||||||
self.ui.comboBoxProxyType.setCurrentIndex(0)
|
|
||||||
self.ui.lineEditSocksHostname.setEnabled(False)
|
|
||||||
self.ui.lineEditSocksPort.setEnabled(False)
|
|
||||||
self.ui.lineEditSocksUsername.setEnabled(False)
|
|
||||||
self.ui.lineEditSocksPassword.setEnabled(False)
|
|
||||||
self.ui.checkBoxAuthentication.setEnabled(False)
|
|
||||||
self.ui.checkBoxSocksListen.setEnabled(False)
|
|
||||||
elif str(BMConfigParser().get('bitmessagesettings', 'socksproxytype')) == 'SOCKS4a':
|
|
||||||
self.ui.comboBoxProxyType.setCurrentIndex(1)
|
|
||||||
elif str(BMConfigParser().get('bitmessagesettings', 'socksproxytype')) == 'SOCKS5':
|
|
||||||
self.ui.comboBoxProxyType.setCurrentIndex(2)
|
|
||||||
|
|
||||||
self.ui.lineEditSocksHostname.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'sockshostname')))
|
|
||||||
self.ui.lineEditSocksPort.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'socksport')))
|
|
||||||
self.ui.lineEditSocksUsername.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'socksusername')))
|
|
||||||
self.ui.lineEditSocksPassword.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'sockspassword')))
|
|
||||||
QtCore.QObject.connect(self.ui.comboBoxProxyType, QtCore.SIGNAL(
|
|
||||||
"currentIndexChanged(int)"), self.comboBoxProxyTypeChanged)
|
|
||||||
self.ui.lineEditMaxDownloadRate.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'maxdownloadrate')))
|
|
||||||
self.ui.lineEditMaxUploadRate.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'maxuploadrate')))
|
|
||||||
self.ui.lineEditMaxOutboundConnections.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'maxoutboundconnections')))
|
|
||||||
|
|
||||||
# Demanded difficulty tab
|
|
||||||
self.ui.lineEditTotalDifficulty.setText(str((float(BMConfigParser().getint(
|
|
||||||
'bitmessagesettings', 'defaultnoncetrialsperbyte')) / defaults.networkDefaultProofOfWorkNonceTrialsPerByte)))
|
|
||||||
self.ui.lineEditSmallMessageDifficulty.setText(str((float(BMConfigParser().getint(
|
|
||||||
'bitmessagesettings', 'defaultpayloadlengthextrabytes')) / defaults.networkDefaultPayloadLengthExtraBytes)))
|
|
||||||
|
|
||||||
# Max acceptable difficulty tab
|
|
||||||
self.ui.lineEditMaxAcceptableTotalDifficulty.setText(str((float(BMConfigParser().getint(
|
|
||||||
'bitmessagesettings', 'maxacceptablenoncetrialsperbyte')) / defaults.networkDefaultProofOfWorkNonceTrialsPerByte)))
|
|
||||||
self.ui.lineEditMaxAcceptableSmallMessageDifficulty.setText(str((float(BMConfigParser().getint(
|
|
||||||
'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes')) / defaults.networkDefaultPayloadLengthExtraBytes)))
|
|
||||||
|
|
||||||
# OpenCL
|
|
||||||
if openclpow.openclAvailable():
|
|
||||||
self.ui.comboBoxOpenCL.setEnabled(True)
|
|
||||||
else:
|
|
||||||
self.ui.comboBoxOpenCL.setEnabled(False)
|
|
||||||
self.ui.comboBoxOpenCL.clear()
|
|
||||||
self.ui.comboBoxOpenCL.addItem("None")
|
|
||||||
self.ui.comboBoxOpenCL.addItems(openclpow.vendors)
|
|
||||||
self.ui.comboBoxOpenCL.setCurrentIndex(0)
|
|
||||||
for i in range(self.ui.comboBoxOpenCL.count()):
|
|
||||||
if self.ui.comboBoxOpenCL.itemText(i) == BMConfigParser().safeGet('bitmessagesettings', 'opencl'):
|
|
||||||
self.ui.comboBoxOpenCL.setCurrentIndex(i)
|
|
||||||
break
|
|
||||||
|
|
||||||
# Namecoin integration tab
|
|
||||||
nmctype = BMConfigParser().get('bitmessagesettings', 'namecoinrpctype')
|
|
||||||
self.ui.lineEditNamecoinHost.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'namecoinrpchost')))
|
|
||||||
self.ui.lineEditNamecoinPort.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'namecoinrpcport')))
|
|
||||||
self.ui.lineEditNamecoinUser.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'namecoinrpcuser')))
|
|
||||||
self.ui.lineEditNamecoinPassword.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'namecoinrpcpassword')))
|
|
||||||
|
|
||||||
if nmctype == "namecoind":
|
|
||||||
self.ui.radioButtonNamecoinNamecoind.setChecked(True)
|
|
||||||
elif nmctype == "nmcontrol":
|
|
||||||
self.ui.radioButtonNamecoinNmcontrol.setChecked(True)
|
|
||||||
self.ui.lineEditNamecoinUser.setEnabled(False)
|
|
||||||
self.ui.labelNamecoinUser.setEnabled(False)
|
|
||||||
self.ui.lineEditNamecoinPassword.setEnabled(False)
|
|
||||||
self.ui.labelNamecoinPassword.setEnabled(False)
|
|
||||||
else:
|
|
||||||
assert False
|
|
||||||
|
|
||||||
QtCore.QObject.connect(self.ui.radioButtonNamecoinNamecoind, QtCore.SIGNAL(
|
|
||||||
"toggled(bool)"), self.namecoinTypeChanged)
|
|
||||||
QtCore.QObject.connect(self.ui.radioButtonNamecoinNmcontrol, QtCore.SIGNAL(
|
|
||||||
"toggled(bool)"), self.namecoinTypeChanged)
|
|
||||||
QtCore.QObject.connect(self.ui.pushButtonNamecoinTest, QtCore.SIGNAL(
|
|
||||||
"clicked()"), self.click_pushButtonNamecoinTest)
|
|
||||||
|
|
||||||
#Message Resend tab
|
|
||||||
self.ui.lineEditDays.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'stopresendingafterxdays')))
|
|
||||||
self.ui.lineEditMonths.setText(str(
|
|
||||||
BMConfigParser().get('bitmessagesettings', 'stopresendingafterxmonths')))
|
|
||||||
|
|
||||||
|
|
||||||
#'System' tab removed for now.
|
|
||||||
"""try:
|
|
||||||
maxCores = BMConfigParser().getint('bitmessagesettings', 'maxcores')
|
|
||||||
except:
|
|
||||||
maxCores = 99999
|
|
||||||
if maxCores <= 1:
|
|
||||||
self.ui.comboBoxMaxCores.setCurrentIndex(0)
|
|
||||||
elif maxCores == 2:
|
|
||||||
self.ui.comboBoxMaxCores.setCurrentIndex(1)
|
|
||||||
elif maxCores <= 4:
|
|
||||||
self.ui.comboBoxMaxCores.setCurrentIndex(2)
|
|
||||||
elif maxCores <= 8:
|
|
||||||
self.ui.comboBoxMaxCores.setCurrentIndex(3)
|
|
||||||
elif maxCores <= 16:
|
|
||||||
self.ui.comboBoxMaxCores.setCurrentIndex(4)
|
|
||||||
else:
|
|
||||||
self.ui.comboBoxMaxCores.setCurrentIndex(5)"""
|
|
||||||
|
|
||||||
QtGui.QWidget.resize(self, QtGui.QWidget.sizeHint(self))
|
|
||||||
|
|
||||||
def comboBoxProxyTypeChanged(self, comboBoxIndex):
|
|
||||||
if comboBoxIndex == 0:
|
|
||||||
self.ui.lineEditSocksHostname.setEnabled(False)
|
|
||||||
self.ui.lineEditSocksPort.setEnabled(False)
|
|
||||||
self.ui.lineEditSocksUsername.setEnabled(False)
|
|
||||||
self.ui.lineEditSocksPassword.setEnabled(False)
|
|
||||||
self.ui.checkBoxAuthentication.setEnabled(False)
|
|
||||||
self.ui.checkBoxSocksListen.setEnabled(False)
|
|
||||||
elif comboBoxIndex == 1 or comboBoxIndex == 2:
|
|
||||||
self.ui.lineEditSocksHostname.setEnabled(True)
|
|
||||||
self.ui.lineEditSocksPort.setEnabled(True)
|
|
||||||
self.ui.checkBoxAuthentication.setEnabled(True)
|
|
||||||
self.ui.checkBoxSocksListen.setEnabled(True)
|
|
||||||
if self.ui.checkBoxAuthentication.isChecked():
|
|
||||||
self.ui.lineEditSocksUsername.setEnabled(True)
|
|
||||||
self.ui.lineEditSocksPassword.setEnabled(True)
|
|
||||||
|
|
||||||
# Check status of namecoin integration radio buttons and translate
|
|
||||||
# it to a string as in the options.
|
|
||||||
def getNamecoinType(self):
|
|
||||||
if self.ui.radioButtonNamecoinNamecoind.isChecked():
|
|
||||||
return "namecoind"
|
|
||||||
if self.ui.radioButtonNamecoinNmcontrol.isChecked():
|
|
||||||
return "nmcontrol"
|
|
||||||
assert False
|
|
||||||
|
|
||||||
# Namecoin connection type was changed.
|
|
||||||
def namecoinTypeChanged(self, checked):
|
|
||||||
nmctype = self.getNamecoinType()
|
|
||||||
assert nmctype == "namecoind" or nmctype == "nmcontrol"
|
|
||||||
|
|
||||||
isNamecoind = (nmctype == "namecoind")
|
|
||||||
self.ui.lineEditNamecoinUser.setEnabled(isNamecoind)
|
|
||||||
self.ui.labelNamecoinUser.setEnabled(isNamecoind)
|
|
||||||
self.ui.lineEditNamecoinPassword.setEnabled(isNamecoind)
|
|
||||||
self.ui.labelNamecoinPassword.setEnabled(isNamecoind)
|
|
||||||
|
|
||||||
if isNamecoind:
|
|
||||||
self.ui.lineEditNamecoinPort.setText(defaults.namecoinDefaultRpcPort)
|
|
||||||
else:
|
|
||||||
self.ui.lineEditNamecoinPort.setText("9000")
|
|
||||||
|
|
||||||
def click_pushButtonNamecoinTest(self):
|
|
||||||
"""Test the namecoin settings specified in the settings dialog."""
|
|
||||||
self.ui.labelNamecoinTestResult.setText(_translate(
|
|
||||||
"MainWindow", "Testing..."))
|
|
||||||
options = {}
|
|
||||||
options["type"] = self.getNamecoinType()
|
|
||||||
options["host"] = str(self.ui.lineEditNamecoinHost.text().toUtf8())
|
|
||||||
options["port"] = str(self.ui.lineEditNamecoinPort.text().toUtf8())
|
|
||||||
options["user"] = str(self.ui.lineEditNamecoinUser.text().toUtf8())
|
|
||||||
options["password"] = str(self.ui.lineEditNamecoinPassword.text().toUtf8())
|
|
||||||
nc = namecoin.namecoinConnection(options)
|
|
||||||
status, text = nc.test()
|
|
||||||
self.ui.labelNamecoinTestResult.setText(text)
|
|
||||||
if status == 'success':
|
|
||||||
self.parent.namecoin = nc
|
|
||||||
|
|
||||||
|
|
||||||
# In order for the time columns on the Inbox and Sent tabs to be sorted
|
# In order for the time columns on the Inbox and Sent tabs to be sorted
|
||||||
# correctly (rather than alphabetically), we need to overload the <
|
# correctly (rather than alphabetically), we need to overload the <
|
||||||
# operator and use this class instead of QTableWidgetItem.
|
# operator and use this class instead of QTableWidgetItem.
|
||||||
|
@ -4558,7 +4125,6 @@ def init():
|
||||||
def run():
|
def run():
|
||||||
global myapp
|
global myapp
|
||||||
app = init()
|
app = init()
|
||||||
change_translation(l10n.getTranslationLanguage())
|
|
||||||
app.setStyleSheet("QStatusBar::item { border: 0px solid black }")
|
app.setStyleSheet("QStatusBar::item { border: 0px solid black }")
|
||||||
myapp = MyForm()
|
myapp = MyForm()
|
||||||
|
|
||||||
|
|
|
@ -5,22 +5,25 @@ src/bitmessageqt/dialogs.py
|
||||||
|
|
||||||
from PyQt4 import QtGui
|
from PyQt4 import QtGui
|
||||||
|
|
||||||
from version import softwareVersion
|
|
||||||
|
|
||||||
import paths
|
import paths
|
||||||
import widgets
|
import widgets
|
||||||
from address_dialogs import (
|
from address_dialogs import (
|
||||||
AddAddressDialog, EmailGatewayDialog, NewAddressDialog, NewSubscriptionDialog, RegenerateAddressesDialog,
|
AddAddressDialog, EmailGatewayDialog, NewAddressDialog,
|
||||||
|
NewSubscriptionDialog, RegenerateAddressesDialog,
|
||||||
SpecialAddressBehaviorDialog
|
SpecialAddressBehaviorDialog
|
||||||
)
|
)
|
||||||
from newchandialog import NewChanDialog
|
from newchandialog import NewChanDialog
|
||||||
from retranslateui import RetranslateMixin
|
from retranslateui import RetranslateMixin
|
||||||
|
from settings import SettingsDialog
|
||||||
from tr import _translate
|
from tr import _translate
|
||||||
|
from version import softwareVersion
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"NewChanDialog", "AddAddressDialog", "NewAddressDialog",
|
"NewChanDialog", "AddAddressDialog", "NewAddressDialog",
|
||||||
"NewSubscriptionDialog", "RegenerateAddressesDialog",
|
"NewSubscriptionDialog", "RegenerateAddressesDialog",
|
||||||
"SpecialAddressBehaviorDialog", "EmailGatewayDialog"
|
"SpecialAddressBehaviorDialog", "EmailGatewayDialog",
|
||||||
|
"SettingsDialog"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,630 +1,544 @@
|
||||||
# -*- coding: utf-8 -*-
|
import os
|
||||||
# pylint: disable=too-many-instance-attributes,too-many-locals,too-many-statements,attribute-defined-outside-init
|
import sys
|
||||||
"""
|
|
||||||
src/bitmessageqt/settings.py
|
|
||||||
============================
|
|
||||||
|
|
||||||
Form implementation generated from reading ui file 'settings.ui'
|
from PyQt4 import QtGui
|
||||||
|
|
||||||
Created: Thu Dec 25 23:21:20 2014
|
import debug
|
||||||
by: PyQt4 UI code generator 4.10.3
|
import defaults
|
||||||
|
import knownnodes
|
||||||
WARNING! All changes made in this file will be lost!
|
import namecoin
|
||||||
"""
|
import openclpow
|
||||||
|
import paths
|
||||||
from sys import platform
|
import queues
|
||||||
|
import shared
|
||||||
from PyQt4 import QtCore, QtGui
|
import state
|
||||||
|
import tempfile
|
||||||
from . import bitmessage_icons_rc # pylint: disable=unused-import
|
import widgets
|
||||||
from .languagebox import LanguageBox
|
from bmconfigparser import BMConfigParser
|
||||||
|
from helper_sql import sqlExecute, sqlStoredProcedure
|
||||||
try:
|
from network.asyncore_pollchoose import set_rates
|
||||||
_fromUtf8 = QtCore.QString.fromUtf8
|
from tr import _translate
|
||||||
except AttributeError:
|
|
||||||
def _fromUtf8(s):
|
|
||||||
return s
|
|
||||||
|
|
||||||
try:
|
|
||||||
_encoding = QtGui.QApplication.UnicodeUTF8
|
|
||||||
|
|
||||||
def _translate(context, text, disambig):
|
|
||||||
return QtGui.QApplication.translate(context, text, disambig, _encoding)
|
|
||||||
except AttributeError:
|
|
||||||
def _translate(context, text, disambig):
|
|
||||||
return QtGui.QApplication.translate(context, text, disambig)
|
|
||||||
|
|
||||||
|
|
||||||
class Ui_settingsDialog(object):
|
class SettingsDialog(QtGui.QDialog):
|
||||||
"""Encapsulate a UI settings dialog object"""
|
"""The "Settings" dialog"""
|
||||||
|
def __init__(self, parent=None, firstrun=False):
|
||||||
|
super(SettingsDialog, self).__init__(parent)
|
||||||
|
widgets.load('settings.ui', self)
|
||||||
|
|
||||||
def setupUi(self, settingsDialog):
|
self.parent = parent
|
||||||
"""Set up the UI"""
|
self.firstrun = firstrun
|
||||||
|
self.config = BMConfigParser()
|
||||||
|
|
||||||
settingsDialog.setObjectName(_fromUtf8("settingsDialog"))
|
|
||||||
settingsDialog.resize(521, 413)
|
|
||||||
self.gridLayout = QtGui.QGridLayout(settingsDialog)
|
|
||||||
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
|
|
||||||
self.buttonBox = QtGui.QDialogButtonBox(settingsDialog)
|
|
||||||
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
|
|
||||||
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Ok)
|
|
||||||
self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
|
|
||||||
self.gridLayout.addWidget(self.buttonBox, 1, 0, 1, 1)
|
|
||||||
self.tabWidgetSettings = QtGui.QTabWidget(settingsDialog)
|
|
||||||
self.tabWidgetSettings.setObjectName(_fromUtf8("tabWidgetSettings"))
|
|
||||||
self.tabUserInterface = QtGui.QWidget()
|
|
||||||
self.tabUserInterface.setEnabled(True)
|
|
||||||
self.tabUserInterface.setObjectName(_fromUtf8("tabUserInterface"))
|
|
||||||
self.formLayout = QtGui.QFormLayout(self.tabUserInterface)
|
|
||||||
self.formLayout.setObjectName(_fromUtf8("formLayout"))
|
|
||||||
self.checkBoxStartOnLogon = QtGui.QCheckBox(self.tabUserInterface)
|
|
||||||
self.checkBoxStartOnLogon.setObjectName(_fromUtf8("checkBoxStartOnLogon"))
|
|
||||||
self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.checkBoxStartOnLogon)
|
|
||||||
self.groupBoxTray = QtGui.QGroupBox(self.tabUserInterface)
|
|
||||||
self.groupBoxTray.setObjectName(_fromUtf8("groupBoxTray"))
|
|
||||||
self.formLayoutTray = QtGui.QFormLayout(self.groupBoxTray)
|
|
||||||
self.formLayoutTray.setObjectName(_fromUtf8("formLayoutTray"))
|
|
||||||
self.checkBoxStartInTray = QtGui.QCheckBox(self.groupBoxTray)
|
|
||||||
self.checkBoxStartInTray.setObjectName(_fromUtf8("checkBoxStartInTray"))
|
|
||||||
self.formLayoutTray.setWidget(0, QtGui.QFormLayout.SpanningRole, self.checkBoxStartInTray)
|
|
||||||
self.checkBoxMinimizeToTray = QtGui.QCheckBox(self.groupBoxTray)
|
|
||||||
self.checkBoxMinimizeToTray.setChecked(True)
|
|
||||||
self.checkBoxMinimizeToTray.setObjectName(_fromUtf8("checkBoxMinimizeToTray"))
|
|
||||||
self.formLayoutTray.setWidget(1, QtGui.QFormLayout.LabelRole, self.checkBoxMinimizeToTray)
|
|
||||||
self.checkBoxTrayOnClose = QtGui.QCheckBox(self.groupBoxTray)
|
|
||||||
self.checkBoxTrayOnClose.setChecked(True)
|
|
||||||
self.checkBoxTrayOnClose.setObjectName(_fromUtf8("checkBoxTrayOnClose"))
|
|
||||||
self.formLayoutTray.setWidget(2, QtGui.QFormLayout.LabelRole, self.checkBoxTrayOnClose)
|
|
||||||
self.formLayout.setWidget(1, QtGui.QFormLayout.SpanningRole, self.groupBoxTray)
|
|
||||||
self.checkBoxHideTrayConnectionNotifications = QtGui.QCheckBox(self.tabUserInterface)
|
|
||||||
self.checkBoxHideTrayConnectionNotifications.setChecked(False)
|
|
||||||
self.checkBoxHideTrayConnectionNotifications.setObjectName(
|
|
||||||
_fromUtf8("checkBoxHideTrayConnectionNotifications"))
|
|
||||||
self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.checkBoxHideTrayConnectionNotifications)
|
|
||||||
self.checkBoxShowTrayNotifications = QtGui.QCheckBox(self.tabUserInterface)
|
|
||||||
self.checkBoxShowTrayNotifications.setObjectName(_fromUtf8("checkBoxShowTrayNotifications"))
|
|
||||||
self.formLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.checkBoxShowTrayNotifications)
|
|
||||||
self.checkBoxPortableMode = QtGui.QCheckBox(self.tabUserInterface)
|
|
||||||
self.checkBoxPortableMode.setObjectName(_fromUtf8("checkBoxPortableMode"))
|
|
||||||
self.formLayout.setWidget(4, QtGui.QFormLayout.LabelRole, self.checkBoxPortableMode)
|
|
||||||
self.PortableModeDescription = QtGui.QLabel(self.tabUserInterface)
|
|
||||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.PortableModeDescription.sizePolicy().hasHeightForWidth())
|
|
||||||
self.PortableModeDescription.setSizePolicy(sizePolicy)
|
|
||||||
self.PortableModeDescription.setWordWrap(True)
|
|
||||||
self.PortableModeDescription.setObjectName(_fromUtf8("PortableModeDescription"))
|
|
||||||
self.formLayout.setWidget(5, QtGui.QFormLayout.SpanningRole, self.PortableModeDescription)
|
|
||||||
self.checkBoxWillinglySendToMobile = QtGui.QCheckBox(self.tabUserInterface)
|
|
||||||
self.checkBoxWillinglySendToMobile.setObjectName(_fromUtf8("checkBoxWillinglySendToMobile"))
|
|
||||||
self.formLayout.setWidget(6, QtGui.QFormLayout.SpanningRole, self.checkBoxWillinglySendToMobile)
|
|
||||||
self.checkBoxUseIdenticons = QtGui.QCheckBox(self.tabUserInterface)
|
|
||||||
self.checkBoxUseIdenticons.setObjectName(_fromUtf8("checkBoxUseIdenticons"))
|
|
||||||
self.formLayout.setWidget(7, QtGui.QFormLayout.LabelRole, self.checkBoxUseIdenticons)
|
|
||||||
self.checkBoxReplyBelow = QtGui.QCheckBox(self.tabUserInterface)
|
|
||||||
self.checkBoxReplyBelow.setObjectName(_fromUtf8("checkBoxReplyBelow"))
|
|
||||||
self.formLayout.setWidget(8, QtGui.QFormLayout.LabelRole, self.checkBoxReplyBelow)
|
|
||||||
self.groupBox = QtGui.QGroupBox(self.tabUserInterface)
|
|
||||||
self.groupBox.setObjectName(_fromUtf8("groupBox"))
|
|
||||||
self.formLayout_2 = QtGui.QFormLayout(self.groupBox)
|
|
||||||
self.formLayout_2.setObjectName(_fromUtf8("formLayout_2"))
|
|
||||||
self.languageComboBox = LanguageBox(self.groupBox)
|
|
||||||
self.languageComboBox.setMinimumSize(QtCore.QSize(100, 0))
|
|
||||||
self.languageComboBox.setObjectName(_fromUtf8("languageComboBox")) # pylint: disable=not-callable
|
|
||||||
self.formLayout_2.setWidget(0, QtGui.QFormLayout.LabelRole, self.languageComboBox)
|
|
||||||
self.formLayout.setWidget(9, QtGui.QFormLayout.FieldRole, self.groupBox)
|
|
||||||
self.tabWidgetSettings.addTab(self.tabUserInterface, _fromUtf8(""))
|
|
||||||
self.tabNetworkSettings = QtGui.QWidget()
|
|
||||||
self.tabNetworkSettings.setObjectName(_fromUtf8("tabNetworkSettings"))
|
|
||||||
self.gridLayout_4 = QtGui.QGridLayout(self.tabNetworkSettings)
|
|
||||||
self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4"))
|
|
||||||
self.groupBox1 = QtGui.QGroupBox(self.tabNetworkSettings)
|
|
||||||
self.groupBox1.setObjectName(_fromUtf8("groupBox1"))
|
|
||||||
self.gridLayout_3 = QtGui.QGridLayout(self.groupBox1)
|
|
||||||
self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
|
|
||||||
self.label = QtGui.QLabel(self.groupBox1)
|
|
||||||
self.label.setObjectName(_fromUtf8("label"))
|
|
||||||
self.gridLayout_3.addWidget(self.label, 0, 0, 1, 1, QtCore.Qt.AlignRight)
|
|
||||||
self.lineEditTCPPort = QtGui.QLineEdit(self.groupBox1)
|
|
||||||
self.lineEditTCPPort.setMaximumSize(QtCore.QSize(70, 16777215))
|
|
||||||
self.lineEditTCPPort.setObjectName(_fromUtf8("lineEditTCPPort"))
|
|
||||||
self.gridLayout_3.addWidget(self.lineEditTCPPort, 0, 1, 1, 1, QtCore.Qt.AlignLeft)
|
|
||||||
self.labelUPnP = QtGui.QLabel(self.groupBox1)
|
|
||||||
self.labelUPnP.setObjectName(_fromUtf8("labelUPnP"))
|
|
||||||
self.gridLayout_3.addWidget(self.labelUPnP, 0, 2, 1, 1, QtCore.Qt.AlignRight)
|
|
||||||
self.checkBoxUPnP = QtGui.QCheckBox(self.groupBox1)
|
|
||||||
self.checkBoxUPnP.setObjectName(_fromUtf8("checkBoxUPnP"))
|
|
||||||
self.gridLayout_3.addWidget(self.checkBoxUPnP, 0, 3, 1, 1, QtCore.Qt.AlignLeft)
|
|
||||||
self.gridLayout_4.addWidget(self.groupBox1, 0, 0, 1, 1)
|
|
||||||
self.groupBox_3 = QtGui.QGroupBox(self.tabNetworkSettings)
|
|
||||||
self.groupBox_3.setObjectName(_fromUtf8("groupBox_3"))
|
|
||||||
self.gridLayout_9 = QtGui.QGridLayout(self.groupBox_3)
|
|
||||||
self.gridLayout_9.setObjectName(_fromUtf8("gridLayout_9"))
|
|
||||||
spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
|
||||||
self.gridLayout_9.addItem(spacerItem1, 0, 0, 2, 1)
|
|
||||||
self.label_24 = QtGui.QLabel(self.groupBox_3)
|
|
||||||
self.label_24.setObjectName(_fromUtf8("label_24"))
|
|
||||||
self.gridLayout_9.addWidget(self.label_24, 0, 1, 1, 1)
|
|
||||||
self.lineEditMaxDownloadRate = QtGui.QLineEdit(self.groupBox_3)
|
|
||||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.lineEditMaxDownloadRate.sizePolicy().hasHeightForWidth())
|
|
||||||
self.lineEditMaxDownloadRate.setSizePolicy(sizePolicy)
|
|
||||||
self.lineEditMaxDownloadRate.setMaximumSize(QtCore.QSize(60, 16777215))
|
|
||||||
self.lineEditMaxDownloadRate.setObjectName(_fromUtf8("lineEditMaxDownloadRate"))
|
|
||||||
self.gridLayout_9.addWidget(self.lineEditMaxDownloadRate, 0, 2, 1, 1)
|
|
||||||
self.label_25 = QtGui.QLabel(self.groupBox_3)
|
|
||||||
self.label_25.setObjectName(_fromUtf8("label_25"))
|
|
||||||
self.gridLayout_9.addWidget(self.label_25, 1, 1, 1, 1)
|
|
||||||
self.lineEditMaxUploadRate = QtGui.QLineEdit(self.groupBox_3)
|
|
||||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.lineEditMaxUploadRate.sizePolicy().hasHeightForWidth())
|
|
||||||
self.lineEditMaxUploadRate.setSizePolicy(sizePolicy)
|
|
||||||
self.lineEditMaxUploadRate.setMaximumSize(QtCore.QSize(60, 16777215))
|
|
||||||
self.lineEditMaxUploadRate.setObjectName(_fromUtf8("lineEditMaxUploadRate"))
|
|
||||||
self.gridLayout_9.addWidget(self.lineEditMaxUploadRate, 1, 2, 1, 1)
|
|
||||||
self.label_26 = QtGui.QLabel(self.groupBox_3)
|
|
||||||
self.label_26.setObjectName(_fromUtf8("label_26"))
|
|
||||||
self.gridLayout_9.addWidget(self.label_26, 2, 1, 1, 1)
|
|
||||||
self.lineEditMaxOutboundConnections = QtGui.QLineEdit(self.groupBox_3)
|
|
||||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.lineEditMaxOutboundConnections.sizePolicy().hasHeightForWidth())
|
|
||||||
self.lineEditMaxOutboundConnections.setSizePolicy(sizePolicy)
|
|
||||||
self.lineEditMaxOutboundConnections.setMaximumSize(QtCore.QSize(60, 16777215))
|
|
||||||
self.lineEditMaxOutboundConnections.setObjectName(_fromUtf8("lineEditMaxOutboundConnections"))
|
|
||||||
self.lineEditMaxOutboundConnections.setValidator(
|
self.lineEditMaxOutboundConnections.setValidator(
|
||||||
QtGui.QIntValidator(0, 8, self.lineEditMaxOutboundConnections))
|
QtGui.QIntValidator(0, 8, self.lineEditMaxOutboundConnections))
|
||||||
self.gridLayout_9.addWidget(self.lineEditMaxOutboundConnections, 2, 2, 1, 1)
|
|
||||||
self.gridLayout_4.addWidget(self.groupBox_3, 2, 0, 1, 1)
|
self.adjust_from_config(self.config)
|
||||||
self.groupBox_2 = QtGui.QGroupBox(self.tabNetworkSettings)
|
if firstrun:
|
||||||
self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
|
# switch to "Network Settings" tab if user selected
|
||||||
self.gridLayout_2 = QtGui.QGridLayout(self.groupBox_2)
|
# "Let me configure special network settings first" on first run
|
||||||
self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
|
self.tabWidgetSettings.setCurrentIndex(
|
||||||
self.label_2 = QtGui.QLabel(self.groupBox_2)
|
self.tabWidgetSettings.indexOf(self.tabNetworkSettings)
|
||||||
self.label_2.setObjectName(_fromUtf8("label_2"))
|
)
|
||||||
self.gridLayout_2.addWidget(self.label_2, 0, 0, 1, 1)
|
QtGui.QWidget.resize(self, QtGui.QWidget.sizeHint(self))
|
||||||
self.label_3 = QtGui.QLabel(self.groupBox_2)
|
|
||||||
self.label_3.setObjectName(_fromUtf8("label_3"))
|
def adjust_from_config(self, config):
|
||||||
self.gridLayout_2.addWidget(self.label_3, 1, 1, 1, 1)
|
"""Adjust all widgets state according to config settings"""
|
||||||
self.lineEditSocksHostname = QtGui.QLineEdit(self.groupBox_2)
|
# pylint: disable=too-many-branches,too-many-statements
|
||||||
self.lineEditSocksHostname.setObjectName(_fromUtf8("lineEditSocksHostname"))
|
self.checkBoxStartOnLogon.setChecked(
|
||||||
self.lineEditSocksHostname.setPlaceholderText(_fromUtf8("127.0.0.1"))
|
config.getboolean('bitmessagesettings', 'startonlogon'))
|
||||||
self.gridLayout_2.addWidget(self.lineEditSocksHostname, 1, 2, 1, 2)
|
self.checkBoxMinimizeToTray.setChecked(
|
||||||
self.label_4 = QtGui.QLabel(self.groupBox_2)
|
config.getboolean('bitmessagesettings', 'minimizetotray'))
|
||||||
self.label_4.setObjectName(_fromUtf8("label_4"))
|
self.checkBoxTrayOnClose.setChecked(
|
||||||
self.gridLayout_2.addWidget(self.label_4, 1, 4, 1, 1)
|
config.safeGetBoolean('bitmessagesettings', 'trayonclose'))
|
||||||
self.lineEditSocksPort = QtGui.QLineEdit(self.groupBox_2)
|
self.checkBoxHideTrayConnectionNotifications.setChecked(
|
||||||
self.lineEditSocksPort.setObjectName(_fromUtf8("lineEditSocksPort"))
|
config.getboolean("bitmessagesettings", "hidetrayconnectionnotifications"))
|
||||||
if platform in ['darwin', 'win32', 'win64']:
|
self.checkBoxShowTrayNotifications.setChecked(
|
||||||
self.lineEditSocksPort.setPlaceholderText(_fromUtf8("9150"))
|
config.getboolean('bitmessagesettings', 'showtraynotifications'))
|
||||||
|
self.checkBoxStartInTray.setChecked(
|
||||||
|
config.getboolean('bitmessagesettings', 'startintray'))
|
||||||
|
self.checkBoxWillinglySendToMobile.setChecked(
|
||||||
|
config.safeGetBoolean('bitmessagesettings', 'willinglysendtomobile'))
|
||||||
|
self.checkBoxUseIdenticons.setChecked(
|
||||||
|
config.safeGetBoolean('bitmessagesettings', 'useidenticons'))
|
||||||
|
self.checkBoxReplyBelow.setChecked(
|
||||||
|
config.safeGetBoolean('bitmessagesettings', 'replybelow'))
|
||||||
|
|
||||||
|
if state.appdata == paths.lookupExeFolder():
|
||||||
|
self.checkBoxPortableMode.setChecked(True)
|
||||||
else:
|
else:
|
||||||
self.lineEditSocksPort.setPlaceholderText(_fromUtf8("9050"))
|
try:
|
||||||
self.gridLayout_2.addWidget(self.lineEditSocksPort, 1, 5, 1, 1)
|
tempfile.NamedTemporaryFile(
|
||||||
self.checkBoxAuthentication = QtGui.QCheckBox(self.groupBox_2)
|
dir=paths.lookupExeFolder(), delete=True
|
||||||
self.checkBoxAuthentication.setObjectName(_fromUtf8("checkBoxAuthentication"))
|
).close() # should autodelete
|
||||||
self.gridLayout_2.addWidget(self.checkBoxAuthentication, 2, 1, 1, 1)
|
except:
|
||||||
self.label_5 = QtGui.QLabel(self.groupBox_2)
|
self.checkBoxPortableMode.setDisabled(True)
|
||||||
self.label_5.setObjectName(_fromUtf8("label_5"))
|
|
||||||
self.gridLayout_2.addWidget(self.label_5, 2, 2, 1, 1)
|
if 'darwin' in sys.platform:
|
||||||
self.lineEditSocksUsername = QtGui.QLineEdit(self.groupBox_2)
|
self.checkBoxStartOnLogon.setDisabled(True)
|
||||||
|
self.checkBoxStartOnLogon.setText(_translate(
|
||||||
|
"MainWindow", "Start-on-login not yet supported on your OS."))
|
||||||
|
self.checkBoxMinimizeToTray.setDisabled(True)
|
||||||
|
self.checkBoxMinimizeToTray.setText(_translate(
|
||||||
|
"MainWindow", "Minimize-to-tray not yet supported on your OS."))
|
||||||
|
self.checkBoxShowTrayNotifications.setDisabled(True)
|
||||||
|
self.checkBoxShowTrayNotifications.setText(_translate(
|
||||||
|
"MainWindow", "Tray notifications not yet supported on your OS."))
|
||||||
|
elif 'linux' in sys.platform:
|
||||||
|
self.checkBoxStartOnLogon.setDisabled(True)
|
||||||
|
self.checkBoxStartOnLogon.setText(_translate(
|
||||||
|
"MainWindow", "Start-on-login not yet supported on your OS."))
|
||||||
|
# On the Network settings tab:
|
||||||
|
self.lineEditTCPPort.setText(str(
|
||||||
|
config.get('bitmessagesettings', 'port')))
|
||||||
|
self.checkBoxUPnP.setChecked(
|
||||||
|
config.safeGetBoolean('bitmessagesettings', 'upnp'))
|
||||||
|
self.checkBoxAuthentication.setChecked(
|
||||||
|
config.getboolean('bitmessagesettings', 'socksauthentication'))
|
||||||
|
self.checkBoxSocksListen.setChecked(
|
||||||
|
config.getboolean('bitmessagesettings', 'sockslisten'))
|
||||||
|
|
||||||
|
proxy_type = config.get('bitmessagesettings', 'socksproxytype')
|
||||||
|
if proxy_type == 'none':
|
||||||
|
self.comboBoxProxyType.setCurrentIndex(0)
|
||||||
|
self.lineEditSocksHostname.setEnabled(False)
|
||||||
|
self.lineEditSocksPort.setEnabled(False)
|
||||||
self.lineEditSocksUsername.setEnabled(False)
|
self.lineEditSocksUsername.setEnabled(False)
|
||||||
self.lineEditSocksUsername.setObjectName(_fromUtf8("lineEditSocksUsername"))
|
|
||||||
self.gridLayout_2.addWidget(self.lineEditSocksUsername, 2, 3, 1, 1)
|
|
||||||
self.label_6 = QtGui.QLabel(self.groupBox_2)
|
|
||||||
self.label_6.setObjectName(_fromUtf8("label_6"))
|
|
||||||
self.gridLayout_2.addWidget(self.label_6, 2, 4, 1, 1)
|
|
||||||
self.lineEditSocksPassword = QtGui.QLineEdit(self.groupBox_2)
|
|
||||||
self.lineEditSocksPassword.setEnabled(False)
|
self.lineEditSocksPassword.setEnabled(False)
|
||||||
self.lineEditSocksPassword.setInputMethodHints(
|
self.checkBoxAuthentication.setEnabled(False)
|
||||||
QtCore.Qt.ImhHiddenText | QtCore.Qt.ImhNoAutoUppercase | QtCore.Qt.ImhNoPredictiveText)
|
self.checkBoxSocksListen.setEnabled(False)
|
||||||
self.lineEditSocksPassword.setEchoMode(QtGui.QLineEdit.Password)
|
elif proxy_type == 'SOCKS4a':
|
||||||
self.lineEditSocksPassword.setObjectName(_fromUtf8("lineEditSocksPassword"))
|
self.comboBoxProxyType.setCurrentIndex(1)
|
||||||
self.gridLayout_2.addWidget(self.lineEditSocksPassword, 2, 5, 1, 1)
|
elif proxy_type == 'SOCKS5':
|
||||||
self.checkBoxSocksListen = QtGui.QCheckBox(self.groupBox_2)
|
self.comboBoxProxyType.setCurrentIndex(2)
|
||||||
self.checkBoxSocksListen.setObjectName(_fromUtf8("checkBoxSocksListen"))
|
|
||||||
self.gridLayout_2.addWidget(self.checkBoxSocksListen, 3, 1, 1, 4)
|
|
||||||
self.comboBoxProxyType = QtGui.QComboBox(self.groupBox_2)
|
|
||||||
self.comboBoxProxyType.setObjectName(_fromUtf8("comboBoxProxyType")) # pylint: disable=not-callable
|
|
||||||
self.comboBoxProxyType.addItem(_fromUtf8(""))
|
|
||||||
self.comboBoxProxyType.addItem(_fromUtf8(""))
|
|
||||||
self.comboBoxProxyType.addItem(_fromUtf8(""))
|
|
||||||
self.gridLayout_2.addWidget(self.comboBoxProxyType, 0, 1, 1, 1)
|
|
||||||
self.gridLayout_4.addWidget(self.groupBox_2, 1, 0, 1, 1)
|
|
||||||
spacerItem2 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
|
||||||
self.gridLayout_4.addItem(spacerItem2, 3, 0, 1, 1)
|
|
||||||
self.tabWidgetSettings.addTab(self.tabNetworkSettings, _fromUtf8(""))
|
|
||||||
self.tabDemandedDifficulty = QtGui.QWidget()
|
|
||||||
self.tabDemandedDifficulty.setObjectName(_fromUtf8("tabDemandedDifficulty"))
|
|
||||||
self.gridLayout_6 = QtGui.QGridLayout(self.tabDemandedDifficulty)
|
|
||||||
self.gridLayout_6.setObjectName(_fromUtf8("gridLayout_6"))
|
|
||||||
self.label_9 = QtGui.QLabel(self.tabDemandedDifficulty)
|
|
||||||
self.label_9.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
|
|
||||||
self.label_9.setObjectName(_fromUtf8("label_9"))
|
|
||||||
self.gridLayout_6.addWidget(self.label_9, 1, 1, 1, 1)
|
|
||||||
self.label_10 = QtGui.QLabel(self.tabDemandedDifficulty)
|
|
||||||
self.label_10.setWordWrap(True)
|
|
||||||
self.label_10.setObjectName(_fromUtf8("label_10"))
|
|
||||||
self.gridLayout_6.addWidget(self.label_10, 2, 0, 1, 3)
|
|
||||||
self.label_11 = QtGui.QLabel(self.tabDemandedDifficulty)
|
|
||||||
self.label_11.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
|
|
||||||
self.label_11.setObjectName(_fromUtf8("label_11"))
|
|
||||||
self.gridLayout_6.addWidget(self.label_11, 3, 1, 1, 1)
|
|
||||||
self.label_8 = QtGui.QLabel(self.tabDemandedDifficulty)
|
|
||||||
self.label_8.setWordWrap(True)
|
|
||||||
self.label_8.setObjectName(_fromUtf8("label_8"))
|
|
||||||
self.gridLayout_6.addWidget(self.label_8, 0, 0, 1, 3)
|
|
||||||
spacerItem3 = QtGui.QSpacerItem(203, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
|
||||||
self.gridLayout_6.addItem(spacerItem3, 1, 0, 1, 1)
|
|
||||||
self.label_12 = QtGui.QLabel(self.tabDemandedDifficulty)
|
|
||||||
self.label_12.setWordWrap(True)
|
|
||||||
self.label_12.setObjectName(_fromUtf8("label_12"))
|
|
||||||
self.gridLayout_6.addWidget(self.label_12, 4, 0, 1, 3)
|
|
||||||
self.lineEditSmallMessageDifficulty = QtGui.QLineEdit(self.tabDemandedDifficulty)
|
|
||||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.lineEditSmallMessageDifficulty.sizePolicy().hasHeightForWidth())
|
|
||||||
self.lineEditSmallMessageDifficulty.setSizePolicy(sizePolicy)
|
|
||||||
self.lineEditSmallMessageDifficulty.setMaximumSize(QtCore.QSize(70, 16777215))
|
|
||||||
self.lineEditSmallMessageDifficulty.setObjectName(_fromUtf8("lineEditSmallMessageDifficulty"))
|
|
||||||
self.gridLayout_6.addWidget(self.lineEditSmallMessageDifficulty, 3, 2, 1, 1)
|
|
||||||
self.lineEditTotalDifficulty = QtGui.QLineEdit(self.tabDemandedDifficulty)
|
|
||||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.lineEditTotalDifficulty.sizePolicy().hasHeightForWidth())
|
|
||||||
self.lineEditTotalDifficulty.setSizePolicy(sizePolicy)
|
|
||||||
self.lineEditTotalDifficulty.setMaximumSize(QtCore.QSize(70, 16777215))
|
|
||||||
self.lineEditTotalDifficulty.setObjectName(_fromUtf8("lineEditTotalDifficulty"))
|
|
||||||
self.gridLayout_6.addWidget(self.lineEditTotalDifficulty, 1, 2, 1, 1)
|
|
||||||
spacerItem4 = QtGui.QSpacerItem(203, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
|
||||||
self.gridLayout_6.addItem(spacerItem4, 3, 0, 1, 1)
|
|
||||||
spacerItem5 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
|
||||||
self.gridLayout_6.addItem(spacerItem5, 5, 0, 1, 1)
|
|
||||||
self.tabWidgetSettings.addTab(self.tabDemandedDifficulty, _fromUtf8(""))
|
|
||||||
self.tabMaxAcceptableDifficulty = QtGui.QWidget()
|
|
||||||
self.tabMaxAcceptableDifficulty.setObjectName(_fromUtf8("tabMaxAcceptableDifficulty"))
|
|
||||||
self.gridLayout_7 = QtGui.QGridLayout(self.tabMaxAcceptableDifficulty)
|
|
||||||
self.gridLayout_7.setObjectName(_fromUtf8("gridLayout_7"))
|
|
||||||
self.label_15 = QtGui.QLabel(self.tabMaxAcceptableDifficulty)
|
|
||||||
self.label_15.setWordWrap(True)
|
|
||||||
self.label_15.setObjectName(_fromUtf8("label_15"))
|
|
||||||
self.gridLayout_7.addWidget(self.label_15, 0, 0, 1, 3)
|
|
||||||
spacerItem6 = QtGui.QSpacerItem(102, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
|
||||||
self.gridLayout_7.addItem(spacerItem6, 1, 0, 1, 1)
|
|
||||||
self.label_13 = QtGui.QLabel(self.tabMaxAcceptableDifficulty)
|
|
||||||
self.label_13.setLayoutDirection(QtCore.Qt.LeftToRight)
|
|
||||||
self.label_13.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
|
|
||||||
self.label_13.setObjectName(_fromUtf8("label_13"))
|
|
||||||
self.gridLayout_7.addWidget(self.label_13, 1, 1, 1, 1)
|
|
||||||
self.lineEditMaxAcceptableTotalDifficulty = QtGui.QLineEdit(self.tabMaxAcceptableDifficulty)
|
|
||||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.lineEditMaxAcceptableTotalDifficulty.sizePolicy().hasHeightForWidth())
|
|
||||||
self.lineEditMaxAcceptableTotalDifficulty.setSizePolicy(sizePolicy)
|
|
||||||
self.lineEditMaxAcceptableTotalDifficulty.setMaximumSize(QtCore.QSize(70, 16777215))
|
|
||||||
self.lineEditMaxAcceptableTotalDifficulty.setObjectName(_fromUtf8("lineEditMaxAcceptableTotalDifficulty"))
|
|
||||||
self.gridLayout_7.addWidget(self.lineEditMaxAcceptableTotalDifficulty, 1, 2, 1, 1)
|
|
||||||
spacerItem7 = QtGui.QSpacerItem(102, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
|
||||||
self.gridLayout_7.addItem(spacerItem7, 2, 0, 1, 1)
|
|
||||||
self.label_14 = QtGui.QLabel(self.tabMaxAcceptableDifficulty)
|
|
||||||
self.label_14.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
|
|
||||||
self.label_14.setObjectName(_fromUtf8("label_14"))
|
|
||||||
self.gridLayout_7.addWidget(self.label_14, 2, 1, 1, 1)
|
|
||||||
self.lineEditMaxAcceptableSmallMessageDifficulty = QtGui.QLineEdit(self.tabMaxAcceptableDifficulty)
|
|
||||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
|
|
||||||
sizePolicy.setHorizontalStretch(0)
|
|
||||||
sizePolicy.setVerticalStretch(0)
|
|
||||||
sizePolicy.setHeightForWidth(self.lineEditMaxAcceptableSmallMessageDifficulty.sizePolicy().hasHeightForWidth())
|
|
||||||
self.lineEditMaxAcceptableSmallMessageDifficulty.setSizePolicy(sizePolicy)
|
|
||||||
self.lineEditMaxAcceptableSmallMessageDifficulty.setMaximumSize(QtCore.QSize(70, 16777215))
|
|
||||||
self.lineEditMaxAcceptableSmallMessageDifficulty.setObjectName(
|
|
||||||
_fromUtf8("lineEditMaxAcceptableSmallMessageDifficulty"))
|
|
||||||
self.gridLayout_7.addWidget(self.lineEditMaxAcceptableSmallMessageDifficulty, 2, 2, 1, 1)
|
|
||||||
spacerItem8 = QtGui.QSpacerItem(20, 147, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
|
||||||
self.gridLayout_7.addItem(spacerItem8, 3, 1, 1, 1)
|
|
||||||
self.labelOpenCL = QtGui.QLabel(self.tabMaxAcceptableDifficulty)
|
|
||||||
self.labelOpenCL.setObjectName(_fromUtf8("labelOpenCL"))
|
|
||||||
self.gridLayout_7.addWidget(self.labelOpenCL, 4, 0, 1, 1)
|
|
||||||
self.comboBoxOpenCL = QtGui.QComboBox(self.tabMaxAcceptableDifficulty)
|
|
||||||
self.comboBoxOpenCL.setObjectName = (_fromUtf8("comboBoxOpenCL"))
|
|
||||||
self.gridLayout_7.addWidget(self.comboBoxOpenCL, 4, 1, 1, 1)
|
|
||||||
self.tabWidgetSettings.addTab(self.tabMaxAcceptableDifficulty, _fromUtf8(""))
|
|
||||||
self.tabNamecoin = QtGui.QWidget()
|
|
||||||
self.tabNamecoin.setObjectName(_fromUtf8("tabNamecoin"))
|
|
||||||
self.gridLayout_8 = QtGui.QGridLayout(self.tabNamecoin)
|
|
||||||
self.gridLayout_8.setObjectName(_fromUtf8("gridLayout_8"))
|
|
||||||
spacerItem9 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
|
||||||
self.gridLayout_8.addItem(spacerItem9, 2, 0, 1, 1)
|
|
||||||
self.label_16 = QtGui.QLabel(self.tabNamecoin)
|
|
||||||
self.label_16.setWordWrap(True)
|
|
||||||
self.label_16.setObjectName(_fromUtf8("label_16"))
|
|
||||||
self.gridLayout_8.addWidget(self.label_16, 0, 0, 1, 3)
|
|
||||||
self.label_17 = QtGui.QLabel(self.tabNamecoin)
|
|
||||||
self.label_17.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
|
|
||||||
self.label_17.setObjectName(_fromUtf8("label_17"))
|
|
||||||
self.gridLayout_8.addWidget(self.label_17, 2, 1, 1, 1)
|
|
||||||
self.lineEditNamecoinHost = QtGui.QLineEdit(self.tabNamecoin)
|
|
||||||
self.lineEditNamecoinHost.setObjectName(_fromUtf8("lineEditNamecoinHost"))
|
|
||||||
self.gridLayout_8.addWidget(self.lineEditNamecoinHost, 2, 2, 1, 1)
|
|
||||||
spacerItem10 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
|
||||||
self.gridLayout_8.addItem(spacerItem10, 3, 0, 1, 1)
|
|
||||||
spacerItem11 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
|
||||||
self.gridLayout_8.addItem(spacerItem11, 4, 0, 1, 1)
|
|
||||||
self.label_18 = QtGui.QLabel(self.tabNamecoin)
|
|
||||||
self.label_18.setEnabled(True)
|
|
||||||
self.label_18.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
|
|
||||||
self.label_18.setObjectName(_fromUtf8("label_18"))
|
|
||||||
self.gridLayout_8.addWidget(self.label_18, 3, 1, 1, 1)
|
|
||||||
self.lineEditNamecoinPort = QtGui.QLineEdit(self.tabNamecoin)
|
|
||||||
self.lineEditNamecoinPort.setObjectName(_fromUtf8("lineEditNamecoinPort"))
|
|
||||||
self.gridLayout_8.addWidget(self.lineEditNamecoinPort, 3, 2, 1, 1)
|
|
||||||
spacerItem12 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
|
||||||
self.gridLayout_8.addItem(spacerItem12, 8, 1, 1, 1)
|
|
||||||
self.labelNamecoinUser = QtGui.QLabel(self.tabNamecoin)
|
|
||||||
self.labelNamecoinUser.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
|
|
||||||
self.labelNamecoinUser.setObjectName(_fromUtf8("labelNamecoinUser"))
|
|
||||||
self.gridLayout_8.addWidget(self.labelNamecoinUser, 4, 1, 1, 1)
|
|
||||||
self.lineEditNamecoinUser = QtGui.QLineEdit(self.tabNamecoin)
|
|
||||||
self.lineEditNamecoinUser.setObjectName(_fromUtf8("lineEditNamecoinUser"))
|
|
||||||
self.gridLayout_8.addWidget(self.lineEditNamecoinUser, 4, 2, 1, 1)
|
|
||||||
spacerItem13 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
|
||||||
self.gridLayout_8.addItem(spacerItem13, 5, 0, 1, 1)
|
|
||||||
self.labelNamecoinPassword = QtGui.QLabel(self.tabNamecoin)
|
|
||||||
self.labelNamecoinPassword.setAlignment(
|
|
||||||
QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
|
|
||||||
self.labelNamecoinPassword.setObjectName(_fromUtf8("labelNamecoinPassword"))
|
|
||||||
self.gridLayout_8.addWidget(self.labelNamecoinPassword, 5, 1, 1, 1)
|
|
||||||
self.lineEditNamecoinPassword = QtGui.QLineEdit(self.tabNamecoin)
|
|
||||||
self.lineEditNamecoinPassword.setInputMethodHints(
|
|
||||||
QtCore.Qt.ImhHiddenText | QtCore.Qt.ImhNoAutoUppercase | QtCore.Qt.ImhNoPredictiveText)
|
|
||||||
self.lineEditNamecoinPassword.setEchoMode(QtGui.QLineEdit.Password)
|
|
||||||
self.lineEditNamecoinPassword.setObjectName(_fromUtf8("lineEditNamecoinPassword"))
|
|
||||||
self.gridLayout_8.addWidget(self.lineEditNamecoinPassword, 5, 2, 1, 1)
|
|
||||||
self.labelNamecoinTestResult = QtGui.QLabel(self.tabNamecoin)
|
|
||||||
self.labelNamecoinTestResult.setText(_fromUtf8(""))
|
|
||||||
self.labelNamecoinTestResult.setObjectName(_fromUtf8("labelNamecoinTestResult"))
|
|
||||||
self.gridLayout_8.addWidget(self.labelNamecoinTestResult, 7, 0, 1, 2)
|
|
||||||
self.pushButtonNamecoinTest = QtGui.QPushButton(self.tabNamecoin)
|
|
||||||
self.pushButtonNamecoinTest.setObjectName(_fromUtf8("pushButtonNamecoinTest"))
|
|
||||||
self.gridLayout_8.addWidget(self.pushButtonNamecoinTest, 7, 2, 1, 1)
|
|
||||||
self.horizontalLayout = QtGui.QHBoxLayout()
|
|
||||||
self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
|
|
||||||
self.label_21 = QtGui.QLabel(self.tabNamecoin)
|
|
||||||
self.label_21.setObjectName(_fromUtf8("label_21"))
|
|
||||||
self.horizontalLayout.addWidget(self.label_21)
|
|
||||||
self.radioButtonNamecoinNamecoind = QtGui.QRadioButton(self.tabNamecoin)
|
|
||||||
self.radioButtonNamecoinNamecoind.setObjectName(_fromUtf8("radioButtonNamecoinNamecoind"))
|
|
||||||
self.horizontalLayout.addWidget(self.radioButtonNamecoinNamecoind)
|
|
||||||
self.radioButtonNamecoinNmcontrol = QtGui.QRadioButton(self.tabNamecoin)
|
|
||||||
self.radioButtonNamecoinNmcontrol.setObjectName(_fromUtf8("radioButtonNamecoinNmcontrol"))
|
|
||||||
self.horizontalLayout.addWidget(self.radioButtonNamecoinNmcontrol)
|
|
||||||
self.gridLayout_8.addLayout(self.horizontalLayout, 1, 0, 1, 3)
|
|
||||||
self.tabWidgetSettings.addTab(self.tabNamecoin, _fromUtf8(""))
|
|
||||||
self.tabResendsExpire = QtGui.QWidget()
|
|
||||||
self.tabResendsExpire.setObjectName(_fromUtf8("tabResendsExpire"))
|
|
||||||
self.gridLayout_5 = QtGui.QGridLayout(self.tabResendsExpire)
|
|
||||||
self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5"))
|
|
||||||
self.label_7 = QtGui.QLabel(self.tabResendsExpire)
|
|
||||||
self.label_7.setWordWrap(True)
|
|
||||||
self.label_7.setObjectName(_fromUtf8("label_7"))
|
|
||||||
self.gridLayout_5.addWidget(self.label_7, 0, 0, 1, 3)
|
|
||||||
spacerItem14 = QtGui.QSpacerItem(212, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
|
||||||
self.gridLayout_5.addItem(spacerItem14, 1, 0, 1, 1)
|
|
||||||
self.widget = QtGui.QWidget(self.tabResendsExpire)
|
|
||||||
self.widget.setMinimumSize(QtCore.QSize(231, 75))
|
|
||||||
self.widget.setObjectName(_fromUtf8("widget"))
|
|
||||||
self.label_19 = QtGui.QLabel(self.widget)
|
|
||||||
self.label_19.setGeometry(QtCore.QRect(10, 20, 101, 20))
|
|
||||||
self.label_19.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
|
|
||||||
self.label_19.setObjectName(_fromUtf8("label_19"))
|
|
||||||
self.label_20 = QtGui.QLabel(self.widget)
|
|
||||||
self.label_20.setGeometry(QtCore.QRect(30, 40, 80, 16))
|
|
||||||
self.label_20.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
|
|
||||||
self.label_20.setObjectName(_fromUtf8("label_20"))
|
|
||||||
self.lineEditDays = QtGui.QLineEdit(self.widget)
|
|
||||||
self.lineEditDays.setGeometry(QtCore.QRect(113, 20, 51, 20))
|
|
||||||
self.lineEditDays.setObjectName(_fromUtf8("lineEditDays"))
|
|
||||||
self.lineEditMonths = QtGui.QLineEdit(self.widget)
|
|
||||||
self.lineEditMonths.setGeometry(QtCore.QRect(113, 40, 51, 20))
|
|
||||||
self.lineEditMonths.setObjectName(_fromUtf8("lineEditMonths"))
|
|
||||||
self.label_22 = QtGui.QLabel(self.widget)
|
|
||||||
self.label_22.setGeometry(QtCore.QRect(169, 23, 61, 16))
|
|
||||||
self.label_22.setObjectName(_fromUtf8("label_22"))
|
|
||||||
self.label_23 = QtGui.QLabel(self.widget)
|
|
||||||
self.label_23.setGeometry(QtCore.QRect(170, 41, 71, 16))
|
|
||||||
self.label_23.setObjectName(_fromUtf8("label_23"))
|
|
||||||
self.gridLayout_5.addWidget(self.widget, 1, 2, 1, 1)
|
|
||||||
spacerItem15 = QtGui.QSpacerItem(20, 129, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
|
||||||
self.gridLayout_5.addItem(spacerItem15, 2, 1, 1, 1)
|
|
||||||
self.tabWidgetSettings.addTab(self.tabResendsExpire, _fromUtf8(""))
|
|
||||||
self.gridLayout.addWidget(self.tabWidgetSettings, 0, 0, 1, 1)
|
|
||||||
|
|
||||||
self.retranslateUi(settingsDialog)
|
self.lineEditSocksHostname.setText(
|
||||||
self.tabWidgetSettings.setCurrentIndex(0)
|
config.get('bitmessagesettings', 'sockshostname'))
|
||||||
QtCore.QObject.connect( # pylint: disable=no-member
|
self.lineEditSocksPort.setText(str(
|
||||||
self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), settingsDialog.accept)
|
config.get('bitmessagesettings', 'socksport')))
|
||||||
QtCore.QObject.connect( # pylint: disable=no-member
|
self.lineEditSocksUsername.setText(
|
||||||
self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), settingsDialog.reject)
|
config.get('bitmessagesettings', 'socksusername'))
|
||||||
QtCore.QObject.connect( # pylint: disable=no-member
|
self.lineEditSocksPassword.setText(
|
||||||
self.checkBoxAuthentication,
|
config.get('bitmessagesettings', 'sockspassword'))
|
||||||
QtCore.SIGNAL(
|
|
||||||
_fromUtf8("toggled(bool)")),
|
|
||||||
self.lineEditSocksUsername.setEnabled)
|
|
||||||
QtCore.QObject.connect( # pylint: disable=no-member
|
|
||||||
self.checkBoxAuthentication,
|
|
||||||
QtCore.SIGNAL(
|
|
||||||
_fromUtf8("toggled(bool)")),
|
|
||||||
self.lineEditSocksPassword.setEnabled)
|
|
||||||
QtCore.QMetaObject.connectSlotsByName(settingsDialog)
|
|
||||||
settingsDialog.setTabOrder(self.tabWidgetSettings, self.checkBoxStartOnLogon)
|
|
||||||
settingsDialog.setTabOrder(self.checkBoxStartOnLogon, self.checkBoxStartInTray)
|
|
||||||
settingsDialog.setTabOrder(self.checkBoxStartInTray, self.checkBoxMinimizeToTray)
|
|
||||||
settingsDialog.setTabOrder(self.checkBoxMinimizeToTray, self.lineEditTCPPort)
|
|
||||||
settingsDialog.setTabOrder(self.lineEditTCPPort, self.comboBoxProxyType)
|
|
||||||
settingsDialog.setTabOrder(self.comboBoxProxyType, self.lineEditSocksHostname)
|
|
||||||
settingsDialog.setTabOrder(self.lineEditSocksHostname, self.lineEditSocksPort)
|
|
||||||
settingsDialog.setTabOrder(self.lineEditSocksPort, self.checkBoxAuthentication)
|
|
||||||
settingsDialog.setTabOrder(self.checkBoxAuthentication, self.lineEditSocksUsername)
|
|
||||||
settingsDialog.setTabOrder(self.lineEditSocksUsername, self.lineEditSocksPassword)
|
|
||||||
settingsDialog.setTabOrder(self.lineEditSocksPassword, self.checkBoxSocksListen)
|
|
||||||
settingsDialog.setTabOrder(self.checkBoxSocksListen, self.buttonBox)
|
|
||||||
|
|
||||||
def retranslateUi(self, settingsDialog):
|
self.lineEditMaxDownloadRate.setText(str(
|
||||||
"""Re-translate the UI into the supported languages"""
|
config.get('bitmessagesettings', 'maxdownloadrate')))
|
||||||
|
self.lineEditMaxUploadRate.setText(str(
|
||||||
|
config.get('bitmessagesettings', 'maxuploadrate')))
|
||||||
|
self.lineEditMaxOutboundConnections.setText(str(
|
||||||
|
config.get('bitmessagesettings', 'maxoutboundconnections')))
|
||||||
|
|
||||||
settingsDialog.setWindowTitle(_translate("settingsDialog", "Settings", None))
|
# Demanded difficulty tab
|
||||||
self.checkBoxStartOnLogon.setText(_translate("settingsDialog", "Start Bitmessage on user login", None))
|
self.lineEditTotalDifficulty.setText(str((float(
|
||||||
self.groupBoxTray.setTitle(_translate("settingsDialog", "Tray", None))
|
config.getint(
|
||||||
self.checkBoxStartInTray.setText(
|
'bitmessagesettings', 'defaultnoncetrialsperbyte')
|
||||||
|
) / defaults.networkDefaultProofOfWorkNonceTrialsPerByte)))
|
||||||
|
self.lineEditSmallMessageDifficulty.setText(str((float(
|
||||||
|
config.getint(
|
||||||
|
'bitmessagesettings', 'defaultpayloadlengthextrabytes')
|
||||||
|
) / defaults.networkDefaultPayloadLengthExtraBytes)))
|
||||||
|
|
||||||
|
# Max acceptable difficulty tab
|
||||||
|
self.lineEditMaxAcceptableTotalDifficulty.setText(str((float(
|
||||||
|
config.getint(
|
||||||
|
'bitmessagesettings', 'maxacceptablenoncetrialsperbyte')
|
||||||
|
) / defaults.networkDefaultProofOfWorkNonceTrialsPerByte)))
|
||||||
|
self.lineEditMaxAcceptableSmallMessageDifficulty.setText(str((float(
|
||||||
|
config.getint(
|
||||||
|
'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes')
|
||||||
|
) / defaults.networkDefaultPayloadLengthExtraBytes)))
|
||||||
|
|
||||||
|
# OpenCL
|
||||||
|
self.comboBoxOpenCL.setEnabled(openclpow.openclAvailable())
|
||||||
|
self.comboBoxOpenCL.clear()
|
||||||
|
self.comboBoxOpenCL.addItem("None")
|
||||||
|
self.comboBoxOpenCL.addItems(openclpow.vendors)
|
||||||
|
self.comboBoxOpenCL.setCurrentIndex(0)
|
||||||
|
for i in range(self.comboBoxOpenCL.count()):
|
||||||
|
if self.comboBoxOpenCL.itemText(i) == config.safeGet(
|
||||||
|
'bitmessagesettings', 'opencl'):
|
||||||
|
self.comboBoxOpenCL.setCurrentIndex(i)
|
||||||
|
break
|
||||||
|
|
||||||
|
# Namecoin integration tab
|
||||||
|
nmctype = config.get('bitmessagesettings', 'namecoinrpctype')
|
||||||
|
self.lineEditNamecoinHost.setText(
|
||||||
|
config.get('bitmessagesettings', 'namecoinrpchost'))
|
||||||
|
self.lineEditNamecoinPort.setText(str(
|
||||||
|
config.get('bitmessagesettings', 'namecoinrpcport')))
|
||||||
|
self.lineEditNamecoinUser.setText(
|
||||||
|
config.get('bitmessagesettings', 'namecoinrpcuser'))
|
||||||
|
self.lineEditNamecoinPassword.setText(
|
||||||
|
config.get('bitmessagesettings', 'namecoinrpcpassword'))
|
||||||
|
|
||||||
|
if nmctype == "namecoind":
|
||||||
|
self.radioButtonNamecoinNamecoind.setChecked(True)
|
||||||
|
elif nmctype == "nmcontrol":
|
||||||
|
self.radioButtonNamecoinNmcontrol.setChecked(True)
|
||||||
|
self.lineEditNamecoinUser.setEnabled(False)
|
||||||
|
self.labelNamecoinUser.setEnabled(False)
|
||||||
|
self.lineEditNamecoinPassword.setEnabled(False)
|
||||||
|
self.labelNamecoinPassword.setEnabled(False)
|
||||||
|
else:
|
||||||
|
assert False
|
||||||
|
|
||||||
|
# Message Resend tab
|
||||||
|
self.lineEditDays.setText(str(
|
||||||
|
config.get('bitmessagesettings', 'stopresendingafterxdays')))
|
||||||
|
self.lineEditMonths.setText(str(
|
||||||
|
config.get('bitmessagesettings', 'stopresendingafterxmonths')))
|
||||||
|
|
||||||
|
def comboBoxProxyTypeChanged(self, comboBoxIndex):
|
||||||
|
"""A callback for currentIndexChanged event of comboBoxProxyType"""
|
||||||
|
if comboBoxIndex == 0:
|
||||||
|
self.lineEditSocksHostname.setEnabled(False)
|
||||||
|
self.lineEditSocksPort.setEnabled(False)
|
||||||
|
self.lineEditSocksUsername.setEnabled(False)
|
||||||
|
self.lineEditSocksPassword.setEnabled(False)
|
||||||
|
self.checkBoxAuthentication.setEnabled(False)
|
||||||
|
self.checkBoxSocksListen.setEnabled(False)
|
||||||
|
elif comboBoxIndex in (1, 2):
|
||||||
|
self.lineEditSocksHostname.setEnabled(True)
|
||||||
|
self.lineEditSocksPort.setEnabled(True)
|
||||||
|
self.checkBoxAuthentication.setEnabled(True)
|
||||||
|
self.checkBoxSocksListen.setEnabled(True)
|
||||||
|
if self.checkBoxAuthentication.isChecked():
|
||||||
|
self.lineEditSocksUsername.setEnabled(True)
|
||||||
|
self.lineEditSocksPassword.setEnabled(True)
|
||||||
|
|
||||||
|
def getNamecoinType(self):
|
||||||
|
"""
|
||||||
|
Check status of namecoin integration radio buttons
|
||||||
|
and translate it to a string as in the options.
|
||||||
|
"""
|
||||||
|
if self.radioButtonNamecoinNamecoind.isChecked():
|
||||||
|
return "namecoind"
|
||||||
|
if self.radioButtonNamecoinNmcontrol.isChecked():
|
||||||
|
return "nmcontrol"
|
||||||
|
assert False
|
||||||
|
|
||||||
|
# Namecoin connection type was changed.
|
||||||
|
def namecoinTypeChanged(self, checked): # pylint: disable=unused-argument
|
||||||
|
"""A callback for toggled event of radioButtonNamecoinNamecoind"""
|
||||||
|
nmctype = self.getNamecoinType()
|
||||||
|
assert nmctype == "namecoind" or nmctype == "nmcontrol"
|
||||||
|
|
||||||
|
isNamecoind = (nmctype == "namecoind")
|
||||||
|
self.lineEditNamecoinUser.setEnabled(isNamecoind)
|
||||||
|
self.labelNamecoinUser.setEnabled(isNamecoind)
|
||||||
|
self.lineEditNamecoinPassword.setEnabled(isNamecoind)
|
||||||
|
self.labelNamecoinPassword.setEnabled(isNamecoind)
|
||||||
|
|
||||||
|
if isNamecoind:
|
||||||
|
self.lineEditNamecoinPort.setText(defaults.namecoinDefaultRpcPort)
|
||||||
|
else:
|
||||||
|
self.lineEditNamecoinPort.setText("9000")
|
||||||
|
|
||||||
|
def click_pushButtonNamecoinTest(self):
|
||||||
|
"""Test the namecoin settings specified in the settings dialog."""
|
||||||
|
self.labelNamecoinTestResult.setText(
|
||||||
|
_translate("MainWindow", "Testing..."))
|
||||||
|
nc = namecoin.namecoinConnection({
|
||||||
|
'type': self.getNamecoinType(),
|
||||||
|
'host': str(self.lineEditNamecoinHost.text().toUtf8()),
|
||||||
|
'port': str(self.lineEditNamecoinPort.text().toUtf8()),
|
||||||
|
'user': str(self.lineEditNamecoinUser.text().toUtf8()),
|
||||||
|
'password': str(self.lineEditNamecoinPassword.text().toUtf8())
|
||||||
|
})
|
||||||
|
status, text = nc.test()
|
||||||
|
self.labelNamecoinTestResult.setText(text)
|
||||||
|
if status == 'success':
|
||||||
|
self.parent.namecoin = nc
|
||||||
|
|
||||||
|
def accept(self):
|
||||||
|
"""A callback for accepted event of buttonBox (OK button pressed)"""
|
||||||
|
# pylint: disable=too-many-branches,too-many-statements
|
||||||
|
super(SettingsDialog, self).accept()
|
||||||
|
if self.firstrun:
|
||||||
|
self.config.remove_option('bitmessagesettings', 'dontconnect')
|
||||||
|
self.config.set('bitmessagesettings', 'startonlogon', str(
|
||||||
|
self.checkBoxStartOnLogon.isChecked()))
|
||||||
|
self.config.set('bitmessagesettings', 'minimizetotray', str(
|
||||||
|
self.checkBoxMinimizeToTray.isChecked()))
|
||||||
|
self.config.set('bitmessagesettings', 'trayonclose', str(
|
||||||
|
self.checkBoxTrayOnClose.isChecked()))
|
||||||
|
self.config.set(
|
||||||
|
'bitmessagesettings', 'hidetrayconnectionnotifications',
|
||||||
|
str(self.checkBoxHideTrayConnectionNotifications.isChecked()))
|
||||||
|
self.config.set('bitmessagesettings', 'showtraynotifications', str(
|
||||||
|
self.checkBoxShowTrayNotifications.isChecked()))
|
||||||
|
self.config.set('bitmessagesettings', 'startintray', str(
|
||||||
|
self.checkBoxStartInTray.isChecked()))
|
||||||
|
self.config.set('bitmessagesettings', 'willinglysendtomobile', str(
|
||||||
|
self.checkBoxWillinglySendToMobile.isChecked()))
|
||||||
|
self.config.set('bitmessagesettings', 'useidenticons', str(
|
||||||
|
self.checkBoxUseIdenticons.isChecked()))
|
||||||
|
self.config.set('bitmessagesettings', 'replybelow', str(
|
||||||
|
self.checkBoxReplyBelow.isChecked()))
|
||||||
|
|
||||||
|
lang = str(self.languageComboBox.itemData(
|
||||||
|
self.languageComboBox.currentIndex()).toString())
|
||||||
|
self.config.set('bitmessagesettings', 'userlocale', lang)
|
||||||
|
self.parent.change_translation()
|
||||||
|
|
||||||
|
if int(self.config.get('bitmessagesettings', 'port')) != int(
|
||||||
|
self.lineEditTCPPort.text()):
|
||||||
|
if not self.config.safeGetBoolean('bitmessagesettings', 'dontconnect'):
|
||||||
|
QtGui.QMessageBox.about(
|
||||||
|
self, _translate("MainWindow", "Restart"),
|
||||||
_translate(
|
_translate(
|
||||||
"settingsDialog",
|
"MainWindow",
|
||||||
"Start Bitmessage in the tray (don\'t show main window)",
|
"You must restart Bitmessage for the port number"
|
||||||
None))
|
" change to take effect.")
|
||||||
self.checkBoxMinimizeToTray.setText(_translate("settingsDialog", "Minimize to tray", None))
|
)
|
||||||
self.checkBoxTrayOnClose.setText(_translate("settingsDialog", "Close to tray", None))
|
self.config.set(
|
||||||
self.checkBoxHideTrayConnectionNotifications.setText(
|
'bitmessagesettings', 'port', str(self.lineEditTCPPort.text()))
|
||||||
_translate("settingsDialog", "Hide connection notifications", None))
|
if self.checkBoxUPnP.isChecked() != self.config.safeGetBoolean(
|
||||||
self.checkBoxShowTrayNotifications.setText(
|
'bitmessagesettings', 'upnp'):
|
||||||
|
self.config.set(
|
||||||
|
'bitmessagesettings', 'upnp',
|
||||||
|
str(self.checkBoxUPnP.isChecked()))
|
||||||
|
if self.checkBoxUPnP.isChecked():
|
||||||
|
import upnp
|
||||||
|
upnpThread = upnp.uPnPThread()
|
||||||
|
upnpThread.start()
|
||||||
|
|
||||||
|
if (
|
||||||
|
self.config.get('bitmessagesettings', 'socksproxytype') ==
|
||||||
|
'none' and
|
||||||
|
self.comboBoxProxyType.currentText()[0:5] == 'SOCKS'
|
||||||
|
):
|
||||||
|
if shared.statusIconColor != 'red':
|
||||||
|
QtGui.QMessageBox.about(
|
||||||
|
self, _translate("MainWindow", "Restart"),
|
||||||
_translate(
|
_translate(
|
||||||
"settingsDialog",
|
"MainWindow",
|
||||||
"Show notification when message received",
|
"Bitmessage will use your proxy from now on but"
|
||||||
None))
|
" you may want to manually restart Bitmessage now"
|
||||||
self.checkBoxPortableMode.setText(_translate("settingsDialog", "Run in Portable Mode", None))
|
" to close existing connections (if any).")
|
||||||
self.PortableModeDescription.setText(
|
)
|
||||||
|
if (
|
||||||
|
self.config.get('bitmessagesettings', 'socksproxytype')[0:5] ==
|
||||||
|
'SOCKS' and self.comboBoxProxyType.currentText()[0:5] != 'SOCKS'
|
||||||
|
):
|
||||||
|
self.parent.statusbar.clearMessage()
|
||||||
|
# just in case we changed something in the network connectivity
|
||||||
|
state.resetNetworkProtocolAvailability()
|
||||||
|
if self.comboBoxProxyType.currentText()[0:5] == 'SOCKS':
|
||||||
|
self.config.set('bitmessagesettings', 'socksproxytype', str(
|
||||||
|
self.comboBoxProxyType.currentText()))
|
||||||
|
else:
|
||||||
|
self.config.set('bitmessagesettings', 'socksproxytype', 'none')
|
||||||
|
self.config.set('bitmessagesettings', 'socksauthentication', str(
|
||||||
|
self.checkBoxAuthentication.isChecked()))
|
||||||
|
self.config.set('bitmessagesettings', 'sockshostname', str(
|
||||||
|
self.lineEditSocksHostname.text()))
|
||||||
|
self.config.set('bitmessagesettings', 'socksport', str(
|
||||||
|
self.lineEditSocksPort.text()))
|
||||||
|
self.config.set('bitmessagesettings', 'socksusername', str(
|
||||||
|
self.lineEditSocksUsername.text()))
|
||||||
|
self.config.set('bitmessagesettings', 'sockspassword', str(
|
||||||
|
self.lineEditSocksPassword.text()))
|
||||||
|
self.config.set('bitmessagesettings', 'sockslisten', str(
|
||||||
|
self.checkBoxSocksListen.isChecked()))
|
||||||
|
try:
|
||||||
|
# Rounding to integers just for aesthetics
|
||||||
|
self.config.set('bitmessagesettings', 'maxdownloadrate', str(
|
||||||
|
int(float(self.lineEditMaxDownloadRate.text()))))
|
||||||
|
self.config.set('bitmessagesettings', 'maxuploadrate', str(
|
||||||
|
int(float(self.lineEditMaxUploadRate.text()))))
|
||||||
|
except ValueError:
|
||||||
|
QtGui.QMessageBox.about(
|
||||||
|
self, _translate("MainWindow", "Number needed"),
|
||||||
_translate(
|
_translate(
|
||||||
"settingsDialog",
|
"MainWindow",
|
||||||
"In Portable Mode, messages and config files are stored in the same directory as the"
|
"Your maximum download and upload rate must be numbers."
|
||||||
" program rather than the normal application-data folder. This makes it convenient to"
|
" Ignoring what you typed.")
|
||||||
" run Bitmessage from a USB thumb drive.",
|
)
|
||||||
None))
|
else:
|
||||||
self.checkBoxWillinglySendToMobile.setText(
|
set_rates(
|
||||||
|
self.config.safeGetInt('bitmessagesettings', 'maxdownloadrate'),
|
||||||
|
self.config.safeGetInt('bitmessagesettings', 'maxuploadrate'))
|
||||||
|
|
||||||
|
self.config.set('bitmessagesettings', 'maxoutboundconnections', str(
|
||||||
|
int(float(self.lineEditMaxOutboundConnections.text()))))
|
||||||
|
|
||||||
|
self.config.set(
|
||||||
|
'bitmessagesettings', 'namecoinrpctype', self.getNamecoinType())
|
||||||
|
self.config.set('bitmessagesettings', 'namecoinrpchost', str(
|
||||||
|
self.lineEditNamecoinHost.text()))
|
||||||
|
self.config.set('bitmessagesettings', 'namecoinrpcport', str(
|
||||||
|
self.lineEditNamecoinPort.text()))
|
||||||
|
self.config.set('bitmessagesettings', 'namecoinrpcuser', str(
|
||||||
|
self.lineEditNamecoinUser.text()))
|
||||||
|
self.config.set('bitmessagesettings', 'namecoinrpcpassword', str(
|
||||||
|
self.lineEditNamecoinPassword.text()))
|
||||||
|
self.parent.resetNamecoinConnection()
|
||||||
|
|
||||||
|
# Demanded difficulty tab
|
||||||
|
if float(self.lineEditTotalDifficulty.text()) >= 1:
|
||||||
|
self.config.set(
|
||||||
|
'bitmessagesettings', 'defaultnoncetrialsperbyte',
|
||||||
|
str(int(
|
||||||
|
float(self.lineEditTotalDifficulty.text()) *
|
||||||
|
defaults.networkDefaultProofOfWorkNonceTrialsPerByte)))
|
||||||
|
if float(self.lineEditSmallMessageDifficulty.text()) >= 1:
|
||||||
|
self.config.set(
|
||||||
|
'bitmessagesettings', 'defaultpayloadlengthextrabytes',
|
||||||
|
str(int(
|
||||||
|
float(self.lineEditSmallMessageDifficulty.text()) *
|
||||||
|
defaults.networkDefaultPayloadLengthExtraBytes)))
|
||||||
|
|
||||||
|
if self.comboBoxOpenCL.currentText().toUtf8() != self.config.safeGet(
|
||||||
|
'bitmessagesettings', 'opencl'):
|
||||||
|
self.config.set(
|
||||||
|
'bitmessagesettings', 'opencl',
|
||||||
|
str(self.comboBoxOpenCL.currentText()))
|
||||||
|
queues.workerQueue.put(('resetPoW', ''))
|
||||||
|
|
||||||
|
acceptableDifficultyChanged = False
|
||||||
|
|
||||||
|
if (
|
||||||
|
float(self.lineEditMaxAcceptableTotalDifficulty.text()) >= 1 or
|
||||||
|
float(self.lineEditMaxAcceptableTotalDifficulty.text()) == 0
|
||||||
|
):
|
||||||
|
if self.config.get(
|
||||||
|
'bitmessagesettings', 'maxacceptablenoncetrialsperbyte'
|
||||||
|
) != str(int(
|
||||||
|
float(self.lineEditMaxAcceptableTotalDifficulty.text()) *
|
||||||
|
defaults.networkDefaultProofOfWorkNonceTrialsPerByte)
|
||||||
|
):
|
||||||
|
# the user changed the max acceptable total difficulty
|
||||||
|
acceptableDifficultyChanged = True
|
||||||
|
self.config.set(
|
||||||
|
'bitmessagesettings', 'maxacceptablenoncetrialsperbyte',
|
||||||
|
str(int(
|
||||||
|
float(self.lineEditMaxAcceptableTotalDifficulty.text()) *
|
||||||
|
defaults.networkDefaultProofOfWorkNonceTrialsPerByte))
|
||||||
|
)
|
||||||
|
if (
|
||||||
|
float(self.lineEditMaxAcceptableSmallMessageDifficulty.text()) >= 1 or
|
||||||
|
float(self.lineEditMaxAcceptableSmallMessageDifficulty.text()) == 0
|
||||||
|
):
|
||||||
|
if self.config.get(
|
||||||
|
'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes'
|
||||||
|
) != str(int(
|
||||||
|
float(self.lineEditMaxAcceptableSmallMessageDifficulty.text()) *
|
||||||
|
defaults.networkDefaultPayloadLengthExtraBytes)
|
||||||
|
):
|
||||||
|
# the user changed the max acceptable small message difficulty
|
||||||
|
acceptableDifficultyChanged = True
|
||||||
|
self.config.set(
|
||||||
|
'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes',
|
||||||
|
str(int(
|
||||||
|
float(self.lineEditMaxAcceptableSmallMessageDifficulty.text()) *
|
||||||
|
defaults.networkDefaultPayloadLengthExtraBytes))
|
||||||
|
)
|
||||||
|
if acceptableDifficultyChanged:
|
||||||
|
# It might now be possible to send msgs which were previously
|
||||||
|
# marked as toodifficult. Let us change them to 'msgqueued'.
|
||||||
|
# The singleWorker will try to send them and will again mark
|
||||||
|
# them as toodifficult if the receiver's required difficulty
|
||||||
|
# is still higher than we are willing to do.
|
||||||
|
sqlExecute(
|
||||||
|
"UPDATE sent SET status='msgqueued'"
|
||||||
|
" WHERE status='toodifficult'")
|
||||||
|
queues.workerQueue.put(('sendmessage', ''))
|
||||||
|
|
||||||
|
# UI setting to stop trying to send messages after X days/months
|
||||||
|
# I'm open to changing this UI to something else if someone has a better idea.
|
||||||
|
if self.lineEditDays.text() == '' and self.lineEditMonths.text() == '':
|
||||||
|
# We need to handle this special case. Bitmessage has its
|
||||||
|
# default behavior. The input is blank/blank
|
||||||
|
self.config.set('bitmessagesettings', 'stopresendingafterxdays', '')
|
||||||
|
self.config.set('bitmessagesettings', 'stopresendingafterxmonths', '')
|
||||||
|
shared.maximumLengthOfTimeToBotherResendingMessages = float('inf')
|
||||||
|
|
||||||
|
try:
|
||||||
|
days = float(self.lineEditDays.text())
|
||||||
|
except ValueError:
|
||||||
|
self.lineEditDays.setText("0")
|
||||||
|
days = 0.0
|
||||||
|
try:
|
||||||
|
months = float(self.lineEditMonths.text())
|
||||||
|
except ValueError:
|
||||||
|
self.lineEditMonths.setText("0")
|
||||||
|
months = 0.0
|
||||||
|
|
||||||
|
if days >= 0 and months >= 0:
|
||||||
|
shared.maximumLengthOfTimeToBotherResendingMessages = \
|
||||||
|
days * 24 * 60 * 60 + months * 60 * 60 * 24 * 365 / 12
|
||||||
|
if shared.maximumLengthOfTimeToBotherResendingMessages < 432000:
|
||||||
|
# If the time period is less than 5 hours, we give
|
||||||
|
# zero values to all fields. No message will be sent again.
|
||||||
|
QtGui.QMessageBox.about(
|
||||||
|
self,
|
||||||
|
_translate("MainWindow", "Will not resend ever"),
|
||||||
_translate(
|
_translate(
|
||||||
"settingsDialog",
|
"MainWindow",
|
||||||
"Willingly include unencrypted destination address when sending to a mobile device",
|
"Note that the time limit you entered is less"
|
||||||
None))
|
" than the amount of time Bitmessage waits for"
|
||||||
self.checkBoxUseIdenticons.setText(_translate("settingsDialog", "Use Identicons", None))
|
" the first resend attempt therefore your"
|
||||||
self.checkBoxReplyBelow.setText(_translate("settingsDialog", "Reply below Quote", None))
|
" messages will never be resent.")
|
||||||
self.groupBox.setTitle(_translate("settingsDialog", "Interface Language", None))
|
)
|
||||||
self.languageComboBox.setItemText(0, _translate("settingsDialog", "System Settings", "system"))
|
self.config.set(
|
||||||
self.tabWidgetSettings.setTabText(
|
'bitmessagesettings', 'stopresendingafterxdays', '0')
|
||||||
self.tabWidgetSettings.indexOf(
|
self.config.set(
|
||||||
self.tabUserInterface),
|
'bitmessagesettings', 'stopresendingafterxmonths', '0')
|
||||||
_translate(
|
shared.maximumLengthOfTimeToBotherResendingMessages = 0.0
|
||||||
"settingsDialog", "User Interface", None))
|
else:
|
||||||
self.groupBox1.setTitle(_translate("settingsDialog", "Listening port", None))
|
self.config.set(
|
||||||
self.label.setText(_translate("settingsDialog", "Listen for connections on port:", None))
|
'bitmessagesettings', 'stopresendingafterxdays', str(days))
|
||||||
self.labelUPnP.setText(_translate("settingsDialog", "UPnP:", None))
|
self.config.set(
|
||||||
self.groupBox_3.setTitle(_translate("settingsDialog", "Bandwidth limit", None))
|
'bitmessagesettings', 'stopresendingafterxmonths',
|
||||||
self.label_24.setText(_translate("settingsDialog", "Maximum download rate (kB/s): [0: unlimited]", None))
|
str(months))
|
||||||
self.label_25.setText(_translate("settingsDialog", "Maximum upload rate (kB/s): [0: unlimited]", None))
|
|
||||||
self.label_26.setText(_translate("settingsDialog", "Maximum outbound connections: [0: none]", None))
|
self.config.save()
|
||||||
self.groupBox_2.setTitle(_translate("settingsDialog", "Proxy server / Tor", None))
|
|
||||||
self.label_2.setText(_translate("settingsDialog", "Type:", None))
|
self.parent.updateStartOnLogon()
|
||||||
self.label_3.setText(_translate("settingsDialog", "Server hostname:", None))
|
|
||||||
self.label_4.setText(_translate("settingsDialog", "Port:", None))
|
if (
|
||||||
self.checkBoxAuthentication.setText(_translate("settingsDialog", "Authentication", None))
|
state.appdata != paths.lookupExeFolder() and
|
||||||
self.label_5.setText(_translate("settingsDialog", "Username:", None))
|
self.checkBoxPortableMode.isChecked()
|
||||||
self.label_6.setText(_translate("settingsDialog", "Pass:", None))
|
):
|
||||||
self.checkBoxSocksListen.setText(
|
# If we are NOT using portable mode now but the user selected
|
||||||
_translate(
|
# that we should...
|
||||||
"settingsDialog",
|
# Write the keys.dat file to disk in the new location
|
||||||
"Listen for incoming connections when using proxy",
|
sqlStoredProcedure('movemessagstoprog')
|
||||||
None))
|
with open(paths.lookupExeFolder() + 'keys.dat', 'wb') as configfile:
|
||||||
self.comboBoxProxyType.setItemText(0, _translate("settingsDialog", "none", None))
|
self.config.write(configfile)
|
||||||
self.comboBoxProxyType.setItemText(1, _translate("settingsDialog", "SOCKS4a", None))
|
# Write the knownnodes.dat file to disk in the new location
|
||||||
self.comboBoxProxyType.setItemText(2, _translate("settingsDialog", "SOCKS5", None))
|
knownnodes.saveKnownNodes(paths.lookupExeFolder())
|
||||||
self.tabWidgetSettings.setTabText(
|
os.remove(state.appdata + 'keys.dat')
|
||||||
self.tabWidgetSettings.indexOf(
|
os.remove(state.appdata + 'knownnodes.dat')
|
||||||
self.tabNetworkSettings),
|
previousAppdataLocation = state.appdata
|
||||||
_translate(
|
state.appdata = paths.lookupExeFolder()
|
||||||
"settingsDialog", "Network Settings", None))
|
debug.resetLogging()
|
||||||
self.label_9.setText(_translate("settingsDialog", "Total difficulty:", None))
|
try:
|
||||||
self.label_10.setText(
|
os.remove(previousAppdataLocation + 'debug.log')
|
||||||
_translate(
|
os.remove(previousAppdataLocation + 'debug.log.1')
|
||||||
"settingsDialog",
|
except:
|
||||||
"The \'Total difficulty\' affects the absolute amount of work the sender must complete."
|
pass
|
||||||
" Doubling this value doubles the amount of work.",
|
|
||||||
None))
|
if (
|
||||||
self.label_11.setText(_translate("settingsDialog", "Small message difficulty:", None))
|
state.appdata == paths.lookupExeFolder() and
|
||||||
self.label_8.setText(_translate(
|
not self.checkBoxPortableMode.isChecked()
|
||||||
"settingsDialog",
|
):
|
||||||
"When someone sends you a message, their computer must first complete some work. The difficulty of this"
|
# If we ARE using portable mode now but the user selected
|
||||||
" work, by default, is 1. You may raise this default for new addresses you create by changing the values"
|
# that we shouldn't...
|
||||||
" here. Any new addresses you create will require senders to meet the higher difficulty. There is one"
|
state.appdata = paths.lookupAppdataFolder()
|
||||||
" exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically"
|
if not os.path.exists(state.appdata):
|
||||||
" notify them when you next send a message that they need only complete the minimum amount of"
|
os.makedirs(state.appdata)
|
||||||
" work: difficulty 1. ",
|
sqlStoredProcedure('movemessagstoappdata')
|
||||||
None))
|
# Write the keys.dat file to disk in the new location
|
||||||
self.label_12.setText(
|
self.config.save()
|
||||||
_translate(
|
# Write the knownnodes.dat file to disk in the new location
|
||||||
"settingsDialog",
|
knownnodes.saveKnownNodes(state.appdata)
|
||||||
"The \'Small message difficulty\' mostly only affects the difficulty of sending small messages."
|
os.remove(paths.lookupExeFolder() + 'keys.dat')
|
||||||
" Doubling this value makes it almost twice as difficult to send a small message but doesn\'t really"
|
os.remove(paths.lookupExeFolder() + 'knownnodes.dat')
|
||||||
" affect large messages.",
|
debug.resetLogging()
|
||||||
None))
|
try:
|
||||||
self.tabWidgetSettings.setTabText(
|
os.remove(paths.lookupExeFolder() + 'debug.log')
|
||||||
self.tabWidgetSettings.indexOf(
|
os.remove(paths.lookupExeFolder() + 'debug.log.1')
|
||||||
self.tabDemandedDifficulty),
|
except:
|
||||||
_translate(
|
pass
|
||||||
"settingsDialog", "Demanded difficulty", None))
|
|
||||||
self.label_15.setText(
|
|
||||||
_translate(
|
|
||||||
"settingsDialog",
|
|
||||||
"Here you may set the maximum amount of work you are willing to do to send a message to another"
|
|
||||||
" person. Setting these values to 0 means that any value is acceptable.",
|
|
||||||
None))
|
|
||||||
self.label_13.setText(_translate("settingsDialog", "Maximum acceptable total difficulty:", None))
|
|
||||||
self.label_14.setText(_translate("settingsDialog", "Maximum acceptable small message difficulty:", None))
|
|
||||||
self.tabWidgetSettings.setTabText(
|
|
||||||
self.tabWidgetSettings.indexOf(
|
|
||||||
self.tabMaxAcceptableDifficulty),
|
|
||||||
_translate(
|
|
||||||
"settingsDialog", "Max acceptable difficulty", None))
|
|
||||||
self.labelOpenCL.setText(_translate("settingsDialog", "Hardware GPU acceleration (OpenCL):", None))
|
|
||||||
self.label_16.setText(_translate(
|
|
||||||
"settingsDialog",
|
|
||||||
"<html><head/><body><p>Bitmessage can utilize a different Bitcoin-based program called Namecoin to make"
|
|
||||||
" addresses human-friendly. For example, instead of having to tell your friend your long Bitmessage"
|
|
||||||
" address, you can simply tell him to send a message to <span style=\" font-style:italic;\">test."
|
|
||||||
" </span></p><p>(Getting your own Bitmessage address into Namecoin is still rather difficult).</p>"
|
|
||||||
"<p>Bitmessage can use either namecoind directly or a running nmcontrol instance.</p></body></html>",
|
|
||||||
None))
|
|
||||||
self.label_17.setText(_translate("settingsDialog", "Host:", None))
|
|
||||||
self.label_18.setText(_translate("settingsDialog", "Port:", None))
|
|
||||||
self.labelNamecoinUser.setText(_translate("settingsDialog", "Username:", None))
|
|
||||||
self.labelNamecoinPassword.setText(_translate("settingsDialog", "Password:", None))
|
|
||||||
self.pushButtonNamecoinTest.setText(_translate("settingsDialog", "Test", None))
|
|
||||||
self.label_21.setText(_translate("settingsDialog", "Connect to:", None))
|
|
||||||
self.radioButtonNamecoinNamecoind.setText(_translate("settingsDialog", "Namecoind", None))
|
|
||||||
self.radioButtonNamecoinNmcontrol.setText(_translate("settingsDialog", "NMControl", None))
|
|
||||||
self.tabWidgetSettings.setTabText(
|
|
||||||
self.tabWidgetSettings.indexOf(
|
|
||||||
self.tabNamecoin),
|
|
||||||
_translate(
|
|
||||||
"settingsDialog", "Namecoin integration", None))
|
|
||||||
self.label_7.setText(_translate(
|
|
||||||
"settingsDialog",
|
|
||||||
"<html><head/><body><p>By default, if you send a message to someone and he is offline for more than two"
|
|
||||||
" days, Bitmessage will send the message again after an additional two days. This will be continued with"
|
|
||||||
" exponential backoff forever; messages will be resent after 5, 10, 20 days ect. until the receiver"
|
|
||||||
" acknowledges them. Here you may change that behavior by having Bitmessage give up after a certain"
|
|
||||||
" number of days or months.</p><p>Leave these input fields blank for the default behavior."
|
|
||||||
" </p></body></html>",
|
|
||||||
None))
|
|
||||||
self.label_19.setText(_translate("settingsDialog", "Give up after", None))
|
|
||||||
self.label_20.setText(_translate("settingsDialog", "and", None))
|
|
||||||
self.label_22.setText(_translate("settingsDialog", "days", None))
|
|
||||||
self.label_23.setText(_translate("settingsDialog", "months.", None))
|
|
||||||
self.tabWidgetSettings.setTabText(
|
|
||||||
self.tabWidgetSettings.indexOf(
|
|
||||||
self.tabResendsExpire),
|
|
||||||
_translate(
|
|
||||||
"settingsDialog", "Resends Expire", None))
|
|
||||||
|
|
|
@ -37,6 +37,18 @@
|
||||||
<string>User Interface</string>
|
<string>User Interface</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QFormLayout" name="formLayout">
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QCheckBox" name="checkBoxStartOnLogon">
|
<widget class="QCheckBox" name="checkBoxStartOnLogon">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -44,14 +56,20 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0" colspan="2">
|
<item row="1" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBoxTray">
|
||||||
|
<property name="title">
|
||||||
|
<string>Tray</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="formLayoutTray">
|
||||||
|
<item>
|
||||||
<widget class="QCheckBox" name="checkBoxStartInTray">
|
<widget class="QCheckBox" name="checkBoxStartInTray">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Start Bitmessage in the tray (don't show main window)</string>
|
<string>Start Bitmessage in the tray (don't show main window)</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item>
|
||||||
<widget class="QCheckBox" name="checkBoxMinimizeToTray">
|
<widget class="QCheckBox" name="checkBoxMinimizeToTray">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Minimize to tray</string>
|
<string>Minimize to tray</string>
|
||||||
|
@ -61,6 +79,23 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="checkBoxTrayOnClose">
|
||||||
|
<property name="text">
|
||||||
|
<string>Close to tray</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QCheckBox" name="checkBoxHideTrayConnectionNotifications">
|
||||||
|
<property name="text">
|
||||||
|
<string>Hide connection notifications</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QCheckBox" name="checkBoxShowTrayNotifications">
|
<widget class="QCheckBox" name="checkBoxShowTrayNotifications">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -117,90 +152,15 @@
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Interface Language</string>
|
<string>Interface Language</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QFormLayout" name="formLayout_2">
|
<layout class="QVBoxLayout">
|
||||||
<item row="0" column="0">
|
<item>
|
||||||
<widget class="QComboBox" name="languageComboBox">
|
<widget class="LanguageBox" name="languageComboBox">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>100</width>
|
<width>100</width>
|
||||||
<height>0</height>
|
<height>0</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string comment="system">System Settings</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true" comment="en">English</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true" comment="eo">Esperanto</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true" comment="fr">Français</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true" comment="de">Deutsch</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true" comment="es">Español</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true" comment="ru">русский</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true" comment="no">Norsk</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true" comment="ar">العربية</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true" comment="zh_cn">简体中文</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true" comment="ja">日本語</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true" comment="nl">Nederlands</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true" comment="cs">Česky</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string comment="en_pirate">Pirate English</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string comment="other">Other (set in keys.dat)</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -213,6 +173,18 @@
|
||||||
<string>Network Settings</string>
|
<string>Network Settings</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QGridLayout" name="gridLayout_4">
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QGroupBox" name="groupBox">
|
<widget class="QGroupBox" name="groupBox">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
|
@ -220,26 +192,13 @@
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<spacer name="horizontalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>125</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Listen for connections on port:</string>
|
<string>Listen for connections on port:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="2">
|
<item row="0" column="1">
|
||||||
<widget class="QLineEdit" name="lineEditTCPPort">
|
<widget class="QLineEdit" name="lineEditTCPPort">
|
||||||
<property name="maximumSize">
|
<property name="maximumSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -249,6 +208,26 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="4">
|
||||||
|
<widget class="QCheckBox" name="checkBoxUPnP">
|
||||||
|
<property name="text">
|
||||||
|
<string>UPnP</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -466,6 +445,18 @@
|
||||||
<string>Demanded difficulty</string>
|
<string>Demanded difficulty</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QGridLayout" name="gridLayout_6">
|
<layout class="QGridLayout" name="gridLayout_6">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
<item row="1" column="1">
|
<item row="1" column="1">
|
||||||
<widget class="QLabel" name="label_9">
|
<widget class="QLabel" name="label_9">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -594,6 +585,18 @@
|
||||||
<string>Max acceptable difficulty</string>
|
<string>Max acceptable difficulty</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QGridLayout" name="gridLayout_7">
|
<layout class="QGridLayout" name="gridLayout_7">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
<item row="0" column="0" colspan="3">
|
<item row="0" column="0" colspan="3">
|
||||||
<widget class="QLabel" name="label_15">
|
<widget class="QLabel" name="label_15">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -698,6 +701,33 @@
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="4" column="0" colspan="3">
|
||||||
|
<layout class="QHBoxLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="labelOpenCL">
|
||||||
|
<property name="text">
|
||||||
|
<string>Hardware GPU acceleration (OpenCL):</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="comboBoxOpenCL"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_12">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="tabNamecoin">
|
<widget class="QWidget" name="tabNamecoin">
|
||||||
|
@ -705,6 +735,18 @@
|
||||||
<string>Namecoin integration</string>
|
<string>Namecoin integration</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QGridLayout" name="gridLayout_8">
|
<layout class="QGridLayout" name="gridLayout_8">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<spacer name="horizontalSpacer_6">
|
<spacer name="horizontalSpacer_6">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
@ -888,6 +930,18 @@
|
||||||
<string>Resends Expire</string>
|
<string>Resends Expire</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QGridLayout" name="gridLayout_5">
|
<layout class="QGridLayout" name="gridLayout_5">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
<item row="0" column="0" colspan="3">
|
<item row="0" column="0" colspan="3">
|
||||||
<widget class="QLabel" name="label_7">
|
<widget class="QLabel" name="label_7">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -912,22 +966,16 @@
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="2">
|
<item row="1" column="2">
|
||||||
<widget class="QWidget" name="widget" native="true">
|
<widget class="QGroupBox">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>231</width>
|
<width>231</width>
|
||||||
<height>75</height>
|
<height>75</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
|
<layout class="QGridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label_19">
|
<widget class="QLabel" name="label_19">
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>10</x>
|
|
||||||
<y>20</y>
|
|
||||||
<width>101</width>
|
|
||||||
<height>20</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Give up after</string>
|
<string>Give up after</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -935,15 +983,9 @@
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_20">
|
<widget class="QLabel" name="label_20">
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>30</x>
|
|
||||||
<y>40</y>
|
|
||||||
<width>80</width>
|
|
||||||
<height>16</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>and</string>
|
<string>and</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -951,52 +993,42 @@
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
<widget class="QLineEdit" name="lineEditDays">
|
<widget class="QLineEdit" name="lineEditDays">
|
||||||
<property name="geometry">
|
<property name="maximumSize">
|
||||||
<rect>
|
<size>
|
||||||
<x>113</x>
|
<width>55</width>
|
||||||
<y>20</y>
|
<height>100</height>
|
||||||
<width>51</width>
|
</size>
|
||||||
<height>20</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
<widget class="QLineEdit" name="lineEditMonths">
|
<widget class="QLineEdit" name="lineEditMonths">
|
||||||
<property name="geometry">
|
<property name="maximumSize">
|
||||||
<rect>
|
<size>
|
||||||
<x>113</x>
|
<width>55</width>
|
||||||
<y>40</y>
|
<height>100</height>
|
||||||
<width>51</width>
|
</size>
|
||||||
<height>20</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QLabel" name="label_22">
|
</item>
|
||||||
<property name="geometry">
|
<item row="0" column="2">
|
||||||
<rect>
|
<widget class="QLabel">
|
||||||
<x>169</x>
|
|
||||||
<y>23</y>
|
|
||||||
<width>61</width>
|
|
||||||
<height>16</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>days</string>
|
<string>days</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QLabel" name="label_23">
|
</item>
|
||||||
<property name="geometry">
|
<item row="1" column="2">
|
||||||
<rect>
|
<widget class="QLabel">
|
||||||
<x>170</x>
|
|
||||||
<y>41</y>
|
|
||||||
<width>71</width>
|
|
||||||
<height>16</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>months.</string>
|
<string>months.</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="1">
|
<item row="2" column="1">
|
||||||
|
@ -1017,7 +1049,14 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>LanguageBox</class>
|
||||||
|
<extends>QComboBox</extends>
|
||||||
|
<header>bitmessageqt.languagebox</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>tabWidgetSettings</tabstop>
|
<tabstop>tabWidgetSettings</tabstop>
|
||||||
<tabstop>checkBoxStartOnLogon</tabstop>
|
<tabstop>checkBoxStartOnLogon</tabstop>
|
||||||
|
@ -1101,5 +1140,53 @@
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>comboBoxProxyType</sender>
|
||||||
|
<signal>currentIndexChanged(int)</signal>
|
||||||
|
<receiver>settingsDialog</receiver>
|
||||||
|
<slot>comboBoxProxyTypeChanged</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>20</x>
|
||||||
|
<y>20</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>20</x>
|
||||||
|
<y>20</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>radioButtonNamecoinNamecoind</sender>
|
||||||
|
<signal>toggled(bool)</signal>
|
||||||
|
<receiver>settingsDialog</receiver>
|
||||||
|
<slot>namecoinTypeChanged</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>20</x>
|
||||||
|
<y>20</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>20</x>
|
||||||
|
<y>20</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>pushButtonNamecoinTest</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>settingsDialog</receiver>
|
||||||
|
<slot>click_pushButtonNamecoinTest</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>20</x>
|
||||||
|
<y>20</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>20</x>
|
||||||
|
<y>20</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
</connections>
|
</connections>
|
||||||
</ui>
|
</ui>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user