qcanvas 1.0.6a5__tar.gz → 1.0.6a7__tar.gz

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.

Potentially problematic release.


This version of qcanvas might be problematic. Click here for more details.

Files changed (66) hide show
  1. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/PKG-INFO +1 -1
  2. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/pyproject.toml +1 -1
  3. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/app_start/__init__.py +2 -5
  4. qcanvas-1.0.6a7/qcanvas/ui/main_ui/options/theme_selection_menu.py +44 -0
  5. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/main_ui/qcanvas_window.py +2 -0
  6. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/paths.py +2 -2
  7. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/settings/_ui_settings.py +2 -10
  8. qcanvas-1.0.6a7/qcanvas/util/themes.py +24 -0
  9. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/README.md +0 -0
  10. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/__init__.py +0 -0
  11. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/backend_connectors/__init__.py +0 -0
  12. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/backend_connectors/frontend_resource_manager.py +0 -0
  13. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/backend_connectors/qcanvas_task_master.py +0 -0
  14. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/icons/__init__.py +0 -0
  15. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/icons/file-download-failed.svg +0 -0
  16. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/icons/file-downloaded.svg +0 -0
  17. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/icons/file-not-downloaded.svg +0 -0
  18. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/icons/file-unknown.svg +0 -0
  19. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/icons/icons.qrc +0 -0
  20. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/icons/main_icon.svg +0 -0
  21. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/icons/rc_icons.py +0 -0
  22. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/icons/sync.svg +0 -0
  23. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/run.py +0 -0
  24. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/__init__.py +0 -0
  25. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/__init__.py +0 -0
  26. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/content_tree.py +0 -0
  27. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/course_tree.py +0 -0
  28. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/course_viewer.py +0 -0
  29. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/__init__.py +0 -0
  30. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/assignment_tab/__init__.py +0 -0
  31. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tab.py +0 -0
  32. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tree.py +0 -0
  33. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/content_tab.py +0 -0
  34. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/mail_tab/__init__.py +0 -0
  35. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/mail_tab/mail_tab.py +0 -0
  36. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/mail_tab/mail_tree.py +0 -0
  37. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/page_tab/__init__.py +0 -0
  38. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/page_tab/page_tab.py +0 -0
  39. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/page_tab/page_tree.py +0 -0
  40. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/resource_rich_browser.py +0 -0
  41. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/course_viewer/tabs/util.py +0 -0
  42. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/main_ui/__init__.py +0 -0
  43. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/main_ui/course_viewer_container.py +0 -0
  44. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/main_ui/options/__init__.py +0 -0
  45. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/main_ui/options/quick_sync_option.py +0 -0
  46. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/main_ui/options/sync_on_start_option.py +0 -0
  47. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/main_ui/status_bar_progress_display.py +0 -0
  48. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/memory_tree/__init__.py +0 -0
  49. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/memory_tree/_tree_memory.py +0 -0
  50. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/memory_tree/memory_tree_widget.py +0 -0
  51. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/memory_tree/memory_tree_widget_item.py +0 -0
  52. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/setup/__init__.py +0 -0
  53. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/setup/setup_checker.py +0 -0
  54. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/ui/setup/setup_dialog.py +0 -0
  55. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/__init__.py +0 -0
  56. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/basic_fonts.py +0 -0
  57. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/fe_resource_manager.py +0 -0
  58. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/html_cleaner.py +0 -0
  59. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/layouts.py +0 -0
  60. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/logs.py +0 -0
  61. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/qurl_util.py +0 -0
  62. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/settings/__init__.py +0 -0
  63. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/settings/_client_settings.py +0 -0
  64. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/settings/_mapped_setting.py +0 -0
  65. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/ui_tools.py +0 -0
  66. {qcanvas-1.0.6a5 → qcanvas-1.0.6a7}/qcanvas/util/url_checker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qcanvas
3
- Version: 1.0.6a5
3
+ Version: 1.0.6a7
4
4
  Summary: QCanvas is a desktop client for Canvas LMS.
5
5
  Author: QCanvas
6
6
  Author-email: QCanvas@noreply.codeberg.org
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "qcanvas"
3
- version = "1.0.6a5"
3
+ version = "1.0.6a7"
4
4
  description = "QCanvas is a desktop client for Canvas LMS."
5
5
  authors = ["QCanvas <QCanvas@noreply.codeberg.org>"]
6
6
  readme = "README.md"
@@ -8,6 +8,7 @@ from qtpy.QtWidgets import QApplication
8
8
  import qcanvas.backend_connectors.qcanvas_task_master as task_master
9
9
  from qcanvas.ui.main_ui.qcanvas_window import QCanvasWindow
10
10
  from qcanvas.ui.setup import SetupDialog, setup_checker
11
+ from qcanvas.util import themes, settings
11
12
 
12
13
  main_window = None
13
14
  setup_window = None
@@ -24,11 +25,7 @@ def launch():
24
25
  app.setApplicationName("QCanvas")
25
26
 
26
27
  task_master.register()
27
-
28
- # qdarktheme.setup_theme(
29
- # "auto",
30
- # custom_colors={"primary": "e02424"},
31
- # )
28
+ themes.apply(settings.ui.theme)
32
29
 
33
30
  event_loop = QEventLoop(app)
