File list changes
Supersedes the earlier symlink in workingtree + status for folders patches
Moves ListView creation to OliveGui
Removes duplication _load_right/refresh_right by removing _load_right
Adds statusmapper method that checks status both for files and folders

Hopefully this patch does show the folder status! :)

Jasper
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [EMAIL PROTECTED]
# target_branch: https://code.launchpad.net/~bzr-gtk/bzr-gtk/trunk
# testament_sha1: 688f44efc5503260cd7e77fe8ef8ecbf7af087c0
# timestamp: 2008-07-20 19:33:57 +0200
# source_branch: https://code.launchpad.net/~bzr-gtk/bzr-gtk/trunk
# base_revision_id: [EMAIL PROTECTED]
# 
# Begin patch
=== modified file 'olive/__init__.py'
--- olive/__init__.py	2008-07-20 16:29:18 +0000
+++ olive/__init__.py	2008-07-20 17:33:42 +0000
@@ -98,7 +98,6 @@
         
 		# Get the TreeViews
         self.treeview_left = self.window.treeview_left
-        self.treeview_right = self.window.treeview_right
         
         # Get the drive selector
         self.combobox_drive = gtk.combo_box_new_text()
@@ -155,7 +154,7 @@
         self.remote_revision = None
         
         self.set_path(os.getcwd())
-        self._load_right()
+        self.refresh_right()
         
         self._just_started = False
 
@@ -212,7 +211,7 @@
                 
                 # We're local
                 try:
-                    self.wt, self.wtpath = WorkingTree.open_containing(path)
+                    self.wt, self.wtpath = WorkingTree.open_containing(os.path.realpath(path))
                 except (bzrerrors.NotBranchError, bzrerrors.NoWorkingTree):
                     self.notbranch = True
                 
@@ -882,175 +881,10 @@
         
         # Expand the tree
         self.treeview_left.expand_all()
