diff options
Diffstat (limited to 'src/include/stationlist.h')
-rw-r--r-- | src/include/stationlist.h | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/src/include/stationlist.h b/src/include/stationlist.h new file mode 100644 index 0000000..dcacdca --- /dev/null +++ b/src/include/stationlist.h @@ -0,0 +1,159 @@ +/*************************************************************************** + stationlist.h - description + ------------------- + begin : Sat March 29 2003 + copyright : (C) 2003 by Klas Kalass + email : [email protected] + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef STATIONLIST_H +#define STATIONLIST_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "stationlistmetadata.h" +#include "errorlog-interfaces.h" + +#include <tqptrlist.h> + +class RadioStation; +class KURL; + +/* + + Why an own Station List ? + + RadioStations are used everywhere. But who is responsible for them? + Especially after a list merge? + + A very simple solution should be a StationList with "deep copies". Though + this is not very efficient, we can assume, that copy operations do not + take place very often and thus are not critical. + + + Why don't we use TQValueList then? + + We are using polymorphic radio stations, thus we cannot use a template + using instances of a base class and copying them with a copy constructor. + But as each derived class has its own copy() function, we are able to create + exact copies from a pointer with the type of our base class "RadioStation". + +*/ + + +class RawStationList : public TQPtrList<RadioStation> +{ +public: + + typedef TQPtrListIterator<RadioStation> Iterator; + typedef TQPtrList<RadioStation> BaseClass; + +public: + RawStationList (); + RawStationList (const RawStationList &sl); + ~RawStationList (); + + // overwrite all insert-methods in order to change + // multiple insertion of same station_id into an update + + bool insert (uint index, const RadioStation *item); + bool insert (const RadioStation *item); + void inSort (const RadioStation *item); + void prepend (const RadioStation *item); + void append (const RadioStation *item); + bool replace (uint index, const RadioStation *item); + + // simplify stationIDSearch + + const RadioStation & stationWithID(const TQString &sid) const; + RadioStation & stationWithID(const TQString &sid); + + int idxWithID(const TQString &sid) const; + + bool operator == (const RawStationList &l) const; + bool operator != (const RawStationList &l) const { return !operator==(l); } + +protected: + + TQPtrCollection::Item newItem (TQPtrCollection::Item s); + void deleteItem (TQPtrCollection::Item s); + + int compareItems (TQPtrCollection::Item a, TQPtrCollection::Item b); +}; + + + + +/** + * Contains a list of stations, including meta data + * @author Klas Kalass, Ernst Martin Witte + */ + +class StationList { +public: + StationList(); + StationList(const StationList &sl); + ~StationList(); + + // some usefull "proxy" functions + + int count() const { return m_all.count(); } + const RadioStation & at(int idx) const; + RadioStation & at(int idx); + + const RadioStation & stationWithID(const TQString &sid) const; + RadioStation & stationWithID(const TQString &sid); + + // all stations, with full access + RawStationList & all() { return m_all; } + RawStationList const & all() const { return m_all; } + + // the meta data for this station List, with full access + StationListMetaData & metaData() { return m_metaData; } + StationListMetaData const & metaData() const { return m_metaData; } + + // we do not need a special matchingStation/find/... method because + // it is already implemented in RawStationList + + /** + * merges the other list into this one. creates copies from the stations. + */ + void merge(const StationList &other); + + // assignment + + StationList &operator = (const StationList &sl); + + + // xml in/out + + bool readXML (const TQString &dat, const IErrorLogClient &logger, bool enableMessageBox = true); + bool readXML (const KURL &url, const IErrorLogClient &logger, bool enableMessageBox = true); + + TQString writeXML (const IErrorLogClient &logger) const; + bool writeXML (const KURL &url, const IErrorLogClient &logger, bool enableMessageBox = true) const; + + + bool operator == (const StationList &x) const { return m_all == x.m_all && m_metaData == x.m_metaData; } + bool operator != (const StationList &x) const { return !operator ==(x); } + +protected: + RawStationList m_all; + StationListMetaData m_metaData; +}; + + +extern const StationList emptyStationList; + +#endif |