예제 #1
0
    def __init__(self, column, row, on_update_state_action, parent_viewport,
                 logger):
        def on_check(button):
            self.on_change_state(TRUE)
            self.on_update_state_action(TRUE)

        def on_uncheck(button):
            self.on_change_state(FALSE)
            self.on_update_state_action(FALSE)

        self.logger = logger
        self.column, self.row = column, row
        self.parent_viewport = parent_viewport
        self.viewport = Viewport()
        USER_DB_CURSOR.execute('SELECT current_locale FROM i18n')
        self.current_locale = USER_DB_CURSOR.fetchone()[0]
        self.on_update_state_action = on_update_state_action
        self.checked_checkbox_button, self.unchecked_checkbox_button = create_two_state_button(
            CheckedCheckboxButton(on_click_action=on_uncheck,
                                  parent_viewport=self.viewport),
            UncheckedCheckboxButton(on_click_action=on_check,
                                    parent_viewport=self.viewport))
        self.buttons = [
            self.checked_checkbox_button, self.unchecked_checkbox_button
        ]
        self.screen_resolution = (0, 0)
        self.description_label = None
        self.is_activated = False
        self.opacity = 0
        self.on_window_resize_handlers = [
            self.on_window_resize,
        ]
예제 #2
0
    def __init__(self, stage_number, on_buy_stage_action, parent_viewport):
        def on_buy_shop_stage(button):
            button.on_deactivate(instant=True)
            self.on_buy_stage_action(self.stage_number)

        self.logger = getLogger(
            f'root.app.game.map.shop.view.cell.{stage_number}')
        self.is_activated = False
        self.stage_number = stage_number
        USER_DB_CURSOR.execute('SELECT current_locale FROM i18n')
        self.current_locale = USER_DB_CURSOR.fetchone()[0]
        self.on_buy_stage_action = on_buy_stage_action
        self.data = []
        self.screen_resolution = (0, 0)
        self.parent_viewport = parent_viewport
        self.viewport = Viewport()
        self.locked_label = ShopStageLockedLabel(parent_viewport=self.viewport)
        self.level_placeholder_label = ShopStageLevelPlaceholderLabel(
            parent_viewport=self.viewport)
        self.previous_stage_placeholder_label = ShopStagePreviousStagePlaceholderLabel(
            parent_viewport=self.viewport)
        self.hourly_profit_description_label = ShopStageHourlyProfitDescriptionLabel(
            parent_viewport=self.viewport)
        self.hourly_profit_value_label = ShopStageHourlyProfitValueLabel(
            parent_viewport=self.viewport)
        self.storage_capacity_description_label = ShopStageStorageCapacityDescriptionLabel(
            parent_viewport=self.viewport)
        self.storage_capacity_value_label = ShopStageStorageCapacityValueLabel(
            parent_viewport=self.viewport)
        self.exp_bonus_description_label = ShopStageExpBonusDescriptionLabel(
            parent_viewport=self.viewport)
        self.exp_bonus_value_label = ShopStageExpBonusValueLabel(
            parent_viewport=self.viewport)
        self.price_label = ShopStagePriceLabel(parent_viewport=self.viewport)
        self.under_construction_label = ShopStageUnderConstructionLabel(
            parent_viewport=self.viewport)
        self.build_button = BuildShopStageButton(
            on_click_action=on_buy_shop_stage, parent_viewport=self.viewport)
        self.buttons = [
            self.build_button,
        ]
        USER_DB_CURSOR.execute('''SELECT money FROM game_progress''')
        self.money = USER_DB_CURSOR.fetchone()[0]
        self.opacity = 0
        self.on_window_resize_handlers = [
            self.on_window_resize, self.locked_label.on_window_resize,
            self.level_placeholder_label.on_window_resize,
            self.previous_stage_placeholder_label.on_window_resize,
            self.hourly_profit_description_label.on_window_resize,
            self.hourly_profit_value_label.on_window_resize,
            self.storage_capacity_description_label.on_window_resize,
            self.storage_capacity_value_label.on_window_resize,
            self.exp_bonus_description_label.on_window_resize,
            self.exp_bonus_value_label.on_window_resize,
            self.price_label.on_window_resize,
            self.under_construction_label.on_window_resize
        ]
