/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
1
# -*- coding: UTF-8 -*-
2
"""Tree model.
3
4
"""
5
6
__copyright__ = "Copyright © 2005 Canonical Ltd."
7
__author__    = "Gary van der Merwe <garyvdm@gmail.com>"
8
9
10
import gtk
11
import gobject
12
import pango
292.1.1 by Daniel Schierbeck
Removed email address from committer column in the revision history window.
13
import re
413 by Daniel Schierbeck
Made the treeview escape XML in the revision messages.
14
from xml.sax.saxutils import escape
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
15
359 by Daniel Schierbeck
Simplified date format.
16
from time import (strftime, localtime)
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
17
18
REVID = 0
19
NODE = 1
20
LINES = 2
21
LAST_LINES = 3
22
REVNO = 4
23
MESSAGE = 5
24
COMMITER = 6
25
TIMESTAMP = 7
26
REVISION = 8
27
PARENTS = 9
28
CHILDREN = 10
29
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
30
class TreeModel(gtk.GenericTreeModel):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
31
32
    
328 by Jelmer Vernooij
Use repository instead of branch in more places, to make it easier to support multiple branches in viz.
33
    def __init__ (self, repository, line_graph_data):
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
34
        gtk.GenericTreeModel.__init__(self)
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
35
        self.revisions = {}
328 by Jelmer Vernooij
Use repository instead of branch in more places, to make it easier to support multiple branches in viz.
36
        self.repository = repository
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
37
        self.line_graph_data = line_graph_data
38
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
39
    def on_get_flags(self):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
40
        return gtk.TREE_MODEL_LIST_ONLY
41
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
42
    def on_get_n_columns(self):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
43
        return 11
44
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
45
    def on_get_column_type(self, index):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
46
        if index == REVID: return gobject.TYPE_STRING
47
        if index == NODE: return gobject.TYPE_PYOBJECT
48
        if index == LINES: return gobject.TYPE_PYOBJECT
49
        if index == LAST_LINES: return gobject.TYPE_PYOBJECT
50
        if index == REVNO: return gobject.TYPE_STRING
51
        if index == MESSAGE: return gobject.TYPE_STRING
52
        if index == COMMITER: return gobject.TYPE_STRING
53
        if index == TIMESTAMP: return gobject.TYPE_STRING
54
        if index == REVISION: return gobject.TYPE_PYOBJECT
55
        if index == PARENTS: return gobject.TYPE_PYOBJECT
56
        if index == CHILDREN: return gobject.TYPE_PYOBJECT
57
        
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
58
    def on_get_iter(self, path):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
59
        return path[0]
60
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
61
    def on_get_path(self, rowref):
62
        return rowref
63
    
64
    def on_get_value(self, rowref, column):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
65
        (revid, node, lines, parents,
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
66
         children, revno_sequence) = self.line_graph_data[rowref]
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
67
        if column == REVID: return revid
68
        if column == NODE: return node
69
        if column == LINES: return lines
70
        if column == PARENTS: return parents
71
        if column == CHILDREN: return children
72
        if column == LAST_LINES:
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
73
            if rowref>0:
74
                return self.line_graph_data[rowref-1][2]
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
75
            return []
76
        if column == REVNO: return ".".join(["%d" % (revno)
77
                                      for revno in revno_sequence])
78
        
256.2.41 by Gary van der Merwe
Revert GTKTreeModel on_ref_node implementation.
79
        if revid not in self.revisions:
328 by Jelmer Vernooij
Use repository instead of branch in more places, to make it easier to support multiple branches in viz.
80
            revision = self.repository.get_revisions([revid])[0]
256.2.41 by Gary van der Merwe
Revert GTKTreeModel on_ref_node implementation.
81
            self.revisions[revid] = revision
82
        else:
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
83
            revision = self.revisions[revid]
256.2.41 by Gary van der Merwe
Revert GTKTreeModel on_ref_node implementation.
84
        
85
        if column == REVISION: return revision
414 by Daniel Schierbeck
Switched to using Revision.get_summary() to get the first line of a revision's log message instead of home brewn code.
86
        if column == MESSAGE: return escape(revision.get_summary())
292.1.1 by Daniel Schierbeck
Removed email address from committer column in the revision history window.
87
        if column == COMMITER: return re.sub('<.*@.*>', '', 
88
                                             revision.committer).strip(' ')
359 by Daniel Schierbeck
Simplified date format.
89
        if column == TIMESTAMP: 
90
            return strftime("%Y-%m-%d %H:%M", localtime(revision.timestamp))
91
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
92
    def on_iter_next(self, rowref):
93
        if rowref < len(self.line_graph_data) - 1:
94
            return rowref+1
95
        return None
96
    
97
    def on_iter_children(self, parent):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
98
        if parent is None: return 0
99
        return None
100
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
101
    def on_iter_has_child(self, rowref):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
102
        return False
103
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
104
    def on_iter_n_children(self, rowref):
105
        if rowref is None: return len(self.line_graph_data)
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
106
        return 0
107
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
108
    def on_iter_nth_child(self, parent, n):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
109
        if parent is None: return n
110
        return None
111
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
112
    def on_iter_parent(self, child):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
113
        return None