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