예제 #3
0
    def __init__(self,
                 contents=None,
                 border=1,
                 step_size=None,
                 scroll_horizontal="auto",
                 scroll_vertical="auto",
                 **kwargs):
        Table.__init__(self,
                       rows=2,
                       cols=2,
                       padding=[border, 0, 0, border],
                       **kwargs)

        self.viewport = Viewport(x_align=0, y_align=0)
        self.interactive, self.can_focus = True, True

        if step_size:
            self.step_size = step_siz

        #: with of the surrounding border in pixels
        self.border = border

        #: visibility of the horizontal scroll bar. True for always, False for never and "auto" for auto
        self.scroll_horizontal = scroll_horizontal

        #: visibility of the vertical scroll bar. True for always, False for never and "auto" for auto
        self.scroll_vertical = scroll_vertical

        #even if we are don't need the scrollbar, do we reserve space for it?
        self.reserve_space_vertical = False
        self.reserve_space_horizontal = False

        #: vertical scroll bar widget
        self.vscroll = ScrollBar()

        #: horizontal scroll bar widget
        self.hscroll = ScrollBar(horizontal=True)

        self.attach(self.viewport, 0, 1, 0, 1)
        self.attach(self.vscroll, 1, 2, 0, 1)
        self.attach(self.hscroll, 0, 1, 1, 2)

        if contents:
            if isinstance(contents, graphics.Sprite):
                contents = [contents]

            for sprite in contents:
                self.add_child(sprite)

        self.connect("on-mouse-scroll", self.__on_mouse_scroll)
        for bar in (self.vscroll, self.hscroll):
            self.connect_child(bar, "on-scroll", self.on_scroll)
            self.connect_child(bar, "on-scroll-step", self.on_scroll_step)
            self.connect_child(bar, "on-scroll-page", self.on_scroll_page)
예제 #4
0
    def __init__(self, column, row, possible_values_list,
                 on_update_state_action, parent_viewport, logger):
        def on_increment(button):
            self.choice_state += 1
            self.temp_value_label.on_update_args(
                self.possible_values_list[self.choice_state])
            self.on_update_state_action(self.choice_state)
            if self.choice_state >= len(self.possible_values_list) - 1:
                button.on_disable()
                button.state = 'normal'

            if self.choice_state > 0:
                button.paired_button.on_activate(instant=True)

        def on_decrement(button):
            self.choice_state -= 1
            self.temp_value_label.on_update_args(
                self.possible_values_list[self.choice_state])
            self.on_update_state_action(self.choice_state)
            if self.choice_state <= 0:
                button.on_disable()
                button.state = 'normal'

            if self.choice_state < len(self.possible_values_list) - 1:
                button.paired_button.on_activate(instant=True)

        self.logger = logger
        self.column, self.row = column, row
        self.parent_viewport = parent_viewport
        self.viewport = Viewport()
        USER_DB_CURSOR.execute('SELECT current_locale FROM i18n')
        self.current_locale = USER_DB_CURSOR.fetchone()[0]
        self.on_update_state_action = on_update_state_action
        self.screen_resolution = (0, 0)
        self.description_label = None
        self.temp_value_label = None
        self.choice_state = None
        self.possible_values_list = possible_values_list
        self.increment_button, self.decrement_button = create_two_state_button(
            IncrementButton(on_click_action=on_increment,
                            parent_viewport=self.viewport),
            DecrementButton(on_click_action=on_decrement,
                            parent_viewport=self.viewport))
        self.buttons = [self.increment_button, self.decrement_button]
        self.is_activated = False
        self.opacity = 0
        self.on_window_resize_handlers = [
            self.on_window_resize,
        ]
