summaryrefslogtreecommitdiffstats
path: root/src/radiostation-listview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/radiostation-listview.cpp')
-rw-r--r--src/radiostation-listview.cpp259
1 files changed, 259 insertions, 0 deletions
diff --git a/src/radiostation-listview.cpp b/src/radiostation-listview.cpp
new file mode 100644
index 0000000..4c7fe64
--- /dev/null
+++ b/src/radiostation-listview.cpp
@@ -0,0 +1,259 @@
+/***************************************************************************
+ radiostation-listview.cpp - description
+ -------------------
+ begin : Mi Feb 3 2004
+ copyright : (C) 2003 by Martin Witte
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "include/radiostation-listview.h"
+#include "include/stationlist.h"
+#include "include/radiostation.h"
+#include "include/station-drag-object.h"
+
+#include <tdelocale.h>
+#include <tqfile.h>
+#include <tqimage.h>
+#include <tqpixmap.h>
+
+#include <tdeconfig.h>
+
+RadioStationListView::RadioStationListView(TQWidget *parent, const char *name)
+ : TDEListView(parent, name)
+{
+ addColumn(i18n("No."));
+ addColumn(i18n("Icon"));
+ addColumn(i18n("Station"));
+ addColumn(i18n("Description"));
+ setAllColumnsShowFocus(true);
+ setSorting(-1);
+
+ TQObject::connect(this, TQT_SIGNAL(spacePressed(TQListViewItem*)),
+ this, TQT_SLOT(slotStationActivation(TQListViewItem* )));
+ TQObject::connect(this, TQT_SIGNAL(returnPressed(TQListViewItem*)),
+ this, TQT_SLOT(slotStationActivation(TQListViewItem* )));
+ TQObject::connect(this, TQT_SIGNAL(doubleClicked(TQListViewItem*)),
+ this, TQT_SLOT(slotStationActivation(TQListViewItem *)));
+ TQObject::connect(this, TQT_SIGNAL(currentChanged(TQListViewItem*)),
+ this, TQT_SLOT(slotCurrentStationChanged(TQListViewItem *)));
+
+ setAcceptDrops(true);
+}
+
+
+RadioStationListView::~RadioStationListView()
+{
+}
+
+
+TQListViewItem *RadioStationListView::getItemForIndex(int idx) const
+{
+ TQListViewItem *item = NULL;
+
+ if (idx >= 0 && idx < childCount()) {
+ item = firstChild();
+ int i = 0;
+ while (item && i < idx) {
+ item = item->nextSibling();
+ ++i;
+ }
+ }
+ return item;
+}
+
+
+int RadioStationListView::getIndexForItem(TQListViewItem *queryItem) const
+{
+ int idx = -1;
+
+ if (queryItem) {
+ TQListViewItem *item = firstChild();
+ ++idx;
+ while (item && item != queryItem) {
+ item = item->nextSibling();
+ ++idx;
+ }
+ if (!item)
+ idx = -1;
+ }
+
+ return idx;
+}
+
+
+void RadioStationListView::setStation(int idx, const RadioStation &s, int nr)
+{
+ TQListViewItem *item = getItemForIndex(idx);
+
+ if (idx < 0) {
+ item = new TQListViewItem(this, firstChild());
+ firstChild()->moveItem(item);
+ m_StationIDs.prepend(s.stationID());
+ idx = 0;
+ } else if (idx >= childCount()) {
+ item = new TQListViewItem(this, lastChild());
+ m_StationIDs.append(s.stationID());
+ idx = childCount() - 1;
+ }
+
+ if (item) {
+ item->setDragEnabled(true);
+ item->setDropEnabled(true);
+
+ item->setText(0, TQString::number(nr > 0 ? nr : idx+1));
+ item->setText(2, s.name());
+ item->setText(3, s.description());
+
+ m_StationIDs[idx] = s.stationID();
+
+ TQImage img(s.iconName());
+ if (!img.isNull()) {
+ int h = img.height();
+ float f = 0.9 * (float)(item->height()) / (h ? (float)h : 1.0);
+ item->setPixmap(1, img.smoothScale((int)(img.width()*f), (int)(h * f)));
+ } else {
+ item->setPixmap(1, TQPixmap());
+ }
+ }
+}
+
+
+void RadioStationListView::appendStation(const RadioStation &st, int nr)
+{
+ setStation(childCount(), st, nr);
+}
+
+
+void RadioStationListView::setStations(const StationList &stations)
+{
+ clear();
+ for (RawStationList::Iterator it(stations.all()); it.current(); ++it) {
+ setStation(childCount(), *it.current());
+ }
+}
+
+
+void RadioStationListView::removeStation(int idx)
+{
+ TQListViewItem *item = getItemForIndex(idx);
+ if (item) {
+ delete item;
+ m_StationIDs.remove(m_StationIDs.at(idx));
+ }
+}
+
+void RadioStationListView::takeItem(TQListViewItem *item, int idx)
+{
+ TQListView::takeItem(item);
+ m_StationIDs.remove(m_StationIDs.at(idx));
+}
+
+void RadioStationListView::insertItem(TQListViewItem *item, const TQString &stationid, int idx_to)
+{
+ TQListView::insertItem(item);
+ m_StationIDs.insert(m_StationIDs.at(idx_to), stationid);
+}
+
+void RadioStationListView::setCurrentStation(int idx)
+{
+ TQListViewItem *item = getItemForIndex(idx);
+ if (item) {
+ clearSelection();
+ setSelected(item, true);
+ setCurrentItem(item);
+ }
+}
+
+
+int RadioStationListView::currentStationIndex() const
+{
+ return getIndexForItem(currentItem());
+}
+
+
+void RadioStationListView::slotStationActivation(TQListViewItem *item)
+{
+ emit sigStationActivated(getIndexForItem(item));
+}
+
+
+void RadioStationListView::slotCurrentStationChanged(TQListViewItem *item)
+{
+ emit sigCurrentStationChanged(getIndexForItem(item));
+}
+
+
+void RadioStationListView::saveState (TDEConfig *cfg) const
+{
+ if (!cfg)
+ return;
+ for (int i = 0; i < 4; ++i)
+ cfg->writeEntry(TQString(name()) + "_radiostation_listview_col_" + TQString::number(i), columnWidth(i));
+}
+
+
+void RadioStationListView::restoreState (TDEConfig *cfg)
+{
+ if (!cfg)
+ return;
+ for (int i = 0; i < 4; ++i)
+ setColumnWidth(i, cfg->readNumEntry(TQString(name()) + "_radiostation_listview_col_" + TQString::number(i), -1));
+}
+
+
+TQDragObject *RadioStationListView::dragObject()
+{
+ TQStringList list;
+ TQListViewItem *item = firstChild();
+ for (int idx = 0; item; ++idx, item = item->nextSibling()) {
+ if (item->isSelected()) {
+ list.append(m_StationIDs[idx]);
+ }
+ }
+ return new StationDragObject(list, this);
+}
+
+void RadioStationListView::dragEnterEvent(TQDragEnterEvent* event)
+{
+ event->accept(StationDragObject::canDecode(event));
+}
+
+void RadioStationListView::contentsDragEnterEvent(TQDragEnterEvent* event)
+{
+ bool a = StationDragObject::canDecode(event);
+ if (a)
+ IErrorLogClient::staticLogDebug(i18n("contentsDragEnterEvent accepted"));
+ else
+ IErrorLogClient::staticLogDebug(i18n("contentsDragEnterEvent rejected"));
+ event->accept(a);
+}
+
+void RadioStationListView::dropEvent(TQDropEvent* event)
+{
+ TQStringList list;
+
+ if ( StationDragObject::decode(event, list) ) {
+ emit sigStationsReceived(list);
+ }
+}
+
+void RadioStationListView::contentsDropEvent(TQDropEvent* event)
+{
+ dropEvent(event);
+}
+
+void RadioStationListView::contentsDragMoveEvent(TQDragMoveEvent* event)
+{
+ event->accept();
+}
+
+#include "radiostation-listview.moc"