Identicons #542
|
@ -56,7 +56,7 @@ def _translate(context, text):
|
|||
return QtGui.QApplication.translate(context, text)
|
||||
|
||||
def identiconize(address):
|
||||
size = 1
|
||||
size = 48
|
||||
|
||||
str_broadcast_subscribers = '[Broadcast subscribers]'
|
||||
if address == str_broadcast_subscribers:
|
||||
|
@ -71,11 +71,15 @@ def identiconize(address):
|
|||
# Attacks where someone creates an address to mimic someone else's identicon should be impossible then
|
||||
# i think it should generate a random string by default
|
||||
|
||||
# If you include another identicon library, please generate an
|
||||
# example identicon with the following md5 hash:
|
||||
# 3fd4bf901b9d4ea1394f0fb358725b28
|
||||
|
||||
try:
|
||||
identicon_lib = shared.config.get('bitmessagesettings', 'identicon')
|
||||
except:
|
||||
identicon_lib = 'qidenticon'
|
||||
|
||||
# default to no identicons
|
||||
identicon_lib = False
|
||||
|
||||
if (identicon_lib[:len('qidenticon')] == 'qidenticon'):
|
||||
# print identicon_lib
|
||||
|
@ -87,11 +91,13 @@ def identiconize(address):
|
|||
import hashlib
|
||||
hash = hashlib.md5(addBMIfNotPresent(address)+identiconsuffix).hexdigest()
|
||||
use_two_colors = (identicon_lib[:len('qidenticon_two')] == 'qidenticon_two')
|
||||
transparent = (identicon_lib == 'qidenticon_x') | (identicon_lib == 'qidenticon_two_x')
|
||||
opacity = int(not((identicon_lib == 'qidenticon_x') | (identicon_lib == 'qidenticon_two_x') | (identicon_lib == 'qidenticon_b') | (identicon_lib == 'qidenticon_two_b')))*255
|
||||
penwidth = 0
|
||||
pixmap = qidenticon.render_identicon(int(hash, 16), 48, use_two_colors, transparent, penwidth)
|
||||
idcon = QtGui.QIcon()
|
||||
idcon.addPixmap(pixmap, QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
image = qidenticon.render_identicon(int(hash, 16), size, use_two_colors, opacity, penwidth)
|
||||
# filename = './images/identicons/'+hash+'.png'
|
||||
# image.save(filename)
|
||||
idcon = QIcon()
|
||||
idcon.addPixmap(image, QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
return idcon
|
||||
elif identicon_lib == 'pydenticon':
|
||||
# print identicon_lib
|
||||
|
@ -101,7 +107,7 @@ def identiconize(address):
|
|||
# GPLv3 is a copyleft license that would influence our licensing
|
||||
# Find the source here: http://boottunes.googlecode.com/svn-history/r302/trunk/src/pydenticon.py
|
||||
# note that it requires PIL to be installed: http://www.pythonware.com/products/pil/
|
||||
idcon_render = Pydenticon(addBMIfNotPresent(address)+identiconsuffix, size)
|
||||
idcon_render = Pydenticon(addBMIfNotPresent(address)+identiconsuffix, size*3)
|
||||
rendering = idcon_render._render()
|
||||
data = rendering.convert("RGBA").tostring("raw", "RGBA")
|
||||
qim = QImage(data, size, size, QImage.Format_ARGB32)
|
||||
|
@ -116,6 +122,7 @@ def identiconize(address):
|
|||
if identicon_lib & len(identicon_lib) > 0:
|
||||
print 'Error: couldn\'t find this identicon library: ', identicon_lib
|
||||
print 'Control for typos!'
|
||||
# default to no identicons
|
||||
idcon = QtGui.QIcon()
|
||||
return idcon
|
||||
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
<RCC>
|
||||
<qresource prefix="newPrefix">
|
||||
<file>../images/no_identicons.png</file>
|
||||
<file>../images/qidenticon_x.png</file>
|
||||
<file>../images/qidenticon.png</file>
|
||||
<file>../images/qidenticon_two.png</file>
|
||||
<file>../images/qidenticon_two_x.png</file>
|
||||
<file>../images/can-icon-24px-yellow.png</file>
|
||||
<file>../images/can-icon-24px-red.png</file>
|
||||
<file>../images/can-icon-24px-green.png</file>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# Form implementation generated from reading ui file 'bitmessageui.ui'
|
||||
#
|
||||
# Created: Mon Aug 12 00:08:20 2013
|
||||
# Created: Wed Sep 18 17:38:54 2013
|
||||
# by: PyQt4 UI code generator 4.10.2
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
@ -630,3 +630,13 @@ class Ui_MainWindow(object):
|
|||
self.actionJoinChan.setText(_translate("MainWindow", "Join / Create chan", None))
|
||||
|
||||
import bitmessage_icons_rc
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
app = QtGui.QApplication(sys.argv)
|
||||
MainWindow = QtGui.QMainWindow()
|
||||
ui = Ui_MainWindow()
|
||||
ui.setupUi(MainWindow)
|
||||
MainWindow.show()
|
||||
sys.exit(app.exec_())
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# Form implementation generated from reading ui file 'settings.ui'
|
||||
#
|
||||
# Created: Sun Aug 25 18:09:38 2013
|
||||
# Created: Wed Sep 18 17:38:55 2013
|
||||
# by: PyQt4 UI code generator 4.10.2
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
@ -45,8 +45,6 @@ class Ui_settingsDialog(object):
|
|||
self.checkBoxMinimizeToTray.setChecked(True)
|
||||
self.checkBoxMinimizeToTray.setObjectName(_fromUtf8("checkBoxMinimizeToTray"))
|
||||
self.gridLayout_5.addWidget(self.checkBoxMinimizeToTray, 2, 0, 1, 1)
|
||||
spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
||||
self.gridLayout_5.addItem(spacerItem, 10, 0, 1, 1)
|
||||
self.checkBoxStartOnLogon = QtGui.QCheckBox(self.tabUserInterface)
|
||||
self.checkBoxStartOnLogon.setObjectName(_fromUtf8("checkBoxStartOnLogon"))
|
||||
self.gridLayout_5.addWidget(self.checkBoxStartOnLogon, 0, 0, 1, 1)
|
||||
|
@ -82,7 +80,35 @@ class Ui_settingsDialog(object):
|
|||
self.languageComboBox.addItem(_fromUtf8(""))
|
||||
self.languageComboBox.addItem(_fromUtf8(""))
|
||||
self.horizontalLayout_2.addWidget(self.languageComboBox)
|
||||
self.gridLayout_5.addWidget(self.groupBox, 10, 1, 1, 1)
|
||||
self.gridLayout_5.addWidget(self.groupBox, 7, 1, 4, 1)
|
||||
self.groupBox_3 = QtGui.QGroupBox(self.tabUserInterface)
|
||||
self.groupBox_3.setObjectName(_fromUtf8("groupBox_3"))
|
||||
self.comboBox = QtGui.QComboBox(self.groupBox_3)
|
||||
self.comboBox.setGeometry(QtCore.QRect(20, 20, 251, 31))
|
||||
self.comboBox.setIconSize(QtCore.QSize(24, 24))
|
||||
self.comboBox.setObjectName(_fromUtf8("comboBox"))
|
||||
icon = QtGui.QIcon()
|
||||
icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/no_identicons.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
self.comboBox.addItem(icon, _fromUtf8(""))
|
||||
icon1 = QtGui.QIcon()
|
||||
icon1.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/qidenticon.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
self.comboBox.addItem(icon1, _fromUtf8(""))
|
||||
icon2 = QtGui.QIcon()
|
||||
icon2.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/qidenticon_x.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
self.comboBox.addItem(icon2, _fromUtf8(""))
|
||||
icon3 = QtGui.QIcon()
|
||||
icon3.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/qidenticon_two.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
self.comboBox.addItem(icon3, _fromUtf8(""))
|
||||
icon4 = QtGui.QIcon()
|
||||
icon4.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/qidenticon_two_x.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
self.comboBox.addItem(icon4, _fromUtf8(""))
|
||||
self.checkBoxLoadAvatars = QtGui.QCheckBox(self.groupBox_3)
|
||||
self.checkBoxLoadAvatars.setGeometry(QtCore.QRect(20, 50, 121, 18))
|
||||
self.checkBoxLoadAvatars.setObjectName(_fromUtf8("checkBoxLoadAvatars"))
|
||||
self.lineEdit = QtGui.QLineEdit(self.groupBox_3)
|
||||
self.lineEdit.setGeometry(QtCore.QRect(140, 50, 131, 16))
|
||||
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
|
||||
self.gridLayout_5.addWidget(self.groupBox_3, 7, 0, 4, 1)
|
||||
self.tabWidgetSettings.addTab(self.tabUserInterface, _fromUtf8(""))
|
||||
self.tabNetworkSettings = QtGui.QWidget()
|
||||
self.tabNetworkSettings.setObjectName(_fromUtf8("tabNetworkSettings"))
|
||||
|
@ -92,8 +118,8 @@ class Ui_settingsDialog(object):
|
|||
self.groupBox1.setObjectName(_fromUtf8("groupBox1"))
|
||||
self.gridLayout_3 = QtGui.QGridLayout(self.groupBox1)
|
||||
self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
|
||||
spacerItem1 = QtGui.QSpacerItem(125, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_3.addItem(spacerItem1, 0, 0, 1, 1)
|
||||
spacerItem = QtGui.QSpacerItem(125, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_3.addItem(spacerItem, 0, 0, 1, 1)
|
||||
self.label = QtGui.QLabel(self.groupBox1)
|
||||
self.label.setObjectName(_fromUtf8("label"))
|
||||
self.gridLayout_3.addWidget(self.label, 0, 1, 1, 1)
|
||||
|
@ -150,8 +176,8 @@ class Ui_settingsDialog(object):
|
|||
self.checkBoxSocksListen.setObjectName(_fromUtf8("checkBoxSocksListen"))
|
||||
self.gridLayout_2.addWidget(self.checkBoxSocksListen, 3, 1, 1, 4)
|
||||
self.gridLayout_4.addWidget(self.groupBox_2, 1, 0, 1, 1)
|
||||
spacerItem2 = QtGui.QSpacerItem(20, 70, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
||||
self.gridLayout_4.addItem(spacerItem2, 2, 0, 1, 1)
|
||||
spacerItem1 = QtGui.QSpacerItem(20, 70, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
||||
self.gridLayout_4.addItem(spacerItem1, 2, 0, 1, 1)
|
||||
self.tabWidgetSettings.addTab(self.tabNetworkSettings, _fromUtf8(""))
|
||||
self.tab = QtGui.QWidget()
|
||||
self.tab.setObjectName(_fromUtf8("tab"))
|
||||
|
@ -161,8 +187,8 @@ class Ui_settingsDialog(object):
|
|||
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)
|
||||
spacerItem2 = QtGui.QSpacerItem(203, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_6.addItem(spacerItem2, 1, 0, 1, 1)
|
||||
self.label_9 = QtGui.QLabel(self.tab)
|
||||
self.label_9.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.label_9.setObjectName(_fromUtf8("label_9"))
|
||||
|
@ -176,8 +202,8 @@ class Ui_settingsDialog(object):
|
|||
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)
|
||||
spacerItem3 = QtGui.QSpacerItem(203, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_6.addItem(spacerItem3, 3, 0, 1, 1)
|
||||
self.label_11 = QtGui.QLabel(self.tab)
|
||||
self.label_11.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.label_11.setObjectName(_fromUtf8("label_11"))
|
||||
|
@ -208,8 +234,8 @@ class Ui_settingsDialog(object):
|
|||
self.label_15.setWordWrap(True)
|
||||
self.label_15.setObjectName(_fromUtf8("label_15"))
|
||||
self.gridLayout_7.addWidget(self.label_15, 0, 0, 1, 3)
|
||||
spacerItem5 = QtGui.QSpacerItem(102, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_7.addItem(spacerItem5, 1, 0, 1, 1)
|
||||
spacerItem4 = QtGui.QSpacerItem(102, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_7.addItem(spacerItem4, 1, 0, 1, 1)
|
||||
self.label_13 = QtGui.QLabel(self.tab_2)
|
||||
self.label_13.setLayoutDirection(QtCore.Qt.LeftToRight)
|
||||
self.label_13.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
|
@ -224,8 +250,8 @@ class Ui_settingsDialog(object):
|
|||
self.lineEditMaxAcceptableTotalDifficulty.setMaximumSize(QtCore.QSize(70, 16777215))
|
||||
self.lineEditMaxAcceptableTotalDifficulty.setObjectName(_fromUtf8("lineEditMaxAcceptableTotalDifficulty"))
|
||||
self.gridLayout_7.addWidget(self.lineEditMaxAcceptableTotalDifficulty, 1, 2, 1, 1)
|
||||
spacerItem6 = QtGui.QSpacerItem(102, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_7.addItem(spacerItem6, 2, 0, 1, 1)
|
||||
spacerItem5 = QtGui.QSpacerItem(102, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_7.addItem(spacerItem5, 2, 0, 1, 1)
|
||||
self.label_14 = QtGui.QLabel(self.tab_2)
|
||||
self.label_14.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.label_14.setObjectName(_fromUtf8("label_14"))
|
||||
|
@ -239,15 +265,15 @@ class Ui_settingsDialog(object):
|
|||
self.lineEditMaxAcceptableSmallMessageDifficulty.setMaximumSize(QtCore.QSize(70, 16777215))
|
||||
self.lineEditMaxAcceptableSmallMessageDifficulty.setObjectName(_fromUtf8("lineEditMaxAcceptableSmallMessageDifficulty"))
|
||||
self.gridLayout_7.addWidget(self.lineEditMaxAcceptableSmallMessageDifficulty, 2, 2, 1, 1)
|
||||
spacerItem7 = QtGui.QSpacerItem(20, 147, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
||||
self.gridLayout_7.addItem(spacerItem7, 3, 1, 1, 1)
|
||||
spacerItem6 = QtGui.QSpacerItem(20, 147, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
||||
self.gridLayout_7.addItem(spacerItem6, 3, 1, 1, 1)
|
||||
self.tabWidgetSettings.addTab(self.tab_2, _fromUtf8(""))
|
||||
self.tabNamecoin = QtGui.QWidget()
|
||||
self.tabNamecoin.setObjectName(_fromUtf8("tabNamecoin"))
|
||||
self.gridLayout_8 = QtGui.QGridLayout(self.tabNamecoin)
|
||||
self.gridLayout_8.setObjectName(_fromUtf8("gridLayout_8"))
|
||||
spacerItem8 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_8.addItem(spacerItem8, 2, 0, 1, 1)
|
||||
spacerItem7 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_8.addItem(spacerItem7, 2, 0, 1, 1)
|
||||
self.label_16 = QtGui.QLabel(self.tabNamecoin)
|
||||
self.label_16.setWordWrap(True)
|
||||
self.label_16.setObjectName(_fromUtf8("label_16"))
|
||||
|
@ -259,10 +285,10 @@ class Ui_settingsDialog(object):
|
|||
self.lineEditNamecoinHost = QtGui.QLineEdit(self.tabNamecoin)
|
||||
self.lineEditNamecoinHost.setObjectName(_fromUtf8("lineEditNamecoinHost"))
|
||||
self.gridLayout_8.addWidget(self.lineEditNamecoinHost, 2, 2, 1, 1)
|
||||
spacerItem8 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_8.addItem(spacerItem8, 3, 0, 1, 1)
|
||||
spacerItem9 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_8.addItem(spacerItem9, 3, 0, 1, 1)
|
||||
spacerItem10 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_8.addItem(spacerItem10, 4, 0, 1, 1)
|
||||
self.gridLayout_8.addItem(spacerItem9, 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)
|
||||
|
@ -271,8 +297,8 @@ class Ui_settingsDialog(object):
|
|||
self.lineEditNamecoinPort = QtGui.QLineEdit(self.tabNamecoin)
|
||||
self.lineEditNamecoinPort.setObjectName(_fromUtf8("lineEditNamecoinPort"))
|
||||
self.gridLayout_8.addWidget(self.lineEditNamecoinPort, 3, 2, 1, 1)
|
||||
spacerItem11 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
||||
self.gridLayout_8.addItem(spacerItem11, 8, 1, 1, 1)
|
||||
spacerItem10 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
|
||||
self.gridLayout_8.addItem(spacerItem10, 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"))
|
||||
|
@ -280,8 +306,8 @@ class Ui_settingsDialog(object):
|
|||
self.lineEditNamecoinUser = QtGui.QLineEdit(self.tabNamecoin)
|
||||
self.lineEditNamecoinUser.setObjectName(_fromUtf8("lineEditNamecoinUser"))
|
||||
self.gridLayout_8.addWidget(self.lineEditNamecoinUser, 4, 2, 1, 1)
|
||||
spacerItem12 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_8.addItem(spacerItem12, 5, 0, 1, 1)
|
||||
spacerItem11 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
|
||||
self.gridLayout_8.addItem(spacerItem11, 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"))
|
||||
|
@ -353,6 +379,14 @@ class Ui_settingsDialog(object):
|
|||
self.languageComboBox.setItemText(6, _translate("settingsDialog", "Russian", "ru"))
|
||||
self.languageComboBox.setItemText(7, _translate("settingsDialog", "Pirate English", "en_pirate"))
|
||||
self.languageComboBox.setItemText(8, _translate("settingsDialog", "Other (set in keys.dat)", "other"))
|
||||
self.groupBox_3.setTitle(_translate("settingsDialog", "Identicons (with example image)", None))
|
||||
self.comboBox.setItemText(0, _translate("settingsDialog", "no identicons", None))
|
||||
self.comboBox.setItemText(1, _translate("settingsDialog", "qidenticon", None))
|
||||
self.comboBox.setItemText(2, _translate("settingsDialog", "qidenticon_x", None))
|
||||
self.comboBox.setItemText(3, _translate("settingsDialog", "qidenticon_two", None))
|
||||
self.comboBox.setItemText(4, _translate("settingsDialog", "qidenticon_two_x", None))
|
||||
self.checkBoxLoadAvatars.setText(_translate("settingsDialog", "Load avatar images", None))
|
||||
self.lineEdit.setToolTip(_translate("settingsDialog", "<html><head/><body><p>The content of this text field will be appended to the BM-address before creating the hash for the identicons. By default it is filled with a random string to make the identicons in your client unique, otherwise the identicon could be an attack vector if an adversary creates an address resulting in a similar identicon. If you keep this string (or any other random or non-random string) you will be able to keep the same identicons.</p></body></html>", None))
|
||||
self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabUserInterface), _translate("settingsDialog", "User Interface", None))
|
||||
self.groupBox1.setTitle(_translate("settingsDialog", "Listening port", None))
|
||||
self.label.setText(_translate("settingsDialog", "Listen for connections on port:", None))
|
||||
|
@ -389,6 +423,7 @@ class Ui_settingsDialog(object):
|
|||
self.radioButtonNamecoinNmcontrol.setText(_translate("settingsDialog", "NMControl", None))
|
||||
self.tabWidgetSettings.setTabText(self.tabWidgetSettings.indexOf(self.tabNamecoin), _translate("settingsDialog", "Namecoin integration", None))
|
||||
|
||||
import bitmessage_icons_rc
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
|
|
@ -47,19 +47,6 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxStartOnLogon">
|
||||
<property name="text">
|
||||
|
@ -105,7 +92,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="1">
|
||||
<item row="7" column="1" rowspan="4">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Interface Language</string>
|
||||
|
@ -163,6 +150,100 @@
|
|||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0" rowspan="4">
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Identicons (with example image)</string>
|
||||
</property>
|
||||
<widget class="QComboBox" name="comboBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>20</y>
|
||||
<width>251</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>24</height>
|
||||
</size>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>no identicons</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="bitmessage_icons.qrc">
|
||||
<normaloff>:/newPrefix/images/no_identicons.png</normaloff>:/newPrefix/images/no_identicons.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>qidenticon</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="bitmessage_icons.qrc">
|
||||
<normaloff>:/newPrefix/images/qidenticon.png</normaloff>:/newPrefix/images/qidenticon.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>qidenticon_x</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="bitmessage_icons.qrc">
|
||||
<normaloff>:/newPrefix/images/qidenticon_x.png</normaloff>:/newPrefix/images/qidenticon_x.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>qidenticon_two</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="bitmessage_icons.qrc">
|
||||
<normaloff>:/newPrefix/images/qidenticon_two.png</normaloff>:/newPrefix/images/qidenticon_two.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>qidenticon_two_x</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="bitmessage_icons.qrc">
|
||||
<normaloff>:/newPrefix/images/qidenticon_two_x.png</normaloff>:/newPrefix/images/qidenticon_two_x.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="checkBoxLoadAvatars">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>50</y>
|
||||
<width>121</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Load avatar images</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="lineEdit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>140</x>
|
||||
<y>50</y>
|
||||
<width>131</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>The content of this text field will be appended to the BM-address before creating the hash for the identicons. By default it is filled with a random string to make the identicons in your client unique, otherwise the identicon could be an attack vector if an adversary creates an address resulting in a similar identicon. If you keep this string (or any other random or non-random string) you will be able to keep the same identicons.</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tabNetworkSettings">
|
||||
|
@ -756,7 +837,9 @@
|
|||
<tabstop>checkBoxSocksListen</tabstop>
|
||||
<tabstop>buttonBox</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<resources>
|
||||
<include location="bitmessage_icons.qrc"/>
|
||||
</resources>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
|
|
|
@ -67,12 +67,12 @@ class IdenticonRendererBase(object):
|
|||
code = int(code)
|
||||
self.code = code
|
||||
|
||||
def render(self, size, twoColor, transparent, penwidth):
|
||||
def render(self, size, twoColor, opacity, penwidth):
|
||||
"""
|
||||
render identicon to QPixmap
|
||||
render identicon to QPicture
|
||||
|
||||
@param size identicon patchsize. (image size is 3 * [size])
|
||||
@return QPixmap
|
||||
@return QPicture
|
||||
"""
|
||||
|
||||
# decode the code
|
||||
|
@ -82,7 +82,7 @@ class IdenticonRendererBase(object):
|
|||
image = QPixmap(QSize(size * 3 +penwidth, size * 3 +penwidth))
|
||||
|
||||
# fill background
|
||||
backColor = QtGui.QColor(255,255,255,(not transparent) * 255)
|
||||
backColor = QtGui.QColor(255,255,255,opacity)
|
||||
image.fill(backColor)
|
||||
|
||||
kwds = {
|
||||
|
@ -133,7 +133,7 @@ class IdenticonRendererBase(object):
|
|||
nopen = QtGui.QPen(foreColor, Qt.NoPen)
|
||||
foreBrush = QtGui.QBrush(foreColor, Qt.SolidPattern)
|
||||
if penwidth > 0:
|
||||
pen_color = QtGui.QColor(223, 223, 223)
|
||||
pen_color = QtGui.QColor(255, 255, 255)
|
||||
pen = QtGui.QPen(pen_color, Qt.SolidPattern)
|
||||
pen.setWidth(penwidth)
|
||||
|
||||
|
@ -147,8 +147,8 @@ class IdenticonRendererBase(object):
|
|||
|
||||
if invert:
|
||||
# subtract the actual polygon from a rectangle to invert it
|
||||
rect_polygon = QPolygonF(rect)
|
||||
polygon = rect_polygon.subtracted(polygon)
|
||||
poly_rect = QPolygonF(rect)
|
||||
polygon = poly_rect.subtracted(polygon)
|
||||
painter.setBrush(foreBrush)
|
||||
if penwidth > 0:
|
||||
# draw the borders
|
||||
|
@ -173,22 +173,39 @@ class DonRenderer(IdenticonRendererBase):
|
|||
"""
|
||||
|
||||
PATH_SET = [
|
||||
[(0, 0), (4, 0), (4, 4), (0, 4)], # 0
|
||||
#[0] full square:
|
||||
[(0, 0), (4, 0), (4, 4), (0, 4)],
|
||||
#[1] right-angled triangle pointing top-left:
|
||||
[(0, 0), (4, 0), (0, 4)],
|
||||
#[2] upwardy triangle:
|
||||
[(2, 0), (4, 4), (0, 4)],
|
||||
#[3] left half of square, standing rectangle:
|
||||
[(0, 0), (2, 0), (2, 4), (0, 4)],
|
||||
[(2, 0), (4, 2), (2, 4), (0, 2)], # 4
|
||||
#[4] square standing on diagonale:
|
||||
[(2, 0), (4, 2), (2, 4), (0, 2)],
|
||||
#[5] kite pointing topleft:
|
||||
[(0, 0), (4, 2), (4, 4), (2, 4)],
|
||||
#[6] Sierpinski triangle, fractal triangles:
|
||||
[(2, 0), (4, 4), (2, 4), (3, 2), (1, 2), (2, 4), (0, 4)],
|
||||
#[7] sharp angled lefttop pointing triangle:
|
||||
[(0, 0), (4, 2), (2, 4)],
|
||||
[(1, 1), (3, 1), (3, 3), (1, 3)], # 8
|
||||
#[8] small centered square:
|
||||
[(1, 1), (3, 1), (3, 3), (1, 3)],
|
||||
#[9] two small triangles:
|
||||
[(2, 0), (4, 0), (0, 4), (0, 2), (2, 2)],
|
||||
#[10] small topleft square:
|
||||
[(0, 0), (2, 0), (2, 2), (0, 2)],
|
||||
#[11] downpointing right-angled triangle on bottom:
|
||||
[(0, 2), (4, 2), (2, 4)],
|
||||
#[12] uppointing right-angled triangle on bottom:
|
||||
[(2, 2), (4, 4), (0, 4)],
|
||||
#[13] small rightbottom pointing right-angled triangle on topleft:
|
||||
[(2, 0), (2, 2), (0, 2)],
|
||||
#[14] small lefttop pointing right-angled triangle on topleft:
|
||||
[(0, 0), (2, 0), (0, 2)],
|
||||
[]] # 15
|
||||
#[15] empty:
|
||||
[]]
|
||||
# get the [0] full square, [4] square standing on diagonale, [8] small centered square, or [15] empty tile:
|
||||
MIDDLE_PATCH_SET = [0, 4, 8, 15]
|
||||
|
||||
# modify path set
|
||||
|
@ -232,7 +249,7 @@ class DonRenderer(IdenticonRendererBase):
|
|||
foreColor, secondColor, swap_cross
|
||||
|
||||
|
||||
def render_identicon(code, size, twoColor=False, transparent=False, penwidth=0, renderer=None):
|
||||
def render_identicon(code, size, twoColor=False, opacity=255, penwidth=0, renderer=None):
|
||||
if not renderer:
|
||||
renderer = DonRenderer
|
||||
return renderer(code).render(size, twoColor, transparent, penwidth)
|
||||
return renderer(code).render(size, twoColor, opacity, penwidth)
|
Reference in New Issue
Block a user