/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
import sys
18
19
try:
20
    import pygtk
21
    pygtk.require("2.0")
22
except:
23
    pass
24
try:
25
    import gtk
26
    import gtk.glade
27
    import gobject
28
    import pango
29
except:
30
    sys.exit(1)
31
32
import bzrlib
0.8.35 by Szilveszter Farkas (Phanatic)
Fixed a small bug in the Status window.
33
import bzrlib.errors as errors
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
34
35
from bzrlib.status import show_tree_status
36
from bzrlib.workingtree import WorkingTree
37
38
from dialog import OliveDialog
39
0.13.10 by Jelmer Vernooij
Don't pass around gladefile all the time.
40
from olive import gladefile
41
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
42
class OliveStatus:
43
    """ Display Status window and perform the needed actions. """
0.13.6 by Jelmer Vernooij
Don't pass along dialog context everywhere.
44
    def __init__(self, gladefile, wt, wtpath):
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
45
        """ Initialize the Status window. """
0.13.10 by Jelmer Vernooij
Don't pass around gladefile all the time.
46
        self.glade = gtk.glade.XML(gladefile, 'window_status')
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
47
        
0.8.35 by Szilveszter Farkas (Phanatic)
Fixed a small bug in the Status window.
48
        # Get the Status window widget
49
        self.window = self.glade.get_widget('window_status')
0.12.1 by Jelmer Vernooij
Don't use communicator for status.
50
        self.wt = wt
51
        self.wtpath = wtpath
0.8.35 by Szilveszter Farkas (Phanatic)
Fixed a small bug in the Status window.
52
        
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
53
        # Check if current location is a branch
54
        try:
0.12.1 by Jelmer Vernooij
Don't use communicator for status.
55
            branch = wt.branch
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
56
        except errors.NotBranchError:
57
            self.notbranch = True
58
            return
59
        except:
60
            raise
61
        
0.12.1 by Jelmer Vernooij
Don't use communicator for status.
62
        file_id = self.wt.path2id(wtpath)
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
63
64
        self.notbranch = False
65
        if file_id is None:
66
            self.notbranch = True
67
            return
68
        
69
        # Set the old working tree
70
        self.old_tree = self.wt.branch.repository.revision_tree(self.wt.branch.last_revision())
71
        
72
        # Dictionary for signal_autoconnect
73
        dic = { "on_button_status_close_clicked": self.close }
74
        
75
        # Connect the signals to the handlers
76
        self.glade.signal_autoconnect(dic)
77
        
78
        # Generate status output
79
        self._generate_status()
80
81
    def _generate_status(self):
82
        """ Generate 'bzr status' output. """
83
        self.model = gtk.TreeStore(str, str)
84
        self.treeview = self.glade.get_widget('treeview_status')
85
        self.treeview.set_model(self.model)
86
        
87
        cell = gtk.CellRendererText()
88
        cell.set_property("width-chars", 20)
89
        column = gtk.TreeViewColumn()
90
        column.pack_start(cell, expand=True)
91
        column.add_attribute(cell, "text", 0)
92
        self.treeview.append_column(column)
93
        
0.12.1 by Jelmer Vernooij
Don't use communicator for status.
94
        delta = self.wt.changes_from(self.old_tree)
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
95
0.8.80 by Szilveszter Farkas (Phanatic)
If the TreeView in the Status window would be empty, display a "No changes." message.
96
        changes = False
97
        
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
98
        if len(delta.added):
0.8.80 by Szilveszter Farkas (Phanatic)
If the TreeView in the Status window would be empty, display a "No changes." message.
99
            changes = True
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
100
            titer = self.model.append(None, [ _('Added'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
101
            for path, id, kind in delta.added:
102
                self.model.append(titer, [ path, path ])
103
104
        if len(delta.removed):
0.8.80 by Szilveszter Farkas (Phanatic)
If the TreeView in the Status window would be empty, display a "No changes." message.
105
            changes = True
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
106
            titer = self.model.append(None, [ _('Removed'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
107
            for path, id, kind in delta.removed:
108
                self.model.append(titer, [ path, path ])
109
110
        if len(delta.renamed):
0.8.80 by Szilveszter Farkas (Phanatic)
If the TreeView in the Status window would be empty, display a "No changes." message.
111
            changes = True
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
112
            titer = self.model.append(None, [ _('Renamed'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
113
            for oldpath, newpath, id, kind, text_modified, meta_modified \
114
                    in delta.renamed:
115
                self.model.append(titer, [ oldpath, newpath ])
116
117
        if len(delta.modified):
0.8.80 by Szilveszter Farkas (Phanatic)
If the TreeView in the Status window would be empty, display a "No changes." message.
118
            changes = True
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
119
            titer = self.model.append(None, [ _('Modified'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
120
            for path, id, kind, text_modified, meta_modified in delta.modified:
121
                self.model.append(titer, [ path, path ])
122
        
123
        done_unknown = False
124
        for path in self.wt.unknowns():
0.8.80 by Szilveszter Farkas (Phanatic)
If the TreeView in the Status window would be empty, display a "No changes." message.
125
            changes = True
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
126
            if not done_unknown:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
127
                titer = self.model.append(None, [ _('Unknown'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
128
                done_unknown = True
129
            self.model.append(titer, [ path, path ])
130
0.8.80 by Szilveszter Farkas (Phanatic)
If the TreeView in the Status window would be empty, display a "No changes." message.
131
        if not changes:
132
            self.model.append(None, [ _('No changes.'), None ])
133
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
134
        self.treeview.expand_all()
135
    
136
    def display(self):
137
        """ Display the Diff window. """
138
        if self.notbranch:
0.13.6 by Jelmer Vernooij
Don't pass along dialog context everywhere.
139
            error_dialog(_('Directory is not a branch'),
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
140
                                     _('You can perform this action only in a branch.'))
0.8.35 by Szilveszter Farkas (Phanatic)
Fixed a small bug in the Status window.
141
            self.close()
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
142
        else:
143
            self.window.show_all()
144
145
    def close(self, widget=None):
146
        self.window.destroy()