/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: Curtis Hovey
  • Date: 2012-02-05 05:14:11 UTC
  • mto: This revision was merged to the branch mainline in revision 775.
  • Revision ID: sinzui.is@verizon.net-20120205051411-y9ra08wae1wsfv52
Remove unneeded gtksourceview1 support.

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
 
try:
19
 
    import pygtk
20
 
    pygtk.require("2.0")
21
 
except:
22
 
    pass
23
 
 
24
 
import bzrlib
25
 
import gtk
26
 
from bzrlib import (errors, ui)
 
18
from gi.repository import Gtk
 
19
from gi.repository import GObject
 
20
from bzrlib import ui
27
21
from bzrlib.revision import NULL_REVISION
28
22
 
29
 
class RevisionPopupMenu(gtk.Menu):
30
 
    def __init__(self, repository, revids, branch=None, wt=None):
31
 
        super(RevisionPopupMenu, self).__init__()
 
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
32
36
        self.branch = branch
33
37
        self.repository = repository
34
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)
35
45
        self.revids = revids
36
46
        self.create_items()
37
47
 
38
48
    def create_items(self):
39
49
        if len(self.revids) == 1:
40
 
            item = gtk.MenuItem("View _Changes")
 
50
            item = Gtk.MenuItem.new_with_mnemonic("View _Changes")
41
51
            item.connect('activate', self.show_diff)
42
52
            self.append(item)
43
 
            self.show_all()
44
53
 
45
 
            item = gtk.MenuItem("_Push")
 
54
            item = Gtk.MenuItem.new_with_mnemonic("_Push")
46
55
            item.connect('activate', self.show_push)
47
56
            self.append(item)
48
 
            self.show_all()
49
57
 
50
 
            item = gtk.MenuItem("_Tag Revision")
 
58
            item = Gtk.MenuItem.new_with_mnemonic("_Tag Revision")
51
59
            item.connect('activate', self.show_tag)
52
60
            self.append(item)
53
 
            self.show_all()
54
61
 
55
 
            item = gtk.MenuItem("_Merge Directive")
 
62
            item = Gtk.MenuItem.new_with_mnemonic("_Merge Directive")
56
63
            item.connect('activate', self.store_merge_directive)
57
64
            # FIXME: self.append(item)
58
 
            self.show_all()
59
 
            
 
65
 
 
66
            item = Gtk.MenuItem.new_with_mnemonic("_Send Merge Directive")
 
67
            item.connect('activate', self.send_merge_directive)
 
68
            self.append(item)
 
69
 
60
70
            if self.wt:
61
 
                item = gtk.MenuItem("_Revert to this revision")
 
71
                item = Gtk.MenuItem.new_with_mnemonic(
 
72
                    "_Revert to this revision")
62
73
                item.connect('activate', self.revert)
63
74
                self.append(item)
64
 
                self.show_all()
 
75
 
 
76
        self.show_all()
65
77
 
66
78
    def store_merge_directive(self, item):
67
79
        from bzrlib.plugins.gtk.mergedirective import CreateMergeDirectiveDialog
68
80
        window = CreateMergeDirectiveDialog(self.branch, self.revids[0])
69
81
        window.show()
70
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()
 
94
 
71
95
    def show_diff(self, item):
72
96
        from bzrlib.plugins.gtk.diff import DiffWindow
73
 
        window = DiffWindow(parent=self.parent)
74
 
        parentids = self.repository.revision_parents(self.revids[0])
75
 
 
 
97
        window = DiffWindow(parent=self._parent)
 
98
        parentids = self.repository.get_revision(self.revids[0]).parent_ids
76
99
        if len(parentids) == 0:
77
100
            parentid = NULL_REVISION
78
101
        else:
79
102
            parentid = parentids[0]
80
 
 
81
103
        rev_tree    = self.repository.revision_tree(self.revids[0])
82
104
        parent_tree = self.repository.revision_tree(parentid)
83
105
        window.set_diff(self.revids[0], rev_tree, parent_tree)
88
110
        dialog = PushDialog(self.repository, self.revids[0], self.branch)
89
111
        response = dialog.run()
90
112
 
91
 
        if response != gtk.RESPONSE_NONE:
 
113
        if response != Gtk.ResponseType.NONE:
92
114
            dialog.destroy()
93
115
 
94
116
    def show_tag(self, item):
96
118
        dialog = AddTagDialog(self.repository, self.revids[0], self.branch)
97
119
        response = dialog.run()
98
120
 
99
 
        if response != gtk.RESPONSE_NONE:
 
121
        if response != Gtk.ResponseType.NONE:
100
122
            dialog.hide()
101
 
        
102
 
            if response == gtk.RESPONSE_OK:
103
 
                try:
104
 
                    self.branch.lock_write()
105
 
                    self.branch.tags.set_tag(dialog.tagname, dialog._revid)
106
 
                finally:
107
 
                    self.branch.unlock()
108
 
            
 
123
 
 
124
            if response == Gtk.ResponseType.OK:
 
125
                self.emit('tag-added', dialog.tagname, dialog._revid)
 
126
 
109
127
            dialog.destroy()
110
 
    
 
128
 
111
129
    def revert(self, item):
112
130
        pb = ui.ui_factory.nested_progress_bar()
113
131
        revision_tree = self.branch.repository.revision_tree(self.revids[0])