-
-    def _load_right(self):
-        """ Load data into the right panel. (Filelist) """
-        # Create ListStore
-        # Model: [ icon, dir, name, status text, status, size (int), size (human), mtime (int), mtime (local), fileid ]
-        liststore = gtk.ListStore(gobject.TYPE_STRING,
-                                  gobject.TYPE_BOOLEAN,
-                                  gobject.TYPE_STRING,
-                                  gobject.TYPE_STRING,
-                                  gobject.TYPE_STRING,
-                                  gobject.TYPE_STRING,
-                                  gobject.TYPE_STRING,
-                                  gobject.TYPE_INT,
-                                  gobject.TYPE_STRING,
-                                  gobject.TYPE_STRING)
-        
-        dirs = []
-        files = []
-        
-        # Fill the appropriate lists
-        dotted_files = self.pref.get_preference('dotted_files', 'bool')
-        for item in os.listdir(self.path):
-            if not dotted_files and item[0] == '.':
-                continue
-            if os.path.isdir(self.path + os.sep + item):
-                dirs.append(item)
-            else:
-                files.append(item)
-        
-        if not self.notbranch:
-            branch = self.wt.branch
-            tree2 = self.wt.branch.repository.revision_tree(branch.last_revision())
-        
-            delta = self.wt.changes_from(tree2, want_unchanged=True)
-        
-        # Add'em to the ListStore
-        for item in dirs:
-            try:
-                statinfo = os.stat(self.path + os.sep + item)
-            except OSError, e:
-                if e.errno in self.acceptable_errors:
-                    continue
-                else:
-                    raise
-            liststore.append([ gtk.STOCK_DIRECTORY,
-                               True,
-                               item,
-                               '',
-                               '',
-                               "<DIR>",
-                               "<DIR>",
-                               statinfo.st_mtime,
-                               self._format_date(statinfo.st_mtime),
-                               ''])
-        for item in files:
-            status = 'unknown'
-            fileid = ''
-            if not self.notbranch:
-                filename = self.wt.relpath(self.path + os.sep + item)
-                
-                try:
-                    self.wt.lock_read()
-                    
-                    for rpath, rpathnew, id, kind, text_modified, meta_modified in delta.renamed:
-                        if rpathnew == filename:
-                            status = 'renamed'
-                            fileid = id
-                    for rpath, id, kind in delta.added:
-                        if rpath == filename:
-                            status = 'added'
-                            fileid = id
-                    for rpath, id, kind in delta.removed:
-                        if rpath == filename:
-                            status = 'removed'
-                            fileid = id
-                    for rpath, id, kind, text_modified, meta_modified in delta.modified:
-                        if rpath == filename:
-                            status = 'modified'
-                            fileid = id
-                    for rpath, id, kind in delta.unchanged:
-                        if rpath == filename:
-                            status = 'unchanged'
-                            fileid = id
-                    for rpath, file_class, kind, id, entry in self.wt.list_files():
-                        if rpath == filename and file_class == 'I':
-                            status = 'ignored'
-                finally:
-                    self.wt.unlock()
-            
-            if status == 'renamed':
-                st = _i18n('renamed')
-            elif status == 'removed':
-                st = _i18n('removed')
-            elif status == 'added':
-                st = _i18n('added')
-            elif status == 'modified':
-                st = _i18n('modified')
-            elif status == 'unchanged':
-                st = _i18n('unchanged')
-            elif status == 'ignored':
-                st = _i18n('ignored')
-            else:
-                st = _i18n('unknown')
-            
-            try:
-                statinfo = os.stat(self.path + os.sep + item)
-            except OSError, e:
-                if e.errno in self.acceptable_errors:
-                    continue
-                else:
-                    raise
-            liststore.append([gtk.STOCK_FILE,
-                              False,
-                              item,
-                              st,
-                              status,
-                              str(statinfo.st_size), # NOTE: if int used there it will fail for large files (size expressed as long int)
-                              self._format_size(statinfo.st_size),
-                              statinfo.st_mtime,
-                              self._format_date(statinfo.st_mtime),
-                              fileid])
-        
-        # Create the columns and add them to the TreeView
-        self.treeview_right.set_model(liststore)
-        self._tvcolumn_filename = gtk.TreeViewColumn(_i18n('Filename'))
-        self._tvcolumn_status = gtk.TreeViewColumn(_i18n('Status'))
-        self._tvcolumn_size = gtk.TreeViewColumn(_i18n('Size'))
-        self._tvcolumn_mtime = gtk.TreeViewColumn(_i18n('Last modified'))
-        self.treeview_right.append_column(self._tvcolumn_filename)
-        self.treeview_right.append_column(self._tvcolumn_status)
-        self.treeview_right.append_column(self._tvcolumn_size)
-        self.treeview_right.append_column(self._tvcolumn_mtime)
-        
-        # Set up the cells
-        cellpb = gtk.CellRendererPixbuf()
-        cell = gtk.CellRendererText()
-        self._tvcolumn_filename.pack_start(cellpb, False)
-        self._tvcolumn_filename.pack_start(cell, True)
-        self._tvcolumn_filename.set_attributes(cellpb, stock_id=0)
-        self._tvcolumn_filename.add_attribute(cell, 'text', 2)
-        self._tvcolumn_status.pack_start(cell, True)
-        self._tvcolumn_status.add_attribute(cell, 'text', 3)
-        self._tvcolumn_size.pack_start(cell, True)
-        self._tvcolumn_size.add_attribute(cell, 'text', 6)
-        self._tvcolumn_mtime.pack_start(cell, True)
-        self._tvcolumn_mtime.add_attribute(cell, 'text', 8)
-        
-        # Set up the properties of the TreeView
-        self.treeview_right.set_headers_visible(True)
-        self.treeview_right.set_headers_clickable(True)
-        self.treeview_right.set_search_column(1)
-        self._tvcolumn_filename.set_resizable(True)
-        self._tvcolumn_status.set_resizable(True)
-        self._tvcolumn_size.set_resizable(True)
-        self._tvcolumn_mtime.set_resizable(True)
-        # Set up sorting
-        liststore.set_sort_func(13, self._sort_filelist_callback, None)
-        liststore.set_sort_column_id(13, gtk.SORT_ASCENDING)
-        self._tvcolumn_filename.set_sort_column_id(13)
-        self._tvcolumn_status.set_sort_column_id(3)
-        self._tvcolumn_size.set_sort_column_id(5)
-        self._tvcolumn_mtime.set_sort_column_id(7)
-        
-        # Set sensitivity
-        self.set_sensitivity()
-        
+       
     def get_selected_fileid(self):
         """ Get the file_id of the selected file. """
