/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: Jelmer Vernooij
  • Date: 2008-06-29 19:18:34 UTC
  • mto: This revision was merged to the branch mainline in revision 515.
  • Revision ID: jelmer@samba.org-20080629191834-ha2ecpv5szt96nge
Make sure signed testament matches repository data.

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")
23
21
    pass
24
22
 
25
23
import gtk
26
 
import gtk.glade
27
 
import gobject
28
 
import pango
29
 
 
30
 
import bzrlib
31
 
import bzrlib.errors as errors
32
 
 
33
 
from bzrlib.status import show_tree_status
34
 
from bzrlib.workingtree import WorkingTree
35
 
 
36
 
from dialog import error_dialog
37
 
 
38
 
from olive import gladefile
39
 
 
40
 
class OliveStatus:
 
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, wt, wtpath):
 
29
    def __init__(self, wt, wtpath, revision=None):
43
30
        """ Initialize the Status window. """
44
 
        self.glade = gtk.glade.XML(gladefile, 'window_status')
45
 
        
46
 
        # Get the Status window widget
47
 
        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()
48
34
        self.wt = wt
49
35
        self.wtpath = wtpath
50
36
        
51
 
        # Check if current location is a branch
52
 
        file_id = self.wt.path2id(wtpath)
53
 
 
 
37
        if revision is None:
 
38
            revision = self.wt.branch.last_revision()
 
39
            
54
40
        # Set the old working tree
55
 
        self.old_tree = self.wt.branch.repository.revision_tree(self.wt.branch.last_revision())
56
 
        
57
 
        # Dictionary for signal_autoconnect
58
 
        dic = { "on_button_status_close_clicked": self.close }
59
 
        
60
 
        # Connect the signals to the handlers
61
 
        self.glade.signal_autoconnect(dic)
62
 
        
 
41
        self.old_tree = self.wt.branch.repository.revision_tree(revision)
63
42
        # Generate status output
64
43
        self._generate_status()
65
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
 
66
64
    def _generate_status(self):
67
65
        """ Generate 'bzr status' output. """
68
66
        self.model = gtk.TreeStore(str, str)
69
 
        self.treeview = self.glade.get_widget('treeview_status')
 
67
        self.treeview.set_headers_visible(False)
70
68
        self.treeview.set_model(self.model)
 
69
        self.treeview.connect("row-activated", self.row_diff)
71
70
        
72
71
        cell = gtk.CellRendererText()
73
72
        cell.set_property("width-chars", 20)
82
81
        
83
82
        if len(delta.added):
84
83
            changes = True
85
 
            titer = self.model.append(None, [ _('Added'), None ])
 
84
            titer = self.model.append(None, [ _i18n('Added'), None ])
86
85
            for path, id, kind in delta.added:
87
86
                self.model.append(titer, [ path, path ])
88
87
 
89
88
        if len(delta.removed):
90
89
            changes = True
91
 
            titer = self.model.append(None, [ _('Removed'), None ])
 
90
            titer = self.model.append(None, [ _i18n('Removed'), None ])
92
91
            for path, id, kind in delta.removed:
93
92
                self.model.append(titer, [ path, path ])
94
93
 
95
94
        if len(delta.renamed):
96
95
            changes = True
97
 
            titer = self.model.append(None, [ _('Renamed'), None ])
 
96
            titer = self.model.append(None, [ _i18n('Renamed'), None ])
98
97
            for oldpath, newpath, id, kind, text_modified, meta_modified \
99
98
                    in delta.renamed:
100
99
                self.model.append(titer, [ oldpath, newpath ])
101
100
 
102
101
        if len(delta.modified):
103
102
            changes = True
104
 
            titer = self.model.append(None, [ _('Modified'), None ])
 
103
            titer = self.model.append(None, [ _i18n('Modified'), None ])
105
104
            for path, id, kind, text_modified, meta_modified in delta.modified:
106
105
                self.model.append(titer, [ path, path ])
107
106
        
109
108
        for path in self.wt.unknowns():
110
109
            changes = True
111
110
            if not done_unknown:
112
 
                titer = self.model.append(None, [ _('Unknown'), None ])
 
111
                titer = self.model.append(None, [ _i18n('Unknown'), None ])
113
112
                done_unknown = True
114
113
            self.model.append(titer, [ path, path ])
115
114
 
116
115
        if not changes:
117
 
            self.model.append(None, [ _('No changes.'), None ])
 
116
            self.model.append(None, [ _i18n('No changes.'), None ])
118
117
 
119
118
        self.treeview.expand_all()
120
119
    
121
 
    def display(self):
122
 
        """ Display the Diff window. """
123
 
        self.window.show_all()
124
 
 
125
120
    def close(self, widget=None):
126
121
        self.window.destroy()