This feature adds a checkbox in the "Send" tab which needs to be unchecked ("removed" like a saftey badge) in order to enable the "Send" button. This shall prevent accidentally sending a messages without having checked the content, the sender and the recipient.

In the settings you can set the behaviour of the checkbox. By default, there will be no badge not to annoy users who don't need this.

In future versions the user should be able to set the behaviour separately for each Identity (e.g. no badge for the general chan, but badge for personal address)
This commit is contained in:
sendiulo 2013-08-29 15:07:47 +02:00
parent a36c696f9d
commit c400384be4
6 changed files with 79 additions and 21 deletions

View File

@ -116,6 +116,10 @@ class MyForm(QtGui.QMainWindow):
pass
self.ui.labelSendBroadcastWarning.setVisible(False)
self.ui.removeBeforeSend.setChecked(shared.config.getboolean('bitmessagesettings',
'removebeforesend'))
self.ui.pushButtonSend.setEnabled(not shared.config.getboolean('bitmessagesettings',
'removebeforesend'))
# FILE MENU and other buttons
QtCore.QObject.connect(self.ui.actionExit, QtCore.SIGNAL(
@ -156,7 +160,9 @@ class MyForm(QtGui.QMainWindow):
"triggered()"), self.click_actionAbout)
QtCore.QObject.connect(self.ui.actionHelp, QtCore.SIGNAL(
"triggered()"), self.click_actionHelp)
QtCore.QObject.connect(self.ui.removeBeforeSend, QtCore.SIGNAL(
"toggled(bool)"), self.enableSendButton)
# Popup menu for the Inbox tab
self.ui.inboxContextMenuToolbar = QtGui.QToolBar()
# Actions
@ -1163,7 +1169,7 @@ class MyForm(QtGui.QMainWindow):
addressVersionNumber = int(
self.regenerateAddressesDialogInstance.ui.lineEditAddressVersionNumber.text())
# self.addressGenerator = addressGenerator()
# self.addressGenerator.setup(addressVersionNumber,streamNumberForAddress,"unused address",self.regenerateAddressesDialogInstance.ui.spinBoxNumberOfAddressesToMake.value(),self.regenerateAddressesDialogInstance.ui.lineEditPassphrase.text().toUtf8(),self.regenerateAddressesDialogInstance.ui.checkBoxEighteenByteRipe.isChecked())
# self.addressGenerator.setup(addressVersionNumber,streamNumberForAddress,"unused address",self.regenerateAddressesDialogInstance.ui.spinBoxNumberOfAddressesToMake.value(),self.regenerateAddressesDialogInstance.ui.lineEditPassphrase.text().toUtf8(),self.regenerateAddressesDialogInstance.ui.EighteenByteRipe.isChecked())
# QtCore.QObject.connect(self.addressGenerator, SIGNAL("writeNewAddressToTable(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), self.writeNewAddressToTable)
# QtCore.QObject.connect(self.addressGenerator, QtCore.SIGNAL("updateStatusBar(PyQt_PyObject)"), self.updateStatusBar)
# self.addressGenerator.start()
@ -1535,6 +1541,9 @@ class MyForm(QtGui.QMainWindow):
newItem.setTextColor(QtGui.QColor(128, 128, 128))
self.ui.tableWidgetSubscriptions.setItem(0, 1, newItem)
def enableSendButton(self):
self.ui.pushButtonSend.setEnabled(not self.ui.removeBeforeSend.isChecked())
def click_pushButtonSend(self):
self.statusBar().showMessage('')
toAddresses = str(self.ui.lineEditTo.text())
@ -1634,6 +1643,8 @@ class MyForm(QtGui.QMainWindow):
self.ui.lineEditTo.setText('')
self.ui.lineEditSubject.setText('')
self.ui.textEditMessage.setText('')
self.ui.removeBeforeSend.setChecked(shared.config.getboolean('bitmessagesettings',
'removebeforesend'))
self.ui.tabWidget.setCurrentIndex(2)
self.ui.tableWidgetSent.setCurrentCell(0, 0)
else:
@ -2031,11 +2042,11 @@ class MyForm(QtGui.QMainWindow):
self.settingsDialogInstance.ui.checkBoxStartInTray.isChecked()))
shared.config.set('bitmessagesettings', 'willinglysendtomobile', str(
self.settingsDialogInstance.ui.checkBoxWillinglySendToMobile.isChecked()))
shared.config.set('bitmessagesettings', 'removebeforesend', str(
self.settingsDialogInstance.ui.checkBoxRemoveBeforeSendSetting.isChecked()))
lang_ind = int(self.settingsDialogInstance.ui.languageComboBox.currentIndex())
if not languages[lang_ind] == 'other':
shared.config.set('bitmessagesettings', 'userlocale', languages[lang_ind])
if int(shared.config.get('bitmessagesettings', 'port')) != int(self.settingsDialogInstance.ui.lineEditTCPPort.text()):
if not shared.safeConfigGetBoolean('bitmessagesettings', 'dontconnect'):
QMessageBox.about(self, _translate("MainWindow", "Restart"), _translate(
@ -3046,7 +3057,9 @@ class settingsDialog(QtGui.QDialog):
shared.config.getboolean('bitmessagesettings', 'startintray'))
self.ui.checkBoxWillinglySendToMobile.setChecked(
shared.safeConfigGetBoolean('bitmessagesettings', 'willinglysendtomobile'))
self.ui.checkBoxRemoveBeforeSendSetting.setChecked(
shared.safeConfigGetBoolean('bitmessagesettings', 'removebeforesend'))
global languages
languages = ['system','en','eo','fr','de','es','ru','en_pirate','other']
user_countrycode = str(shared.config.get('bitmessagesettings', 'userlocale'))

View File

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'bitmessageui.ui'
#
# Created: Mon Aug 12 00:08:20 2013
# Created: Thu Aug 29 14:14:15 2013
# by: PyQt4 UI code generator 4.10.2
#
# WARNING! All changes made in this file will be lost!
@ -26,7 +26,7 @@ except AttributeError:
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(795, 580)
MainWindow.resize(810, 580)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/can-icon-24px.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
@ -140,7 +140,7 @@ class Ui_MainWindow(object):
self.gridLayout_2.addWidget(self.lineEditTo, 3, 1, 1, 1)
self.textEditMessage = QtGui.QTextEdit(self.send)
self.textEditMessage.setObjectName(_fromUtf8("textEditMessage"))
self.gridLayout_2.addWidget(self.textEditMessage, 5, 1, 2, 5)
self.gridLayout_2.addWidget(self.textEditMessage, 5, 1, 2, 6)
self.label = QtGui.QLabel(self.send)
self.label.setObjectName(_fromUtf8("label"))
self.gridLayout_2.addWidget(self.label, 3, 0, 1, 1)
@ -155,12 +155,13 @@ class Ui_MainWindow(object):
self.lineEditSubject = QtGui.QLineEdit(self.send)
self.lineEditSubject.setText(_fromUtf8(""))
self.lineEditSubject.setObjectName(_fromUtf8("lineEditSubject"))
self.gridLayout_2.addWidget(self.lineEditSubject, 4, 1, 1, 5)
self.gridLayout_2.addWidget(self.lineEditSubject, 4, 1, 1, 6)
spacerItem1 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.gridLayout_2.addItem(spacerItem1, 3, 4, 1, 1)
self.pushButtonSend = QtGui.QPushButton(self.send)
self.pushButtonSend.setEnabled(False)
self.pushButtonSend.setObjectName(_fromUtf8("pushButtonSend"))
self.gridLayout_2.addWidget(self.pushButtonSend, 7, 5, 1, 1)
self.gridLayout_2.addWidget(self.pushButtonSend, 7, 6, 1, 1)
self.labelSendBroadcastWarning = QtGui.QLabel(self.send)
self.labelSendBroadcastWarning.setEnabled(True)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Preferred)
@ -171,6 +172,11 @@ class Ui_MainWindow(object):
self.labelSendBroadcastWarning.setIndent(-1)
self.labelSendBroadcastWarning.setObjectName(_fromUtf8("labelSendBroadcastWarning"))
self.gridLayout_2.addWidget(self.labelSendBroadcastWarning, 7, 1, 1, 4)
self.removeBeforeSend = QtGui.QCheckBox(self.send)
self.removeBeforeSend.setEnabled(True)
self.removeBeforeSend.setChecked(True)
self.removeBeforeSend.setObjectName(_fromUtf8("removeBeforeSend"))
self.gridLayout_2.addWidget(self.removeBeforeSend, 3, 6, 1, 1)
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/send.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.tabWidget.addTab(self.send, icon2, _fromUtf8(""))
@ -428,7 +434,7 @@ class Ui_MainWindow(object):
self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 795, 18))
self.menubar.setGeometry(QtCore.QRect(0, 0, 810, 18))
self.menubar.setObjectName(_fromUtf8("menubar"))
self.menuFile = QtGui.QMenu(self.menubar)
self.menuFile.setObjectName(_fromUtf8("menuFile"))
@ -490,7 +496,7 @@ class Ui_MainWindow(object):
self.menubar.addAction(self.menuHelp.menuAction())
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
self.tabWidget.setCurrentIndex(1)
QtCore.QObject.connect(self.radioButtonSpecific, QtCore.SIGNAL(_fromUtf8("toggled(bool)")), self.lineEditTo.setEnabled)
QtCore.QObject.connect(self.radioButtonSpecific, QtCore.SIGNAL(_fromUtf8("clicked(bool)")), self.labelSendBroadcastWarning.hide)
QtCore.QObject.connect(self.radioButtonBroadcast, QtCore.SIGNAL(_fromUtf8("clicked()")), self.labelSendBroadcastWarning.show)
@ -553,6 +559,7 @@ class Ui_MainWindow(object):
self.radioButtonBroadcast.setText(_translate("MainWindow", "Broadcast to everyone who is subscribed to your address", None))
self.pushButtonSend.setText(_translate("MainWindow", "Send", None))
self.labelSendBroadcastWarning.setText(_translate("MainWindow", "Be aware that broadcasts are only encrypted with your address. Anyone who knows your address can read them.", None))
self.removeBeforeSend.setText(_translate("MainWindow", "Remove before Sending", None))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.send), _translate("MainWindow", "Send", None))
self.sentSearchLineEdit.setPlaceholderText(_translate("MainWindow", "Search", None))
self.sentSearchOptionCB.setItemText(0, _translate("MainWindow", "All", None))
@ -630,3 +637,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_())