예제 #5
0
    def __init__(
            self, map_id, on_buy_map_action, on_switch_map_action, on_set_money_target_action,
            on_reset_money_target_action, parent_viewport, logger
    ):
        def on_set_money_target(button):
            pass

        def on_reset_money_target(button):
            pass

        def on_buy_map(button):
            button.on_deactivate()
            self.on_buy_map_action(self.map_id)

        def on_switch_map(button):
            self.on_switch_map_action(self.map_id)

        self.logger = logger
        self.is_activated = False
        self.map_id = map_id
        self.parent_viewport = parent_viewport
        self.viewport = Viewport()
        USER_DB_CURSOR.execute('SELECT current_locale FROM i18n')
        self.current_locale = USER_DB_CURSOR.fetchone()[0]
        self.on_buy_map_action = on_buy_map_action
        self.on_switch_map_action = on_switch_map_action
        self.on_set_money_target_action = on_set_money_target_action
        self.on_reset_money_target_action = on_reset_money_target_action
        self.screen_resolution = (0, 0)
        USER_DB_CURSOR.execute('''SELECT level, money FROM game_progress''')
        self.level, self.money = USER_DB_CURSOR.fetchone()
        self.money_target_activated = False
        self.opacity = 0
        self.build_map_button = BuildMapButton(on_click_action=on_buy_map, parent_viewport=self.viewport)
        self.switch_map_button = SwitchMapButton(on_click_action=on_switch_map, parent_viewport=self.viewport)
        self.buttons = [self.build_map_button, self.switch_map_button]
        self.data = MAP_SWITCHER_STATE_MATRIX[self.map_id]
        self.locked_label = MapSwitcherCellLockedLabel(parent_viewport=self.viewport)
        self.level_placeholder_label = MapSwitcherLevelPlaceholderLabel(parent_viewport=self.viewport)
        self.level_placeholder_label.on_update_args((self.data[MAP_LEVEL_REQUIRED], ))
        self.unlock_available_label = MapSwitcherUnlockAvailableLabel(parent_viewport=self.viewport)
        self.unlock_available_label.on_update_args((self.data[MAP_PRICE], ))
        self.title_label = None
        self.icon_labels = []
        self.on_window_resize_handlers = [
            self.on_window_resize, self.locked_label.on_window_resize, self.level_placeholder_label.on_window_resize,
            self.unlock_available_label.on_window_resize
        ]
예제 #6
0
 def __init__(self, column, row, parent_viewport, logger):
     self.logger = logger
     self.column, self.row = column, row
     self.parent_viewport = parent_viewport
     self.viewport = Viewport()
     USER_DB_CURSOR.execute('SELECT current_locale FROM i18n')
     self.current_locale = USER_DB_CURSOR.fetchone()[0]
     self.description_label = None
     self.checkboxes = []
     self.buttons = []
     self.is_activated = False
     self.screen_resolution = (0, 0)
     self.opacity = 0
     self.on_window_resize_handlers = [
         self.on_window_resize,
     ]
예제 #7
0
 def __init__(self, controller, logger, child_window=False):
     self.logger = logger
     self.child_window = child_window
     self.is_activated = False
     self.controller = controller
     self.viewport = Viewport()
     self.opacity = 0
     self.buttons = []
     self.game_progress_notifications = []
     self.malfunction_notifications = []
     self.on_mouse_press_handlers = []
     self.on_mouse_release_handlers = []
     self.on_mouse_motion_handlers = []
     self.on_mouse_drag_handlers = []
     self.on_mouse_leave_handlers = []
     self.on_mouse_scroll_handlers = []
     self.on_key_press_handlers = []
     self.on_text_handlers = []
     self.on_window_resize_handlers = [
         self.on_window_resize,
     ]
     self.on_window_activate_handlers = [
         self.on_window_activate,
     ]
     self.on_window_show_handlers = [
         self.on_window_show,
     ]
     self.on_window_deactivate_handlers = [
         self.on_window_deactivate,
     ]
     self.on_window_hide_handlers = [
         self.on_window_hide,
     ]
     self.screen_resolution = (0, 0)
     USER_DB_CURSOR.execute('SELECT current_locale, clock_24h FROM i18n')
     self.current_locale, self.clock_24h_enabled = USER_DB_CURSOR.fetchone()
     self.game_progress_notifications_enabled = False
     self.shader_sprite = None
     USER_DB_CURSOR.execute('SELECT * FROM notification_settings')
     self.level_up_notification_enabled, self.feature_unlocked_notification_enabled, \
         self.construction_completed_notification_enabled, self.enough_money_notification_enabled, \
         self.bonus_expired_notification_enabled, self.shop_storage_notification_enabled,\
         self.voice_not_found_notification_enabled = USER_DB_CURSOR.fetchone()
예제 #8
0
 def __init__(self, column, row, on_update_state_action, parent_viewport,
              logger):
     self.logger = logger
     self.column, self.row = column, row
     self.parent_viewport = parent_viewport
     self.viewport = Viewport()
     USER_DB_CURSOR.execute('SELECT current_locale FROM i18n')
     self.current_locale = USER_DB_CURSOR.fetchone()[0]
     self.on_update_state_action = on_update_state_action
     self.screen_resolution = (0, 0)
     self.description_label = None
     self.knob = None
     self.is_activated = False
     self.opacity = 0
     self.on_window_resize_handlers = [
         self.on_window_resize,
     ]
     self.on_mouse_motion_handlers = []
     self.on_mouse_press_handlers = []
     self.on_mouse_release_handlers = []
     self.on_mouse_drag_handlers = []