-        treeselection = self.treeview_right.get_selection()
+        treeselection = self.window.treeview_right.get_selection()
         (model, iter) = treeselection.get_selected()
         
         if iter is None:
@@ -1060,7 +894,7 @@
     
     def get_selected_right(self):
         """ Get the selected filename. """
-        treeselection = self.treeview_right.get_selection()
+        treeselection = self.window.treeview_right.get_selection()
         (model, iter) = treeselection.get_selected()
         
         if iter is None:
@@ -1135,11 +969,11 @@
                 return
     
             # Get ListStore and clear it
-            liststore = self.treeview_right.get_model()
+            liststore = self.window.filelist
             liststore.clear()
             
             # Show Status column
-            self._tvcolumn_status.set_visible(True)
+            self.window.col_status.set_visible(True)
     
             dirs = []
             files = []
@@ -1159,7 +993,7 @@
             # Try to open the working tree
             notbranch = False
             try:
-                tree1 = WorkingTree.open_containing(path)[0]
+                tree1 = WorkingTree.open_containing(os.path.realpath(path))[0]
             except (bzrerrors.NotBranchError, bzrerrors.NoWorkingTree):
                 notbranch = True
             
@@ -1171,6 +1005,16 @@
                 
             # Add'em to the ListStore
             for item in dirs:
+                status = ''
+                st = ''
+                fileid = ''
+                if not notbranch:
+                    filename = tree1.relpath(os.path.join(os.path.realpath(path), item))
+                    
+                    st, status = self.statusmapper(filename, delta)
+                    if not ignored_files and status == 'ignored':
+                        continue
+                
                 try:
                     statinfo = os.stat(self.path + os.sep + item)
                 except OSError, e:
@@ -1178,67 +1022,26 @@
                         continue
                     else:
                         raise
-                liststore.append([gtk.STOCK_DIRECTORY,
-                                  True,
-                                  item,
-                                  '',
-                                  '',
-                                  "<DIR>",
-                                  "<DIR>",
-                                  statinfo.st_mtime,
-                                  self._format_date(statinfo.st_mtime),
-                                  ''])
+                liststore.append([ gtk.STOCK_DIRECTORY,
+                                   True,
+                                   item,
+                                   st,
+                                   status,
+                                   "<DIR>",
+                                   "<DIR>",
+                                   statinfo.st_mtime,
+                                   self._format_date(statinfo.st_mtime),
+                                   ''])
             for item in files:
-                status = 'unknown'
+                status = ''
+                st = ''
                 fileid = ''
                 if not notbranch:
-                    filename = tree1.relpath(path + os.sep + item)
+                    filename = tree1.relpath(os.path.join(os.path.realpath(path), item))
                     
