diff --git a/res/ui/homescreen.ui b/res/ui/homescreen.ui index a47d8761575f7d2bcb39a0c55b67347eb2072e14..8f981fb9cff47bc887fb1fc8d994b2499337e22a 100644 --- a/res/ui/homescreen.ui +++ b/res/ui/homescreen.ui @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> - <class>Form</class> - <widget class="QWidget" name="Form"> + <class>HomescreenWidget</class> + <widget class="QWidget" name="HomescreenWidget"> <property name="geometry"> <rect> <x>0</x> @@ -10,12 +10,24 @@ <height>472</height> </rect> </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="windowTitle"> <string>Form</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QFrame" name="frame_connected"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="frameShape"> <enum>QFrame::StyledPanel</enum> </property> @@ -96,6 +108,12 @@ </item> <item> <widget class="QFrame" name="frame_disconnected"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="frameShape"> <enum>QFrame::StyledPanel</enum> </property> @@ -194,27 +212,6 @@ </layout> </widget> </item> - <item> - <widget class="QFrame" name="frame_communities"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::StyledPanel</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <layout class="QGridLayout" name="gridLayout"> - <property name="sizeConstraint"> - <enum>QLayout::SetFixedSize</enum> - </property> - </layout> - </widget> - </item> </layout> </widget> <resources> diff --git a/src/cutecoin/gui/community_tile.py b/src/cutecoin/gui/community_tile.py new file mode 100644 index 0000000000000000000000000000000000000000..053c731c6ccb44ab8c1a3c1779e623a1f2809824 --- /dev/null +++ b/src/cutecoin/gui/community_tile.py @@ -0,0 +1,63 @@ +""" +@author: inso +""" + +from PyQt5.QtWidgets import QFrame, QLabel, QVBoxLayout, QLayout, QPushButton +from PyQt5.QtGui import QPalette +from PyQt5.QtCore import QEvent, QSize, pyqtSignal + + +class CommunityTile(QFrame): + clicked = pyqtSignal() + + def __init__(self, parent, app, community): + super().__init__(parent) + self.app = app + self.community = community + self.text_label = QLabel() + self.setLayout(QVBoxLayout()) + self.layout().setSizeConstraint(QLayout.SetFixedSize) + self.layout().addWidget(self.text_label) + self.setFrameShape(QFrame.StyledPanel) + self.setFrameShadow(QFrame.Raised) + self.refresh() + + def sizeHint(self): + return QSize(250, 250) + + def refresh(self): + current_block = self.community.get_block(self.community.network.latest_block_number) + status = self.tr("Member") if self.app.current_account.pubkey in self.community.members_pubkeys() \ + else self.tr("Non-Member") + description = """<html> + <body> + <p> + <span style=" font-size:16pt; font-weight:600;">{currency}</span> + </p> + <p>{nb_members} {members_label}</p> + <p><span style=" font-weight:600;">{monetary_mass_label}</span> : {monetary_mass}</p> + <p><span style=" font-weight:600;">{status_label}</span> : {status}</p> + <p><span style=" font-weight:600;">{balance_label}</span> : {balance}</p> + </body> + </html>""".format(currency=self.community.currency, + nb_members=len(self.community.members_pubkeys()), + members_label=self.tr("members"), + monetary_mass_label=self.tr("Monetary mass"), + monetary_mass=current_block['monetaryMass'], + status_label=self.tr("Status"), + status=status, + balance_label=self.tr("Balance"), + balance=self.app.current_account.amount(self.community)) + self.text_label.setText(description) + + def mousePressEvent(self, event): + self.clicked.emit() + return super().mousePressEvent(event) + + def enterEvent(self, event): + self.setStyleSheet("color: rgb(0, 115, 173);") + return super().enterEvent(event) + + def leaveEvent(self, event): + self.setStyleSheet("") + return super().leaveEvent(event) \ No newline at end of file diff --git a/src/cutecoin/gui/homescreen.py b/src/cutecoin/gui/homescreen.py index 535bb29887bc6383a2a28bf40a276d6fd7128812..bc76177f3051ede15baff4d81518198d8f439c10 100644 --- a/src/cutecoin/gui/homescreen.py +++ b/src/cutecoin/gui/homescreen.py @@ -4,14 +4,33 @@ Created on 31 janv. 2015 @author: vit """ -from PyQt5.QtWidgets import QWidget -from PyQt5.QtCore import QEvent -from ..gen_resources.homescreen_uic import Ui_HomeScreenWidget -from ..__init__ import __version__ -from . import toast +from PyQt5.QtWidgets import QWidget, QFrame, QGridLayout, QLayout +from PyQt5.QtCore import QEvent, Qt +from ..gen_resources.homescreen_uic import Ui_HomescreenWidget +from .community_tile import CommunityTile -class HomeScreenWidget(QWidget, Ui_HomeScreenWidget): +class FrameCommunities(QFrame): + def __init__(self, parent): + super().__init__(parent) + self.grid_layout = QGridLayout() + self.setLayout(self.grid_layout) + self.grid_layout.setAlignment(Qt.AlignLeft | Qt.AlignTop) + self.setFrameShape(QFrame.StyledPanel) + self.setFrameShadow(QFrame.Raised) + + def sizeHint(self): + return self.parentWidget().size() + + def refresh(self, app): + for i in reversed(range(self.grid_layout.count())): + self.grid_layout.itemAt(i).widget().setParent(None) + + for c in app.current_account.communities: + self.layout().addWidget(CommunityTile(self, app, c)) + + +class HomeScreenWidget(QWidget, Ui_HomescreenWidget): """ classdocs """ @@ -23,26 +42,11 @@ class HomeScreenWidget(QWidget, Ui_HomeScreenWidget): super().__init__() self.setupUi(self) self.app = app - self.refresh_text() - self.app.version_requested.connect(self.refresh_text) - - def refresh_text(self): - latest = self.app.available_version - version_info = "" - version_url = "" - if not latest[0]: - version_info = self.tr("Please get the latest release {version}") \ - .format(version=latest[1]) - version_url = latest[2] - - self.label_welcome.setText( - self.tr(""" - <h1>Welcome to Cutecoin {version}</h1> - <h2>{version_info}</h2> - <h3><a href={version_url}>Download link</a></h3> - """).format(version=latest[1], - version_info=version_info, - version_url=version_url)) + self.frame_communities = FrameCommunities(self) + self.layout().addWidget(self.frame_communities) + + def refresh(self): + self.frame_communities.refresh(self.app) def changeEvent(self, event): """ diff --git a/src/cutecoin/gui/mainwindow.py b/src/cutecoin/gui/mainwindow.py index aef391f5e22a28a26adf1de545f79de77cc9578a..fa463cb8221161de190430153097eb5df822d68f 100644 --- a/src/cutecoin/gui/mainwindow.py +++ b/src/cutecoin/gui/mainwindow.py @@ -66,10 +66,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.homescreen = HomeScreenWidget(self.app) self.centralWidget().layout().addWidget(self.homescreen) - self.homescreen.button_new.clicked.connect(self.open_add_account_dialog) - self.homescreen.button_import.clicked.connect(self.import_account) - self.open_ucoin_info = lambda: QDesktopServices.openUrl(QUrl("http://ucoin.io/theoretical/")) - self.homescreen.button_info.clicked.connect(self.open_ucoin_info) def startup(self): self.update_time() @@ -281,10 +277,11 @@ class MainWindow(QMainWindow, Ui_MainWindow): """ logging.debug("Refresh started") self.refresh_accounts() + self.homescreen.show() + self.currencies_tabwidget.hide() + self.homescreen.refresh() if self.app.current_account is None: - self.currencies_tabwidget.hide() - self.homescreen.show() self.setWindowTitle(self.tr("CuteCoin {0}").format(__version__)) self.menu_account.setEnabled(False) self.action_configure_parameters.setEnabled(False) @@ -293,10 +290,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.status_label.setText(self.tr("")) self.password_asker = None else: - logging.debug("Show currencies loading") - self.currencies_tabwidget.show() - logging.debug("Hide homescreen") - self.homescreen.hide() self.password_asker = PasswordAskerDialog(self.app.current_account) self.combo_referential.blockSignals(True)