batframework 1.0.7__py3-none-any.whl → 1.0.8a2__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 (51) hide show
  1. batFramework/__init__.py +47 -41
  2. batFramework/action.py +20 -42
  3. batFramework/actionContainer.py +4 -43
  4. batFramework/animatedSprite.py +65 -98
  5. batFramework/audioManager.py +25 -39
  6. batFramework/camera.py +56 -226
  7. batFramework/constants.py +48 -32
  8. batFramework/cutscene.py +24 -32
  9. batFramework/cutsceneBlocks.py +33 -30
  10. batFramework/debugger.py +48 -0
  11. batFramework/dynamicEntity.py +7 -8
  12. batFramework/easing.py +23 -28
  13. batFramework/entity.py +52 -89
  14. batFramework/gui/__init__.py +1 -3
  15. batFramework/gui/button.py +58 -124
  16. batFramework/gui/constraints.py +90 -163
  17. batFramework/gui/container.py +18 -29
  18. batFramework/gui/debugger.py +42 -106
  19. batFramework/gui/frame.py +9 -15
  20. batFramework/gui/image.py +17 -36
  21. batFramework/gui/indicator.py +14 -20
  22. batFramework/gui/interactiveWidget.py +12 -63
  23. batFramework/gui/label.py +50 -113
  24. batFramework/gui/layout.py +51 -66
  25. batFramework/gui/root.py +29 -70
  26. batFramework/gui/shape.py +41 -34
  27. batFramework/gui/toggle.py +29 -37
  28. batFramework/gui/widget.py +131 -174
  29. batFramework/manager.py +14 -21
  30. batFramework/particles.py +20 -41
  31. batFramework/scene.py +72 -173
  32. batFramework/sceneManager.py +80 -40
  33. batFramework/stateMachine.py +0 -1
  34. batFramework/time.py +51 -62
  35. batFramework/transition.py +154 -0
  36. batFramework/utils.py +150 -3
  37. batframework-1.0.8a2.dist-info/METADATA +58 -0
  38. batframework-1.0.8a2.dist-info/RECORD +42 -0
  39. {batframework-1.0.7.dist-info → batframework-1.0.8a2.dist-info}/WHEEL +1 -1
  40. batFramework/enums.py +0 -14
  41. batFramework/fontManager.py +0 -57
  42. batFramework/gui/dialogueBox.py +0 -70
  43. batFramework/gui/slider.py +0 -5
  44. batFramework/gui/textInput.py +0 -88
  45. batFramework/resourceManager.py +0 -72
  46. batFramework/sprite.py +0 -33
  47. batFramework/tileset.py +0 -64
  48. batframework-1.0.7.dist-info/LICENCE +0 -21
  49. batframework-1.0.7.dist-info/METADATA +0 -55
  50. batframework-1.0.7.dist-info/RECORD +0 -50
  51. {batframework-1.0.7.dist-info → batframework-1.0.8a2.dist-info}/top_level.txt +0 -0
