Skip to content

Commit

Permalink
Adapt UiLoader to load into self
Browse files Browse the repository at this point in the history
* introduce new `load_ui()` that properly injects into current instance
* automated resizing of inner widgets works again
* rename evil 'widget' to 'line_widget' inside `secrets_tab.ui`
  • Loading branch information
daringer committed Dec 6, 2023
1 parent 48b90d0 commit e6f7c2d
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 41 deletions.
2 changes: 1 addition & 1 deletion nitrokeyapp/add_secret_dialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def __init__(self, parent: Optional[QWidget] = None) -> None:
QDialog.__init__(self, parent)
QtUtilsMixIn.__init__(self)

self.ui = self.load_ui("add_secret_dialog.ui", parent)
self.ui = self.load_ui("add_secret_dialog.ui", self)

for kind in OtpKind:
self.ui.comboBoxOtpType.addItem(str(kind))
Expand Down
2 changes: 1 addition & 1 deletion nitrokeyapp/error_dialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def set_exception(
) -> None:
lines = format_exception(ty, e, tb)
self.ui.textEditDetails.setPlainText("".join(lines))
self.ui.show()
self.show()

@Slot()
def save_log(self) -> None:
Expand Down
22 changes: 3 additions & 19 deletions nitrokeyapp/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import functools
import logging
import platform
import time
import webbrowser
from types import TracebackType
from typing import Optional, Type
Expand Down Expand Up @@ -86,12 +85,8 @@ def __init__(self, qt_app: QtWidgets.QApplication, log_file: str):
self.trigger_handle_exception.connect(self.handle_exception)

# loads main ui
self.ui = self.load_ui("mainwindow.ui", None)

self.setCentralWidget(self.ui)
#layout = QtWidgets.QVBoxLayout()
#layout.addWidget(self.ui)
#self.setLayout(layout)
self.ui = self.load_ui("mainwindow.ui", self)
#self.setCentralWidget(self.ui)

self.info_box = InfoBox(
self.ui.information_frame,
Expand Down Expand Up @@ -129,12 +124,8 @@ def __init__(self, qt_app: QtWidgets.QApplication, log_file: str):
self.tabs.addTab(view.widget, view.title)
self.tabs.currentChanged.connect(self.slot_tab_changed)

# set some spacing between Nitrokey buttons
self.ui.nitrokeyButtonsLayout.setSpacing(8)

self.sig_device_change.connect(self.device_connect)


self.init_gui()
self.show()

Expand Down Expand Up @@ -213,16 +204,9 @@ def detect_added_devices(self) -> None:
logger.info("no nk3 in list. no admin?")

def detect_removed_devices(self) -> None:
self.tabs.setCurrentIndex(0)
list_of_removed: list[DeviceData] = []
if self.devices:
try:
raw_list = Nitrokey3Device.list()
except Exception:
time.sleep(0.5)
raw_list = Nitrokey3Device.list()

nk3_list = [str(device.uuid())[:-4] for device in raw_list]
nk3_list = [str(device.uuid())[:-4] for device in Nitrokey3Device.list()]
logger.info(f"list nk3: {nk3_list}")
list_of_removed = [
data
Expand Down
14 changes: 7 additions & 7 deletions nitrokeyapp/qt_utils_mix_in.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
from typing import Optional, Type, TypeVar

from PySide6 import QtGui, QtWidgets
from PySide6.QtCore import QObject, QSize, QDir
from PySide6.QtCore import QObject, QSize, QDir, QMetaObject
from PySide6.QtWidgets import QWidget

from PySide6.QtUiTools import QUiLoader
from nitrokeyapp.ui_loader import UiLoader

Q = TypeVar("Q", bound=QObject)


class QtUtilsMixIn:
loader = QUiLoader()
def __init__(self) -> None:
self.widgets: dict[str, QObject] = {}

# ensure we are always mixed-in with an QObject-ish class
# TODO: should we restrict this further to QWidget?
assert isinstance(self, QObject)

@classmethod
def load_ui(cls, filename: str, parent: Optional[QObject] = None) -> bool:
return cls.loader.load("nitrokeyapp/ui/" + filename, parent)
@staticmethod
def load_ui(filename: str, parent: Optional[QObject] = None) -> bool:
loader = UiLoader(parent, customWidgets=None)
return loader.load("nitrokeyapp/ui/" + filename)

def user_warn(
self,
Expand Down
8 changes: 5 additions & 3 deletions nitrokeyapp/secrets_tab/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,13 @@ def __init__(self, parent: Optional[QWidget] = None) -> None:
self.originalText = self.clipboard.text()

self.ui = self.load_ui("secrets_tab.ui", self)
#breakpoint()
#print(self.pageCompatible)

labels = [
self.ui.labelName,
self.ui.labelAlgorithm,
self.ui.labelOtp,
self.labelName,
self.labelAlgorithm,
self.labelOtp,
]
max_width = max([label.width() for label in labels])
for label in labels:
Expand Down
6 changes: 3 additions & 3 deletions nitrokeyapp/ui/secrets_tab.ui
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
<widget class="QWidget" name="pageCompatible">
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QWidget" name="widget" native="true">
<widget class="QWidget" name="line_widget" native="true">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>0</number>
Expand Down Expand Up @@ -159,8 +159,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>362</width>
<height>451</height>
<width>373</width>
<height>457</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
Expand Down
14 changes: 7 additions & 7 deletions nitrokeyapp/welcome_tab.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ def __init__(self, parent: Optional[QWidget], log_file: str) -> None:

self.log_file = log_file

self.ui = self.load_ui("welcome_tab.ui", self)
self.ui.buttonSaveLog.pressed.connect(self.save_log)
self.ui.VersionNr.setText(__version__)
self.ui.CheckUpdate.pressed.connect(self.check_update)
self.load_ui("welcome_tab.ui", self)
self.buttonSaveLog.pressed.connect(self.save_log)
self.VersionNr.setText(__version__)
self.CheckUpdate.pressed.connect(self.check_update)

def check_update(self) -> None:
self.c_version = __version__
Expand All @@ -36,14 +36,14 @@ def check_update(self) -> None:
self.n_version_v = Version.from_str(self.n_version)

if Version.__lt__(self.c_version_v, self.n_version_v):
self.ui.CheckUpdate.setText("update available")
self.ui.CheckUpdate.pressed.connect(
self.CheckUpdate.setText("update available")
self.CheckUpdate.pressed.connect(
lambda: webbrowser.open(
"https://github.com/Nitrokey/nitrokey-app2/releases"
)
)
else:
self.ui.CheckUpdate.setText("App is up to date")
self.CheckUpdate.setText("App is up to date")

@Slot()
def save_log(self) -> None:
Expand Down

0 comments on commit e6f7c2d

Please sign in to comment.