One handy feature of amaroK's dynamic mode, the complation of a custom combination of playlists, are currently obscured behind right-mouse-button menus.
A while ago I thought of a
possible solution to this:
An idea struck me today. The Dynamic Playlists could be organized in a
similar fashion as the smart playlists.
*So, you would add a dynamic playlist to the collection, be shown a
dialog similar to partydialogbase currently plus a widget with all the
playlists possible for the Playlist Shuffle (with a checkbox for
each).
*You could drag or double click it like any other dynamic playlist
(perhaps dragging should incur one of those dialogs warning of its
destructive nature)
*There would need to be some method to indicate which dynamic playlist
is currently being played. Perhaps a bar across the top of the
playlist with the name of the currently playing dynamic playlist? This
would be nice anyways to indicate more clearly that you are in dynamic
mode.
*The dynamic playlists should be editable (they are not currently).
*There would be a selection of default dynamic playlists, so perhaps
partydialogbase wouldn't need the combo box anymore. It could assume a
Playlist Shuffle. Append Suggestions and Random could be default
dynamic playlists.
So the PlaylistBrowser KListView should sometimes have checkboxes and sometimes not. Sounds like a good time for inheritance, right? Actually no, and if it wasn't for `moc` I might of gotten away with it.
The problem is that to add a checkbox you have to use QCheckListItem which inherits QListViewItem. However we're currently using KListViewItem (to get the nice alternating background) which also inherits QListViewItem. So through normal inheritance its impossible to have an object that can have one or the other parent depending on the circumstance.
...unless you use a template, right? Since we actually subclass KListViewItem into classes like SmartPlaylist, PlaylistEntry a template could be used to determine at compile-time which parent class (QCheckListItem or KListViewItem) should be used.
However PlaylistEntry is a QObject (it uses threading to load playlists). `moc` forbides QObjects to be template classes. So I cursed moc and made a parent PlaylistEntry and had QObject and non-QObject subclasses. Once I figured out that I might have to do something similar with the KListView itself, I went to bed.
Today I implemented a much better solution, one that had actually been on the back of my mind the whole time. I iterate through the existing KListView and create new QCheckListItem's using the text() and pixmap()s of the KListViewItems. No refactoring needed.
Now I love the moc.
One handy feature of amaroK's dynamic mode, the complation of a custom combination of playlists, are currently obscured behind right-mouse-button menus.
A while ago I thought of a
possible solution to this:
An idea struck me today. The Dynamic Playlists could be organized in a
similar fashion as the smart playlists.
*So, you would add a dynamic playlist to the collection, be shown a
dialog similar to partydialogbase currently plus a widget with all the
playlists possible for the Playlist Shuffle (with a checkbox for
each).
*You could drag or double click it like any other dynamic playlist
(perhaps dragging should incur one of those dialogs warning of its
destructive nature)
*There would need to be some method to indicate which dynamic playlist
is currently being played. Perhaps a bar across the top of the
playlist with the name of the currently playing dynamic playlist? This
would be nice anyways to indicate more clearly that you are in dynamic
mode.
*The dynamic playlists should be editable (they are not currently).
*There would be a selection of default dynamic playlists, so perhaps
partydialogbase wouldn't need the combo box anymore. It could assume a
Playlist Shuffle. Append Suggestions and Random could be default
dynamic playlists.
So the PlaylistBrowser KListView should sometimes have checkboxes and sometimes not. Sounds like a good time for inheritance, right? Actually no, and if it wasn't for `moc` I might of gotten away with it.
The problem is that to add a checkbox you have to use QCheckListItem which inherits QListViewItem. However we're currently using KListViewItem (to get the nice alternating background) which also inherits QListViewItem. So through normal inheritance its impossible to have an object that can have one or the other parent depending on the circumstance.
...unless you use a template, right? Since we actually subclass KListViewItem into classes like SmartPlaylist, PlaylistEntry a template could be used to determine at compile-time which parent class (QCheckListItem or KListViewItem) should be used.
However PlaylistEntry is a QObject (it uses threading to load playlists). `moc` forbides QObjects to be template classes. So I cursed moc and made a parent PlaylistEntry and had QObject and non-QObject subclasses. Once I figured out that I might have to do something similar with the KListView itself, I went to bed.
Today I implemented a much better solution, one that had actually been on the back of my mind the whole time. I iterate through the existing KListView and create new QCheckListItem's using the text() and pixmap()s of the KListViewItems. No refactoring needed.
Now I love the moc.
Thursday, October 27. 2005
We're about 4 days away from the end of the fundraising drive, and I am really quite taken aback by the generosity of some people. We have had single donations of 100EUR and higher, as well as poor college students skipping lunch for a couple of days to give $5.
Of course, this pales in comparison to the value of the time many dedicated people have put into the development of the product, but I know it is done out of their love for music and their love for amaroK. So for them it may not seem like a donation, since it is something they enjoy working on. So to enable the effort to continue because so many users sacrificed some money to allow project expenses to be paid requires a gigantic thank you.
If you have given, thank you; if you have not given and are able to, please do. If you would like to contribute but cannot afford the expense, we always welcome spreading the word, either by telling people about amaroK, giving away copies of the amaroK LiveCD or by simply using it and providing feedback to make it better. Those are all invaluable contributions in and of themselves, and are a big part of what makes FLOSS work.
As we come upon the end, it is becoming clear that we probably won't make the goal without either extending the deadline or having a large benefactor come through and makeup the difference. Not sure what to do yet, but I guess we wait to see what the weekend brings.
Thank you again for your support, and roK on!