Skip to content
Snippets Groups Projects
confirm.py 1.93 KiB
Newer Older
  • Learn to ignore specific revisions
  • Benoit Favre's avatar
    Benoit Favre committed
    from gi.repository import GObject, Gtk
    
    class ConfirmationBox(Gtk.HBox):
        def __init__(self):
            super(ConfirmationBox, self).__init__()
    
            self.label = Gtk.Label()
            self.label.get_style_context().add_class('confirm')
            self.yes_button = Gtk.Button("YES")
            self.no_button = Gtk.Button("NO")
    
            self.pack_start(self.label, True, True, 5)
            self.pack_start(self.yes_button, False, False, 5)
            self.pack_start(self.no_button, False, False, 5)
    
            self.yes_button.connect('clicked', self.click_yes)
            self.no_button.connect('clicked', self.click_no)
    
            self.counter = 0
            self.yes_callback = None
            self.no_callback = None
    
            self.timer = None
    
        def confirm(self, message, time, yes_callback=None, no_callback=None):
            self.yes_callback = yes_callback
            self.no_callback = no_callback
            self.label.set_text(message)
    
            self.counter = int(time)
            self.yes_button.get_child().set_text("YES (%d)" % self.counter)
    
            self.timer = GObject.timeout_add_seconds(1, self.countdown)
    
            self.yes_button.grab_focus()
    
    Benoit Favre's avatar
    Benoit Favre committed
            self.show()
    
        def click_yes(self, button = None):
            self.cancel_timer()
            self.hide()
            self.counter = 0
            if self.yes_callback:
                self.yes_callback()
            self.yes_callback = None
    
        def click_no(self, button = None):
            self.cancel_timer()
            self.hide()
            self.counter = 0
            if self.no_callback:
                self.no_callback()
            self.no_callback = None
    
        def countdown(self):
            if self.counter > 1:
                self.counter -= 1
                self.yes_button.get_child().set_text("YES (%d)" % self.counter)
                self.timer = GObject.timeout_add_seconds(1, self.countdown)
            else:
                self.click_yes()
    
        def cancel_timer(self):
            if self.timer != None:
                GObject.source_remove(self.timer)
            self.timer = None