#------------------------------------------------------------------------------ # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: Enthought, Inc. # Description: <Enthought pyface package component> #------------------------------------------------------------------------------ """ A table viewer for local file systems. """ # Standard library imports. from os import listdir, stat from os.path import basename, isdir, join from time import localtime, strftime # Enthought library imports. from enthought.pyface.api import ImageResource from enthought.pyface.viewer.api import TableColumnProvider, TableContentProvider from enthought.pyface.viewer.api import TableLabelProvider, TableViewer from enthought.traits.api import Instance, Str class FileTableContentProvider(TableContentProvider): """ A table content provider for local file systems. """ ######################################################################### # 'TableContentProvider' interface. ######################################################################### def get_elements(self, element): """ Returns the label for an element. """ if isdir(element): elements = [ join(element, filename) for filename in listdir(element) ] else: elements = [] return elements class FileTableLabelProvider(TableLabelProvider): """ A table label provider for local file systems. """ # The icon used to represent 'folder' elements. FOLDER = ImageResource('closed_folder') # The icon used to represent 'document' elements. DOCUMENT = ImageResource('document') ########################################################################### # 'TableLabelProvider' interface. ########################################################################### def get_image(self, viewer, element, column_index=0): """ Returns the filename of the label image for an element. """ if isdir(element): image = self.FOLDER else: image = self.DOCUMENT return image def get_text(self, viewer, element, column_index=0): """ Returns the label text for an element. """ details = stat(element) if column_index == 0: label = basename(element) elif column_index == 1: label = str(int(details.st_size) / 1000) + ' KB' else: # Format is: mm/dd/yyyy HH:MM AM eg. '12/31/2004 12:00 PM' label = strftime('%m/%d/%Y %I:%M %p', localtime(details.st_mtime)) return label class FileTableColumnProvider(TableColumnProvider): """ A table column provider for local file systems. """ ########################################################################### # 'object' interface. ########################################################################### def __init__(self): """ Creates a new column provider. """ # Column labels. self._column_labels = ['Name', 'Size', 'Date Modified'] # The number of columns. self.column_count = len(self._column_labels) return ########################################################################### # 'TableColumnProvider' interface. ########################################################################### def get_label(self, viewer, column_index): """ Returns the label for a column. """ return self._column_labels[column_index] def get_alignment(self, viewer, column_index): """ Returns the alignment of the column header and cells. Returns, 'left', 'right', 'centre' or 'center' ('left' by default). """ if column_index == 1: alignment = 'right' else: alignment = 'left' return alignment class FileTableViewer(TableViewer): """ A table viewer for local file systems. """ #### 'TableViewer' interface ############################################## # The column provider. column_provider = Instance(FileTableColumnProvider, ()) # The content provider provides the actual table data. content_provider = Instance(FileTableContentProvider, ()) # The label provider provides, err, the labels for the items in the tree # (a label can have text and/or an image). label_provider = Instance(FileTableLabelProvider, ()) ##### EOF #####################################################################