def test_show_hide_rendering(self, _init_pygame, default_ui_manager, _display_surface_return_none): resolution = (600, 600) empty_surface = pygame.Surface(resolution) empty_surface.fill(pygame.Color(0, 0, 0)) surface = empty_surface.copy() manager = pygame_gui.UIManager(resolution) file_dialog = UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=manager, visible=0) file_dialog.file_path_text_line.set_text('tests/data/images') manager.update(0.01) manager.draw_ui(surface) assert compare_surfaces(empty_surface, surface) surface.fill(pygame.Color(0, 0, 0)) file_dialog.show() manager.update(0.01) manager.draw_ui(surface) assert not compare_surfaces(empty_surface, surface) surface.fill(pygame.Color(0, 0, 0)) file_dialog.hide() manager.update(0.01) manager.draw_ui(surface) assert compare_surfaces(empty_surface, surface)
def test_press_delete_button_and_cancel(self, _init_pygame, default_ui_manager, _display_surface_return_none): file_dialog = UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=default_ui_manager) file_dialog.current_file_path = Path( 'tests/data/images/splat.png').resolve() file_dialog.delete_button.enable() event_data = { 'button': pygame.BUTTON_LEFT, 'pos': file_dialog.delete_button.rect.center } default_ui_manager.process_events( pygame.event.Event(pygame.MOUSEBUTTONDOWN, event_data)) default_ui_manager.process_events( pygame.event.Event(pygame.MOUSEBUTTONUP, event_data)) for event in pygame.event.get(): default_ui_manager.process_events(event) assert file_dialog.delete_confirmation_dialog is not None event_data = { 'user_type': pygame_gui.UI_BUTTON_PRESSED, 'ui_element': file_dialog.delete_confirmation_dialog.cancel_button } cancel_event = pygame.event.Event(pygame.USEREVENT, event_data) default_ui_manager.process_events(cancel_event) assert (not file_dialog.delete_confirmation_dialog.alive())
def test_new_file_selection(self, _init_pygame, default_ui_manager, _display_surface_return_none): file_dialog = UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=default_ui_manager, initial_file_path='tests/data/images/') select_event = pygame.event.Event( pygame.USEREVENT, { 'user_type': pygame_gui.UI_SELECTION_LIST_NEW_SELECTION, 'ui_element': file_dialog.file_selection_list, 'text': 'splat.png' }) default_ui_manager.process_events(select_event) assert file_dialog.current_file_path is not None assert file_dialog.current_file_path.name == 'splat.png' assert file_dialog.ok_button.is_enabled select_event = pygame.event.Event( pygame.USEREVENT, { 'user_type': pygame_gui.UI_SELECTION_LIST_NEW_SELECTION, 'ui_element': file_dialog.file_selection_list, 'text': 'not_a_file.not' }) default_ui_manager.process_events(select_event) assert not file_dialog.ok_button.is_enabled
def test_file_path_entry_finished(self, _init_pygame, default_ui_manager, _display_surface_return_none): file_dialog = UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=default_ui_manager) file_dialog.file_path_text_line.set_text('tests/data/images') event_data = { 'button': pygame.BUTTON_LEFT, 'pos': file_dialog.file_path_text_line.rect.center } default_ui_manager.process_events( pygame.event.Event(pygame.MOUSEBUTTONDOWN, event_data)) default_ui_manager.process_events( pygame.event.Event(pygame.MOUSEBUTTONUP, event_data)) default_ui_manager.process_events( pygame.event.Event(pygame.KEYDOWN, {'key': pygame.K_RETURN})) for event in pygame.event.get(): default_ui_manager.process_events(event) assert file_dialog.current_file_path is None assert str(Path( file_dialog.current_directory_path).parts[-1]) == 'images' assert file_dialog.current_file_list == [('splat.png', '#file_list_item')]
def test_press_ok_button(self, _init_pygame, default_ui_manager, _display_surface_return_none): file_dialog = UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=default_ui_manager) file_dialog.selected_file_path = abspath('tests/data/images/splat.png') file_dialog.ok_button.enable() is_alive_pre_events = file_dialog.alive() default_ui_manager.process_events(pygame.event.Event(pygame.MOUSEBUTTONDOWN, {'button': pygame.BUTTON_LEFT, 'pos': file_dialog.ok_button.rect.center})) default_ui_manager.process_events(pygame.event.Event(pygame.MOUSEBUTTONUP, {'button': pygame.BUTTON_LEFT, 'pos': file_dialog.ok_button.rect.center})) for event in pygame.event.get(): default_ui_manager.process_events(event) confirm_event_fired = False event_path = None for event in pygame.event.get(): default_ui_manager.process_events(event) if (event.type == pygame.USEREVENT and event.user_type == pygame_gui.UI_FILE_DIALOG_PATH_PICKED and event.ui_element == file_dialog): confirm_event_fired = True event_path = event.text is_dead_post_events = not file_dialog.alive() assert is_alive_pre_events assert is_dead_post_events assert confirm_event_fired assert event_path is not None and Path(event_path).name == 'splat.png'
def test_hide(self, _init_pygame, default_ui_manager, _display_surface_return_none): file_dialog = UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=default_ui_manager) file_dialog.file_path_text_line.set_text('tests/data/images') assert file_dialog.visible == 1 assert file_dialog.cancel_button.visible == 1 assert file_dialog.ok_button.visible == 1 assert file_dialog.delete_button.visible == 1 assert file_dialog.home_button.visible == 1 assert file_dialog.parent_directory_button.visible == 1 assert file_dialog.refresh_button.visible == 1 assert file_dialog.close_window_button.visible == 1 file_dialog.hide() assert file_dialog.visible == 0 assert file_dialog.cancel_button.visible == 0 assert file_dialog.ok_button.visible == 0 assert file_dialog.delete_button.visible == 0 assert file_dialog.home_button.visible == 0 assert file_dialog.parent_directory_button.visible == 0 assert file_dialog.refresh_button.visible == 0 assert file_dialog.close_window_button.visible == 0
def __init__(self, uiManager, pos=[None, None], size=[None, None], startingPath=DIR, title=''): super().__init__(uiManager, uiManager.get_root_container(), pos, size, None, None, 260, 300) self.file = None self.element = UIFileDialog(pygame.Rect(self.pos, self.size), self.uiManager, window_title=title, initial_file_path=startingPath)
def test_press_home_button(self, _init_pygame, default_ui_manager, _display_surface_return_none): file_dialog = UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=default_ui_manager, initial_file_path='tests/data/images/') home_event = pygame.event.Event(pygame.USEREVENT, {'user_type': pygame_gui.UI_BUTTON_PRESSED, 'ui_element': file_dialog.home_button}) default_ui_manager.process_events(home_event) assert Path(file_dialog.current_directory_path).name == Path.home().name
def test_update_current_file_list(self, _init_pygame, default_ui_manager): file_dialog = UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=default_ui_manager) assert file_dialog.current_file_list != [('splat.png', '#file_list_item')] file_dialog.current_directory_path = abspath('tests/data/images') file_dialog.update_current_file_list() assert file_dialog.current_file_list == [('splat.png', '#file_list_item')] file_dialog.current_directory_path = 'nonsense/path/that/does/not/exist' file_dialog.update_current_file_list() assert file_dialog.current_file_list == [('splat.png', '#file_list_item')]
def test_directory_double_clicked(self, _init_pygame, default_ui_manager, _display_surface_return_none): file_dialog = UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=default_ui_manager, initial_file_path='tests/data/') directory_event = pygame.event.Event(pygame.USEREVENT, {'user_type': pygame_gui.UI_SELECTION_LIST_DOUBLE_CLICKED_SELECTION, 'ui_element': file_dialog.file_selection_list, 'text': 'images'}) default_ui_manager.process_events(directory_event) assert file_dialog.current_directory_path == abspath('tests/data/images') assert not file_dialog.ok_button.is_enabled assert not file_dialog.delete_button.is_enabled assert file_dialog.file_path_text_line.text == abspath('tests/data/images')
def test_press_cancel_button(self, _init_pygame, default_ui_manager, _display_surface_return_none): file_dialog = UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=default_ui_manager) is_alive_pre_events = file_dialog.alive() default_ui_manager.process_events(pygame.event.Event(pygame.MOUSEBUTTONDOWN, {'button': pygame.BUTTON_LEFT, 'pos': file_dialog.cancel_button.rect.center})) default_ui_manager.process_events(pygame.event.Event(pygame.MOUSEBUTTONUP, {'button': pygame.BUTTON_LEFT, 'pos': file_dialog.cancel_button.rect.center})) for event in pygame.event.get(): default_ui_manager.process_events(event) is_dead_post_events = not file_dialog.alive() assert is_alive_pre_events is True and is_dead_post_events is True
def test_press_delete_button_and_ok(self, _init_pygame, default_ui_manager, _display_surface_return_none): file_dialog = UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=default_ui_manager) with open(str(Path('tests/data/for_delete.txt')), 'w') as file_to_delete: file_to_delete.write('Some text') file_dialog.current_file_path = Path( 'tests/data/for_delete.txt').absolute() file_dialog.delete_button.enable() event_data = { 'button': pygame.BUTTON_LEFT, 'pos': file_dialog.delete_button.rect.center } default_ui_manager.process_events( pygame.event.Event(pygame.MOUSEBUTTONDOWN, event_data)) default_ui_manager.process_events( pygame.event.Event(pygame.MOUSEBUTTONUP, event_data)) for event in pygame.event.get(): default_ui_manager.process_events(event) assert file_dialog.delete_confirmation_dialog is not None ok_event_data = { 'user_type': pygame_gui.UI_BUTTON_PRESSED, 'ui_element': file_dialog.delete_confirmation_dialog.confirm_button } ok_event = pygame.event.Event(pygame.USEREVENT, ok_event_data) default_ui_manager.process_events(ok_event) assert (not file_dialog.delete_confirmation_dialog.alive()) for event in pygame.event.get(): default_ui_manager.process_events(event) assert not Path('tests/data/for_delete.txt').exists()
def test_update_current_file_list(self, _init_pygame, default_ui_manager, _display_surface_return_none): file_dialog = UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=default_ui_manager) assert ('splat.png', '#file_list_item') not in file_dialog.current_file_list file_dialog.current_directory_path = str( Path('tests/data/images').resolve()) file_dialog.update_current_file_list() assert ('splat.png', '#file_list_item') in file_dialog.current_file_list file_dialog.current_directory_path = 'nonsense/path/that/does/not/exist' file_dialog.update_current_file_list() assert ('splat.png', '#file_list_item') in file_dialog.current_file_list
def run(self): while self.is_running: time_delta = self.clock.tick(60) / 1000.0 for event in pygame.event.get(): if event.type == pygame.QUIT: self.is_running = False if (event.type == pygame.USEREVENT and event.user_type == pygame_gui.UI_BUTTON_PRESSED and event.ui_element == self.load_button): self.file_dialog = UIFileDialog( pygame.Rect(160, 50, 440, 500), self.ui_manager, window_title='Load Image...', initial_file_path='data/images/', allow_existing_files_only=True) self.load_button.disable() if (event.type == pygame.USEREVENT and event.user_type == pygame_gui.UI_FILE_DIALOG_PATH_PICKED): if self.display_loaded_image is not None: self.display_loaded_image.kill() try: image_path = create_resource_path(event.text) loaded_image = pygame.image.load( image_path).convert_alpha() image_rect = loaded_image.get_rect() aspect_ratio = image_rect.width / image_rect.height need_to_scale = False if image_rect.width > self.max_image_display_dimensions[ 0]: image_rect.width = self.max_image_display_dimensions[ 0] image_rect.height = int(image_rect.width / aspect_ratio) need_to_scale = True if image_rect.height > self.max_image_display_dimensions[ 1]: image_rect.height = self.max_image_display_dimensions[ 1] image_rect.width = int(image_rect.height * aspect_ratio) need_to_scale = True if need_to_scale: loaded_image = pygame.transform.smoothscale( loaded_image, image_rect.size) image_rect.center = (400, 300) self.display_loaded_image = UIImage( relative_rect=image_rect, image_surface=loaded_image, manager=self.ui_manager) except pygame.error: pass if (event.type == pygame.USEREVENT and event.user_type == pygame_gui.UI_WINDOW_CLOSE and event.ui_element == self.file_dialog): self.load_button.enable() self.file_dialog = None self.ui_manager.process_events(event) self.ui_manager.update(time_delta) self.window_surface.blit(self.background, (0, 0)) self.ui_manager.draw_ui(self.window_surface) pygame.display.update()
def test_create_too_small(self, _init_pygame, default_ui_manager, _display_surface_return_none): with pytest.warns(UserWarning, match="Initial size"): UIFileDialog(rect=pygame.Rect(100, 100, 50, 50), manager=default_ui_manager)
def test_creation(self, _init_pygame, default_ui_manager, _display_surface_return_none): UIFileDialog(rect=pygame.Rect(100, 100, 440, 500), manager=default_ui_manager)
def process_events(self): for event in pygame.event.get(): if event.type == pygame.QUIT: self.running = False self.ui_manager.process_events(event) if event.type == pygame.VIDEORESIZE: self.opt.W = event.w self.opt.H = event.h self.opt.resolution = (event.w, event.h) self.recreate_ui() if event.type == pygame.USEREVENT: if event.user_type == pygame_gui.UI_BUTTON_PRESSED: if event.ui_element == self.btn_gen_explore: self.pnl_gen_explore.show() self.pnl_gen_search.hide() self.pnl_tiles_explore.hide() self.pnl_tiles_search.hide() self.active_panel = self.pnl_gen_explore elif event.ui_element == self.btn_gen_search: self.pnl_gen_explore.hide() self.pnl_gen_search.show() self.pnl_tiles_explore.hide() self.pnl_tiles_search.hide() self.active_panel = self.btn_gen_search elif event.ui_element == self.btn_tiles_explore: self.pnl_gen_explore.hide() self.pnl_gen_search.hide() self.pnl_tiles_explore.show() self.pnl_tiles_search.hide() self.active_panel = self.btn_tiles_explore elif event.ui_element == self.btn_tiles_search: self.pnl_gen_explore.hide() self.pnl_gen_search.hide() self.pnl_tiles_explore.hide() self.pnl_tiles_search.show() self.active_panel = self.pnl_tiles_search elif event.ui_element == self.btn_gen_explore_save_as_png: self.file_dialog_gen_explore_save_as_png = UIFileDialog( pygame.Rect(self.opt.W // 4, self.opt.H // 4, self.opt.W // 2, self.opt.H // 2), self.ui_manager, window_title='Save as PNG', initial_file_path='map.png', object_id='#file_dialog_gen_explore_save_as_png') if event.user_type == pygame_gui.UI_FILE_DIALOG_PATH_PICKED: if event.ui_element == self.file_dialog_gen_explore_save_as_png: self.gen_explore_image.save(event.text) if event.user_type == pygame_gui.UI_WINDOW_CLOSE: if event.ui_element == self.file_dialog_gen_explore_save_as_png: self.file_dialog_gen_explore_save_as_png = None if event.user_type == pygame_gui.UI_SELECTION_LIST_DOUBLE_CLICKED_SELECTION: if event.ui_element == self.gen_list: if self.gen_state.is_generator(event.text): M = self.gen_state.get_generator(event.text)() surface_w = self.opt.W - 435 surface_h = self.opt.H - 95 self.gen_explore_image = construct_bounded_map_image( M, surface_w, surface_h) image_bytes = self.gen_explore_image.tobytes() im_w, im_h = self.gen_explore_image.size shift_x = (surface_w - im_w) // 2 shift_y = (surface_h - im_h) // 2 if not self.gen_explore_map_image: self.gen_explore_map_image = UIImage( relative_rect=pygame.Rect( 360 + shift_x, 75 + shift_y, im_w, im_h), image_surface=pygame.image.fromstring( image_bytes, self.gen_explore_image.size, self.gen_explore_image.mode), manager=self.ui_manager, container=self.pnl_gen_explore, object_id='#gen_explore_map_image', ) else: self.gen_explore_map_image.set_relative_position( pygame.Rect(360 + shift_x, 75 + shift_y, im_w, im_h)) self.gen_explore_map_image.image = pygame.image.fromstring( image_bytes, self.gen_explore_image.size, self.gen_explore_image.mode) if not self.btn_gen_explore_save_as_png: self.btn_gen_explore_save_as_png = UIButton( pygame.Rect(self.opt.W - 265, 5, 190, 50), 'Save as PNG', manager=self.ui_manager, container=self.pnl_gen_explore, object_id='#btn_gen_explore_save_as_png', starting_height=10, ) else: self.gen_state.change_state(event.text) self.gen_list.set_item_list( self.gen_state.get_current_gen_list())