Package Gnumed :: Package timelinelib :: Package wxgui :: Package dialogs :: Module categoryeditor |
[frames] | no frames]

# Source Code for Module Gnumed.timelinelib.wxgui.dialogs.categoryeditor

      1  # Copyright (C) 2009, 2010, 2011  Rickard Lindberg, Roger Lindberg
      2  #
      3  # This file is part of Timeline.
      4  #
      5  # Timeline is free software: you can redistribute it and/or modify
      6  # it under the terms of the GNU General Public License as published by
      7  # the Free Software Foundation, either version 3 of the License, or
      8  # (at your option) any later version.
      9  #
     10  # Timeline is distributed in the hope that it will be useful,
     11  # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  # GNU General Public License for more details.
     14  #
     15  # You should have received a copy of the GNU General Public License
     16  # along with Timeline.  If not, see <http://www.gnu.org/licenses/>.
     17
     18
     19  import wx
     20  import wx.lib.colourselect as colourselect
     21
     22  import timelinelib.wxgui.utils as gui_utils
     23  from timelinelib.wxgui.utils import _display_error_message
     24  from timelinelib.wxgui.utils import _set_focus_and_select
     25  from timelinelib.wxgui.utils import BORDER
     26  from timelinelib.editors.category import CategoryEditor
     27  from timelinelib.repositories.dbwrapper import DbWrapperCategoryRepository
     28
     29
     30 -class WxCategoryEdtiorDialog(wx.Dialog):
     31
     32 -    def __init__(self, parent, title, timeline, category):
     33          wx.Dialog.__init__(self, parent, title=title)
     34          self._create_gui()
     35          self.controller = CategoryEditor(self)
     36          self.controller.edit(category, DbWrapperCategoryRepository(timeline))
     37
     38 -    def set_category_tree(self, tree):
     39          def add_tree(tree, indent=""):
     40              for (root, subtree) in tree:
     41                  self.parentlistbox.Append(indent + root.name, root)
     42                  add_tree(subtree, indent + "    ")
     43          self.parentlistbox.Clear()
     44          self.parentlistbox.Append("", None) # No parent
     45          add_tree(tree)
     46          self.SetSizerAndFit(self.vbox)
     47
     48 -    def get_name(self):
     49          return self.txt_name.GetValue().strip()
     50
     51 -    def set_name(self, new_name):
     52          self.txt_name.SetValue(new_name)
     53
     54 -    def get_color(self):
     55          # Convert wx.Color to (r, g, b) tuple
     56          (r, g, b) = self.colorpicker.GetValue()
     57          return (r, g, b)
     58
     59 -    def get_font_color(self):
     60          # Convert wx.Color to (r, g, b) tuple
     61          (r, g, b) = self.fontcolorpicker.GetValue()
     62          return (r, g, b)
     63
     64 -    def set_color(self, new_color):
     65          self.colorpicker.SetValue(new_color)
     66
     67 -    def set_font_color(self, new_color):
     68          self.fontcolorpicker.SetValue(new_color)
     69
     70 -    def get_parent(self):
     71          selection = self.parentlistbox.GetSelection()
     72          if selection == wx.NOT_FOUND:
     73              return None
     74          return self.parentlistbox.GetClientData(selection)
     75
     76 -    def set_parent(self, parent):
     77          no_items = self.parentlistbox.GetCount()
     78          for i in range(0, no_items):
     79              if self.parentlistbox.GetClientData(i) is parent:
     80                  self.parentlistbox.SetSelection(i)
     81                  return
     82
     83 -    def close(self):
     84          self.EndModal(wx.ID_OK)
     85
     86 -    def handle_invalid_name(self, name):
     87          msg = _("Category name '%s' not valid. Must be non-empty.")
     88          _display_error_message(msg % name, self)
     89          _set_focus_and_select(self.txt_name)
     90
     91 -    def handle_used_name(self, name):
     92          msg = _("Category name '%s' already in use.")
     93          _display_error_message(msg % name, self)
     94          _set_focus_and_select(self.txt_name)
     95
     96 -    def handle_db_error(self, e):
     97          gui_utils.handle_db_error_in_dialog(self, e)
     98
     99 -    def get_edited_category(self):
    100          return self.controller.category
    101
    102 -    def _create_gui(self):
    103          self.vbox = wx.BoxSizer(wx.VERTICAL)
    104          field_grid = self._create_field_grid()
    105          button_box = self._create_button_box()
    106          self.vbox.Add(field_grid, flag=wx.ALL|wx.EXPAND, border=BORDER)
    107          self.vbox.Add(button_box, flag=wx.ALL|wx.EXPAND, border=BORDER)
    108          _set_focus_and_select(self.txt_name)
    109
    110 -    def _create_field_grid(self):
    111          self.txt_name = wx.TextCtrl(self, size=(150, -1))
    112          self.colorpicker = colourselect.ColourSelect(self)
    113          self.fontcolorpicker = colourselect.ColourSelect(self)
    114          self.parentlistbox = wx.Choice(self, wx.ID_ANY)
    115          grid = wx.FlexGridSizer(3, 2, BORDER, BORDER)
    116          self._add_ctrl_to_grid(_("Name:"), self.txt_name, grid)
    117          self._add_ctrl_to_grid(_("Color:"), self.colorpicker, grid)
    118          self._add_ctrl_to_grid(_("Font Color:"), self.fontcolorpicker, grid)
    119          self._add_ctrl_to_grid(_("Parent:"), self.parentlistbox, grid)
    120          return grid
    121
    122 -    def _add_ctrl_to_grid(self, name, ctrl, grid):
    123          grid.Add(wx.StaticText(self, label=name), flag=wx.ALIGN_CENTER_VERTICAL)
    124          grid.Add(ctrl)
    125
    126 -    def _create_button_box(self):
    127          button_box = self.CreateStdDialogButtonSizer(wx.OK|wx.CANCEL)
    128          self.Bind(wx.EVT_BUTTON, self._btn_ok_on_click, id=wx.ID_OK)
    129          return button_box
    130
    131 -    def _btn_ok_on_click(self, e):
    132          self.controller.save()
    133