URI: 
       tfix issue #421 - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit c89c449dd706c52b22637450e0aec9160fba4da8
   DIR parent 4c729f0ff046c67823482c1a37e1c7c95095c353
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Fri,  3 Apr 2015 15:32:29 +0200
       
       fix issue #421
       
       Diffstat:
         M gui/qt/main_window.py               |      60 +++++++++++--------------------
         M gui/qt/util.py                      |       4 ++++
       
       2 files changed, 25 insertions(+), 39 deletions(-)
       ---
   DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
       t@@ -634,7 +634,6 @@ class ElectrumWindow(QMainWindow):
                    l.editItem( item, column )
                    item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsUserCheckable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled)
        
       -
            def address_label_changed(self, item, column, l, column_addr, column_label):
                if column == column_label:
                    addr = unicode( item.text(column_addr) )
       t@@ -642,30 +641,26 @@ class ElectrumWindow(QMainWindow):
                    is_editable = item.data(0, 32).toBool()
                    if not is_editable:
                        return
       -
                    changed = self.wallet.set_label(addr, text)
                    if changed:
                        self.update_history_tab()
                        self.update_completions()
       -
                    self.current_item_changed(item)
       -
                run_hook('item_changed', item, column)
        
       -
            def current_item_changed(self, a):
                run_hook('current_item_changed', a)
        
       -
            def update_history_tab(self):
       -
       -        self.history_list.clear()
       +        l = self.history_list
       +        item = l.currentItem()
       +        current_tx = item.data(0, Qt.UserRole).toString() if item else None
       +        l.clear()
                for item in self.wallet.get_history(self.current_account):
                    tx_hash, conf, value, timestamp, balance = item
                    time_str = _("unknown")
                    if conf is None and timestamp is None:
                        continue  # skip history in offline mode
       -
                    if conf > 0:
                        time_str = format_time(timestamp)
                    if conf == -1:
       t@@ -678,14 +673,11 @@ class ElectrumWindow(QMainWindow):
                        icon = QIcon(":icons/clock%d.png"%conf)
                    else:
                        icon = QIcon(":icons/confirmed.png")
       -
                    v_str = self.format_amount(value, True, whitespaces=True)
                    balance_str = self.format_amount(balance, whitespaces=True)
       -
                    label, is_default_label = self.wallet.get_label(tx_hash)
                    if is_default_label:
                        label = ''
       -
                    item = QTreeWidgetItem( [ '', time_str, label, v_str, balance_str] )
                    item.setFont(2, QFont(MONOSPACE_FONT))
                    item.setFont(3, QFont(MONOSPACE_FONT))
       t@@ -694,15 +686,13 @@ class ElectrumWindow(QMainWindow):
                        item.setForeground(3, QBrush(QColor("#BC1E1E")))
                    if tx_hash:
                        item.setData(0, Qt.UserRole, tx_hash)
       -                #item.setToolTip(0, "%d %s\nTxId:%s" % (conf, _('Confirmations'), tx_hash) )
                    if is_default_label:
                        item.setForeground(2, QBrush(QColor('lightgrey')))
       -
                    item.setIcon(0, icon)
       -            self.history_list.insertTopLevelItem(0,item)
       -
       +            l.insertTopLevelItem(0, item)
       +            if current_tx == tx_hash:
       +                l.setCurrentItem(item)
        
       -        self.history_list.setCurrentItem(self.history_list.topLevelItem(0))
                run_hook('history_tab_update')
        
        
       t@@ -1627,31 +1617,24 @@ class ElectrumWindow(QMainWindow):
        
            def update_address_tab(self):
                l = self.address_list
       -        # extend the syntax for consistency
       -        l.addChild = l.addTopLevelItem
       -        l.insertChild = l.insertTopLevelItem
       -
       +        item = l.currentItem()
       +        current_address = item.data(0, Qt.UserRole+1).toString() if item else None
                l.clear()
       -
                accounts = self.wallet.get_accounts()
                if self.current_account is None:
                    account_items = sorted(accounts.items())
                else:
                    account_items = [(self.current_account, accounts.get(self.current_account))]
       -
       -
                for k, account in account_items:
       -
                    if len(accounts) > 1:
                        name = self.wallet.get_account_name(k)
       -                c,u = self.wallet.get_account_balance(k)
       +                c, u = self.wallet.get_account_balance(k)
                        account_item = QTreeWidgetItem( [ name, '', self.format_amount(c+u), ''] )
                        l.addTopLevelItem(account_item)
                        account_item.setExpanded(self.accounts_expanded.get(k, True))
       -                account_item.setData(0, 32, k)
       +                account_item.setData(0, Qt.UserRole+1, k)
                    else:
                        account_item = l
       -
                    sequences = [0,1] if account.has_change() else [0]
                    for is_change in sequences:
                        if len(sequences) > 1:
       t@@ -1662,10 +1645,8 @@ class ElectrumWindow(QMainWindow):
                                seq_item.setExpanded(True)
                        else:
                            seq_item = account_item
       -
                        used_item = QTreeWidgetItem( [ _("Used"), '', '', '', ''] )
                        used_flag = False
       -
                        addr_list = account.get_addresses(is_change)
                        for address in addr_list:
                            num, is_used = self.wallet.is_used(address)
       t@@ -1674,7 +1655,8 @@ class ElectrumWindow(QMainWindow):
                            balance = self.format_amount(c + u)
                            item = QTreeWidgetItem( [ address, label, balance, "%d"%num] )
                            item.setFont(0, QFont(MONOSPACE_FONT))
       -                    item.setData(0, 32, True) # label can be edited
       +                    item.setData(0, Qt.UserRole, True) # label can be edited
       +                    item.setData(0, Qt.UserRole+1, address)
                            if address in self.wallet.frozen_addresses:
                                item.setBackgroundColor(0, QColor('lightblue'))
                            if self.wallet.is_beyond_limit(address, account, is_change):
       t@@ -1686,28 +1668,28 @@ class ElectrumWindow(QMainWindow):
                                used_item.addChild(item)
                            else:
                                seq_item.addChild(item)
       -
       -        # we use column 1 because column 0 may be hidden
       -        l.setCurrentItem(l.topLevelItem(0),1)
       +                    if address == current_address:
       +                        l.setCurrentItem(item)
        
        
            def update_contacts_tab(self):
                l = self.contacts_list
       +        item = l.currentItem()
       +        current_address = item.data(0, Qt.UserRole+1).toString() if item else None
                l.clear()
       -
                for address in self.wallet.addressbook:
                    label = self.wallet.labels.get(address,'')
                    n = self.wallet.get_num_tx(address)
                    item = QTreeWidgetItem( [ address, label, "%d"%n] )
                    item.setFont(0, QFont(MONOSPACE_FONT))
                    # 32 = label can be edited (bool)
       -            item.setData(0,32, True)
       +            item.setData(0, Qt.UserRole, True)
                    # 33 = payto string
       -            item.setData(0,33, address)
       +            item.setData(0, Qt.UserRole+1, address)
                    l.addTopLevelItem(item)
       -
       +            if address == current_address:
       +                l.setCurrentItem(item)
                run_hook('update_contacts_tab', l)
       -        l.setCurrentItem(l.topLevelItem(0))
        
        
            def create_console_tab(self):
   DIR diff --git a/gui/qt/util.py b/gui/qt/util.py
       t@@ -252,10 +252,14 @@ def filename_field(parent, config, defaultname, select_msg):
        
        
        class MyTreeWidget(QTreeWidget):
       +
            def __init__(self, parent):
                QTreeWidget.__init__(self, parent)
                self.setContextMenuPolicy(Qt.CustomContextMenu)
                self.itemActivated.connect(self.on_activated)
       +        # extend the syntax for consistency
       +        self.addChild = self.addTopLevelItem
       +        self.insertChild = self.insertTopLevelItem
        
            def on_activated(self, item):
                if not item: return