def __init__(self, ui: UserInterface.UserInterface, thumbnail_source: AbstractThumbnailSource, size: typing.Optional[Geometry.IntSize] = None) -> None: super().__init__() bitmap_overlay_canvas_item = BitmapOverlayCanvasItem() bitmap_canvas_item = CanvasItem.BitmapCanvasItem( background_color="#CCC", border_color="#444") bitmap_overlay_canvas_item.add_canvas_item(bitmap_canvas_item) if size is not None: bitmap_canvas_item.update_sizing( bitmap_canvas_item.sizing.with_fixed_size(size)) thumbnail_source.overlay_canvas_item.update_sizing( thumbnail_source.overlay_canvas_item.sizing.with_fixed_size( size)) bitmap_overlay_canvas_item.add_canvas_item( thumbnail_source.overlay_canvas_item) self.__thumbnail_source = thumbnail_source self.on_drag: typing.Optional[typing.Callable[[ UserInterface.MimeData, typing.Optional[_ImageDataType], int, int ], None]] = None self.on_drop_mime_data: typing.Optional[typing.Callable[ [UserInterface.MimeData, int, int], str]] = None self.on_delete: typing.Optional[typing.Callable[[], None]] = None def drag_pressed(x: int, y: int, modifiers: UserInterface.KeyboardModifiers) -> None: on_drag = self.on_drag if callable(on_drag): mime_data = ui.create_mime_data() valid, thumbnail = thumbnail_source.populate_mime_data_for_drag( mime_data, Geometry.IntSize(width=80, height=80)) if valid: on_drag(mime_data, thumbnail, x, y) def drop_mime_data(mime_data: UserInterface.MimeData, x: int, y: int) -> str: if callable(self.on_drop_mime_data): return self.on_drop_mime_data(mime_data, x, y) return "ignore" def delete() -> None: on_delete = self.on_delete if callable(on_delete): on_delete() bitmap_overlay_canvas_item.on_drag_pressed = drag_pressed bitmap_overlay_canvas_item.on_drop_mime_data = drop_mime_data bitmap_overlay_canvas_item.on_delete = delete def thumbnail_data_changed( thumbnail_data: typing.Optional[_NDArray]) -> None: bitmap_canvas_item.rgba_bitmap_data = thumbnail_data self.__thumbnail_source.on_thumbnail_data_changed = thumbnail_data_changed bitmap_canvas_item.rgba_bitmap_data = self.__thumbnail_source.thumbnail_data self.add_canvas_item(bitmap_overlay_canvas_item)
def __init__(self, ui, thumbnail_source: AbstractThumbnailSource, size: Geometry.IntSize): super().__init__() bitmap_overlay_canvas_item = BitmapOverlayCanvasItem() bitmap_canvas_item = CanvasItem.BitmapCanvasItem( background_color="#CCC", border_color="#444") bitmap_canvas_item.sizing.set_fixed_size(size) bitmap_overlay_canvas_item.add_canvas_item(bitmap_canvas_item) thumbnail_source.overlay_canvas_item.sizing.set_fixed_size(size) bitmap_overlay_canvas_item.add_canvas_item( thumbnail_source.overlay_canvas_item) self.__thumbnail_source = thumbnail_source self.on_drag = None self.on_drop_mime_data = None self.on_delete = None def drag_pressed(x, y, modifiers): on_drag = self.on_drag if callable(on_drag): mime_data = ui.create_mime_data() valid, thumbnail = thumbnail_source.populate_mime_data_for_drag( mime_data, size) if valid: on_drag(mime_data, thumbnail, x, y) def drop_mime_data(mime_data: UserInterface.MimeData, x: int, y: int) -> str: if callable(self.on_drop_mime_data): return self.on_drop_mime_data(mime_data, x, y) return "ignore" def delete(): on_delete = self.on_delete if callable(on_delete): on_delete() bitmap_overlay_canvas_item.on_drag_pressed = drag_pressed bitmap_overlay_canvas_item.on_drop_mime_data = drop_mime_data bitmap_overlay_canvas_item.on_delete = delete def thumbnail_data_changed(thumbnail_data): bitmap_canvas_item.rgba_bitmap_data = thumbnail_data self.__thumbnail_source.on_thumbnail_data_changed = thumbnail_data_changed bitmap_canvas_item.rgba_bitmap_data = self.__thumbnail_source.thumbnail_data self.add_canvas_item(bitmap_overlay_canvas_item)