correct right-click menu during multiple-select
authorkazcw <keziahw@gmail.com>
Fri, 15 Nov 2013 02:10:52 +0000 (21:10 -0500)
committerThomasV <thomasv@gitorious>
Sat, 16 Nov 2013 09:52:44 +0000 (10:52 +0100)
Correct right-click menu during multiple-select in Receive

gui/qt/main_window.py

index 2e01f92..09da1d6 100644 (file)
@@ -1010,20 +1010,22 @@ class ElectrumWindow(QMainWindow):
             entry.setPalette(palette)
 
 
-    def toggle_freeze(self,addr):
-        if not addr: return
-        if addr in self.wallet.frozen_addresses:
-            self.wallet.unfreeze(addr)
-        else:
-            self.wallet.freeze(addr)
+    def set_addrs_frozen(self,addrs,freeze):
+        for addr in addrs:
+            if not addr: continue
+            if addr in self.wallet.frozen_addresses and not freeze:
+                self.wallet.unfreeze(addr)
+            elif addr not in self.wallet.frozen_addresses and freeze:
+                self.wallet.freeze(addr)
         self.update_receive_tab()
 
-    def toggle_priority(self,addr):
-        if not addr: return
-        if addr in self.wallet.prioritized_addresses:
-            self.wallet.unprioritize(addr)
-        else:
-            self.wallet.prioritize(addr)
+    def set_addrs_prioritized(self,addrs,prioritize):
+        for addr in addrs:
+            if not addr: continue
+            if addr in self.wallet.prioritized_addresses and not prioritize:
+                self.wallet.unprioritize(addr)
+            elif addr not in self.wallet.prioritized_addresses and prioritize:
+                self.wallet.prioritize(addr)
         self.update_receive_tab()
 
 
@@ -1136,32 +1138,43 @@ class ElectrumWindow(QMainWindow):
         # if it is not called the menu pops up several times
         #self.receive_list.selectedIndexes() 
 
-        item = self.receive_list.itemAt(position)
-        if not item: return
-
-        addr = unicode(item.text(0))
-        if not is_valid(addr): 
-            k = str(item.data(0,32).toString())
-            if k:
-                self.create_account_menu(position, k, item)
-            else:
-                item.setExpanded(not item.isExpanded())
-            return 
+        selected = self.receive_list.selectedItems()
+        multi_select = len(selected) > 1
+        addrs = [unicode(item.text(0)) for item in selected]
+        if not multi_select:
+            item = self.receive_list.itemAt(position)
+            if not item: return
+
+            addr = addrs[0]
+            if not is_valid(addr):
+                k = str(item.data(0,32).toString())
+                if k:
+                    self.create_account_menu(position, k, item)
+                else:
+                    item.setExpanded(not item.isExpanded())
+                return
 
         menu = QMenu()
-        menu.addAction(_("Copy to clipboard"), lambda: self.app.clipboard().setText(addr))
-        menu.addAction(_("QR code"), lambda: self.show_qrcode("bitcoin:" + addr, _("Address")) )
-        menu.addAction(_("Edit label"), lambda: self.edit_label(True))
-        if self.wallet.seed:
-            menu.addAction(_("Private key"), lambda: self.show_private_key(addr))
-            menu.addAction(_("Sign message"), lambda: self.sign_message(addr))
-        if addr in self.wallet.imported_keys:
-            menu.addAction(_("Remove from wallet"), lambda: self.delete_imported_key(addr))
-
-        t = _("Unfreeze") if addr in self.wallet.frozen_addresses else _("Freeze")
-        menu.addAction(t, lambda: self.toggle_freeze(addr))
-        t = _("Unprioritize") if addr in self.wallet.prioritized_addresses else _("Prioritize")
-        menu.addAction(t, lambda: self.toggle_priority(addr))
+        if not multi_select:
+            menu.addAction(_("Copy to clipboard"), lambda: self.app.clipboard().setText(addr))
+            menu.addAction(_("QR code"), lambda: self.show_qrcode("bitcoin:" + addr, _("Address")) )
+            menu.addAction(_("Edit label"), lambda: self.edit_label(True))
+            if self.wallet.seed:
+                menu.addAction(_("Private key"), lambda: self.show_private_key(addr))
+                menu.addAction(_("Sign message"), lambda: self.sign_message(addr))
+            if addr in self.wallet.imported_keys:
+                menu.addAction(_("Remove from wallet"), lambda: self.delete_imported_key(addr))
+
+        if any(addr not in self.wallet.frozen_addresses for addr in addrs):
+            menu.addAction(_("Freeze"), lambda: self.set_addrs_frozen(addrs, True))
+        if any(addr in self.wallet.frozen_addresses for addr in addrs):
+            menu.addAction(_("Unfreeze"), lambda: self.set_addrs_frozen(addrs, False))
+        if any(addr not in self.wallet.prioritized_addresses for addr in addrs):
+            menu.addAction(_("Prioritize"),
+                    lambda: self.set_addrs_prioritized(addrs, True))
+        if any(addr in self.wallet.prioritized_addresses for addr in addrs):
+            menu.addAction(_("Unprioritize"),
+                    lambda: self.set_addrs_prioritized(addrs, False))
 
         total = 0
         for item in self.receive_list.selectedItems():