/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: matkor
  • Date: 2007-08-23 10:17:40 UTC
  • mto: This revision was merged to the branch mainline in revision 265.
  • Revision ID: matkor@laptop-hp-20070823101740-s17kf9qa383wiuje
Code for "branch update" menuitem and toolbox. Typo fix

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)
 
50
            self.show_all()
61
51
 
62
 
            item = Gtk.MenuItem.new_with_mnemonic("_Merge Directive")
 
52
            item = gtk.MenuItem("_Merge Directive")
63
53
            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
54
            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()
 
55
            self.show_all()
77
56
 
78
57
    def store_merge_directive(self, item):
79
58
        from bzrlib.plugins.gtk.mergedirective import CreateMergeDirectiveDialog
80
59
        window = CreateMergeDirectiveDialog(self.branch, self.revids[0])
81
60
        window.show()
82
61
 
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
62
    def show_diff(self, item):
96
63
        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)
 
64
        window = DiffWindow()
 
65
        parentid = self.repository.revision_parents(self.revids[0])[0]
 
66
        (parent_tree, rev_tree) = self.repository.revision_trees(
 
67
            [parentid, self.revids[0]])
105
68
        window.set_diff(self.revids[0], rev_tree, parent_tree)
106
69
        window.show()
107
70
 
108
71
    def show_push(self, item):
109
72
        from bzrlib.plugins.gtk.push import PushDialog
110
73
        dialog = PushDialog(self.repository, self.revids[0], self.branch)
111
 
        response = dialog.run()
112
 
 
113
 
        if response != Gtk.ResponseType.NONE:
114
 
            dialog.destroy()
 
74
        dialog.run()
115
75
 
116
76
    def show_tag(self, item):
117
77
        from bzrlib.plugins.gtk.tags import AddTagDialog
118
78
        dialog = AddTagDialog(self.repository, self.revids[0], self.branch)
119
79
        response = dialog.run()
120
 
 
121
 
        if response != Gtk.ResponseType.NONE:
 
80
        if response != gtk.RESPONSE_NONE:
122
81
            dialog.hide()
123
 
 
124
 
            if response == Gtk.ResponseType.OK:
125
 
                self.emit('tag-added', dialog.tagname, dialog._revid)
126
 
 
 
82
        
 
83
            if response == gtk.RESPONSE_OK:
 
84
                self.branch.lock_write()
 
85
                self.branch.tags.set_tag(dialog.tagname, dialog._revid)
 
86
                self.branch.unlock()
 
87
            
127
88
            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()