Source code for glooey.dialogs

#!/usr/bin/env python3

"""
Widget that appear in front of everything else to quickly communicate something 
to the user.
"""

import pyglet
import autoprop

from glooey.text import Label
from glooey.images import Background
from glooey.buttons import Button
from glooey.containers import Grid, HBox, Frame
from glooey.misc import Spacer
from glooey.helpers import *

[docs]@autoprop @register_event_type('on_close') class Dialog(Frame):
[docs] def open(self, gui): self.close() gui.add(self)
[docs] def close(self): if self.root is not None: self.root.remove(self) self.dispatch_event('on_close', self)
[docs]@autoprop class ButtonDialog(Dialog): Box = Grid Content = Label custom_autoadd_content = False
[docs] class Buttons(HBox): custom_alignment = 'right'
[docs] def __init__(self, *args, **kwargs): super().__init__() self.__content = self.Content(*args, **kwargs) self.__buttons = self.Buttons() self.box.add(0, 0, self.__content) self.box.add(1, 0, self.__buttons) self.box.set_row_height(1, 0)
[docs] def add(self, widget): self.box.add(0, 0, widget) self.__content = widget
[docs] def clear(self): self.remove(0, 0)
[docs] def get_content(self): return self.__content
[docs] def get_buttons(self): return self.__buttons
[docs] def _replace_button(self, old_button, new_button, on_click): old_button.remove_handlers(on_click=on_click) new_button.push_handlers(on_click=on_click) self.__buttons.replace(old_button, new_button)
[docs]@autoprop class OkDialog(ButtonDialog):
[docs] class OkButton(Button): #
[docs] class Label(Label): custom_text = 'Ok'
[docs] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._ok_button = self.OkButton() self._ok_button.push_handlers(on_click=self.on_click_ok) self.buttons.pack(self._ok_button)
[docs] def on_click_ok(self, widget): self.close()
[docs] def get_ok_button(self): return self._ok_button
[docs] def set_ok_button(self, button): self._replace_button(self._ok_button, button, self.on_click_ok) self._ok_button = button
[docs]@autoprop class YesNoDialog(ButtonDialog):
[docs] class YesButton(Button): #
[docs] class Label(Label): custom_text = 'Ok'
[docs] class NoButton(Button): #
[docs] class Label(Label): custom_text = 'Cancel'
[docs] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._yes_button = self.YesButton() self._yes_button.push_handlers(on_click=self.on_click_yes) self._no_button = self.NoButton() self._no_button.push_handlers(on_click=self.on_click_no) self._response = False self.buttons.pack(self._yes_button) self.buttons.pack(self._no_button)
[docs] def open(self, gui): self._response = None super().open(gui)
[docs] def on_click_yes(self, widget): self._response = True self.close()
[docs] def on_click_no(self, widget): self._response = False self.close()
[docs] def get_yes_button(self): return self._yes_button
[docs] def set_yes_button(self, button): self._replace_button(self._yes_button, button, self.on_click_yes) self._yes_button = button
[docs] def get_no_button(self): return self._no_button
[docs] def set_no_button(self, button): self._replace_button(self._no_button, button, self.on_click_no) self._no_button = button
[docs] def get_response(self): return self._response