[Pkg-bazaar-commits] ./bzr-gtk/unstable r54: Add GTK+ dialog for commit. Available as 'bzr gcommit'

Jelmer Vernooij jelmer at samba.org
Fri Apr 10 07:16:08 UTC 2009


------------------------------------------------------------
revno: 54
committer: Jelmer Vernooij <jelmer at samba.org>
timestamp: Sat 2006-05-20 17:44:48 +0200
message:
  Add GTK+ dialog for commit. Available as 'bzr gcommit'
modified:
  __init__.py
  commit/__init__.py
  commit/gcommit.py
-------------- next part --------------
=== modified file '__init__.py'
--- a/__init__.py	2006-05-19 22:25:52 +0000
+++ b/__init__.py	2006-05-20 15:44:48 +0000
@@ -17,4 +17,5 @@
 """GTK+ frontends to Bazaar commands """
 import viz
 import annotate
+import commit
 import gdiff

=== modified file 'commit/__init__.py'
--- a/commit/__init__.py	2006-05-19 22:45:58 +0000
+++ b/commit/__init__.py	2006-05-20 15:44:48 +0000
@@ -51,14 +51,10 @@
         if file_id is None:
             raise NotVersionedError(filename)
 
-        dialog = GCommitDialog()
-        dialog.connect("destroy", lambda w: gtk.main_quit())
+        dialog = GCommitDialog(wt)
         dialog.set_title(path + " - Commit")
-        dialog.show()
-
-        gtk.main()
-
-        Commit().commit(working_tree=wt,message=dialog.message,
+        if dialog.run() != gtk.RESPONSE_CANCEL:
+            Commit().commit(working_tree=wt,message=dialog.message,
                 specific_files=dialog.specific_files)
 
 register_command(cmd_gcommit)

=== modified file 'commit/gcommit.py'
--- a/commit/gcommit.py	2006-05-19 22:45:58 +0000
+++ b/commit/gcommit.py	2006-05-20 15:44:48 +0000
@@ -19,14 +19,88 @@
 import gobject
 import gtk
 import pango
+from bzrlib.delta import compare_trees
 
-class GCommitDialog(gtk.Window):
+class GCommitDialog(gtk.Dialog):
     """ Commit Dialog """
 
-    def __init__(self):
-        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
+    def __init__(self, tree):
+        gtk.Dialog.__init__(self)
+
+        self.set_default_size(400, 400)
+
+        self.old_tree = tree.branch.repository.revision_tree(tree.branch.last_revision())
+        self.pending_merges = tree.pending_merges()
+        self.delta = compare_trees(self.old_tree, tree)
 
         self._create()
 
+    def _create_file_view(self):
+        self.file_store = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_STRING)
+        self.file_view = gtk.TreeView(self.file_store)
+        self.file_view.append_column(gtk.TreeViewColumn("Change",gtk.CellRendererToggle(),active=0))
+        self.file_view.append_column(gtk.TreeViewColumn("Path",gtk.CellRendererText(),text=1))
+        self.file_view.append_column(gtk.TreeViewColumn("Type",gtk.CellRendererText(),text=2))
+
+        for path, id, kind in self.delta.added:
+            self.file_store.append([ True, path, "Added" ])
+
+        for path, id, kind in self.delta.removed:
+            self.file_store.append([ True, path, "Removed" ])
+
+        for oldpath, newpath, id, kind, text_modified, meta_modified in self.delta.renamed:
+            self.file_store.append([ True, oldpath, "Renamed"])
+
+        for path, id, kind, text_modified, meta_modified in self.delta.modified:
+            self.file_store.append([ True, path, "Modified"])
+
+        self.file_view.show()
+
+    def _get_specific_files(self):
+        ret = []
+        it = self.file_store.get_iter_first()
+        while it:
+            if self.file_store.get_value(it, 0):
+                ret.append(self.file_store.get_value(it,1))
+            it = self.file_store.iter_next(it)
+
+        return ret
+
+    specific_files = property(_get_specific_files)
+
+    def _create_pending_merge_view(self, merges):
+        self.pending_merge_store = gtk.ListStore(gobject.TYPE_STRING)
+        for revid in merges:
+            self.pending_merge_store.append([revid])
+        self.pending_merge_view = gtk.TreeView(self.pending_merge_store)
+        self.pending_merge_view.show()
+
+    def _create_message_box(self):
+        self.message_entry = gtk.TextView()
+        self.message_entry.show()
+        return self.message_entry
+
+    def _get_message(self):
+        buffer = self.message_entry.get_buffer()
+        return buffer.get_text(buffer.get_start_iter(),buffer.get_end_iter())
+
+    message = property(_get_message)
+
     def _create(self):
-        pass
+        # Show list of changed files with checkboxes
+        self._create_file_view()
+        self.vbox.set_spacing(2)
+        self.vbox.pack_start(self.file_view, expand=True, fill=True)
+
+        # If_ there are any pending merges, show list of pending merges
+        if self.pending_merges:
+            self._create_pending_merge_view(self.pending_merges)
+            self.vbox.pack_start(self.pending_merge_view, expand=True, fill=True)
+
+        # Show box where user can add comments
+        self._create_message_box()
+        self.vbox.pack_start(self.message_entry, expand=True, fill=True)
+
+        # Commit, Cancel buttons
+        self.add_buttons(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, "_Commit", gtk.RESPONSE_OK)
+                         



More information about the Pkg-bazaar-commits mailing list