/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
423.4.6 by Daniel Schierbeck
Removed unnecessary spaces.
18
REVID = 0
19
NODE = 1
20
LINES = 2
21
LAST_LINES = 3
22
REVNO = 4
23
SUMMARY = 5
24
MESSAGE = 6
25
COMMITTER = 7
26
TIMESTAMP = 8
27
REVISION = 9
423.4.5 by Daniel Schierbeck
Fixed indendation issues.
28
PARENTS = 10
29
CHILDREN = 11
423.5.10 by Daniel Schierbeck
Merged with trunk.
30
TAGS = 12
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
31
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
32
class TreeModel(gtk.GenericTreeModel):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
33
34
    
423.5.1 by Ali Sabil
Added tags visualization in the graph
35
    def __init__ (self, branch, line_graph_data):
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
36
        gtk.GenericTreeModel.__init__(self)
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
37
        self.revisions = {}
423.5.10 by Daniel Schierbeck
Merged with trunk.
38
	self.branch = branch
423.5.1 by Ali Sabil
Added tags visualization in the graph
39
        self.repository = branch.repository
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
40
        self.line_graph_data = line_graph_data
423.5.10 by Daniel Schierbeck
Merged with trunk.
41
42
    	if self.branch.supports_tags():
43
            self.tags = self.branch.tags.get_reverse_tag_dict()
44
        else:
45
            self.tags = {}
423.7.6 by Daniel Schierbeck
Merged with trunk.
46
47
    def add_tag(self, tag, revid):
48
        self.branch.tags.set_tag(tag, revid)
49
        try:
50
            self.tags[revid].append(tag)
51
        except KeyError:
52
            self.tags[revid] = [tag]
53
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
54
    def on_get_flags(self):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
55
        return gtk.TREE_MODEL_LIST_ONLY
56
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
57
    def on_get_n_columns(self):
423.5.10 by Daniel Schierbeck
Merged with trunk.
58
        return 13
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
59
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
60
    def on_get_column_type(self, index):
423.4.5 by Daniel Schierbeck
Fixed indendation issues.
61
        if index == REVID: return gobject.TYPE_STRING
62
        if index == NODE: return gobject.TYPE_PYOBJECT
63
        if index == LINES: return gobject.TYPE_PYOBJECT
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
64
        if index == LAST_LINES: return gobject.TYPE_PYOBJECT
423.4.5 by Daniel Schierbeck
Fixed indendation issues.
65
        if index == REVNO: return gobject.TYPE_STRING
66
        if index == SUMMARY: return gobject.TYPE_STRING
67
        if index == MESSAGE: return gobject.TYPE_STRING
68
        if index == COMMITTER: return gobject.TYPE_STRING
69
        if index == TIMESTAMP: return gobject.TYPE_STRING
70
        if index == REVISION: return gobject.TYPE_PYOBJECT
71
        if index == PARENTS: return gobject.TYPE_PYOBJECT
72
        if index == CHILDREN: return gobject.TYPE_PYOBJECT
423.5.1 by Ali Sabil
Added tags visualization in the graph
73
        if index == TAGS: return gobject.TYPE_PYOBJECT
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
74
        
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
75
    def on_get_iter(self, path):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
76
        return path[0]
77
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
78
    def on_get_path(self, rowref):
79
        return rowref
80
    
81
    def on_get_value(self, rowref, column):
421.1.1 by Gary van der Merwe
Make viz not throw errors when there are 0 commits.
82
        if len(self.line_graph_data) > 0:
83
            (revid, node, lines, parents,
84
             children, revno_sequence) = self.line_graph_data[rowref]
85
        else:
86
            (revid, node, lines, parents,
87
             children, revno_sequence) = (None, (0, 0), (), (),
88
                                          (), ())
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
89
        if column == REVID: return revid
90
        if column == NODE: return node
91
        if column == LINES: return lines
92
        if column == PARENTS: return parents
93
        if column == CHILDREN: return children
94
        if column == LAST_LINES:
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
95
            if rowref>0:
96
                return self.line_graph_data[rowref-1][2]
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
97
            return []
98
        if column == REVNO: return ".".join(["%d" % (revno)
99
                                      for revno in revno_sequence])
423.7.6 by Daniel Schierbeck
Merged with trunk.
100
423.5.10 by Daniel Schierbeck
Merged with trunk.
101
        if column == TAGS: return self.tags.get(revid, [])
423.5.1 by Ali Sabil
Added tags visualization in the graph
102
421.1.1 by Gary van der Merwe
Make viz not throw errors when there are 0 commits.
103
        if revid is None:
104
            return None
256.2.41 by Gary van der Merwe
Revert GTKTreeModel on_ref_node implementation.
105
        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.
106
            revision = self.repository.get_revisions([revid])[0]
256.2.41 by Gary van der Merwe
Revert GTKTreeModel on_ref_node implementation.
107
            self.revisions[revid] = revision
108
        else:
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
109
            revision = self.revisions[revid]
256.2.41 by Gary van der Merwe
Revert GTKTreeModel on_ref_node implementation.
110
        
111
        if column == REVISION: return revision
423.4.1 by Daniel Schierbeck
Renamed the MESSAGE column to SUMMARY.
112
        if column == SUMMARY: return escape(revision.get_summary())
423.4.2 by Daniel Schierbeck
Added a MESSAGE column to the tree model.
113
        if column == MESSAGE: return escape(revision.message)
423.4.4 by Daniel Schierbeck
Renamed COMMITER column into the correct COMMITTER.
114
        if column == COMMITTER: return re.sub('<.*@.*>', '', 
292.1.1 by Daniel Schierbeck
Removed email address from committer column in the revision history window.
115
                                             revision.committer).strip(' ')
359 by Daniel Schierbeck
Simplified date format.
116
        if column == TIMESTAMP: 
117
            return strftime("%Y-%m-%d %H:%M", localtime(revision.timestamp))
118
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
119
    def on_iter_next(self, rowref):
120
        if rowref < len(self.line_graph_data) - 1:
121
            return rowref+1
122
        return None
123
    
124
    def on_iter_children(self, parent):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
125
        if parent is None: return 0
126
        return None
127
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
128
    def on_iter_has_child(self, rowref):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
129
        return False
130
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
131
    def on_iter_n_children(self, rowref):
132
        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.
133
        return 0
134
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
135
    def on_iter_nth_child(self, parent, n):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
136
        if parent is None: return n
137
        return None
138
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
139
    def on_iter_parent(self, child):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
140
        return None