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