Amarok's filesystem view looks like this:
Unfortunately, in PyQt4 (or Qt4) there's no easy way to have those checkBoxes so it would like this:
With some clever c++ hackery made by a member of the qtcentre forums I was able to translate that into PyQt4 despite not knowing c++ and some of Qt4 specific features such as QSet, which I still haven't the foggiest about.
This PyQt4 code, for future reference and to help some poor soul dealing with the lack of PyQt4 examples and documentation on the internet, looks exactly like this (one day I might properly explain or comment it:
from PyQt4.QtCore import QDirModelSimply put the above creates a "new" QDirModel Class with some custom methods as the default ones don't allow for this behaviour. Just swap where you were going to QDirModel with MyQDirModel.
checked = 
def data(self, index, role = Qt.DisplayRole):
if index.isValid() and (index.column() == 0) and (role == Qt.CheckStateRole):
# the item is checked only if we have stored its path
if self.filePath(index) in MyQDirModel.checked:
return QDirModel.data(self, index, role)
def flags(self, index):
if index.column() == 0: # make the first column checkable
return QDirModel.flags(self, index) | Qt.ItemIsUserCheckable
return QDirModel.flags(self, index)
def setData(self, index, value, role = Qt.EditRole):
if index.isValid() and (index.column() == 0) and role == Qt.CheckStateRole:
# store checked paths, remove unchecked paths
if (value == Qt.Checked):
return QDirModel.setData(self, index, value, role);
The result of all this? A filesystem view the same as Amarok's
So that's one of the thing's I've been recently working on for version 0.4.0. Other things include directory watching, equaliser and sessioning (your Ui settings are saved to be loaded on restart).
There's more to come for 0.4.0 so keep your eye's peeled.