rbeesoft 1.0.8__py3-none-any.whl → 2.0.0__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.
Files changed (39) hide show
  1. rbeesoft/app/main.py +60 -0
  2. rbeesoft/app/ui/rbeesoftmainwindow.py +77 -0
  3. rbeesoft/app/ui/settings.py +61 -0
  4. rbeesoft/app/ui/widgets/centraldockwidget.py +51 -0
  5. rbeesoft/{ui/panels/logpanel.py → app/ui/widgets/logdockwidget.py} +18 -11
  6. rbeesoft/app/ui/widgets/pages/page.py +24 -0
  7. rbeesoft/app/ui/widgets/pages/pagerouter.py +48 -0
  8. rbeesoft/common/__init__.py +0 -0
  9. rbeesoft/{core/utils → common}/logmanager.py +12 -2
  10. rbeesoft/webapp/__init__.py +0 -0
  11. rbeesoft-2.0.0.dist-info/METADATA +13 -0
  12. rbeesoft-2.0.0.dist-info/RECORD +21 -0
  13. {rbeesoft-1.0.8.dist-info → rbeesoft-2.0.0.dist-info}/WHEEL +1 -1
  14. rbeesoft/app.py +0 -23
  15. rbeesoft/core/utils/functions.py +0 -10
  16. rbeesoft/resources/VERSION +0 -1
  17. rbeesoft/resources/icons/rbeesoft.icns +0 -0
  18. rbeesoft/resources/icons/rbeesoft.ico +0 -0
  19. rbeesoft/resources/icons/spinner.gif +0 -0
  20. rbeesoft/ui/components/splashscreen.py +0 -121
  21. rbeesoft/ui/constants.py +0 -45
  22. rbeesoft/ui/mainwindow.py +0 -84
  23. rbeesoft/ui/panels/defaultpanel.py +0 -13
  24. rbeesoft/ui/panels/mainpanel.py +0 -81
  25. rbeesoft/ui/panels/settingspanel.py +0 -62
  26. rbeesoft/ui/panels/stackedpanel.py +0 -22
  27. rbeesoft/ui/settings.py +0 -32
  28. rbeesoft/ui/utils.py +0 -32
  29. rbeesoft-1.0.8.dist-info/LICENSE +0 -674
  30. rbeesoft-1.0.8.dist-info/METADATA +0 -18
  31. rbeesoft-1.0.8.dist-info/RECORD +0 -30
  32. rbeesoft-1.0.8.dist-info/entry_points.txt +0 -3
  33. /rbeesoft/{core → app}/__init__.py +0 -0
  34. /rbeesoft/{ui → app/core}/__init__.py +0 -0
  35. /rbeesoft/{ui/components → app/ui}/__init__.py +0 -0
  36. /rbeesoft/{ui/panels → app/ui/widgets}/__init__.py +0 -0
  37. /rbeesoft/{core/utils/___init__.py → app/ui/widgets/pages/__init__.py} +0 -0
  38. /rbeesoft/{core/utils → common}/logmanagerlistener.py +0 -0
  39. /rbeesoft/{core → common}/singleton.py +0 -0
