From ee5b038830f61d6d1d77b72dff953a93f1fd236b Mon Sep 17 00:00:00 2001 From: N0U Date: Sat, 5 Apr 2014 17:58:16 -0700 Subject: [PATCH] Add AddImage button which allow to embed an image in base64 into a message If an image is too big, a user will be asked if an image should be scaled --- src/bitmessageqt/__init__.py | 40 +++++++++++++++++- src/bitmessageqt/bitmessageui.py | 36 +++++++++------- src/bitmessageqt/bitmessageui.ui | 71 ++++++++++++++++++-------------- 3 files changed, 97 insertions(+), 50 deletions(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 7125cb60..ba0ce42b 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -39,6 +39,7 @@ from debug import logger import subprocess import datetime from helper_sql import * +import base64 try: from PyQt4 import QtCore, QtGui @@ -177,7 +178,9 @@ class MyForm(QtGui.QMainWindow): str_broadcast_subscribers = '[Broadcast subscribers]' str_chan = '[chan]' - + + images_dir=os.path.expanduser("~") + def init_file_menu(self): QtCore.QObject.connect(self.ui.actionExit, QtCore.SIGNAL( "triggered()"), self.quit) @@ -204,6 +207,8 @@ class MyForm(QtGui.QMainWindow): "clicked()"), self.click_pushButtonAddSubscription) QtCore.QObject.connect(self.ui.pushButtonAddBlacklist, QtCore.SIGNAL( "clicked()"), self.click_pushButtonAddBlacklist) + QtCore.QObject.connect(self.ui.pushButtonAddImage, QtCore.SIGNAL( + "clicked()"), self.click_pushButtonAddImage) QtCore.QObject.connect(self.ui.pushButtonSend, QtCore.SIGNAL( "clicked()"), self.click_pushButtonSend) QtCore.QObject.connect(self.ui.pushButtonLoadFromAddressBook, @@ -445,7 +450,7 @@ class MyForm(QtGui.QMainWindow): QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) - + # Ask the user if we may delete their old version 1 addresses if they # have any. configSections = shared.config.sections() @@ -1810,6 +1815,37 @@ class MyForm(QtGui.QMainWindow): newItem.setTextColor(QtGui.QColor(128, 128, 128)) self.ui.tableWidgetSubscriptions.setItem(0, 1, newItem) + def click_pushButtonAddImage(self): + file_name=QtGui.QFileDialog.getOpenFileName( + self,"Select an image",self.images_dir,"Image (*.png *.jpg *.jepg *.gif)") + if file_name.isNull(): # Operation was canceled + return + + file_info=QFileInfo(file_name) + self.images_dir=file_info.dir().absolutePath() #coz os.path.dirname does not support unicode + file_ext=file_info.suffix() #get an extension + + image=QImage() + if image.load(file_name): + if image.height()*image.width()>300*300: + #Do we need to resize it? + r=QtGui.QMessageBox.question( + self,"Image","This image is to big.\nShould it be scaled?", + QtGui.QMessageBox.Yes,QtGui.QMessageBox.No) # Why I cannot put Yes button before No button? That is sux + if r==QtGui.QMessageBox.Yes: + if image.height()>=image.width(): + image=image.scaledToHeight(300) + else: + image=image.scaledToWidth(300) + + buf=QBuffer() + image.save(buf,"PNG") + encoded_data=buf.buffer().toBase64().data() + html_data="" + self.ui.textEditMessage.insertPlainText("\n"+html_data) + else: + QtGui.QMessageBox.information(self,"Error","Could not open an image") + def click_pushButtonSend(self): self.statusBar().showMessage('') toAddresses = str(self.ui.lineEditTo.text()) diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py index b80367dd..68280d8d 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: Sat Nov 2 18:01:09 2013 +# Created: Sat Apr 5 16:04:46 2014 # by: PyQt4 UI code generator 4.10 # # WARNING! All changes made in this file will be lost! @@ -109,12 +109,6 @@ class Ui_MainWindow(object): self.send.setObjectName(_fromUtf8("send")) self.gridLayout_2 = QtGui.QGridLayout(self.send) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) - self.pushButtonLoadFromAddressBook = QtGui.QPushButton(self.send) - font = QtGui.QFont() - font.setPointSize(7) - self.pushButtonLoadFromAddressBook.setFont(font) - self.pushButtonLoadFromAddressBook.setObjectName(_fromUtf8("pushButtonLoadFromAddressBook")) - self.gridLayout_2.addWidget(self.pushButtonLoadFromAddressBook, 3, 2, 1, 1) self.pushButtonFetchNamecoinID = QtGui.QPushButton(self.send) font = QtGui.QFont() font.setPointSize(7) @@ -145,14 +139,20 @@ class Ui_MainWindow(object): self.textEditMessage = QtGui.QTextEdit(self.send) self.textEditMessage.setObjectName(_fromUtf8("textEditMessage")) self.gridLayout_2.addWidget(self.textEditMessage, 5, 1, 2, 5) + spacerItem = QtGui.QSpacerItem(20, 297, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout_2.addItem(spacerItem, 6, 0, 1, 1) self.label = QtGui.QLabel(self.send) self.label.setObjectName(_fromUtf8("label")) self.gridLayout_2.addWidget(self.label, 3, 0, 1, 1) + self.pushButtonLoadFromAddressBook = QtGui.QPushButton(self.send) + font = QtGui.QFont() + font.setPointSize(7) + self.pushButtonLoadFromAddressBook.setFont(font) + self.pushButtonLoadFromAddressBook.setObjectName(_fromUtf8("pushButtonLoadFromAddressBook")) + self.gridLayout_2.addWidget(self.pushButtonLoadFromAddressBook, 3, 2, 1, 1) self.label_2 = QtGui.QLabel(self.send) self.label_2.setObjectName(_fromUtf8("label_2")) self.gridLayout_2.addWidget(self.label_2, 2, 0, 1, 1) - spacerItem = QtGui.QSpacerItem(20, 297, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_2.addItem(spacerItem, 6, 0, 1, 1) self.radioButtonBroadcast = QtGui.QRadioButton(self.send) self.radioButtonBroadcast.setObjectName(_fromUtf8("radioButtonBroadcast")) self.gridLayout_2.addWidget(self.radioButtonBroadcast, 1, 1, 1, 3) @@ -164,7 +164,7 @@ class Ui_MainWindow(object): self.gridLayout_2.addItem(spacerItem1, 3, 4, 1, 1) self.pushButtonSend = QtGui.QPushButton(self.send) self.pushButtonSend.setObjectName(_fromUtf8("pushButtonSend")) - self.gridLayout_2.addWidget(self.pushButtonSend, 7, 5, 1, 1) + self.gridLayout_2.addWidget(self.pushButtonSend, 8, 5, 1, 1) self.labelSendBroadcastWarning = QtGui.QLabel(self.send) self.labelSendBroadcastWarning.setEnabled(True) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Preferred) @@ -174,7 +174,10 @@ class Ui_MainWindow(object): self.labelSendBroadcastWarning.setSizePolicy(sizePolicy) self.labelSendBroadcastWarning.setIndent(-1) self.labelSendBroadcastWarning.setObjectName(_fromUtf8("labelSendBroadcastWarning")) - self.gridLayout_2.addWidget(self.labelSendBroadcastWarning, 7, 1, 1, 4) + self.gridLayout_2.addWidget(self.labelSendBroadcastWarning, 8, 1, 1, 4) + self.pushButtonAddImage = QtGui.QPushButton(self.send) + self.pushButtonAddImage.setObjectName(_fromUtf8("pushButtonAddImage")) + self.gridLayout_2.addWidget(self.pushButtonAddImage, 7, 5, 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("")) @@ -439,7 +442,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, 885, 27)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 885, 22)) self.menubar.setObjectName(_fromUtf8("menubar")) self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setObjectName(_fromUtf8("menuFile")) @@ -501,7 +504,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) @@ -549,7 +552,6 @@ class Ui_MainWindow(object): item = self.tableWidgetInbox.horizontalHeaderItem(3) item.setText(_translate("MainWindow", "Received", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.inbox), _translate("MainWindow", "Inbox", None)) - self.pushButtonLoadFromAddressBook.setText(_translate("MainWindow", "Load from Address book", None)) self.pushButtonFetchNamecoinID.setText(_translate("MainWindow", "Fetch Namecoin ID", None)) self.label_4.setText(_translate("MainWindow", "Message:", None)) self.label_3.setText(_translate("MainWindow", "Subject:", None)) @@ -557,13 +559,15 @@ class Ui_MainWindow(object): self.textEditMessage.setHtml(_translate("MainWindow", "\n" "\n" -"


