[Pkg-bazaar-commits] ./bzr-gtk/unstable r417: Merged refactoring of the revisionview.

Daniel Schierbeck daniel.schierbeck at gmail.com
Fri Apr 10 07:44:57 UTC 2009


------------------------------------------------------------
revno: 417
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: trunk
timestamp: Wed 2007-12-12 00:20:49 +0100
message:
  Merged refactoring of the revisionview.
modified:
  missing.py
  revisionview.py
  viz/branchwin.py
    ------------------------------------------------------------
    revno: 412.1.1
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Sun 2007-12-02 17:20:10 +0100
    message:
      Added branch and revision properties to the revisionview widget.
    modified:
      revisionview.py
    ------------------------------------------------------------
    revno: 412.1.2
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Sun 2007-12-02 17:28:38 +0100
    message:
      Moved retrieval of tags into the revisionview itself.
    modified:
      revisionview.py
      viz/branchwin.py
    ------------------------------------------------------------
    revno: 412.1.3
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Sun 2007-12-02 17:30:58 +0100
    message:
      Fixed problem with branches that do not support tags.
    modified:
      revisionview.py
    ------------------------------------------------------------
    revno: 412.1.4
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Sun 2007-12-02 17:36:10 +0100
    message:
      Made tag list smarter.
    modified:
      revisionview.py
    ------------------------------------------------------------
    revno: 412.1.5
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Sun 2007-12-02 17:41:17 +0100
    message:
      Made the revision id label use signals when updating.
    modified:
      revisionview.py
    ------------------------------------------------------------
    revno: 412.1.6
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Sun 2007-12-02 17:44:25 +0100
    message:
      Made the message buffer use signals when updating.
    modified:
      revisionview.py
    ------------------------------------------------------------
    revno: 412.1.7
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Thu 2007-12-06 18:18:16 +0100
    message:
      Added file-id property to the revisionview.
    modified:
      revisionview.py
    ------------------------------------------------------------
    revno: 412.1.8
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Thu 2007-12-06 18:24:46 +0100
    message:
      Only import the bdecode function from the bzrlib.util.bencode package.
    modified:
      revisionview.py
    ------------------------------------------------------------
    revno: 412.1.9
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Fri 2007-12-07 00:01:28 +0100
    message:
      Removed the use of RevisionView.set_go_callback().
    modified:
      revisionview.py
      viz/branchwin.py
    ------------------------------------------------------------
    revno: 412.1.10
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Fri 2007-12-07 00:30:30 +0100
    message:
      Removed unnecessary whitespace.
    modified:
      revisionview.py
    ------------------------------------------------------------
    revno: 412.1.11
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Fri 2007-12-07 00:34:26 +0100
    message:
      Merged with mainline.
    modified:
      viz/treemodel.py
      viz/treeview.py
    ------------------------------------------------------------
    revno: 412.1.12
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Fri 2007-12-07 00:37:06 +0100
    message:
      Fixed bug in gmissing.
    modified:
      missing.py
      revisionview.py
    ------------------------------------------------------------
    revno: 412.1.13
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Fri 2007-12-07 00:43:26 +0100
    message:
      Re-added support for displaying the children of a revision.
    modified:
      revisionview.py
      viz/branchwin.py
    ------------------------------------------------------------
    revno: 412.1.14
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Fri 2007-12-07 00:45:31 +0100
    message:
      Fixed bug in the way the child buttons worked.
    modified:
      revisionview.py
    ------------------------------------------------------------
    revno: 412.1.15
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: refactor
    timestamp: Fri 2007-12-07 00:49:08 +0100
    message:
      Removed redundant method argument.
    modified:
      revisionview.py
-------------- next part --------------
=== modified file 'missing.py'
--- a/missing.py	2007-11-02 14:49:57 +0000
+++ b/missing.py	2007-12-06 23:37:06 +0000
@@ -44,7 +44,9 @@
         extra_revs = gtk.ScrolledWindow()
         vbox = gtk.VBox()
         for rev in revisions:
-            vbox.pack_start(RevisionView(rev), True, True)
+            rv = RevisionView()
+            rv.set_revision(rev)
+            vbox.pack_start(rv, True, True)
         extra_revs.add_with_viewport(vbox)
         extra_revs.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
         return extra_revs

=== modified file 'revisionview.py'
--- a/revisionview.py	2007-11-03 16:27:35 +0000
+++ b/revisionview.py	2007-12-06 23:49:08 +0000
@@ -19,9 +19,10 @@
 pygtk.require("2.0")
 import gtk
 import pango
+import gobject
 
 from bzrlib.osutils import format_date
-from bzrlib.util import bencode
+from bzrlib.util.bencode import bdecode
 
 class RevisionView(gtk.Notebook):
     """ Custom widget for commit log details.
@@ -30,10 +31,39 @@
     start.
     """
 
