1
/***************************************************************************
2
stationselector.cpp - description
5
copyright : (C) 2003 by Martin Witte
6
email : witte@kawo1.rwth-aachen.de
7
***************************************************************************/
9
/***************************************************************************
11
* This program is free software; you can redistribute it and/or modify *
12
* it under the terms of the GNU General Public License as published by *
13
* the Free Software Foundation; either version 2 of the License, or *
14
* (at your option) any later version. *
16
***************************************************************************/
20
#include <kpushbutton.h>
23
#include "../libkradio/stationlist.h"
24
#include "../radio-stations/radiostation.h"
26
#include "stationselector.h"
27
#include "radiostation-listview.h"
29
StationSelector::StationSelector (QWidget *parent)
30
: StationSelectorUI(parent),
33
QObject::connect(buttonToLeft, SIGNAL(clicked()), this, SLOT(slotButtonToLeft()));
34
QObject::connect(buttonToRight, SIGNAL(clicked()), this, SLOT(slotButtonToRight()));
35
QObject::connect(listAvailable, SIGNAL(sigStationsReceived(const QStringList&)), this, SLOT(slotMoveToLeft(const QStringList&)));
36
QObject::connect(listSelected, SIGNAL(sigStationsReceived(const QStringList&)), this, SLOT(slotMoveToRight(const QStringList&)));
38
listSelected->setSelectionMode(QListView::Extended);
39
listAvailable->setSelectionMode(QListView::Extended);
43
StationSelector::~StationSelector ()
48
bool StationSelector::connectI(Interface *i)
50
bool a = IStationSelectionClient::connectI(i);
51
bool b = IRadioClient::connectI(i);
56
bool StationSelector::disconnectI(Interface *i)
58
bool a = IStationSelectionClient::disconnectI(i);
59
bool b = IRadioClient::disconnectI(i);
64
bool StationSelector::noticeStationSelectionChanged(const QStringList &sl)
66
m_stationIDsNotDisplayed.clear();
67
m_stationIDsSelected.clear();
68
m_stationIDsAvailable.clear();
70
for (unsigned int i = 0; i < m_stationIDsAll.count(); ++i) {
71
if (sl.contains(m_stationIDsAll[i])) {
72
m_stationIDsSelected.append(m_stationIDsAll[i]);
74
m_stationIDsAvailable.append(m_stationIDsAll[i]);
77
for (unsigned int i = 0; i < sl.count(); ++i) {
78
if (!m_stationIDsAll.contains(sl[i]))
79
m_stationIDsNotDisplayed.append(sl[i]);
87
bool StationSelector::noticeStationsChanged(const StationList &sl)
91
listAvailable->clear();
92
listSelected->clear();
94
m_stationIDsAvailable.clear();
95
m_stationIDsAll.clear();
97
for (unsigned int i = 0; i < m_stationIDsSelected.count(); ++i)
98
m_stationIDsNotDisplayed.append(m_stationIDsSelected[i]);
100
m_stationIDsSelected.clear();
102
for (RawStationList::Iterator i(sl.all()); i.current(); ++i) {
103
const QString &id = i.current()->stationID();
105
m_stationIDsAll.append(id);
106
if (m_stationIDsNotDisplayed.contains(id)) {
107
m_stationIDsNotDisplayed.remove(id);
108
m_stationIDsSelected.append(id);
110
m_stationIDsAvailable.append(id);
119
void StationSelector::slotButtonToLeft()
122
listAvailable->clearSelection();
123
QListViewItem *item = listSelected->firstChild();
126
QListViewItem *next_item = item->nextSibling();
128
if (item->isSelected()) {
130
moveItem (listSelected, m_stationIDsSelected,
132
listAvailable, m_stationIDsAvailable);
142
void StationSelector::slotButtonToRight()
145
listSelected->clearSelection();
146
QListViewItem *item = listAvailable->firstChild();
149
QListViewItem *next_item = item->nextSibling();
151
if (item->isSelected()) {
153
moveItem (listAvailable, m_stationIDsAvailable,
155
listSelected, m_stationIDsSelected);
165
void StationSelector::slotMoveToRight(const QStringList &list)
168
listSelected->clearSelection();
169
QListViewItem *item = listAvailable->firstChild();
172
QListViewItem *next_item = item->nextSibling();
174
if (list.contains(m_stationIDsAvailable[idx_from])) {
176
moveItem (listAvailable, m_stationIDsAvailable,
178
listSelected, m_stationIDsSelected);
188
void StationSelector::slotMoveToLeft(const QStringList &list)
191
listAvailable->clearSelection();
192
QListViewItem *item = listSelected->firstChild();
195
QListViewItem *next_item = item->nextSibling();
197
if (list.contains(m_stationIDsSelected[idx_from])) {
199
moveItem (listSelected, m_stationIDsSelected,
201
listAvailable, m_stationIDsAvailable);
211
void StationSelector::moveItem(
212
RadioStationListView *fromListView,
213
QStringList &fromIDList,
216
RadioStationListView *toListView,
217
QStringList &toIDList
220
fromListView->takeItem(item, idx_from);
222
QString id = fromIDList[idx_from];
223
fromIDList.remove(fromIDList.at(idx_from));
225
unsigned int idx_to = 0,
228
QListViewItem *item_to = toListView->firstChild(),
229
*prev_item_to = NULL;
231
while (idx_all < m_stationIDsAll.count() &&
232
idx_to < toIDList.count())
234
while (m_stationIDsAll[idx_all] != toIDList[idx_to])
236
if (m_stationIDsAll[idx_all] == id) {
245
prev_item_to = item_to;
246
item_to = item_to->nextSibling();
250
toIDList.insert(toIDList.at(idx_to), id);
251
toListView->insertItem(item, id, idx_to);
253
item->moveItem(prev_item_to);
255
item->moveItem(item_to);
256
if (item_to) item_to->moveItem(item);
261
void StationSelector::updateListViews()
263
listAvailable->clear();
264
listSelected->clear();
265
const StationList &stations = queryStations();
266
const RawStationList &sl = stations.all();
268
for (unsigned int i = 0; i < m_stationIDsAvailable.count(); ++i) {
269
QString id = m_stationIDsAvailable[i];
270
listAvailable->appendStation(sl.stationWithID(id), sl.idxWithID(id)+1);
272
for (unsigned int i = 0; i < m_stationIDsSelected.count(); ++i) {
273
QString id = m_stationIDsSelected[i];
274
listSelected->appendStation(sl.stationWithID(id), sl.idxWithID(id)+1);
279
void StationSelector::slotOK()
282
QStringList l = m_stationIDsSelected;
283
for (unsigned int i = 0; i < m_stationIDsNotDisplayed.count(); ++i)
284
l.append(m_stationIDsNotDisplayed[i]);
285
sendStationSelection(l);
291
void StationSelector::slotCancel()
294
noticeStationSelectionChanged(queryStationSelection());
300
void StationSelector::saveState (KConfig *cfg) const
302
listSelected->saveState(cfg);
303
listAvailable->saveState(cfg);
307
void StationSelector::restoreState (KConfig *cfg)
309
listSelected->restoreState(cfg);
310
listAvailable->restoreState(cfg);
313
void StationSelector::slotSetDirty()
321
#include "stationselector.moc"