/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 revisionmenu.py

  • Committer: Adeodato Simó
  • Date: 2007-07-31 17:11:00 UTC
  • mto: This revision was merged to the branch mainline in revision 254.
  • Revision ID: dato@net.com.org.es-20070731171100-vemdarhv8371motq
Use subprocess.Popen() instead of os.system().

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
"""Simple popup menu for revisions."""
17
17
 
18
 
from gi.repository import Gtk
19
 
from gi.repository import GObject
20
 
from bzrlib import ui
21
 
from bzrlib.revision import NULL_REVISION
22
 
 
23
 
class RevisionMenu(Gtk.Menu):
24
 
 
25
 
    __gsignals__ = {
26
 
            'tag-added': (
27
 
                GObject.SignalFlags.RUN_FIRST,
28
 
                None,
29
 
                (GObject.TYPE_STRING, GObject.TYPE_STRING)
30
 
            )
31
 
    }
32
 
 
33
 
    def __init__(self, repository, revids, branch=None, wt=None, parent=None):
34
 
        super(RevisionMenu, self).__init__()
35
 
        self._parent = parent
 
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):
 
28
    def __init__(self, repository, revids, branch=None):
 
29
        super(RevisionPopupMenu, self).__init__()
36
30
        self.branch = branch
37
31
        self.repository = repository
38
 
        self.wt = wt
39
 
        self.set_revision_ids(revids)
40
 
 
41
 
    def set_revision_ids(self, revids):
42
 
        assert isinstance(revids, list)
43
 
        for c in self.get_children():
44
 
            self.remove(c)
45
32
        self.revids = revids
46
33
        self.create_items()
47
34
 
48
35
    def create_items(self):
49
36
        if len(self.revids) == 1:
50
 
            item = Gtk.MenuItem.new_with_mnemonic("View _Changes")
 
37
            item = gtk.MenuItem("View _Diff")
51
38
            item.connect('activate', self.show_diff)
52
39
            self.append(item)
 
40
            self.show_all()
53
41
 
54
 
            item = Gtk.MenuItem.new_with_mnemonic("_Push")
 
42
            item = gtk.MenuItem("_Push")
55
43
            item.connect('activate', self.show_push)
56
44
            self.append(item)
 
45
            self.show_all()
57
46
 
58
 
            item = Gtk.MenuItem.new_with_mnemonic("_Tag Revision")
 
47
            item = gtk.MenuItem("_Tag Revision")
59
48
            item.connect('activate', self.show_tag)
60
49
            self.append(item)
61
 
 
62
 
            item = Gtk.MenuItem.new_with_mnemonic("_Merge Directive")
63
 
            item.connect('activate', self.store_merge_directive)
64
 
            # FIXME: self.append(item)
65
 
 
66
 
            item = Gtk.MenuItem.new_with_mnemonic("_Send Merge Directive")
67
 
            item.connect('activate', self.send_merge_directive)
68
 
            self.append(item)
69
 
 
70
 
            if self.wt:
71
 
                item = Gtk.MenuItem.new_with_mnemonic(
72
 
                    "_Revert to this revision")
73
 
                item.connect('activate', self.revert)
74
 
                self.append(item)
75
 
 
76
 
        self.show_all()
77
 
 
78
 
    def store_merge_directive(self, item):
79
 
        from bzrlib.plugins.gtk.mergedirective import CreateMergeDirectiveDialog
80
 
        window = CreateMergeDirectiveDialog(self.branch, self.revids[0])
81
 
        window.show()
82
 
 
83
 
    def send_merge_directive(self, item):
84
 
        from bzrlib.plugins.gtk.mergedirective import SendMergeDirectiveDialog
85
 
        from cStringIO import StringIO
86
 
        window = SendMergeDirectiveDialog(self.branch, self.revids[0])
87
 
        if window.run() == Gtk.ResponseType.OK:
88
 
            outf = StringIO()
89
 
            outf.writelines(window.get_merge_directive().to_lines())
90
 
            mail_client = self.branch.get_config().get_mail_client()
91
 
            mail_client.compose_merge_request(window.get_mail_to(), "[MERGE]",
92
 
                                              outf.getvalue())
93
 
        window.destroy()
 
50
            self.show_all()
94
51
 
95
52
    def show_diff(self, item):
96
53
        from bzrlib.plugins.gtk.diff import DiffWindow
97
 
        window = DiffWindow(parent=self._parent)
98
 
        parentids = self.repository.get_revision(self.revids[0]).parent_ids
99
 
        if len(parentids) == 0:
100
 
            parentid = NULL_REVISION
101
 
        else:
102
 
            parentid = parentids[0]
103
 
        rev_tree    = self.repository.revision_tree(self.revids[0])
104
 
        parent_tree = self.repository.revision_tree(parentid)
 
54
        window = DiffWindow()
 
55
        parentid = self.repository.revision_parents(self.revids[0])[0]
 
56
        (parent_tree, rev_tree) = self.repository.revision_trees(
 
57
            [parentid, self.revids[0]])
105
58
        window.set_diff(self.revids[0], rev_tree, parent_tree)
106
59
        window.show()
107
60
 
108
61
    def show_push(self, item):
109
62
        from bzrlib.plugins.gtk.push import PushDialog
110
63
        dialog = PushDialog(self.repository, self.revids[0], self.branch)
111
 
        response = dialog.run()
112
 
 
113
 
        if response != Gtk.ResponseType.NONE:
114
 
            dialog.destroy()
 
64
        dialog.run()
115
65
 
116
66
    def show_tag(self, item):
117
67
        from bzrlib.plugins.gtk.tags import AddTagDialog
118
68
        dialog = AddTagDialog(self.repository, self.revids[0], self.branch)
119
69
        response = dialog.run()
120
 
 
121
 
        if response != Gtk.ResponseType.NONE:
 
70
        if response != gtk.RESPONSE_NONE:
122
71
            dialog.hide()
123
 
 
124
 
            if response == Gtk.ResponseType.OK:
125
 
                self.emit('tag-added', dialog.tagname, dialog._revid)
126
 
 
 
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
            
127
78
            dialog.destroy()
128
 
 
129
 
    def revert(self, item):
130
 
        pb = ui.ui_factory.nested_progress_bar()
131
 
        revision_tree = self.branch.repository.revision_tree(self.revids[0])
132
 
        try:
133
 
            self.wt.revert(old_tree = revision_tree, pb = pb)
134
 
        finally:
135
 
            pb.finished()