Package Gnumed :: Package timelinelib :: Package wxgui :: Package components :: Package propertyeditors :: Module alerteditor |
[frames] | no frames]

# Source Code for Module Gnumed.timelinelib.wxgui.components.propertyeditors.alerteditor

      1  # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018  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
     21  from timelinelib.wxgui.components.propertyeditors.baseeditor import BaseEditor
     22
     23
     24 -class AlertEditorGuiCreator(wx.Panel):
     25
     26 -    def __init__(self, parent):
     27          self.parent = parent
     28          wx.Panel.__init__(self, parent)
     29
     30 -    def create_sizer(self):
     31          return wx.GridBagSizer(vgap=5, hgap=5)
     32
     33 -    def create_controls(self):
     34          self.btn_add = self._create_add_button()
     35          self.btn_clear = self._create_clear_button()
     36          self.input_panel = self._create_input_controls()
     37          return (self.btn_add, self.btn_clear, self.input_panel)
     38
     39 -    def put_controls_in_sizer(self, sizer, controls):
     40          btn_add, btn_clear, input_panel = controls
     41          sizer.Add(btn_add, wx.GBPosition(0, 0), wx.GBSpan(1, 1))
     42          sizer.Add(btn_clear, wx.GBPosition(0, 1), wx.GBSpan(1, 1))
     43          sizer.Add(input_panel, wx.GBPosition(1, 0), wx.GBSpan(4, 5))
     44
     45 -    def _create_add_button(self):
     46          btn_add = wx.Button(self, wx.ID_ADD)
     47          self.Bind(wx.EVT_BUTTON, self._btn_add_on_click, btn_add)
     48          return btn_add
     49
     50 -    def _create_clear_button(self):
     51          btn_clear = wx.Button(self, wx.ID_CLEAR)
     52          self.Bind(wx.EVT_BUTTON, self._btn_clear_on_click, btn_clear)
     53          return btn_clear
     54
     55 -    def _create_input_controls(self):
     56          alert_panel = wx.Panel(self)
     57          alert_panel.on_return = self._on_return
     58          time_type = self.editor.timeline.get_time_type()
     59          self.dtp_start = time_type.create_time_picker(alert_panel, config=self.editor.config)
     60          self.text_data = wx.TextCtrl(alert_panel, size=(300, 80), style=wx.TE_MULTILINE)
     61          self.data = self.dtp_start
     62          self._layout_input_controls(alert_panel)
     63          return alert_panel
     64
     65 -    def _on_return(self):
     66          self.parent.on_return()
     67
     68 -    def _layout_input_controls(self, alert_panel):
     69          when = wx.StaticText(alert_panel, label=_("When:"))
     70          text = wx.StaticText(alert_panel, label=_("Text:"))
     71          sizer = wx.GridBagSizer(5, 10)
     72          sizer.Add(when, wx.GBPosition(0, 0), wx.GBSpan(1, 1))
     73          sizer.Add(self.dtp_start, wx.GBPosition(0, 1), wx.GBSpan(1, 3))
     74          sizer.Add(text, wx.GBPosition(1, 0), wx.GBSpan(1, 1))
     75          sizer.Add(self.text_data, wx.GBPosition(1, 1), wx.GBSpan(1, 9))
     76          alert_panel.SetSizerAndFit(sizer)
     77
     78
     79 -class AlertEditor(BaseEditor, AlertEditorGuiCreator):
     80
     81 -    def __init__(self, parent, editor, name=""):
     82          BaseEditor.__init__(self, parent, editor)
     83          AlertEditorGuiCreator.__init__(self, parent)
     84          self.create_gui()
     85          self._initialize_data()
     86
     87 -    def _initialize_data(self):
     88          self._set_initial_time()
     89          self._set_initial_text()
     90          self._set_visible(False)
     91
     92 -    def _set_initial_time(self):
     93          if self.editor.event is not None:
     94              self.dtp_start.set_value(self.editor.event.get_start_time())
     95          else:
     96              self.dtp_start.set_value(self.editor.start)
     97
     98 -    def _set_initial_text(self):
     99          self.text_data.SetValue("")
    100
    101 -    def get_data(self):
    102          if self.input_visible:
    103              time = self.dtp_start.get_value()
    104              text = self.text_data.GetValue()
    105              return (time, text)
    106          else:
    107              return None
    108
    109 -    def set_data(self, data):
    110          if data is None:
    111              self._set_visible(False)
    112          else:
    113              self._set_visible(True)
    114              time, text = data
    115              self.dtp_start.set_value(time)
    116              self.text_data.SetValue(text)
    117
    118 -    def _btn_add_on_click(self, evt):
    119          self._set_visible(True)
    120
    121 -    def _btn_clear_on_click(self, evt):
    122          self.clear_data()
    123
    124 -    def clear_data(self):
    125          self._set_initial_time()
    126          self._set_initial_text()
    127          self._set_visible(False)
    128
    129 -    def _set_visible(self, value):
    130          self.input_visible = value
    131          self.input_panel.Show(self.input_visible)
    132          self.btn_add.Enable(not value)
    133          self.btn_clear.Enable(value)
    134          self.GetSizer().Layout()
    135