rbeesoft/app/main.py ADDED
@@ -0,0 +1,60 @@
1
+ import sys
2
+ from PySide6 import QtWidgets, QtCore
3
+ from rbeesoft.app.ui.rbeesoftmainwindow import RbeesoftMainWindow
4
+ from rbeesoft.app.ui.widgets.pages.page import Page
5
+
6
+
7
+ class MainWindow(RbeesoftMainWindow):
8
+ def __init__(self, app_icon):
9
+ super(MainWindow, self).__init__(
10
+ bundle_identifier='rbeesoft.nl',
11
+ app_name='example',
12
+ app_title='Rbeesoft App Example',
13
+ width=800,
14
+ height=600,
15
+ app_icon=app_icon,
16
+ )
17
+ self.add_page(HomePage(self.settings()), home_page=True)
18
+ self.add_page(NextPage(self.settings()))
19
+
20
+
21
+ class HomePage(Page):
22
+ def __init__(self, settings):
23
+ super(HomePage, self).__init__('home', 'HomePage', settings)
24
+ button = QtWidgets.QPushButton('Go to next page')
25
+ button.clicked.connect(self.handle_button)
26
+ layout = QtWidgets.QVBoxLayout()
27
+ layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop)
28
+ layout.addWidget(QtWidgets.QLabel(self.title()))
29
+ layout.addWidget(button)
30
+ self.setLayout(layout)
31
+
32
+ def handle_button(self):
33
+ self.switch_to_page('next')
34
+
35
+
36
+ class NextPage(Page):
37
+ def __init__(self, settings):
38
+ super(NextPage, self).__init__('next', 'NextPage', settings)
39
+ button = QtWidgets.QPushButton('Go to home page')
40
+ button.clicked.connect(self.handle_button)
41
+ layout = QtWidgets.QVBoxLayout()
42
+ layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop)
43
+ layout.addWidget(QtWidgets.QLabel(self.title()))
44
+ layout.addWidget(button)
45
+ self.setLayout(layout)
46
+
47
+ def handle_button(self):
48
+ self.switch_to_page('home')
49
+
50
+
51
+ def main():
52
+ QtWidgets.QApplication.setApplicationName('example')
53
+ app = QtWidgets.QApplication(sys.argv)
54
+ window = MainWindow(app.style().standardIcon(QtWidgets.QStyle.StandardPixmap.SP_ArrowForward))
55
+ window.show()
56
+ sys.exit(app.exec())
57
+
58
+
59
+ if __name__ == '__main__':
60
+ main()
@@ -0,0 +1,77 @@
1
+ from PySide6.QtCore import Qt, QByteArray
2
+ from PySide6.QtWidgets import QMainWindow, QStyle
3
+ from PySide6.QtGui import QGuiApplication, QAction
4
+ from rbeesoft.app.ui.settings import Settings
5
+ from rbeesoft.app.ui.widgets.centraldockwidget import CentralDockWidget
6
+ from rbeesoft.app.ui.widgets.logdockwidget import LogDockWidget
7
+ from rbeesoft.common.logmanager import LogManager
8
+
9
+ LOG = LogManager()
10
+
11
+
12
+ class RbeesoftMainWindow(QMainWindow):
13
+ def __init__(self, bundle_identifier, app_name, app_title, width=1024, height=1024, app_icon=None):
14
+ super(RbeesoftMainWindow, self).__init__()
15
+ self._settings = Settings(bundle_identifier, app_name)
16
+ self._app_title = app_title
17
+ self._width = width
18
+ self._height = height
19
+ self._app_icon = app_icon
20
+ self._central_dockwidget = CentralDockWidget(self, self._settings)
21
+ self._log_dockwidget = LogDockWidget(self)
22
+ self.init()
23
+
24
+ # INITIALIZATION
25
+
26
+ def init(self):
27
+ self.setWindowTitle(self._app_title)
28
+ self.addDockWidget(Qt.DockWidgetArea.TopDockWidgetArea, self._central_dockwidget)
29
+ self.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, self._log_dockwidget)
30
+ if self._app_icon:
31
+ self.setWindowIcon(self._app_icon)
32
+ self.load_geometry_and_state()
33
+ self.init_default_menus()
34
+ self.statusBar().showMessage('Ready')
35
+ LOG.info(f'Settings path: {self.settings().fileName()}')
36
+
37
+ def init_default_menus(self):
38
+ exit_action_icon = self.style().standardIcon(QStyle.StandardPixmap.SP_DialogCloseButton)
39
+ exit_action = QAction(exit_action_icon, 'E&xit', self)
40
+ exit_action.triggered.connect(self.close)
41
+ application_menu = self.menuBar().addMenu('Application')
42
+ application_menu.addAction(exit_action)
43
+
44
+ # GETTERS
45
+
46
+ def settings(self):
47
+ return self._settings
48
+
49
+ # EVENT HANDLERS
50
+
51
+ def closeEvent(self, _):
52
+ self.save_geometry_and_state()
53
+
54
+ # HELPERS
55
+
56
+ def add_page(self, page, home_page=False):
57
+ self._central_dockwidget.add_page(page, home_page)
58
+
59
+ def load_geometry_and_state(self):
60
+ geometry = self.settings().get('mainwindow/geometry')
61
+ state = self.settings().get('mainwindow/state')
62
+ if isinstance(geometry, QByteArray) and self.restoreGeometry(geometry):
63
+ if isinstance(state, QByteArray):
64
+ self.restoreState(state)
65
+ return
66
+ self.resize(self._width, self._height)
67
+ self.center_window()
68
+
69
+ def save_geometry_and_state(self):
70
+ self.settings().set('mainwindow/geometry', self.saveGeometry())
71
+ self.settings().set('mainwindow/state', self.saveState())
72
+
73
+ def center_window(self):
74
+ screen = QGuiApplication.primaryScreen().geometry()
75
+ x = (screen.width() - self.geometry().width()) / 2
76
+ y = (screen.height() - self.geometry().height()) / 2
77
+ self.move(int(x), int(y))
@@ -0,0 +1,61 @@
1
+ from PySide6.QtCore import QSettings
2
+
3
+
4
+ class Settings(QSettings):
5
+ def __init__(self, bundle_identifier: str, app_name: str):
6
+ super(Settings, self).__init__(
7
+ QSettings.IniFormat,
8
+ QSettings.UserScope,
9
+ bundle_identifier,
10
+ app_name,
11
+ )
12
+ self._bundle_identifier = bundle_identifier
13
+ self._app_name = app_name
14
+
15
+ def _prepend_bundle_identifier_and_name(self, name):
16
+ return '{}.{}.{}'.format(self._bundle_identifier, self._app_name, name)
17
+
18
+ def get(self, name, default=None):
19
+ if not name.startswith(self._bundle_identifier):
20
+ name = self._prepend_bundle_identifier_and_name(name)
21
+ value = self.value(name)
22
+ if value is None or value == '':
23
+ return default
24
+ return value
25
+
26
+ def get_int(self, name, default=None):
27
+ try:
28
+ return int(self.get(name, default))
29
+ except ValueError as e:
30
+ return default
31
+
32
+ def get_float(self, name, default=None):
33
+ try:
34
+ return float(self.get(name, default))
35
+ except ValueError as e:
36
+ return default
37
+
38
+ def get_bool(self, name, default=None):
39
+ try:
40
+ value = self.get(name, default)
41
+ if value and isinstance(value, str):
42
+ if value == '0' or value.lower() == 'false':
43
+ return False
44
+ elif value == '1' or value.lower() == 'true':
45
+ return True
46
+ else:
47
+ return default
48
+ if value and isinstance(value, bool):
49
+ return value
50
+ except ValueError as e:
51
+ return default
52
+
53
+ def set(self, name, value):
54
+ name = self._prepend_bundle_identifier_and_name(name)
55
+ self.setValue(name, value)
56
+
57
+ def to_string(self):
58
+ text = f'Settings path: {self.fileName()}'
59
+ for key in self.allKeys():
60
+ text += f'\nSettings: {key}'
61
+ return text
@@ -0,0 +1,51 @@
1
+ from PySide6.QtWidgets import (
2
+ QWidget,
3
+ QVBoxLayout,
4
+ QDockWidget,
5
+ )
6
+ from rbeesoft.common.logmanager import LogManager
7
+ from rbeesoft.app.ui.widgets.pages.pagerouter import PageRouter
8
+
9
+ LOG = LogManager()
10
+
11
+
12
+ class CentralDockWidget(QDockWidget):
13
+ def __init__(self, parent, settings):
14
+ super(CentralDockWidget, self).__init__(parent)
15
+ self._settings = settings
16
+ self._page_router = None
17
+ self.init()
18
+
19
+ # INITIALIZATION
20
+
21
+ def init(self):
22
+ layout = QVBoxLayout()
23
+ layout.addWidget(self.page_router())
24
+ container = QWidget()
25
+ container.setLayout(layout)
26
+ self.setObjectName('centraldockwidget') # Needed for saving geometry/state
27
+ self.setWidget(container)
28
+
29
+ # GETTERS/SETTERS
30
+
31
+ def settings(self):
32
+ return self._settings
33
+
34
+ def page_router(self):
35
+ if not self._page_router:
36
+ self._page_router = PageRouter()
37
+ return self._page_router
38
+
39
+ # HELPERS
40
+
41
+ def add_page(self, page, home_page=False):
42
+ page.page_changed.connect(self.handle_page_changed)
43
+ self.page_router().add_page(page, home_page)
44
+
45
+ def switch_to_page(self, name):
46
+ self.page_router().switch_to_page(name)
47
+
48
+ # EVENT HANDLERS
49
+
50
+ def handle_page_changed(self, name):
51
+ self.switch_to_page(name)
@@ -6,22 +6,19 @@ from PySide6.QtWidgets import (
6
6
  QVBoxLayout,
7
7
  QLabel,
8
8
  )
