/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
try:
18
    import pygtk
19
    pygtk.require("2.0")
20
except:
21
    pass
0.13.11 by Jelmer Vernooij
Bunch of small fixes, cleanups and simplifications.
22
23
import gtk
729.1.1 by Jelmer Vernooij
Move i18n support to a separate file, so gettext files aren't loaded unless bzr-gtk is used.
24
from bzrlib.plugins.gtk import window
25
from bzrlib.plugins.gtk.i18n import _i18n
614.1.1 by Vincent Ladeuil
Fix bug #131589 by using a gtk.Window instead of a gtk.Dialog.
26
27
28
class StatusWindow(window.Window):
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
29
    """ Display Status window and perform the needed actions. """
724 by Jelmer Vernooij
Fix formatting, imports.
30
463.1.1 by Javier Derderian
Added revision option to gstatus. Bug #136530
31
    def __init__(self, wt, wtpath, revision=None):
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
32
        """ Initialize the Status window. """
614.1.1 by Vincent Ladeuil
Fix bug #131589 by using a gtk.Window instead of a gtk.Dialog.
33
        super(StatusWindow, self).__init__()
156 by Jelmer Vernooij
Move status to the top-level, remove its use of glade and allow double-clicking on entries to get at the diff for a file.
34
        self.set_title("Working tree changes")
35
        self._create()
0.12.1 by Jelmer Vernooij
Don't use communicator for status.
36
        self.wt = wt
37
        self.wtpath = wtpath
531.1.1 by Vincent Geddes
Improved visual appeal of gstatus dialog.
38
463.1.1 by Javier Derderian
Added revision option to gstatus. Bug #136530
39
        if revision is None:
40
            revision = self.wt.branch.last_revision()
614.1.1 by Vincent Ladeuil
Fix bug #131589 by using a gtk.Window instead of a gtk.Dialog.
41
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
42
        # Set the old working tree
463.1.1 by Javier Derderian
Added revision option to gstatus. Bug #136530
43
        self.old_tree = self.wt.branch.repository.revision_tree(revision)
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
44
        # Generate status output
45
        self._generate_status()
46
156 by Jelmer Vernooij
Move status to the top-level, remove its use of glade and allow double-clicking on entries to get at the diff for a file.
47
    def _create(self):
48
        self.set_default_size(400, 300)
531.1.1 by Vincent Geddes
Improved visual appeal of gstatus dialog.
49
        sw = gtk.ScrolledWindow()
50
        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
51
        sw.set_shadow_type(gtk.SHADOW_IN)
156 by Jelmer Vernooij
Move status to the top-level, remove its use of glade and allow double-clicking on entries to get at the diff for a file.
52
        self.treeview = gtk.TreeView()
531.1.1 by Vincent Geddes
Improved visual appeal of gstatus dialog.
53
        sw.add(self.treeview)
614.1.1 by Vincent Ladeuil
Fix bug #131589 by using a gtk.Window instead of a gtk.Dialog.
54
        self.add(sw)
156 by Jelmer Vernooij
Move status to the top-level, remove its use of glade and allow double-clicking on entries to get at the diff for a file.
55
531.1.1 by Vincent Geddes
Improved visual appeal of gstatus dialog.
56
        # sane border and spacing widths (as recommended by GNOME HIG) 
57
        self.set_border_width(5)
58
        sw.set_border_width(5)
614.1.1 by Vincent Ladeuil
Fix bug #131589 by using a gtk.Window instead of a gtk.Dialog.
59
        self.show_all()
531.1.1 by Vincent Geddes
Improved visual appeal of gstatus dialog.
60
61
156 by Jelmer Vernooij
Move status to the top-level, remove its use of glade and allow double-clicking on entries to get at the diff for a file.
62
    def row_diff(self, tv, path, tvc):
63
        file = self.model[path][1]
64
        if file is None:
65
            return
66
        from bzrlib.plugins.gtk.diff import DiffWindow
67
        window = DiffWindow()
