rbeesoft 1.0.2__py3-none-any.whl → 1.0.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rbeesoft/app.py +22 -22
- rbeesoft/core/singleton.py +8 -8
- rbeesoft/core/utils/functions.py +9 -9
- rbeesoft/core/utils/logmanager.py +35 -35
- rbeesoft/core/utils/logmanagerlistener.py +2 -2
- rbeesoft/ui/components/__init__.py +0 -0
- rbeesoft/ui/components/splashscreen.py +121 -0
- rbeesoft/ui/constants.py +45 -44
- rbeesoft/ui/mainwindow.py +65 -126
- rbeesoft/ui/panels/defaultpanel.py +12 -12
- rbeesoft/ui/panels/logpanel.py +52 -52
- rbeesoft/ui/panels/mainpanel.py +81 -81
- rbeesoft/ui/panels/settingspanel.py +62 -62
- rbeesoft/ui/panels/stackedpanel.py +21 -21
- rbeesoft/ui/settings.py +31 -31
- rbeesoft/ui/utils.py +31 -31
- {rbeesoft-1.0.2.dist-info → rbeesoft-1.0.4.dist-info}/LICENSE +674 -674
- {rbeesoft-1.0.2.dist-info → rbeesoft-1.0.4.dist-info}/METADATA +1 -1
- rbeesoft-1.0.4.dist-info/RECORD +30 -0
- rbeesoft-1.0.2.dist-info/RECORD +0 -28
- {rbeesoft-1.0.2.dist-info → rbeesoft-1.0.4.dist-info}/WHEEL +0 -0
- {rbeesoft-1.0.2.dist-info → rbeesoft-1.0.4.dist-info}/entry_points.txt +0 -0
rbeesoft/app.py
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
|
|
3
|
-
from PySide6 import QtWidgets
|
|
4
|
-
|
|
5
|
-
import rbeesoft.ui.constants as constants
|
|
6
|
-
|
|
7
|
-
from rbeesoft.ui.settings import Settings
|
|
8
|
-
from rbeesoft.ui.mainwindow import MainWindow
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def main():
|
|
12
|
-
settings = Settings()
|
|
13
|
-
application_name = settings.get(constants.RBEESOFT_WINDOW_TITLE)
|
|
14
|
-
QtWidgets.QApplication.setApplicationName(application_name)
|
|
15
|
-
app = QtWidgets.QApplication(sys.argv)
|
|
16
|
-
app.setApplicationName(application_name)
|
|
17
|
-
main_window = MainWindow()
|
|
18
|
-
main_window.show()
|
|
19
|
-
sys.exit(app.exec())
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if __name__ == '__main__':
|
|
1
|
+
import sys
|
|
2
|
+
|
|
3
|
+
from PySide6 import QtWidgets
|
|
4
|
+
|
|
5
|
+
import rbeesoft.ui.constants as constants
|
|
6
|
+
|
|
7
|
+
from rbeesoft.ui.settings import Settings
|
|
8
|
+
from rbeesoft.ui.mainwindow import MainWindow
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def main():
|
|
12
|
+
settings = Settings()
|
|
13
|
+
application_name = settings.get(constants.RBEESOFT_WINDOW_TITLE)
|
|
14
|
+
QtWidgets.QApplication.setApplicationName(application_name)
|
|
15
|
+
app = QtWidgets.QApplication(sys.argv)
|
|
16
|
+
app.setApplicationName(application_name)
|
|
17
|
+
main_window = MainWindow()
|
|
18
|
+
main_window.show()
|
|
19
|
+
sys.exit(app.exec())
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
if __name__ == '__main__':
|
|
23
23
|
main()
|
rbeesoft/core/singleton.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
def singleton(cls):
|
|
2
|
-
_instances = {}
|
|
3
|
-
|
|
4
|
-
def instance(*args, **kwargs):
|
|
5
|
-
if cls not in _instances:
|
|
6
|
-
_instances[cls] = cls(*args, **kwargs)
|
|
7
|
-
return _instances[cls]
|
|
8
|
-
|
|
1
|
+
def singleton(cls):
|
|
2
|
+
_instances = {}
|
|
3
|
+
|
|
4
|
+
def instance(*args, **kwargs):
|
|
5
|
+
if cls not in _instances:
|
|
6
|
+
_instances[cls] = cls(*args, **kwargs)
|
|
7
|
+
return _instances[cls]
|
|
8
|
+
|
|
9
9
|
return instance
|
rbeesoft/core/utils/functions.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import pendulum
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def create_name_with_timestamp(prefix: str='') -> str:
|
|
5
|
-
tz = pendulum.local_timezone()
|
|
6
|
-
timestamp = pendulum.now(tz).strftime('%Y%m%d%H%M%S%f')[:17]
|
|
7
|
-
if prefix != '' and not prefix.endswith('-'):
|
|
8
|
-
prefix = prefix + '-'
|
|
9
|
-
name = f'{prefix}{timestamp}'
|
|
1
|
+
import pendulum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def create_name_with_timestamp(prefix: str='') -> str:
|
|
5
|
+
tz = pendulum.local_timezone()
|
|
6
|
+
timestamp = pendulum.now(tz).strftime('%Y%m%d%H%M%S%f')[:17]
|
|
7
|
+
if prefix != '' and not prefix.endswith('-'):
|
|
8
|
+
prefix = prefix + '-'
|
|
9
|
+
name = f'{prefix}{timestamp}'
|
|
10
10
|
return name
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import datetime
|
|
2
|
-
|
|
3
|
-
from rbeesoft.core.singleton import singleton
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
@singleton
|
|
7
|
-
class LogManager:
|
|
8
|
-
def __init__(self, suppress_print=False):
|
|
9
|
-
self._suppress_print = suppress_print
|
|
10
|
-
self._listeners = []
|
|
11
|
-
|
|
12
|
-
def _log(self, level, message):
|
|
13
|
-
timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
|
14
|
-
message = f'[{timestamp}] {level} : {message}'
|
|
15
|
-
if not self._suppress_print:
|
|
16
|
-
print(message)
|
|
17
|
-
self.notify_listeners(message)
|
|
18
|
-
return message
|
|
19
|
-
|
|
20
|
-
def info(self, message):
|
|
21
|
-
return self._log('INFO', message)
|
|
22
|
-
|
|
23
|
-
def warning(self, message):
|
|
24
|
-
return self._log('WARNING', message)
|
|
25
|
-
|
|
26
|
-
def error(self, message):
|
|
27
|
-
return self._log('ERROR', message)
|
|
28
|
-
|
|
29
|
-
def add_listener(self, listener):
|
|
30
|
-
if listener not in self._listeners:
|
|
31
|
-
self._listeners.append(listener)
|
|
32
|
-
|
|
33
|
-
def notify_listeners(self, message):
|
|
34
|
-
for listener in self._listeners:
|
|
35
|
-
listener.new_message(message)
|
|
1
|
+
import datetime
|
|
2
|
+
|
|
3
|
+
from rbeesoft.core.singleton import singleton
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@singleton
|
|
7
|
+
class LogManager:
|
|
8
|
+
def __init__(self, suppress_print=False):
|
|
9
|
+
self._suppress_print = suppress_print
|
|
10
|
+
self._listeners = []
|
|
11
|
+
|
|
12
|
+
def _log(self, level, message):
|
|
13
|
+
timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
|
14
|
+
message = f'[{timestamp}] {level} : {message}'
|
|
15
|
+
if not self._suppress_print:
|
|
16
|
+
print(message)
|
|
17
|
+
self.notify_listeners(message)
|
|
18
|
+
return message
|
|
19
|
+
|
|
20
|
+
def info(self, message):
|
|
21
|
+
return self._log('INFO', message)
|
|
22
|
+
|
|
23
|
+
def warning(self, message):
|
|
24
|
+
return self._log('WARNING', message)
|
|
25
|
+
|
|
26
|
+
def error(self, message):
|
|
27
|
+
return self._log('ERROR', message)
|
|
28
|
+
|
|
29
|
+
def add_listener(self, listener):
|
|
30
|
+
if listener not in self._listeners:
|
|
31
|
+
self._listeners.append(listener)
|
|
32
|
+
|
|
33
|
+
def notify_listeners(self, message):
|
|
34
|
+
for listener in self._listeners:
|
|
35
|
+
listener.new_message(message)
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
class LogManagerListener:
|
|
2
|
-
def new_message(self, message):
|
|
1
|
+
class LogManagerListener:
|
|
2
|
+
def new_message(self, message):
|
|
3
3
|
raise NotImplementedError()
|
|
File without changes
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import webbrowser
|
|
3
|
+
|
|
4
|
+
from PySide6.QtWidgets import (
|
|
5
|
+
QWidget,
|
|
6
|
+
QVBoxLayout,
|
|
7
|
+
QPushButton,
|
|
8
|
+
QLabel,
|
|
9
|
+
)
|
|
10
|
+
from PySide6.QtCore import Qt
|
|
11
|
+
from PySide6.QtGui import QPixmap
|
|
12
|
+
|
|
13
|
+
from rbeesoft.ui.constants import Constants
|
|
14
|
+
|
|
15
|
+
from rbeesoft.ui.utils import resource_path, set_opacity
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class SplashScreen(QWidget):
|
|
19
|
+
def __init__(self, main_window, title, background_image_file_path=None):
|
|
20
|
+
super(SplashScreen, self).__init__()
|
|
21
|
+
self._main_window = main_window
|
|
22
|
+
self._title = title
|
|
23
|
+
self._background_image_file_path = background_image_file_path
|
|
24
|
+
self._background_label = None
|
|
25
|
+
self._background_pixmap = None
|
|
26
|
+
self._title_label = None
|
|
27
|
+
self._sub_text_label = None
|
|
28
|
+
self._start_app_button = None
|
|
29
|
+
self._donate_button = None
|
|
30
|
+
self._close_button = None
|
|
31
|
+
self.init_layout()
|
|
32
|
+
|
|
33
|
+
def main_window(self):
|
|
34
|
+
return self._main_window
|
|
35
|
+
|
|
36
|
+
def title(self):
|
|
37
|
+
return self._title
|
|
38
|
+
|
|
39
|
+
def background_image_file_path(self):
|
|
40
|
+
return self._background_image_file_path
|
|
41
|
+
|
|
42
|
+
def background_label(self):
|
|
43
|
+
if not self._background_label and self._background_image_file_path:
|
|
44
|
+
self._background_label = QLabel(self)
|
|
45
|
+
self._background_label.setPixmap(self.background_pixmap())
|
|
46
|
+
self._background_label.setGeometry(0, 0, self.width(), self.height())
|
|
47
|
+
self._background_label.lower()
|
|
48
|
+
return self._background_label
|
|
49
|
+
|
|
50
|
+
def background_pixmap(self):
|
|
51
|
+
if not self._background_pixmap and self._background_image_file_path:
|
|
52
|
+
self._background_pixmap = QPixmap(resource_path(os.path.join(
|
|
53
|
+
Constants.RBEESOFT_RESOURCES_IMAGES_DIR,
|
|
54
|
+
Constants.RBEESOFT_SPLASH_SCREEN_BACKGROUND_IMAGE,
|
|
55
|
+
))).scaled(self.size(), Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
|
|
56
|
+
self._background_pixmap = set_opacity(self._background_pixmap, Constants.RBEESOFT_SPLASH_SCREEN_BACKGROUND_IMAGE_OPACITY)
|
|
57
|
+
return self._background_pixmap
|
|
58
|
+
|
|
59
|
+
def title_label(self):
|
|
60
|
+
if not self._title_label:
|
|
61
|
+
self._title_label = QLabel(Constants.RBEESOFT_SPLASH_SCREEN_TITLE)
|
|
62
|
+
self._title_label.setStyleSheet(Constants.RBEESOFT_SPLASH_SCREEN_TITLE_STYLE_SHEET)
|
|
63
|
+
self._title_label.setAlignment(Qt.AlignCenter)
|
|
64
|
+
return self._title_label
|
|
65
|
+
|
|
66
|
+
def sub_text_label(self):
|
|
67
|
+
if not self._sub_text_label:
|
|
68
|
+
self._sub_text_label = QLabel(Constants.RBEESOFT_SPLASH_SCREEN_SUB_TEXT)
|
|
69
|
+
self._sub_text_label.setStyleSheet(Constants.RBEESOFT_SPLASH_SCREEN_SUB_TEXT_STYLE_SHEET)
|
|
70
|
+
self._sub_text_label.setAlignment(Qt.AlignCenter)
|
|
71
|
+
return self._sub_text_label
|
|
72
|
+
|
|
73
|
+
def start_app_button(self):
|
|
74
|
+
if not self._start_app_button:
|
|
75
|
+
self._start_app_button = QPushButton(Constants.RBEESOFT_SPLASH_SCREEN_START_APP_BUTTON_TEXT)
|
|
76
|
+
self._start_app_button.clicked.connect(self.handle_start_app_button)
|
|
77
|
+
return self._start_app_button
|
|
78
|
+
|
|
79
|
+
def donate_button(self):
|
|
80
|
+
if not self._donate_button:
|
|
81
|
+
self._donate_button = QPushButton(Constants.RBEESOFT_DONATE_BUTTON_TEXT)
|
|
82
|
+
self._donate_button.setStyleSheet(Constants.RBEESOFT_DONATE_BUTTON_STYLESHEET)
|
|
83
|
+
self._donate_button.clicked.connect(self.handle_donate_button)
|
|
84
|
+
return self._donate_button
|
|
85
|
+
|
|
86
|
+
def close_button(self):
|
|
87
|
+
if not self._close_button:
|
|
88
|
+
self._close_button = QPushButton(Constants.RBEESOFT_SPLASH_SCREEN_CLOSE_BUTTON_TEXT)
|
|
89
|
+
self._close_button.clicked.connect(self.handle_close_button)
|
|
90
|
+
return self._close_button
|
|
91
|
+
|
|
92
|
+
# LAYOUT
|
|
93
|
+
|
|
94
|
+
def init_layout(self):
|
|
95
|
+
layout = QVBoxLayout()
|
|
96
|
+
layout.addWidget(self.title_label())
|
|
97
|
+
layout.addWidget(self.sub_text_label())
|
|
98
|
+
layout.addWidget(self.start_app_button())
|
|
99
|
+
# layout.addWidget(self.donate_button())
|
|
100
|
+
layout.addWidget(self.close_button())
|
|
101
|
+
self.setLayout(layout)
|
|
102
|
+
self.setFixedSize(Constants.RBEESOFT_SPLASH_SCREEN_WINDOW_W, Constants.RBEESOFT_SPLASH_SCREEN_WINDOW_H)
|
|
103
|
+
self.setWindowFlags(Qt.FramelessWindowHint)
|
|
104
|
+
|
|
105
|
+
# EVENT HANDLERS
|
|
106
|
+
|
|
107
|
+
def handle_start_app_button(self):
|
|
108
|
+
self.close()
|
|
109
|
+
self.main_window().show()
|
|
110
|
+
|
|
111
|
+
def handle_donate_button(self):
|
|
112
|
+
webbrowser.open(Constants.RBEESOFT_DONATE_URL)
|
|
113
|
+
|
|
114
|
+
def handle_close_button(self):
|
|
115
|
+
self.close()
|
|
116
|
+
|
|
117
|
+
def resizeEvent(self, event):
|
|
118
|
+
super().resizeEvent(event)
|
|
119
|
+
scaled = self.background_pixmap().scaled(self.size(), Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation)
|
|
120
|
+
self.background_label().setPixmap(scaled)
|
|
121
|
+
self.background_label().setGeometry(0, 0, self.width(), self.height())
|
rbeesoft/ui/constants.py
CHANGED
|
@@ -1,44 +1,45 @@
|
|
|
1
|
-
from PySide6.QtWidgets import QStyle
|
|
2
|
-
|
|
3
|
-
from rbeesoft.ui.utils import is_macos
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
1
|
+
from PySide6.QtWidgets import QStyle
|
|
2
|
+
|
|
3
|
+
from rbeesoft.ui.utils import is_macos
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Constants:
|
|
7
|
+
# MAIN APPLICATION
|
|
8
|
+
RBEESOFT_WINDOW_TITLE = 'Rbeesoft'
|
|
9
|
+
RBEESOFT_NAME = 'rbeesoft'
|
|
10
|
+
RBEESOFT_BUNDLE_IDENTIFIER = 'com.rbeesoft'
|
|
11
|
+
RBEESOFT_WINDOW_W = 1024
|
|
12
|
+
RBEESOFT_WINDOW_H = 600
|
|
13
|
+
RBEESOFT_WINDOW_GEOMETRY_KEY = 'window/geometry'
|
|
14
|
+
RBEESOFT_WINDOW_STATE_KEY = 'window/state'
|
|
15
|
+
RBEESOFT_STATUS_READY = 'Ready'
|
|
16
|
+
RBEESOFT_DONATE_URL = 'https://rbeesoft.nl/wordpress/'
|
|
17
|
+
RBEESOFT_DONATE_BUTTON_TEXT = 'If you wish to support us, please consider a donation by clicking here!'
|
|
18
|
+
RBEESOFT_DONATE_BUTTON_STYLESHEET = 'background-color: blue; color: white; font-weight: bold;'
|
|
19
|
+
RBEESOFT_LAST_DIRECTORY_KEY = 'last_directory'
|
|
20
|
+
# https://www.pythonguis.com/faq/built-in-qicons-pyqt/#qt-standard-icons
|
|
21
|
+
RBEESOFT_ICON_EXIT = QStyle.SP_MessageBoxCritical
|
|
22
|
+
RBEESOFT_ICON_SETTINGS = QStyle.SP_VistaShield
|
|
23
|
+
|
|
24
|
+
# RESOURCES
|
|
25
|
+
RBEESOFT_RESOURCES_DIR = 'rbeesoft/resources'
|
|
26
|
+
RBEESOFT_RESOURCES_IMAGES_DIR = 'rbeesoft/resources/images'
|
|
27
|
+
RBEESOFT_RESOURCES_IMAGES_ICONS_DIR = 'rbeesoft/resources/images/icons'
|
|
28
|
+
RBEESOFT_RESOURCES_ICON = 'rbeesoft.icns' if is_macos() else 'rbeesoft.ico'
|
|
29
|
+
|
|
30
|
+
# MENUS
|
|
31
|
+
RBEESOFT_APP_MENU_TEXT = 'Application'
|
|
32
|
+
RBEESOFT_APP_MENU_OPEN_SETTINGS_PANEL_ACTION_TEXT = 'Settings...'
|
|
33
|
+
RBEESOFT_APP_MENU_EXIT_ACTION_TEXT = 'Exit'
|
|
34
|
+
|
|
35
|
+
# PANELS
|
|
36
|
+
RBEESOFT_MAIN_PANEL_NAME = 'mainpanel'
|
|
37
|
+
RBEESOFT_MAIN_PANEL_NAME_TITLE_LABEL_STYLESHEET = 'color: black; font-weight: bold; font-size: 14pt;'
|
|
38
|
+
RBEESOFT_LOG_PANEL_TITLE = 'Output log'
|
|
39
|
+
RBEESOFT_LOG_PANEL_NAME = 'logpanel'
|
|
40
|
+
RBEESOFT_LOG_PANEL_CLEAR_LOGS_BUTTON = 'Clear logs'
|
|
41
|
+
RBEESOFT_SETTINGS_PANEL_TITLE = 'Settings'
|
|
42
|
+
RBEESOFT_SETTINGS_PANEL_NAME ='settingspanel'
|
|
43
|
+
RBEESOFT_SETTINGS_PANEL_NAME_COLUMN_NAME = 'NAME'
|
|
44
|
+
RBEESOFT_SETTINGS_PANEL_VALUE_COLUMN_NAME = 'VALUE'
|
|
45
|
+
RBEESOFT_SETTINGS_PANEL_CANNOT_DISPLAY_MESSAGE = 'Cannot display (binary data)'
|
rbeesoft/ui/mainwindow.py
CHANGED
|
@@ -1,127 +1,66 @@
|
|
|
1
|
-
import os
|
|
2
|
-
|
|
3
|
-
from PySide6.QtWidgets import (
|
|
4
|
-
QMainWindow,
|
|
5
|
-
)
|
|
6
|
-
from PySide6.QtGui import (
|
|
7
|
-
QGuiApplication,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
self.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
self.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
self.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
self._settings = Settings()
|
|
67
|
-
return self._settings
|
|
68
|
-
|
|
69
|
-
def main_panel(self):
|
|
70
|
-
if not self._main_panel:
|
|
71
|
-
self._main_panel = MainPanel(self)
|
|
72
|
-
self._main_panel.add_panel(
|
|
73
|
-
self.settings_panel(), constants.RBEESOFT_SETTINGS_PANEL_NAME)
|
|
74
|
-
self._main_panel.select_panel(constants.RBEESOFT_SETTINGS_PANEL_NAME)
|
|
75
|
-
return self._main_panel
|
|
76
|
-
|
|
77
|
-
def settings_panel(self):
|
|
78
|
-
if not self._settings_panel:
|
|
79
|
-
self._settings_panel = SettingsPanel()
|
|
80
|
-
return self._settings_panel
|
|
81
|
-
|
|
82
|
-
def log_panel(self):
|
|
83
|
-
if not self._log_panel:
|
|
84
|
-
self._log_panel = LogPanel()
|
|
85
|
-
LOG.add_listener(self._log_panel)
|
|
86
|
-
return self._log_panel
|
|
87
|
-
|
|
88
|
-
# SETTERS
|
|
89
|
-
|
|
90
|
-
def set_status(self, message):
|
|
91
|
-
self.statusBar().showMessage(message)
|
|
92
|
-
|
|
93
|
-
# EVENT HANDLERS
|
|
94
|
-
|
|
95
|
-
def handle_open_settings_panel_action(self):
|
|
96
|
-
self.main_panel().select_panel(constants.RBEESOFT_SETTINGS_PANEL_NAME)
|
|
97
|
-
|
|
98
|
-
def closeEvent(self, event):
|
|
99
|
-
self.save_geometry_and_state()
|
|
100
|
-
return super().closeEvent(event)
|
|
101
|
-
|
|
102
|
-
# MISCELLANEOUS
|
|
103
|
-
|
|
104
|
-
def load_geometry_and_state(self):
|
|
105
|
-
geometry = self.settings().get(constants.RBEESOFT_WINDOW_GEOMETRY_KEY)
|
|
106
|
-
state = self.settings().get(constants.RBEESOFT_WINDOW_STATE_KEY)
|
|
107
|
-
if isinstance(geometry, QByteArray) and self.restoreGeometry(geometry):
|
|
108
|
-
if isinstance(state, QByteArray):
|
|
109
|
-
self.restoreState(state)
|
|
110
|
-
return True
|
|
111
|
-
return False
|
|
112
|
-
|
|
113
|
-
def save_geometry_and_state(self):
|
|
114
|
-
self.settings().set(
|
|
115
|
-
constants.RBEESOFT_WINDOW_GEOMETRY_KEY, self.saveGeometry())
|
|
116
|
-
self.settings().set(
|
|
117
|
-
constants.RBEESOFT_WINDOW_STATE_KEY, self.saveState())
|
|
118
|
-
|
|
119
|
-
def set_default_size_and_position(self):
|
|
120
|
-
self.resize(constants.RBEESOFT_WINDOW_W, constants.RBEESOFT_WINDOW_H)
|
|
121
|
-
self.center_window()
|
|
122
|
-
|
|
123
|
-
def center_window(self):
|
|
124
|
-
screen = QGuiApplication.primaryScreen().geometry()
|
|
125
|
-
x = (screen.width() - self.geometry().width()) / 2
|
|
126
|
-
y = (screen.height() - self.geometry().height()) / 2
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from PySide6.QtWidgets import (
|
|
4
|
+
QMainWindow,
|
|
5
|
+
)
|
|
6
|
+
from PySide6.QtGui import (
|
|
7
|
+
QGuiApplication,
|
|
8
|
+
QIcon,
|
|
9
|
+
)
|
|
10
|
+
from PySide6.QtCore import Qt, QByteArray
|
|
11
|
+
|
|
12
|
+
from rbeesoft.ui.constants import Constants
|
|
13
|
+
from rbeesoft.ui.settings import Settings
|
|
14
|
+
from rbeesoft.ui.utils import resource_path, version
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class MainWindow(QMainWindow):
|
|
18
|
+
def __init__(self):
|
|
19
|
+
super(MainWindow, self).__init__()
|
|
20
|
+
self._settings = None
|
|
21
|
+
self.init_window()
|
|
22
|
+
|
|
23
|
+
def init_window(self):
|
|
24
|
+
self.setWindowTitle(f'{Constants.RBEESOFT_WINDOW_TITLE} {version(Constants.RBEESOFT_NAME)}')
|
|
25
|
+
self.setWindowIcon(QIcon(resource_path(os.path.join(
|
|
26
|
+
Constants.RBEESOFT_RESOURCES_IMAGES_ICONS_DIR, Constants.RBEESOFT_RESOURCES_ICON))))
|
|
27
|
+
if not self.load_geometry_and_state():
|
|
28
|
+
self.set_default_size_and_position()
|
|
29
|
+
|
|
30
|
+
# GETTERS
|
|
31
|
+
|
|
32
|
+
def settings(self):
|
|
33
|
+
if not self._settings:
|
|
34
|
+
self._settings = Settings()
|
|
35
|
+
return self._settings
|
|
36
|
+
|
|
37
|
+
def closeEvent(self, event):
|
|
38
|
+
self.save_geometry_and_state()
|
|
39
|
+
return super().closeEvent(event)
|
|
40
|
+
|
|
41
|
+
# MISCELLANEOUS
|
|
42
|
+
|
|
43
|
+
def load_geometry_and_state(self):
|
|
44
|
+
geometry = self.settings().get(Constants.RBEESOFT_WINDOW_GEOMETRY_KEY)
|
|
45
|
+
state = self.settings().get(Constants.RBEESOFT_WINDOW_STATE_KEY)
|
|
46
|
+
if isinstance(geometry, QByteArray) and self.restoreGeometry(geometry):
|
|
47
|
+
if isinstance(state, QByteArray):
|
|
48
|
+
self.restoreState(state)
|
|
49
|
+
return True
|
|
50
|
+
return False
|
|
51
|
+
|
|
52
|
+
def save_geometry_and_state(self):
|
|
53
|
+
self.settings().set(
|
|
54
|
+
Constants.RBEESOFT_WINDOW_GEOMETRY_KEY, self.saveGeometry())
|
|
55
|
+
self.settings().set(
|
|
56
|
+
Constants.RBEESOFT_WINDOW_STATE_KEY, self.saveState())
|
|
57
|
+
|
|
58
|
+
def set_default_size_and_position(self):
|
|
59
|
+
self.resize(Constants.RBEESOFT_WINDOW_W, Constants.RBEESOFT_WINDOW_H)
|
|
60
|
+
self.center_window()
|
|
61
|
+
|
|
62
|
+
def center_window(self):
|
|
63
|
+
screen = QGuiApplication.primaryScreen().geometry()
|
|
64
|
+
x = (screen.width() - self.geometry().width()) / 2
|
|
65
|
+
y = (screen.height() - self.geometry().height()) / 2
|
|
127
66
|
self.move(int(x), int(y))
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
from PySide6.QtWidgets import QWidget
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class DefaultPanel(QWidget):
|
|
5
|
-
def __init__(self):
|
|
6
|
-
super(DefaultPanel, self).__init__()
|
|
7
|
-
self._title = None
|
|
8
|
-
|
|
9
|
-
def title(self):
|
|
10
|
-
return self._title
|
|
11
|
-
|
|
12
|
-
def set_title(self, title):
|
|
1
|
+
from PySide6.QtWidgets import QWidget
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class DefaultPanel(QWidget):
|
|
5
|
+
def __init__(self):
|
|
6
|
+
super(DefaultPanel, self).__init__()
|
|
7
|
+
self._title = None
|
|
8
|
+
|
|
9
|
+
def title(self):
|
|
10
|
+
return self._title
|
|
11
|
+
|
|
12
|
+
def set_title(self, title):
|
|
13
13
|
self._title = title
|