molde 0.1.1__py3-none-any.whl → 0.1.2__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 (55) hide show
  1. molde/__init__.py +6 -5
  2. molde/__main__.py +74 -63
  3. molde/actors/__init__.py +5 -4
  4. molde/actors/common_symbols_actor.py +148 -0
  5. molde/actors/ghost_actor.py +12 -12
  6. molde/actors/lines_actor.py +31 -31
  7. molde/actors/round_points_actor.py +7 -7
  8. molde/actors/square_points_actor.py +32 -32
  9. molde/colors/__init__.py +1 -1
  10. molde/colors/color.py +120 -120
  11. molde/colors/color_names.py +124 -124
  12. molde/interactor_styles/__init__.py +2 -2
  13. molde/interactor_styles/arcball_camera_style.py +288 -272
  14. molde/interactor_styles/box_selection_style.py +70 -70
  15. molde/main_window.ui +864 -0
  16. molde/pickers/__init__.py +2 -2
  17. molde/pickers/cell_area_picker.py +61 -61
  18. molde/pickers/cell_property_area_picker.py +84 -84
  19. molde/poly_data/__init__.py +19 -2
  20. molde/poly_data/arrows.py +54 -0
  21. molde/poly_data/complex_shapes.py +26 -0
  22. molde/poly_data/lines_data.py +23 -23
  23. molde/poly_data/simple_shapes.py +22 -0
  24. molde/poly_data/vertices_data.py +24 -24
  25. molde/render_widgets/__init__.py +2 -2
  26. molde/render_widgets/animated_render_widget.py +164 -164
  27. molde/render_widgets/common_render_widget.py +433 -433
  28. molde/stylesheets/__init__.py +119 -119
  29. molde/stylesheets/common.qss +16 -16
  30. molde/stylesheets/create_color_page.py +61 -61
  31. molde/stylesheets/mainwindow.ui +611 -611
  32. molde/stylesheets/qcheckbox.qss +18 -18
  33. molde/stylesheets/qinputs.qss +78 -78
  34. molde/stylesheets/qlayouts.qss +22 -22
  35. molde/stylesheets/qmenubar.qss +12 -12
  36. molde/stylesheets/qprogressbar.qss +11 -11
  37. molde/stylesheets/qpushbutton.qss +90 -90
  38. molde/stylesheets/qradiobutton.qss +30 -30
  39. molde/stylesheets/qscrollbar.qss +29 -29
  40. molde/stylesheets/qslider.qss +61 -61
  41. molde/stylesheets/qtablewidget.qss +27 -27
  42. molde/stylesheets/qtabwidget.qss +29 -29
  43. molde/stylesheets/qtoolbar.qss +62 -62
  44. molde/stylesheets/qtoolbuttons.qss +14 -14
  45. molde/stylesheets/qtreewidget.qss +25 -25
  46. molde/ui_files/messages/new_loading_window.ui +73 -0
  47. molde/utils/__init__.py +8 -8
  48. molde/utils/format_sequences.py +44 -44
  49. molde/utils/poly_data_utils.py +24 -24
  50. molde/utils/tree_info.py +52 -52
  51. molde/windows/loading_window.py +189 -0
  52. {molde-0.1.1.dist-info → molde-0.1.2.dist-info}/METADATA +4 -2
  53. molde-0.1.2.dist-info/RECORD +69 -0
  54. {molde-0.1.1.dist-info → molde-0.1.2.dist-info}/WHEEL +1 -1
  55. molde-0.1.1.dist-info/RECORD +0 -62
