/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to status.py

  • Committer: Vincent Ladeuil
  • Date: 2008-06-10 15:25:47 UTC
  • mto: This revision was merged to the branch mainline in revision 504.
  • Revision ID: v.ladeuil+lp@free.fr-20080610152547-dwmil1p8pd0mfpnl
Fix third failing test (thanks to jam).

* tests/test_commit.py:
(TestPendingRevisions.test_pending_revisions_multi_merge): Fix
provided by jam: bzr we now filter the pending merges so that only
the 'heads()' are included. We just ensure that the pending merges
contain the unique tips for the ancestries.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
 
import sys
18
 
 
19
17
try:
20
18
    import pygtk
21
19
    pygtk.require("2.0")
22
20
except:
23
21
    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
33
 
import bzrlib.errors as errors
34
 
 
35
 
from bzrlib.status import show_tree_status
36
 
from bzrlib.workingtree import WorkingTree
37
 
 
38
 
from dialog import OliveDialog
39
 
 
40
 
class OliveStatus:
 
22
 
 
23
import gtk
 
24
from bzrlib.plugins.gtk import _i18n
 
25
 
 
26
 
 
27
class StatusDialog(gtk.Dialog):
41
28
    """ Display Status window and perform the needed actions. """
42
 
    def __init__(self, gladefile, wt, wtpath):
 
29
    def __init__(self, wt, wtpath, revision=None):
43
30
        """ Initialize the Status window. """
44
 
        self.gladefile = gladefile
45
 
        self.glade = gtk.glade.XML(self.gladefile, 'window_status')
46
 
        
47
 
        # Get the Status window widget
48
 
        self.window = self.glade.get_widget('window_status')
 
31
        super(StatusDialog, self).__init__(flags=gtk.DIALOG_MODAL, buttons=(gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
 
32
        self.set_title("Working tree changes")
 
33
        self._create()
49
34
        self.wt = wt
50
35
        self.wtpath = wtpath
51
36
        
52
 
        # Check if current location is a branch
53
 
        try:
54
 
            branch = wt.branch
55
 
        except errors.NotBranchError:
56
 
            self.notbranch = True
57
 
            return
58
 
        except:
59
 
            raise
60
 
        
61
 
        file_id = self.wt.path2id(wtpath)
62
 
 
63
 
        self.notbranch = False
64
 
        if file_id is None:
65
 
            self.notbranch = True
66
 
            return
67
 
        
 
37
        if revision is None:
 
38
            revision = self.wt.branch.last_revision()
 
39
            
68
40
        # Set the old working tree
69
 
        self.old_tree = self.wt.branch.repository.revision_tree(self.wt.branch.last_revision())
70
 
        
71
 
        # Dictionary for signal_autoconnect
72
 
        dic = { "on_button_status_close_clicked": self.close }
73
 
        
74
 
        # Connect the signals to the handlers
75
 
        self.glade.signal_autoconnect(dic)
76
 
        
 
41
        self.old_tree = self.wt.branch.repository.revision_tree(revision)
77
42
        # Generate status output
78
43
        self._generate_status()
79
44
 
 
45
    def _create(self):
 
46
        self.set_default_size(400, 300)
 
47
        scrolledwindow = gtk.ScrolledWindow()
 
48
        scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
 
49
        self.treeview = gtk.TreeView()
 
50
        scrolledwindow.add(self.treeview)
 
51
        self.vbox.pack_start(scrolledwindow, True, True)
 
52
        self.vbox.show_all()
 
53
 
 
54
    def row_diff(self, tv, path, tvc):
 
55
        file = self.model[path][1]
 
56
        if file is None:
 
57
            return
 
58
        from bzrlib.plugins.gtk.diff import DiffWindow
 
59
        window = DiffWindow()
 
60
        window.set_diff("Working tree changes", self.old_tree, self.wt)
 
61
        window.set_file(file)
 
62
        window.show()
 
63
 
80
64
    def _generate_status(self):
81
65
        """ Generate 'bzr status' output. """
82
66
        self.model = gtk.TreeStore(str, str)
83
 
        self.treeview = self.glade.get_widget('treeview_status')
 
67
        self.treeview.set_headers_visible(False)
84
68
        self.treeview.set_model(self.model)
 
69
        self.treeview.connect("row-activated", self.row_diff)
85
70
        
86
71
        cell = gtk.CellRendererText()
87
72
        cell.set_property("width-chars", 20)
96
81
        
97
82
        if len(delta.added):
98
83
            changes = True
99
 
            titer = self.model.append(None, [ _('Added'), None ])
 
84
            titer = self.model.append(None, [ _i18n('Added'), None ])
100
85
            for path, id, kind in delta.added:
101
86
                self.model.append(titer, [ path, path ])
102
87
 
103
88
        if len(delta.removed):
104
89
            changes = True
105
 
            titer = self.model.append(None, [ _('Removed'), None ])
 
90
            titer = self.model.append(None, [ _i18n('Removed'), None ])
106
91
            for path, id, kind in delta.removed:
107
92
                self.model.append(titer, [ path, path ])
108
93
 
109
94
        if len(delta.renamed):
110
95
            changes = True
111
 
            titer = self.model.append(None, [ _('Renamed'), None ])
 
96
            titer = self.model.append(None, [ _i18n('Renamed'), None ])
112
97
            for oldpath, newpath, id, kind, text_modified, meta_modified \
113
98
                    in delta.renamed:
114
99
                self.model.append(titer, [ oldpath, newpath ])
115
100
 
116
101
        if len(delta.modified):
117
102
            changes = True
118
 
            titer = self.model.append(None, [ _('Modified'), None ])
 
103
            titer = self.model.append(None, [ _i18n('Modified'), None ])
119
104
            for path, id, kind, text_modified, meta_modified in delta.modified:
120
105
                self.model.append(titer, [ path, path ])
121
106
        
123
108
        for path in self.wt.unknowns():
124
109
            changes = True
125
110
            if not done_unknown:
126
 
                titer = self.model.append(None, [ _('Unknown'), None ])
 
111
                titer = self.model.append(None, [ _i18n('Unknown'), None ])
127
112
                done_unknown = True
128
113
            self.model.append(titer, [ path, path ])
129
114
 
130
115
        if not changes:
131
 
            self.model.append(None, [ _('No changes.'), None ])
 
116
            self.model.append(None, [ _i18n('No changes.'), None ])
132
117
 
133
118
        self.treeview.expand_all()
134
119
    
135
 
    def display(self):
136
 
        """ Display the Diff window. """
137
 
        if self.notbranch:
138
 
            error_dialog(_('Directory is not a branch'),
139
 
                                     _('You can perform this action only in a branch.'))
140
 
            self.close()
141
 
        else:
142
 
            self.window.show_all()
143
 
 
144
120
    def close(self, widget=None):
145
121
        self.window.destroy()