From 705726376bfd7ef1c7b1fe841c3b0c1bde944b0d Mon Sep 17 00:00:00 2001
From: Inso <insomniak.fr@gmail.com>
Date: Mon, 10 Mar 2014 20:04:30 +0100
Subject: [PATCH] Removing and adding communities

---
 res/ui/accountConfigurationDialog.ui          |  6 +++-
 res/ui/mainwindow.ui                          | 22 +++++++++++--
 src/cutecoin/gui/configureAccountDialog.py    | 24 +++++++++++---
 src/cutecoin/gui/configureCommunityDialog.py  |  1 +
 src/cutecoin/gui/mainWindow.py                | 32 +++++++++----------
 src/cutecoin/models/account/__init__.py       |  6 ++++
 .../models/account/wallets/__init__.py        |  6 ++++
 .../models/community/membersListModel.py      |  1 -
 8 files changed, 74 insertions(+), 24 deletions(-)

diff --git a/res/ui/accountConfigurationDialog.ui b/res/ui/accountConfigurationDialog.ui
index 52d57064..0b1edafa 100644
--- a/res/ui/accountConfigurationDialog.ui
+++ b/res/ui/accountConfigurationDialog.ui
@@ -61,7 +61,11 @@
      </property>
      <layout class="QVBoxLayout" name="verticalLayout_3">
       <item>
-       <widget class="QListView" name="list_communities"/>
+       <widget class="QListView" name="list_communities">
+        <property name="contextMenuPolicy">
+         <enum>Qt::DefaultContextMenu</enum>
+        </property>
+       </widget>
       </item>
       <item>
        <layout class="QHBoxLayout" name="horizontalLayout_3">
diff --git a/res/ui/mainwindow.ui b/res/ui/mainwindow.ui
index 88e78e2b..bec0edc3 100644
--- a/res/ui/mainwindow.ui
+++ b/res/ui/mainwindow.ui
@@ -37,7 +37,7 @@
           <bool>false</bool>
          </property>
          <property name="currentIndex">
-          <number>2</number>
+          <number>0</number>
          </property>
          <widget class="QWidget" name="walletsTab">
           <attribute name="title">
@@ -323,8 +323,24 @@
    <slot>openConfigureAccountDialog()</slot>
    <hints>
     <hint type="sourcelabel">
+     <x>-1</x>
+     <y>-1</y>
+    </hint>
+    <hint type="destinationlabel">
      <x>248</x>
-     <y>36</y>
+     <y>218</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>walletsList</sender>
+   <signal>clicked(QModelIndex)</signal>
+   <receiver>MainWindow</receiver>
+   <slot>refreshWalletContent(QModelIndex)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>137</x>
+     <y>240</y>
     </hint>
     <hint type="destinationlabel">
      <x>248</x>
@@ -339,5 +355,7 @@
   <slot>openTransferMoneyDialog()</slot>
   <slot>openAddContactDialog()</slot>
   <slot>openConfigureAccountDialog()</slot>
+  <slot>refreshMainWindow()</slot>
+  <slot>refreshWalletContent(QModelIndex)</slot>
  </slots>
 </ui>
diff --git a/src/cutecoin/gui/configureAccountDialog.py b/src/cutecoin/gui/configureAccountDialog.py
index 5bdb2633..99a6ef87 100644
--- a/src/cutecoin/gui/configureAccountDialog.py
+++ b/src/cutecoin/gui/configureAccountDialog.py
@@ -6,7 +6,8 @@ Created on 6 mars 2014
 from cutecoin.gen_resources.accountConfigurationDialog_uic import Ui_AccountConfigurationDialog
 from cutecoin.gui.configureCommunityDialog import ConfigureCommunityDialog
 from cutecoin.models.account.communities.listModel import CommunitiesListModel
-from PyQt5.QtWidgets import QDialog
+from cutecoin.core.exceptions import KeyAlreadyUsed
+from PyQt5.QtWidgets import QDialog, QErrorMessage
 from cutecoin.models.account import Account
 from cutecoin.models.account import Communities
 import gnupg
