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

First level of refactoring : empty window

parent 2d5e95dd
No related branches found
No related tags found
No related merge requests found
from PyQt5.QtWidgets import QFrame
from .toolbar_uic import Ui_SakiaToolbar
class ToolbarView(QFrame, Ui_SakiaToolbar):
"""
The model of Navigation agent
"""
def __init__(self, parent):
super().__init__(parent)
self.setupUi(self)
...@@ -5,7 +5,7 @@ from PyQt5.QtWidgets import QWidget, QAbstractItemView, QHeaderView ...@@ -5,7 +5,7 @@ from PyQt5.QtWidgets import QWidget, QAbstractItemView, QHeaderView
from PyQt5.QtCore import Qt, QObject, QDateTime, QTime, QModelIndex, pyqtSignal, pyqtSlot, QEvent from PyQt5.QtCore import Qt, QObject, QDateTime, QTime, QModelIndex, pyqtSignal, pyqtSlot, QEvent
from PyQt5.QtGui import QCursor from PyQt5.QtGui import QCursor
from ..gen_resources.transactions_tab_uic import Ui_transactionsTabWidget from ..presentation.transactions_tab_uic import Ui_transactionsTabWidget
from ..models.txhistory import HistoryTableModel, TxFilterProxyModel from ..models.txhistory import HistoryTableModel, TxFilterProxyModel
from ..tools.exceptions import NoPeerAvailable from ..tools.exceptions import NoPeerAvailable
from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task
......
...@@ -11,7 +11,7 @@ from PyQt5.QtCore import QRegExp, Qt, QObject ...@@ -11,7 +11,7 @@ from PyQt5.QtCore import QRegExp, Qt, QObject
from PyQt5.QtGui import QRegExpValidator from PyQt5.QtGui import QRegExpValidator
from ..gen_resources.transfer_uic import Ui_TransferMoneyDialog from ..presentation.transfer_uic import Ui_TransferMoneyDialog
from .widgets import toast from .widgets import toast
from .widgets.dialogs import QAsyncMessageBox, QMessageBox from .widgets.dialogs import QAsyncMessageBox, QMessageBox
from ..tools.decorators import asyncify from ..tools.decorators import asyncify
......
...@@ -8,7 +8,7 @@ from duniterpy.api import bma, errors ...@@ -8,7 +8,7 @@ from duniterpy.api import bma, errors
from ...tools.decorators import asyncify from ...tools.decorators import asyncify
from ...tools.exceptions import NoPeerAvailable from ...tools.exceptions import NoPeerAvailable
from ...core.registry import BlockchainState, Identity from ...core.registry import BlockchainState, Identity
from ...gen_resources.search_user_view_uic import Ui_SearchUserWidget from ...presentation.search_user_view_uic import Ui_SearchUserWidget
class SearchUserWidget(QWidget, Ui_SearchUserWidget): class SearchUserWidget(QWidget, Ui_SearchUserWidget):
......
...@@ -8,7 +8,7 @@ import logging ...@@ -8,7 +8,7 @@ import logging
from PyQt5.QtCore import Qt, QThread from PyQt5.QtCore import Qt, QThread
from PyQt5.QtWidgets import QMainWindow, QApplication from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtGui import QImage, QPixmap from PyQt5.QtGui import QImage, QPixmap
from ...gen_resources.toast_uic import Ui_Toast from ...presentation.toast_uic import Ui_Toast
window = None # global window = None # global
......
...@@ -20,7 +20,7 @@ import PyQt5.QtSvg ...@@ -20,7 +20,7 @@ import PyQt5.QtSvg
from quamash import QSelectorEventLoop from quamash import QSelectorEventLoop
from PyQt5.QtWidgets import QApplication, QMessageBox from PyQt5.QtWidgets import QApplication, QMessageBox
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from sakia.gui.mainwindow import MainWindow from sakia.gui.main_window.controller import MainWindowController
from sakia.core.app import Application from sakia.core.app import Application
...@@ -97,7 +97,7 @@ if __name__ == '__main__': ...@@ -97,7 +97,7 @@ if __name__ == '__main__':
with loop: with loop:
app = Application.startup(sys.argv, sakia, loop) app = Application.startup(sys.argv, sakia, loop)
window = MainWindow.startup(app) window = MainWindowController.startup(app)
loop.run_forever() loop.run_forever()
try: try:
loop.set_exception_handler(None) loop.set_exception_handler(None)
......
"""
Created on 5 févr. 2014
@author: inso
"""
from PyQt5.QtCore import QAbstractItemModel, QModelIndex, Qt
from PyQt5.QtGui import QIcon
import logging
class NodeItem(QAbstractItemModel):
def __init__(self, node, parent_item):
super().__init__(parent_item)
self.children = []
self.node = node
self.parent_item = parent_item
def appendChild(self, node_item):
self.children.append(node_item)
def child(self, row):
return self.children[row]
def childCount(self):
return len(self.children)
def columnCount(self):
return 1
def data(self, index, role):
if role == Qt.DisplayRole and 'title' in self.node:
return self.node['title']
if role == Qt.ToolTipRole and 'tooltip' in self.node:
return self.node['tooltip']
if role == Qt.DecorationRole and 'icon' in self.node:
return QIcon(self.node['icon'])
def row(self):
if self.parent_item:
return self.parent_item.row() + self.parent_item.children.index(self)
return 0
class GenericTreeModel(QAbstractItemModel):
"""
A Qt abstract item model to display nodes from a dict
dict_format = {
'root_node': {
'node': ["title", "icon", "tooltip", "action"],
'children': {}
}
}
"""
def __init__(self, title, root_item):
"""
Constructor
"""
super().__init__(None)
self.title = title
self.root_item = root_item
@classmethod
def create(cls, title, data):
def parse_node(node_data, parent_item):
node = NodeItem(node_data['node'], parent_item)
if parent_item:
parent_item.appendChild(node)
if 'children' in node_data:
for child in node_data['children']:
parse_node(child, node)
return node
root_item = NodeItem({}, None)
for node in data:
parse_node(node, root_item)
return cls(title, root_item)
def columnCount(self, parent):
return 1
def data(self, index, role):
if not index.isValid():
return None
item = index.internalPointer()
if role == Qt.DisplayRole and index.column() == 0:
return item.data(0, role)
return None
def flags(self, index):
if not index.isValid():
return Qt.NoItemFlags
if index.column() == 0:
return Qt.ItemIsEnabled | Qt.ItemIsSelectable
def headerData(self, section, orientation, role):
if orientation == Qt.Horizontal \
and role == Qt.DisplayRole and section == 0:
return self.title
return None
def index(self, row, column, parent):
if not self.hasIndex(row, column, parent):
return QModelIndex()
if not parent.isValid():
parent_item = self.root_item
else:
parent_item = parent.internalPointer()
child_item = parent_item.child(row)
if child_item:
return self.createIndex(row, column, child_item)
else:
return QModelIndex()
def parent(self, index):
if not index.isValid():
return QModelIndex()
child_item = index.internalPointer()
parent_item = child_item.parent()
if parent_item == self.root_item:
return QModelIndex()
return self.createIndex(parent_item.row(), 0, parent_item)
def rowCount(self, parent):
if parent.column() > 0:
return 0
if not parent.isValid():
parent_item = self.root_item
else:
parent_item = parent.internalPointer()
return parent_item.childCount()
def setData(self, index, value, role=Qt.EditRole):
if index.column() == 0:
return True
import unittest
from unittest.mock import patch, MagicMock, Mock, PropertyMock
from PyQt5.QtCore import QLocale
from sakia.tests import QuamashTest
from sakia.models.generic_tree import GenericTreeModel
from PyQt5.QtWidgets import QTreeView, QDialog
class TestGenericTree(unittest.TestCase, QuamashTest):
def setUp(self):
self.setUpQuamash()
QLocale.setDefault(QLocale("en_GB"))
def tearDown(self):
self.tearDownQuamash()
def test_generic_tree(self):
data = [
{
'node': {
'title': "Default Profile"
},
'children': [
{
'node': {
'title': "Test net (inso)"
},
'children': [
{
'node': {
'title': "Transactions"
},
'children': []
},
{
'node': {
'title': "Network"
},
'children': []
}
]
},
{
'node': {
'title': "Le sou"
},
'children': [
{
'node': {
'title': "Transactions"
},
'children': {}
},
{
'node': {
'title': "Network"
},
'children': {
}
}
]
}
],
}
]
tree_model = GenericTreeModel.create("Test", data)
\ No newline at end of file
...@@ -42,7 +42,7 @@ class TestMainWindow(unittest.TestCase, QuamashTest): ...@@ -42,7 +42,7 @@ class TestMainWindow(unittest.TestCase, QuamashTest):
def test_change_account(self): def test_change_account(self):
widget = Mock(spec='PyQt5.QtWidgets.QMainWindow', create=True) widget = Mock(spec='PyQt5.QtWidgets.QMainWindow', create=True)
widget.installEventFilter = Mock() widget.installEventFilter = Mock()
ui = Mock(spec='sakia.gen_resources.mainwindow_uic.Ui_MainWindow', create=True) ui = Mock(spec='sakia.presentation.mainwindow_uic.Ui_MainWindow', create=True)
ui.setupUi = Mock() ui.setupUi = Mock()
label_icon = Mock() label_icon = Mock()
label_status = Mock() label_status = Mock()
...@@ -67,7 +67,7 @@ class TestMainWindow(unittest.TestCase, QuamashTest): ...@@ -67,7 +67,7 @@ class TestMainWindow(unittest.TestCase, QuamashTest):
def test_change_account_from_none(self): def test_change_account_from_none(self):
widget = Mock(spec='PyQt5.QtWidgets.QMainWindow', create=True) widget = Mock(spec='PyQt5.QtWidgets.QMainWindow', create=True)
widget.installEventFilter = Mock() widget.installEventFilter = Mock()
ui = Mock(spec='sakia.gen_resources.mainwindow_uic.Ui_MainWindow', create=True) ui = Mock(spec='sakia.presentation.mainwindow_uic.Ui_MainWindow', create=True)
ui.setupUi = Mock() ui.setupUi = Mock()
label_icon = Mock() label_icon = Mock()
label_status = Mock() label_status = Mock()
......
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