示例#1
0
 def __init__(self, project, list_view, app_frame, tree_node):
     TreeItemData.__init__(self, list_view)
     self.project = project
     self.rows = {}
     self.last_row_id = None
     self.project_id = project.get_id()
     self.app_frame = app_frame
     self.where_clause = None
     self.__row_cnt__ = None
     self.tree = app_frame.tree
     self.unread_count = 0
     self.name = project.name
     self.tree_node = tree_node
     #~ self.filter_expression = TrueExpression()
     expressions = [x.filter_expression for x in project.filters]
     self.filter_expression = NorExpression(expressions)
     self.where_clause = self.filter_expression.get_where(project.log_entries_table)
示例#2
0
class ProjectTreeItemData(TreeItemData):
    CNT_READ_AHEAD = 100
    ROW_BUFFER_SIZE = 3 * CNT_READ_AHEAD

    def __init__(self, project, list_view, app_frame, tree_node):
        TreeItemData.__init__(self, list_view)
        self.project = project
        self.rows = {}
        self.last_row_id = None
        self.project_id = project.get_id()
        self.app_frame = app_frame
        self.where_clause = None
        self.__row_cnt__ = None
        self.tree = app_frame.tree
        self.unread_count = 0
        self.name = project.name
        self.tree_node = tree_node
        #~ self.filter_expression = TrueExpression()
        expressions = [x.filter_expression for x in project.filters]
        self.filter_expression = NorExpression(expressions)
        self.where_clause = self.filter_expression.get_where(project.log_entries_table)

    def OnSelChanged(self, event):
        log.debug("ProjectTreeItemData.OnSelChanged()")
        self.MarkAsRead()

        row_count = self.project.get_row_count(self.where_clause)
        log.debug("row_count: %s" % row_count)
        self.app_frame.sb.SetStatus('row_cnt', "Rows: %s" % row_count, True)
        self.__row_cnt__ = int(row_count)
        self.rows = {}

        self.list_view.SaveColumnWidthDict()
        self.list_view.SetColumns(self.project.parameters)
        self.list_view.SetItemCount(row_count)
        self.list_view.OnGetItemTextCallback = self
        self.list_view.Refresh()
        self.list_view.MoveLast()

    def OnGetItemText(self, item, col):
        #~ if col == 0:
            #~ log.debug("ProjectTreeItemData.OnGetItemText(%s, %s)" % (item, col))
        if not self.last_row_id:
            going_up = False
        elif self.last_row_id < item:
            going_up = False
        elif self.last_row_id > item:
            going_up = True
        else:
            going_up = False

        self.last_row_id = item

        if not item in self.rows:
            log.debug("ProjectTreeItemData.OnGetItemText(%s, %s)" % (item, col))
            if len(self.rows) + ProjectTreeItemData.CNT_READ_AHEAD > ProjectTreeItemData.ROW_BUFFER_SIZE:
                self.__shrink_buffer__(going_up, item)

            if going_up:
                log.debug("going up")
                offset = item - ProjectTreeItemData.CNT_READ_AHEAD + 1
            else:
                offset = item

            for index, new_row in enumerate(self.project.get_next(offset,
                ProjectTreeItemData.CNT_READ_AHEAD, self.where_clause)):

                #~ log.debug("new_row: %s" % new_row)
                self.rows[offset + index] = new_row

            log.debug("size of row buffer: %s" % len(self.rows))

        return self.rows[item][col]

    def __shrink_buffer__(self, going_up, item):
        log.debug("shrinking buffer")
        new_buffer = {}
        for key, value in self.rows.iteritems():
            if going_up and key <= item + ProjectTreeItemData.ROW_BUFFER_SIZE:
                new_buffer[key] = value
            elif not going_up and key >= item - ProjectTreeItemData.ROW_BUFFER_SIZE:
                new_buffer[key] = value

        self.rows = new_buffer
        log.debug("buffer: %s, len: %s" % (sorted(self.rows.keys()), len(self.rows)))


    def IncomingMessage(self, msg):
        item_index = self.list_view.GetItemCount()
        self.__row_cnt__ += 1
        self.app_frame.sb.SetStatus('row_cnt', "Rows: %s" % self.__row_cnt__, True)
        log_repeat.debug("self.__row_cnt__: %s" % self.__row_cnt__)

        if len(self.rows) + 1 > ProjectTreeItemData.ROW_BUFFER_SIZE:
            self.__shrink_buffer__(False, item_index + ProjectTreeItemData.CNT_READ_AHEAD)
        log_repeat.debug("appending %s to list at %s" % (str(msg), item_index))
        self.rows[item_index] = msg
        self.list_view.SetItemCount(item_index + 1)
        #~ self.list_view.Refresh()
        if self.app_frame.auto_scroll:
            self.list_view.MoveLast()
        log_repeat.debug("IncomingMessage,size of row buffer: %s" % len(self.rows))


    def MarkAsUnRead(self):
        #~ log.debug("MarkAsUnRead(%s)" % self.name)
        self.unread_count += 1
        self.tree.SetItemText(self.tree_node,
            "%s (%s)" % (self.name, self.unread_count))
        self.tree.SetItemBold(self.tree_node, True)

    def MarkAsRead(self):
        self.unread_count = 0
        self.tree.SetItemText(self.tree_node, self.name)
        self.tree.SetItemBold(self.tree_node, False)