5
#include <krandomsequence.h>
7
SplitPlaylist *SplitPlaylist::Self=0;
9
SplitPlaylist::SplitPlaylist()
10
: Playlist(0, "SplitPlaylist"), Plugin(), nextItem(0), currentItem(0), previousItem(0)
15
void SplitPlaylist::init()
17
view=new View(this); // 195
18
connect(view->listView(), SIGNAL(doubleClicked(QListViewItem*)), SLOT(listItemSelected(QListViewItem*)));
19
connect(view, SIGNAL(shown()), SIGNAL(listShown()));
20
connect(view, SIGNAL(hidden()), SIGNAL(listHidden()));
25
SplitPlaylist::~SplitPlaylist()
30
void SplitPlaylist::reset()
34
setCurrent(i=static_cast<SafeListViewItem*>(view->listView()->firstChild()));
39
PlaylistItem *SplitPlaylist::next()
41
if (!nextItem) return 0;
44
if (!static_cast<SafeListViewItem*>(currentItem)->isOn())
50
PlaylistItem *SplitPlaylist::current()
55
PlaylistItem *SplitPlaylist::previous()
57
if (!previousItem) return 0;
58
setCurrent(previousItem);
61
if (!static_cast<SafeListViewItem*>(currentItem)->isOn())
67
PlaylistItem *SplitPlaylist::getFirst() const
69
return static_cast<SafeListViewItem*>(view->listView()->firstChild());
72
PlaylistItem *SplitPlaylist::getAfter(const PlaylistItem *item) const
75
return static_cast<SafeListViewItem*>(static_cast<const SafeListViewItem*>(item)->nextSibling());
79
bool SplitPlaylist::listVisible() const
81
return view->isVisible();
84
void SplitPlaylist::showList()
89
void SplitPlaylist::hideList()
94
void SplitPlaylist::clear()
96
view->listView()->clear();
99
void SplitPlaylist::addFile(const KURL &file, bool play)
101
view->addFile(file, play);
104
void SplitPlaylist::setNext(PlaylistItem *i)
109
void SplitPlaylist::setCurrent(PlaylistItem *i)
111
bool emitC=currentItem==0;
118
QRect rect(view->listView()->itemRect(static_cast<SafeListViewItem*>(current())));
119
rect.setWidth(view->listView()->viewport()->width());
121
view->listView()->viewport()->repaint(rect,true);
123
view->listView()->ensureItemVisible(static_cast<SafeListViewItem*>(current()));
124
QRect currentRect= view->listView()->itemRect(static_cast<SafeListViewItem*>(current()));
125
view->listView()->viewport()->repaint(currentRect);
127
setNext(static_cast<PlaylistItem*>(static_cast<SafeListViewItem*>(static_cast<SafeListViewItem*>(current())->itemBelow())));
128
setPrevious(static_cast<PlaylistItem*>(static_cast<SafeListViewItem*>(static_cast<SafeListViewItem*>(current())->itemAbove())));
130
if (emitC && i->playable())
134
void SplitPlaylist::setPrevious(PlaylistItem *i)
139
void SplitPlaylist::remove(PlaylistItem *i)
144
void SplitPlaylist::listItemSelected(QListViewItem *i)
146
setCurrent(static_cast<PlaylistItem*>(static_cast<SafeListViewItem*>(i)));
150
void SplitPlaylist::randomize()
152
// turning off sorting is necessary
153
// otherwise, the list will get randomized and promptly sorted again
154
view->setSorting(false);
155
List *lview = view->listView();
158
QList<QListViewItem> items;
159
for ( int i = 0; i < lview->childCount(); i++ )
161
list.append( (void*) i );
162
items.append( lview->itemAtIndex( i ) );
166
seq.randomize( &list );
168
for ( int i = 0; i < lview->childCount(); i++ )
170
lview->moveItem( items.take(), 0L,
171
lview->itemAtIndex( (int) list.take() ) );
174
setCurrent( currentItem );
177
void SplitPlaylist::sort()
179
view->setSorting(true);
180
setCurrent(currentItem);
183
#include "playlist.moc"