NetworkWindow.py 1.97 KB
Newer Older
# -*- coding: utf-8 -*-

from view.ASubWindow import ASubWindow
from model.network.Graph import (Node, Edge, Graph)

from PyQt5.QtCore import (
    Qt, QVariant, QAbstractTableModel,
)

from PyQt5.QtWidgets import (
    QTableView,
)


class TableModel(QAbstractTableModel):
    def __init__(self, headers=[], rows=[]):
        super(QAbstractTableModel, self).__init__()
        self.rows = rows
        self.headers = headers

    def rowCount(self, parent):
        # How many rows are there?
        return len(self.rows)

    def columnCount(self, parent):
        # How many columns?
        return len(self.headers)

    def data(self, index, role):
        if role != Qt.ItemDataRole.DisplayRole:
            return QVariant()

        return self.rows[index.row()][self.headers[index.column()]]

    def headerData(self, section, orientation, role):
        if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal:
            return self.headers[section].capitalize()

        if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Vertical:
            return section

        return QVariant()


class NetworkWindow(ASubWindow):
    def __init__(self, title="Network", parent=None):
        super(NetworkWindow, self).__init__(name=title, ui="Network", parent=parent)
        self.ui.setWindowTitle(title)

        self.graph = Graph()

        n1 = self.graph.add_node()
        n2 = self.graph.add_node()
        n3 = self.graph.add_node()

        self.nodes_table_model = TableModel(
            headers = ["name", "id"],
            rows = self.graph.nodes()
        )
        self.find(QTableView, "tableView_nodes").setModel(self.nodes_table_model)

        self.graph.add_edge(n1, n2)
        self.graph.add_edge(n2, n3)

        self.reachs_table_model = TableModel(
            headers = ["name", "node1", "node2"],
            rows = self.graph.edges()
        )
        self.find(QTableView, "tableView_reachs").setModel(self.reachs_table_model)