From e9a0c1fa2225561917e30df20a2dbb26a69bbc82 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 5 May 2024 21:40:26 +1000 Subject: [PATCH] Add verbose mode status bar --- wavebin/__main__.py | 2 -- wavebin/interface/window.py | 35 +++++++++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/wavebin/__main__.py b/wavebin/__main__.py index 20ba001..6f393a9 100644 --- a/wavebin/__main__.py +++ b/wavebin/__main__.py @@ -5,7 +5,6 @@ Oscilloscope waveform capture viewer """ - import argparse import importlib.util import logging @@ -41,7 +40,6 @@ def main() -> None: " | | /| / / __ `/ | / / _ \\/ __ \\/ / __ \\\n" + " | |/ |/ / /_/ /| |/ / __/ /_/ / / / / / \n" + f" |__/|__/\\__,_/ |___/\\___/_.___/_/_/ /_/ v{config.app.version}\n\n" + - f" Oscilloscope waveform capture viewer\n" + " https://wavebin.vksdr.com\n\n" ) diff --git a/wavebin/interface/window.py b/wavebin/interface/window.py index a091c4c..8b466b0 100644 --- a/wavebin/interface/window.py +++ b/wavebin/interface/window.py @@ -7,7 +7,7 @@ import logging from pathlib import Path -from PyQt6.QtWidgets import QApplication, QLabel, QMainWindow, QPushButton, QWidget, QGridLayout, QFileDialog, QTextEdit, QMessageBox +from PyQt6.QtWidgets import QApplication, QLabel, QMainWindow, QPushButton, QWidget, QGridLayout, QFileDialog, QTextEdit, QMessageBox, QStatusBar from PyQt6.QtCore import Qt, QEvent, QRect from PyQt6.QtGui import QFontDatabase, QIcon, QKeyEvent, QResizeEvent import qtawesome as qta @@ -74,6 +74,20 @@ def __init__(self) -> None: self.tool_bar = MainToolBar(self) self.window.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.tool_bar) + # Add status bar to main window if verbose logging enabled + if logging.getLogger().handlers[1].level == logging.DEBUG: + logging.debug("Building tool bar") + self.status_label = QLabel() + self.status_label.setStyleSheet("background-color: #222; color: white;") + self.status_bar = QStatusBar() + self.status_bar.addPermanentWidget(self.status_label) + self.status_bar.setSizeGripEnabled(False) + self.status_bar.setLayoutDirection(Qt.LayoutDirection.RightToLeft) + self.status_bar.setContentsMargins(6, 0, 0, 2) + self.status_bar.setStyleSheet("QStatusBar { background-color: #222; color: white; } QStatusBar::item { border: None; }") + logging.getLogger().addHandler(StatusHandler(self.status_label)) + self.window.setStatusBar(self.status_bar) + # Add menu bar to main window logging.debug("Building menu bar") self.menu_bar = MainMenuBar(self.tool_bar) @@ -245,8 +259,8 @@ def update(self) -> None: logging.debug("Resetting main grid layout") while self.layout.count(): child = self.layout.takeAt(0) - if child.widget(): - child.widget().deleteLater() + if child.widget(): # type: ignore + child.widget().deleteLater() # type: ignore # Set file name in window title self.window.setWindowTitle(config.file.name) @@ -285,7 +299,7 @@ def update(self) -> None: # Enable export and properties toolbar buttons self.tool_bar.items['export'].setEnabled(True) self.tool_bar.items['props'].setEnabled(True) - + # Enable export and properties menu actions self.menu_bar.menu_actions['file']['export'].setEnabled(True) self.menu_bar.menu_actions['view']['props'].setEnabled(True) @@ -429,3 +443,16 @@ def event_keypress(self, event: QKeyEvent) -> None: elif mod == None and key == Qt.Key.Key_I: # Show waveform properties dialog if config.file: self.menu_bar.menu_view_props() + + +class StatusHandler(logging.Handler): + """ + Logging handler for main window status bar + """ + + def __init__(self, widget: QLabel) -> None: + super().__init__(logging.DEBUG) + self.widget: QLabel = widget + + def emit(self, record: logging.LogRecord): + self.widget.setText(record.message)