/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
53 by Jelmer Vernooij
Add framework for commit dialog
1
# Copyright (C) 2006 Jelmer Vernooij <jelmer@samba.org>
2
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
import pygtk
18
pygtk.require("2.0")
19
import gobject
20
import gtk
21
import pango
72 by Jelmer Vernooij
Update for bzr 0.10.
22
23
import bzrlib
24
if bzrlib.version_info < (0, 9):
25
    # function deprecated in 0.9
26
    from bzrlib.delta import compare_trees
53 by Jelmer Vernooij
Add framework for commit dialog
27
54 by Jelmer Vernooij
Add GTK+ dialog for commit. Available as 'bzr gcommit'
28
class GCommitDialog(gtk.Dialog):
53 by Jelmer Vernooij
Add framework for commit dialog
29
    """ Commit Dialog """
30
54 by Jelmer Vernooij
Add GTK+ dialog for commit. Available as 'bzr gcommit'
31
    def __init__(self, tree):
32
        gtk.Dialog.__init__(self)
33
34
        self.set_default_size(400, 400)
35
36
        self.old_tree = tree.branch.repository.revision_tree(tree.branch.last_revision())
37
        self.pending_merges = tree.pending_merges()
72 by Jelmer Vernooij
Update for bzr 0.10.
38
        if bzrlib.version_info < (0, 9):
39
            self.delta = compare_trees(self.old_tree, tree)
40
        else:
41
            self.delta = tree.changes_from(self.old_tree)
53 by Jelmer Vernooij
Add framework for commit dialog
42
43
        self._create()
44
54 by Jelmer Vernooij
Add GTK+ dialog for commit. Available as 'bzr gcommit'
45
    def _create_file_view(self):
46
        self.file_store = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_STRING)
47
        self.file_view = gtk.TreeView(self.file_store)
66.1.1 by Szilveszter Farkas (Phanatic)
(phanatic) Toggling enabled in commit file selector
48
        crt = gtk.CellRendererToggle()
49
        crt.set_property("activatable", True)
50
        crt.connect("toggled", self._toggle_commit, self.file_store)
61 by Jelmer Vernooij
Fix style.
51
        self.file_view.append_column(gtk.TreeViewColumn("Commit", 
66.1.1 by Szilveszter Farkas (Phanatic)
(phanatic) Toggling enabled in commit file selector
52
                                     crt, active=0))
61 by Jelmer Vernooij
Fix style.
53
        self.file_view.append_column(gtk.TreeViewColumn("Path", 
54
                                     gtk.CellRendererText(), text=1))
55
        self.file_view.append_column(gtk.TreeViewColumn("Type", 
56
                                     gtk.CellRendererText(), text=2))
54 by Jelmer Vernooij
Add GTK+ dialog for commit. Available as 'bzr gcommit'
57
61 by Jelmer Vernooij
Fix style.
58
        for path, _, _ in self.delta.added:
54 by Jelmer Vernooij
Add GTK+ dialog for commit. Available as 'bzr gcommit'
59
            self.file_store.append([ True, path, "Added" ])
60
61 by Jelmer Vernooij
Fix style.
61
        for path, _, _ in self.delta.removed:
54 by Jelmer Vernooij
Add GTK+ dialog for commit. Available as 'bzr gcommit'
62
            self.file_store.append([ True, path, "Removed" ])
63
61 by Jelmer Vernooij
Fix style.
64
        for oldpath, _, _, _, _, _ in self.delta.renamed:
54 by Jelmer Vernooij
Add GTK+ dialog for commit. Available as 'bzr gcommit'
65
            self.file_store.append([ True, oldpath, "Renamed"])
66
61 by Jelmer Vernooij
Fix style.
67
        for path, _, _, _, _ in self.delta.modified:
54 by Jelmer Vernooij
Add GTK+ dialog for commit. Available as 'bzr gcommit'
68
            self.file_store.append([ True, path, "Modified"])
69
70
        self.file_view.show()
71
66.1.1 by Szilveszter Farkas (Phanatic)
(phanatic) Toggling enabled in commit file selector
72
    def _toggle_commit(self, cell, path, model):
73
        model[path][0] = not model[path][0]
74
        return
75
    
54 by Jelmer Vernooij
Add GTK+ dialog for commit. Available as 'bzr gcommit'
76
    def _get_specific_files(self):
77
        ret = []
78
        it = self.file_store.get_iter_first()
79
        while it:
80
            if self.file_store.get_value(it, 0):
61 by Jelmer Vernooij
Fix style.
81
                ret.append(self.file_store.get_value(it, 1))
54 by Jelmer Vernooij
Add GTK+ dialog for commit. Available as 'bzr gcommit'
82
            it = self.file_store.iter_next(it)
83
84
        return ret
85
86
    specific_files = property(_get_specific_files)
87
88
    def _create_pending_merge_view(self, merges):
89
        self.pending_merge_store = gtk.ListStore(gobject.TYPE_STRING)
90
        for revid in merges:
91
            self.pending_merge_store.append([revid])
92
        self.pending_merge_view = gtk.TreeView(self.pending_merge_store)
93
        self.pending_merge_view.show()
94
95
    def _create_message_box(self):
96
        self.message_entry = gtk.TextView()
97
        self.message_entry.show()
98
        return self.message_entry
99
100
    def _get_message(self):
101
        buffer = self.message_entry.get_buffer()
61 by Jelmer Vernooij
Fix style.
102
        return buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter())
54 by Jelmer Vernooij
Add GTK+ dialog for commit. Available as 'bzr gcommit'
103
104
    message = property(_get_message)
105
53 by Jelmer Vernooij
Add framework for commit dialog
106
    def _create(self):
54 by Jelmer Vernooij
Add GTK+ dialog for commit. Available as 'bzr gcommit'
107
        # Show list of changed files with checkboxes
108
        self._create_file_view()
109
        self.vbox.set_spacing(2)
110
        self.vbox.pack_start(self.file_view, expand=True, fill=True)
111
112
        # If_ there are any pending merges, show list of pending merges
113
        if self.pending_merges:
114
            self._create_pending_merge_view(self.pending_merges)
115
            self.vbox.pack_start(self.pending_merge_view, expand=True, fill=True)
116
117
        # Show box where user can add comments
118
        self._create_message_box()
119
        self.vbox.pack_start(self.message_entry, expand=True, fill=True)
120
121
        # Commit, Cancel buttons
122
        self.add_buttons(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, "_Commit", gtk.RESPONSE_OK)
123