Skip to content
Snippets Groups Projects
Commit 87ffff8a authored by inso's avatar inso
Browse files

Working on coins trasnfer

parent 3014d9db
No related branches found
No related tags found
No related merge requests found
...@@ -6,11 +6,11 @@ RESOURCE_DIR = res/ui ...@@ -6,11 +6,11 @@ RESOURCE_DIR = res/ui
COMPILED_DIR = src/cutecoin/gen_resources COMPILED_DIR = src/cutecoin/gen_resources
#UI files to compile #UI files to compile
UI_FILES = mainwindow.ui addAccountDialog.ui addCommunityDialog.ui communityTabWidget.ui issuanceDialog.ui UI_FILES = mainwindow.ui addAccountDialog.ui addCommunityDialog.ui communityTabWidget.ui issuanceDialog.ui transferDialog.ui
#Qt resource files to compile #Qt resource files to compile
RESOURCES = RESOURCES =
#pyuic4 and pyrcc4 binaries #pyuic5 and pyrcc5 binaries
PYUIC = pyuic5 PYUIC = pyuic5
PYRCC = pyrcc5 PYRCC = pyrcc5
......
...@@ -139,8 +139,15 @@ ...@@ -139,8 +139,15 @@
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionAdd_a_contact"/> <addaction name="actionAdd_a_contact"/>
</widget> </widget>
<widget class="QMenu" name="menuActions">
<property name="title">
<string>Actions</string>
</property>
<addaction name="actionTransfer_money"/>
</widget>
<addaction name="menuTr_File"/> <addaction name="menuTr_File"/>
<addaction name="menuEdit"/> <addaction name="menuEdit"/>
<addaction name="menuActions"/>
</widget> </widget>
<widget class="QStatusBar" name="statusbar"/> <widget class="QStatusBar" name="statusbar"/>
<action name="actionManage_accounts"> <action name="actionManage_accounts">
...@@ -208,6 +215,11 @@ ...@@ -208,6 +215,11 @@
<string>Account</string> <string>Account</string>
</property> </property>
</action> </action>
<action name="actionTransfer_money">
<property name="text">
<string>Transfer money</string>
</property>
</action>
</widget> </widget>
<resources/> <resources/>
<connections> <connections>
...@@ -259,9 +271,26 @@ ...@@ -259,9 +271,26 @@
</hint> </hint>
</hints> </hints>
</connection> </connection>
<connection>
<sender>actionTransfer_money</sender>
<signal>triggered()</signal>
<receiver>MainWindow</receiver>
<slot>openTransferMoneyDialog()</slot>
<hints>
<hint type="sourcelabel">
<x>-1</x>
<y>-1</y>
</hint>
<hint type="destinationlabel">
<x>248</x>
<y>218</y>
</hint>
</hints>
</connection>
</connections> </connections>
<slots> <slots>
<slot>openAddAccountDialog()</slot> <slot>openAddAccountDialog()</slot>
<slot>save()</slot> <slot>save()</slot>
<slot>openTransferMoneyDialog()</slot>
</slots> </slots>
</ui> </ui>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>Dialog</class> <class>TransferMoneyDialog</class>
<widget class="QDialog" name="Dialog"> <widget class="QDialog" name="TransferMoneyDialog">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Dialog</string> <string>Transfer money</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<item> <item>
...@@ -31,6 +31,12 @@ ...@@ -31,6 +31,12 @@
</item> </item>
<item> <item>
<widget class="QLineEdit" name="edit_keyFingerprint"> <widget class="QLineEdit" name="edit_keyFingerprint">
<property name="inputMask">
<string>&gt;NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN</string>
</property>
<property name="text">
<string/>
</property>
<property name="placeholderText"> <property name="placeholderText">
<string>Key fingerprint</string> <string>Key fingerprint</string>
</property> </property>
...@@ -66,12 +72,39 @@ ...@@ -66,12 +72,39 @@
<item> <item>
<widget class="QRadioButton" name="radio_nodeAddress"> <widget class="QRadioButton" name="radio_nodeAddress">
<property name="text"> <property name="text">
<string>Node</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="edit_nodeAddress">
<property name="inputMask">
<string/>
</property>
<property name="placeholderText">
<string>Node address</string> <string>Node address</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLineEdit" name="edit_nodeAddress"/> <widget class="QLabel" name="label">
<property name="text">
<string>:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="edit_port">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="placeholderText">
<string>Port</string>
</property>
</widget>
</item> </item>
</layout> </layout>
</item> </item>
...@@ -104,7 +137,17 @@ ...@@ -104,7 +137,17 @@
<number>5</number> <number>5</number>
</property> </property>
<item> <item>
<widget class="QListView" name="listView_wallet"/> <layout class="QVBoxLayout" name="verticalLayout_6">
<property name="leftMargin">
<number>6</number>
</property>
<item>
<widget class="QComboBox" name="comboBox_wallets"/>
</item>
<item>
<widget class="QListView" name="listView_wallet"/>
</item>
</layout>
</item> </item>
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout_4"> <layout class="QVBoxLayout" name="verticalLayout_4">
...@@ -135,7 +178,31 @@ ...@@ -135,7 +178,31 @@
</layout> </layout>
</item> </item>
<item> <item>
<widget class="QListView" name="listView_coinsSent"/> <layout class="QVBoxLayout" name="verticalLayout_7">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="placeholderText">
<string>A message</string>
</property>
</widget>
</item>
<item>
<widget class="QListView" name="listView_coinsSent">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>8</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</item> </item>
</layout> </layout>
</item> </item>
...@@ -186,7 +253,7 @@ ...@@ -186,7 +253,7 @@
<connection> <connection>
<sender>buttonBox</sender> <sender>buttonBox</sender>
<signal>accepted()</signal> <signal>accepted()</signal>
<receiver>Dialog</receiver> <receiver>TransferMoneyDialog</receiver>
<slot>accept()</slot> <slot>accept()</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">
...@@ -202,7 +269,7 @@ ...@@ -202,7 +269,7 @@
<connection> <connection>
<sender>buttonBox</sender> <sender>buttonBox</sender>
<signal>rejected()</signal> <signal>rejected()</signal>
<receiver>Dialog</receiver> <receiver>TransferMoneyDialog</receiver>
<slot>reject()</slot> <slot>reject()</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">
...@@ -215,5 +282,109 @@ ...@@ -215,5 +282,109 @@
</hint> </hint>
</hints> </hints>
</connection> </connection>
<connection>
<sender>button_add</sender>
<signal>clicked()</signal>
<receiver>TransferMoneyDialog</receiver>
<slot>addCoinsToTransfer()</slot>
<hints>
<hint type="sourcelabel">
<x>201</x>
<y>327</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>244</y>
</hint>
</hints>
</connection>
<connection>
<sender>button_remove</sender>
<signal>clicked()</signal>
<receiver>TransferMoneyDialog</receiver>
<slot>removeCoinsFromTransfer()</slot>
<hints>
<hint type="sourcelabel">
<x>201</x>
<y>373</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>244</y>
</hint>
</hints>
</connection>
<connection>
<sender>button_manageCoins</sender>
<signal>clicked()</signal>
<receiver>TransferMoneyDialog</receiver>
<slot>openManageWalletCoins()</slot>
<hints>
<hint type="sourcelabel">
<x>201</x>
<y>281</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>244</y>
</hint>
</hints>
</connection>
<connection>
<sender>comboBox_wallets</sender>
<signal>currentIndexChanged(int)</signal>
<receiver>TransferMoneyDialog</receiver>
<slot>changeDisplayedWallet()</slot>
<hints>
<hint type="sourcelabel">
<x>82</x>
<y>264</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>244</y>
</hint>
</hints>
</connection>
<connection>
<sender>radio_keyFingerprint</sender>
<signal>toggled(bool)</signal>
<receiver>TransferMoneyDialog</receiver>
<slot>recipientModeChanged(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>87</x>
<y>51</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>244</y>
</hint>
</hints>
</connection>
<connection>
<sender>radio_nodeAddress</sender>
<signal>toggled(bool)</signal>
<receiver>TransferMoneyDialog</receiver>
<slot>transferModeChanged(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>70</x>
<y>155</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>244</y>
</hint>
</hints>
</connection>
</connections> </connections>
<slots>
<slot>addCoinsToTransfer()</slot>
<slot>removeCoinsFromTransfer()</slot>
<slot>openManageWalletCoins()</slot>
<slot>changeDisplayedWallet(int)</slot>
<slot>transferModeChanged(bool)</slot>
<slot>recipientModeChanged(bool)</slot>
</slots>
</ui> </ui>
...@@ -7,6 +7,7 @@ from cutecoin.gen_resources.mainwindow_uic import Ui_MainWindow ...@@ -7,6 +7,7 @@ from cutecoin.gen_resources.mainwindow_uic import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow, QAction, QErrorMessage from PyQt5.QtWidgets import QMainWindow, QAction, QErrorMessage
from PyQt5.QtCore import QSignalMapper from PyQt5.QtCore import QSignalMapper
from cutecoin.gui.addAccountDialog import AddAccountDialog from cutecoin.gui.addAccountDialog import AddAccountDialog
from cutecoin.gui.transferMoneyDialog import TransferMoneyDialog
from cutecoin.gui.communityTabWidget import CommunityTabWidget from cutecoin.gui.communityTabWidget import CommunityTabWidget
from cutecoin.models.account.wallets.listModel import WalletsListModel from cutecoin.models.account.wallets.listModel import WalletsListModel
from cutecoin.models.wallet.listModel import WalletListModel from cutecoin.models.wallet.listModel import WalletListModel
...@@ -55,6 +56,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -55,6 +56,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.refreshMainWindow() self.refreshMainWindow()
def openTransferMoneyDialog(self):
transferMoneyDialog = TransferMoneyDialog(self.core.currentAccount)
transferMoneyDialog.exec_()
''' '''
Refresh main window Refresh main window
When the selected account changes, all the widgets When the selected account changes, all the widgets
......
'''
Created on 2 févr. 2014
@author: inso
'''
import logging
from math import pow
from PyQt5.QtWidgets import QDialog,QFrame, QSlider, QLabel, QDialogButtonBox
from PyQt5.QtCore import Qt, QSignalMapper
from cutecoin.models.coin import Coin
from cutecoin.models.person import Person
from cutecoin.models.node import Node
from cutecoin.models.coin.listModel import CoinsListModel
from cutecoin.gen_resources.transferDialog_uic import Ui_TransferMoneyDialog
class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog):
'''
classdocs
'''
def __init__(self, sender):
'''
Constructor
'''
super(TransferMoneyDialog, self).__init__()
self.setupUi(self)
self.sender = sender
for wallet in sender.wallets.walletsList:
self.comboBox_wallets.addItem(wallet.getText())
self.refreshTransaction(sender.wallets.walletsList[0])
def removeCoinsFromTransfer(self):
selection = self.listView_coinsSent.selectedIndexes()
walletCoins = self.listView_wallet.model().coins
sentCoins = self.listView_coinsSent.model().coins
newWallet = sentCoins
for selected in selection:
coin = sentCoins[selected.row()]
sentCoins.remove(coin)
walletCoins.append(coin)
self.listView_wallet.setModel(CoinsListModel(walletCoins))
self.listView_coinsSent.setModel(CoinsListModel(newWallet))
def addCoinsToTransfer(self):
selection = self.listView_wallet.selectedIndexes()
walletCoins = self.listView_wallet.model().coins
sentCoins = self.listView_coinsSent.model().coins
newWallet = walletCoins
for selected in selection:
coin = walletCoins[selected.row()]
newWallet.remove(coin)
sentCoins.append(coin)
self.listView_wallet.setModel(CoinsListModel(newWallet))
self.listView_coinsSent.setModel(CoinsListModel(sentCoins))
def openManageWalletCoins(self):
pass
def accept(self):
sentCoins = self.listView_coinsSent.model().coins
receiver = None
if self.radio_keyFingerprint.toggled():
receiver = Person(self.edit_keyFingerprint.text(), "", "")
else:
#TODO: Manage contacts
receiver = Person(self.edit_keyFingerprint.text(), "", "")
if self.radio_nodeAddress.toggled():
node = Node(self.edit_nodeAddress, self.edit_port)
else:
#TODO: Manage trusted nodes
node = Node(self.edit_nodeAddress, self.edit_port)
#TODO: Transfer money, and validate the window if no error happened
self.sender.transferCoins(sentCoins)
def changeDisplayedWallet(self, index):
wallet = self.sender.wallets.walletsList[index]
self.refreshTransaction(wallet)
def refreshTransaction(self, wallet):
coinsSentModel = CoinsListModel([])
self.listView_coinsSent.setModel(coinsSentModel)
walletCoinsModel = CoinsListModel(list(wallet.coins))
self.listView_wallet.setModel(walletCoinsModel)
...@@ -31,6 +31,9 @@ class Coin(object): ...@@ -31,6 +31,9 @@ class Coin(object):
origin = m.group(5) origin = m.group(5)
return cls(issuer, number, base, power, origin) return cls(issuer, number, base, power, origin)
def __eq__(self, other):
return self.getId() == other.getId()
def value(self): def value(self):
return self.base*math.pow(10, self.power) return self.base*math.pow(10, self.power)
......
...@@ -42,11 +42,12 @@ class Community(object): ...@@ -42,11 +42,12 @@ class Community(object):
community = cls(knownNodes) community = cls(knownNodes)
for walletsData in jsonData['wallets']: for walletsData in jsonData['wallets']:
account.wallets.walletsList.append(Wallet.load(walletsData, community)) wallet = Wallet.load(walletsData, community)
wallet.refreshCoins(account.keyFingerprint())
account.wallets.walletsList.append(wallet)
return community return community
def membersFingerprints(self): def membersFingerprints(self):
''' '''
Listing members of a community Listing members of a community
......
...@@ -22,8 +22,9 @@ class Person(object): ...@@ -22,8 +22,9 @@ class Person(object):
self.fingerprint = fingerprint self.fingerprint = fingerprint
self.email = email self.email = email
@classmethod @classmethod
def create(cls, pgpFingerprint, community): def lookup(cls, pgpFingerprint, community):
''' '''
Create a person from the pgpFingerprint found in a community Create a person from the pgpFingerprint found in a community
''' '''
......
...@@ -47,12 +47,12 @@ class Wallet(object): ...@@ -47,12 +47,12 @@ class Wallet(object):
return value return value
def refreshCoins(self, pgpFingerprint): def refreshCoins(self, pgpFingerprint):
dataList = self.community.ucoinRequest(lambda : ucoin.hdc.coins.List, ctor_args={'pgp_fingerprint':pgpFingerprint}) dataList = self.community.ucoinRequest(ucoin.hdc.coins.List({'pgp_fingerprint':pgpFingerprint}))
for issaunces in dataList['coins']: for issaunces in dataList['coins']:
issuer = issaunces['issuer'] issuer = issaunces['issuer']
for coinsIds in issaunces['ids']: for coinsIds in issaunces['ids']:
shortened_id = coinsIds shortened_id = coinsIds
coin = Coin.fromId(pgpFingerprint, issuer+"-"+shortened_id) coin = Coin.fromId(issuer+"-"+shortened_id)
self.coins.append(coin) self.coins.append(coin)
def getText(self): def getText(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment