예제 #1
0
class CategoryEditorBaseFixture(unittest.TestCase):

    def setUp(self):
        # Category configuration:
        # foo
        #   foofoo
        # bar
        self.category_repository = Mock(CategoryRepository)
        self.foo = Category("foo", (255, 0, 0), None, True, parent=None)
        self.foofoo = Category("foofoo", (255, 0, 0), (0, 255, 0), True, parent=self.foo)
        self.bar = Category("bar", (255, 0, 0), None, True, parent=None)
        self.category_repository.get_all.return_value = [self.foo, self.foofoo, self.bar]
        def get_tree_mock(remove):
            if remove is None:
                return [
                    (self.bar, []),
                    (self.foo, [
                        (self.foofoo,
                            [])
                    ])
                ]
            elif remove is self.foofoo:
                return [
                    (self.bar, []),
                    (self.foo, [])
                ]
            else:
                return []
        self.category_repository.get_tree.side_effect = get_tree_mock
        self.view = Mock(WxCategoryEdtiorDialog)

    def _initializeControllerWith(self, category):
        self.controller = CategoryEditor(self.view)
        self.controller.edit(category, self.category_repository)
예제 #2
0
class CategoryEditorBaseFixture(unittest.TestCase):
    def setUp(self):
        # Category configuration:
        # foo
        #   foofoo
        # bar
        self.category_repository = Mock(CategoryRepository)
        self.foo = Category("foo", (255, 0, 0), None, True, parent=None)
        self.foofoo = Category("foofoo", (255, 0, 0), (0, 255, 0),
                               True,
                               parent=self.foo)
        self.bar = Category("bar", (255, 0, 0), None, True, parent=None)
        self.category_repository.get_all.return_value = [
            self.foo, self.foofoo, self.bar
        ]

        def get_tree_mock(remove):
            if remove is None:
                return [(self.bar, []), (self.foo, [(self.foofoo, [])])]
            elif remove is self.foofoo:
                return [(self.bar, []), (self.foo, [])]
            else:
                return []

        self.category_repository.get_tree.side_effect = get_tree_mock
        self.view = Mock(WxCategoryEdtiorDialog)

    def _initializeControllerWith(self, category):
        self.controller = CategoryEditor(self.view)
        self.controller.edit(category, self.category_repository)
예제 #3
0
 def _initializeControllerWith(self, category):
     self.controller = CategoryEditor(self.view)
     self.controller.edit(category, self.category_repository)
예제 #4
0
 def __init__(self, parent, title, timeline, category):
     wx.Dialog.__init__(self, parent, title=title)
     self._create_gui()
     self.controller = CategoryEditor(self)
     self.controller.edit(category, DbWrapperCategoryRepository(timeline))
예제 #5
0
class WxCategoryEdtiorDialog(wx.Dialog):

    def __init__(self, parent, title, timeline, category):
        wx.Dialog.__init__(self, parent, title=title)
        self._create_gui()
        self.controller = CategoryEditor(self)
        self.controller.edit(category, DbWrapperCategoryRepository(timeline))

    def set_category_tree(self, tree):
        def add_tree(tree, indent=""):
            for (root, subtree) in tree:
                self.parentlistbox.Append(indent + root.name, root)
                add_tree(subtree, indent + "    ")
        self.parentlistbox.Clear()
        self.parentlistbox.Append("", None) # No parent
        add_tree(tree)
        self.SetSizerAndFit(self.vbox)

    def get_name(self):
        return self.txt_name.GetValue().strip()

    def set_name(self, new_name):
        self.txt_name.SetValue(new_name)

    def get_color(self):
        # Convert wx.Color to (r, g, b) tuple
        (r, g, b) = self.colorpicker.GetValue()
        return (r, g, b)

    def get_font_color(self):
        # Convert wx.Color to (r, g, b) tuple
        (r, g, b) = self.fontcolorpicker.GetValue()
        return (r, g, b)

    def set_color(self, new_color):
        self.colorpicker.SetValue(new_color)

    def set_font_color(self, new_color):
        self.fontcolorpicker.SetValue(new_color)

    def get_parent(self):
        selection = self.parentlistbox.GetSelection()
        if selection == wx.NOT_FOUND:
            return None
        return self.parentlistbox.GetClientData(selection)

    def set_parent(self, parent):
        no_items = self.parentlistbox.GetCount()
        for i in range(0, no_items):
            if self.parentlistbox.GetClientData(i) is parent:
                self.parentlistbox.SetSelection(i)
                return

    def close(self):
        self.EndModal(wx.ID_OK)

    def handle_invalid_name(self, name):
        msg = _("Category name '%s' not valid. Must be non-empty.")
        display_error_message(msg % name, self)
        _set_focus_and_select(self.txt_name)

    def handle_used_name(self, name):
        msg = _("Category name '%s' already in use.")
        display_error_message(msg % name, self)
        _set_focus_and_select(self.txt_name)

    def handle_db_error(self, e):
        gui_utils.handle_db_error_in_dialog(self, e)

    def get_edited_category(self):
        return self.controller.category

    def _create_gui(self):
        self.vbox = wx.BoxSizer(wx.VERTICAL)
        field_grid = self._create_field_grid()
        button_box = self._create_button_box()
        self.vbox.Add(field_grid, flag=wx.ALL|wx.EXPAND, border=BORDER)
        self.vbox.Add(button_box, flag=wx.ALL|wx.EXPAND, border=BORDER)
        _set_focus_and_select(self.txt_name)

    def _create_field_grid(self):
        self.txt_name = wx.TextCtrl(self, size=(150, -1))
        self.colorpicker = colourselect.ColourSelect(self)
        self.fontcolorpicker = colourselect.ColourSelect(self)
        self.parentlistbox = wx.Choice(self, wx.ID_ANY)
        grid = wx.FlexGridSizer(4, 2, BORDER, BORDER)
        self._add_ctrl_to_grid(_("Name:"), self.txt_name, grid)
        self._add_ctrl_to_grid(_("Color:"), self.colorpicker, grid)
        self._add_ctrl_to_grid(_("Font Color:"), self.fontcolorpicker, grid)
        self._add_ctrl_to_grid(_("Parent:"), self.parentlistbox, grid)
        return grid

    def _add_ctrl_to_grid(self, name, ctrl, grid):
        grid.Add(wx.StaticText(self, label=name), flag=wx.ALIGN_CENTER_VERTICAL)
        grid.Add(ctrl)

    def _create_button_box(self):
        button_box = self.CreateStdDialogButtonSizer(wx.OK|wx.CANCEL)
        self.Bind(wx.EVT_BUTTON, self._btn_ok_on_click, id=wx.ID_OK)
        return button_box

    def _btn_ok_on_click(self, e):
        self.controller.save()
예제 #6
0
 def _initializeControllerWith(self, category):
     self.controller = CategoryEditor(self.view)
     self.controller.edit(category, self.category_repository)