View File

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>795</width>
<width>810</width>
<height>580</height>
</rect>
</property>
@ -57,7 +57,7 @@
<enum>QTabWidget::Rounded</enum>
</property>
<property name="currentIndex">
<number>0</number>
<number>1</number>
</property>
<widget class="QWidget" name="inbox">
<attribute name="icon">
@ -263,7 +263,7 @@
<item row="3" column="1">
<widget class="QLineEdit" name="lineEditTo"/>
</item>
<item row="5" column="1" rowspan="2" colspan="5">
<item row="5" column="1" rowspan="2" colspan="6">
<widget class="QTextEdit" name="textEditMessage">
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@ -308,7 +308,7 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="4" column="1" colspan="5">
<item row="4" column="1" colspan="6">
<widget class="QLineEdit" name="lineEditSubject">
<property name="text">
<string/>
@ -328,8 +328,11 @@ p, li { white-space: pre-wrap; }
</property>
</spacer>
</item>
<item row="7" column="5">
<item row="7" column="6">
<widget class="QPushButton" name="pushButtonSend">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Send</string>
</property>
@ -354,6 +357,19 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="3" column="6">
<widget class="QCheckBox" name="removeBeforeSend">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Remove before Sending</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="sent">
@ -1022,7 +1038,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>0</x>
<y>0</y>
<width>795</width>
<width>810</width>
<height>18</height>
</rect>
</property>

