/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
0.13.11 by Jelmer Vernooij
Bunch of small fixes, cleanups and simplifications.
24
25
import gtk
26
import gtk.glade
27
import gobject
28
import pango
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
29
30
import bzrlib
0.8.35 by Szilveszter Farkas (Phanatic)
Fixed a small bug in the Status window.
31
import bzrlib.errors as errors
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
32
33
from bzrlib.status import show_tree_status
34
from bzrlib.workingtree import WorkingTree
35
36
from dialog import OliveDialog
37
0.13.10 by Jelmer Vernooij
Don't pass around gladefile all the time.
38
from olive import gladefile
39
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
40
class OliveStatus:
41
    """ Display Status window and perform the needed actions. """
0.13.6 by Jelmer Vernooij
Don't pass along dialog context everywhere.
42
    def __init__(self, gladefile, wt, wtpath):
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
43
        """ Initialize the Status window. """
0.13.10 by Jelmer Vernooij
Don't pass around gladefile all the time.
44
        self.glade = gtk.glade.XML(gladefile, 'window_status')
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
45
        
0.8.35 by Szilveszter Farkas (Phanatic)
Fixed a small bug in the Status window.
46
        # Get the Status window widget
47
        self.window = self.glade.get_widget('window_status')
0.12.1 by Jelmer Vernooij
Don't use communicator for status.
48
        self.wt = wt
49
        self.wtpath = wtpath
0.8.35 by Szilveszter Farkas (Phanatic)
Fixed a small bug in the Status window.
50
        
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
51
        # Check if current location is a branch
52
        try:
0.12.1 by Jelmer Vernooij
Don't use communicator for status.
53
            branch = wt.branch
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
54
        except errors.NotBranchError:
55
            self.notbranch = True
56
            return
57
        
0.12.1 by Jelmer Vernooij
Don't use communicator for status.
58
        file_id = self.wt.path2id(wtpath)
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
59
60
        self.notbranch = False
61
        if file_id is None:
62
            self.notbranch = True
63
            return
64
        
65
        # Set the old working tree
66
        self.old_tree = self.wt.branch.repository.revision_tree(self.wt.branch.last_revision())
67
        
68
        # Dictionary for signal_autoconnect
69
        dic = { "on_button_status_close_clicked": self.close }
70
        
71
        # Connect the signals to the handlers
72
        self.glade.signal_autoconnect(dic)
73
        
74
        # Generate status output
75
        self._generate_status()
76
77
    def _generate_status(self):
78
        """ Generate 'bzr status' output. """
79
        self.model = gtk.TreeStore(str, str)
80
        self.treeview = self.glade.get_widget('treeview_status')
81
        self.treeview.set_model(self.model)
82
        
83
        cell = gtk.CellRendererText()
84
        cell.set_property("width-chars", 20)
85
        column = gtk.TreeViewColumn()
86
        column.pack_start(cell, expand=True)
87
        column.add_attribute(cell, "text", 0)
88
        self.treeview.append_column(column)
89
        
0.12.1 by Jelmer Vernooij
Don't use communicator for status.
90
        delta = self.wt.changes_from(self.old_tree)
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
91
0.8.80 by Szilveszter Farkas (Phanatic)
If the TreeView in the Status window would be empty, display a "No changes." message.
92
        changes = False
93
        
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
94
        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.
95
            changes = True
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
96
            titer = self.model.append(None, [ _('Added'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
97
            for path, id, kind in delta.added:
98
                self.model.append(titer, [ path, path ])
99
100
        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.
101
            changes = True
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
102
            titer = self.model.append(None, [ _('Removed'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
103
            for path, id, kind in delta.removed:
104
                self.model.append(titer, [ path, path ])
105
106
        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.
107
            changes = True
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
108
            titer = self.model.append(None, [ _('Renamed'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
109
            for oldpath, newpath, id, kind, text_modified, meta_modified \
110
                    in delta.renamed:
111
                self.model.append(titer, [ oldpath, newpath ])
112
113
        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.
114
            changes = True
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
115
            titer = self.model.append(None, [ _('Modified'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
116
            for path, id, kind, text_modified, meta_modified in delta.modified:
117
                self.model.append(titer, [ path, path ])
118
        
119
        done_unknown = False
120
        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.
121
            changes = True
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
122
            if not done_unknown:
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
123
                titer = self.model.append(None, [ _('Unknown'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
124
                done_unknown = True
125
            self.model.append(titer, [ path, path ])
126
0.8.80 by Szilveszter Farkas (Phanatic)
If the TreeView in the Status window would be empty, display a "No changes." message.
127
        if not changes:
128
            self.model.append(None, [ _('No changes.'), None ])
129
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
130
        self.treeview.expand_all()
131
    
132
    def display(self):
133
        """ Display the Diff window. """
134
        if self.notbranch:
0.13.6 by Jelmer Vernooij
Don't pass along dialog context everywhere.
135
            error_dialog(_('Directory is not a branch'),
0.8.55 by Szilveszter Farkas (Phanatic)
Gettext support added.
136
                                     _('You can perform this action only in a branch.'))
0.8.35 by Szilveszter Farkas (Phanatic)
Fixed a small bug in the Status window.
137
            self.close()
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
138
        else:
139
            self.window.show_all()
140
141
    def close(self, widget=None):
142
        self.window.destroy()