MainWindow: Add minimal info tab.

setup.py
Pierre-Antoine Rouby 2024-02-27 11:46:06 +01:00
parent a18fd29795
commit 3e085dd7c6
6 changed files with 403 additions and 3 deletions

View File

@ -67,6 +67,13 @@ class Graph(object):
def edges_counts(self): def edges_counts(self):
return len(self._edges) return len(self._edges)
def enable_nodes_counts(self):
return reduce(
lambda acc, n: acc + 1 if self.is_enable_node(n) else acc,
self._nodes,
0
)
def enable_edges_counts(self): def enable_edges_counts(self):
return reduce( return reduce(
lambda acc, e: acc + 1 if e.is_enable() else acc, lambda acc, e: acc + 1 if e.is_enable() else acc,

View File

@ -34,7 +34,7 @@ from PyQt5.QtCore import (
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QMainWindow, QApplication, QAction, QMainWindow, QApplication, QAction,
QFileDialog, QShortcut, QMenu, QToolBar, QFileDialog, QShortcut, QMenu, QToolBar,
QMessageBox, QProgressDialog, QMessageBox, QProgressDialog, QTabWidget,
) )
from PyQt5.uic import loadUi from PyQt5.uic import loadUi
@ -44,6 +44,8 @@ from View.DummyWindow import DummyWindow
from View.Translate import MainTranslate from View.Translate import MainTranslate
from View.MainWindowTabInfo import WidgetInfo
from View.Configure.Window import ConfigureWindow from View.Configure.Window import ConfigureWindow
from View.Study.Window import NewStudyWindow from View.Study.Window import NewStudyWindow
from View.About.Window import AboutWindow from View.About.Window import AboutWindow
@ -143,6 +145,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
self self
) )
self.setup_tab()
self.setup_sc() self.setup_sc()
self.setup_connection() self.setup_connection()
self.default_style() self.default_style()
@ -167,6 +170,21 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
title += "Pamhyr2" title += "Pamhyr2"
self.setWindowTitle(title) self.setWindowTitle(title)
def setup_tab(self):
self.setup_tab_info()
def setup_tab_info(self):
tab_widget = self.findChild(QTabWidget, "tabWidget")
self._tab_widget_info = WidgetInfo(
study=self._study, parent=self
)
tab_widget.addTab(
self._tab_widget_info,
self._trad["tab_info_name"]
)
def enable_actions(self, action: str, enable: bool): def enable_actions(self, action: str, enable: bool):
"""Enable of disable an action componant """Enable of disable an action componant
@ -348,6 +366,8 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
logger.debug(f"Propagation keys: {self._propagation_keys}") logger.debug(f"Propagation keys: {self._propagation_keys}")
def _do_propagate_update(self): def _do_propagate_update(self):
self.update()
keys = self._propagation_keys.copy() keys = self._propagation_keys.copy()
self._init_propagation_keys() self._init_propagation_keys()
@ -361,6 +381,12 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
for _, window in self.sub_win_list: for _, window in self.sub_win_list:
window._propagated_update(key=key) window._propagated_update(key=key)
def update(self):
self.set_title()
self._tab_widget_info.study = self._study
self._tab_widget_info.update()
######### #########
# MODEL # # MODEL #
######### #########
@ -372,14 +398,15 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
self._study = model self._study = model
self.update_enable_action() self.update_enable_action()
self.conf.set_last_study(self._study.filename) self.conf.set_last_study(self._study.filename)
self.set_title()
self.update()
def close_model(self): def close_model(self):
self._study = None self._study = None
self.update_enable_action() self.update_enable_action()
self.conf.set_close_correctly() self.conf.set_close_correctly()
self.set_title()
self.update()
self._close_sub_window() self._close_sub_window()
def update_enable_action(self): def update_enable_action(self):

View File

