source: ntrip/trunk/BNC/qwtpolar/qwt_polar_itemdict.cpp@ 10404

Last change on this file since 10404 was 8127, checked in by stoecker, 8 years ago

update qwt and qwtpolar, many QT5 fixes (unfinished)

File size: 4.0 KB
Line 
1/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
2 * QwtPolar Widget Library
3 * Copyright (C) 2008 Uwe Rathmann
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the Qwt License, Version 1.0
7 *****************************************************************************/
8
9#include "qwt_polar_itemdict.h"
10
11class QwtPolarItemDict::PrivateData
12{
13public:
14 class ItemList: public QList<QwtPolarItem *>
15 {
16 public:
17 void insertItem( QwtPolarItem *item )
18 {
19 if ( item == NULL )
20 return;
21
22 // Unfortunately there is no inSort operation
23 // for lists in Qt4. The implementation below
24 // is slow, but there shouldn't be many plot items.
25
26 QList<QwtPolarItem *>::Iterator it;
27 for ( it = begin(); it != end(); ++it )
28 {
29 if ( *it == item )
30 return;
31
32 if ( ( *it )->z() > item->z() )
33 {
34 insert( it, item );
35 return;
36 }
37 }
38 append( item );
39 }
40
41 void removeItem( QwtPolarItem *item )
42 {
43 if ( item == NULL )
44 return;
45
46 int i = 0;
47
48 QList<QwtPolarItem *>::Iterator it;
49 for ( it = begin(); it != end(); ++it )
50 {
51 if ( item == *it )
52 {
53 removeAt( i );
54 return;
55 }
56 i++;
57 }
58 }
59 };
60
61 ItemList itemList;
62 bool autoDelete;
63};
64
65/*!
66 Constructor
67
68 Auto deletion is enabled.
69 \sa setAutoDelete, attachItem
70*/
71QwtPolarItemDict::QwtPolarItemDict()
72{
73 d_data = new QwtPolarItemDict::PrivateData;
74 d_data->autoDelete = true;
75}
76
77/*!
78 Destructor
79
80 If autoDelete is on, all attached items will be deleted
81 \sa setAutoDelete, autoDelete, attachItem
82*/
83QwtPolarItemDict::~QwtPolarItemDict()
84{
85 detachItems( QwtPolarItem::Rtti_PolarItem, d_data->autoDelete );
86 delete d_data;
87}
88
89/*!
90 En/Disable Auto deletion
91
92 If Auto deletion is on all attached plot items will be deleted
93 in the destructor of QwtPolarItemDict. The default value is on.
94
95 \sa autoDelete, attachItem
96*/
97void QwtPolarItemDict::setAutoDelete( bool autoDelete )
98{
99 d_data->autoDelete = autoDelete;
100}
101
102/*!
103 \return true if auto deletion is enabled
104 \sa setAutoDelete, attachItem
105*/
106bool QwtPolarItemDict::autoDelete() const
107{
108 return d_data->autoDelete;
109}
110
111/*!
112 Insert a plot item
113
114 \param item PlotItem
115 \sa removeItem()
116 */
117void QwtPolarItemDict::insertItem( QwtPolarItem *item )
118{
119 d_data->itemList.insertItem( item );
120}
121
122/*!
123 Remove a plot item
124
125 \param item PlotItem
126 \sa insertItem()
127 */
128void QwtPolarItemDict::removeItem( QwtPolarItem *item )
129{
130 d_data->itemList.removeItem( item );
131}
132
133/*!
134 Detach items from the dictionary
135
136 \param rtti In case of QwtPolarItem::Rtti_PlotItem detach all items
137 otherwise only those items of the type rtti.
138 \param autoDelete If true, delete all detached items
139*/
140void QwtPolarItemDict::detachItems( int rtti, bool autoDelete )
141{
142 PrivateData::ItemList list = d_data->itemList;
143 QwtPolarItemIterator it = list.begin();
144 while ( it != list.end() )
145 {
146 QwtPolarItem *item = *it;
147
148 ++it; // increment before removing item from the list
149
150 if ( rtti == QwtPolarItem::Rtti_PolarItem || item->rtti() == rtti )
151 {
152 item->attach( NULL );
153 if ( autoDelete )
154 delete item;
155 }
156 }
157}
158
159/*!
160 \brief A QwtPolarItemList of all attached plot items.
161
162 \return List of all attached plot items.
163 \note Use caution when iterating these lists, as removing/detaching
164 an item will invalidate the iterator.
165 Instead you can place pointers to objects to be
166 removed in a removal list, and traverse that list later.
167*/
168const QwtPolarItemList &QwtPolarItemDict::itemList() const
169{
170 return d_data->itemList;
171}
Note: See TracBrowser for help on using the repository browser.