9
+ from rbeesoft.common.logmanagerlistener import LogManagerListener
9
10
 
10
- from rbeesoft.ui.constants import Constants
11
11
 
12
- from rbeesoft.core.utils.logmanagerlistener import LogManagerListener
13
-
14
-
15
- class LogPanel(QDockWidget, LogManagerListener):
16
- def __init__(self):
17
- super(LogPanel, self).__init__()
12
+ class LogDockWidget(QDockWidget, LogManagerListener):
13
+ def __init__(self, parent):
14
+ super(LogDockWidget, self).__init__(parent)
18
15
  self._title_label = None
19
16
  self._text_edit = None
20
17
  self.init_layout()
21
18
 
22
19
  def title_label(self):
23
20
  if not self._title_label:
24
- self._title_label = QLabel(Constants.RBEESOFT_LOG_PANEL_TITLE)
21
+ self._title_label = QLabel('Output log')
25
22
  return self._title_label
26
23
 
27
24
  def text_edit(self):
@@ -30,20 +27,30 @@ class LogPanel(QDockWidget, LogManagerListener):
30
27
  return self._text_edit
31
28
 
32
29
  def init_layout(self):
33
- clear_logs_button = QPushButton(Constants.RBEESOFT_LOG_PANEL_CLEAR_LOGS_BUTTON)
30
+ clear_logs_button = QPushButton('Clear log')
34
31
  clear_logs_button.clicked.connect(self.handle_clear_logs_button)
