diff --git a/lib/ucoinpy/documents/certification.py b/lib/ucoinpy/documents/certification.py index 582e2625e03c2fd38c137df53aa6204134e2900d..79f6d11f04910153d1db8af8bbf7b9c46a6b2e9d 100644 --- a/lib/ucoinpy/documents/certification.py +++ b/lib/ucoinpy/documents/certification.py @@ -42,9 +42,6 @@ class SelfCertification(Document): META:TS:{1} """.format(self.uid, self.timestamp) - def signed_raw(self): - return super().signed_raw()[:-1] - def inline(self): return "{0}:{1}:{2}:{3}".format(self.pubkey, self.signatures[0], self.timestamp, self.uid) @@ -83,8 +80,7 @@ class Certification(Document): blockhash, blocknumber, signature) def raw(self, selfcert): - return """{0} -META:TS:{1}-{2} + return """{0}META:TS:{1}-{2} """.format(selfcert.signed_raw(), self.blocknumber, self.blockhash) diff --git a/res/ui/community_tab.ui b/res/ui/community_tab.ui index 9292edc20f3d952449c833b37626ea18dc0fd5f9..f037ee0e501d28099f16df3430f782148c117284 100644 --- a/res/ui/community_tab.ui +++ b/res/ui/community_tab.ui @@ -10,6 +10,9 @@ <height>369</height> </rect> </property> + <property name="contextMenuPolicy"> + <enum>Qt::DefaultContextMenu</enum> + </property> <property name="windowTitle"> <string>communityTabWidget</string> </property> @@ -27,7 +30,11 @@ <item> <layout class="QVBoxLayout" name="verticalLayout_6"> <item> - <widget class="QListView" name="list_community_members"/> + <widget class="QListView" name="list_community_members"> + <property name="contextMenuPolicy"> + <enum>Qt::CustomContextMenu</enum> + </property> + </widget> </item> <item> <layout class="QHBoxLayout" name="horizontalLayout_2"> @@ -95,9 +102,25 @@ </hint> </hints> </connection> + <connection> + <sender>list_community_members</sender> + <signal>customContextMenuRequested(QPoint)</signal> + <receiver>CommunityTabWidget</receiver> + <slot>member_context_menu(QPoint)</slot> + <hints> + <hint type="sourcelabel"> + <x>210</x> + <y>179</y> + </hint> + <hint type="destinationlabel"> + <x>210</x> + <y>184</y> + </hint> + </hints> + </connection> </connections> <slots> - <slot>open_issuance_dialog()</slot> + <slot>member_context_menu(QPoint)</slot> <slot>send_membership_demand()</slot> <slot>send_membership_leaving()</slot> </slots> diff --git a/res/ui/transfer.ui b/res/ui/transfer.ui index b7676c864aad17c36c79b2776d5e8916802d097f..649c80c0279ed7cdf189fd52fb70dc10c14f305e 100644 --- a/res/ui/transfer.ui +++ b/res/ui/transfer.ui @@ -56,7 +56,7 @@ <item> <layout class="QHBoxLayout" name="horizontalLayout"> <item> - <widget class="QRadioButton" name="radio_key_fingerprint"> + <widget class="QRadioButton" name="radio_pubkey"> <property name="text"> <string>Recipient public key</string> </property> @@ -66,7 +66,7 @@ </widget> </item> <item> - <widget class="QLineEdit" name="edit_key_fingerprint"> + <widget class="QLineEdit" name="edit_pubkey"> <property name="enabled"> <bool>false</bool> </property> @@ -235,7 +235,7 @@ </hints> </connection> <connection> - <sender>radio_key_fingerprint</sender> + <sender>radio_pubkey</sender> <signal>toggled(bool)</signal> <receiver>TransferMoneyDialog</receiver> <slot>recipient_mode_changed(bool)</slot> diff --git a/src/cutecoin/gui/community_tab.py b/src/cutecoin/gui/community_tab.py index d949881e7c8e5dddec25566d66a93b2a8e30f888..2ca575f64ee70845338069602d78e774f79f2eeb 100644 --- a/src/cutecoin/gui/community_tab.py +++ b/src/cutecoin/gui/community_tab.py @@ -5,11 +5,14 @@ Created on 2 févr. 2014 ''' import logging -from PyQt5.QtWidgets import QWidget, QErrorMessage -from cutecoin.models.members import MembersListModel -from cutecoin.gen_resources.community_tab_uic import Ui_CommunityTabWidget -from cutecoin.gui.add_contact import AddContactDialog -from cutecoin.gui.wot_tab import WotTabWidget +from PyQt5.QtCore import Qt, QSignalMapper +from PyQt5.QtWidgets import QWidget, QErrorMessage, QAction, QMenu +from ..models.members import MembersListModel +from ..gen_resources.community_tab_uic import Ui_CommunityTabWidget +from .add_contact import AddContactDialog +from .wot_tab import WotTabWidget +from .transfer import TransferMoneyDialog +from .certification import CertificationDialog class CommunityTabWidget(QWidget, Ui_CommunityTabWidget): @@ -27,7 +30,7 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget): self.community = community self.account = account self.list_community_members.setModel(MembersListModel(community)) - self.list_community_members.doubleClicked.connect(self.add_member_as_contact) + if self.account.member_of(self.community): self.button_membership.setText("Send leaving demand") self.button_membership.clicked.connect(self.send_membership_leaving) @@ -37,16 +40,53 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget): self.tabs_information.addTab(WotTabWidget(account, community), "Wot") - def add_member_as_contact(self, index): - members_model = self.list_community_members.model() - members = members_model.members - logging.debug("Members : {0}".format(len(members))) - if index.row() < len(members): - dialog = AddContactDialog(self.account, self) - person = members[index.row()] - dialog.edit_name.setText(person.name) - dialog.edit_pubkey.setText(person.pubkey) - dialog.exec_() + def member_context_menu(self, point): + index = self.list_community_members.indexAt(point) + model = self.list_community_members.model() + if index.row() < model.rowCount(None): + member = model.members[index.row()] + logging.debug(member) + menu = QMenu(model.data(index, Qt.DisplayRole), self) + + add_contact = QAction("Add as contact", self) + add_contact.triggered.connect(self.add_member_as_contact) + add_contact.setData(member) + + send_money = QAction("Send money", self) + send_money.triggered.connect(self.send_money_to_member) + send_money.setData(member) + + certify = QAction("Certify individual", self) + certify.triggered.connect(self.certify_member) + certify.setData(member) + + menu.addAction(add_contact) + menu.addAction(send_money) + menu.addAction(certify) + # Show the context menu. + menu.exec_(self.list_community_members.mapToGlobal(point)) + + def add_member_as_contact(self): + dialog = AddContactDialog(self.account, self.window()) + person = self.sender().data() + dialog.edit_name.setText(person.name) + dialog.edit_pubkey.setText(person.pubkey) + dialog.exec_() + + def send_money_to_member(self): + dialog = TransferMoneyDialog(self.account) + person = self.sender().data() + dialog.edit_pubkey.setText(person.pubkey) + dialog.combo_community.setCurrentText(self.community.name()) + dialog.radio_pubkey.setChecked(True) + dialog.exec_() + + def certify_member(self,): + dialog = CertificationDialog(self.account) + person = self.sender().data() + dialog.edit_pubkey.setText(person.pubkey) + dialog.radio_pubkey.setChecked(True) + dialog.exec_() def send_membership_demand(self): result = self.account.send_membership_in(self.community) diff --git a/src/cutecoin/gui/transfer.py b/src/cutecoin/gui/transfer.py index 2250edca8e835c262ede587a681f14be5cbfc333..bca2bd35453864e9a75cdd1091c9aa1a88c361ad 100644 --- a/src/cutecoin/gui/transfer.py +++ b/src/cutecoin/gui/transfer.py @@ -5,9 +5,10 @@ Created on 2 févr. 2014 ''' from PyQt5.QtWidgets import QDialog, QErrorMessage, QInputDialog, QLineEdit, QMessageBox -from cutecoin.core.person import Person +from ..core.person import Person +from ..gen_resources.transfer_uic import Ui_TransferMoneyDialog -from cutecoin.gen_resources.transfer_uic import Ui_TransferMoneyDialog +import logging class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog): @@ -47,7 +48,7 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog): index = self.combo_contact.currentIndex() recipient = self.sender.contacts[index].pubkey else: - recipient = self.edit_key_fingerprint.text() + recipient = self.edit_pubkey.text() amount = self.spinbox_amount.value() password = QInputDialog.getText(self, "Wallet password", "Please enter your password", @@ -109,6 +110,6 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog): self.spinbox_amount.setValue(0) self.spinbox_amount.setMaximum(self.wallet.value(self.community)) - def recipient_mode_changed(self, fingerprint_toggled): - self.edit_key_fingerprint.setEnabled(fingerprint_toggled) - self.combo_contact.setEnabled(not fingerprint_toggled) + def recipient_mode_changed(self, pubkey_toggled): + self.edit_pubkey.setEnabled(pubkey_toggled) + self.combo_contact.setEnabled(not pubkey_toggled)