-    def __init__(self, revision=None, tags=[],
-                 show_children=False, branch=None):
+    __gproperties__ = {
+        'branch': (
+            gobject.TYPE_PYOBJECT,
+            'Branch',
+            'The branch holding the revision being displayed',
+            gobject.PARAM_CONSTRUCT_ONLY | gobject.PARAM_WRITABLE
+        ),
+
+        'revision': (
+            gobject.TYPE_PYOBJECT,
+            'Revision',
+            'The revision being displayed',
+            gobject.PARAM_READWRITE
+        ),
+
+        'children': (
+            gobject.TYPE_PYOBJECT,
+            'Children',
+            'Child revisions',
+            gobject.PARAM_READWRITE
+        ),
+
+        'file-id': (
+            gobject.TYPE_PYOBJECT,
+            'File Id',
+            'The file id',
+            gobject.PARAM_READWRITE
+        )
+    }
+
+
+    def __init__(self, branch=None):
         gtk.Notebook.__init__(self)
-        self.show_children = show_children
 
         self._create_general()
         self._create_relations()
@@ -42,32 +72,64 @@
         self.set_current_page(0)
         
         self._show_callback = None
-        self._go_callback = None
         self._clicked_callback = None
 
+        self._revision = None
         self._branch = branch
 
-        if revision is not None:
-            self.set_revision(revision, tags=tags)
+        if self._branch is not None and self._branch.supports_tags():
+            self._tagdict = self._branch.tags.get_reverse_tag_dict()
+        else:
+            self._tagdict = {}
+
         self.set_file_id(None)
 
+    def do_get_property(self, property):
+        if property.name == 'branch':
+            return self._branch
+        elif property.name == 'revision':
+            return self._revision
+        elif property.name == 'children':
+            return self._children
+        elif property.name == 'file-id':
+            return self._file_id
+        else:
+            raise AttributeError, 'unknown property %s' % property.name
+
+    def do_set_property(self, property, value):
+        if property.name == 'branch':
+            self._branch = value
+        elif property.name == 'revision':
+            self._set_revision(value)
+        elif property.name == 'children':
+            self.set_children(value)
+        elif property.name == 'file-id':
+            self._file_id = value
+        else:
+            raise AttributeError, 'unknown property %s' % property.name
+
     def set_show_callback(self, callback):
         self._show_callback = callback
 
-    def set_go_callback(self, callback):
-        self._go_callback = callback
-
     def set_file_id(self, file_id):
         """Set a specific file id that we want to track.
 
         This just effects the display of a per-file commit message.
         If it is set to None, then all commit messages will be shown.
         """
-        self._file_id = file_id
-
-    def set_revision(self, revision, tags=[], children=[]):
+        self.set_property('file-id', file_id)
+
+    def set_revision(self, revision):
+        if revision != self._revision:
+            self.set_property('revision', revision)
+
+    def get_revision(self):
+        return self.get_property('revision')
+
+    def _set_revision(self, revision):
+        if revision is None: return
+
         self._revision = revision
-        self.revision_id.set_text(revision.revision_id)
         if revision.committer is not None:
             self.committer.set_text(revision.committer)
         else:
@@ -84,7 +146,6 @@
         if revision.timestamp is not None:
             self.timestamp.set_text(format_date(revision.timestamp,
                                                 revision.timezone))
-        self.message_buffer.set_text(revision.message)
         try:
             self.branchnick_label.set_text(revision.properties['branch-nick'])
         except KeyError:
@@ -94,16 +155,9 @@
                                       self.parents_widgets,
                                       self.parents_table)
         
-        if self.show_children:
-            self._add_parents_or_children(children,
-                                          self.children_widgets,
-                                          self.children_table)
-        
-        self._add_tags(tags)
-
         file_info = revision.properties.get('file-info', None)
         if file_info is not None:
-            file_info = bencode.bdecode(file_info.encode('UTF-8'))
+            file_info = bdecode(file_info.encode('UTF-8'))
 
         if file_info:
             if self._file_id is None:
@@ -125,15 +179,24 @@
         else:
             self.file_info_box.hide()
 
+    def set_children(self, children):
+        self._add_parents_or_children(children,
+                                      self.children_widgets,
+                                      self.children_table)
+
     def _show_clicked_cb(self, widget, revid, parentid):
         """Callback for when the show button for a parent is clicked."""
         self._show_callback(revid, parentid)
 
     def _go_clicked_cb(self, widget, revid):
         """Callback for when the go button for a parent is clicked."""
-        self._go_callback(revid)
 
-    def _add_tags(self, tags):
+    def _add_tags(self, *args):
+        if self._tagdict.has_key(self._revision.revision_id):
+            tags = self._tagdict[self._revision.revision_id]
+        else:
+            tags = []
+            
         if tags == []:
             self.tags_list.hide()
             self.tags_label.hide()
