コード例 #1
0
    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())
コード例 #2
0
    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'
コード例 #3
0
    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
コード例 #4
0
    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
コード例 #5
0
    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')]
コード例 #6
0
    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
コード例 #7
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)
コード例 #8
0
    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()
コード例 #9
0
    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)
コード例 #10
0
    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')]
コード例 #11
0
    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
コード例 #12
0
    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')
コード例 #13
0
    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
コード例 #14
0
    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()
コード例 #15
0
 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)
コード例 #16
0
 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)
コード例 #17
0
    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())