molde/utils/tree_info.py CHANGED
@@ -1,52 +1,52 @@
1
- from collections import namedtuple
2
-
3
- TreeItem = namedtuple("TreeItem", ["name", "data", "unity"])
4
- SEPARATOR = TreeItem("", "", "")
5
-
6
-
7
- class TreeInfo:
8
- def __init__(self, name: str) -> None:
9
- self.name = name
10
- self.items = list()
11
-
12
- def add_separator(self):
13
- self.items.append(TreeItem("", "", ""))
14
- return TreeItem("", "", "")
15
-
16
- def add_item(self, name, data, unity="") -> TreeItem:
17
- item = TreeItem(name, data, unity)
18
- self.items.append(item)
19
- return item
20
-
21
- def items_without_extra_separators(self):
22
- extra_separators = 0
23
- for item in reversed(self.items):
24
- if item != SEPARATOR:
25
- break
26
- extra_separators += 1
27
- return self.items[: len(self.items) - extra_separators]
28
-
29
- def __str__(self):
30
- title = self.name.upper()
31
- longest_name = max(0, *[len(item.name) for item in self.items])
32
- longest_data = max(0, *[len(str(item.data)) for item in self.items])
33
- spaces = longest_name + longest_data + 3
34
-
35
- text = f"{title} \n"
36
- pruned_items = self.items_without_extra_separators()
37
-
38
- for item in pruned_items[:-1]:
39
- if item == SEPARATOR:
40
- text += "│\n"
41
- continue
42
- spacer = " " * (spaces - len(item.name) - len(str(item.data)))
43
- unity = f"[{item.unity}]" if item.unity else ""
44
- text += f"├─ {item.name}: {spacer}{item.data} {unity}\n"
45
-
46
- # last item
47
- item = pruned_items[-1]
48
- spacer = " " * (spaces - len(item.name) - len(str(item.data)))
49
- unity = f"[{item.unity}]" if item.unity else ""
50
- text += f"╰─ {item.name}: {spacer}{item.data} {unity}\n"
51
- text += "\n"
52
- return text
1
+ from collections import namedtuple
2
+
3
+ TreeItem = namedtuple("TreeItem", ["name", "data", "unity"])
4
+ SEPARATOR = TreeItem("", "", "")
5
+
6
+
7
+ class TreeInfo:
8
+ def __init__(self, name: str) -> None:
9
+ self.name = name
10
+ self.items = list()
11
+
12
+ def add_separator(self):
13
+ self.items.append(TreeItem("", "", ""))
14
+ return TreeItem("", "", "")
15
+
16
+ def add_item(self, name, data, unity="") -> TreeItem:
17
+ item = TreeItem(name, data, unity)
18
+ self.items.append(item)
19
+ return item
20
+
21
+ def items_without_extra_separators(self):
22
+ extra_separators = 0
23
+ for item in reversed(self.items):
24
+ if item != SEPARATOR:
25
+ break
26
+ extra_separators += 1
27
+ return self.items[: len(self.items) - extra_separators]
28
+
29
+ def __str__(self):
30
+ title = self.name.upper()
31
+ longest_name = max(0, *[len(item.name) for item in self.items])
32
+ longest_data = max(0, *[len(str(item.data)) for item in self.items])
33
+ spaces = longest_name + longest_data + 3
34
+
35
+ text = f"{title} \n"
36
+ pruned_items = self.items_without_extra_separators()
37
+
38
+ for item in pruned_items[:-1]:
39
+ if item == SEPARATOR:
40
+ text += "│\n"
41
+ continue
42
+ spacer = " " * (spaces - len(item.name) - len(str(item.data)))
43
+ unity = f"[{item.unity}]" if item.unity else ""
44
+ text += f"├─ {item.name}: {spacer}{item.data} {unity}\n"
45
+
46
+ # last item
47
+ item = pruned_items[-1]
48
+ spacer = " " * (spaces - len(item.name) - len(str(item.data)))
49
+ unity = f"[{item.unity}]" if item.unity else ""
50
+ text += f"╰─ {item.name}: {spacer}{item.data} {unity}\n"
51
+ text += "\n"
52
+ return text
@@ -0,0 +1,189 @@
1
+ import logging
2
+ import re
3
+ from time import sleep
4
+
5
+ from PyQt5.QtCore import Qt
6
+ from PyQt5.QtWidgets import QApplication, QLabel, QProgressBar, QWidget
7
+ from PyQt5 import uic
8
+
9
+ from molde import UI_DIR
10
+
11
+
12
+ # Catches every message that contains something like [n/N]
13
+ PROGRESS_FRACTION_REGEX = re.compile(r"\[\d+/\d+\]")
14
+
15
+ # Catches every message that contains something like n%
16
+ PROGRESS_PERCENTAGE_REGEX = re.compile(r"\d+%")
17
+
18
+
19
+ class LoadingWindow(QWidget):
20
+ """
21
+ This function is intended to be called for functions that take
22
+ a long time to run and should run together with a progress bar.
23
+
24
+ The indended use is explained in the following example:
25
+ ```
26
+ def long_function(param_a, param_b=0):
27
+ ...
28
+ return value_c
29
+ ```
30
+
31
+ To run this function with a progress bar you just need to write
32
+ ```
33
+ value_c = LoadingWindow(long_function, param_a, param_b=1234)
34
+ ```
35
+
36
+ Disclaimers:
37
+ This is a monstruosity, but it works.
38
+ I hope no one ever needs to modify it.
39
+ I am trying my best to explain every part of this code.
40
+
41
+ An easier way to do it would be using a QWorker and a QThread,
42
+ but it does not work for our Application.
43
+ Qt manages the windows in the main thread, therefore the function
44
+ to be loaded would need to run in a secondary thread.
45
+ The problem is GMSH (wow, what a surprise).
46
+
47
+ GMSH, for some reason, refuses to run in secondary thread.
48
+ And GMSH is an important part of our software, that of course
49
+ need a progress bar when it is running.
50
+ So this is an attempt to run everything (both GMSH and QT) in the
51
+ main thread without conflicts.
52
+
53
+ I also don't want to mix the interface code with the engine code
54
+ because it can easily became a mess and make the creation of
55
+ automated tests really hard.
56
+ """
57
+
58
+ def __init__(self, _function, application, window_icon):
59
+ super().__init__()
60
+
61
+ ui_path = UI_DIR / "messages/new_loading_window.ui"
62
+ uic.loadUi(ui_path, self)
63
+
64
+ self._function = _function
65
+ self._application = application
66
+ self._window_icon = window_icon
67
+
68
+ self._config_window()
69
+
70
+ def _config_window(self):
71
+ self.setWindowIcon(self._window_icon)
72
+ self.setWindowTitle("Loading")
73
+ self.setWindowFlags(Qt.Window | Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowMinimizeButtonHint)
74
+ self.setWindowModality(Qt.ApplicationModal)
75
+ self.update_position()
76
+ self.progress_bar.setValue(0)
77
+
78
+ def _define_qt_variables(self):
79
+ self.progress_bar: QProgressBar
80
+ self.progress_label: QLabel
81
+
82
+ def update_position(self):
83
+ '''
84
+ Place the window on the center of the screen.
85
+ '''
86
+ desktop_geometry = self._application.primaryScreen().geometry()
87
+ pos_x = int((desktop_geometry.width() - self.width())/2)
88
+ pos_y = int((desktop_geometry.height() - self.height())/2)
89
+ self.setGeometry(pos_x, pos_y, self.width(), self.height())
90
+
91
+ def run(self, *args, **kwargs):
92
+ self.show()
93
+
94
+ # Changes the cursor to wait
95
+ QApplication.setOverrideCursor(Qt.WaitCursor)
96
+
97
+ # Creates a handler to update progress_bar and progress_label
98
+ # every time a logging containing [n/N] appears
99
+ progress_handler = ProgressBarLogUpdater(logging.DEBUG, loading_window=self)
100
+ logging.getLogger().addHandler(progress_handler)
101
+
102
+ # Waits the loading bar to appear and uptates pyqt
103
+ sleep(0.1)
104
+ QApplication.processEvents()
105
+
106
+ try:
107
+ # Calls the actual function
108
+ return_value = self._function(*args, **kwargs)
109
+
110
+ finally:
111
+ """
112
+ This piece of code will run even if the function have errors.
113
+ Because the error is not handled here it will propagate to the
114
+ function that called it.
115
+ The error should be threated there, here we are just mitigating
116
+ things related to the loading window.
117
+ """
118
+
119
+ # Restores the previous cursor
120
+ QApplication.restoreOverrideCursor()
121
+
122
+ # Removes the ProgressBarLogUpdater
123
+ logging.getLogger().removeHandler(progress_handler)
124
+
125
+ self.hide()
126
+
127
+ return return_value
128
+
129
+ def __call__(self, *args, **kwargs):
130
+ return self.run(self._function, *args, **kwargs)
131
+
132
+
133
+ class ProgressBarLogUpdater(logging.Handler):
134
+ """
135
+ This class is an log observer. It is meant to watch logs
136
+ and use it to update an instance of the loading window.
137
+ """
138
+
139
+ def __init__(self, level=0, *, loading_window: LoadingWindow) -> None:
140
+ super().__init__(level)
141
+ self.loading_window = loading_window
142
+
143
+ def emit(self, record):
144
+ """
145
+ This function is fired when something is logged.
146
+ If the log have a marker like [n/N] or "..." in its message it
147
+ will update the LoadingWindow associated with this class.
148
+ """
149
+
150
+ # Updates QT to prevent freezing
151
+ QApplication.processEvents()
152
+
153
+ percent = self.get_percentage(record.msg)
154
+
155
+ if percent is not None:
156
+ self.loading_window.progress_label.setText(record.msg)
157
+ self.loading_window.progress_bar.setValue(percent)
158
+
159
+ elif "..." in record.msg:
160
+ self.loading_window.progress_label.setText(record.msg)
161
+
162
+ # Updates QT to show the window modifications
163
+ QApplication.processEvents()
164
+
165
+ def get_percentage(self, message: str):
166
+ """
167
+ Uses regex to check if the message have a marker like [2/10]
168
+ If it does, it extracts the step (2) and the max_step (10) and
169
+ calculates the percentage (20%).
170
+ Otherwise it just returns None.
171
+ """
172
+
173
+ if not isinstance(message, str):
174
+ return
175
+
176
+ matches = PROGRESS_FRACTION_REGEX.findall(message)
177
+ if matches:
178
+ first_match: str = matches[0]
179
+ step, max_step = first_match.strip("[]").split("/")
180
+ percentage = 100 * int(step) // int(max_step)
181
+ return percentage
182
+
183
+ matches = PROGRESS_PERCENTAGE_REGEX.findall(message)
184
+ if matches:
185
+ first_match: str = matches[0]
186
+ percentage = int(first_match.strip("%"))
187
+ return percentage
188
+
189
+ return None
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: molde
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary:
5
5
  Author: André Fernandes