", None)) +"\n" +"


", None)) self.label.setText(_translate("MainWindow", "To:", None)) + self.pushButtonLoadFromAddressBook.setText(_translate("MainWindow", "Load from Address book", None)) self.label_2.setText(_translate("MainWindow", "From:", None)) 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.pushButtonAddImage.setText(_translate("MainWindow", "Add image", 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)) diff --git a/src/bitmessageqt/bitmessageui.ui b/src/bitmessageqt/bitmessageui.ui index e5148ec1..70723a71 100644 --- a/src/bitmessageqt/bitmessageui.ui +++ b/src/bitmessageqt/bitmessageui.ui @@ -57,7 +57,7 @@ QTabWidget::Rounded - 0 + 1 @@ -204,18 +204,6 @@ Send - - - - - 7 - - - - Load from Address book - - - @@ -278,22 +266,8 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2';"><br /></p></body></html> - - - - - - - To: - - - - - - - From: +</style></head><body style=" font-family:'Ubuntu'; font-size:9pt; font-weight:200; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-weight:400;"><br /></p></body></html> @@ -310,6 +284,32 @@ p, li { white-space: pre-wrap; } + + + + To: + + + + + + + + 7 + + + + Load from Address book + + + + + + + From: + + + @@ -337,14 +337,14 @@ p, li { white-space: pre-wrap; } - + Send - + true @@ -363,6 +363,13 @@ p, li { white-space: pre-wrap; } + + + + Add image + + + @@ -1055,7 +1062,7 @@ p, li { white-space: pre-wrap; } 0 0 885 - 27 + 22