Exemplo n.º 1
0
 def change_image(self, image_path: str) -> None:
     try:
         self.image.load_image(image_path)
     except ValueError:
         self.clear_image()
         PUBLISHER.queue_message("ImageLoadingError")
     self.update_image()
Exemplo n.º 2
0
 def image_selection(self, image_path: str) -> None:
     try:
         self.validator.validate_resolution()
         self.image.scaled_resolution = int(self.state.resolution)
     except ValueError:
         return
     self.image.overlay.clear()
     PUBLISHER.queue_message("ImageChangeRequest", image_path=image_path)
Exemplo n.º 3
0
 def save_command(self) -> None:
     filename = filedialog.asksaveasfilename(
         title="Save Image",
         defaultextension="png",
         filetypes=[("PNG", ".png"), ("JPG", ".jpg"), ("JPEG", ".jpeg")],
     )
     if not filename:
         return
     PUBLISHER.queue_message("ImageSaveRequest", image_path=filename)
Exemplo n.º 4
0
 def _image_clicked(self, event: tk.Event) -> None:
     if not self.image.loaded:
         return
     x: int = event.x  # type: ignore[attr-defined]
     y: int = event.y  # type: ignore[attr-defined]
     scaled_width, scaled_height = self._get_scaled_size()
     height, width, _ = self.image.pixels.shape
     real_x = int(x * (width / scaled_width))
     real_y = int(y * (height / scaled_height))
     PUBLISHER.queue_message("ImageClicked", x=real_x, y=real_y)
Exemplo n.º 5
0
 def validate_resolution(self) -> None:
     try:
         integer_resolution = int(self.resolution)
     except ValueError:
         PUBLISHER.queue_message("ResolutionResetRequest")
         self.show_resolution_error()
         raise ValueError(f"Invalid Resolution: {self.resolution}")
     if not isInRange(integer_resolution, MIN_RESOLUTION, MAX_RESOLUTION):
         PUBLISHER.queue_message("ResolutionResetRequest")
         self.show_resolution_error()
         raise ValueError(f"Invalid Resolution: {self.resolution}")
Exemplo n.º 6
0
 def validate_framerate(self) -> None:
     try:
         integer_framerate = int(self.framerate)
     except ValueError:
         self.show_framerate_error()
         PUBLISHER.queue_message("FramerateResetRequest")
         raise ValueError(f"Invalid Framerate: {self.framerate}")
     if not isInRange(integer_framerate, MIN_FRAMERATE, MAX_FRAMERATE):
         PUBLISHER.queue_message("FramerateResetRequest")
         self.show_framerate_error()
         raise ValueError(f"Invalid Framerate: {self.framerate}")
Exemplo n.º 7
0
 def set_point(self, x: int, y: int) -> None:
     if self.state.working or not self.state.image.loaded:
         return
     if self.status == PointStatus.START:
         self.start_point = Point(x, y)
     elif self.status == PointStatus.END:
         self.end_point = Point(x, y)
     if self.status != PointStatus.NONE:
         self.image.reset_result()
         self.image.overlay.clear()
         self._set_start_point()
         self._set_end_point()
         PUBLISHER.queue_message("ImageUpdateRequest")
     self.status = PointStatus.NONE
Exemplo n.º 8
0
 def start_point_command(self) -> None:
     PUBLISHER.queue_message("PointChangeRequest", kind="start")
Exemplo n.º 9
0
 def select_image(self) -> None:
     filename = filedialog.askopenfilename(title="Select an Image")
     if not filename:
         return
     PUBLISHER.queue_message("MazeCancelRequest")
     PUBLISHER.queue_message("ImageSelectionRequest", image_path=filename)
Exemplo n.º 10
0
 def image_reset(self) -> None:
     self.image.reset_result()
     PUBLISHER.queue_message("ImageUpdateRequest")
Exemplo n.º 11
0
 def stop_command(self) -> None:
     PUBLISHER.queue_message("MazeStopRequest")
Exemplo n.º 12
0
 def solve_command(self) -> None:
     PUBLISHER.queue_message("MazeSolveRequest")
Exemplo n.º 13
0
 def _entry_changed(self, *_: Any) -> None:
     framerate = self.string_var.get()
     PUBLISHER.queue_message("FramerateChangeRequest", framerate=framerate)
Exemplo n.º 14
0
 def _entry_changed(self, *_: Any) -> None:
     resolution = self.string_var.get()
     PUBLISHER.queue_message("ResolutionChangeRequest",
                             resolution=resolution)
Exemplo n.º 15
0
 def end_point_command(self) -> None:
     PUBLISHER.queue_message("PointChangeRequest", kind="end")
Exemplo n.º 16
0
 def resume_command(self) -> None:
     PUBLISHER.queue_message("MazeResumeRequest")
Exemplo n.º 17
0
 def cancel_command(self) -> None:
     PUBLISHER.queue_message("MazeCancelRequest")