6
6
  Author-email: fpf.andre@gmail.com
@@ -8,6 +8,8 @@ Requires-Python: >=3.10
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Programming Language :: Python :: 3.10
10
10
  Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
11
13
  Requires-Dist: moviepy (>=1.0.3,<2.0.0)
12
14
  Requires-Dist: numpy (>=2.0,<3.0)
13
15
  Requires-Dist: pyqt5 (>=5.15.10,<6.0.0)
@@ -0,0 +1,69 @@
1
+ molde/__init__.py,sha256=Ya1La2WpCD-GD3BCe2bbmnFZy1N1fyGqAJGc45pZDtk,119
2
+ molde/__main__.py,sha256=8UoG4EOA9XnTYw_JhQUk4HIJAjgFTPokRpbTege6Jao,2491
3
+ molde/actors/__init__.py,sha256=hIWbRlKTYleqyVWtcGE7X8Nu9oiZoc2ceRdQ5gZfe3c,266
4
+ molde/actors/common_symbols_actor.py,sha256=5MvWyYXf16l2EWxKlwLnVl7etFn-RzKY-kiNrqd5Bqc,4582
5
+ molde/actors/ghost_actor.py,sha256=m7fu_bhIZM1kWhObZ_c8t_w9ZsAdDo9SlAT-pYUu_Lg,493
6
+ molde/actors/lines_actor.py,sha256=EI2jnaHMVIa7Ru6rDWRnei8_UlRbYz9rMbu4Z0pcjJk,1091
7
+ molde/actors/round_points_actor.py,sha256=z2-xAS70LAupK2ZNjgSDI7jtylGqljwp1RUQJv0Rn5U,222
8
+ molde/actors/square_points_actor.py,sha256=FdtPWHPCd9Ll6M4xmEkfGpaj98JzsLS0ZUcIkY1f8jw,1147
9
+ molde/colors/__init__.py,sha256=1btZnmV8oHnqK6n9vzB9rLrUAQg7YxnRALSXUtH2NlM,51
10
+ molde/colors/color.py,sha256=68nmxZZlRUro5s6S4FvSrVQJBybfTsF8rZb8aVut8FI,3693
11
+ molde/colors/color_names.py,sha256=e4kluhl8BRxiZKs1DE8nfmGtIbTeyli_yje1eb_Jxk0,2958
12
+ molde/fonts/IBMPlexMono-Bold.ttf,sha256=ykA8VpMbrvMH0gumS2mstxq8rWH3XmZBRmHVdIS2kOw,157924
13
+ molde/fonts/IBMPlexMono-Regular.ttf,sha256=_hEwSl_pVtV0TptqJGzIPZBCUkXnWmIjAESWbKlqf1A,155940
14
+ molde/icons/arrow_down_dark_theme.svg,sha256=xh1-dRW1CoWf_6TFfMkTn6gvS81YGE5Yk-52juIUR6M,178
15
+ molde/icons/arrow_down_disabled_dark_theme.svg,sha256=_Ozch1OhlyWnr5c5axhj5b21URO98HND8ISsMzdGbUM,178
16
+ molde/icons/arrow_down_disabled_light_theme.svg,sha256=S-jSOYNqv0wvBWXilyjxHQxTIe3DOmM1NiXa7VcF0hg,178
17
+ molde/icons/arrow_down_light_theme.svg,sha256=VoKu7P9bbnkHpHpPB5PSMFaWrRBx7-Jm10AN4jLe2TQ,178
18
+ molde/icons/arrow_left_dark_theme.svg,sha256=sssuH6Mu1CrhHX9ud5cLoAlseeBiG2LM3SDIDapTFIU,178
19
+ molde/icons/arrow_left_light_theme.svg,sha256=a5d_wSWTBvUhKA5wiGLxHWl3zagyZmk-SsZmqit-0sQ,178
20
+ molde/icons/arrow_right_dark_theme.svg,sha256=Ud-6rrHO_udGwLj5yRnm6Ryc8NzTG_7MXihPEKRP_Gg,178
21
+ molde/icons/arrow_right_light_theme.svg,sha256=yQOgMPsc04bCARb3UKRQFPRuT1bJZEUbzaYmXMgkvq8,178
22
+ molde/icons/arrow_up_dark_theme.svg,sha256=4pCqfzVNFYOVTTZcfeLsiusky65jxzBNWDS9_i-DFkA,179
23
+ molde/icons/arrow_up_disabled_dark_theme.svg,sha256=2YBYo8-lfJsOCKdGZy8J0s3ATcTnmzN9nRL3ItGWefM,179
24
+ molde/icons/arrow_up_disabled_light_theme.svg,sha256=mXbCteiX6LX1GPcvFjXa-_cZauFJPlIkl1FSz7m7W3E,179
25
+ molde/icons/arrow_up_light_theme.svg,sha256=bpon_eUC97Q3nYlHvLPGBDoToUlZq2VHqGJsLMI6Cs4,179
26
+ molde/icons/check_box_image.svg,sha256=5rKzmsoHYtp52jPY4TpWK0jd7mPLPTteYfbLUF2RJbY,335
27
+ molde/interactor_styles/__init__.py,sha256=oIpp9E-g3cFBtfDPi3PbLTwP8zOQWN4Ms2T3sNm6104,124
28
+ molde/interactor_styles/arcball_camera_style.py,sha256=-lQRztk3XSwdsKKqH6GrDECkL4vCfxjWMRnNXIgBpaY,10392
29
+ molde/interactor_styles/box_selection_style.py,sha256=3KIj4lWajpuhS1eMZzGZeugmRVp7LrQO9gkefVugYQM,2549
30
+ molde/main_window.ui,sha256=xxFOehzGpGr5cFshil2gFLpF_r1Bnqjc8paw79PrIq0,25629
31
+ molde/pickers/__init__.py,sha256=VbpLJU6xEcFsF8fqa6Wmf6OXYunoBWsbJqIAc9wTZDI,107
32
+ molde/pickers/cell_area_picker.py,sha256=44i5CjbqGeg0zotjfRbz7jDoS0OKtokIdrfFRkTHO98,2053
33
+ molde/pickers/cell_property_area_picker.py,sha256=HeYC-6K4bVnC8g6qQj9sNMFa-4OIRph9Hyp70GAUMtM,2869
34
+ molde/poly_data/__init__.py,sha256=73vn7UxdS-Kg3n0-x7cSvxz7-Qu67i1H1QK7GwgePBY,408
35
+ molde/poly_data/arrows.py,sha256=NvdExED_W8CxssTmj2VNMIsg7-Xm1VpGmPKXUkXZO_4,1282
36
+ molde/poly_data/complex_shapes.py,sha256=YlvhSh51wu3XPFlYrCRfzsXy8OFmdsmUPY9FPfAnK-w,730
37
+ molde/poly_data/lines_data.py,sha256=Ar1KbQoJP3jelATH8zLrKqHm0788xRfPe9JnSOvxh7o,714
38
+ molde/poly_data/simple_shapes.py,sha256=bTmsM-uFcE455t3etwXiquG5nfs8R-9UD9X0y5m6G_U,559
39
+ molde/poly_data/vertices_data.py,sha256=jqmEhVdb3-qh_kIjCb0s0Cljx1FFY3NLUOuFa4sGA1Y,673
40
+ molde/render_widgets/__init__.py,sha256=SOU9bax48D2bP_zhtF_o_Yh7HAK4clIPcjxfjYOnSVM,110
41
+ molde/render_widgets/animated_render_widget.py,sha256=Ek9a9s4NTVonJJ3BVulI4bxKWRgd9mb9s1xZeImRMa0,5352
42
+ molde/render_widgets/common_render_widget.py,sha256=-NrsEdMUMIe0SxCMLjuaABKYvYapAQ-F6WLHawQuCTY,15417
43
+ molde/stylesheets/__init__.py,sha256=QmSJHJGbj3rCqHDB97yDWAhx-dLtAP7mp8CZoVLcCpc,5314
44
+ molde/stylesheets/common.qss,sha256=ChLGnIIwhUt0q9FH3uYwU7CckGucacTvz4dvjfmnnd0,304
45
+ molde/stylesheets/create_color_page.py,sha256=t9w_CMQXZXegqv_2_3Te6RW7jV3Q_uixvwYkbiJDjaM,1714
46
+ molde/stylesheets/mainwindow.ui,sha256=u5z_DOxWtbP7sDDsBykDx1GowYnXI8ab4jwoYETwgQc,17115
47
+ molde/stylesheets/qcheckbox.qss,sha256=sKqpq7LwAPlQ1qKFX64gwaOknTJ4qd1H0vnKl6C7UJU,382
48
+ molde/stylesheets/qinputs.qss,sha256=Q-oFZIMj_hsT0AKLHGOyupA3GQ4U45qHxME-SRRISdg,1926
49
+ molde/stylesheets/qlayouts.qss,sha256=TZGuszGHKzw5FOMDY6D--KmyY3E7ju5y-qDegOCguJE,359
50
+ molde/stylesheets/qmenubar.qss,sha256=ccw4SGFhLICrfZr_TZG6NSU7xHQz42ifraJyC3zVL2U,185
51
+ molde/stylesheets/qprogressbar.qss,sha256=LkC7WfMz_NAL1GXrfmVnGvLRgirsJjP5XMHDqIKoohk,303
52
+ molde/stylesheets/qpushbutton.qss,sha256=O2Sb_fkQFbBbZt0vmFb-Uj4FP9g2YSzBgX9Olo9eL-M,2002
53
+ molde/stylesheets/qradiobutton.qss,sha256=1eo-UOm4AlQWm2EWA39C2Efk3vW0j8qrZjrRJfoXohU,585
54
+ molde/stylesheets/qscrollbar.qss,sha256=8eB-kzQBI_M0IHqPUdig9S0BnH2voyUo0TrfHi-N95s,823
55
+ molde/stylesheets/qslider.qss,sha256=w7kpfV89X1smmZCxenwflz37e2Ff5K2WvYQdegFH3vs,938
56
+ molde/stylesheets/qtablewidget.qss,sha256=8uuX07mOKrHM4GCn-66skVZY-KIJ0hPm1yt4FD76Z_Y,481
57
+ molde/stylesheets/qtabwidget.qss,sha256=-7Lto_GUN0Xm8sX_4rMfC5DIdDvG3GOTn41CCdcgF6I,570
58
+ molde/stylesheets/qtoolbar.qss,sha256=6Acz9G3FesnzhO359Qv5pgooVr9ESHK2mV3LktyUWEo,1023
59
+ molde/stylesheets/qtoolbuttons.qss,sha256=WD-csaKuG9TbwrCJXPcpAwxdoJqMSK-Ya_8ZYDPls78,272
60
+ molde/stylesheets/qtreewidget.qss,sha256=r7bFn20jphbfmfnV6v9Qc70r8urKpMEV7VjODL_27pQ,557
61
+ molde/ui_files/messages/new_loading_window.ui,sha256=6tHF2G5UxPOxgmB1UOByBeWpF6hnxty8tJ2wUX3UKoU,1726
62
+ molde/utils/__init__.py,sha256=iBKDea05k49GO86zM-RuL4xvspHzpvkTz4OiVsN3ZzY,263
63
+ molde/utils/format_sequences.py,sha256=RHxWGpWBRi89jTk3F4sdlGsKqeheRD49PZMeM36Rs4A,1345
64
+ molde/utils/poly_data_utils.py,sha256=TME2mbVsCsNjzQaYmxPeYRNKEDYZvwIK2Xk_Hb_z-Js,1011
65
+ molde/utils/tree_info.py,sha256=FxgT_uKjtgi0-NVcH41LBoqRmAKt26NJmsjBk1WTqt8,1760
66
+ molde/windows/loading_window.py,sha256=3U1VEujSKWWWIu1aSqSkYCupTpstI0xks6csJhdKh5Y,6288
67
+ molde-0.1.2.dist-info/METADATA,sha256=ce9EdiAw_uHy040zQ7m0rXbQbtTpuir9JG52gN66xM8,2140
68
+ molde-0.1.2.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
69
+ molde-0.1.2.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.7.0
2
+ Generator: poetry-core 2.0.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,62 +0,0 @@
1
- molde/__init__.py,sha256=uutAOqWJe5XvTpDdU92HBNYga5Pa9zLaMowJBf-9P9U,92
2
- molde/__main__.py,sha256=CEHF8UXXsTxr2APu7lZX1MXHYR984bjQvgOzYFzh8Zc,2097
3
- molde/actors/__init__.py,sha256=8STcYmULmRKe8RhYih_ENSHR-zl7Rlowwfue5ZOT4yo,176
4
- molde/actors/ghost_actor.py,sha256=9LPRfWCjwHhLrZTAUhmmMNt3Tdb0fDAjjOn6BT-mspI,505
5
- molde/actors/lines_actor.py,sha256=T-9arZMV6kSWMmII1UFlGE-6NeAX1_zpmrUhaGNNbd8,1122
6
- molde/actors/round_points_actor.py,sha256=FZKq46MZ7IJspE9qdr4xHDoG_6qi4ZE7qzWjV47fv0Y,229
7
- molde/actors/square_points_actor.py,sha256=xANAWUyFxXMjddbQRDpiur7Slkq2bnk4ZE9MqUXk76k,1179
8
- molde/colors/__init__.py,sha256=dLQzT0Y_xOyyJrXJX-LNHIBxDkYiTxZLIgczWolZX5U,52
9
- molde/colors/color.py,sha256=cU1kNnRx1VmvRHLqJI92fVizcPvExQyLm5ifMBYcuGg,3813
10
- molde/colors/color_names.py,sha256=TljaYFpDU0O4VtlP6DWBKAdpsZxHmNj8732JgXsRw5Y,3082
11
- molde/fonts/IBMPlexMono-Bold.ttf,sha256=ykA8VpMbrvMH0gumS2mstxq8rWH3XmZBRmHVdIS2kOw,157924
12
- molde/fonts/IBMPlexMono-Regular.ttf,sha256=_hEwSl_pVtV0TptqJGzIPZBCUkXnWmIjAESWbKlqf1A,155940
13
- molde/icons/arrow_down_dark_theme.svg,sha256=xh1-dRW1CoWf_6TFfMkTn6gvS81YGE5Yk-52juIUR6M,178
14
- molde/icons/arrow_down_disabled_dark_theme.svg,sha256=_Ozch1OhlyWnr5c5axhj5b21URO98HND8ISsMzdGbUM,178
15
- molde/icons/arrow_down_disabled_light_theme.svg,sha256=S-jSOYNqv0wvBWXilyjxHQxTIe3DOmM1NiXa7VcF0hg,178
16
- molde/icons/arrow_down_light_theme.svg,sha256=VoKu7P9bbnkHpHpPB5PSMFaWrRBx7-Jm10AN4jLe2TQ,178
17
- molde/icons/arrow_left_dark_theme.svg,sha256=sssuH6Mu1CrhHX9ud5cLoAlseeBiG2LM3SDIDapTFIU,178
18
- molde/icons/arrow_left_light_theme.svg,sha256=a5d_wSWTBvUhKA5wiGLxHWl3zagyZmk-SsZmqit-0sQ,178
19
- molde/icons/arrow_right_dark_theme.svg,sha256=Ud-6rrHO_udGwLj5yRnm6Ryc8NzTG_7MXihPEKRP_Gg,178
20
- molde/icons/arrow_right_light_theme.svg,sha256=yQOgMPsc04bCARb3UKRQFPRuT1bJZEUbzaYmXMgkvq8,178
21
- molde/icons/arrow_up_dark_theme.svg,sha256=4pCqfzVNFYOVTTZcfeLsiusky65jxzBNWDS9_i-DFkA,179
22
- molde/icons/arrow_up_disabled_dark_theme.svg,sha256=2YBYo8-lfJsOCKdGZy8J0s3ATcTnmzN9nRL3ItGWefM,179
23
- molde/icons/arrow_up_disabled_light_theme.svg,sha256=mXbCteiX6LX1GPcvFjXa-_cZauFJPlIkl1FSz7m7W3E,179
24
- molde/icons/arrow_up_light_theme.svg,sha256=bpon_eUC97Q3nYlHvLPGBDoToUlZq2VHqGJsLMI6Cs4,179
25
- molde/icons/check_box_image.svg,sha256=5rKzmsoHYtp52jPY4TpWK0jd7mPLPTteYfbLUF2RJbY,335
26
- molde/interactor_styles/__init__.py,sha256=Ovu5F9EycKEDQ9GWYirJhvWaBEjjOZxNsacq3jv3SY4,126
27
- molde/interactor_styles/arcball_camera_style.py,sha256=0PNZbmMZhj-uKSWvuenMmhYU_6JJEMZZ28iVILc9di8,9605
28
- molde/interactor_styles/box_selection_style.py,sha256=qQCjvXxryOH1jwBc_jEX0N5q7vanmkFA6r7JJ0ybACk,2619
29
- molde/pickers/__init__.py,sha256=Jyc2t5A9vaypAlQ1U2dXC-XHHDG4jkbw2FoqnnLxh00,109
30
- molde/pickers/cell_area_picker.py,sha256=Dhvb-H1l0WqZoqs5Arp-9tGQBxdlNhPdVRCKRKJd--w,2114
31
- molde/pickers/cell_property_area_picker.py,sha256=cN2DK9No0BNFruTJKA3SCYUzXrfO8LSnHTbSL8c6W7Q,2953
32
- molde/poly_data/__init__.py,sha256=Yv9vfHFVKnHvspwPYtrjs4501mIKDY80jA3jhiGj4zM,76
33
- molde/poly_data/lines_data.py,sha256=DScG3EJSP713HbYdL8Dd8sZy-cQ7xXIlStdZXG5mBPs,737
34
- molde/poly_data/vertices_data.py,sha256=Ks6drjDTCd1rFZ9WkTo-rr-lQ_HiW3cLz4YIKKd4V90,697
35
- molde/render_widgets/__init__.py,sha256=gTCyI5MXmk7hl4yfrR2BpHPQl9bgYQdNZt2IiSj1Y4o,112
36
- molde/render_widgets/animated_render_widget.py,sha256=auh818MYT28-yfN4JkK4H-VQi2KSEo1-7fCJg_oH34M,5516
37
- molde/render_widgets/common_render_widget.py,sha256=Dc75TJFuRrs3mP76keOpiNoqsMJZzf_-UALhp9FlaMU,15850
38
- molde/stylesheets/__init__.py,sha256=GR1xgXquWIzeP2Nl8FChSTWISGlqoOYNQaDcc7eR3Cw,5433
39
- molde/stylesheets/common.qss,sha256=HuvCumTU25hBrH-_VNiTIKoTGUQ32-UMTV0qaxjZntA,320
40
- molde/stylesheets/create_color_page.py,sha256=2CSnUVxAgZHvX8KygdrP3lstaYOGxtakSQjIM71d3A4,1775
41
- molde/stylesheets/mainwindow.ui,sha256=wvoSOptjIw5O1PYKNBodL3HbDArXIUSlI-vM-5IDyjI,17726
42
- molde/stylesheets/qcheckbox.qss,sha256=pZuSdE7cyYu8lYuSbjxp9OPIfTm5eUQD5Hy7KZXMQhA,400
43
- molde/stylesheets/qinputs.qss,sha256=fL4M1rj2oKGCRfFpGQSB5GMNOD97UXPAXKNvTnVJq-I,2004
44
- molde/stylesheets/qlayouts.qss,sha256=LJTljRfE5DbDTSZmOO0Rmf75IFUZ1wAJDDfe56d9ycM,381
45
- molde/stylesheets/qmenubar.qss,sha256=oGQ-azlvl89wflKAkP66oAt3Wj9QEoy9E1wyJx0tb2c,197
46
- molde/stylesheets/qprogressbar.qss,sha256=NQV1s7Zi0eTlTyNHokzqkS26Et354dJ-4xMTbkN3h8U,314
47
- molde/stylesheets/qpushbutton.qss,sha256=ekNIaB6ojtSRBKJBzsYGYGcJGbSYp0PQEhGXlfU3yuA,2092
48
- molde/stylesheets/qradiobutton.qss,sha256=W49G2jGrC653kw3GMI2mDEIRqu-I0RZyZ9gBaDAua_o,615
49
- molde/stylesheets/qscrollbar.qss,sha256=YOMeK27slrqJLpbyk_wetTfVgmkLK8vjz-_YSzJLgMM,852
50
- molde/stylesheets/qslider.qss,sha256=q8FTMoSuJGr_l_J96pKAfeA8Eo56NQZDdJ7VLPSpYdc,999
51
- molde/stylesheets/qtablewidget.qss,sha256=870_y8cxVloz0KwVBfm6b3LOKjbny9TfAlF7qGLB3Qs,508
52
- molde/stylesheets/qtabwidget.qss,sha256=ygmcTp0S4bzV1X-QcVNKZn88YaLl6MIjCzqqlTHnYVk,599
53
- molde/stylesheets/qtoolbar.qss,sha256=o6WLggd0X1goQk8Ih0YrbxNjnUDwJZFrbzr0pTaltuU,1085
54
- molde/stylesheets/qtoolbuttons.qss,sha256=9IkxWx_zwGStuFZoEqGv8xcETnagvQGaFkKNJbLWnhk,286
55
- molde/stylesheets/qtreewidget.qss,sha256=nkwjNWFshp-nk_Ug_dLes2ZOU3ERYe8_NRHZt16zLoM,582
56
- molde/utils/__init__.py,sha256=Vi1vpnt_iKSZ9JjAoeyhddSja3p4THoj_KlXIOAbeuc,271
57
- molde/utils/format_sequences.py,sha256=ikyjXNXWgFHzg3vrv1lQA5VDJO5A678lHZT7HsMvMCg,1389
58
- molde/utils/poly_data_utils.py,sha256=cG88mGDtbJWU3Dmnnm9xgYsXJn027YAgs1TAlFiD_qo,1035
59
- molde/utils/tree_info.py,sha256=DyMshZuQKF_UVk-bchhHfvoRCiGloj49p4ABkZWgkKg,1812
60
- molde-0.1.1.dist-info/METADATA,sha256=goxGic1DLGy7xGlZVE9zKGrwfQ5BwAc0ABGQ5KJp_O0,2038
61
- molde-0.1.1.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
62
- molde-0.1.1.dist-info/RECORD,,