def __init__(self, parent_window: Window.Window, ui_widget: Declarative.UIDescription, ui_handler: Declarative.HandlerLike) -> None: super().__init__(parent_window.ui, app=parent_window.app, parent_window=parent_window, window_style="popup") from nion.ui import Declarative # avoid circular reference def request_close() -> None: # this may be called in response to the user clicking a button to close. # make sure that the button is not destructed as a side effect of closing # the window by queueing the close. and it is not possible to use event loop # here because the event loop limitations: not able to run both parent and child # event loops simultaneously. parent_window.queue_task(self.request_close) # make and attach closer for the handler; put handler into container closer self.__closer = Declarative.Closer() if ui_handler and hasattr(ui_handler, "close"): setattr(ui_handler, "_closer", Declarative.Closer()) self.__closer.push_closeable(ui_handler) finishes: typing.List[typing.Callable[[], None]] = list() self.widget = Declarative.construct(parent_window.ui, self, ui_widget, ui_handler, finishes) self.attach_widget(self.widget) for finish in finishes: finish() if ui_handler and hasattr(ui_handler, "init_handler"): getattr(ui_handler, "init_handler")() if ui_handler and hasattr(ui_handler, "init_popup"): getattr(ui_handler, "init_popup")(request_close) self.__ui_handler = ui_handler
def __init__(self, parent_window: Window.Window, ui_widget: Declarative.UIDescription, ui_handler): super().__init__(parent_window.ui, app=parent_window.app, parent_window=parent_window, window_style="popup") def request_close(): # this may be called in response to the user clicking a button to close. # make sure that the button is not destructed as a side effect of closing # the window by queueing the close. and it is not possible to use event loop # here because the event loop limitations: not able to run both parent and child # event loops simultaneously. parent_window.queue_task(self.request_close) # make and attach closer for the handler; put handler into container closer self.__closer = Declarative.Closer() if ui_handler and hasattr(ui_handler, "close"): ui_handler._closer = Declarative.Closer() self.__closer.push_closeable(ui_handler) finishes = list() self.widget = Declarative.construct(parent_window.ui, self, ui_widget, ui_handler, finishes) self.attach_widget(self.widget) for finish in finishes: finish() if ui_handler and hasattr(ui_handler, "init_handler"): ui_handler.init_handler() if ui_handler and hasattr(ui_handler, "init_popup"): ui_handler.init_popup(request_close) # TODO: select all works, but edit commands don't work # TODO: tabs don't work self._create_menus() self.__ui_handler = ui_handler