00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "qwt_plot_dict.h"
00013
00014 class QwtPlotDict::PrivateData
00015 {
00016 public:
00017
00018 #if QT_VERSION < 0x040000
00019 class ItemList: public QValueList<QwtPlotItem *>
00020 #else
00021 class ItemList: public QList<QwtPlotItem *>
00022 #endif
00023 {
00024 public:
00025 void insertItem(QwtPlotItem *item)
00026 {
00027 if ( item == NULL )
00028 return;
00029
00030
00031
00032
00033
00034 #ifdef __GNUC__
00035 #endif
00036
00037 #if QT_VERSION < 0x040000
00038 QValueListIterator<QwtPlotItem *> it;
00039 #else
00040 QList<QwtPlotItem *>::Iterator it;
00041 #endif
00042 for ( it = begin(); it != end(); ++it )
00043 {
00044 if ( *it == item )
00045 return;
00046
00047 if ( (*it)->z() > item->z() )
00048 {
00049 insert(it, item);
00050 return;
00051 }
00052 }
00053 append(item);
00054 }
00055
00056 void removeItem(QwtPlotItem *item)
00057 {
00058 if ( item == NULL )
00059 return;
00060
00061 int i = 0;
00062
00063 #if QT_VERSION < 0x040000
00064 QValueListIterator<QwtPlotItem *> it;
00065 #else
00066 QList<QwtPlotItem *>::Iterator it;
00067 #endif
00068 for ( it = begin(); it != end(); ++it )
00069 {
00070 if ( item == *it )
00071 {
00072 #if QT_VERSION < 0x040000
00073 remove(it);
00074 #else
00075 removeAt(i);
00076 #endif
00077 return;
00078 }
00079 i++;
00080 }
00081 }
00082 };
00083
00084 ItemList itemList;
00085 bool autoDelete;
00086 };
00087
00094 QwtPlotDict::QwtPlotDict()
00095 {
00096 d_data = new QwtPlotDict::PrivateData;
00097 d_data->autoDelete = true;
00098 }
00099
00106 QwtPlotDict::~QwtPlotDict()
00107 {
00108 detachItems(QwtPlotItem::Rtti_PlotItem, d_data->autoDelete);
00109 delete d_data;
00110 }
00111
00120 void QwtPlotDict::setAutoDelete(bool autoDelete)
00121 {
00122 d_data->autoDelete = autoDelete;
00123 }
00124
00129 bool QwtPlotDict::autoDelete() const
00130 {
00131 return d_data->autoDelete;
00132 }
00133
00146 void QwtPlotDict::attachItem(QwtPlotItem *item, bool on)
00147 {
00148 if ( on )
00149 d_data->itemList.insertItem(item);
00150 else
00151 d_data->itemList.removeItem(item);
00152 }
00153
00161 void QwtPlotDict::detachItems(int rtti, bool autoDelete)
00162 {
00163 PrivateData::ItemList list = d_data->itemList;
00164 QwtPlotItemIterator it = list.begin();
00165 while ( it != list.end() )
00166 {
00167 QwtPlotItem *item = *it;
00168
00169 ++it;
00170
00171 if ( rtti == QwtPlotItem::Rtti_PlotItem || item->rtti() == rtti )
00172 {
00173 item->attach(NULL);
00174 if ( autoDelete )
00175 delete item;
00176 }
00177 }
00178 }
00179
00181 const QwtPlotItemList &QwtPlotDict::itemList() const
00182 {
00183 return d_data->itemList;
00184 }