diff --git a/res/ui/informations_tab.ui b/res/ui/informations_tab.ui index da2198252f2ae26d0adff941fa928e51534b1119..9d691ca06e970a6235324333267d8f39cc7f1b95 100644 --- a/res/ui/informations_tab.ui +++ b/res/ui/informations_tab.ui @@ -38,8 +38,8 @@ QGroupBox::title { <rect> <x>0</x> <y>0</y> - <width>518</width> - <height>717</height> + <width>522</width> + <height>721</height> </rect> </property> <layout class="QVBoxLayout" name="verticalLayout_5"> @@ -58,7 +58,7 @@ QGroupBox::title { <item> <widget class="QLabel" name="label_general"> <property name="text"> - <string>label_general</string> + <string/> </property> <property name="scaledContents"> <bool>false</bool> @@ -80,7 +80,7 @@ QGroupBox::title { <item> <widget class="QLabel" name="label_rules"> <property name="text"> - <string>label_rules</string> + <string/> </property> <property name="alignment"> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> @@ -99,7 +99,7 @@ QGroupBox::title { <item> <widget class="QLabel" name="label_money"> <property name="text"> - <string>label_money</string> + <string/> </property> <property name="alignment"> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> @@ -118,7 +118,7 @@ QGroupBox::title { <item> <widget class="QLabel" name="label_wot"> <property name="text"> - <string>label_wot</string> + <string/> </property> <property name="alignment"> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> diff --git a/src/cutecoin/gui/identities_tab.py b/src/cutecoin/gui/identities_tab.py index a32b669279f40919a97eaf357c7569a7dc3ac720..587b71286f578b6133d8fe2b46155ca724d0bb70 100644 --- a/src/cutecoin/gui/identities_tab.py +++ b/src/cutecoin/gui/identities_tab.py @@ -56,6 +56,8 @@ class IdentitiesTabWidget(QWidget, Ui_IdentitiesTab): self.table_identities.customContextMenuRequested.connect(self.identity_context_menu) self.table_identities.sortByColumn(0, Qt.AscendingOrder) self.table_identities.resizeColumnsToContents() + identities_model.modelAboutToBeReset.connect(lambda: self.table_identities.setEnabled(False)) + identities_model.modelReset.connect(lambda: self.table_identities.setEnabled(True)) members_action = QAction(self.tr("Members"), self) members_action.triggered.connect(self._async_search_members) diff --git a/src/cutecoin/gui/informations_tab.py b/src/cutecoin/gui/informations_tab.py index c9ef5e0bccc6d7f615dd9acd0d7a43eb0855154a..3d23be2fe786c37389f1f3cf5ca51cafbf80f7c1 100644 --- a/src/cutecoin/gui/informations_tab.py +++ b/src/cutecoin/gui/informations_tab.py @@ -10,9 +10,9 @@ import math from PyQt5.QtCore import QLocale, QDateTime, QEvent from PyQt5.QtWidgets import QWidget from ..gen_resources.informations_tab_uic import Ui_InformationsTabWidget -from ..tools.decorators import asyncify +from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task from ..tools.exceptions import NoPeerAvailable - +from .widgets import Busy class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): """ @@ -28,16 +28,19 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): :return: """ super().__init__() + self.setupUi(self) self.app = app self.account = None self.community = None - - self.setupUi(self) + self.busy = Busy(self.scrollArea) + self.busy.hide() def change_account(self, account): + cancel_once_task(self, self.refresh_labels) self.account = account def change_community(self, community): + cancel_once_task(self, self.refresh_labels) self.community = community self.refresh() @@ -45,9 +48,11 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): if self.account and self.community: self.refresh_labels() + @once_at_a_time @asyncify @asyncio.coroutine def refresh_labels(self): + self.busy.show() # Â try to request money parameters try: params = yield from self.community.parameters() @@ -230,6 +235,11 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): self.tr('Maximum distance between each WoT member and a newcomer'), ) ) + self.busy.hide() + + def resizeEvent(self, event): + self.busy.resize(event.size()) + super().resizeEvent(event) def changeEvent(self, event): """ diff --git a/src/cutecoin/gui/network_tab.py b/src/cutecoin/gui/network_tab.py index 650653798813c603f5aa3e60ad469ba0301eb887..245361b78df2ccb883768a4c628d64188f574466 100644 --- a/src/cutecoin/gui/network_tab.py +++ b/src/cutecoin/gui/network_tab.py @@ -39,6 +39,8 @@ class NetworkTabWidget(QWidget, Ui_NetworkTabWidget): self.table_network.setModel(proxy) self.table_network.sortByColumn(0, Qt.DescendingOrder) self.table_network.resizeColumnsToContents() + model.modelAboutToBeReset.connect(lambda: self.table_network.setEnabled(False)) + model.modelReset.connect(lambda: self.table_network.setEnabled(True)) def change_community(self, community): if self.community: diff --git a/src/cutecoin/gui/transactions_tab.py b/src/cutecoin/gui/transactions_tab.py index 0dcc94a808c389d96dba2ff701d8d0ab82085ccd..14b655ef40082e33fcd7684de0687cee352424c9 100644 --- a/src/cutecoin/gui/transactions_tab.py +++ b/src/cutecoin/gui/transactions_tab.py @@ -58,6 +58,10 @@ class TransactionsTabWidget(QWidget, Ui_transactionsTabWidget): self.table_history.setSortingEnabled(True) self.table_history.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive) self.table_history.resizeColumnsToContents() + + model.modelAboutToBeReset.connect(lambda: self.table_history.setEnabled(False)) + model.modelReset.connect(lambda: self.table_history.setEnabled(True)) + self.progressbar.hide() self.refresh() diff --git a/src/cutecoin/gui/widgets/__init__.py b/src/cutecoin/gui/widgets/__init__.py index 39ab2a0b56350baad834cb7fb0cfecb8223e1fcd..fbaafe7931df3a52784e976da05ea0f1153b7f59 100644 --- a/src/cutecoin/gui/widgets/__init__.py +++ b/src/cutecoin/gui/widgets/__init__.py @@ -1 +1,2 @@ -__author__ = 'inso' +from .busy import Busy +from .dialogs import QAsyncMessageBox \ No newline at end of file diff --git a/src/cutecoin/models/identities.py b/src/cutecoin/models/identities.py index 4ffad7ba10fb571954cb71b2760c79966e97c2b4..8e238d87ccbd0bf45db6923e49c03af18080d15a 100644 --- a/src/cutecoin/models/identities.py +++ b/src/cutecoin/models/identities.py @@ -104,12 +104,21 @@ class IdentitiesTableModel(QAbstractTableModel): @property def pubkeys(self): """ - Get pubkeys of displayed identities + Ge + def resizeEvent(self, event): + self.busy.resize(event.size()) + super().resizeEvent(event)t pubkeys of displayed identities """ return [i[1] for i in self.identities_data] @asyncio.coroutine def identity_data(self, identity): + """ + Return the identity in the form a tuple to display + :param cutecoin.core.registry.Identity identity: The identity to get data from + :return: The identity data in the form of a tuple + :rtype: tuple + """ try: join_date = yield from identity.get_join_date(self.community) expiration_date = yield from identity.get_expiration_date(self.community) @@ -117,7 +126,7 @@ class IdentitiesTableModel(QAbstractTableModel): join_date = None expiration_date = None - return (identity.uid, identity.pubkey, join_date, expiration_date) + return identity.uid, identity.pubkey, join_date, expiration_date @asyncio.coroutine def refresh_identities(self, identities): diff --git a/src/cutecoin/models/network.py b/src/cutecoin/models/network.py index 1b8a6888544f257a6df77a0fc095862b41a19298..b6798a105753d15e22571ed6dedb3460174d0bfb 100644 --- a/src/cutecoin/models/network.py +++ b/src/cutecoin/models/network.py @@ -11,7 +11,7 @@ from PyQt5.QtCore import QAbstractTableModel, Qt, QVariant, QSortFilterProxyMode from PyQt5.QtGui import QColor, QFont from ..tools.exceptions import NoPeerAvailable -from ..tools.decorators import asyncify, once_at_a_time +from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task from cutecoin.core.net.node import Node @@ -139,6 +139,7 @@ class NetworkTableModel(QAbstractTableModel): self.nodes_data = [] def change_community(self, community): + cancel_once_task(self, self.refresh_nodes) self.community = community self.refresh_nodes() @@ -173,13 +174,12 @@ class NetworkTableModel(QAbstractTableModel): return (address, port, number, block_hash, node.uid, is_member, node.pubkey, node.software, node.version, is_root, node.state) + @once_at_a_time @asyncify @asyncio.coroutine def refresh_nodes(self): self.beginResetModel() self.nodes_data = [] - self.endResetModel() - self.beginResetModel() nodes_data = [] if self.community: for node in self.community.network.nodes: