Skip to content
Snippets Groups Projects
Commit cbd949ce authored by Vincent Texier's avatar Vincent Texier
Browse files

Wallets tab as the first tab, and displayed at start

Refactor transactions code from currency_tab to transactions_tab
Improve wallets tab display in fullscreen
parent e0727444
No related branches found
No related tags found
No related merge requests found
......@@ -33,66 +33,8 @@
<bool>false</bool>
</property>
<property name="currentIndex">
<number>0</number>
<number>-1</number>
</property>
<widget class="QWidget" name="tab_transactions">
<attribute name="icon">
<iconset resource="../icons/icons.qrc">
<normaloff>:/icons/tx_icon</normaloff>:/icons/tx_icon</iconset>
</attribute>
<attribute name="title">
<string>Transactions</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="topMargin">
<number>5</number>
</property>
<item>
<widget class="QDateTimeEdit" name="date_from">
<property name="displayFormat">
<string>dd/MM/yyyy</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QDateTimeEdit" name="date_to">
<property name="displayFormat">
<string>dd/MM/yyyy</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QTableView" name="table_history">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
<bool>true</bool>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
......@@ -103,56 +45,7 @@
<resources>
<include location="../icons/icons.qrc"/>
</resources>
<connections>
<connection>
<sender>date_from</sender>
<signal>dateTimeChanged(QDateTime)</signal>
<receiver>CurrencyTabWidget</receiver>
<slot>dates_changed(QDateTime)</slot>
<hints>
<hint type="sourcelabel">
<x>114</x>
<y>73</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>149</y>
</hint>
</hints>
</connection>
<connection>
<sender>date_to</sender>
<signal>dateTimeChanged(QDateTime)</signal>
<receiver>CurrencyTabWidget</receiver>
<slot>dates_changed(QDateTime)</slot>
<hints>
<hint type="sourcelabel">
<x>285</x>
<y>73</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>149</y>
</hint>
</hints>
</connection>
<connection>
<sender>table_history</sender>
<signal>customContextMenuRequested(QPoint)</signal>
<receiver>CurrencyTabWidget</receiver>
<slot>history_context_menu(QPoint)</slot>
<hints>
<hint type="sourcelabel">
<x>199</x>
<y>180</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>149</y>
</hint>
</hints>
</connection>
</connections>
<connections/>
<slots>
<slot>refresh_wallet_content(QModelIndex)</slot>
<slot>wallet_context_menu(QPoint)</slot>
......
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>transactionsTabWidget</class>
<widget class="QWidget" name="transactionsTabWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="topMargin">
<number>5</number>
</property>
<item>
<widget class="QDateTimeEdit" name="date_from">
<property name="displayFormat">
<string>dd/MM/yyyy</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QDateTimeEdit" name="date_to">
<property name="displayFormat">
<string>dd/MM/yyyy</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QTableView" name="table_history">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
<bool>true</bool>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources>
<include location="../icons/icons.qrc"/>
</resources>
<connections>
<connection>
<sender>table_history</sender>
<signal>customContextMenuRequested(QPoint)</signal>
<receiver>transactionsTabWidget</receiver>
<slot>history_context_menu()</slot>
<hints>
<hint type="sourcelabel">
<x>273</x>
<y>183</y>
</hint>
<hint type="destinationlabel">
<x>830</x>
<y>802</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>history_context_menu()</slot>
</slots>
</ui>
......@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>452</height>
<width>924</width>
<height>920</height>
</rect>
</property>
<property name="windowTitle">
......@@ -27,8 +27,8 @@ QGroupBox::title {
font-weight: bold;
}</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
......@@ -45,8 +45,8 @@ QGroupBox::title {
<property name="flat">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label_general">
<property name="text">
<string>label_general</string>
......@@ -62,7 +62,7 @@ QGroupBox::title {
</layout>
</widget>
</item>
<item>
<item row="1" column="0">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Balance</string>
......@@ -81,12 +81,12 @@ QGroupBox::title {
</layout>
</widget>
</item>
<item>
<item row="2" column="0">
<widget class="QTableView" name="table_wallets">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Maximum">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="contextMenuPolicy">
......
......@@ -6,24 +6,18 @@ Created on 2 févr. 2014
import time
import logging
from PyQt5.QtWidgets import QWidget, QMenu, QAction, QApplication, \
QMessageBox, QDialog, QAbstractItemView, QHeaderView
from PyQt5.QtCore import QModelIndex, Qt, pyqtSlot, \
QThread, QDateTime
from PyQt5.QtGui import QIcon, QCursor
from PyQt5.QtWidgets import QWidget, QMessageBox
from PyQt5.QtCore import QModelIndex, pyqtSlot, QDateTime
from PyQt5.QtGui import QIcon
from ..gen_resources.currency_tab_uic import Ui_CurrencyTabWidget
from .community_tab import CommunityTabWidget
from .transfer import TransferMoneyDialog
from .wallets_tab import WalletsTabWidget
from .transactions_tab import TransactionsTabWidget
from .network_tab import NetworkTabWidget
from ..models.txhistory import HistoryTableModel, TxFilterProxyModel
from .informations_tab import InformationsTabWidget
from ..tools.exceptions import MembershipNotFoundError
from ..core.wallet import Wallet
from ..core.person import Person
from ..core.transfer import Transfer
from cutecoin.core.watching.blockchain import BlockchainWatcher
from cutecoin.core.watching.persons import PersonsWatcher
class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget):
......@@ -51,10 +45,10 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget):
self.app.current_account,
self.community,
self.password_asker)
logging.debug("Net")
self.tab_network = NetworkTabWidget(self.community)
logging.debug("Connect")
self.community.new_block_mined.connect(self.refresh_block)
persons_watcher = self.app.monitor.persons_watcher(self.community)
......@@ -73,7 +67,7 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget):
sig_validity = self.community.parameters['sigValidity']
warning_expiration_time = int(sig_validity / 3)
will_expire_soon = (current_time > expiration_date - warning_expiration_time)
logging.debug("Try")
if will_expire_soon:
days = QDateTime().currentDateTime().daysTo(QDateTime.fromTime_t(expiration_date))
......@@ -92,31 +86,23 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget):
self.tabs_account.setEnabled(False)
else:
self.tabs_account.setEnabled(True)
blockchain_init = QDateTime()
blockchain_init.setTime_t(self.community.get_block(1).mediantime)
self.date_from.setMinimumDateTime(blockchain_init)
self.date_from.setDateTime(blockchain_init)
self.date_from.setMaximumDateTime(QDateTime().currentDateTime())
self.date_to.setMinimumDateTime(blockchain_init)
tomorrow_datetime = QDateTime().currentDateTime().addDays(1)
self.date_to.setDateTime(tomorrow_datetime)
self.date_to.setMaximumDateTime(tomorrow_datetime)
ts_from = self.date_from.dateTime().toTime_t()
ts_to = self.date_to.dateTime().toTime_t()
self.tab_wallets = WalletsTabWidget(self.app,
self.app.current_account,
self.community,
self.password_asker)
self.tabs_account.addTab(self.tab_wallets,
QIcon(':/icons/wallet_icon'),
"Wallets")
model = HistoryTableModel(self.app.current_account, self.community)
proxy = TxFilterProxyModel(ts_from, ts_to)
proxy.setSourceModel(model)
proxy.setDynamicSortFilter(True)
proxy.setSortRole(Qt.DisplayRole)
self.tab_history = TransactionsTabWidget(self.app,
self.community,
self.password_asker,
self)
self.tabs_account.addTab(self.tab_history,
QIcon(':/icons/tx_icon'),
"Transactions")
self.table_history.setModel(proxy)
self.table_history.setSelectionBehavior(QAbstractItemView.SelectRows)
self.table_history.setSortingEnabled(True)
self.table_history.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
self.tab_community = CommunityTabWidget(self.app.current_account,
self.community,
self.password_asker)
......@@ -124,14 +110,6 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget):
QIcon(':/icons/community_icon'),
"Community")
self.tab_wallets = WalletsTabWidget(self.app,
self.app.current_account,
self.community,
self.password_asker)
self.tabs_account.addTab(self.tab_wallets,
QIcon(':/icons/wallet_icon'),
"Wallets")
self.tab_informations = InformationsTabWidget(self.app.current_account,
self.community)
self.tabs_account.addTab(self.tab_informations,
......@@ -167,8 +145,8 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget):
if self.tab_wallets:
self.tab_wallets.refresh()
if self.table_history.model():
self.table_history.model().dataChanged.emit(
if self.tab_history.table_history.model():
self.tab_history.table_history.model().dataChanged.emit(
QModelIndex(),
QModelIndex(),
[])
......@@ -181,114 +159,15 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget):
if self.app.current_account:
self.tab_wallets.refresh()
def wallet_context_menu(self, point):
index = self.list_wallets.indexAt(point)
model = self.list_wallets.model()
if index.row() < model.rowCount(QModelIndex()):
wallet = model.wallets[index.row()]
menu = QMenu(model.data(index, Qt.DisplayRole), self)
rename = QAction("Rename", self)
rename.triggered.connect(self.rename_wallet)
rename.setData(index)
copy_pubkey = QAction("Copy pubkey to clipboard", self)
copy_pubkey.triggered.connect(self.copy_pubkey_to_clipboard)
copy_pubkey.setData(wallet)
menu.addAction(rename)
menu.addAction(copy_pubkey)
# Show the context menu.
menu.exec_(QCursor.pos())
def history_context_menu(self, point):
index = self.table_history.indexAt(point)
model = self.table_history.model()
if index.row() < model.rowCount(QModelIndex()):
menu = QMenu("Actions", self)
source_index = model.mapToSource(index)
state_col = model.sourceModel().column_types.index('state')
state_index = model.sourceModel().index(source_index.row(),
state_col)
state_data = model.sourceModel().data(state_index, Qt.DisplayRole)
pubkey_col = model.sourceModel().column_types.index('uid')
person_index = model.sourceModel().index(source_index.row(),
pubkey_col)
person = model.sourceModel().data(person_index, Qt.DisplayRole)
transfer = model.sourceModel().transfers[source_index.row()]
if state_data == Transfer.REFUSED or state_data == Transfer.TO_SEND:
send_back = QAction("Send again", self)
send_back.triggered.connect(self.send_again)
send_back.setData(transfer)
menu.addAction(send_back)
cancel = QAction("Cancel", self)
cancel.triggered.connect(self.cancel_transfer)
cancel.setData(transfer)
menu.addAction(cancel)
copy_pubkey = QAction("Copy pubkey to clipboard", self)
copy_pubkey.triggered.connect(self.copy_pubkey_to_clipboard)
copy_pubkey.setData(person)
menu.addAction(copy_pubkey)
# Show the context menu.
menu.exec_(QCursor.pos())
def copy_pubkey_to_clipboard(self):
data = self.sender().data()
clipboard = QApplication.clipboard()
if data.__class__ is Wallet:
clipboard.setText(data.pubkey)
elif data.__class__ is Person:
clipboard.setText(data.pubkey)
elif data.__class__ is str:
clipboard.setText(data)
def send_again(self):
transfer = self.sender().data()
dialog = TransferMoneyDialog(self.app.current_account,
self.password_asker)
dialog.accepted.connect(self.refresh_wallets)
sender = transfer.metadata['issuer']
wallet_index = [w.pubkey for w in self.app.current_account.wallets].index(sender)
dialog.combo_wallets.setCurrentIndex(wallet_index)
dialog.edit_pubkey.setText(transfer.metadata['receiver'])
dialog.combo_community.setCurrentText(self.community.name)
dialog.spinbox_amount.setValue(transfer.metadata['amount'])
dialog.radio_pubkey.setChecked(True)
dialog.edit_message.setText(transfer.metadata['comment'])
result = dialog.exec_()
if result == QDialog.Accepted:
transfer.drop()
self.table_history.model().invalidate()
def cancel_transfer(self):
reply = QMessageBox.warning(self, "Warning",
"""Are you sure ?
This money transfer will be removed and not sent.""",
QMessageBox.Ok | QMessageBox.Cancel)
if reply == QMessageBox.Ok:
transfer = self.sender().data()
transfer.drop()
self.table_history.model().invalidate()
def showEvent(self, event):
blockid = self.community.current_blockid()
block_number = blockid['number']
self.status_label.setText("Connected : Block {0}"
.format(block_number))
def dates_changed(self, datetime):
ts_from = self.date_from.dateTime().toTime_t()
ts_to = self.date_to.dateTime().toTime_t()
if self.table_history.model():
self.table_history.model().set_period(ts_from, ts_to)
self.table_history.model().invalidate()
def referential_changed(self):
if self.table_history.model():
self.table_history.model().dataChanged.emit(
if self.tab_history.table_history.model():
self.tab_history.table_history.model().dataChanged.emit(
QModelIndex(),
QModelIndex(),
[])
......
from PyQt5.QtWidgets import QWidget, QAbstractItemView, QHeaderView, QDialog, \
QMenu, QAction, QApplication, QMessageBox
from PyQt5.QtCore import Qt, QDateTime, QModelIndex
from PyQt5.QtGui import QCursor
from ..gen_resources.transactions_tab_uic import Ui_transactionsTabWidget
from ..models.txhistory import HistoryTableModel, TxFilterProxyModel
from ..core.transfer import Transfer
from ..core.wallet import Wallet
from ..core.person import Person
from .transfer import TransferMoneyDialog
class TransactionsTabWidget(QWidget, Ui_transactionsTabWidget):
"""
classdocs
"""
def __init__(self, app, community, password_asker, currency_tab):
"""
Constructor
"""
super().__init__()
self.setupUi(self)
self.app = app
self.community = community
self.password_asker = password_asker
self.currency_tab = currency_tab
self.refresh()
def refresh(self):
blockchain_init = QDateTime()
blockchain_init.setTime_t(self.community.get_block(1).mediantime)
self.date_from.setMinimumDateTime(blockchain_init)
self.date_from.setDateTime(blockchain_init)
self.date_from.setMaximumDateTime(QDateTime().currentDateTime())
self.date_to.setMinimumDateTime(blockchain_init)
tomorrow_datetime = QDateTime().currentDateTime().addDays(1)
self.date_to.setDateTime(tomorrow_datetime)
self.date_to.setMaximumDateTime(tomorrow_datetime)
ts_from = self.date_from.dateTime().toTime_t()
ts_to = self.date_to.dateTime().toTime_t()
model = HistoryTableModel(self.app.current_account, self.community)
proxy = TxFilterProxyModel(ts_from, ts_to)
proxy.setSourceModel(model)
proxy.setDynamicSortFilter(True)
proxy.setSortRole(Qt.DisplayRole)
self.table_history.setModel(proxy)
self.table_history.setSelectionBehavior(QAbstractItemView.SelectRows)
self.table_history.setSortingEnabled(True)
self.table_history.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
def history_context_menu(self, point):
index = self.table_history.indexAt(point)
model = self.table_history.model()
if index.row() < model.rowCount(QModelIndex()):
menu = QMenu("Actions", self)
source_index = model.mapToSource(index)
state_col = model.sourceModel().column_types.index('state')
state_index = model.sourceModel().index(source_index.row(),
state_col)
state_data = model.sourceModel().data(state_index, Qt.DisplayRole)
pubkey_col = model.sourceModel().column_types.index('uid')
person_index = model.sourceModel().index(source_index.row(),
pubkey_col)
person = model.sourceModel().data(person_index, Qt.DisplayRole)
transfer = model.sourceModel().transfers[source_index.row()]
if state_data == Transfer.REFUSED or state_data == Transfer.TO_SEND:
send_back = QAction("Send again", self)
send_back.triggered.connect(self.send_again)
send_back.setData(transfer)
menu.addAction(send_back)
cancel = QAction("Cancel", self)
cancel.triggered.connect(self.cancel_transfer)
cancel.setData(transfer)
menu.addAction(cancel)
copy_pubkey = QAction("Copy pubkey to clipboard", self)
copy_pubkey.triggered.connect(self.copy_pubkey_to_clipboard)
copy_pubkey.setData(person)
menu.addAction(copy_pubkey)
# Show the context menu.
menu.exec_(QCursor.pos())
def copy_pubkey_to_clipboard(self):
data = self.sender().data()
clipboard = QApplication.clipboard()
if data.__class__ is Wallet:
clipboard.setText(data.pubkey)
elif data.__class__ is Person:
clipboard.setText(data.pubkey)
elif data.__class__ is str:
clipboard.setText(data)
def send_again(self):
transfer = self.sender().data()
dialog = TransferMoneyDialog(self.app.current_account,
self.password_asker)
dialog.accepted.connect(self.currency_tab.refresh_wallets)
sender = transfer.metadata['issuer']
wallet_index = [w.pubkey for w in self.app.current_account.wallets].index(sender)
dialog.combo_wallets.setCurrentIndex(wallet_index)
dialog.edit_pubkey.setText(transfer.metadata['receiver'])
dialog.combo_community.setCurrentText(self.community.name)
dialog.spinbox_amount.setValue(transfer.metadata['amount'])
dialog.radio_pubkey.setChecked(True)
dialog.edit_message.setText(transfer.metadata['comment'])
result = dialog.exec_()
if result == QDialog.Accepted:
transfer.drop()
self.table_history.model().invalidate()
def cancel_transfer(self):
reply = QMessageBox.warning(self, "Warning",
"""Are you sure ?
This money transfer will be removed and not sent.""",
QMessageBox.Ok | QMessageBox.Cancel)
if reply == QMessageBox.Ok:
transfer = self.sender().data()
transfer.drop()
self.table_history.model().invalidate()
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