@@ -18,7 +19,7 @@ class ConfigureAccountDialog(QDialog, Ui_AccountConfigurationDialog):
     '''
 
 
-    def __init__(self, account):
+    def __init__(self, core, account):
         '''
         Constructor
         '''
@@ -26,6 +27,7 @@ class ConfigureAccountDialog(QDialog, Ui_AccountConfigurationDialog):
         super(ConfigureAccountDialog, self).__init__()
         self.setupUi(self)
         self.account = account
+        self.core = core
         if self.account is None:
             self.setWindowTitle("New account")
         else:
@@ -64,8 +66,12 @@ class ConfigureAccountDialog(QDialog, Ui_AccountConfigurationDialog):
         self.list_communities.setModel(CommunitiesListModel(self.account))
 
     def actionRemoveCommunity(self):
-        #TODO:Remove selected community
-        pass
+        for index in self.list_communities.selectedIndexes():
+            community = self.account.communities.communitiesList[ index.row() ]
+            self.account.wallets.removeAllWalletsOf(community)
+            self.account.communities.communitiesList.pop(index.row())
+
+        self.list_communities.setModel( CommunitiesListModel(self.account ))
 
     def actionEditCommunity(self):
         self.list_communities.setModel(CommunitiesListModel(self.account))
@@ -82,3 +88,13 @@ class ConfigureAccountDialog(QDialog, Ui_AccountConfigurationDialog):
         availableKeys = gpg.list_keys(True)
         self.account.keyId = availableKeys[keyIndex]['keyid']
 
+    def accept(self):
+        if self.account not in self.core.accounts:
+            self.account.name = self.edit_accountName.text()
+            try:
+                self.core.addAccount(self.account)
+            except KeyAlreadyUsed as e:
+                QErrorMessage(self).showMessage(e.message)
+        self.close()
+
+
diff --git a/src/cutecoin/gui/configureCommunityDialog.py b/src/cutecoin/gui/configureCommunityDialog.py
index bd1f6cf1..b3c91865 100644
--- a/src/cutecoin/gui/configureCommunityDialog.py
+++ b/src/cutecoin/gui/configureCommunityDialog.py
@@ -71,3 +71,4 @@ class ConfigureCommunityDialog(QDialog, Ui_CommunityConfigurationDialog):
 
 
 
+
diff --git a/src/cutecoin/gui/mainWindow.py b/src/cutecoin/gui/mainWindow.py
index 4cf032c4..bfcb26e9 100644
--- a/src/cutecoin/gui/mainWindow.py
+++ b/src/cutecoin/gui/mainWindow.py
@@ -4,7 +4,7 @@ Created on 1 févr. 2014
 @author: inso
 '''
 from cutecoin.gen_resources.mainwindow_uic import Ui_MainWindow
-from PyQt5.QtWidgets import QMainWindow, QAction, QErrorMessage
+from PyQt5.QtWidgets import QMainWindow, QAction, QErrorMessage, QDialogButtonBox
 from PyQt5.QtCore import QSignalMapper
 from cutecoin.gui.configureAccountDialog import ConfigureAccountDialog
 from cutecoin.gui.transferMoneyDialog import TransferMoneyDialog
@@ -14,7 +14,6 @@ from cutecoin.models.account.wallets.listModel import WalletsListModel
 from cutecoin.models.wallet.listModel import WalletListModel
 from cutecoin.models.transaction.sentListModel import SentListModel
 from cutecoin.models.transaction.receivedListModel import ReceivedListModel
-from cutecoin.core.exceptions import KeyAlreadyUsed
 
 import logging
 
@@ -35,18 +34,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
         self.refreshMainWindow()
 
     def openAddAccountDialog(self):