-                    try:
-                        self.wt.lock_read()
-                        
-                        for rpath, rpathnew, id, kind, text_modified, meta_modified in delta.renamed:
-                            if rpathnew == filename:
-                                status = 'renamed'
-                                fileid = id
-                        for rpath, id, kind in delta.added:
-                            if rpath == filename:
-                                status = 'added'
-                                fileid = id
-                        for rpath, id, kind in delta.removed:
-                            if rpath == filename:
-                                status = 'removed'
-                                fileid = id
-                        for rpath, id, kind, text_modified, meta_modified in delta.modified:
-                            if rpath == filename:
-                                status = 'modified'
-                                fileid = id
-                        for rpath, id, kind in delta.unchanged:
-                            if rpath == filename:
-                                status = 'unchanged'
-                                fileid = id
-                        for rpath, file_class, kind, id, entry in self.wt.list_files():
-                            if rpath == filename and file_class == 'I':
-                                status = 'ignored'
-                    finally:
-                        self.wt.unlock()
-                
-                if status == 'renamed':
-                    st = _i18n('renamed')
-                elif status == 'removed':
-                    st = _i18n('removed')
-                elif status == 'added':
-                    st = _i18n('added')
-                elif status == 'modified':
-                    st = _i18n('modified')
-                elif status == 'unchanged':
-                    st = _i18n('unchanged')
-                elif status == 'ignored':
-                    st = _i18n('ignored')
-                    if not ignored_files:
+                    st, status = self.statusmapper(filename, delta)
+                    if not ignored_files and status == 'ignored':
                         continue
-                else:
-                    st = _i18n('unknown')
                 
                 try:
                     statinfo = os.stat(self.path + os.sep + item)
@@ -1261,11 +1064,11 @@
             # We're remote
             
             # Get ListStore and clear it
-            liststore = self.treeview_right.get_model()
+            liststore = self.window.filelist
             liststore.clear()
             
             # Hide Status column
-            self._tvcolumn_status.set_visible(False)
+            self.window.col_status.set_visible(False)
             
             dirs = []
             files = []
@@ -1338,10 +1141,57 @@
             self.image_location_error.destroy()
 
         # Columns should auto-size
-        self.treeview_right.columns_autosize()
+        self.window.treeview_right.columns_autosize()
         
         # Set sensitivity
         self.set_sensitivity()
+    
+    def statusmapper(self, filename, delta):
+        status = 'unknown'
+        try:
+            self.wt.lock_read()
+            
+            for rpath, rpathnew, id, kind, text_modified, meta_modified in delta.renamed:
+                if rpathnew == filename:
+                    status = 'renamed'
+                    fileid = id
+            for rpath, id, kind in delta.added:
+                if rpath == filename:
+                    status = 'added'
+                    fileid = id
+            for rpath, id, kind in delta.removed:
+                if rpath == filename:
+                    status = 'removed'
+                    fileid = id
+            for rpath, id, kind, text_modified, meta_modified in delta.modified:
+                if rpath == filename:
+                    status = 'modified'
+                    fileid = id
+            for rpath, id, kind in delta.unchanged:
+                if rpath == filename:
+                    status = 'unchanged'
+                    fileid = id
+            for rpath, file_class, kind, id, entry in self.wt.list_files():
+                if rpath == filename and file_class == 'I':
+                    status = 'ignored'
+        finally:
+            self.wt.unlock()
+    
+        if status == 'renamed':
+            st = _i18n('renamed')
+        elif status == 'removed':
+            st = _i18n('removed')
+        elif status == 'added':
+            st = _i18n('added')
+        elif status == 'modified':
+            st = _i18n('modified')
+        elif status == 'unchanged':
+            st = _i18n('unchanged')
+        elif status == 'ignored':
+            st = _i18n('ignored')
+        else:
+            st = _i18n('unknown')
+        return st, status
 
     def _harddisks(self):
         """ Returns hard drive letters under Win32. """

=== modified file 'olive/window.py'
--- olive/window.py	2008-07-20 16:02:18 +0000
+++ olive/window.py	2008-07-20 17:31:07 +0000
@@ -383,7 +383,6 @@
             
     def _create_filelist(self):
         """ Creates the file list (a ListStore in a TreeView in a ScrolledWindow)"""