@@ -1,70 +0,0 @@
1
- from .label import Label
2
- import batFramework as bf
3
- from typing import Self
4
- class DialogueBox(Label):
5
- def __init__(self)->None:
6
- self.cursor_position :float = 0.0
7
- self.text_speed :float = 20.0
8
- self.message_queue : list[str]= []
9
- self.is_over : bool = True
10
- super().__init__("")
11
-
12
- self.set_autoresize(False)
13
- self.set_alignment(bf.Alignment.LEFT)
14
-
15
- def set_text_speed(self,speed:float)->Self:
16
- self.text_speed = speed
17
- return self
18
-
19
- def cut_text_to_width(self,text:str)->list[str]:
20
- if text == '' or self.get_content_width() < 1 or not self._font_object : return ['']
21
-
22
- for index in range(len(text)):
23
-
24
- width = self._font_object.size(text[:index])[0]
25
- if width > self.get_content_width():
26
- cut_point_start = index-1
27
- cut_point_end = index-1
28
- last_space = text.rfind(' ',0,cut_point_start)
29
- if last_space != -1 : # space was found !:
30
- cut_point_start = last_space
31
- cut_point_end = last_space+1
32
-
33
- res = [text[:cut_point_start].strip()]
34
- res.extend(self.cut_text_to_width(text[cut_point_end:].strip()))
35
- return res
36
- return [text]
37
-
38
- def say(self,message:str):
39
- message = '\n'.join(self.cut_text_to_width(message))
40
- self.message_queue.append(message)
41
-
42
- self.is_over = False
43
-
44
- def is_queue_empty(self)->bool:
45
- return not self.message_queue
46
-
47
- def is_current_message_over(self)->bool:
48
- return self.is_over
49
-
50
- def clear_queue(self)->None:
51
- self.message_queue.clear()
52
- self.next_message()
53
-
54
- def next_message(self)->None:
55
- if self.message_queue:
56
- self.message_queue.pop(0)
57
- self.cursor_position = 0
58
- self.set_text("")
59
-
60
- def do_update(self,dt):
61
- if not self.message_queue : return
62
- if not self.is_over and self.cursor_position == len(self.message_queue[0]):
63
- self.is_over = True
64
- else:
65
- self.cursor_position = min(
66
- self.cursor_position + self.text_speed * dt,
67
- len(self.message_queue[0])
68
- )
69
- self.set_text(self.message_queue[0][:int(self.cursor_position)])
70
-
@@ -1,5 +0,0 @@
1
- import batFramework as bf
2
-
3
-
4
- class Slider(bf.Widget):
5
- pass
@@ -1,88 +0,0 @@
1
- import batFramework as bf
2
- from typing import Self
3
- from .label import Label
4
- from .interactiveWidget import InteractiveWidget
5
- import pygame
6
-
7
- class TextInput(Label,InteractiveWidget):
8
- def __init__(self)->None:
9
- self.cursor_position = 0
10
- self.cursor_color = "gray20"
11
- super().__init__("A")
12
- self.set_text("")
13
- self.set_focusable(True)
14
- self.set_outline_color("black")
15
- self.old_key_repeat :tuple= (0,0)
16
- self._cursor_timer = bf.Timer(0.3,self._cursor_toggle,loop=True).start()
17
- self._cursor_timer.pause()
18
- self._show_cursor :bool = True
19
-
20
- def to_string_id(self) -> str:
21
- return f"TextInput({self._text})"
22
-
23
- def _cursor_toggle(self):
24
- self._show_cursor = not self._show_cursor
25
- self.build()
26
-
27
- def set_cursor_color(self,color)->Self:
28
- self.cursor_color = color
29
- return self
30
-
31
- def do_on_click_down(self,button):
32
- if button != 1:return
33
- self.get_focus()
34
- def do_on_enter(self):
35
- pygame.mouse.set_cursor(pygame.SYSTEM_CURSOR_IBEAM)
36
-
37
- def do_on_exit(self):
38
- pygame.mouse.set_cursor(pygame.SYSTEM_CURSOR_ARROW)
39
-
40
- def do_on_get_focus(self):
41
- self.set_outline_width(2)
42
- self.old_key_repeat = pygame.key.get_repeat()
43
- self._cursor_timer.resume()
44
- pygame.key.set_repeat(200,100)
45
- def do_on_lose_focus(self):
46
- self.set_outline_width(0)
47
- self._cursor_timer.pause()
48
- pygame.key.set_repeat(*self.old_key_repeat)
49
-
50
- def set_cursor_position(self,position:int)->Self:
51
- if position < 0 : position = 0
52
- elif position > len(self.get_text()): position = len(self.get_text())
53
- self.cursor_position = position
54
- self.build()
55
- return self
56
-
57
- def do_handle_event(self,event)->bool:
58
- text = self.get_text()
59
- if not self.is_focused : return False
60
- if event.type == pygame.TEXTINPUT:
61
- self.set_text(text[:self.cursor_position]+event.text+text[self.cursor_position:])
62
- self.set_cursor_position(self.cursor_position+1)
63
- return True
64
- if event.type == pygame.KEYDOWN and event.key == pygame.K_BACKSPACE:
65
- if self.cursor_position != 0 :
66
- self.set_text(text[:self.cursor_position-1]+text[self.cursor_position:])
67
- self.set_cursor_position(self.cursor_position-1)
68
- return True
69
-
70
- if event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT:
71
- self.set_cursor_position(self.cursor_position+1)
72
- return True
73
- if event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT:
74
- self.set_cursor_position(self.cursor_position-1)
75
- return True
76
- return False
77
-
78
- def _build_cursor(self)->None:
79
- if not self._font_object : return
80
- if not self._show_cursor : return
81
- partial_text_size = self._font_object.size(self.get_text()[:self.cursor_position])
82
- cursor_rect = pygame.Rect(0,0,2,partial_text_size[1]+2)
83
- cursor_rect.midleft = self._text_rect.move(partial_text_size[0],0).midleft
84
- pygame.draw.rect(self.surface, self.cursor_color, cursor_rect)
85
-
86
- def build(self)->None:
87
- super().build()
88
- if self.is_focused : self._build_cursor()
@@ -1,72 +0,0 @@
1
- import batFramework as bf
2
- import os
3
- import pygame
4
- import sys
5
- import json
6
- from .utils import Singleton
7
- if getattr(sys, "frozen", False):
8
- # If the application is run as a bundle, the PyInstaller bootloader
9
- # extends the sys module by a flag frozen=True and sets the app
10
- # path into variable _MEIPASS'.
11
- application_path = sys._MEIPASS
12
- else:
13
- application_path = os.getcwd()
14
-
15
-
16
- class ResourceManager(metaclass=Singleton):
17
- def __init__(self):
18
- self.convert_image_cache = {}
19
- self.convert_alpha_image_cache = {}
20
- self.sound_cache = {}
21
- self.RESOURCE_PATH = "."
22
-
23
- def load_dir(self,path)->None:
24
- for root, dirs, files in os.walk(path):
25
-
26
- files = [f for f in files if not f[0] == '.']
27
- dirs[:] = [d for d in dirs if not d[0] == '.']
28
-
29
- for file in files:
30
- file_path = os.path.join(root, file)
31
- if file.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):
32
- self.load_image(file_path)
33
-
34
- elif file.lower().endswith(('.mp3', '.wav')):
35
- #AudioManager.load_sound(file_path)
36
- pass
37
- def set_resource_path(self,path: str):
38
- self.RESOURCE_PATH = os.path.join(application_path, path)
39
- print(f"Resource path : '{self.RESOURCE_PATH}'")
40
-
41
-
42
- def get_path(self,path: str):
43
- return os.path.join(self.RESOURCE_PATH, path)
44
-
45
- def load_image(self,path)->None:
46
- key = self.get_path(path)
47
- if key in self.convert_image_cache : return
48
- self.convert_image_cache[key] = pygame.image.load(path).convert()
49
- self.convert_alpha_image_cache[key] = pygame.image.load(path).convert_alpha()
50
- print(f"Loaded image : '{path}'")
51
-
52
- def get_image(self,path,convert_alpha:bool=False):
53
- key = self.get_path(path)
54
- return self.convert_alpha_image_cache.get(key,None) if\
55
- convert_alpha else self.convert_image_cache.get(key,None)
56
-
57
- def load_json_from_file(self,path: str) -> dict|None:
58
- try:
59
- with open(self.get_path(path), "r") as file:
60
- data = json.load(file)
61
- return data
62
- except FileNotFoundError:
63
- print(f"File '{path}' not found")
64
- return None
65
-
66
- def save_json_to_file(self,path: str, data) -> bool:
67
- try:
68
- with open(self.get_path(path), "w") as file:
69
- json.dump(data, file, indent=2)
70
- return True
71
- except FileNotFoundError:
72
- return False
batFramework/sprite.py DELETED
@@ -1,33 +0,0 @@
1
- import batFramework as bf
2
- import pygame
3
- from typing import Self
4
-
5
- class Sprite(bf.DynamicEntity):
6
- def __init__(
7
- self,
8
- data: pygame.Surface | str,
9
- size: None | tuple[int, int] = None,
10
- convert_alpha: bool = True,
11
- ):
12
- self.original_surface = None
13
- super().__init__(convert_alpha=convert_alpha)
14
- if data:
15
- self.set_image(data, size)
16
-
17
- def set_image(
18
- self, data: pygame.Surface | str, size: None | tuple[int, int] = None
19
- ):
20
- if isinstance(data, str):
21
- tmp = bf.ResourceManager().get_image(data,self.convert_alpha)
22
- self.original_surface = tmp
23
- elif isinstance(data, pygame.Surface):
24
- self.original_surface = data
25
- else:
26
- raise ValueError("Image data can be either path or Surface")
27
- if self.convert_alpha:
28
- self.original_surface = self.original_surface.convert_alpha()
29
- if not size:
30
- size = self.original_surface.get_size()
31
- self.surface = pygame.transform.scale(self.original_surface, size)
32
- self.rect = self.surface.get_frect(center=self.rect.center)
33
-
batFramework/tileset.py DELETED
@@ -1,64 +0,0 @@
1
- import pygame
2
- from .utils import Utils
3
- from .resourceManager import ResourceManager
4
-
5
- class Tileset:
6
- _tilesets = {}
7
- _flip_cache = {} # {"tileset":tileset,"index","flipX","flipY"}
8
-
9
- def __init__(self, source: pygame.Surface | str, tilesize) -> None:
10
- if isinstance(source, str):
11
- source = ResourceManager().get_image(source,convert_alpha=True)
12
-
13
- self.tile_dict = {}
14
- self.surface = source
15
- self.tile_size = tilesize
16
- self.split_surface(self.surface)
17
-
18
- def split_surface(self, surface: pygame.Surface):
19
- width, height = surface.get_size()
20
- num_tiles_x = width // self.tile_size
21
- num_tiles_y = height // self.tile_size
22
- # Iterate over the tiles vertically and horizontally
23
- for y in range(num_tiles_y):
24
- for x in range(num_tiles_x):
25
- # Calculate the coordinates of the current tile in the tileset
26
- tile_x = x * self.tile_size
27
- tile_y = y * self.tile_size
28
- # Create a subsurface for the current tile
29
- tile_surface = surface.subsurface(
30
- pygame.Rect(tile_x, tile_y, self.tile_size, self.tile_size)
31
- )
32
- # Calculate the unique key for the tile (e.g., based on its coordinates)
33
- tile_key = (x, y)
34
- # Store the subsurface in the dictionary with the corresponding key
35
- self.tile_dict[tile_key] = tile_surface
36
- # print(self.tile_dict)
37
-
38
- def get_tile(self, x, y, flipX=False, flipY=False) -> pygame.Surface | None:
39
- if (x, y) not in self.tile_dict:
40
- return None
41
- if flipX or flipY:
42
- key = f"{x}{y}:{flipX}{flipY}"
43
- if not key in self._flip_cache:
44
- self._flip_cache[key] = pygame.transform.flip(
45
- self.tile_dict[(x, y)], flipX, flipY
46
- )
47
- return self._flip_cache[key]
48
- return self.tile_dict[(x, y)]
49
-
50
- @staticmethod
51
- def load_tileset(path: str, name: str, tilesize) -> "Tileset":
52
- if name in Tileset._tilesets:
53
- return Tileset._tilesets[name]
54
- else:
55
- img = ResourceManager().get_image(path,convert_alpha=True)
56
- tileset = Tileset(img, tilesize)
57
- Tileset._tilesets[name] = tileset
58
- return tileset
59
-
60
- @staticmethod
61
- def get_tileset(name: str) -> "Tileset":
62
- if name not in Tileset._tilesets:
63
- return None
64
- return Tileset._tilesets[name]
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) [2023] [TURAN BATURAY]
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,55 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: batframework
3
- Version: 1.0.7
4
- Summary: Pygame framework for making games easier.
5
- Author-email: Turan Baturay <baturayturan@gmail.com>
6
- Project-URL: Homepage, https://github.com/TuranBaturay/batFramework
7
- Classifier: Programming Language :: Python :: 3
8
- Classifier: License :: OSI Approved :: MIT License
9
- Classifier: Operating System :: OS Independent
10
- Requires-Python: >=3.11
11
- Description-Content-Type: text/markdown
12
- License-File: LICENCE
13
- Requires-Dist: pygame-ce
14
-
15
- # batFramework & gamejam Project
16
-
17
- Welcome to the `batFramework` and the accompanying `gamejam` project. This README provides an overview of both the game framework and the specific game project developed using the framework.
18
-
19
- ## batFramework
20
-
21
- The `batFramework` is a Python game development framework based on pygame, designed to streamline the process of creating 2D games. It provides a set of tools and components to handle scenes, transitions, cutscenes, audio, sprites, and more. The framework is built with flexibility in mind, allowing you to focus on game design while abstracting away low-level details.
22
-
23
- ### Features
24
-
25
- - Scene management
26
- - Cutscene support
27
- - Audio management (music and sound effects with volume control)
28
- - Entity, sprite, and animated sprite handling
29
- - Transition effects
30
- - Utility modules (time management, constants, etc.)
31
- - No external dependency except for pygame
32
-
33
- ### Explore batFramework
34
-
35
- 1. Install Python (version 3.11 or higher) and the latest stable version of pygame-ce.
36
- 2. Clone or download this repository.
37
- 4. Explore the framework's modules in the `batFramework` directory and integrate them into your own game project.
38
-
39
- For more detailed information on how to use the framework, refer to the documentation (if available) or explore the source code in the `batFramework` directory.
40
-
41
- ## gamejam Project
42
-
43
- The `gamejam` project is a specific game developed using the `batFramework`. It serves as an example of how the framework can be used to create a game from scratch.
44
-
45
- ### Play the gamejam Project
46
-
47
- 1. Install Python (version 3.10 or higher) and the latest stable version of pygame-ce.
48
- 2. Clone or download this repository.
49
- 3. Navigate to the `gamejam` directory.
50
- 4. Run the game by executing the main script (e.g., `python main.py`).
51
- 5. Play the game and have fun!
52
-
53
- Feel free to explore the code in the `gamejam` directory to see how the `batFramework` is utilized to create the game. You can modify, extend, or use the project as a starting point for your own games.
54
-
55
-
@@ -1,50 +0,0 @@
1
- batFramework/__init__.py,sha256=YaelCDRz3Ngj9ftajpfwXOJKEr4yOIiF56xt9XSJoo4,2111
2
- batFramework/action.py,sha256=6XQ3sBylO00UYrGfh5GKjwP9PqgtixIV0um4uwiFj4w,8364
3
- batFramework/actionContainer.py,sha256=DMWDWZ9mff70VErtunX7yOfiqOxBuGNGfO9b1YXW1CI,2498
4
- batFramework/animatedSprite.py,sha256=vrwpBaE17S-ye7v2iR9X5s0LPuAJlwGc9rs8ykQXdTk,4944
5
- batFramework/audioManager.py,sha256=yR1_dt5Q17DV6xAHwZ55j67cEz8x8vSev1xRyFD5w6s,3067
6
- batFramework/camera.py,sha256=CnjCoIm4m7rmzlskF0ZjCxMtu3wV_mdaYy8LO6Jw5Ug,8846
7
- batFramework/constants.py,sha256=VbUoeyG00Coz5BxiWrTsO6d0G96Y6Q5CU24E3z5wRR0,1426
8
- batFramework/cutscene.py,sha256=-cDTTCuQhbHBnnxbDK3O99Sqvw5z3vIKWfA3Q-iYJX4,3882
9
- batFramework/cutsceneBlocks.py,sha256=w4VWJXuhtohT0nXDXiJelKKG9EebfQvjisLEgYq2VJY,4889
10
- batFramework/dynamicEntity.py,sha256=O4Bp39BjYUpQBscNqqKuyt2dTTnFK_8f8R0ZIqsdHu8,688
11
- batFramework/easing.py,sha256=M5YjDot_l6DVdotKAbShIQlfotrs_WLpnLqQgQdAfa8,2269
12
- batFramework/entity.py,sha256=iuWIFoWW5fVByGiY7AUQ-qVymxJLldJMXIKeD4CF4_M,4200
13
- batFramework/enums.py,sha256=b7d4TuEyG6WGoXn0ABrmc6VsrwKrkJ2bCrMXtz37DB0,226
14
- batFramework/fontManager.py,sha256=zqevsjZR37EalyHIiaGvnppQfWdCSEWbKLT4da0gYaQ,2136
15
- batFramework/manager.py,sha256=5TLo-LSX3kiERYsoibaAAZMIKzcqXZu3hY9Yul0GGNk,1952
16
- batFramework/particles.py,sha256=pdH9LFfOyDE59DpwHj6KWOj063NfeolzInq2Rj0fctI,2592
17
- batFramework/resourceManager.py,sha256=wU68ZIftef9B7PruK9IkkSGaiHmPeoX5YrZYGy3LNlg,2580
18
- batFramework/scene.py,sha256=sVmribXn0nwvPiq-yH-3qXfvrNELhoFHEyc3nhLNck0,10739
19
- batFramework/sceneManager.py,sha256=nL69hrYv24HeoLig_bgdj1-RnWWcgnwyA5_Z5Sa07d0,4109
20
- batFramework/sprite.py,sha256=xdHsRfxAb0aF7gCNsyzGq6y4vC2tZYtyQiJEqbOgrzM,1154
21
- batFramework/stateMachine.py,sha256=er7WB7I4V81jgUrd-9ftfyYczKpPsEbgdWRXzYl6e9k,1339
22
- batFramework/tileset.py,sha256=d4lmfgJwgUxhU3odVRtyQxQ84N600lpAMMjYp8Cvyf4,2523
23
- batFramework/time.py,sha256=Wlss4ZzWOB2LU-3IRZLsPuDN_SJ8YOatk0OEwdXQlhA,2516
24
- batFramework/transition.py,sha256=crWQ4taWvOnNlQzzWOH9NA4ytBkoaSZI2rNIb9rne-8,41
25
- batFramework/transitionManager.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- batFramework/triggerZone.py,sha256=ikOOlJT1KIND0MO2xiilCHuKlb1eQhkCMEhZTi1btsI,586
27
- batFramework/utils.py,sha256=Ud7qoB_dvhnx7oviZ_RamlFpsuOXqYL2gkcB67SYDRo,1094
28
- batFramework/gui/__init__.py,sha256=8HGFEVlCrJh8MphfAnL79k_uLJzgVdFagQCAuWkXZGM,454
29
- batFramework/gui/button.py,sha256=OSH9l_l4LfvFIICdZGMRYA3-n3hZA_nqfqAbMgoMwW4,4490
30
- batFramework/gui/constraints.py,sha256=gZN61hYirs1yzvuunszxaiioBwzpSmwRP-EDExZCP3A,10492
31
- batFramework/gui/container.py,sha256=qG8Db7H9P4HHRELHtS_bnBTsTh89BWs8PnIqEGBO0D4,1755
32
- batFramework/gui/debugger.py,sha256=CIPrQdYDX0Y6hAdnkcRLengGD5vkitgilygXcHu2xFw,3385
33
- batFramework/gui/dialogueBox.py,sha256=ME9dJK2BbKAH39xpz7VApRuKw6na3u0JuIvqLHwDS5I,2368
34
- batFramework/gui/frame.py,sha256=kY2Jmt1YpYTg4Aa28qmLQaI59BQ-_nq0FOB7Lf2e_hM,861
35
- batFramework/gui/image.py,sha256=S71a11FI_gkopXwXb9kRuSLJ-qEI4AJoiJY53ZXIprg,1341
36
- batFramework/gui/indicator.py,sha256=awVhrY1holODuAnChfU1_m6Lp7aLGspSTFdHUnVZo2I,1128
37
- batFramework/gui/interactiveWidget.py,sha256=i_uwmQmJGUFhpLz17wh-GVOJNvU9_zw3e2ZlsnnE4CA,1661
38
- batFramework/gui/label.py,sha256=oxLNmgZCV0-Y-Ne6Azp6u0wkUC-Nj6_grj2MXDwr04k,5666
39
- batFramework/gui/layout.py,sha256=w1BypRnYzwA4dtcFK4NtUirVnYoBUJsxApliHCXzQmk,3290
40
- batFramework/gui/root.py,sha256=7zIE46mNDfVwLJXsFKm6d99bucTC0hBrSEreJsA7vps,3276
41
- batFramework/gui/shape.py,sha256=sEuaRjpCRQHj_GomqWtXlHQMyCDw3ZuZsJ6-bAkqJPY,2459
42
- batFramework/gui/slider.py,sha256=8rLHN-4yxavrOsTQi79SguCAR9Er8qCmkWKjUdMnPYg,62
43
- batFramework/gui/textInput.py,sha256=bQGFn0xO7wXibW8Gl0aQTFQbmx90X-l61eCYsgZeGYk,3274
44
- batFramework/gui/toggle.py,sha256=8UZHIK7176jP3choAboUReu8x3br2ilOqnnKrkF2Ul0,2259
45
- batFramework/gui/widget.py,sha256=NMr9T6vL4aACQ0VNOJMd2YV7SoIQbOOUzzSyY6TEC_4,11961
46
- batframework-1.0.7.dist-info/LICENCE,sha256=A65iXbMDbOxQLDNOODJLqA7o5RxszYlEqIgNSzBQRf4,1073
47
- batframework-1.0.7.dist-info/METADATA,sha256=F0WSu0itPcqPIJPem0BWonVmJ10M9wbnPOHwEvOhJjk,2499
48
- batframework-1.0.7.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
49
- batframework-1.0.7.dist-info/top_level.txt,sha256=vxAKBIk1oparFTxeXGBrgfIO7iq_YR5Fv1JvPVAIwmA,13
50
- batframework-1.0.7.dist-info/RECORD,,