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