class PlayHandler(BaseHandler): def __init__(self, app): self.app = app self.bot = app.bot self.card = None builder = Gtk.Builder.new_from_file("gui/play.ui") builder.connect_signals(self) self.actionbox = ActionBox(self.bot, builder.get_object("actionbox")) self.label = builder.get_object("instructions") self.dialog = builder.get_object("play_dialog") self.dialog.set_transient_for(app.window) def show(self, card, prev_card, actions): self.card = card self.prev_card = prev_card self.actionbox.refresh() self.actionbox.set_actions(actions) label_text = ("Deep Red played " + s_from_tuple(card) + ". Is this valid?") if len(actions) > 0: label_text += """ If the card is valid but the actions are not, simply change the actions and then click valid. """ self.label.set_text(label_text) self.dialog.show_all() def cancel_play(self, button, _=None): """Cancel the play that just occured.""" self.bot.add_card(self.card) button.get_toplevel().hide() return True def valid(self, _): """Event handler for valid button""" actions = self.actionbox.get_actions() self.bot.add_sample(self.card, self.prev_card, True, actions) dialog = self.actionbox.get_toplevel() dialog.hide() def invalid(self, button): """Event handler for invalid button""" self.bot.add_sample(self.card, self.prev_card, False) self.bot.add_card(self.card) dialog = button.get_toplevel() dialog.hide() def new_action(self, entry): action = entry.get_text() entry.set_text("") self.bot.add_action(action) self.refresh_actions() self.app.refresh_actions()
class Handler(BaseHandler): """Class for holding signal handlers. Do not directly call methods.""" def __init__(self, app): """Connect the signals""" self.app = app self.builder = Gtk.Builder.new_from_file("gui/main.ui") self.builder.connect_signals(self) self.bot = Bot([]) self.error_message = self.builder.get_object("error_message") self.error_dialog = self.builder.get_object("error_dialog") self.window = self.builder.get_object("window") self.play_handler = PlayHandler(self) file_handler = FileHandler(self) self.builder.get_object("file_menu").set_submenu(file_handler.menu) self.actionbox = ActionBox(self.bot, self.builder.get_object("actionbox")) css = Gtk.CssProvider() css.load_from_path("css/input.css") self.window.get_style_context().add_provider_for_screen( Gdk.Screen.get_default(), css, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) self.app.add_window(self.window) self.window.show_all() def add_card(self, _): """Event handler for added card.""" new_card_entry = self.builder.get_object("new_card_entry") new_card = tuple_from_s(new_card_entry.get_text()) add_frame = self.builder.get_object("add_frame") if new_card: self.bot.add_card(new_card) new_card_entry.set_text("") add_frame = self.builder.get_object("add_frame") add_frame.get_style_context().remove_class("invalid") else: add_frame.get_style_context().add_class("invalid") def play_card(self, _): """Event handler for play card button.""" prev_card_entry = self.builder.get_object("prevcard_entry") label = self.builder.get_object("instructions") prev_card = tuple_from_s(prev_card_entry.get_text()) play_frame = self.builder.get_object("play_frame") if not prev_card: play_frame.get_style_context().add_class("invalid") return prev_card_entry.set_text("") play_frame.get_style_context().remove_class("invalid") try: play = self.bot.play(prev_card) except: self.show_error("Hand is Empty") return if play: card, actions = play self.play_handler.show(card, prev_card, actions) else: self.show_error("Pass") def toggle_valid(self, button): """ Activate or deactivate the action checkboxes, depending on whether valid checkbox is clicked. """ self.builder.get_object("actionbox").set_sensitive(button.get_active()) def add_sample(self, button): """ Add a sample to the bot, based on the sample input fields. """ prev_card_entry = self.builder.get_object("sample_prevcard_entry") card_entry = self.builder.get_object("sample_card_entry") valid_button = self.builder.get_object("valid_checkbox") prev_card = tuple_from_s(prev_card_entry.get_text()) card = tuple_from_s(card_entry.get_text()) prev_card_frame = self.builder.get_object("prev_card_frame") card_frame = self.builder.get_object("card_frame") if not prev_card: prev_card_frame.get_style_context().add_class("invalid") if not card: card_frame.get_style_context().add_class("invalid") if not prev_card or not card: return prev_card_entry.set_text("") card_entry.set_text("") prev_card_frame.get_style_context().remove_class("invalid") card_frame.get_style_context().remove_class("invalid") actions = self.actionbox.get_actions() self.actionbox.reset_actions() self.bot.add_sample(card, prev_card, valid_button.get_active(), actions) valid_button.set_active(False) def show_error(self, message): self.error_message.set_text(message) self.error_dialog.show() def new_action(self, entry): action = entry.get_text() entry.set_text("") self.bot.add_action(action) self.actionbox.refresh()