621.1.1 by Vincent Ladeuil
Fix bug #289220 by using the right parameter order.
68
        window.set_diff("Working tree changes", self.wt, self.old_tree)
156 by Jelmer Vernooij
Move status to the top-level, remove its use of glade and allow double-clicking on entries to get at the diff for a file.
69
        window.set_file(file)
70
        window.show()
71
531.1.1 by Vincent Geddes
Improved visual appeal of gstatus dialog.
72
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
73
    def _generate_status(self):
74
        """ Generate 'bzr status' output. """
75
        self.model = gtk.TreeStore(str, str)
156 by Jelmer Vernooij
Move status to the top-level, remove its use of glade and allow double-clicking on entries to get at the diff for a file.
76
        self.treeview.set_headers_visible(False)
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
77
        self.treeview.set_model(self.model)
156 by Jelmer Vernooij
Move status to the top-level, remove its use of glade and allow double-clicking on entries to get at the diff for a file.
78
        self.treeview.connect("row-activated", self.row_diff)
614.1.1 by Vincent Ladeuil
Fix bug #131589 by using a gtk.Window instead of a gtk.Dialog.
79
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
80
        cell = gtk.CellRendererText()
81
        cell.set_property("width-chars", 20)
82
        column = gtk.TreeViewColumn()
83
        column.pack_start(cell, expand=True)
84
        column.add_attribute(cell, "text", 0)
85
        self.treeview.append_column(column)
614.1.1 by Vincent Ladeuil
Fix bug #131589 by using a gtk.Window instead of a gtk.Dialog.
86
0.12.1 by Jelmer Vernooij
Don't use communicator for status.
87
        delta = self.wt.changes_from(self.old_tree)
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
88
0.8.80 by Szilveszter Farkas (Phanatic)
If the TreeView in the Status window would be empty, display a "No changes." message.
89
        changes = False
614.1.1 by Vincent Ladeuil
Fix bug #131589 by using a gtk.Window instead of a gtk.Dialog.
90
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
91
        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.
92
            changes = True
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
93
            titer = self.model.append(None, [ _i18n('Added'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
94
            for path, id, kind in delta.added:
95
                self.model.append(titer, [ path, path ])
96
97
        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.
98
            changes = True
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
99
            titer = self.model.append(None, [ _i18n('Removed'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
100
            for path, id, kind in delta.removed:
101
                self.model.append(titer, [ path, path ])
102
103
        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.
104
            changes = True
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
105
            titer = self.model.append(None, [ _i18n('Renamed'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
106
            for oldpath, newpath, id, kind, text_modified, meta_modified \
107
                    in delta.renamed:
108
                self.model.append(titer, [ oldpath, newpath ])
109
110
        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.
111
            changes = True
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
112
            titer = self.model.append(None, [ _i18n('Modified'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
113
            for path, id, kind, text_modified, meta_modified in delta.modified:
114
                self.model.append(titer, [ path, path ])
614.1.1 by Vincent Ladeuil
Fix bug #131589 by using a gtk.Window instead of a gtk.Dialog.
115
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
116
        done_unknown = False
117
        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.
118
            changes = True
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
119
            if not done_unknown:
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
120
                titer = self.model.append(None, [ _i18n('Unknown'), None ])
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
121
                done_unknown = True
122
            self.model.append(titer, [ path, path ])
123
0.8.80 by Szilveszter Farkas (Phanatic)
If the TreeView in the Status window would be empty, display a "No changes." message.
124
        if not changes:
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
125
            self.model.append(None, [ _i18n('No changes.'), None ])
0.8.80 by Szilveszter Farkas (Phanatic)
If the TreeView in the Status window would be empty, display a "No changes." message.
126
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
127
        self.treeview.expand_all()
614.1.1 by Vincent Ladeuil
Fix bug #131589 by using a gtk.Window instead of a gtk.Dialog.
128
0.8.29 by Szilveszter Farkas (Phanatic)
Implemented Status window; some code cleanups.
129
    def close(self, widget=None):
130
        self.window.destroy()