def test_update_closed(self, _init_pygame, default_ui_manager, _display_surface_return_none): menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=default_ui_manager) menu.update(0.01) assert menu.image is not None
def test_hide_of_expanded_dropdown(self, _init_pygame, default_ui_manager, _display_surface_return_none): menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(10, 10, 200, 30), manager=default_ui_manager) menu.process_event( pygame.event.Event( pygame.USEREVENT, { 'user_type': pygame_gui.UI_BUTTON_PRESSED, 'ui_element': menu.menu_states['closed'].open_button })) menu.update(0.01) assert menu.visible == 1 assert menu.current_state == menu.menu_states['expanded'] menu.hide() menu.update(0.01) assert menu.visible == 0 assert menu.current_state == menu.menu_states['closed'] assert menu.menu_states["closed"].visible == 0 assert menu.menu_states["closed"].selected_option_button.visible == 0 assert menu.menu_states["closed"].open_button.visible == 0
def test_select_option_from_drop_down(self, _init_pygame, default_ui_manager, _display_surface_return_none): test_container = UIContainer(relative_rect=pygame.Rect(0, 0, 300, 300), manager=default_ui_manager) menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(10, 10, 200, 30), manager=default_ui_manager, container=test_container) menu.current_state.should_transition = True menu.update(0.01) assert menu.selected_option == 'eggs' flour_button = menu.current_state.options_selection_list.item_list_container.elements[1] flour_button.process_event(pygame.event.Event(pygame.MOUSEBUTTONDOWN, {'button': pygame.BUTTON_LEFT, 'pos': flour_button.rect.center})) flour_button.process_event(pygame.event.Event(pygame.MOUSEBUTTONUP, {'button': pygame.BUTTON_LEFT, 'pos': flour_button.rect.center})) for event in pygame.event.get(): default_ui_manager.process_events(event) for event in pygame.event.get(): default_ui_manager.process_events(event) assert menu.selected_option == 'flour'
def test_on_fresh_drawable_shape_ready(self, _init_pygame, default_ui_manager): menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=default_ui_manager) assert not menu.on_fresh_drawable_shape_ready()
def test_hover_point(self, _init_pygame, default_ui_manager): menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=default_ui_manager) assert not menu.hover_point(0, 0) assert menu.hover_point(150, 115)
def test_kill(self, _init_pygame, default_ui_manager, _display_surface_return_none): menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=default_ui_manager) menu.kill() assert menu.alive() is False
def test_update_state_transition(self, _init_pygame, default_ui_manager, _display_surface_return_none): menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=default_ui_manager) menu.current_state.should_transition = True menu.update(0.01) menu.current_state.options_selection_list.item_list[0]['button_element'].pressed = True default_ui_manager.update(0.01) assert menu.image is not None
def test_set_relative_position(self, _init_pygame, default_ui_manager, _display_surface_return_none): test_container = UIContainer(relative_rect=pygame.Rect( 100, 100, 300, 60), manager=default_ui_manager) menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), container=test_container, manager=default_ui_manager) menu.set_relative_position((150.0, 30.0)) # try to click on the menu default_ui_manager.process_events( pygame.event.Event(pygame.MOUSEBUTTONDOWN, { 'button': pygame.BUTTON_LEFT, 'pos': (260, 145) })) assert menu.rect.topleft == ( 250, 130) and menu.current_state.selected_option_button.held is True menu.current_state.should_transition = True menu.update(0.01) menu.set_relative_position((50.0, 20.0)) assert menu.rect.topleft == (150, 120)
def test_set_dimensions(self, _init_pygame, default_ui_manager, _display_surface_return_none): menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=default_ui_manager) menu.set_dimensions((300, 50)) assert (menu.current_state.open_button.relative_rect.right == (100 + 300) - (menu.border_width + menu.shadow_width)) assert (menu.current_state.open_button.relative_rect.bottom == (100 + 50) - (menu.border_width + menu.shadow_width)) # try to click on the menu default_ui_manager.process_events(pygame.event.Event(pygame.MOUSEBUTTONDOWN, {'button': pygame.BUTTON_LEFT, 'pos': (390, 125)})) # if we successfully clicked on the moved menu then this button should be True assert menu.current_state.open_button.held is True menu.current_state.should_transition = True menu.update(0.01) menu.set_dimensions((200, 30)) # try to click on the menu default_ui_manager.process_events(pygame.event.Event(pygame.MOUSEBUTTONDOWN, {'button': 1, 'pos': (290, 115)})) # if we successfully clicked on the moved menu then this button should be True assert menu.current_state.close_button.held is True
def test_enable(self, _init_pygame, default_ui_manager, _display_surface_return_none): test_container = UIContainer(relative_rect=pygame.Rect(0, 0, 300, 300), manager=default_ui_manager) menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(10, 10, 200, 30), manager=default_ui_manager, container=test_container) menu.current_state.should_transition = True menu.update(0.01) assert menu.current_state == menu.menu_states['expanded'] assert menu.selected_option == 'eggs' menu.disable() assert menu.is_enabled is False menu.enable() assert menu.is_enabled is True assert menu.current_state == menu.menu_states['closed'] expand_button = menu.current_state.open_button expand_button.process_event( pygame.event.Event(pygame.MOUSEBUTTONDOWN, { 'button': pygame.BUTTON_LEFT, 'pos': expand_button.rect.center })) expand_button.process_event( pygame.event.Event(pygame.MOUSEBUTTONUP, { 'button': pygame.BUTTON_LEFT, 'pos': expand_button.rect.center })) for event in pygame.event.get(): default_ui_manager.process_events(event) for event in pygame.event.get(): default_ui_manager.process_events(event) assert menu.current_state.should_transition is True menu.update(0.01) assert menu.current_state == menu.menu_states['expanded'] assert menu.selected_option == 'eggs'
def test_get_top_layer(self, _init_pygame, default_ui_manager, _display_surface_return_none): window = UIWindow(pygame.Rect(0, 0, 400, 300), window_display_title="Test Window", manager=default_ui_manager) button_rect = pygame.Rect(0, 0, 150, 30) button_rect.topright = (-10, 10) button = UIButton( relative_rect=button_rect, text="Test Button", tool_tip_text= "This is a test of the button's tool tip functionality.", manager=default_ui_manager, container=window, anchors={ 'left': 'right', 'right': 'right', 'top': 'top', 'bottom': 'top' }) menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(10, 10, 150, 30), manager=default_ui_manager, container=window) assert window.get_top_layer() == 4 window.update(0.05) assert window.get_top_layer() == 6
def __init__(self, pos, manager): super().__init__( pygame.Rect(pos, (630, 490)), manager=manager, window_display_title="help", object_id="#help", resizable=False, ) self.files = gethelp() self.last = self.files[0][0] self.menu = UIDropDownMenu( options_list=[p for p, q in self.files], starting_option=self.last, relative_rect=pygame.Rect(100, 0, 400, 30), manager=manager, container=self, ) self.menu.current_state.should_transition = True self.textbox = pygame_gui.elements.UITextBox( "", relative_rect=pygame.Rect(0, 31, 600, 400), manager=manager, container=self, anchors={ "left": "left", "right": "right", "top": "top", "bottom": "bottom", }, ) self.last = 0
def test_class_theming_id(self, _init_pygame, _display_surface_return_none): manager = UIManager( (800, 600), PackageResource('tests.data.themes', 'appearance_theme_class_id_test.json')) menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(10, 10, 200, 30), manager=manager, object_id=pygame_gui.core.ObjectID( object_id=None, class_id='@test_class')) assert menu.combined_element_ids == ['@test_class', 'drop_down_menu'] menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(10, 10, 200, 30), manager=manager, object_id=pygame_gui.core.ObjectID( object_id='#test_object_1', class_id='@test_class')) assert menu.combined_element_ids == [ '#test_object_1', '@test_class', 'drop_down_menu' ] test_container = UIContainer(relative_rect=pygame.Rect( 100, 100, 300, 60), manager=manager) menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(10, 10, 200, 30), container=test_container, manager=manager, object_id=pygame_gui.core.ObjectID( object_id='#test_object_1', class_id='@test_class')) assert menu.combined_element_ids == [ 'container.#test_object_1', 'container.@test_class', 'container.drop_down_menu', '#test_object_1', '@test_class', 'drop_down_menu' ]
def test_update_open_state_finish(self, _init_pygame, default_ui_manager): menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=default_ui_manager) menu.current_state.should_transition = True menu.update(0.01) menu.current_state.should_transition = True menu.update(0.01) menu.current_state.open_button.pressed = True menu.update(0.01) assert menu.image is not None
def test_rebuild_from_theme_data_bad_values(self, _init_pygame, _display_surface_return_none): manager = UIManager((800, 600), os.path.join("tests", "data", "themes", "ui_drop_down_menu_bad_values.json")) menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=manager) assert menu.image is not None
def test_hide_of_closed_dropdown(self, _init_pygame, default_ui_manager, _display_surface_return_none): menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(10, 10, 200, 30), manager=default_ui_manager) assert menu.visible == 1 assert menu.current_state == menu.menu_states['closed'] assert menu.menu_states["closed"].visible == 1 assert menu.menu_states["closed"].selected_option_button.visible == 1 assert menu.menu_states["closed"].open_button.visible == 1 menu.hide() assert menu.visible == 0 assert menu.current_state == menu.menu_states['closed'] assert menu.menu_states["closed"].visible == 0 assert menu.menu_states["closed"].selected_option_button.visible == 0 assert menu.menu_states["closed"].open_button.visible == 0
def test_show_of_dropdown(self, _init_pygame, default_ui_manager): menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(10, 10, 200, 30), manager=default_ui_manager, visible=0) assert menu.visible == 0 assert menu.current_state == menu.menu_states['closed'] assert menu.menu_states["closed"].visible == 0 assert menu.menu_states["closed"].selected_option_button.visible == 0 assert menu.menu_states["closed"].open_button.visible == 0 menu.show() assert menu.visible == 1 assert menu.current_state == menu.menu_states['closed'] assert menu.menu_states["closed"].visible == 1 assert menu.menu_states["closed"].selected_option_button.visible == 1 assert menu.menu_states["closed"].open_button.visible == 1
def test_show_hide_rendering(self, _init_pygame, default_ui_manager, _display_surface_return_none): resolution = (400, 400) empty_surface = pygame.Surface(resolution) empty_surface.fill(pygame.Color(0, 0, 0)) surface = empty_surface.copy() manager = pygame_gui.UIManager(resolution) menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(25, 25, 375, 150), manager=manager, visible=0) manager.update(0.01) manager.draw_ui(surface) assert compare_surfaces(empty_surface, surface) surface.fill(pygame.Color(0, 0, 0)) menu.show() manager.update(0.01) manager.draw_ui(surface) assert not compare_surfaces(empty_surface, surface) surface.fill(pygame.Color(0, 0, 0)) menu.hide() manager.update(0.01) manager.draw_ui(surface) assert compare_surfaces(empty_surface, surface)
def recreate_ui(self): self.ui_manager.set_window_resolution(self.options.resolution) self.ui_manager.clear_and_reset() self.background_surface = pygame.Surface(self.options.resolution) self.background_surface.fill(self.ui_manager.get_theme().get_colour(None, None, 'dark_bg')) self.test_button = UIButton(pygame.Rect((int(self.options.resolution[0] / 2), int(self.options.resolution[1] * 0.90)), (100, 40)), '', self.ui_manager, tool_tip_text="<font face=fira_code color=normal_text size=2>" "<b><u>Test Tool Tip</u></b>" "<br><br>" "A little <i>test</i> of the " "<font color=#FFFFFF><b>tool tip</b></font>" " functionality." "<br><br>" "Unleash the Kraken!" "</font>", object_id='#hover_me_button') self.test_button_2 = UIButton(pygame.Rect((int(self.options.resolution[0] / 3), int(self.options.resolution[1] * 0.90)), (100, 40)), 'EVERYTHING', self.ui_manager, object_id='#everything_button') self.test_slider = UIHorizontalSlider(pygame.Rect((int(self.options.resolution[0] / 2), int(self.options.resolution[1] * 0.70)), (240, 25)), 100.0, (0.0, 100.0), self.ui_manager, object_id='#cool_slider') self.test_text_entry = UITextEntryLine(pygame.Rect((int(self.options.resolution[0] / 2), int(self.options.resolution[1] * 0.50)), (200, -1)), self.ui_manager, object_id='#main_text_entry') current_resolution_string = str(self.options.resolution[0]) + 'x' + str(self.options.resolution[1]) self.test_drop_down_menu = UIDropDownMenu(['640x480', '800x600', '1024x768'], current_resolution_string, pygame.Rect((int(self.options.resolution[0] / 2), int(self.options.resolution[1] * 0.3)), (200, 25)), self.ui_manager)
def test_rebuild_from_theme_data_non_default(self, _init_pygame, _display_surface_return_none): manager = UIManager((800, 600), os.path.join("tests", "data", "themes", "ui_drop_down_menu_non_default.json")) menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=manager) menu.current_state.should_transition = True menu.update(0.01) menu.current_state.should_transition = True menu.update(0.01) manager.ui_theme.ui_element_misc_data['drop_down_menu']['expand_direction'] = 'down' menu.rebuild_from_changed_theme_data() assert menu.image is not None
ZOOM = 15 json = geocoder_request("Пермь, Революции 21") ll, _ = get_ll_spn(json) pt = ll.copy() pygame.init() screen = pygame.display.set_mode((600, 450)) background = pygame.Surface((800, 600)) background.fill(pygame.Color("#000000")) manager = pygame_gui.UIManager((600, 450)) menu = UIDropDownMenu( options_list=["схема", "спутник", "гибрид"], starting_option="схема", relative_rect=pygame.Rect(0, 0, 200, 30), manager=manager, ) label = UILabel(relative_rect=pygame.Rect(0, 420, 600, 30), text=full_adress(json), manager=manager) text_entry = UITextEntryLine(relative_rect=pygame.Rect(0, 30, 150, 30), manager=manager) search_button = pygame_gui.elements.UIButton(relative_rect=pygame.Rect( (150, 30), (50, 30)), text="find", manager=manager)
def __init__(self): windowWidth = 1340 windowHeight = 600 super().__init__(pygame.Rect( SCREEN_WIDTH * 0.5 - windowWidth * 0.5, SCREEN_HEIGHT * 0.5 - windowHeight * 0.5, windowWidth, windowHeight, ), ui_manager, window_display_title="Settings", resizable=False) UILabel(pygame.Rect(0, 0, 80, 30), "General", ui_manager, container=self) general_panel = UIPanel(pygame.Rect(10, 30, 250, 600 - 100), starting_layer_height=4, manager=ui_manager, container=self, object_id="#thicker_panel") UILabel(pygame.Rect(10, 10, 80, 30), "Start Gold", ui_manager, container=general_panel) self.start_gold_text_line = UITextEntryLine( pygame.Rect(100, 10, 60, 20), manager=ui_manager, container=general_panel, #object_id='#file_path_text_line', anchors={ 'left': 'left', 'right': 'left', 'top': 'top', 'bottom': 'bottom' }) register_ui_callback(self.start_gold_text_line, pygame_gui.UI_TEXT_ENTRY_CHANGED, lambda e: self.on_start_gold_text_changed(e)) UILabel(pygame.Rect(10, 40, 80, 30), "Start Mana", ui_manager, container=general_panel) self.start_mana_text_line = UITextEntryLine( pygame.Rect(100, 40, 60, 20), manager=ui_manager, container=general_panel, #object_id='#file_path_text_line', anchors={ 'left': 'left', 'right': 'left', 'top': 'top', 'bottom': 'bottom' }) register_ui_callback(self.start_mana_text_line, pygame_gui.UI_TEXT_ENTRY_CHANGED, lambda e: self.on_start_mana_text_changed(e)) UILabel(pygame.Rect(10, 70, 80, 30), "Max Tower", ui_manager, container=general_panel) self.max_tower_text_line = UITextEntryLine( pygame.Rect(100, 70, 60, 20), manager=ui_manager, container=general_panel, #object_id='#file_path_text_line', anchors={ 'left': 'left', 'right': 'left', 'top': 'top', 'bottom': 'bottom' }) register_ui_callback(self.max_tower_text_line, pygame_gui.UI_TEXT_ENTRY_CHANGED, lambda e: self.on_max_tower_text_changed(e)) UILabel(pygame.Rect(10, 100, 80, 30), "Max Spell", ui_manager, container=general_panel) self.max_spell_text_line = UITextEntryLine( pygame.Rect(100, 100, 60, 20), manager=ui_manager, container=general_panel, #object_id='#file_path_text_line', anchors={ 'left': 'left', 'right': 'left', 'top': 'top', 'bottom': 'bottom' }) register_ui_callback(self.max_spell_text_line, pygame_gui.UI_TEXT_ENTRY_CHANGED, lambda e: self.on_max_spell_text_changed(e)) # ---------------------------- falls UILabel(pygame.Rect(250, 0, 80, 30), "Falls", ui_manager, container=self) self.falls_list = ["Dummy", "Dummy"] self.current_selected_fall = 0 self.falls_ui_list = UISelectionList( pygame.Rect(270, 30, 250, 220), item_list=self.falls_list, manager=ui_manager, container=self, object_id="#thicker_panel", ) register_ui_callback(self.falls_ui_list, pygame_gui.UI_SELECTION_LIST_NEW_SELECTION, lambda e: self.on_fall_list_item_select()) self.fall_add_btn = UIButton(pygame.Rect(270, 250, 125, 30), "Add Fall", ui_manager, container=self) self.fall_remove_btn = UIButton(pygame.Rect(395, 250, 125, 30), "Remove Fall", ui_manager, container=self) register_ui_callback(self.fall_add_btn, pygame_gui.UI_BUTTON_PRESSED, lambda e: self.on_fall_add_btn_click()) register_ui_callback(self.fall_remove_btn, pygame_gui.UI_BUTTON_PRESSED, lambda e: self.on_fall_remove_btn_click()) UILabel(pygame.Rect(262, 290, 120, 30), "Fall Settings", ui_manager, container=self) self.fall_settings_panel = UIPanel(pygame.Rect(270, 320, 250, 210), starting_layer_height=4, object_id="#thicker_panel", manager=ui_manager, container=self) # gold reward UILabel(pygame.Rect(5, 10, 100, 30), "Gold Reward", ui_manager, container=self.fall_settings_panel) self.fall_gold_reward = UITextEntryLine( pygame.Rect(105, 10, 60, 20), manager=ui_manager, container=self.fall_settings_panel, ) register_ui_callback(self.fall_gold_reward, pygame_gui.UI_TEXT_ENTRY_CHANGED, lambda e: self.on_fall_gold_text_changed(e)) # ---------------------------- groups UILabel(pygame.Rect(515, 0, 80, 30), "Groups", ui_manager, container=self) self.groups_list = [] self.current_selected_group = 0 self.groups_ui_list = UISelectionList( pygame.Rect(530, 30, 380, 220), item_list=self.groups_list, manager=ui_manager, container=self, object_id="#thicker_panel", ) register_ui_callback(self.groups_ui_list, pygame_gui.UI_SELECTION_LIST_NEW_SELECTION, lambda e: self.on_group_list_item_select(e)) self.group_add_btn = UIButton(pygame.Rect(530, 250, 380 * 0.5, 30), "Add Group", ui_manager, container=self) self.group_remove_btn = UIButton(pygame.Rect(530 + 380 * 0.5, 250, 380 * 0.5, 30), "Remove Group", ui_manager, container=self) register_ui_callback(self.group_add_btn, pygame_gui.UI_BUTTON_PRESSED, lambda e: self.on_group_add_btn_click()) register_ui_callback(self.group_remove_btn, pygame_gui.UI_BUTTON_PRESSED, lambda e: self.on_group_remove_btn_click()) UILabel(pygame.Rect(530, 290, 120, 30), "Group Settings", ui_manager, container=self) group_settings_panel = UIPanel(pygame.Rect(530, 320, 380, 210), starting_layer_height=4, object_id="#thicker_panel", manager=ui_manager, container=self) UILabel(pygame.Rect(5, 10, 100, 30), "Spawn After", ui_manager, container=group_settings_panel) self.group_spawn_mode_dropdown = UIDropDownMenu( ["End Of Previous Group Spawn", "Previous Group Destruction"], "End Of Previous Group Spawn", pygame.Rect(105, 15, 250, 20), ui_manager, container=group_settings_panel) # spawn delay UILabel(pygame.Rect(5, 45, 100, 30), "Spawn Delay", ui_manager, container=group_settings_panel) self.spawn_delay_entry_line = UITextEntryLine( pygame.Rect(105, 45, 40, 20), manager=ui_manager, container=group_settings_panel) UILabel(pygame.Rect(150, 45, 60, 30), "seconds", ui_manager, container=group_settings_panel) register_ui_callback(self.spawn_delay_entry_line, pygame_gui.UI_TEXT_ENTRY_CHANGED, lambda e: self.on_group_spawn_delay_changed(e)) # interval UILabel(pygame.Rect(-2, 80, 100, 30), "Interval:", ui_manager, container=group_settings_panel) UILabel(pygame.Rect(2, 115, 50, 30), "From", ui_manager, container=group_settings_panel) self.interval_from_entry_line = UITextEntryLine( pygame.Rect(50, 115, 40, 20), manager=ui_manager, container=group_settings_panel) UILabel(pygame.Rect(95, 115, 20, 30), "To", ui_manager, container=group_settings_panel) self.interval_to_entry_line = UITextEntryLine( pygame.Rect(120, 115, 40, 20), manager=ui_manager, container=group_settings_panel) UILabel(pygame.Rect(165, 115, 60, 30), "seconds", ui_manager, container=group_settings_panel) register_ui_callback( self.interval_from_entry_line, pygame_gui.UI_TEXT_ENTRY_CHANGED, lambda e: self.on_group_spawn_interval_left_changed(e)) register_ui_callback( self.interval_to_entry_line, pygame_gui.UI_TEXT_ENTRY_CHANGED, lambda e: self.on_group_spawn_interval_right_changed(e)) # ---------------------------- enemies self.enemies_label = UILabel(pygame.Rect(910, 0, 80, 30), "Enemies", ui_manager, container=self) self.enemies_view_panel = UIPanel(relative_rect=pygame.Rect( 920, 30, 385, 505), starting_layer_height=4, object_id="#thicker_panel", manager=ui_manager, container=self) #self.enemies_view_panel.hide() #self.enemies_label.hide() #250, 600 - 100 self.enemy_container = UIScrollingContainer( pygame.Rect(0, 0, 380, 500), ui_manager, container=self.enemies_view_panel, object_id="#enemy_scrolling_container", starting_height=4) item_height = 165 self.enemy_container.set_scrollable_area_dimensions( (360, 5 + len(enemy.enemies_definitions) * item_height + 10)) """ for n in range(0, 24): UIButton( pygame.Rect(5, 5 + 50 * n, 370, 45), "hi", ui_manager, self.enemy_container ) """ self.enemies_counts_entry_lines = [] for n in range(0, len(enemy.enemies_definitions)): enemy_panel = UIPanel(relative_rect=pygame.Rect( 5, 5 + item_height * n, 350, item_height), starting_layer_height=4, manager=ui_manager, container=self.enemy_container, object_id="#thicker_panel") enemy_stats_panel = UIPanel(relative_rect=pygame.Rect( 10, 35, 325, 80), starting_layer_height=4, manager=ui_manager, container=enemy_panel) UITextBox( "<b>" + enemy.enemies_definitions[n].name + "</b>", pygame.Rect(5, 5, 340, 30), ui_manager, container=enemy_panel, object_id="#no_border_textbox", ) definition = enemy.enemies_definitions[n] preview_sprite_path = ENEMIES_PATH + definition.sprites_directory + "/" + definition.preview_sprite + ".png" image_size = (720 * 0.15, 480 * 0.15) UIImage(relative_rect=pygame.Rect(5, 5, image_size[0], image_size[1]), image_surface=resource_cache.get_resource( preview_sprite_path, resource_cache.SurfaceType, alpha=True), manager=ui_manager, container=enemy_stats_panel) UITextBox("<font color=#00FF00><b>Health: </b></font>" + str(definition.health) + "<br><br>" "<font color=#BB0000><b>Damage: </b></font>" + str(definition.damages) + "</br></br>" + "<font color=#4488FF><b>Speed: </b></font>" + str(definition.speed), pygame.Rect(5 + image_size[0] + 5, 5, 120, 140), ui_manager, container=enemy_stats_panel, object_id="#no_border_textbox") UITextBox("Count: ", pygame.Rect(5, item_height - 45, 80, 30), ui_manager, container=enemy_panel, object_id="#no_border_textbox") self.enemies_counts_entry_lines.append( UITextEntryLine( pygame.Rect(65, item_height - 45, 50, 25), manager=ui_manager, container=enemy_panel, )) register_ui_callback( self.enemies_counts_entry_lines[n], pygame_gui.UI_TEXT_ENTRY_CHANGED, lambda e, i=n: self.on_change_enemy_count(e, i)) self.set_blocking(True) self.update_settings()
def __init__(self, rect, ui_manager): element_ids = ['everything_window'] super().__init__(rect, ui_manager, element_ids=element_ids) # create shadow shadow_padding = (2, 2) self.image = self.ui_manager.get_shadow(self.rect.size) self.image.fill(self.ui_manager.get_theme().get_colour(self.object_ids, self.element_ids, 'dark_bg'), pygame.Rect(shadow_padding, (self.rect.width - shadow_padding[0] * 2, self.rect.height - shadow_padding[1] * 2) )) self.get_container().relative_rect.width = self.rect.width - shadow_padding[0] * 2 self.get_container().relative_rect.height = self.rect.height - shadow_padding[1] * 2 self.get_container().relative_rect.x = self.get_container().relative_rect.x + shadow_padding[0] self.get_container().relative_rect.y = self.get_container().relative_rect.y + shadow_padding[1] self.get_container().update_containing_rect_position() self.close_window_button = UIButton(relative_rect=pygame.Rect((self.get_container().rect.width-20, 0), (20, 20)), text='╳', manager=ui_manager, container=self.get_container(), parent_element=self ) self.menu_bar = UIButton(relative_rect=pygame.Rect((0, 0), (self.get_container().rect.width-20, 20)), text='Everything Container', manager=ui_manager, container=self.get_container(), parent_element=self, object_id='#message_window_title_bar' ) self.menu_bar.set_hold_range((100, 100)) self.grabbed_window = False self.starting_grab_difference = (0, 0) self.test_slider = UIHorizontalSlider(pygame.Rect((int(self.rect.width / 2), int(self.rect.height * 0.70)), (240, 25)), 50.0, (0.0, 100.0), self.ui_manager, container=self.get_container(), parent_element=self) self.slider_label = UILabel(pygame.Rect((int(self.rect.width / 2) + 250, int(self.rect.height * 0.70)), (27, 25)), str(int(self.test_slider.get_current_value())), self.ui_manager, container=self.get_container(), parent_element=self) self.test_text_entry = UITextEntryLine(pygame.Rect((int(self.rect.width / 2), int(self.rect.height * 0.50)), (200, -1)), self.ui_manager, container=self.get_container(), parent_element=self) self.test_text_entry.set_forbidden_characters('numbers') current_resolution_string = 'Item 1' self.test_drop_down_menu = UIDropDownMenu(['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6'], current_resolution_string, pygame.Rect((int(self.rect.width / 2), int(self.rect.height * 0.3)), (200, 25)), self.ui_manager, container=self.get_container(), parent_element=self) self.health_bar = UIScreenSpaceHealthBar(pygame.Rect((int(self.rect.width / 9), int(self.rect.height * 0.7)), (200, 20)), self.ui_manager, container=self.get_container(), parent_element=self) loaded_test_image = pygame.image.load('data/images/splat.png').convert_alpha() self.test_image = UIImage(pygame.Rect((int(self.rect.width / 9), int(self.rect.height * 0.3)), loaded_test_image.get_rect().size), loaded_test_image, self.ui_manager, container=self.get_container(), parent_element=self) self.is_selected = False
def test_cropping_size_of_drop_down(self, _init_pygame, default_ui_manager, _display_surface_return_none): menu = UIDropDownMenu(options_list=[ 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar' ], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=default_ui_manager) menu.current_state.should_transition = True menu.update(0.01) assert menu.current_state.options_selection_list.rect.height == 366 # uncropped menu = UIDropDownMenu(options_list=[ 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar' ], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=default_ui_manager, expansion_height_limit=200) menu.current_state.should_transition = True menu.update(0.01) assert menu.current_state.options_selection_list.scroll_bar is not None assert menu.current_state.options_selection_list.rect.height == 200 # cropped to fixed height test_container = UIContainer(relative_rect=pygame.Rect( 100, 100, 300, 100), manager=default_ui_manager) menu = UIDropDownMenu(options_list=[ 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar' ], starting_option='eggs', relative_rect=pygame.Rect(10, 10, 200, 30), manager=default_ui_manager, container=test_container) menu.current_state.should_transition = True menu.update(0.01) assert menu.current_state.options_selection_list.rect.height == 63 # cropped to container size by default manager = UIManager((800, 600), os.path.join("tests", "data", "themes", "ui_drop_down_menu_non_default.json")) test_container = UIContainer(relative_rect=pygame.Rect( 100, 100, 300, 100), manager=manager) menu = UIDropDownMenu(options_list=[ 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar', 'eggs', 'flour', 'sugar' ], starting_option='eggs', relative_rect=pygame.Rect(10, 50, 200, 30), manager=manager, container=test_container) menu.current_state.should_transition = True menu.update(0.01) assert menu.current_state.options_selection_list.rect.height == 53 # cropped to container size by default
def test_set_position(self, _init_pygame, default_ui_manager, _display_surface_return_none): test_container = UIContainer(relative_rect=pygame.Rect( 10, 10, 300, 300), manager=default_ui_manager) menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=default_ui_manager) menu.set_position((0, 0)) menu.current_state.should_transition = True menu.update(0.01) menu.set_position((200, 200)) # try to click on the menu default_ui_manager.process_events( pygame.event.Event(pygame.MOUSEBUTTONDOWN, { 'button': 1, 'pos': (250, 215) })) # if we successfully clicked on the moved menu then this button should be True assert menu.current_state.selected_option_button.held is True drop_down_anchor_bottom_right = UIDropDownMenu( relative_rect=pygame.Rect(0, 0, 50, 50), options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', manager=default_ui_manager, container=test_container, anchors={ 'left': 'right', 'right': 'right', 'top': 'bottom', 'bottom': 'bottom' }) drop_down_anchor_bottom_right.current_state.should_transition = True drop_down_anchor_bottom_right.update(0.01) drop_down_anchor_bottom_right.set_position((230, 230)) assert drop_down_anchor_bottom_right.relative_rect.topleft == (-80, -80) assert drop_down_anchor_bottom_right.relative_rect.size == (50, 50) assert drop_down_anchor_bottom_right.relative_rect.bottomright == (-30, -30)
def test_process_event(self, _init_pygame, default_ui_manager, _display_surface_return_none): menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=default_ui_manager) # process a mouse button down event menu.process_event( pygame.event.Event( pygame_gui.UI_BUTTON_PRESSED, {'ui_element': menu.menu_states['closed'].open_button})) assert menu.current_state.should_transition menu.update(0.01) assert not menu.current_state.should_transition menu.process_event( pygame.event.Event( pygame_gui.UI_BUTTON_PRESSED, {'ui_element': menu.menu_states['expanded'].close_button})) assert menu.current_state.should_transition menu.update(0.01) assert not menu.current_state.should_transition menu.process_event( pygame.event.Event(pygame_gui.UI_BUTTON_PRESSED, { 'ui_element': menu.menu_states['closed'].selected_option_button })) assert menu.current_state.should_transition menu.update(0.01) assert not menu.current_state.should_transition menu.process_event( pygame.event.Event(pygame_gui.UI_SELECTION_LIST_NEW_SELECTION, { 'ui_element': menu.menu_states['expanded'].options_selection_list })) confirm_drop_down_changed_event_fired = False for event in pygame.event.get(): if (event.type == pygame_gui.UI_DROP_DOWN_MENU_CHANGED and event.ui_element == menu): confirm_drop_down_changed_event_fired = True assert confirm_drop_down_changed_event_fired
def test_creation(self, _init_pygame, default_ui_manager): menu = UIDropDownMenu(options_list=['eggs', 'flour', 'sugar'], starting_option='eggs', relative_rect=pygame.Rect(100, 100, 200, 30), manager=default_ui_manager) assert menu.image is not None