-        # Model: [ icon, dir, name, status text, status, size (int), size (human), mtime (int), mtime (local), fileid ]
         self.scrolledwindow_right = gtk.ScrolledWindow()
         self.scrolledwindow_right.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
         
@@ -391,8 +390,62 @@
         self.treeview_right.connect("button-press-event", self.signal.on_treeview_right_button_press_event)
         self.treeview_right.connect("row-activated", self.signal.on_treeview_right_row_activated)
         self.scrolledwindow_right.add(self.treeview_right)
-
-        # Move olive/__init__.py _load_right List creation here
+        
+        # Model: [ icon, dir, name, status text, status, size (int), size (human), mtime (int), mtime (local), fileid ]
+        self.filelist = gtk.ListStore(gobject.TYPE_STRING,
+                                      gobject.TYPE_BOOLEAN,
+                                      gobject.TYPE_STRING,
+                                      gobject.TYPE_STRING,
+                                      gobject.TYPE_STRING,
+                                      gobject.TYPE_STRING,
+                                      gobject.TYPE_STRING,
+                                      gobject.TYPE_INT,
+                                      gobject.TYPE_STRING,
+                                      gobject.TYPE_STRING)
+        self.treeview_right.set_model(self.filelist)
+        
+        # Set up the cells
+        cellpb = gtk.CellRendererPixbuf()
+        cell = gtk.CellRendererText()
+        
+        self.col_filename = gtk.TreeViewColumn(_i18n('Filename'))
+        self.col_filename.pack_start(cellpb, False)
+        self.col_filename.pack_start(cell, True)
+        self.col_filename.set_attributes(cellpb, stock_id=0)
+        self.col_filename.add_attribute(cell, 'text', 2)
+        self.col_filename.set_resizable(True)
+        self.treeview_right.append_column(self.col_filename)
+        
+        self.col_status = gtk.TreeViewColumn(_i18n('Status'))
+        self.col_status.pack_start(cell, True)
+        self.col_status.add_attribute(cell, 'text', 3)
+        self.col_status.set_resizable(True)
+        self.treeview_right.append_column(self.col_status)
+        
+        self.col_size = gtk.TreeViewColumn(_i18n('Size'))
+        self.col_size.pack_start(cell, True)
+        self.col_size.add_attribute(cell, 'text', 6)
+        self.col_size.set_resizable(True)
+        self.treeview_right.append_column(self.col_size)
+        
+        self.col_mtime = gtk.TreeViewColumn(_i18n('Last modified'))
+        self.col_mtime.pack_start(cell, True)
+        self.col_mtime.add_attribute(cell, 'text', 8)
+        self.col_mtime.set_resizable(True)
+        self.treeview_right.append_column(self.col_mtime)
+        
+        # Set up the properties of the TreeView
+        self.treeview_right.set_headers_visible(True)
+        self.treeview_right.set_headers_clickable(True)
+        self.treeview_right.set_search_column(1)
+        
+        # Set up sorting
+        self.filelist.set_sort_func(13, self.signal._sort_filelist_callback, None)
+        self.filelist.set_sort_column_id(13, gtk.SORT_ASCENDING)
+        self.col_filename.set_sort_column_id(13)
+        self.col_status.set_sort_column_id(3)
+        self.col_size.set_sort_column_id(5)
+        self.col_mtime.set_sort_column_id(7)
     
     def set_view_to_localbranch(self, notbranch=False):
         """ Change the sensitivity of gui items to reflect the fact that the path is a branch or not"""

# Begin bundle
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
pmOXXyI+c84LlkIOgcJdfqP/F3JFOFCQTK1hGA==

Attachment: signature.asc
Description: OpenPGP digital signature

-- 
bzr-gtk mailing list
[email protected]
Modify settings or unsubscribe at: 
https://lists.canonical.com/mailman/listinfo/bzr-gtk

Reply via email to