/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
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
30
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
31
class TreeModel(gtk.GenericTreeModel):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
32
33
    
328 by Jelmer Vernooij
Use repository instead of branch in more places, to make it easier to support multiple branches in viz.
34
    def __init__ (self, repository, line_graph_data):
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
35
        gtk.GenericTreeModel.__init__(self)
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
36
        self.revisions = {}
328 by Jelmer Vernooij
Use repository instead of branch in more places, to make it easier to support multiple branches in viz.
37
        self.repository = repository
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
38
        self.line_graph_data = line_graph_data
39
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
40
    def on_get_flags(self):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
41
        return gtk.TREE_MODEL_LIST_ONLY
42
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
43
    def on_get_n_columns(self):
423.4.2 by Daniel Schierbeck
Added a MESSAGE column to the tree model.
44
        return 12
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
45
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
46
    def on_get_column_type(self, index):
423.4.5 by Daniel Schierbeck
Fixed indendation issues.
47
        if index == REVID: return gobject.TYPE_STRING
48
        if index == NODE: return gobject.TYPE_PYOBJECT
49
        if index == LINES: return gobject.TYPE_PYOBJECT
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
50
        if index == LAST_LINES: return gobject.TYPE_PYOBJECT
423.4.5 by Daniel Schierbeck
Fixed indendation issues.
51
        if index == REVNO: return gobject.TYPE_STRING
52
        if index == SUMMARY: return gobject.TYPE_STRING
53
        if index == MESSAGE: return gobject.TYPE_STRING
54
        if index == COMMITTER: return gobject.TYPE_STRING
55
        if index == TIMESTAMP: return gobject.TYPE_STRING
56
        if index == REVISION: return gobject.TYPE_PYOBJECT
57
        if index == PARENTS: return gobject.TYPE_PYOBJECT
58
        if index == CHILDREN: return gobject.TYPE_PYOBJECT
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_iter(self, path):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
61
        return path[0]
62
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
63
    def on_get_path(self, rowref):
64
        return rowref
65
    
66
    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.
67
        if len(self.line_graph_data) > 0:
68
            (revid, node, lines, parents,
69
             children, revno_sequence) = self.line_graph_data[rowref]
70
        else:
71
            (revid, node, lines, parents,
72
             children, revno_sequence) = (None, (0, 0), (), (),
73
                                          (), ())
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
74
        if column == REVID: return revid
75
        if column == NODE: return node
76
        if column == LINES: return lines
77
        if column == PARENTS: return parents
78
        if column == CHILDREN: return children
79
        if column == LAST_LINES:
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
80
            if rowref>0:
81
                return self.line_graph_data[rowref-1][2]
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
82
            return []
83
        if column == REVNO: return ".".join(["%d" % (revno)
84
                                      for revno in revno_sequence])
85
        
421.1.1 by Gary van der Merwe
Make viz not throw errors when there are 0 commits.
86
        if revid is None:
87
            return None
256.2.41 by Gary van der Merwe
Revert GTKTreeModel on_ref_node implementation.
88
        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.
89
            revision = self.repository.get_revisions([revid])[0]
256.2.41 by Gary van der Merwe
Revert GTKTreeModel on_ref_node implementation.
90
            self.revisions[revid] = revision
91
        else:
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
92
            revision = self.revisions[revid]
256.2.41 by Gary van der Merwe
Revert GTKTreeModel on_ref_node implementation.
93
        
94
        if column == REVISION: return revision
423.4.1 by Daniel Schierbeck
Renamed the MESSAGE column to SUMMARY.
95
        if column == SUMMARY: return escape(revision.get_summary())
423.4.2 by Daniel Schierbeck
Added a MESSAGE column to the tree model.
96
        if column == MESSAGE: return escape(revision.message)
423.4.4 by Daniel Schierbeck
Renamed COMMITER column into the correct COMMITTER.
97
        if column == COMMITTER: return re.sub('<.*@.*>', '', 
292.1.1 by Daniel Schierbeck
Removed email address from committer column in the revision history window.
98
                                             revision.committer).strip(' ')
359 by Daniel Schierbeck
Simplified date format.
99
        if column == TIMESTAMP: 
100
            return strftime("%Y-%m-%d %H:%M", localtime(revision.timestamp))
101
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
102
    def on_iter_next(self, rowref):
103
        if rowref < len(self.line_graph_data) - 1:
104
            return rowref+1
105
        return None
106
    
107
    def on_iter_children(self, parent):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
108
        if parent is None: return 0
109
        return None
110
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
111
    def on_iter_has_child(self, rowref):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
112
        return False
113
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
114
    def on_iter_n_children(self, rowref):
115
        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.
116
        return 0
117
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
118
    def on_iter_nth_child(self, parent, n):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
119
        if parent is None: return n
120
        return None
121
    
256.2.36 by Gary van der Merwe
Revert back to GenericTreeModel and implement on_ref_node
122
    def on_iter_parent(self, child):
256.2.29 by Gary van der Merwe
Implement a TreeModel that loads revisions incrementaly.
123
        return None