URI: 
       tnew class to show buttons in LineEdit. fixes #1050 - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit a3ed4ce2a702f454e3d6d917f933731ce4051cac
   DIR parent 8251c5b6d9cca735e91770433c7082013f73135c
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Mon, 20 Apr 2015 11:49:27 +0200
       
       new class to show buttons in LineEdit. fixes #1050
       
       Diffstat:
         M gui/qt/main_window.py               |      26 +++++++++++---------------
         M gui/qt/qrtextedit.py                |      38 ++++---------------------------
         M gui/qt/transaction_dialog.py        |       4 +++-
         M gui/qt/util.py                      |      40 +++++++++++++++++++++++++++++++
         M plugins/audio_modem.py              |       4 ++--
       
       5 files changed, 61 insertions(+), 51 deletions(-)
       ---
   DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
       t@@ -576,14 +576,15 @@ class ElectrumWindow(QMainWindow):
            def create_receive_tab(self):
        
                self.receive_grid = grid = QGridLayout()
       -        grid.setColumnMinimumWidth(3, 150)
       +        grid.setColumnMinimumWidth(3, 300)
        
       -        self.receive_address_e = MyLineEdit()
       -        self.receive_address_e.setFrozen(True)
       +        self.receive_address_e = ButtonsLineEdit()
       +        self.receive_address_e.addButton(":icons/copy.png", lambda: self.app.clipboard().setText(str(self.receive_address_e.text())), _("Copy Address to Clibboard"))
       +        self.receive_address_e.setReadOnly(True)
                self.receive_address_label = QLabel(_('Receiving address'))
                self.receive_address_e.textChanged.connect(self.update_receive_qr)
                grid.addWidget(self.receive_address_label, 0, 0)
       -        grid.addWidget(self.receive_address_e, 0, 1, 1, 3)
       +        grid.addWidget(self.receive_address_e, 0, 1, 1, 4)
        
                self.receive_message_e = QLineEdit()
                grid.addWidget(QLabel(_('Description')), 1, 0)
       t@@ -603,27 +604,22 @@ class ElectrumWindow(QMainWindow):
        
                self.save_request_button = QPushButton(_('Save'))
                self.save_request_button.clicked.connect(self.save_payment_request)
       -        grid.addWidget(self.save_request_button, 4, 1)
        
                self.new_request_button = QPushButton(_('New'))
                self.new_request_button.clicked.connect(self.new_receive_address)
       -        grid.addWidget(self.new_request_button, 4, 2)
       -        grid.setRowStretch(5, 1)
       -
       -        self.copy_button = QPushButton()
       -        self.copy_button.setIcon(QIcon(":icons/copy.png"))
       -        self.copy_button.setToolTip(_("Copy Address to Clibboard"))
       -        self.copy_button.clicked.connect(lambda: self.app.clipboard().setText(str(self.receive_address_e.text())))
        
                self.qr_button = QPushButton()
                self.qr_button.setIcon(QIcon(":icons/qrcode.png"))
       -        self.qr_button.setToolTip(_("Show Payment Request with QR code"))
       +        self.qr_button.setToolTip(_("Show/Hide QR code window"))
                self.qr_button.clicked.connect(lambda x: self.toggle_qr_window())
        
                buttons = QHBoxLayout()
       -        buttons.addWidget(self.copy_button)
                buttons.addWidget(self.qr_button)
       -        grid.addLayout(buttons, 0, 4)
       +        buttons.addWidget(self.save_request_button)
       +        buttons.addWidget(self.new_request_button)
       +        buttons.addStretch(1)
       +        grid.addLayout(buttons, 4, 1, 1, 3)
       +        grid.setRowStretch(5, 1)
        
                self.receive_requests_label = QLabel(_('My Requests'))
                self.receive_list = MyTreeWidget(self, self.receive_list_menu, [_('Date'), _('Account'), _('Address'), _('Description'), _('Amount'), _('Status')], [])
   DIR diff --git a/gui/qt/qrtextedit.py b/gui/qt/qrtextedit.py
       t@@ -3,42 +3,14 @@ from electrum.plugins import run_hook
        from PyQt4.QtGui import *
        from PyQt4.QtCore import *
        
       -class QRTextEdit(QPlainTextEdit):
       -    """Abstract class for QR-code related TextEdits. Do not use directly."""
       -    def __init__(self, text=None):
       -        super(QRTextEdit, self).__init__(text)
       -        self.setText = self.setPlainText
       -        self.buttons = []
       -
       -    def resizeEvent(self, e):
       -        o = QPlainTextEdit.resizeEvent(self, e)
       -        frameWidth = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
       -        x = self.rect().right() - frameWidth
       -        y = self.rect().bottom() - frameWidth
       -        for button in self.buttons:
       -            sz = button.sizeHint()
       -            x -= sz.width()
       -            button.move(x, y - sz.height())
       -        return o
       -
       -    def add_button(self, icon_name, on_click, tooltip):
       -        button = QToolButton(self)
       -        button.setIcon(QIcon(icon_name))
       -        button.setStyleSheet("QToolButton { border: none; padding: 0px; }")
       -        button.setVisible(True)
       -        button.setToolTip(tooltip)
       -        button.clicked.connect(on_click)
       -        self.buttons.append(button)
       -        return button
       -
       -
       +from util import ButtonsTextEdit
        
        
       -class ShowQRTextEdit(QRTextEdit):
       +class ShowQRTextEdit(ButtonsTextEdit):
            def __init__(self, text=None):
                super(ShowQRTextEdit, self).__init__(text)
                self.setReadOnly(1)
       -        self.add_button(":icons/qrcode.png", self.qr_show, _("Show as QR code"))
       +        self.addButton(":icons/qrcode.png", self.qr_show, _("Show as QR code"))
                run_hook('show_text_edit', self)
        
            def qr_show(self):
       t@@ -55,7 +27,7 @@ class ShowQRTextEdit(QRTextEdit):
                m.exec_(e.globalPos())
        
        
       -class ScanQRTextEdit(QRTextEdit):
       +class ScanQRTextEdit(ButtonsTextEdit):
            def __init__(self, win, text=""):
                super(ScanQRTextEdit,self).__init__(text)
                self.setReadOnly(0)
       t@@ -63,7 +35,7 @@ class ScanQRTextEdit(QRTextEdit):
                assert win, "You must pass a window with access to the config to ScanQRTextEdit constructor."
                if win:
                    assert hasattr(win,"config"), "You must pass a window with access to the config to ScanQRTextEdit constructor."
       -        self.add_button(":icons/qrcode.png", self.qr_input, _("Read QR code"))
       +        self.addButton(":icons/qrcode.png", self.qr_input, _("Read QR code"))
                run_hook('scan_text_edit', self)
        
            def qr_input(self):
   DIR diff --git a/gui/qt/transaction_dialog.py b/gui/qt/transaction_dialog.py
       t@@ -58,7 +58,9 @@ class TxDialog(QDialog):
                self.setLayout(vbox)
        
                vbox.addWidget(QLabel(_("Transaction ID:")))
       -        self.tx_hash_e  = QLineEdit()
       +        self.tx_hash_e  = ButtonsLineEdit()
       +        qr_show = lambda: self.parent.show_qrcode(str(self.tx_hash_e.text()), 'Transaction ID')
       +        self.tx_hash_e.addButton(":icons/qrcode.png", qr_show, _("Show as QR code"))
                self.tx_hash_e.setReadOnly(True)
                vbox.addWidget(self.tx_hash_e)
                self.status_label = QLabel()
   DIR diff --git a/gui/qt/util.py b/gui/qt/util.py
       t@@ -324,6 +324,46 @@ class MyTreeWidget(QTreeWidget):
                    self.parent.update_completions()
        
        
       +class ButtonsWidget(QWidget):
       +
       +    def __init__(self):
       +        super(QWidget, self).__init__()
       +        self.buttons = []
       +
       +    def resizeEvent(self, e):
       +        o = QWidget.resizeEvent(self, e)
       +        frameWidth = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
       +        x = self.rect().right() - frameWidth
       +        y = self.rect().bottom() - frameWidth
       +        for button in self.buttons:
       +            sz = button.sizeHint()
       +            x -= sz.width()
       +            button.move(x, y - sz.height())
       +        return o
       +
       +    def addButton(self, icon_name, on_click, tooltip):
       +        button = QToolButton(self)
       +        button.setIcon(QIcon(icon_name))
       +        button.setStyleSheet("QToolButton { border: none; padding: 0px; }")
       +        button.setVisible(True)
       +        button.setToolTip(tooltip)
       +        button.clicked.connect(on_click)
       +        self.buttons.append(button)
       +        return button
       +
       +class ButtonsLineEdit(QLineEdit, ButtonsWidget):
       +    def __init__(self, text=None):
       +        QLineEdit.__init__(self, text)
       +        self.buttons = []
       +
       +class ButtonsTextEdit(QPlainTextEdit, ButtonsWidget):
       +    def __init__(self, text=None):
       +        QPlainTextEdit.__init__(self, text)
       +        self.setText = self.setPlainText
       +        self.buttons = []
       +
       +
       +
        if __name__ == "__main__":
            app = QApplication([])
            t = WaitingDialog(None, 'testing ...', lambda: [time.sleep(1)], lambda x: QMessageBox.information(None, 'done', "done", _('OK')))
   DIR diff --git a/plugins/audio_modem.py b/plugins/audio_modem.py
       t@@ -92,7 +92,7 @@ class Plugin(BasePlugin):
                def handler():
                    self.receiver = self._recv(parent=parent)
                    self.receiver.start()
       -        parent.add_button(':icons/microphone.png', handler, _("Read from microphone"))
       +        parent.addButton(':icons/microphone.png', handler, _("Read from microphone"))
        
            @hook
            def show_text_edit(self, parent):
       t@@ -100,7 +100,7 @@ class Plugin(BasePlugin):
                    blob = str(parent.toPlainText())
                    self.sender = self._send(parent=parent, blob=blob)
                    self.sender.start()
       -        parent.add_button(':icons/speaker.png', handler, _("Send to speaker"))
       +        parent.addButton(':icons/speaker.png', handler, _("Send to speaker"))
        
            def _audio_interface(self):
                interface = amodem.audio.Interface(config=self.modem_config)