/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
226 by Jelmer Vernooij
Add context menu in bzrk.
1
# Copyright (C) 2007 by Jelmer Vernooij <jelmer@samba.org>
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
"""Simple popup menu for revisions."""
17
18
try:
19
    import pygtk
20
    pygtk.require("2.0")
21
except:
22
    pass
23
24
import bzrlib
25
import gtk
26
27
class RevisionPopupMenu(gtk.Menu):
230 by Jelmer Vernooij
Initial work towards supporting multiple revisions.
28
    def __init__(self, repository, revids, branch=None):
226 by Jelmer Vernooij
Add context menu in bzrk.
29
        super(RevisionPopupMenu, self).__init__()
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
30
        self.branch = branch
226 by Jelmer Vernooij
Add context menu in bzrk.
31
        self.repository = repository
230 by Jelmer Vernooij
Initial work towards supporting multiple revisions.
32
        self.revids = revids
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
33
        self.create_items()
226 by Jelmer Vernooij
Add context menu in bzrk.
34
35
    def create_items(self):
230 by Jelmer Vernooij
Initial work towards supporting multiple revisions.
36
        if len(self.revids) == 1:
37
            item = gtk.MenuItem("View _Diff")
38
            item.connect('activate', self.show_diff)
39
            self.append(item)
40
            self.show_all()
41
42
            item = gtk.MenuItem("_Push")
43
            item.connect('activate', self.show_push)
44
            self.append(item)
45
            self.show_all()
226 by Jelmer Vernooij
Add context menu in bzrk.
46
232 by Jelmer Vernooij
Make 'Add tag' dialog accessible from bzrk.
47
            item = gtk.MenuItem("_Tag Revision")
48
            item.connect('activate', self.show_tag)
49
            self.append(item)
50
            self.show_all()
51
226 by Jelmer Vernooij
Add context menu in bzrk.
52
    def show_diff(self, item):
53
        from bzrlib.plugins.gtk.diff import DiffWindow
54
        window = DiffWindow()
230 by Jelmer Vernooij
Initial work towards supporting multiple revisions.
55
        parentid = self.repository.revision_parents(self.revids[0])[0]
56
        (parent_tree, rev_tree) = self.repository.revision_trees(
57
            [parentid, self.revids[0]])
58
        window.set_diff(self.revids[0], rev_tree, parent_tree)
226 by Jelmer Vernooij
Add context menu in bzrk.
59
        window.show()
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
60
61
    def show_push(self, item):
62
        from bzrlib.plugins.gtk.push import PushDialog
230 by Jelmer Vernooij
Initial work towards supporting multiple revisions.
63
        dialog = PushDialog(self.repository, self.revids[0], self.branch)
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
64
        dialog.run()
232 by Jelmer Vernooij
Make 'Add tag' dialog accessible from bzrk.
65
66
    def show_tag(self, item):
67
        from bzrlib.plugins.gtk.tags import AddTagDialog
68
        dialog = AddTagDialog(self.repository, self.revids[0], self.branch)
69
        response = dialog.run()
70
        if response != gtk.RESPONSE_NONE:
71
            dialog.hide()
72
        
73
            if response == gtk.RESPONSE_OK:
74
                self.branch.lock_write()
75
                self.branch.tags.set_tag(dialog.tagname, dialog._revid)
76
                self.branch.unlock()
77
            
78
            dialog.destroy()