35
32
  layout = QVBoxLayout()
36
- # layout.addWidget(self.title_label())
37
33
  layout.addWidget(self.text_edit())
38
34
  layout.addWidget(clear_logs_button)
39
35
  container = QWidget()
40
36
  container.setLayout(layout)
41
- self.setObjectName(Constants.RBEESOFT_LOG_PANEL_NAME)
37
+ self.setObjectName('logdockwidget') # Needed for save geometry/state
42
38
  self.setWindowTitle(self.title_label().text())
43
39
  self.setWidget(container)
44
40
 
41
+ # HELPERS
42
+
45
43
  def add_line(self, line):
46
44
  self.text_edit().insertPlainText(line + '\n')
45
+ self.move_to_end()
46
+
47
+ def move_to_end(self):
48
+ cursor = self.text_edit().textCursor()
49
+ cursor.movePosition(cursor.MoveOperation.End)
50
+ self.text_edit().setTextCursor(cursor)
51
+ self.text_edit().ensureCursorVisible()
52
+
53
+ # EVENTS
47
54
 
48
55
  def handle_clear_logs_button(self):
49
56
  self.text_edit().clear()
@@ -0,0 +1,24 @@
1
+ from PySide6.QtCore import Signal
2
+ from PySide6.QtWidgets import QWidget
3
+
4
+
5
+ class Page(QWidget):
6
+ page_changed = Signal(str)
7
+
8
+ def __init__(self, name, title, settings):
9
+ super(Page, self).__init__()
10
+ self._name = name
11
+ self._title = title
12
+ self._settings = settings
13
+
14
+ def name(self):
15
+ return self._name
16
+
17
+ def title(self):
18
+ return self._title
19
+
20
+ def settings(self):
21
+ return self._settings
22
+
23
+ def switch_to_page(self, name):
24
+ self.page_changed.emit(name)
@@ -0,0 +1,48 @@
1
+ from PySide6.QtWidgets import QStackedWidget
2
+
3
+
4
+ class PageRouter(QStackedWidget):
5
+ def __init__(self):
6
+ super(PageRouter, self).__init__()
7
+ self._pages = {}
8
+ self._home_page = None
9
+ self._current_page = None
10
+ self._previous_page = None
11
+
12
+ def pages(self):
13
+ return self._pages
14
+
15
+ def page(self, name):
16
+ if name in self.pages().keys():
17
+ return self.pages()[name]
18
+ return None
19
+
20
+ def home_page(self):
21
+ return self._home_page
22
+
23
+ def current_page(self):
24
+ return self._current_page
25
+
26
+ def previous_page(self):
27
+ return self._previous_page
28
+
29
+ def add_page(self, page, home_page=False):
30
+ if page.name() not in self.pages().keys():
31
+ self.pages()[page.name()] = page
32
+ if home_page:
33
+ self._home_page = page
34
+ self.addWidget(page)
35
+
36
+ def switch_to_page(self, name):
37
+ if self._current_page and name == self._current_page.name():
38
+ return
39
+ if self._current_page:
40
+ self._previous_page = self._current_page
41
+ self._current_page = self.page(name)
42
+ self.setCurrentWidget(self._current_page)
43
+
44
+ def switch_to_home(self):
45
+ if self._current_page:
46
+ self._previous_page = self._current_page
47
+ self._current_page = self._home_page
48
+ self.setCurrentWidget(self._current_page)
File without changes
@@ -1,6 +1,8 @@
1
+ import os
2
+ import atexit
1
3
  import datetime
