/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: Jasper Groenewegen
  • Date: 2008-07-27 12:01:40 UTC
  • mfrom: (576.3.2 improve-merge)
  • mto: This revision was merged to the branch mainline in revision 579.
  • Revision ID: colbrac@xs4all.nl-20080727120140-1agdlzkc9fumjk5f
Merge merge dialog improvements

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_CLOSE, gtk.RESPONSE_CLOSE))
 
32
        self.set_title("Working tree changes")
 
33
        self.set_default_response(gtk.RESPONSE_CLOSE)
 
34
        self._create()
48
35
        self.wt = wt
49
36
        self.wtpath = wtpath
50
 
        
51
 
        # Check if current location is a branch
52
 
        file_id = self.wt.path2id(wtpath)
53
37
 
 
38
        if revision is None:
 
39
            revision = self.wt.branch.last_revision()
 
40
            
54
41
        # 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
 
        
 
42
        self.old_tree = self.wt.branch.repository.revision_tree(revision)
63
43
        # Generate status output
64
44
        self._generate_status()
65
45
 
 
46
    def _create(self):
 
47
        self.set_default_size(400, 300)
 
48
        self.set_has_separator(False)
 
49
        sw = gtk.ScrolledWindow()
 
50
        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
 
51
        sw.set_shadow_type(gtk.SHADOW_IN)
 
52
        self.treeview = gtk.TreeView()
 
53
        sw.add(self.treeview)
 
54
        self.vbox.pack_start(sw, True, True)
 
55
        self.vbox.show_all()
 
56
 
 
57
        # sane border and spacing widths (as recommended by GNOME HIG) 
 
58
        self.set_border_width(5)
 
59
        sw.set_border_width(5)
 
60
        self.vbox.set_spacing(2)
 
61
        self.action_area.set_border_width(5)
 
62
 
 
63
 
 
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()
 
70
        window.set_diff("Working tree changes", self.old_tree, self.wt)
 
71
        window.set_file(file)
 
72
        window.show()
 
73
 
 
74
 
66
75
    def _generate_status(self):
67
76
        """ Generate 'bzr status' output. """
68
77
        self.model = gtk.TreeStore(str, str)
69
 
        self.treeview = self.glade.get_widget('treeview_status')
 
78
        self.treeview.set_headers_visible(False)
70
79
        self.treeview.set_model(self.model)
 
80
        self.treeview.connect("row-activated", self.row_diff)
71
81
        
72
82
        cell = gtk.CellRendererText()
73
83
        cell.set_property("width-chars", 20)
82
92
        
83
93
        if len(delta.added):
84
94
            changes = True
85
 
            titer = self.model.append(None, [ _('Added'), None ])
 
95
            titer = self.model.append(None, [ _i18n('Added'), None ])
86
96
            for path, id, kind in delta.added:
87
97
                self.model.append(titer, [ path, path ])
88
98
 
89
99
        if len(delta.removed):
90
100
            changes = True
91
 
            titer = self.model.append(None, [ _('Removed'), None ])
 
101
            titer = self.model.append(None, [ _i18n('Removed'), None ])
92
102
            for path, id, kind in delta.removed:
93
103
                self.model.append(titer, [ path, path ])
94
104
 
95
105
        if len(delta.renamed):
96
106
            changes = True
97
 
            titer = self.model.append(None, [ _('Renamed'), None ])
 
107
            titer = self.model.append(None, [ _i18n('Renamed'), None ])
98
108
            for oldpath, newpath, id, kind, text_modified, meta_modified \
99
109
                    in delta.renamed:
100
110
                self.model.append(titer, [ oldpath, newpath ])
101
111
 
102
112
        if len(delta.modified):
103
113
            changes = True
104
 
            titer = self.model.append(None, [ _('Modified'), None ])
 
114
            titer = self.model.append(None, [ _i18n('Modified'), None ])
105
115
            for path, id, kind, text_modified, meta_modified in delta.modified:
106
116
                self.model.append(titer, [ path, path ])
107
117
        
109
119
        for path in self.wt.unknowns():
110
120
            changes = True
111
121
            if not done_unknown:
112
 
                titer = self.model.append(None, [ _('Unknown'), None ])
 
122
                titer = self.model.append(None, [ _i18n('Unknown'), None ])
113
123
                done_unknown = True
114
124
            self.model.append(titer, [ path, path ])
115
125
 
116
126
        if not changes:
117
 
            self.model.append(None, [ _('No changes.'), None ])
 
127
            self.model.append(None, [ _i18n('No changes.'), None ])
118
128
 
119
129
        self.treeview.expand_all()
120
130
    
121
 
    def display(self):
122
 
        """ Display the Diff window. """
123
 
        self.window.show_all()
124
 
 
125
131
    def close(self, widget=None):
126
132
        self.window.destroy()