/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: Daniel Schierbeck
  • Date: 2007-11-02 14:49:57 UTC
  • mto: (330.6.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 341.
  • Revision ID: daniel.schierbeck@gmail.com-20071102144957-8r4lp70ma5bpk8r8
Renamed logview 'revisionview'.

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