예제 #9
0
    def __init__(self,
                 text="",
                 draw_border=True,
                 valid_chars=None,
                 validate_on_type=True,
                 single_paragraph=True,
                 text_formatter=None,
                 alignment=None,
                 font_desc=None,
                 **kwargs):
        Bin.__init__(self, **kwargs)

        self.display_label = graphics.Label(color=self.color)

        self.viewport = Viewport(self.display_label)
        self.viewport.connect("on-render", self.__on_viewport_render)

        self.add_child(self.viewport)

        self.can_focus = True

        self.interactive = True

        self.editable = True

        #: current cursor position
        self.cursor_position = None

        #: start position of the selection
        self.selection_start = 0

        #: end position of the selection
        self.selection_end = 0

        if font_desc is not None:
            self.font_desc = font_desc
        self.display_label.font_desc = self.font_desc

        #: text alignment in the entry
        self.alignment = alignment

        #: if True, a border will be drawn around the input element
        self.draw_border = draw_border

        #self.connect("on-key-press", self.__on_key_press)
        self.connect("on-mouse-down", self.__on_mouse_down)
        self.connect("on-double-click", self.__on_double_click)
        self.connect("on-triple-click", self.__on_triple_click)
        self.connect("on-blur", self.__on_blur)
        self.connect("on-focus", self.__on_focus)

        self.connect_after("on-render", self.__on_render)

        self._scene_mouse_move = None
        self._scene_mouse_up = None
        self._selection_start_position = None
        self._letter_positions = []

        #: a string, function or regexp or valid chars for the input
        #: in case of function, it will receive the string to be tested
        #: as input and expects to receive back a boolean of whether the string
        #: is valid or not
        self.valid_chars = valid_chars

        #: should the content be validate right when typing and invalid version prohibited
        self.validate_on_type = validate_on_type

        #: function to style the entry text - change color and such
        #: the function receives one param - the text, and must return
        #: processed text back. will be using original text if the function
        #: does not return anything.
        #: Note: this function can change only the style, not the actual content
        #: as the latter will mess up text selection because of off-sync between
        #: the label value and what is displayed
        self.text_formatter = text_formatter if text_formatter else self.text_formatter

        #: should the text input support multiple lines
        self.single_paragraph = single_paragraph

        self.update_text(text)
        self._last_good_value = text  # last known good value of the input
예제 #10
0
    def __init__(self,
                 labels=None,
                 tab_position="top",
                 tab_spacing=0,
                 scroll_position=None,
                 show_scroll="auto",
                 scroll_selects_tab=True,
                 **kwargs):
        Box.__init__(self, horizontal=False, spacing=0, **kwargs)

        #: list of tabs in the order of appearance
        self.tabs = []

        #: list of pages in the order of appearance
        self.pages = []

        #: container of the pages
        self.pages_container = self.pages_container_class(padding=1)

        #: container of tabs. useful if you want to adjust padding/placement
        self.tabs_container = Group(fill=False, spacing=tab_spacing)
        self.tabs_container.on_mouse_over = lambda button: False  # ignore select-on-drag

        # viewport so that tabs don't go out of their area
        self._tabs_viewport = Viewport()
        self._tabs_viewport.get_min_size = self._tabs_viewport_get_min_size
        self._tabs_viewport.resize_children = self._tabs_viewport_resize_children
        self._tabs_viewport.add_child(self.tabs_container)

        #: wether scroll buttons should select next/previos tab or show the
        #: next/previos tab out of the view
        self.scroll_selects_tab = scroll_selects_tab

        #: container for custom content before tabs
        self.before_tabs = HBox(expand=False)

        #: container for custom content after tabs
        self.after_tabs = HBox(expand=False)

        #: button to scroll tabs back
        self.tabs_back = self.scroll_buttons_class("left",
                                                   expand=False,
                                                   visible=False,
                                                   enabled=False,
                                                   repeat_down_delay=150)
        self.tabs_back.connect("on-mouse-down", self.on_back_press)

        #: button to scroll tabs forward
        self.tabs_forward = self.scroll_buttons_class("right",
                                                      expand=False,
                                                      visible=False,
                                                      enabled=False,
                                                      repeat_down_delay=150)
        self.tabs_forward.connect("on-mouse-down", self.on_forward_press)

        #: the wrapping container that holds also the scroll buttons and everyting
        self.tabbox = self.tabbox_class(expand=False, expand_vert=False)
        self.tabbox.get_min_size = self.tabbox_get_min_size
        self.tabbox.get_height_for_width_size = self.tabbox_get_height_for_width_size

        self.tabbox.add_child(self.before_tabs, self.tabs_back,
                              self._tabs_viewport, self.tabs_forward,
                              self.after_tabs)

        #: current page
        self.current_page = 0

        #: tab position: top, right, bottom, left and combinations: "top-right", "left-bottom", etc.
        self.tab_position = tab_position

        for label in labels or []:
            self.add_page(label)

        #: where to place the scroll buttons on tab overflow. one of "start"
        #: (both at the start), "end" (both at the end) or "around" (on left
        #: and right of the tabs)
        self.scroll_position = scroll_position

        #: determines when to show scroll buttons. True for always, False for
        #: never, "auto" for auto appearing and disappearing, and
        #: "auto_invisible" for going transparent instead of disappearing
        #: (the latter avoids tab toggle)
        self.show_scroll = show_scroll