34
31
  asyncio.set_event_loop(event_loop)
@@ -0,0 +1,44 @@
1
+ import logging
2
+
3
+ from qtpy.QtCore import Slot
4
+ from qtpy.QtGui import QAction
5
+ from qtpy.QtGui import QActionGroup
6
+ from qtpy.QtWidgets import QMenu
7
+
8
+ from qcanvas.util import themes, settings
9
+
10
+ _logger = logging.getLogger(__name__)
11
+
12
+
13
+ class _ThemeAction(QAction):
14
+ def __init__(self, theme_text: str, theme_name: str, parent: QMenu):
15
+ super().__init__(theme_text, parent)
16
+ self._theme_name = theme_name
17
+ self.setCheckable(True)
18
+ self.setChecked(self._theme_name == settings.ui.theme)
19
+ self.triggered.connect(self._change_theme)
20
+
21
+ @Slot()
22
+ def _change_theme(self) -> None:
23
+ settings.ui.theme = self._theme_name
24
+ themes.apply(self._theme_name)
25
+
26
+
27
+ class ThemeSelectionMenu(QMenu):
28
+
29
+ def __init__(self, parent: QMenu):
30
+ super().__init__("Theme", parent)
31
+
32
+ action_group = QActionGroup(self)
33
+
34
+ auto_theme = _ThemeAction("Auto", "auto", self)
35
+ light_theme = _ThemeAction("Light", "light", self)
36
+ dark_theme = _ThemeAction("Dark", "dark", self)
37
+ native_theme = _ThemeAction("Native (requires restart)", "native", self)
38
+
39
+ actions = [auto_theme, light_theme, dark_theme, native_theme]
40
+
41
+ self.addActions(actions)
42
+
43
+ for theme in actions:
44
+ action_group.addAction(theme)
@@ -17,6 +17,7 @@ from qcanvas.ui.course_viewer import CourseTree
17
17
  from qcanvas.ui.main_ui.course_viewer_container import CourseViewerContainer
18
18
  from qcanvas.ui.main_ui.options.quick_sync_option import QuickSyncOption
19
19
  from qcanvas.ui.main_ui.options.sync_on_start_option import SyncOnStartOption
20
+ from qcanvas.ui.main_ui.options.theme_selection_menu import ThemeSelectionMenu
20
21
  from qcanvas.ui.main_ui.status_bar_progress_display import StatusBarProgressDisplay
21
22
  from qcanvas.util import paths, settings
22
23
  from qcanvas.util.qurl_util import file_url
@@ -100,6 +101,7 @@ class QCanvasWindow(QMainWindow):
100
101
 
101
102
  options_menu.addAction(QuickSyncOption(options_menu))
102
103
  options_menu.addAction(SyncOnStartOption(options_menu))
104
+ options_menu.addMenu(ThemeSelectionMenu(self))
103
105
 
104
106
  def _restore_window_position(self):
105
107
  if settings.ui.last_geometry is not None:
@@ -35,8 +35,8 @@ def root() -> Path:
35
35
  elif _is_running_as_pyinstaller:
36
36
  root_path = platformdirs.user_data_path("QCanvasReborn", "QCanvasTeam")
37
37
 
38
+ print("Root path", root_path.absolute())
38
39
  _logger.debug("Root path %s", root_path.absolute())
39
- print(root_path.absolute())
40
40
  return root_path
41
41
 
42
42
 
@@ -45,4 +45,4 @@ def ui_storage() -> Path:
45
45
 
46
46
 
47
47
  def data_storage() -> Path:
48
- return root() / ".DATA"
48
+ return root()
@@ -3,22 +3,14 @@ import logging
3
3
  from qtpy.QtCore import QByteArray, QSettings
4
4
 
5
5
  from qcanvas.util.settings._mapped_setting import MappedSetting
6
+ from qcanvas.util.themes import ensure_theme_is_valid, default_theme
6
7
 
7
8
  _logger = logging.getLogger(__name__)
8
9
 
9
- _default_theme = "auto"
10
-
11
-
12
- def ensure_theme_is_valid(theme: str) -> str:
13
- if theme not in ["auto", "light", "dark", "native"]:
14
- return _default_theme
15
- else:
16
- return theme
17
-
18
10
 
19
11
  class ThemeSetting(MappedSetting):
20
12
  def __init__(self):
21
- super().__init__(default=_default_theme)
13
+ super().__init__(default=default_theme)
22
14
 
23
15
  def __get__(self, instance, owner):
24
16
  return ensure_theme_is_valid(super().__get__(instance, owner))
@@ -0,0 +1,24 @@
1
+ import logging
2
+
3
+ import qdarktheme
4
+
5
+ _logger = logging.getLogger(__name__)
6
+
7
+ default_theme = "auto"
8
+
9
+
10
+ def ensure_theme_is_valid(theme: str) -> str:
11
+ if theme not in ["auto", "light", "dark", "native"]:
12
+ return default_theme
13
+ else:
14
+ return theme
15
+
16
+
17
+ def apply(theme: str) -> None:
18
+ theme = ensure_theme_is_valid(theme)
19
+
20
+ if theme != "native":
21
+ qdarktheme.setup_theme(
22
+ theme,
23
+ custom_colors={"primary": "e02424"},
24
+ )
File without changes
File without changes
File without changes