@ -0,0 +1,117 @@
# MainWindowTabInfo.py -- Pamhyr
# Copyright (C) 2024 INRAE
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# -*- coding: utf-8 -*-
import logging
from tools import timer, trace
from View.Tools.PamhyrWidget import PamhyrWidget
logger = logging.getLogger()
class WidgetInfo(PamhyrWidget):
_pamhyr_ui = "MainWindowTabInfo"
color_grey = "<font color='grey'>"
color_end = "</font>"
def __init__(self, study=None, parent=None):
self._study = study
super(WidgetInfo, self).__init__(
parent=parent
)
self.set_initial_values()
@property
def study(self):
return self._study
@study.setter
def study(self, study):
self._study = study
def set_initial_values(self):
self.set_label_text("label_study_name", "")
self.set_text_edit_text("textBrowser_study", "")
self.set_label_text("label_current_reach", "None")
self.set_label_text("label_nodes", "0")
self.set_label_text("label_edges", "0")
self.set_label_text("label_cs", "0")
self.set_label_text("label_points", "0")
def update(self):
if self._study is None:
self.set_initial_values()
return
self.set_label_text("label_study_name", self._study.name)
self.set_text_edit_text("textBrowser_study", self._study.description)
self.set_network_values()
self.set_geometry_values()
def set_network_values(self):
n_nodes = self._study.river.enable_nodes_counts()
n_d_nodes = self._study.river.nodes_counts() - n_nodes
n_edges = self._study.river.enable_edges_counts()
n_d_edges = self._study.river.edges_counts() - n_edges
self.set_label_text(
"label_nodes",
f"{n_nodes} {self.color_grey}({n_d_nodes}){self.color_end}"
)
self.set_label_text(
"label_edges",
f"{n_edges} {self.color_grey}({n_d_edges}){self.color_end}"
)
current = self._study.river.current_reach()
if current is not None:
name = current.reach.name
else:
name = "None"
self.set_label_text("label_current_reach", name)
def set_geometry_values(self):
n_cs = 0
n_d_cs = 0
n_points = 0
n_d_points = 0
for edge in self._study.river.edges():
for profile in edge.reach.profiles:
if edge.is_enable():
n_points += len(profile)
n_cs += 1
else:
n_d_points += len(profile)
n_d_cs += 1
self.set_label_text(
"label_cs",
f"{n_cs} {self.color_grey}({n_d_cs}){self.color_end}"
)
self.set_label_text(
"label_points",
f"{n_points} {self.color_grey}({n_d_points}){self.color_end}"
)

View File

@ -75,6 +75,10 @@ class MainTranslate(UnitTranslate):
def __init__(self): def __init__(self):
super(MainTranslate, self).__init__() super(MainTranslate, self).__init__()
self._dict["tab_info_name"] = _translate(
"MainWindow", "Info"
)
self._dict["open_debug"] = _translate( self._dict["open_debug"] = _translate(
"MainWindow", "Open debug window" "MainWindow", "Open debug window"
) )

View File

@ -59,6 +59,22 @@
<property name="contextMenuPolicy"> <property name="contextMenuPolicy">
<enum>Qt::NoContextMenu</enum> <enum>Qt::NoContextMenu</enum>
</property> </property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="font">
<font>
<family>Ubuntu</family>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="currentIndex">
<number>-1</number>
</property>
</widget>
</item>
</layout>
</widget> </widget>
<widget class="QMenuBar" name="menubar"> <widget class="QMenuBar" name="menubar">
<property name="geometry"> <property name="geometry">

View File

@ -0,0 +1,229 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>897</width>
<height>480</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<property name="locale">
<locale language="English" country="Europe"/>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<widget class="QScrollArea" name="scrollArea">
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>864</width>
<height>460</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0">
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QWidget" name="">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Study</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Description:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QTextBrowser" name="textBrowser_study">
<property name="whatsThis">
<string notr="true"/>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Name:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_study_name">
<property name="whatsThis">
<string notr="true"/>
</property>
<property name="text">
<string>@study_name</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>River network</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Reach:</string>
</property>
</widget>
</item>
<item row="1" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Node:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_nodes">
<property name="whatsThis">
<string notr="true"/>
</property>
<property name="text">
<string>@nb_nodes</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_edges">
<property name="whatsThis">
<string notr="true"/>
</property>
<property name="text">
<string>@nb_edges</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Current reach:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_current_reach">
<property name="whatsThis">
<string notr="true"/>
</property>
<property name="text">
<string>@current_reach</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Geometry</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="1">
<widget class="QLabel" name="label_points">
<property name="whatsThis">
<string notr="true"/>
</property>
<property name="text">
<string>@nb_points</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Cross-sections:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Points:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_cs">
<property name="whatsThis">
<string notr="true"/>
</property>
<property name="text">
<string>@nb_cs</string>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="">
<layout class="QVBoxLayout" name="verticalLayout"/>
</widget>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>