예제 #11
0
    def __init__(self, construction_type, row, on_buy_construction_action,
                 on_set_money_target_action, on_reset_money_target_action,
                 parent_viewport):
        def on_set_money_target(button):
            button.paired_button.opacity = button.opacity
            button.on_deactivate(instant=True)
            button.paired_button.on_activate()
            self.on_set_money_target_action(self.construction_type, self.row,
                                            self.entity_number)

        def on_reset_money_target(button):
            button.paired_button.opacity = button.opacity
            button.on_deactivate(instant=True)
            button.paired_button.on_activate()
            self.on_reset_money_target_action()

        def on_buy_construction(button):
            button.on_deactivate(instant=True)
            self.enable_money_target_button.on_deactivate(instant=True)
            self.disable_money_target_button.on_deactivate(instant=True)
            self.on_buy_construction_action(self.construction_type, self.row,
                                            self.entity_number)

        self.logger = getLogger(
            f'root.app.game.map.constructor.view.cell.{construction_type}.{row}'
        )
        self.is_activated = False
        self.parent_viewport = parent_viewport
        self.viewport = Viewport()
        self.construction_type, self.row = construction_type, row
        USER_DB_CURSOR.execute('SELECT current_locale FROM i18n')
        self.current_locale = USER_DB_CURSOR.fetchone()[0]
        self.on_buy_construction_action = on_buy_construction_action
        self.on_set_money_target_action = on_set_money_target_action
        self.on_reset_money_target_action = on_reset_money_target_action
        self.entity_number = None
        self.data = []
        self.screen_resolution = (0, 0)
        self.locked_label = ConstructorLockedLabel(
            parent_viewport=self.viewport)
        self.title_label = None
        self.level_required_label = ConstructorLevelPlaceholderLabel(
            parent_viewport=self.viewport)
        self.previous_entity_required_label = None
        self.environment_required_label = None
        self.unlock_available_label = None
        self.under_construction_description_label = UnderConstructionDescriptionLabel(
            parent_viewport=self.viewport)
        self.enable_money_target_button, self.disable_money_target_button = create_two_state_button(
            SetMoneyTargetButton(on_click_action=on_set_money_target,
                                 parent_viewport=self.viewport),
            ResetMoneyTargetButton(on_click_action=on_reset_money_target,
                                   parent_viewport=self.viewport))
        self.build_button = BuildConstructionButton(
            on_click_action=on_buy_construction, parent_viewport=self.viewport)
        self.buttons = [
            self.enable_money_target_button, self.disable_money_target_button,
            self.build_button
        ]
        USER_DB_CURSOR.execute('''SELECT money FROM game_progress''')
        self.money = USER_DB_CURSOR.fetchone()[0]
        self.money_target_activated = False
        self.opacity = 0
        self.on_window_resize_handlers = [
            self.on_window_resize, self.locked_label.on_window_resize,
            self.level_required_label.on_window_resize,
            self.under_construction_description_label.on_window_resize
        ]