Package Gnumed :: Package timelinelib :: Package editors :: Module duplicateevent
[frames] | no frames]

Source Code for Module Gnumed.timelinelib.editors.duplicateevent

 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  from timelinelib.db.exceptions import TimelineIOError 
20   
21   
22  FORWARD = 0 
23  BACKWARD = 1 
24  BOTH = 2 
25   
26   
27 -class DuplicateEventEditor(object):
28
29 - def __init__(self, view, db, event):
30 self.view = view 31 self.db = db 32 self.event = event
33
34 - def initialize(self):
39
41 (periods, nbr_of_missing_dates) = self._repeat_period( 42 self.event.time_period, 43 self.view.get_move_period_fn(), 44 self.view.get_frequency(), 45 self.view.get_count(), 46 self.view.get_direction()) 47 try: 48 for period in periods: 49 event = self.event.clone() 50 event.update_period(period.start_time, period.end_time) 51 self.db.save_event(event) 52 if nbr_of_missing_dates > 0: 53 self.view.handle_date_errors(nbr_of_missing_dates) 54 self.view.close() 55 except TimelineIOError, e: 56 self.view.handle_db_error(e)
57
58 - def _repeat_period(self, period, move_period_fn, frequency, 59 repetitions, direction):
60 periods = [] 61 nbr_of_missing_dates = 0 62 for index in self._calc_indicies(direction, repetitions): 63 new_period = move_period_fn(period, index*frequency) 64 if new_period == None: 65 nbr_of_missing_dates += 1 66 else: 67 periods.append(new_period) 68 return (periods, nbr_of_missing_dates)
69
70 - def _calc_indicies(self, direction, repetitions):
71 if direction == FORWARD: 72 return range(1, repetitions + 1) 73 elif direction == BACKWARD: 74 return range(-repetitions, 0) 75 elif direction == BOTH: 76 indicies = range(-repetitions, repetitions + 1) 77 indicies.remove(0) 78 return indicies 79 else: 80 raise Exception("Invalid direction.")
81