class CanvasVEventView(CanvasEventView): """ A canvas item that shows a range of events. """ def __init__(self, cal, start=None, end=None, **kwargs): """ Constructor. """ self.table = CanvasMagnetTable(align=CanvasMagnetTable.ALIGN_LEFT) self.table.set_row_count(24 * 4) self.table.set_homogeneus_rows(True) CanvasEventView.__init__(self, cal, start, end, **kwargs) self.append(self.table, hippo.PACK_EXPAND) def _add_event(self, event): rows, cols = self.table.get_size() event_start = max(event.start, self.range[0]) event_end = min(event.end, self.range[1]) event_off = (event_start - self.range[0]).seconds event_len = (event_end - event_start).seconds range_len = self.range[1] - self.range[0] seconds = range_len.days * 24 * 60 * 60 + range_len.seconds row_seconds = ceil(seconds / float(rows)) event_off_rows = int(ceil(event_off / float(row_seconds))) event_len_rows = int(ceil(event_len / float(row_seconds))) event_end_rows = event_off_rows + event_len_rows # Create the event. item = CanvasEvent(self.cal, event) self.event_items[event] = item item.connect("button-press-event", self.on_event_button_press_event) item.connect("button-release-event", self.on_event_button_release_event) self.table.set_column_expand(cols, True) self.table.add(item, cols + 1, cols + 2, event_off_rows, event_end_rows) item.set_text(event.caption) item.set_property("color", color.to_int(event.bg_color)) if event.text_color is not None: item.set_text_color(event.text_color) radius_top_left = 10 radius_top_right = 10 radius_bottom_left = 10 radius_bottom_right = 10 if event.end > self.range[1]: radius_bottom_left = 0 radius_bottom_right = 0 if event.start < self.range[0]: radius_top_left = 0 radius_top_right = 0 item.set_properties( radius_top_left=radius_top_left, radius_top_right=radius_top_right, radius_bottom_left=radius_bottom_left, radius_bottom_right=radius_bottom_right, ) def update(self): # Remove old events. for item in self.table.get_children(): self.table.remove(item) self.table.set_column_count(0) if self.range is None: return for event in self.model.get_normal_events(*self.range): self._add_event(event)
class CanvasVEventView(CanvasEventView): """ A canvas item that shows a range of events. """ def __init__(self, cal, start=None, end=None, **kwargs): """ Constructor. """ self.table = CanvasMagnetTable(align=CanvasMagnetTable.ALIGN_LEFT) self.table.set_row_count(24 * 4) self.table.set_homogeneus_rows(True) CanvasEventView.__init__(self, cal, start, end, **kwargs) self.append(self.table, hippo.PACK_EXPAND) def _add_event(self, event): rows, cols = self.table.get_size() event_start = max(event.start, self.range[0]) event_end = min(event.end, self.range[1]) event_off = (event_start - self.range[0]).seconds event_len = (event_end - event_start).seconds range_len = self.range[1] - self.range[0] seconds = range_len.days * 24 * 60 * 60 + range_len.seconds row_seconds = ceil(seconds / float(rows)) event_off_rows = int(ceil(event_off / float(row_seconds))) event_len_rows = int(ceil(event_len / float(row_seconds))) event_end_rows = event_off_rows + event_len_rows # Create the event. item = CanvasEvent(self.cal, event) self.event_items[event] = item item.connect('button-press-event', self.on_event_button_press_event) item.connect('button-release-event', self.on_event_button_release_event) self.table.set_column_expand(cols, True) self.table.add(item, cols + 1, cols + 2, event_off_rows, event_end_rows) item.set_text(event.caption) item.set_property('color', color.to_int(event.bg_color)) if event.text_color is not None: item.set_text_color(event.text_color) radius_top_left = 10 radius_top_right = 10 radius_bottom_left = 10 radius_bottom_right = 10 if event.end > self.range[1]: radius_bottom_left = 0 radius_bottom_right = 0 if event.start < self.range[0]: radius_top_left = 0 radius_top_right = 0 item.set_properties(radius_top_left=radius_top_left, radius_top_right=radius_top_right, radius_bottom_left=radius_bottom_left, radius_bottom_right=radius_bottom_right) def update(self): # Remove old events. for item in self.table.get_children(): self.table.remove(item) self.table.set_column_count(0) if self.range is None: return for event in self.model.get_normal_events(*self.range): self._add_event(event)