From c400384be4021cde5cbb8060ef075867780ae369 Mon Sep 17 00:00:00 2001 From: sendiulo Date: Thu, 29 Aug 2013 15:07:47 +0200 Subject: [PATCH] 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) --- src/bitmessageqt/__init__.py | 23 ++++++++++++++++++----- src/bitmessageqt/bitmessageui.py | 31 ++++++++++++++++++++++++------- src/bitmessageqt/bitmessageui.ui | 28 ++++++++++++++++++++++------ src/bitmessageqt/settings.py | 8 ++++++-- src/bitmessageqt/settings.ui | 9 ++++++++- src/helper_startup.py | 1 + 6 files changed, 79 insertions(+), 21 deletions(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 3e513295..5d48ee30 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -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')) diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py index c051c076..c1a77669 100644 --- a/src/bitmessageqt/bitmessageui.py +++ b/src/bitmessageqt/bitmessageui.py @@ -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_()) + diff --git a/src/bitmessageqt/bitmessageui.ui b/src/bitmessageqt/bitmessageui.ui index 683703d8..a2217185 100644 --- a/src/bitmessageqt/bitmessageui.ui +++ b/src/bitmessageqt/bitmessageui.ui @@ -6,7 +6,7 @@ 0 0 - 795 + 810 580 @@ -57,7 +57,7 @@ QTabWidget::Rounded - 0 + 1 @@ -263,7 +263,7 @@ - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -308,7 +308,7 @@ p, li { white-space: pre-wrap; } - + @@ -328,8 +328,11 @@ p, li { white-space: pre-wrap; } - + + + true + Send @@ -354,6 +357,19 @@ p, li { white-space: pre-wrap; } + + + + true + + + Remove before Sending + + + true + + + @@ -1022,7 +1038,7 @@ p, li { white-space: pre-wrap; } 0 0 - 795 + 810 18 diff --git a/src/bitmessageqt/settings.py b/src/bitmessageqt/settings.py index ad597773..b80c834a 100644 --- a/src/bitmessageqt/settings.py +++ b/src/bitmessageqt/settings.py @@ -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)) diff --git a/src/bitmessageqt/settings.ui b/src/bitmessageqt/settings.ui index eec38d8d..e47c9e5d 100644 --- a/src/bitmessageqt/settings.ui +++ b/src/bitmessageqt/settings.ui @@ -6,7 +6,7 @@ 0 0 - 567 + 572 343 @@ -163,6 +163,13 @@ + + + + Add safety badge that needs to be removed before sending messages + + + diff --git a/src/helper_startup.py b/src/helper_startup.py index 24dc0156..a898c4c8 100644 --- a/src/helper_startup.py +++ b/src/helper_startup.py @@ -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: