/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: Jelmer Vernooij
  • Date: 2007-10-26 17:02:18 UTC
  • Revision ID: jelmer@samba.org-20071026170218-pepec3wazqr3ghhb
Add very simple "Send Merge Directive" window.

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