From c4979864cc2f0afc6e4f16582d589ab36cd9e0ba Mon Sep 17 00:00:00 2001 From: Johann Bauer Date: Mon, 3 Jul 2017 13:46:53 +0200 Subject: [PATCH] Add tab icons --- gui/qt/main_window.py | 59 ++++++++++++++++++++++------------------ icons.qrc | 7 +++++ icons/tab_addresses.png | Bin 0 -> 886 bytes icons/tab_coins.png | Bin 0 -> 1592 bytes icons/tab_console.png | Bin 0 -> 824 bytes icons/tab_contacts.png | Bin 0 -> 1446 bytes icons/tab_history.png | Bin 0 -> 2182 bytes icons/tab_receive.png | Bin 0 -> 1873 bytes icons/tab_send.png | Bin 0 -> 1550 bytes 9 files changed, 39 insertions(+), 27 deletions(-) create mode 100644 icons/tab_addresses.png create mode 100644 icons/tab_coins.png create mode 100644 icons/tab_console.png create mode 100644 icons/tab_contacts.png create mode 100644 icons/tab_history.png create mode 100644 icons/tab_receive.png create mode 100644 icons/tab_send.png diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py index 29f2e1e6..3535a8d7 100644 --- a/gui/qt/main_window.py +++ b/gui/qt/main_window.py @@ -128,17 +128,23 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): self.utxo_tab = self.create_utxo_tab() self.console_tab = self.create_console_tab() self.contacts_tab = self.create_contacts_tab() - tabs.addTab(self.create_history_tab(), _('History') ) - tabs.addTab(self.send_tab, _('Send') ) - tabs.addTab(self.receive_tab, _('Receive') ) - if self.config.get('show_addresses_tab', False): - tabs.addTab(self.addresses_tab, _('Addresses')) - if self.config.get('show_utxo_tab', False): - tabs.addTab(self.utxo_tab, _('Coins')) - if self.config.get('show_contacts_tab', False): - tabs.addTab(self.contacts_tab, _('Contacts') ) - if self.config.get('show_console_tab', False): - tabs.addTab(self.console_tab, _('Console') ) + tabs.addTab(self.create_history_tab(), QIcon(":icons/tab_history.png"), _('History')) + tabs.addTab(self.send_tab, QIcon(":icons/tab_send.png"), _('Send')) + tabs.addTab(self.receive_tab, QIcon(":icons/tab_receive.png"), _('Receive')) + + def add_optional_tab(tabs, tab, icon, description, name): + tab.tab_icon = icon + tab.tab_description = description + tab.tab_pos = len(tabs) + tab.tab_name = name + if self.config.get('show_{}_tab'.format(name), False): + tabs.addTab(tab, icon, description) + + add_optional_tab(tabs, self.addresses_tab, QIcon(":icons/tab_addresses.png"), _("Addresses"), "addresses") + add_optional_tab(tabs, self.utxo_tab, QIcon(":icons/tab_coins.png"), _("Coins"), "utxo") + add_optional_tab(tabs, self.contacts_tab, QIcon(":icons/tab_contacts.png"), _("Contacts"), "contacts") + add_optional_tab(tabs, self.console_tab, QIcon(":icons/tab_console.png"), _("Console"), "console") + tabs.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.setCentralWidget(tabs) @@ -207,9 +213,9 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): self.history_list.update() def toggle_tab(self, tab): - show = not self.config.get('show_{}_tab'.format(tab.name), False) - self.config.set_key('show_{}_tab'.format(tab.name), show) - item_text = (_("Hide") if show else _("Show")) + " " + tab.description + show = not self.config.get('show_{}_tab'.format(tab.tab_name), False) + self.config.set_key('show_{}_tab'.format(tab.tab_name), show) + item_text = (_("Hide") if show else _("Show")) + " " + tab.tab_description tab.menu_action.setText(item_text) if show: # Find out where to place the tab @@ -221,7 +227,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): break except AttributeError: pass - self.tabs.insertTab(index, tab, tab.description) + self.tabs.insertTab(index, tab, tab.tab_icon, tab.tab_description) else: i = self.tabs.indexOf(tab) self.tabs.removeTab(i) @@ -459,19 +465,16 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): wallet_menu.addSeparator() wallet_menu.addAction(_("Find"), self.toggle_search).setShortcut(QKeySequence("Ctrl+F")) - def add_toggle_action(view_menu, target_tab, tab_description, tab_name, tab_pos): - is_shown = self.config.get('show_{}_tab'.format(tab_name), False) - item_name = (_("Hide") if is_shown else _("Show")) + " " + tab_description - target_tab.name = tab_name - target_tab.description = tab_description - target_tab.tab_pos = tab_pos - target_tab.menu_action = view_menu.addAction(item_name, lambda: self.toggle_tab(target_tab)) + def add_toggle_action(view_menu, tab): + is_shown = self.config.get('show_{}_tab'.format(tab.tab_name), False) + item_name = (_("Hide") if is_shown else _("Show")) + " " + tab.tab_description + tab.menu_action = view_menu.addAction(item_name, lambda: self.toggle_tab(tab)) view_menu = menubar.addMenu(_("&View")) - add_toggle_action(view_menu, self.addresses_tab, "Addresses", "addresses", 1) - add_toggle_action(view_menu, self.utxo_tab, "Coins", "utxo", 2) - add_toggle_action(view_menu, self.contacts_tab, "Contacts", "contacts", 3) - add_toggle_action(view_menu, self.console_tab, "Console", "console", 4) + add_toggle_action(view_menu, self.addresses_tab) + add_toggle_action(view_menu, self.utxo_tab) + add_toggle_action(view_menu, self.contacts_tab) + add_toggle_action(view_menu, self.console_tab) tools_menu = menubar.addMenu(_("&Tools")) @@ -515,7 +518,9 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): def show_about(self): QMessageBox.about(self, "Electrum", - _("Version")+" %s" % (self.wallet.electrum_version) + "\n\n" + _("Electrum's focus is speed, with low resource usage and simplifying Bitcoin. You do not need to perform regular backups, because your wallet can be recovered from a secret phrase that you can memorize or write on paper. Startup times are instant because it operates in conjunction with high-performance servers that handle the most complicated parts of the Bitcoin system.")) + _("Version")+" %s" % (self.wallet.electrum_version) + "\n\n" + + _("Electrum's focus is speed, with low resource usage and simplifying Bitcoin. You do not need to perform regular backups, because your wallet can be recovered from a secret phrase that you can memorize or write on paper. Startup times are instant because it operates in conjunction with high-performance servers that handle the most complicated parts of the Bitcoin system." + "\n\n" + + _("Uses icons from the Icons8 icon pack (icons8.com)."))) def show_report_bug(self): msg = ' '.join([ diff --git a/icons.qrc b/icons.qrc index 930ce252..b6349b44 100644 --- a/icons.qrc +++ b/icons.qrc @@ -31,6 +31,13 @@ icons/status_waiting.png icons/status_lagging.png icons/seal.png + icons/tab_addresses.png + icons/tab_coins.png + icons/tab_console.png + icons/tab_contacts.png + icons/tab_history.png + icons/tab_receive.png + icons/tab_send.png icons/tor_logo.png icons/speaker.png icons/trezor_unpaired.png diff --git a/icons/tab_addresses.png b/icons/tab_addresses.png new file mode 100644 index 0000000000000000000000000000000000000000..449b23ba1f71249391b89b6aa2ae2a96103100fd GIT binary patch literal 886 zcmV-+1Bv{JP)MKM0+r)m_~|(q8AU+=F(oov|6yI;-MGo!GjmQir`fbo&;@=_9o)rrT7yO z6e_izYK0~RK?oHI5=>h)5gW7JBqKB1gw$;0RmPb$J9EhrUgpjF=KJ1zI~f8lAH?PH zg9bn|z~u;N3Amg9ItgkC+?X%TN|ZsF5YL?p1O8ifK9Aj9KS=;$l+qztYa$c#29@Qk z!B4X4A!jf4`xn`FL-&97kV@qt3tskGQ~|)^{9+RS;b-rlM11Ru1fWND@XVh|0Dw|* z{b}0x0fbyu5xjB$0O<0QblIzF_ZTqQP__F`000tcQ)T>Wa{!B61E3k8CE&aq zaPL(HKCKl|3%fLSh}&gWityldhCiP=8iiWQ(@R#+$4Y5}rZ;gPAQqxlq#xs{$eqL{KXiWMm6~>hl0W zv7x3>`qvm+p-zHMOoD%N9?*(!ETL}qJOIUAK}N!opvX>8P;97aGysZjh}3sSCqXAB zL6mp|8EFP+2H;M91QD)j8r=!%Dxl_~q%MOs1k_i71ykC+To&}(ta;U}z>yjNYsG4v z4HW2ON@4O}B|N)%rQa53_kul@auR?9w=Rels@@&3+3{T;+Zq5CoOL<6JV}7W0BDE; zc|^V5E3$)UYmv?XnY)Yer2)X8)Xp}V0qwlInAkJ}FetUNjq4fk3xH&TfJt74s{jB1 M07*qoM6N<$f-)G1>;M1& literal 0 HcmV?d00001 diff --git a/icons/tab_coins.png b/icons/tab_coins.png new file mode 100644 index 0000000000000000000000000000000000000000..a6c8265da495caadfb6713bdd488a507b2cc7235 GIT binary patch literal 1592 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 A6#xJL literal 0 HcmV?d00001 diff --git a/icons/tab_history.png b/icons/tab_history.png new file mode 100644 index 0000000000000000000000000000000000000000..ecdc46819b117f6ba08f8609ad70788cf077f008 GIT binary patch literal 2182 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 LNkvXXu0mjfCPAG{ literal 0 HcmV?d00001 diff --git a/icons/tab_send.png b/icons/tab_send.png new file mode 100644 index 0000000000000000000000000000000000000000..7ef90a422c949bae5084359f52435efe48d18cee GIT binary patch literal 1550 zcmV+p2J!icP)w}38MH3%PnkdEu z6CZr5rm4|rVvVuoVoaojHedq1KnulEU`vH^-^+|SBTJWMcjnCOnRXX;UU--@=X}5a z`G4o~Ed=xYA@iIcQ30Y3nCA*aQ(&GOAi4<7*%bJ!(Y0L=JO@t{TPoySKIa7Z;-YJt z08b@AwhO?=?`<-loEHN4f_s6D24ugv(R^i23lIo=3i#?fo6PH!7Ws%x0e^5o5OH^K z9BE0h60<1cqj!tVm2*yjKr=o%?#AV|UOc&BDah26ve=)B6EO}5X7#>-G1N46VgK&6 zh%p(w6V7D+h!8*~$I;p`fZC>8I9!^CSc_@e?X30>YXRiIMG-jP(23@&4je7ZL*hcq zj8tc}e^?422TlW?m~`Xp?^n^?JB&lm2s~PKjOrJ zr|np~GI`b_ug3miApi?F4fOi0fAPclYjC**>?m4+%?0TJcQ`fnf20Dig3}=XxbzR| zo4O_74eQcSvL!Rv_O8nQk3;}9;7*rEn)UYXK?!(edIDZ4$p-Om_I@&`wf{pEKn*wz zY-o5=%J+Li6B1@>Vk{2tU5^DZ#-N8gwf27~0;mP2L3Q39l2-ajr$>T~k6nOcWqHzH znMbw#brnDhI1T8pmOHr6&4*Xo#P61{-d23Qpx;={t zJ{0?F5`YIdEnfWk=M7xG(mxB5?)5M4$%eteygX^PzbXNEfYSj-$6b=;d-_La!6zqJ zaI`F6cCYvUNXy~Jw+}^`d4bbG`vyj(#cpKWH48q@8YAuXwm37h^+UBklLM+6oUaNH zs|kVpMywEaYsXz_oAU^M2@gn>9D2%2ONvtkAIj?Q9Z1muv|&}_9L;X{HlyaYP$|;^;abTZT!tm(K6(4Rs%T98mYH<(baQ5=qJx_%S66C zjkU`e?X(_#RILI2k+G(PZ}B1+-R6P}>?m5U37&`jnbv?n(J7^bZ}B1+UH0l^?AvA6 z3eUy$eF$fN|FM{M0i^(GN__o&OGDql=>NY<1$nGyBaZDWKtjCiyG|5rw8e1bd!Zjl%53EO3f#LOuKICIIa?wW4;ImhgNBDb7#F?&1}SV5|*z z+MjC*NG>R^`H>K^_W=xX6z$%axO0WkWMaSG%4xyX{@evft*Cn&5I^@4kT_d?oZY@P z*-CI=ZOko;37U_6v`^ml=Pp2Ed40Z#2+dvr%vttpF*ciB6j61uB>n@ncL{$h@U}m9 z0i-mjsJ%ykM3IngTS4J6h^W8mh~I@uA{G5u?-Bv>fV=&55g@gq<}5(=8xxW)SXZyg z8h2x3?^`y9FObq*BG4kBhy8UCAi2EmbpsKutl+-w z