@@ -183,11 +246,9 @@
                 hbox.pack_start(button, expand=False, fill=True)
                 button.show()
 
-            if self._go_callback is not None:
-                button = gtk.Button(revid)
-                button.connect("clicked", self._go_clicked_cb, revid)
-            else:
-                button = gtk.Label(revid)
+            button = gtk.Button(revid)
+            button.connect("clicked",
+                    lambda w, r: self.set_revision(self._branch.repository.get_revision(r)), revid)
             button.set_use_underline(False)
             hbox.pack_start(button, expand=False, fill=True)
             button.show()
@@ -204,8 +265,7 @@
         vbox = gtk.VBox(False, 6)
         vbox.set_border_width(6)
         vbox.pack_start(self._create_parents(), expand=False, fill=True)
-        if self.show_children:
-            vbox.pack_start(self._create_children(), expand=False, fill=True)
+        vbox.pack_start(self._create_children(), expand=False, fill=True)
         self.append_page(vbox, tab_label=gtk.Label("Relations"))
         vbox.show()
 
@@ -224,12 +284,14 @@
         label.show()
 
         align = gtk.Alignment(0.0, 0.5)
-        self.revision_id = gtk.Label()
-        self.revision_id.set_selectable(True)
-        align.add(self.revision_id)
+        revision_id = gtk.Label()
+        revision_id.set_selectable(True)
+        self.connect('notify::revision', 
+                lambda w, p: revision_id.set_text(self._revision.revision_id))
+        align.add(revision_id)
         self.table.attach(align, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
         align.show()
-        self.revision_id.show()
+        revision_id.show()
 
         align = gtk.Alignment(1.0, 0.5)
         self.author_label = gtk.Label()
@@ -312,6 +374,8 @@
         self.tags_list.show()
         self.tags_widgets = []
 
+        self.connect('notify::revision', self._add_tags)
+
         return self.table
 
     
@@ -350,15 +414,15 @@
         align.show()
 
         return table
-    
-
 
     def _create_message_view(self):
-        self.message_buffer = gtk.TextBuffer()
+        msg_buffer = gtk.TextBuffer()
+        self.connect('notify::revision',
+                lambda w, p: msg_buffer.set_text(self._revision.message))
         window = gtk.ScrolledWindow()
         window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
         window.set_shadow_type(gtk.SHADOW_IN)
-        tv = gtk.TextView(self.message_buffer)
+        tv = gtk.TextView(msg_buffer)
         tv.set_editable(False)
         tv.set_wrap_mode(gtk.WRAP_WORD)
         tv.modify_font(pango.FontDescription("Monospace"))

=== modified file 'viz/branchwin.py'
--- a/viz/branchwin.py	2007-11-29 09:06:45 +0000
+++ b/viz/branchwin.py	2007-12-06 23:43:26 +0000
@@ -291,12 +291,12 @@
     def construct_bottom(self):
         """Construct the bottom half of the window."""
         from bzrlib.plugins.gtk.revisionview import RevisionView
-        self.revisionview = RevisionView(None, tags=[], show_children=True, branch=self.branch)
+        self.revisionview = RevisionView(branch=self.branch)
         (width, height) = self.get_size()
         self.revisionview.set_size_request(width, int(height / 2.5))
         self.revisionview.show()
         self.revisionview.set_show_callback(self._show_clicked_cb)
-        self.revisionview.set_go_callback(self._go_clicked_cb)
+        self.revisionview.connect('notify::revision', self._go_clicked_cb)
         return self.revisionview
 
     def _tag_selected_cb(self, menuitem, revid):
@@ -349,12 +349,8 @@
 
             self.next_button.set_menu(next_menu)
 
-            tags = []
-            if self.branch.supports_tags():
-                tagdict = self.branch.tags.get_reverse_tag_dict()
-                if tagdict.has_key(revision.revision_id):
-                    tags = tagdict[revision.revision_id]
-            self.revisionview.set_revision(revision, tags, children)
+            self.revisionview.set_revision(revision)
+            self.revisionview.set_children(children)
 
     def _back_clicked_cb(self, *args):
         """Callback for when the back button is clicked."""
@@ -364,9 +360,10 @@
         """Callback for when the forward button is clicked."""
         self.treeview.forward()
 
-    def _go_clicked_cb(self, revid):
+    def _go_clicked_cb(self, w, p):
         """Callback for when the go button for a parent is clicked."""
-        self.treeview.set_revision_id(revid)
+        if self.revisionview.get_revision() is not None:
+            self.treeview.set_revision(self.revisionview.get_revision())
 
     def _show_clicked_cb(self, revid, parentid):
         """Callback for when the show button for a parent is clicked."""



More information about the Pkg-bazaar-commits mailing list