class Menu(Composite): def __init__(self, factory): Composite.__init__(self) self._factory = factory self._cursor_position = Position(10, 10) @recreate_surface def add_header(self, text): header = self._factory.create_header() self._add_row(header, text) @recreate_surface def add_choice(self, text): choice = self._factory.create_menu_row() self._add_row(choice, text) @recreate_surface def add_space(self): self._cursor_position = self._cursor_position.down(10) def surface(self): size = Size(300, self._cursor_position.y + 10) surface = Surface.create(size) surface.fill(MenuBackgroundColor()) return surface def _move_cursor_by_font_size(self, text): font_size = text.get_font_size() self._cursor_position = self._cursor_position.down(font_size) def _add_row(self, element, text): element.set_position(self._cursor_position) element.set_text(text) self._move_cursor_by_font_size(element) self.add_child(element)
def text_positions(self): self.when_adding_row("Row") self.then_row_was_put_on(Position(10, 10)) self.when_setting_header("Header") self.then_header_was_set_to(Position(10, 30)) self.when_adding_row("Row") self.then_row_was_put_on(Position(10, 60)) self.when_adding_space() self.when_adding_row("Row") self.then_row_was_put_on(Position(10, 90))
def check_types_to_be_equal(self): class Pos(object): def __init__(self, x, y): self.x = x self.y = y ok_(Position(0, 0) != Pos(0, 0))
def visibles(self): menu = self._visible_factory.create_menu() menu.set_position(Position(200, 100)) menu.add_header(self.header()) for choice in self.choices(): if choice: menu.add_choice(choice) else: menu.add_space() return menu
def __init__(self, factory): Composite.__init__(self) self._factory = factory self._cursor_position = Position(10, 10)
def access_parts(self): p = Position(1, 5) eq_(p.x, 1) eq_(p.y, 5)
def get_tuple(self): eq_(Position(0, 0).tuple(), (0, 0))
def move_up(self): eq_(Position(0, 0), Position(0, 2).up(2)) eq_(Position(0, 0), Position(0, 1).up())
def move_down(self): eq_(Position(0, 2), Position(0, 0).down(2)) eq_(Position(0, 1), Position(0, 0).down())
def move_left(self): eq_(Position(0, 0), Position(2, 0).left(2)) eq_(Position(0, 0), Position(1, 0).left())
def move_right(self): eq_(Position(2, 0), Position(0, 0).right(2)) eq_(Position(1, 0), Position(0, 0).right())
def move(self): eq_(Position(2, 3), Position(0, 0).move(2, 3))
def add(self): eq_(Position(1, 1), Position(0, 0) + Position(1, 1))
def same_point_is_equal(self): eq_(Position(0, 0), Position(0, 0))