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

Source Code for Module Gnumed.timelinelib.wxgui.dialogs.preferences

  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   
 21  from timelinelib.config.preferences import PreferencesEditor 
 22  from timelinelib.wxgui.utils import BORDER 
 23   
 24   
25 -class PreferencesDialog(wx.Dialog):
26
27 - def __init__(self, parent, config):
28 wx.Dialog.__init__(self, parent, title=_("Preferences")) 29 self._create_gui() 30 self._controller = PreferencesEditor(self, config) 31 self._controller.initialize_controls()
32
33 - def set_checkbox_enable_wide_date_range(self, value):
34 self.chb_wide_date_range.SetValue(value)
35
36 - def set_checkbox_use_inertial_scrolling(self, value):
37 self.chb_inertial_scrolling.SetValue(value)
38
39 - def set_checkbox_open_recent_at_startup(self, value):
40 self.chb_open_recent.SetValue(value)
41
42 - def set_week_start(self, index):
43 self.choice_week.SetSelection(index)
44
45 - def _create_gui(self):
46 main_box = self._create_main_box() 47 self.SetSizerAndFit(main_box)
48
49 - def _create_main_box(self):
50 notebook = self._create_nootebook_control() 51 button_box = self._create_button_box() 52 main_box = wx.BoxSizer(wx.VERTICAL) 53 flag = wx.ALL|wx.EXPAND 54 main_box.Add(notebook, flag=flag, border=BORDER, proportion=1) 55 main_box.Add(button_box, flag=flag, border=BORDER) 56 return main_box
57
59 notebook = wx.Notebook(self, style=wx.BK_DEFAULT) 60 self._create_general_tab(notebook) 61 self._create_date_time_tab(notebook) 62 return notebook
63
64 - def _create_button_box(self):
65 btn_close = self._create_close_button() 66 button_box = wx.BoxSizer(wx.HORIZONTAL) 67 button_box.AddStretchSpacer() 68 button_box.Add(btn_close, flag=wx.LEFT, border=BORDER) 69 return button_box
70
71 - def _create_general_tab(self, notebook):
72 panel = self._create_tab_panel(notebook, _("General")) 73 controls = self._create_general_tab_controls(panel) 74 self._size_tab_panel(panel, controls)
75
76 - def _create_general_tab_controls(self, panel):
77 self.chb_open_recent = self._create_chb_open_recent(panel) 78 self.chb_inertial_scrolling = self._create_chb_inertial_scrolling(panel) 79 return (self.chb_open_recent, self.chb_inertial_scrolling)
80
81 - def _create_date_time_tab(self, notebook):
82 panel = self._create_tab_panel(notebook, _("Date && Time")) 83 controls = self._create_date_time_tab_controls(panel) 84 self._size_tab_panel(panel, controls)
85
86 - def _create_date_time_tab_controls(self, panel):
87 self.chb_wide_date_range = self._create_chb_wide_date_range(panel) 88 self.choice_week = self._create_choice_week(panel) 89 grid = wx.FlexGridSizer(1, 2, BORDER, BORDER) 90 grid.Add(wx.StaticText(panel, label=_("Week start on:")), 91 flag=wx.ALIGN_CENTER_VERTICAL) 92 grid.Add(self.choice_week, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT) 93 warning = _("This feature is experimental. If events are\ncreated in the extended range, you can not\ndisable this option and successfully load\nthe timeline again. A reload of the timeline\nis also needed for this to take effect.") 94 warning_text_control = wx.StaticText(panel, label=warning) 95 warning_text_control.SetForegroundColour((255, 0, 0)) 96 return (grid, self.chb_wide_date_range, warning_text_control)
97
98 - def _create_tab_panel(self, notebook, label):
99 panel = wx.Panel(notebook) 100 notebook.AddPage(panel, label) 101 return panel
102
103 - def _size_tab_panel(self, panel, controls):
104 sizer = wx.BoxSizer(wx.VERTICAL) 105 for control in controls: 106 sizer.Add(control, flag=wx.ALL|wx.EXPAND, border=BORDER) 107 panel.SetSizer(sizer)
108
109 - def _create_chb_open_recent(self, panel):
110 label = _("Open most recent timeline on startup") 111 handler = self._chb_open_recent_startup_on_checkbox 112 chb = self._create_chb(panel, label, handler) 113 return chb
114
115 - def _create_chb_inertial_scrolling(self, panel):
116 label = _("Use inertial scrolling") 117 handler = self._chb_use_inertial_scrolling_on_checkbox 118 chb = self._create_chb(panel, label, handler) 119 return chb
120
121 - def _create_chb_wide_date_range(self, panel):
122 label = _("Use extended date range (before 1 AD)") 123 handler = self._chb_use_wide_date_range_on_checkbox 124 chb = self._create_chb(panel, label, handler) 125 return chb
126
127 - def _create_chb(self, panel, label, handler):
128 chb = wx.CheckBox(panel, label=label) 129 self.Bind(wx.EVT_CHECKBOX, handler, chb) 130 return chb
131
132 - def _create_choice_week(self, panel):
133 choice_week = wx.Choice(panel, choices=[_("Monday"), _("Sunday")]) 134 self.Bind(wx.EVT_CHOICE, self._choice_week_on_choice, choice_week) 135 return choice_week
136
137 - def _create_close_button(self):
138 btn_close = wx.Button(self, wx.ID_CLOSE) 139 btn_close.SetDefault() 140 btn_close.SetFocus() 141 self.SetAffirmativeId(wx.ID_CLOSE) 142 self.Bind(wx.EVT_BUTTON, self._btn_close_on_click, btn_close) 143 return btn_close
144
146 self._controller.on_use_wide_date_range_changed(evt.IsChecked())
147
149 self._controller.on_use_inertial_scrolling_changed(evt.IsChecked())
150
152 self._controller.on_open_recent_changed(evt.IsChecked())
153
154 - def _choice_week_on_choice(self, evt):
155 self._controller.on_week_start_changed(evt.IsChecked())
156
157 - def _btn_close_on_click(self, e):
158 self.Close()
159