def __init__(self, title, content): TreeItem.__init__(self) self.title = title self.entry = None self.entry_buffer = EntryBuffer(content) self.entry_buffer.set_property('cursor-visible', False) self.entry_buffer.connect("changed", self.entry_buffer_changed) self.entry_buffer.connect("insert-pos-changed", self.entry_buffer_changed) self.entry_buffer.connect("selection-pos-changed", self.entry_buffer_changed) self.child_items = [] self.height = 24 self.ENTRY_COLUMN = 1 self.is_double_click = False
class EntryTreeItem(TreeItem): ''' EntryTreeItem class. @undocumented: entry_buffer_changed @undocumented: get_height @undocumented: get_column_widths @undocumented: get_column_renders @undocumented: render_title @undocumented: render_content @undocumented: unselect @undocumented: select @undocumented: hover @undocumented: unhover @undocumented: single_click @undocumented: double_click @undocumented: expand @undocumented: unexpand ''' def __init__(self, title, content): TreeItem.__init__(self) self.title = title self.entry = None self.entry_buffer = EntryBuffer(content) self.entry_buffer.set_property('cursor-visible', False) self.entry_buffer.connect("changed", self.entry_buffer_changed) self.entry_buffer.connect("insert-pos-changed", self.entry_buffer_changed) self.entry_buffer.connect("selection-pos-changed", self.entry_buffer_changed) self.child_items = [] self.height = 24 self.ENTRY_COLUMN = 1 self.is_double_click = False def entry_buffer_changed(self, bf): if self.redraw_request_callback: self.redraw_request_callback(self) def get_height(self): return self.height def get_column_widths(self): return [-1, 200] def get_column_renders(self): return [self.render_title, self.render_content] def render_title(self, cr, rect): if self.is_select: text_color = "#FFFFFF" bg_color = "#3399FF" cr.set_source_rgb(*color_hex_to_cairo(bg_color)) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.paint() else: text_color = "#000000" draw_text(cr, self.title, rect.x, rect.y, rect.width, rect.height, text_color=text_color) def render_content(self, cr, rect): if self.is_select: text_color = "#FFFFFF" bg_color = "#3399FF" if not self.is_double_click: cr.set_source_rgb(*color_hex_to_cairo(bg_color)) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.paint() else: text_color = "#000000" self.entry_buffer.move_to_start() self.entry_buffer.set_text_color(text_color) height = self.entry_buffer.get_pixel_size()[1] offset = (self.height - height)/2 if offset < 0 : offset = 0 rect.y += offset if self.entry and self.entry.allocation.width == self.get_column_widths()[1]-4: self.entry.calculate() rect.x += 2 rect.width -= 4 self.entry_buffer.set_text_color("#000000") self.entry_buffer.render(cr, rect, self.entry.im, self.entry.offset_x) else: self.entry_buffer.render(cr, rect) def unselect(self): self.is_select = False if self.redraw_request_callback: self.redraw_request_callback(self) def select(self): self.is_select = True if self.redraw_request_callback: self.redraw_request_callback(self) def hover(self, column, offset_x, offset_y): pass def unhover(self, column, offset_x, offset_y): pass def single_click(self, column, offset_x, offset_y): self.is_double_click = False if self.redraw_request_callback: self.redraw_request_callback(self) def double_click(self, column, offset_x, offset_y): self.is_double_click = True def expand(self): if self.is_expand: return self.is_expand = True self.add_items_callback(self.child_items, self.row_index+1) if self.redraw_request_callback: self.redraw_request_callback(self) def unexpand(self): self.is_expand = False self.delete_items_callback(self.child_items)
class EntryTreeItem(TreeItem): ''' EntryTreeItem class. @undocumented: entry_buffer_changed @undocumented: get_height @undocumented: get_column_widths @undocumented: get_column_renders @undocumented: render_title @undocumented: render_content @undocumented: unselect @undocumented: select @undocumented: hover @undocumented: unhover @undocumented: single_click @undocumented: double_click @undocumented: expand @undocumented: unexpand ''' def __init__(self, title, content): TreeItem.__init__(self) self.title = title self.entry = None self.entry_buffer = EntryBuffer(content) self.entry_buffer.set_property('cursor-visible', False) self.entry_buffer.connect("changed", self.entry_buffer_changed) self.entry_buffer.connect("insert-pos-changed", self.entry_buffer_changed) self.entry_buffer.connect("selection-pos-changed", self.entry_buffer_changed) self.child_items = [] self.height = 24 self.ENTRY_COLUMN = 1 self.is_double_click = False def entry_buffer_changed(self, bf): if self.redraw_request_callback: self.redraw_request_callback(self) def get_height(self): return self.height def get_column_widths(self): return [-1, 200] def get_column_renders(self): return [self.render_title, self.render_content] def render_title(self, cr, rect): if self.is_select: text_color = "#FFFFFF" bg_color = "#3399FF" cr.set_source_rgb(*color_hex_to_cairo(bg_color)) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.paint() else: text_color = "#000000" draw_text(cr, self.title, rect.x, rect.y, rect.width, rect.height, text_color=text_color) def render_content(self, cr, rect): if self.is_select: text_color = "#FFFFFF" bg_color = "#3399FF" if not self.is_double_click: cr.set_source_rgb(*color_hex_to_cairo(bg_color)) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.paint() else: text_color = "#000000" self.entry_buffer.move_to_start() self.entry_buffer.set_text_color(text_color) height = self.entry_buffer.get_pixel_size()[1] offset = (self.height - height) / 2 if offset < 0: offset = 0 rect.y += offset if self.entry and self.entry.allocation.width == self.get_column_widths( )[1] - 4: self.entry.calculate() rect.x += 2 rect.width -= 4 self.entry_buffer.set_text_color("#000000") self.entry_buffer.render(cr, rect, self.entry.im, self.entry.offset_x) else: self.entry_buffer.render(cr, rect) def unselect(self): self.is_select = False if self.redraw_request_callback: self.redraw_request_callback(self) def select(self): self.is_select = True if self.redraw_request_callback: self.redraw_request_callback(self) def hover(self, column, offset_x, offset_y): pass def unhover(self, column, offset_x, offset_y): pass def single_click(self, column, offset_x, offset_y): self.is_double_click = False if self.redraw_request_callback: self.redraw_request_callback(self) def double_click(self, column, offset_x, offset_y): self.is_double_click = True def expand(self): if self.is_expand: return self.is_expand = True self.add_items_callback(self.child_items, self.row_index + 1) if self.redraw_request_callback: self.redraw_request_callback(self) def unexpand(self): self.is_expand = False self.delete_items_callback(self.child_items)