View File

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'settings.ui'
#
# Created: Sat Aug 24 09:19:58 2013
# Created: Thu Aug 29 14:40:14 2013
# by: PyQt4 UI code generator 4.10.2
#
# WARNING! All changes made in this file will be lost!
@ -26,7 +26,7 @@ except AttributeError:
class Ui_settingsDialog(object):
def setupUi(self, settingsDialog):
settingsDialog.setObjectName(_fromUtf8("settingsDialog"))
settingsDialog.resize(567, 343)
settingsDialog.resize(572, 343)
self.gridLayout = QtGui.QGridLayout(settingsDialog)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
self.buttonBox = QtGui.QDialogButtonBox(settingsDialog)
@ -83,6 +83,9 @@ class Ui_settingsDialog(object):
self.languageComboBox.addItem(_fromUtf8(""))
self.horizontalLayout_2.addWidget(self.languageComboBox)
self.gridLayout_5.addWidget(self.groupBox, 10, 1, 1, 1)
self.checkBoxRemoveBeforeSendSetting = QtGui.QCheckBox(self.tabUserInterface)
self.checkBoxRemoveBeforeSendSetting.setObjectName(_fromUtf8("checkBoxRemoveBeforeSendSetting"))
self.gridLayout_5.addWidget(self.checkBoxRemoveBeforeSendSetting, 7, 0, 1, 1)
self.tabWidgetSettings.addTab(self.tabUserInterface, _fromUtf8(""))
self.tabNetworkSettings = QtGui.QWidget()
self.tabNetworkSettings.setObjectName(_fromUtf8("tabNetworkSettings"))
@ -353,6 +356,7 @@ 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.checkBoxRemoveBeforeSendSetting.setText(_translate("settingsDialog", "Add safety badge that needs to be removed before sending messages", 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))

View File

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>567</width>
<width>572</width>
<height>343</height>
</rect>
</property>
@ -163,6 +163,13 @@
</layout>
</widget>
</item>
<item row="7" column="0">
<widget class="QCheckBox" name="checkBoxRemoveBeforeSendSetting">
<property name="text">
<string>Add safety badge that needs to be removed before sending messages</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tabNetworkSettings">

View File

@ -71,6 +71,7 @@ def loadConfig():
'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes', '0')
shared.config.set('bitmessagesettings', 'dontconnect', 'true')
shared.config.set('bitmessagesettings', 'userlocale', 'system')
shared.config.set('bitmessagesettings', 'removebeforesend', 'false')
ensureNamecoinOptions()
if storeConfigFilesInSameDirectoryAsProgramByDefault: