qcanvas 1.2.0__py3-none-any.whl → 2026.1.19__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 (132) hide show
  1. qcanvas/__init__.py +60 -0
  2. qcanvas/app.py +72 -0
  3. qcanvas/backend_connectors/frontend_resource_manager.py +13 -5
  4. qcanvas/backend_connectors/qcanvas_task_master.py +2 -2
  5. qcanvas/icons/__init__.py +5 -5
  6. qcanvas/icons/_icon_type.py +1 -1
  7. qcanvas/icons/icons.qrc +39 -35
  8. qcanvas/icons/rc_icons.py +1298 -1197
  9. qcanvas/settings/__init__.py +6 -0
  10. qcanvas/{util/settings → settings}/_client_settings.py +4 -4
  11. qcanvas/settings/_course_settings.py +54 -0
  12. qcanvas/{util/settings → settings}/_mapped_setting.py +2 -5
  13. qcanvas/{util/settings → settings}/_ui_settings.py +5 -5
  14. qcanvas/theme.py +101 -0
  15. qcanvas/ui/course_viewer/content_tree.py +9 -12
  16. qcanvas/ui/course_viewer/course_tree/_course_icon_generator.py +3 -3
  17. qcanvas/ui/course_viewer/course_tree/course_tree.py +9 -8
  18. qcanvas/ui/course_viewer/course_viewer.py +42 -56
  19. qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tab.py +107 -29
  20. qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tree.py +4 -4
  21. qcanvas/ui/course_viewer/tabs/constants.py +1 -0
  22. qcanvas/ui/course_viewer/tabs/content_tab.py +33 -39
  23. qcanvas/ui/course_viewer/tabs/file_tab/file_tab.py +4 -4
  24. qcanvas/ui/course_viewer/tabs/file_tab/file_tree.py +7 -10
  25. qcanvas/ui/course_viewer/tabs/file_tab/pages_file_tree.py +6 -7
  26. qcanvas/ui/course_viewer/tabs/mail_tab/mail_tab.py +50 -27
  27. qcanvas/ui/course_viewer/tabs/mail_tab/mail_tree.py +7 -8
  28. qcanvas/ui/course_viewer/tabs/page_tab/page_tab.py +3 -3
  29. qcanvas/ui/course_viewer/tabs/page_tab/page_tree.py +5 -5
  30. qcanvas/ui/course_viewer/tabs/resource_rich_browser.py +18 -32
  31. qcanvas/ui/course_viewer/tree_widget_data_item.py +1 -1
  32. qcanvas/ui/memory_tree/_tree_memory.py +45 -42
  33. qcanvas/ui/memory_tree/memory_tree_widget.py +22 -18
  34. qcanvas/ui/memory_tree/memory_tree_widget_item.py +3 -3
  35. qcanvas/ui/qcanvas_window/__init__.py +1 -0
  36. qcanvas/ui/{main_ui → qcanvas_window}/course_viewer_container.py +10 -10
  37. qcanvas/ui/{main_ui → qcanvas_window}/options/auto_download_resources_option.py +5 -5
  38. qcanvas/ui/{main_ui → qcanvas_window}/options/quick_sync_option.py +7 -6
  39. qcanvas/ui/{main_ui → qcanvas_window}/options/sync_on_start_option.py +7 -6
  40. qcanvas/ui/{main_ui → qcanvas_window}/options/theme_selection_menu.py +10 -10
  41. qcanvas/ui/{main_ui → qcanvas_window}/qcanvas_window.py +57 -41
  42. qcanvas/ui/{main_ui → qcanvas_window}/status_bar_progress_display.py +5 -6
  43. qcanvas/ui/qml_components/__init__.py +4 -0
  44. qcanvas/ui/qml_components/attachments_pane.py +70 -0
  45. qcanvas/ui/qml_components/comments_pane.py +83 -0
  46. qcanvas/ui/qml_components/qml/AttachmentsList.ui.qml +15 -0
  47. qcanvas/ui/qml_components/qml/AttachmentsListDelegate.qml +77 -0
  48. qcanvas/ui/qml_components/qml/AttachmentsListModel.qml +19 -0
  49. qcanvas/ui/qml_components/qml/AttachmentsPane.qml +11 -0
  50. qcanvas/ui/qml_components/qml/CommentsList.ui.qml +15 -0
  51. qcanvas/ui/qml_components/qml/CommentsListDelegate.ui.qml +118 -0
  52. qcanvas/ui/qml_components/qml/CommentsListModel.qml +56 -0
  53. qcanvas/ui/qml_components/qml/CommentsPane.qml +11 -0
  54. qcanvas/ui/qml_components/qml/DecoratedText.ui.qml +44 -0
  55. qcanvas/ui/qml_components/qml/Spacer.ui.qml +7 -0
  56. qcanvas/ui/qml_components/qml/ThemedRectangle.qml +53 -0
  57. qcanvas/ui/qml_components/qml/__init__.py +3 -0
  58. qcanvas/ui/qml_components/qml/rc_qml.py +709 -0
  59. qcanvas/ui/qml_components/qml/rc_qml.qrc +16 -0
  60. qcanvas/ui/qml_components/qml_bridge_types.py +95 -0
  61. qcanvas/ui/qml_components/qml_pane.py +21 -0
  62. qcanvas/ui/setup/setup_checker.py +1 -1
  63. qcanvas/ui/setup/setup_dialog.py +28 -14
  64. qcanvas/util/auto_downloader.py +9 -7
  65. qcanvas/util/basic_fonts.py +2 -2
  66. qcanvas/util/context_dict.py +12 -0
  67. qcanvas/util/file_icons.py +11 -19
  68. qcanvas/util/layouts.py +5 -7
  69. qcanvas/util/paths.py +17 -6
  70. qcanvas/util/qurl_util.py +1 -1
  71. qcanvas/util/ui_tools.py +118 -8
  72. qcanvas/util/url_checker.py +1 -1
  73. qcanvas-2026.1.19.dist-info/METADATA +95 -0
  74. qcanvas-2026.1.19.dist-info/RECORD +92 -0
  75. {qcanvas-1.2.0.dist-info → qcanvas-2026.1.19.dist-info}/WHEEL +1 -1
  76. qcanvas-2026.1.19.dist-info/entry_points.txt +3 -0
  77. qcanvas/app_start/__init__.py +0 -59
  78. qcanvas/icons/_update_icons.py +0 -89
  79. qcanvas/icons/dark/actions/exit.svg +0 -3
  80. qcanvas/icons/dark/actions/mark_all_read.svg +0 -3
  81. qcanvas/icons/dark/actions/open_downloads.svg +0 -3
  82. qcanvas/icons/dark/actions/quick_login.svg +0 -3
  83. qcanvas/icons/dark/actions/sync.svg +0 -3
  84. qcanvas/icons/dark/branding/logo_transparent.svg +0 -303
  85. qcanvas/icons/dark/options/auto_download.svg +0 -3
  86. qcanvas/icons/dark/options/theme.svg +0 -3
  87. qcanvas/icons/dark/tabs/assignments.svg +0 -3
  88. qcanvas/icons/dark/tabs/mail.svg +0 -3
  89. qcanvas/icons/dark/tabs/pages.svg +0 -3
  90. qcanvas/icons/dark/tree_items/assignment.svg +0 -3
  91. qcanvas/icons/dark/tree_items/mail.svg +0 -3
  92. qcanvas/icons/dark/tree_items/module.svg +0 -3
  93. qcanvas/icons/dark/tree_items/page.svg +0 -3
  94. qcanvas/icons/light/actions/exit.svg +0 -3
  95. qcanvas/icons/light/actions/mark_all_read.svg +0 -3
  96. qcanvas/icons/light/actions/open_downloads.svg +0 -3
  97. qcanvas/icons/light/actions/quick_login.svg +0 -3
  98. qcanvas/icons/light/actions/sync.svg +0 -3
  99. qcanvas/icons/light/branding/logo_transparent.svg +0 -304
  100. qcanvas/icons/light/options/auto_download.svg +0 -3
  101. qcanvas/icons/light/options/ignore_old.svg +0 -3
  102. qcanvas/icons/light/options/include_videos.svg +0 -3
  103. qcanvas/icons/light/options/theme.svg +0 -3
  104. qcanvas/icons/light/tabs/assignments.svg +0 -3
  105. qcanvas/icons/light/tabs/mail.svg +0 -3
  106. qcanvas/icons/light/tabs/pages.svg +0 -3
  107. qcanvas/icons/light/tree_items/assignment.svg +0 -3
  108. qcanvas/icons/light/tree_items/mail.svg +0 -3
  109. qcanvas/icons/light/tree_items/module.svg +0 -3
  110. qcanvas/icons/light/tree_items/page.svg +0 -3
  111. qcanvas/icons/universal/branding/main_icon.svg +0 -325
  112. qcanvas/icons/universal/downloads/download_failed.svg +0 -23
  113. qcanvas/icons/universal/downloads/downloaded.svg +0 -23
  114. qcanvas/icons/universal/downloads/not_downloaded.svg +0 -23
  115. qcanvas/icons/universal/downloads/unknown.svg +0 -6
  116. qcanvas/icons/universal/tabs/assignments_new_content.svg +0 -3
  117. qcanvas/icons/universal/tabs/mail_new_content.svg +0 -3
  118. qcanvas/icons/universal/tabs/pages_new_content.svg +0 -3
  119. qcanvas/icons/universal/tree_items/semester.svg +0 -108
  120. qcanvas/run.py +0 -54
  121. qcanvas/ui/course_viewer/tabs/util.py +0 -11
  122. qcanvas/ui/main_ui/__init__.py +0 -0
  123. qcanvas/util/settings/__init__.py +0 -9
  124. qcanvas/util/themes/__init__.py +0 -2
  125. qcanvas/util/themes/_colour_scheme_helper.py +0 -38
  126. qcanvas/util/themes/_selected_theme.py +0 -10
  127. qcanvas/util/themes/_theme_changed_event.py +0 -17
  128. qcanvas/util/themes/_theme_changer.py +0 -86
  129. qcanvas-1.2.0.dist-info/METADATA +0 -71
  130. qcanvas-1.2.0.dist-info/RECORD +0 -118
  131. qcanvas-1.2.0.dist-info/entry_points.txt +0 -3
  132. /qcanvas/ui/{main_ui → qcanvas_window}/options/__init__.py +0 -0
@@ -0,0 +1,709 @@
1
+ # Resource object code (Python 3)
2
+ # Created by: object code
3
+ # Created by: The Resource Compiler for Qt version 6.8.1
4
+ # WARNING! All changes made in this file will be lost!
5
+
6
+ from PySide6 import QtCore
7
+
8
+ qt_resource_data = b"\
9
+ \x00\x00\x03O\
10
+ (\
11
+ \xb5/\xfd`d\x0b-\x1a\x00\x16gm# q\xdb\
12
+ \xccq\xe1\xe6\xd2\xb7\xd0\xfa\x906\x94\xdc\x14\xf9\x1c\xdb\
13
+ D{\x809,S\x9e\x83P\x05\xa0\x01\xc0\x0d8\x0f\
14
+ b\x00d\x00a\x00\xfe\xfeq\xba\x11D\x8cit\xda\
15
+ \x9e\x89\x1e\xe5D\x92\xc9\xe1!\x22'\x9e\xcf\xb0\xd1\x84\
16
+ \x0cc\xae\xd3dK\xbf>e\x8b7#\xf6\xab\xdfC\
17
+ \xe8\x10\x14\xa1\x84I\x11s\x9e\xde\x1b\x7f\x22\x9d\xd3\x90\
18
+ #\xf9\x11\xe9:\x97\xbf\x97\x93\x9b\xf4\xcf\xe5u\xfc.\
19
+ _\x9f\xcf\x00\xd6*\xa9c\x02Hf=IIEj\
20
+ \xc2~(\x18\x01\x07\xc3\x04\xbe\x989N\x7f\xb1D\xaa\
21
+ u\xd1\x9fCY\xda\xfc\xdf\x9bT\xcf\xd0I \x7f\x85\
22
+ \x83T\x8e\xeb]\x8523\x99\x8dd\x18\xc8\x1c\x92\x22\
23
+ Z3\x0e\x01&\xc1t\x9e\x90\xb5~\xb2\xf6O\x82\xed\
24
+ \xf9\xa4\xa0c\x01eu\xac\x148\x9e\xbf\xf2[_q\
25
+ x\xa7\xaf\xa4\xe5\xebp(\x08\xfd?\xf9\xd1\x93\xb2\xf8\
26
+ \x810)j\xde\xbb\xe3\xf5\x95\xbc\xe2\x06\x0d\xc2A*\
27
+ \xd6\xe8\x89w\xed\x90\xf3\xc9'}\x8d0^o\xa9~\
28
+ \xfb3\x98\xe2\xf9\xf3Q\xb7!\x0a\xbav\x9e\xb6w\xfc\
29
+ \x14r-n\xa7J\x8d_\xf2\x18\xdc\x96T?a\x06\
30
+ \x9f?\xcb)B\x0a\xe4@&~u\x98\xf1\xa6\xe2\x87\
31
+ \xe3\xfbTP\xb3u\xa1<\xdd\xf4x\x9f7\x09\xa9`\
32
+ \xec\xd5\xc7\xb6[\xe2\x7ff\x0a\xa5z\xce\x02\xcc\x85!\
33
+ \xd3I*\xb6\xf4/\xe5\x06\xd8\x0e\x8f\x5c\xc8\xe7\x1d\xc7\
34
+ ,\xc1g\xe9?\xb3\xa6a\xf3\xe3\x07#r\x8f\x07\x11\
35
+ =]\x17\x9da\x9f_\xfc\xe3\x82\xd7\x1f }\x18\x08\
36
+ \xa9\x9e\xdf\xbe`\xd7,Zo\x96_\x9f/\x8e\x18\xc0\
37
+ \xc7K\xa1\x89\x07\xc8%\xde\xb9F?\x86X\xa4rN\
38
+ \xb3\x07\xd3\xd5\xff\xd8\xb2\xfc\x1ay\xc7\xad\xf9\xba\x5c\x96\
39
+ y\x80\xab\xa0\x01\x1a33$2\x93\x14\xa5\xb0\x1c \
40
+ \x84\x18\xc4\x10V\x07\xa9\xd1^C\xdd\x1dfi\x00\x82\
41
+ \x17\xc5\x10\x8b\xaeWv\xbd\xa2\x90\xb7\xfc?\x96\x99V\
42
+ \x8b\xf4\xf2{\xc1.\x8f>\xf5\x1b\xd8\x1c\x87\xe8\x12\xab\
43
+ \xd1\xca\x19\xbd+!'\x7fz\x09\x08\xa95\xdbgM\
44
+ \xb1\xd4\xben\xb8\xfb\xc8tbv\xa6\x9f\x7f\xb4\xde\x01\
45
+ bP\xb2\x030\x89D\x13\x86\xfd\xe8r\xd9\x94-\xd4\
46
+ \x95\x06\xb7\x84;,<\xd5f\xfd\xe7\x01o-\xc7~\
47
+ [Q\x9a2\xf6\x17<\x83$_B\x83\xb8v\xd4\x22\
48
+ \xb4\xafz\xd6\x1c\x0c\x10\xff'4pro\xd5\xbe\xad\
49
+ \xac\xce\x08\x868\xfd l\x1aU\xabM\xa9\xe6h\xd6\
50
+ -\xc8!\x99\xfa\xca\x05h\xd7X?jY(\xb7\x0f\
51
+ o<\xae\xeb\xf8]\xf9ax@\xf3\xe7_qw\x8b\
52
+ \xe60\x16\xee\xfcy\xfb1\xdb\xf1\xa2\xe3\x96\xd2ud\
53
+ \x04\x95\xed\xd8\xb6\xd4}\xd9\xb9\xday:\xa1ETN\
54
+ \xd4m\x89\x9c\x16\x05c\x17x\xcb<\xf2\x1e\xbf\xb1[\
55
+ \x9c}\xd5e\xe5\xbd\xb6!\xf6\x0fmy7\xb7\xc2\xd2\
56
+ \x83\x18\x13#}g\xd7$\x05\xa0\xadxi\x96W-\
57
+ d'\xde\xa4\x00P\xc3\xfdt\xa5w@_\x1af\xb8\
58
+ i=\x11I\x83XF\x938Im\x99\x0a$\xa7n\
59
+ \xaa\xc2@\x01\x8b~\x88g%\xe5E\x16\xe4\x06\xf6F\
60
+ [j\x9e\x87\x5c\xcbt\x07\xb2\xfe\x83A \xcet\x93\
61
+ \xd1\xb3\xdc\x01\xbe.@a%S\xa6\xb9\x99}\x80G\
62
+ \xb0\xa5\xf9\x01M\x8d\x07\xbe\xa4\xfaY\xbe\x98\xb4\x10R\
63
+ \xc0\xe4\xe2\xfb)\x082\xaeJP\xeb\x0b\xb8>\
64
+ \x00\x00\x02\x04\
65
+ i\
66
+ mport QtQuick\x0a\x0aL\
67
+ istModel {\x0a L\
68
+ istElement {\x0a \
69
+ file_name: \
70
+ \x22texas.pdf\x22\x0a \
71
+ resource_id:\
72
+ \x221\x22\x0a dow\
73
+ nload_state: \x22NO\
74
+ T_DOWNLOADED\x22\x0a \
75
+ }\x0a ListElem\
76
+ ent {\x0a fi\
77
+ le_name: \x22oh_no_\
78
+ what_a_terribly_\
79
+ long_file_name_i\
80
+ ts_not_like_some\
81
+ one_would_actual\
82
+ ly_do_this.pdf\x22\x0a\
83
+ resource\
84
+ _id: \x222\x22\x0a \
85
+ download_state:\
86
+ \x22FAILED\x22\x0a }\x0a\
87
+ ListElement \
88
+ {\x0a file_n\
89
+ ame: \x22i was tran\
90
+ sported to anoth\
91
+ er world where j\
92
+ avascript doesn'\
93
+ t exist.cbz\x22\x0a \
94
+ resource_id\
95
+ : \x223\x22\x0a do\
96
+ wnload_state: \x22D\
97
+ OWNLOADED\x22\x0a }\
98
+ \x0a}\x0a\
99
+ \x00\x00\x00\xa3\
100
+ i\
101
+ mport QtQuick\x0a\x0aT\
102
+ hemedRectangle {\
103
+ \x0a anchors.fil\
104
+ l: parent\x0a\x0a C\
105
+ ommentsList {\x0a \
106
+ anchors.fi\
107
+ ll: parent\x0a \
108
+ model: commen\
109
+ ts\x0a palet\
110
+ te: theme\x0a }\x0a\
111
+ }\x0a\
112
+ \x00\x00\x03\xf9\
113
+ i\
114
+ mport QtQuick\x0a\x0aR\
115
+ ectangle {\x0a p\
116
+ roperty Palette \
117
+ theme: getTheme(\
118
+ )\x0a color: the\
119
+ me.base\x0a\x0a fun\
120
+ ction getTheme()\
121
+ {\x0a if (a\
122
+ ppTheme.theme ==\
123
+ = \x22native\x22)\x0a \
124
+ return p\
125
+ alette\x0a e\
126
+ lse if (appTheme\
127
+ .dark_mode === t\
128
+ rue)\x0a \
129
+ return darkThem\
130
+ e\x0a else\x0a \
131
+ retur\
132
+ n lightTheme\x0a \
133
+ }\x0a\x0a Palette \
134
+ {\x0a id: li\
135
+ ghtTheme\x0a \
136
+ base: \x22#f8f9fa\x22\
137
+ \x0a window:\
138
+ \x22#f8f9fa\x22\x0a \
139
+ midlight: \x22#f\
140
+ 8f9fa\x22\x0a a\
141
+ ccent: \x22#e02424\x22\
142
+ \x0a link: a\
143
+ ccent\x0a da\
144
+ rk: \x22#dadce0\x22\x0a \
145
+ text: \x22#4d\
146
+ 5157\x22\x0a }\x0a\x0a \
147
+ Palette {\x0a \
148
+ id: darkTheme\
149
+ \x0a base: \x22\
150
+ #202124\x22\x0a \
151
+ window: \x22#f8f9f\
152
+ a\x22\x0a midli\
153
+ ght: \x22#202124\x22\x0a \
154
+ accent: \x22\
155
+ #e02424\x22\x0a \
156
+ link: accent\x0a \
157
+ dark: \x22#3f\
158
+ 4042\x22\x0a te\
159
+ xt: \x22#e4e7eb\x22\x0a \
160
+ }\x0a\x0a Connect\
161
+ ions {\x0a t\
162
+ arget: appTheme\x0a\
163
+ \x0a functio\
164
+ n onThemeChanged\
165
+ () {\x0a \
166
+ updateTheme()\x0a \
167
+ }\x0a\x0a \
168
+ function onDar\
169
+ kModeChanged() {\
170
+ \x0a upd\
171
+ ateTheme()\x0a \
172
+ }\x0a\x0a fu\
173
+ nction updateThe\
174
+ me() {\x0a \
175
+ theme = getTh\
176
+ eme()\x0a }\x0a\
177
+ }\x0a}\x0a\
178
+ \x00\x00\x00\xae\
179
+ i\
180
+ mport QtQuick\x0a\x0aT\
181
+ hemedRectangle {\
182
+ \x0a anchors.fil\
183
+ l: parent\x0a\x0a A\
184
+ ttachmentsList {\
185
+ \x0a anchors\
186
+ .fill: parent\x0a \
187
+ model: sub\
188
+ mission_files\x0a \
189
+ palette: t\
190
+ heme\x0a }\x0a}\x0a\
191
+ \x00\x00\x03\xeb\
192
+ i\
193
+ mport QtQuick\x0aim\
194
+ port QtQuick.Con\
195
+ trols\x0aimport QtQ\
196
+ uick.Layouts\x0a\x0aIt\
197
+ em {\x0a propert\
198
+ y alias text: co\
199
+ ntent.text\x0a p\
200
+ roperty int line\
201
+ Width: 3\x0a pro\
202
+ perty color line\
203
+ Colour: palette.\
204
+ accent\x0a prope\
205
+ rty alias conten\
206
+ t: content\x0a\x0a \
207
+ Layout.fillWidth\
208
+ : true\x0a heigh\
209
+ t: content.conte\
210
+ ntHeight\x0a cli\
211
+ p: true\x0a\x0a Ite\
212
+ m {\x0a anch\
213
+ ors.fill: parent\
214
+ \x0a height:\
215
+ content.content\
216
+ Height\x0a\x0a \
217
+ Rectangle {\x0a \
218
+ id: deco\
219
+ ration\x0a \
220
+ width: lineWi\
221
+ dth\x0a \
222
+ color: lineColou\
223
+ r\x0a ra\
224
+ dius: 1\x0a \
225
+ anchors {\x0a \
226
+ le\
227
+ ft: parent.left\x0a\
228
+ \
229
+ top: parent.top\x0a\
230
+ \
231
+ bottom: parent.b\
232
+ ottom\x0a \
233
+ }\x0a }\x0a\x0a \
234
+ Text/*Edi\
235
+ t*/ {\x0a \
236
+ id: content\x0a \
237
+ Layout\
238
+ .fillWidth: true\
239
+ \x0a col\
240
+ or: palette.text\
241
+ \x0a //r\
242
+ eadOnly: true\x0a \
243
+ //text\
244
+ Format: TextEdit\
245
+ .AutoText\x0a \
246
+ anchors {\x0a\
247
+ \
248
+ left: decoration\
249
+ .right\x0a \
250
+ leftMargi\
251
+ n: 10\x0a \
252
+ right: par\
253
+ ent.right\x0a \
254
+ }\x0a \
255
+ }\x0a }\x0a}\x0a\
256
+ \x00\x00\x08C\
257
+ i\
258
+ mport QtQuick\x0aim\
259
+ port QtQuick.Lay\
260
+ outs\x0a\x0aItem {\x0a \
261
+ id: delegate\x0a \
262
+ height: childr\
263
+ enRect.height\x0a \
264
+ anchors {\x0a \
265
+ left: parent\
266
+ .left\x0a ri\
267
+ ght: parent.righ\
268
+ t\x0a }\x0a\x0a Col\
269
+ umnLayout {\x0a \
270
+ spacing: 0\x0a\x0a\
271
+ anchors \
272
+ {\x0a le\
273
+ ft: parent.left\x0a\
274
+ righ\
275
+ t: parent.right\x0a\
276
+ }\x0a\x0a \
277
+ RowLayout {\x0a \
278
+ heigh\
279
+ t: childrenRect.\
280
+ implicitHeight\x0a \
281
+ Layou\
282
+ t.fillWidth: tru\
283
+ e\x0a sp\
284
+ acing: 10\x0a\x0a \
285
+ Image {\x0a \
286
+ f\
287
+ unction attachme\
288
+ ntIcon(downloadS\
289
+ tatus) {\x0a \
290
+ swi\
291
+ tch(downloadStat\
292
+ us)\x0a \
293
+ {\x0a \
294
+ \
295
+ case \x22DOWNLOAD\
296
+ ED\x22:\x0a \
297
+ \
298
+ return \x22qrc:///\
299
+ icons/universal/\
300
+ downloads/downlo\
301
+ aded.svg\x22;\x0a \
302
+ \
303
+ case \x22FAILED\x22\
304
+ :\x0a \
305
+ re\
306
+ turn \x22qrc:///ico\
307
+ ns/universal/dow\
308
+ nloads/download_\
309
+ failed.svg\x22;\x0a \
310
+ \
311
+ case \x22NOT_D\
312
+ OWNLOADED\x22:\x0a \
313
+ \
314
+ return \x22\
315
+ qrc:///icons/uni\
316
+ versal/downloads\
317
+ /not_downloaded.\
318
+ svg\x22;\x0a \
319
+ de\
320
+ fault:\x0a \
321
+ \
322
+ return \x22qrc:/\
323
+ //icons/universa\
324
+ l/downloads/unkn\
325
+ own.svg\x22\x0a \
326
+ }\x0a \
327
+ }\
328
+ \x0a\x0a \
329
+ id: fileIcon\x0a \
330
+ s\
331
+ ource: attachmen\
332
+ tIcon(modelData.\
333
+ download_state)\x0a\
334
+ \
335
+ fillMode: Image.\
336
+ PreserveAspectFi\
337
+ t\x0a \
338
+ sourceSize.hei\
339
+ ght: 17\x0a \
340
+ sourceSi\
341
+ ze.width: 17\x0a \
342
+ }\x0a\x0a \
343
+ Text {\x0a \
344
+ i\
345
+ d: file_name_tex\
346
+ t\x0a \
347
+ text: modelDat\
348
+ a.file_name\x0a \
349
+ wrap\
350
+ Mode: Text.WrapA\
351
+ tWordBoundaryOrA\
352
+ nywhere\x0a \
353
+ Layout.f\
354
+ illWidth: true\x0a \
355
+ f\
356
+ ont.underline: t\
357
+ rue\x0a \
358
+ color: palet\
359
+ te.link\x0a\x0a \
360
+ MouseAr\
361
+ ea {\x0a \
362
+ id: tex\
363
+ tClickArea\x0a \
364
+ a\
365
+ nchors.fill: par\
366
+ ent\x0a \
367
+ cursorSh\
368
+ ape: Qt.Pointing\
369
+ HandCursor\x0a \
370
+ h\
371
+ overEnabled: tru\
372
+ e\x0a \
373
+ }\x0a \
374
+ }\x0a }\x0a\x0a \
375
+ Spacer {\x0a \
376
+ size: \
377
+ 5\x0a vi\
378
+ sible: index !==\
379
+ count - 1\x0a \
380
+ }\x0a }\x0a\x0a \
381
+ Connections {\x0a \
382
+ target: te\
383
+ xtClickArea\x0a\x0a \
384
+ function on\
385
+ Clicked() {\x0a \
386
+ modelDat\
387
+ a.opened(modelDa\
388
+ ta.resource_id)\x0a\
389
+ }\x0a }\x0a\
390
+ }\x0a\
391
+ \x00\x00\x01\xdd\
392
+ \x0a\
393
+ \x0a/*\x0aThis is a UI\
394
+ file (.ui.qml) \
395
+ that is intended\
396
+ to be edited in\
397
+ Qt Design Studi\
398
+ o only.\x0aIt is su\
399
+ pposed to be str\
400
+ ictly declarativ\
401
+ e and only uses \
402
+ a subset of QML.\
403
+ If you edit\x0athi\
404
+ s file manually,\
405
+ you might intro\
406
+ duce QML code th\
407
+ at is not suppor\
408
+ ted by Qt Design\
409
+ Studio.\x0aCheck o\
410
+ ut https://doc.q\
411
+ t.io/qtcreator/c\
412
+ reator-quick-ui-\
413
+ forms.html for d\
414
+ etails on .ui.qm\
415
+ l files.\x0a*/\x0aimpo\
416
+ rt QtQuick\x0a\x0aList\
417
+ View {\x0a id: v\
418
+ iew\x0a model: C\
419
+ ommentsListModel\
420
+ {}\x0a delegate\
421
+ : CommentsListDe\
422
+ legate {}\x0a}\x0a\
423
+ \x00\x00\x08\xb6\
424
+ i\
425
+ mport QtQuick\x0a\x0aL\
426
+ istModel {\x0a L\
427
+ istElement {\x0a \
428
+ body: \x22This\
429
+ is a comment. G\
430
+ aze at it. Be am\
431
+ azed.\x22\x0a a\
432
+ uthor: \x22I am Ste\
433
+ ve\x22\x0a date\
434
+ : \x222001-01-01 36\
435
+ :00\x22\x0a att\
436
+ achments: [\x0a \
437
+ ListElem\
438
+ ent {\x0a \
439
+ file_name:\
440
+ \x22texas.pdf\x22\x0a \
441
+ res\
442
+ ource_id: \x221\x22\x0a \
443
+ do\
444
+ wnload_state: \x22N\
445
+ OT_DOWNLOADED\x22\x0a \
446
+ },\x0a \
447
+ ListEl\
448
+ ement {\x0a \
449
+ file_nam\
450
+ e: \x22oh_no_what_a\
451
+ _terribly_long_f\
452
+ ile_name_its_not\
453
+ _like_someone_wo\
454
+ uld_actually_do_\
455
+ this.pdf\x22\x0a \
456
+ resour\
457
+ ce_id: \x222\x22\x0a \
458
+ downl\
459
+ oad_state: \x22FAIL\
460
+ ED\x22\x0a \
461
+ },\x0a L\
462
+ istElement {\x0a \
463
+ fil\
464
+ e_name: \x22i was t\
465
+ ransported to an\
466
+ other world wher\
467
+ e javascript doe\
468
+ sn't exist.cbz\x22\x0a\
469
+ \
470
+ resource_id: \x223\x22\
471
+ \x0a \
472
+ download_state:\
473
+ \x22DOWNLOADED\x22\x0a \
474
+ }\x0a \
475
+ ]\x0a }\x0a \
476
+ ListElement {\x0a \
477
+ body: \x22If \
478
+ Morbius has a mi\
479
+ llion fans, I am\
480
+ one of them.\x5cnI\
481
+ f Morbius has 5 \
482
+ fans, I am one o\
483
+ f them.\x5cnIf Morb\
484
+ ius has one fan,\
485
+ That one is me.\
486
+ \x5cnIf Morbius has\
487
+ no fans, I am n\
488
+ o longer alive.\x5c\
489
+ nIf the world is\
490
+ against Morbius\
491
+ , I am against t\
492
+ he world.\x5cnTill \
493
+ my last breath, \
494
+ I'll love Morbiu\
495
+ s (2022).\x22\x0a \
496
+ author: \x22Goku\
497
+ \x22\x0a date: \
498
+ \x221942-16-34 06:6\
499
+ 3\x22\x0a attac\
500
+ hments: [\x0a \
501
+ ListElemen\
502
+ t {\x0a \
503
+ file_name: \x22\
504
+ morbius_x264_108\
505
+ 0.mkv\x22\x0a \
506
+ resource_\
507
+ id: \x22blahblah\x22\x0a \
508
+ d\
509
+ ownload_state: \x22\
510
+ NOT_DOWNLOADED\x22\x0a\
511
+ }\x0a \
512
+ ]\x0a }\x0a \
513
+ ListElement {\x0a\
514
+ body: \x22a\
515
+ aaaaaaaaaaaaaaaa\
516
+ aaaaaaaaaaaaaaaa\
517
+ aaaaaaaaaaaaaaaa\
518
+ aaaaaaaaaaaaaaaa\
519
+ aaaaaaaaaaaaaaaa\
520
+ aaaaaaaaaaaaaaaa\
521
+ aaaaaaaaaaaaaaaa\
522
+ aaaaaaaaaaa\x5cnbbb\
523
+ bbbbbbbbbbbbbbbb\
524
+ bbbbbbbbbbbbbbbb\
525
+ bbbbbbbbbbbbbbbb\
526
+ bbbbbbbbbbbbbbbb\
527
+ bbbbbbbbbbbbbbbb\
528
+ bbbbbbbbbbbbbbbb\
529
+ bbbbbbb\x22\x0a \
530
+ author: \x22Word W\
531
+ rap Test\x22\x0a \
532
+ date: \x222000-02\
533
+ -02\x22\x0a att\
534
+ achments: []\x0a \
535
+ }\x0a ListEleme\
536
+ nt {\x0a bod\
537
+ y: \x22x264 forms t\
538
+ he core of many \
539
+ web video servic\
540
+ es, such as Yout\
541
+ ube, Facebook, V\
542
+ imeo, and Hulu. \
543
+ It is widely use\
544
+ d by television \
545
+ broadcasters and\
546
+ ISPs.\x22\x0a \
547
+ author: \x22BideoJA\
548
+ N Wordsblahblah\x22\
549
+ \x0a date: \x22\
550
+ 2027-07-28\x22\x0a \
551
+ attachments:\
552
+ [\x0a L\
553
+ istElement {\x0a \
554
+ fil\
555
+ e_name: \x22Ass1_SO\
556
+ MEDUDE_48.pdf\x22\x0a \
557
+ r\
558
+ esource_id: \x22bla\
559
+ h_v345\x22\x0a \
560
+ download\
561
+ _state: \x22DOWNLOA\
562
+ DED\x22\x0a \
563
+ }\x0a ]\x0a \
564
+ }\x0a}\x0a\
565
+ \x00\x00\x01\xe3\
566
+ \x0a\
567
+ \x0a/*\x0aThis is a UI\
568
+ file (.ui.qml) \
569
+ that is intended\
570
+ to be edited in\
571
+ Qt Design Studi\
572
+ o only.\x0aIt is su\
573
+ pposed to be str\
574
+ ictly declarativ\
575
+ e and only uses \
576
+ a subset of QML.\
577
+ If you edit\x0athi\
578
+ s file manually,\
579
+ you might intro\
580
+ duce QML code th\
581
+ at is not suppor\
582
+ ted by Qt Design\
583
+ Studio.\x0aCheck o\
584
+ ut https://doc.q\
585
+ t.io/qtcreator/c\
586
+ reator-quick-ui-\
587
+ forms.html for d\
588
+ etails on .ui.qm\
589
+ l files.\x0a*/\x0aimpo\
590
+ rt QtQuick\x0a\x0aList\
591
+ View {\x0a id: v\
592
+ iew\x0a model: A\
593
+ ttachmentsListMo\
594
+ del {}\x0a deleg\
595
+ ate: Attachments\
596
+ ListDelegate {}\x0a\
597
+ }\x0a\
598
+ \x00\x00\x00N\
599
+ i\
600
+ mport QtQuick\x0a\x0aI\
601
+ tem {\x0a proper\
602
+ ty real size\x0a \
603
+ height: size\x0a \
604
+ width: 1\x0a}\x0a\
605
+ "
606
+
607
+ qt_resource_name = b"\
608
+ \x00\x03\
609
+ \x00\x00x<\
610
+ \x00q\
611
+ \x00m\x00l\
612
+ \x00\x1b\
613
+ \x0d\x0f\x19\xfc\
614
+ \x00C\
615
+ \x00o\x00m\x00m\x00e\x00n\x00t\x00s\x00L\x00i\x00s\x00t\x00D\x00e\x00l\x00e\x00g\
616
+ \x00a\x00t\x00e\x00.\x00u\x00i\x00.\x00q\x00m\x00l\
617
+ \x00\x18\
618
+ \x04\x161<\
619
+ \x00A\
620
+ \x00t\x00t\x00a\x00c\x00h\x00m\x00e\x00n\x00t\x00s\x00L\x00i\x00s\x00t\x00M\x00o\
621
+ \x00d\x00e\x00l\x00.\x00q\x00m\x00l\
622
+ \x00\x10\
623
+ \x03\xe1\xc1\xfc\
624
+ \x00C\
625
+ \x00o\x00m\x00m\x00e\x00n\x00t\x00s\x00P\x00a\x00n\x00e\x00.\x00q\x00m\x00l\
626
+ \x00\x13\
627
+ \x08\xe5\xf4\x1c\
628
+ \x00T\
629
+ \x00h\x00e\x00m\x00e\x00d\x00R\x00e\x00c\x00t\x00a\x00n\x00g\x00l\x00e\x00.\x00q\
630
+ \x00m\x00l\
631
+ \x00\x13\
632
+ \x05\xa6\xc5|\
633
+ \x00A\
634
+ \x00t\x00t\x00a\x00c\x00h\x00m\x00e\x00n\x00t\x00s\x00P\x00a\x00n\x00e\x00.\x00q\
635
+ \x00m\x00l\
636
+ \x00\x14\
637
+ \x0c\x17\xd1<\
638
+ \x00D\
639
+ \x00e\x00c\x00o\x00r\x00a\x00t\x00e\x00d\x00T\x00e\x00x\x00t\x00.\x00u\x00i\x00.\
640
+ \x00q\x00m\x00l\
641
+ \x00\x1b\
642
+ \x0c\xf7\xd6\xbc\
643
+ \x00A\
644
+ \x00t\x00t\x00a\x00c\x00h\x00m\x00e\x00n\x00t\x00s\x00L\x00i\x00s\x00t\x00D\x00e\
645
+ \x00l\x00e\x00g\x00a\x00t\x00e\x00.\x00q\x00m\x00l\
646
+ \x00\x13\
647
+ \x0a.\xb3\xfc\
648
+ \x00C\
649
+ \x00o\x00m\x00m\x00e\x00n\x00t\x00s\x00L\x00i\x00s\x00t\x00.\x00u\x00i\x00.\x00q\
650
+ \x00m\x00l\
651
+ \x00\x15\
652
+ \x0cYK\xbc\
653
+ \x00C\
654
+ \x00o\x00m\x00m\x00e\x00n\x00t\x00s\x00L\x00i\x00s\x00t\x00M\x00o\x00d\x00e\x00l\
655
+ \x00.\x00q\x00m\x00l\
656
+ \x00\x16\
657
+ \x0dg\x00\x9c\
658
+ \x00A\
659
+ \x00t\x00t\x00a\x00c\x00h\x00m\x00e\x00n\x00t\x00s\x00L\x00i\x00s\x00t\x00.\x00u\
660
+ \x00i\x00.\x00q\x00m\x00l\
661
+ \x00\x0d\
662
+ \x01wq\xfc\
663
+ \x00S\
664
+ \x00p\x00a\x00c\x00e\x00r\x00.\x00u\x00i\x00.\x00q\x00m\x00l\
665
+ "
666
+
667
+ qt_resource_struct = b"\
668
+ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
669
+ \x00\x00\x00\x00\x00\x00\x00\x00\
670
+ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x0b\x00\x00\x00\x02\
671
+ \x00\x00\x00\x00\x00\x00\x00\x00\
672
+ \x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x00#i\
673
+ \x00\x00\x01\x94S\xec~\x99\
674
+ \x00\x00\x00~\x00\x00\x00\x00\x00\x01\x00\x00\x05[\
675
+ \x00\x00\x01\x94T\xb8\x224\
676
+ \x00\x00\x00H\x00\x00\x00\x00\x00\x01\x00\x00\x03S\
677
+ \x00\x00\x01\x94S\xec~\x97\
678
+ \x00\x00\x00\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x09\xff\
679
+ \x00\x00\x01\x94T\xb8Af\
680
+ \x00\x00\x00\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x06\x02\
681
+ \x00\x00\x01\x94T\xc4\xc8\xa7\
682
+ \x00\x00\x01f\x00\x00\x00\x00\x00\x01\x00\x00\x16\xe7\
683
+ \x00\x00\x01\x94S\xec~\x98\
684
+ \x00\x00\x00\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xb1\
685
+ \x00\x00\x01\x94S\xec~\x98\
686
+ \x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x00\x18\xc8\
687
+ \x00\x00\x01\x94S\xec~\x98\
688
+ \x00\x00\x01*\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xa0\
689
+ \x00\x00\x01\x94S\xec~\x97\
690
+ \x00\x00\x00\x0c\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\
691
+ \x00\x00\x01\x94S\xec~\x98\
692
+ \x00\x00\x01\xc2\x00\x00\x00\x00\x00\x01\x00\x00!\x82\
693
+ \x00\x00\x01\x94S\xec~\x97\
694
+ "
695
+
696
+
697
+ def qInitResources():
698
+ QtCore.qRegisterResourceData(
699
+ 0x03, qt_resource_struct, qt_resource_name, qt_resource_data
700
+ )
701
+
702
+
703
+ def qCleanupResources():
704
+ QtCore.qUnregisterResourceData(
705
+ 0x03, qt_resource_struct, qt_resource_name, qt_resource_data
706
+ )
707
+
708
+
709
+ qInitResources()
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE RCC>
2
+ <RCC version="1.0">
3
+ <qresource prefix="/qml/">
4
+ <file>AttachmentsList.ui.qml</file>
5
+ <file>AttachmentsListDelegate.qml</file>
6
+ <file>AttachmentsListModel.qml</file>
7
+ <file>AttachmentsPane.qml</file>
8
+ <file>CommentsList.ui.qml</file>
9
+ <file>CommentsListDelegate.ui.qml</file>
10
+ <file>CommentsListModel.qml</file>
11
+ <file>CommentsPane.qml</file>
12
+ <file>DecoratedText.ui.qml</file>
13
+ <file>Spacer.ui.qml</file>
14
+ <file>ThemedRectangle.qml</file>
15
+ </qresource>
16
+ </RCC>