Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • cebash/sakia
  • santiago/sakia
  • jonas/sakia
3 results
Show changes
......@@ -19,11 +19,20 @@
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>TextLabel</string>
<string>label</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::TextBrowserInteraction</set>
</property>
</widget>
</item>
<item>
......
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DialogMember</class>
<widget class="QDialog" name="DialogMember">
<class>AboutMoney</class>
<widget class="QWidget" name="AboutMoney">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>501</width>
<height>288</height>
<width>509</width>
<height>406</height>
</rect>
</property>
<property name="windowTitle">
<string>Informations</string>
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="groupbox_member">
<widget class="QGroupBox" name="group_general">
<property name="styleSheet">
<string notr="true">QGroupBox {
border: 1px solid gray;
border-radius: 9px;
margin-top: 0.5em;
}
QGroupBox::title {
subcontrol-origin: margin;
left: 10px;
padding: 0 3px 0 3px;
font-weight: bold;
}</string>
<string notr="true"/>
</property>
<property name="title">
<string>Member</string>
<string>General</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_icon">
<property name="maximumSize">
<size>
<width>81</width>
<height>71</height>
</size>
</property>
<property name="flat">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label_general">
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../icons/icons.qrc">:/icons/member_icon</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_uid">
<property name="maximumSize">
<size>
<width>471</width>
<height>51</height>
</size>
</property>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="group_rules">
<property name="title">
<string>Rules</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QLabel" name="label_rules">
<property name="text">
<string>uid</string>
<string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QLabel" name="label_properties">
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="group_money">
<property name="title">
<string>Money</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="label_money">
<property name="text">
<string>properties</string>
<string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
......@@ -81,9 +82,6 @@ QGroupBox::title {
</item>
</layout>
</widget>
<resources>
<include location="../icons/icons.qrc"/>
<include location="../../../../../../../../home/vit/.designer/icons/icons.qrc"/>
</resources>
<resources/>
<connections/>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AboutWot</class>
<widget class="QWidget" name="AboutWot">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>509</width>
<height>406</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="group_wot">
<property name="title">
<string>WoT</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QLabel" name="label_wot">
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
from PyQt5.QtCore import QObject, pyqtSignal, QCoreApplication
from PyQt5.QtWidgets import QDialog
from sakia.gui.dialogs.connection_cfg.controller import ConnectionConfigController
from sakia.gui.dialogs.revocation.controller import RevocationController
from sakia.gui.dialogs.contact.controller import ContactController
from sakia.gui.dialogs.plugins_manager.controller import PluginsManagerController
from sakia.gui.preferences import PreferencesDialog
from .model import ToolbarModel
from .view import ToolbarView
from sakia.data.processors import BlockchainProcessor
import sys
class ToolbarController(QObject):
"""
The navigation panel
"""
exit_triggered = pyqtSignal()
def __init__(self, view, model):
"""
:param sakia.gui.component.controller.ComponentController parent: the parent
:param sakia.gui.main_window.toolbar.view.ToolbarView view:
:param sakia.gui.main_window.toolbar.model.ToolbarModel model:
"""
super().__init__()
self.view = view
self.model = model
self.view.action_add_connection.triggered.connect(
self.open_add_connection_dialog
)
self.view.action_parameters.triggered.connect(self.open_settings_dialog)
self.view.action_plugins.triggered.connect(self.open_plugins_manager_dialog)
self.view.action_about.triggered.connect(self.open_about_dialog)
self.view.action_about_wot.triggered.connect(self.open_about_wot_dialog)
self.view.action_about_money.triggered.connect(self.open_about_money_dialog)
self.view.action_about_referentials.triggered.connect(
self.open_about_referentials_dialog
)
self.view.action_revoke_uid.triggered.connect(self.open_revocation_dialog)
self.view.button_contacts.clicked.connect(self.open_contacts_dialog)
self.view.action_exit.triggered.connect(self.exit_triggered)
@classmethod
def create(cls, app, navigation):
"""
Instanciate a navigation component
:param sakia.app.Application app:
:param sakia.gui.navigation.controller.NavigationController navigation:
:return: a new Navigation controller
:rtype: NavigationController
"""
view = ToolbarView(None)
model = ToolbarModel(
app,
navigation.model,
app.blockchain_service,
BlockchainProcessor.instanciate(app),
)
toolbar = cls(view, model)
return toolbar
def open_contacts_dialog(self):
ContactController.open_dialog(self, self.model.app)
def open_revocation_dialog(self):
RevocationController.open_dialog(
self, self.model.app, self.model.navigation_model.current_connection()
)
def open_settings_dialog(self):
PreferencesDialog(self.model.app).exec()
def open_plugins_manager_dialog(self):
PluginsManagerController.open_dialog(self, self.model.app)
def open_add_connection_dialog(self):
connection_config = ConnectionConfigController.create_connection(
self, self.model.app
)
connection_config.exec()
if connection_config.view.result() == QDialog.Accepted:
self.model.app.instanciate_services()
self.model.app.start_coroutines()
self.model.app.new_connection.emit(connection_config.model.connection)
def open_about_dialog(self):
text = self.model.about_text()
self.view.show_about(text)
def open_about_wot_dialog(self):
params = self.model.parameters()
self.view.show_about_wot(params)
def open_about_money_dialog(self):
params = self.model.parameters()
currency = self.model.app.currency
localized_data = self.model.get_localized_data()
referentials = self.model.referentials()
self.view.show_about_money(params, currency, localized_data)
def open_about_referentials_dialog(self):
referentials = self.model.referentials()
self.view.show_about_referentials(referentials)
def retranslateUi(self, widget):
"""
Method to complete translations missing from generated code
:param widget:
:return:
"""
self.action_publish_uid.setText(
QCoreApplication.translate(
"ToolbarController", ToolbarController.action_publish_uid_text
)
)
self.action_revoke_uid.setText(
QCoreApplication.translate(
"ToolbarController", ToolbarController.action_revoke_uid_text
)
)
self.action_showinfo.setText(
QCoreApplication.translate(
"ToolbarController", ToolbarController.action_showinfo_text
)
)
super().retranslateUi(self)
from PyQt5.QtCore import QObject, QLocale, QDateTime, QCoreApplication
from sakia.data.processors import ConnectionsProcessor
import attr
import math
from sakia import __version__
from sakia.money import Referentials
@attr.s()
class ToolbarModel(QObject):
"""
The model of Navigation component
:param sakia.app.Application app: the application
:param sakia.gui.navigation.model.NavigationModel navigation_model: The navigation model
:param sakia.services.BlockchainService blockchain_service: The blockchain service
"""
app = attr.ib()
navigation_model = attr.ib()
blockchain_service = attr.ib()
blockchain_processor = attr.ib()
def __attrs_post_init__(self):
super().__init__()
def notifications(self):
return self.app.parameters.notifications
def connections_with_uids(self):
return ConnectionsProcessor.instanciate(self.app).connections_with_uids()
def connections(self):
return ConnectionsProcessor.instanciate(self.app).connections()
def about_text(self):
latest = self.app.available_version
version_info = ""
version_url = ""
url_text = ""
if not latest[0]:
version_info = "Latest release: {version}".format(version=latest[1])
version_url = latest[2]
url_text = QCoreApplication.translate("ToolbarView", "Download page")
new_version_text = """
<p><b>{version_info}</b></p>
<p><a href={version_url}>{url_text}</a></p>
""".format(
version_info=version_info, version_url=version_url, url_text=url_text
)
return """
<h1>Sakia</h1>
<p>Python/Qt Duniter client</p>
<p>Version: {:}</p>
{new_version_text}
<p>License: GPLv3</p>
<p><b>Authors</b></p>
<p>inso</p>
<p>vit</p>
<p>canercandan</p>
<p>Moul</p>
""".format(
__version__, new_version_text=new_version_text
)
def get_localized_data(self):
localized_data = {}
# try to request money parameters
params = self.blockchain_service.parameters()
localized_data["currency"] = self.app.root_servers[self.app.currency]["display"]
localized_data["growth"] = params.c
localized_data["growth_per_dt"] = QLocale().toString(
params.c / (params.dt_reeval / params.dt), "f", 8
)
localized_data["dt_reeval_in_days"] = QLocale().toString(
params.dt_reeval / 86400, "f", 2
)
last_mass = self.blockchain_service.last_monetary_mass()
last_ud, last_ud_base = self.blockchain_service.last_ud()
last_members_count = self.blockchain_service.last_members_count()
last_ud_time = self.blockchain_service.last_ud_time()
localized_data["units"] = self.app.current_ref.instance(
0, self.app.currency, self.app, None
).units
localized_data["diff_units"] = self.app.current_ref.instance(
0, self.app.currency, self.app, None
).diff_units
if last_ud:
# display float values
localized_data["ud"] = self.app.current_ref.instance(
last_ud * math.pow(10, last_ud_base), self.app.currency, self.app
).diff_localized(False, True)
localized_data[
"members_count"
] = self.blockchain_service.last_members_count()
computed_dividend = self.blockchain_service.computed_dividend()
# display float values
localized_data["ud_plus_1"] = self.app.current_ref.instance(
computed_dividend, self.app.currency, self.app
).diff_localized(False, True)
localized_data["mass"] = self.app.current_ref.instance(
self.blockchain_service.last_monetary_mass(),
self.app.currency,
self.app,
).localized(False, True)
ud_median_time = self.blockchain_service.last_ud_time()
ud_median_time = self.blockchain_processor.adjusted_ts(
self.app.currency, ud_median_time
)
localized_data["ud_median_time"] = QLocale.toString(
QLocale(),
QDateTime.fromTime_t(ud_median_time),
QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat),
)
next_ud_median_time = self.blockchain_service.last_ud_time() + params.dt
next_ud_median_time = self.blockchain_processor.adjusted_ts(
self.app.currency, next_ud_median_time
)
localized_data["next_ud_median_time"] = QLocale.toString(
QLocale(),
QDateTime.fromTime_t(next_ud_median_time),
QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat),
)
next_ud_reeval = self.blockchain_service.next_ud_reeval()
next_ud_reeval = self.blockchain_processor.adjusted_ts(
self.app.currency, next_ud_reeval
)
localized_data["next_ud_reeval"] = QLocale.toString(
QLocale(),
QDateTime.fromTime_t(next_ud_reeval),
QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat),
)
if last_ud:
mass_per_member = (
float(0)
if last_ud == 0 or last_members_count == 0
else last_mass / last_members_count
)
localized_data["members_count"] = last_members_count
localized_data["mass_per_member"] = self.app.current_ref.instance(
mass_per_member, self.app.currency, self.app
).localized(False, True)
# avoid divide by zero !
if last_members_count == 0:
localized_data["actual_growth"] = float(0)
else:
localized_data["actual_growth"] = (
last_ud * math.pow(10, last_ud_base)
) / (last_mass / last_members_count)
last_ud_time = self.blockchain_processor.adjusted_ts(
self.app.currency, last_ud_time
)
localized_data["ud_median_time_minus_1"] = QLocale.toString(
QLocale(),
QDateTime.fromTime_t(last_ud_time),
QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat),
)
return localized_data
def parameters(self):
"""
Get community parameters
"""
return self.blockchain_service.parameters()
def referentials(self):
"""
Get referentials
:return: The list of instances of all referentials
:rtype: list
"""
refs_instances = []
for ref_class in Referentials:
refs_instances.append(ref_class(0, self.app.currency, self.app, None))
return refs_instances