2
-
3
- from rbeesoft.core.singleton import singleton
4
+ from pathlib import Path
5
+ from rbeesoft.common.singleton import singleton
4
6
 
5
7
 
6
8
  @singleton
@@ -8,12 +10,16 @@ class LogManager:
8
10
  def __init__(self, suppress_print=False):
9
11
  self._suppress_print = suppress_print
10
12
  self._listeners = []
13
+ file_path = os.path.join(Path.home(), 'mosamatic2.log')
14
+ self._file_handle = open(file_path, 'w', buffering=1)
15
+ atexit.register(self.close_file)
11
16
 
12
17
  def _log(self, level, message):
13
18
  timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
14
19
  message = f'[{timestamp}] {level} : {message}'
15
20
  if not self._suppress_print:
16
21
  print(message)
22
+ self._file_handle.write(message + '\n')
17
23
  self.notify_listeners(message)
18
24
  return message
19
25
 
@@ -33,3 +39,7 @@ class LogManager:
33
39
  def notify_listeners(self, message):
34
40
  for listener in self._listeners:
35
41
  listener.new_message(message)
42
+
43
+ def close_file(self):
44
+ if self._file_handle:
45
+ self._file_handle.close()
File without changes
@@ -0,0 +1,13 @@
1
+ Metadata-Version: 2.4
2
+ Name: rbeesoft
3
+ Version: 2.0.0
4
+ Summary:
5
+ Author: Brecheisen
6
+ Author-email: r.brecheisen@maastrichtuniversity.nl
7
+ Requires-Python: >=3.11,<3.12
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.11
10
+ Description-Content-Type: text/markdown
11
+
12
+ # rbeesoft
13
+ Python package with base classes for developing apps and webapps
@@ -0,0 +1,21 @@
1
+ rbeesoft/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ rbeesoft/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ rbeesoft/app/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ rbeesoft/app/main.py,sha256=QX9UadHzBYmKzv0--ZhFW6BixMp4qzsfZsKMqqB53iY,2014
5
+ rbeesoft/app/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ rbeesoft/app/ui/rbeesoftmainwindow.py,sha256=o40iwX8KO7QuZNHB12m8yMFtw6D21T02g3qNO09_3R4,3023
7
+ rbeesoft/app/ui/settings.py,sha256=9BV-nvq87xjp5JSyd0hvpj0E5duckFuWk0Mj3Fx0lnE,2062
8
+ rbeesoft/app/ui/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ rbeesoft/app/ui/widgets/centraldockwidget.py,sha256=kK0x-Sz4yz7D4icaIepWpAtct7ZQ9BNroi9EccAvABA,1376
10
+ rbeesoft/app/ui/widgets/logdockwidget.py,sha256=DZkQQitarE5B82qvNCSnUWDWXxhWsuTauboULFoh7eI,1810
11
+ rbeesoft/app/ui/widgets/pages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ rbeesoft/app/ui/widgets/pages/page.py,sha256=_YI8y-VP3MLz4C6xChIJhrDwZ2QbcQBY2g7zvAI8r4M,554
13
+ rbeesoft/app/ui/widgets/pages/pagerouter.py,sha256=L5EKEMWVibSI7IpabQBkLsCDw1xBt1wfYY50iR56VZA,1460
14
+ rbeesoft/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ rbeesoft/common/logmanager.py,sha256=K_qCbPjrzoV5le3KSvLOSSXYa-_MWLJ3FdFNTEGYSxg,1391
16
+ rbeesoft/common/logmanagerlistener.py,sha256=Gaig07yjBnyQq9I8sN85olTEeDCDyCFQnEJdwzvmgvc,99
17
+ rbeesoft/common/singleton.py,sha256=FV0k_LlOCmFhlWN6gf1c2x7YXWyd8-7DsIMvOKrI6NY,224
18
+ rbeesoft/webapp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ rbeesoft-2.0.0.dist-info/METADATA,sha256=7fJP3T2ye7SlKHcoMdRHeIIQnyL1KZ-T7OABvK3zI_Q,378
20
+ rbeesoft-2.0.0.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
21
+ rbeesoft-2.0.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.3.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
rbeesoft/app.py DELETED
@@ -1,23 +0,0 @@
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
- main()
@@ -1,10 +0,0 @@
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
- return name
@@ -1 +0,0 @@
1
- 1.0.0
Binary file
Binary file
Binary file
@@ -1,121 +0,0 @@
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())