#!/usr/bin/env python

from PyQt4.QtCore import QAbstractItemModel, QModelIndex, Qt, QVariant, QModelIndex, QStringList

from TreeItem import Item

class Model (QAbstractItemModel):
    def __init__(self, parent=None):
        super(Model, self).__init__(parent)
        self.rootData = QStringList() << "Name" << "Path" << 'Size'
        self.rootItem = Item(self.rootData)
        
    def index(self, row, column, parent):
        if (not self.hasIndex(row, column, parent)):
            return QModelIndex()

        if (not parent.isValid()):
            parentItem = self.rootItem
        else:
            parentItem = parent.internalPointer()
        
        childItem = parentItem.child(row);
        if childItem:
            return self.createIndex(row, column, childItem)
        else:
            return QModelIndex()
            
    def parent(self, index):
        if not index.isValid():
            return QModelIndex()
    
        childItem = index.internalPointer()
        parentItem = childItem.parent()
    
        if parentItem == self.rootItem:
            return QModelIndex()
    
        return self.createIndex(parentItem.row(), 0, parentItem)
        
    def rowCount(self, parent):
        if (parent.column() > 0):
            return 0
    
        if not parent.isValid():
            parentItem = self.rootItem
        else:
            parentItem = parent.internalPointer()
    
        return parentItem.childCount()
        
    def columnCount(self, parent):
        if parent.isValid():
            return parent.internalPointer().columnCount()
        else:
            return self.rootItem.columnCount()
        
    def data(self, index, role):
        if ( not index.isValid()):
            return QVariant()
    
        if (role != Qt.DisplayRole):
            return QVariant()
    
        item = index.internalPointer()
        return QVariant(item.data(index.column()))
        
    def flags(self, index):
        if not index.isValid():
            return 0
    
        return Qt.ItemIsEnabled | Qt.ItemIsSelectable
        
    def headerData(self, section, orientation, role):
        if (orientation == Qt.Horizontal and role == Qt.DisplayRole):
            return QVariant(self.rootItem.data(section))
    
        return QVariant()
        
        
