From 6a8db1d53c7d10941dfe6f4fcfa22443c158a5d6 Mon Sep 17 00:00:00 2001
From: Inso <insomniak.fr@gmail.com>
Date: Wed, 2 Sep 2015 13:29:07 +0200
Subject: [PATCH] Clickable community tabs

---
 res/ui/homescreen.ui               | 43 ++++++++++----------
 src/cutecoin/gui/community_tile.py | 63 ++++++++++++++++++++++++++++++
 src/cutecoin/gui/homescreen.py     | 56 ++++++++++++++------------
 src/cutecoin/gui/mainwindow.py     | 13 ++----
 4 files changed, 116 insertions(+), 59 deletions(-)
 create mode 100644 src/cutecoin/gui/community_tile.py

diff --git a/res/ui/homescreen.ui b/res/ui/homescreen.ui
index a47d8761..8f981fb9 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 00000000..053c731c
--- /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 535bb298..bc76177f 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 aef391f5..fa463cb8 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)
-- 
GitLab