-        self.addAccountDialog = ConfigureAccountDialog(None)
-        self.addAccountDialog.buttonBox.accepted.connect(self.actionAddAccount)
-        self.addAccountDialog.setData()
-        self.addAccountDialog.exec_()
-
-    def actionAddAccount(self):
-        self.addAccountDialog.account.name = self.addAccountDialog.edit_accountName.text()
-        try:
-            self.core.addAccount(self.addAccountDialog.account)
-        except KeyAlreadyUsed as e:
-            QErrorMessage(self).showMessage(e.message)
-        self.refreshMainWindow()
+        dialog = ConfigureAccountDialog(self.core, None)
+        dialog.buttonBox.button(QDialogButtonBox.Ok).clicked.connect(self.refreshMainWindow)
+        dialog.exec_()
+
 
     def save(self):
         self.core.save()
@@ -63,7 +54,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
         AddContactDialog(self.core.currentAccount, self).exec_()
 
     def openConfigureAccountDialog(self):
-        ConfigureAccountDialog(self.core.currentAccount).exec_()
+        dialog = ConfigureAccountDialog(self.core, self.core.currentAccount)
+        dialog.buttonBox.button(QDialogButtonBox.Ok).clicked.connect(self.refreshMainWindow)
+        dialog.exec_()
 
     '''
     Refresh main window
@@ -87,7 +80,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
             self.accountTabs.setEnabled(True)
             self.accountNameLabel.setText("Current account : " + self.core.currentAccount.name)
             self.walletsList.setModel(WalletsListModel(self.core.currentAccount))
-            self.walletContent.setModel(WalletListModel(self.core.currentAccount.wallets.walletsList[0]))
 
             self.communitiesTab.clear()
             for community in self.core.currentAccount.communities.communitiesList:
@@ -101,3 +93,11 @@ class MainWindow(QMainWindow, Ui_MainWindow):
             self.transactionsSent.setModel(SentListModel(self.core.currentAccount))
             self.transactionsReceived.setModel(ReceivedListModel(self.core.currentAccount))
 
+
+    def refreshWalletContent(self, index):
+        if index.isValid():
+            currentWallet = self.core.currentAccount.wallets.walletsList[index.row()]
+            self.walletContent.setModel(WalletListModel(currentWallet))
+        else:
+            self.walletContent.setModel(WalletListModel([]))
+
diff --git a/src/cutecoin/models/account/__init__.py b/src/cutecoin/models/account/__init__.py
index 9fcbc464..6f7f70cb 100644
--- a/src/cutecoin/models/account/__init__.py
+++ b/src/cutecoin/models/account/__init__.py
@@ -60,6 +60,12 @@ class Account(object):
 
         return account
 
+    def __eq__(self, other):
+        if other is not None:
+            return other.keyId == self.keyId
+        else:
+            return False
+
     def addWallet(self, name, currency):
         self.wallets.addWallet(name, currency)
 
diff --git a/src/cutecoin/models/account/wallets/__init__.py b/src/cutecoin/models/account/wallets/__init__.py
index 05f7c806..c6b5dfd1 100644
--- a/src/cutecoin/models/account/wallets/__init__.py
+++ b/src/cutecoin/models/account/wallets/__init__.py
@@ -37,6 +37,12 @@ class Wallets(object):
                 return w
         return None
 
+    def removeAllWalletsOf(self, community):
+        for wallet in self.walletsList:
+            if wallet.community == community:
+                self.walletsList.remove(wallet)
+
+
     def jsonify(self, community):
         '''
         Return the list of wallets in a key:value form.
diff --git a/src/cutecoin/models/community/membersListModel.py b/src/cutecoin/models/community/membersListModel.py
index b017ba32..1dcf0f13 100644
--- a/src/cutecoin/models/community/membersListModel.py
+++ b/src/cutecoin/models/community/membersListModel.py
@@ -25,7 +25,6 @@ class MembersListModel(QAbstractListModel):
         return len(self.members)
 
     def data(self,index,role):
-
         if role == Qt.DisplayRole:
             row=index.row()
             value = self.members[row].name
-- 
GitLab