| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 | 
							- /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
 
-  * Qwt Widget Library
 
-  * Copyright (C) 1997   Josef Wilgen
 
-  * Copyright (C) 2002   Uwe Rathmann
 
-  *
 
-  * This library is free software; you can redistribute it and/or
 
-  * modify it under the terms of the Qwt License, Version 1.0
 
-  *****************************************************************************/
 
- #include "qwt_plot_dict.h"
 
- class QwtPlotDict::PrivateData
 
- {
 
- public:
 
-     class ItemList: public QList<QwtPlotItem *>
 
-     {
 
-     public:
 
-         void insertItem( QwtPlotItem *item )
 
-         {
 
-             if ( item == NULL )
 
-                 return;
 
-             QList<QwtPlotItem *>::iterator it =
 
-                 qUpperBound( begin(), end(), item, LessZThan() );
 
-             insert( it, item );
 
-         }
 
-         void removeItem( QwtPlotItem *item )
 
-         {
 
-             if ( item == NULL )
 
-                 return;
 
-             QList<QwtPlotItem *>::iterator it =
 
-                 qLowerBound( begin(), end(), item, LessZThan() );
 
-             for ( ; it != end(); ++it )
 
-             {
 
-                 if ( item == *it )
 
-                 {
 
-                     erase( it );
 
-                     break;
 
-                 }
 
-             }
 
-         }
 
-     private:
 
-         class LessZThan
 
-         {
 
-         public:
 
-             inline bool operator()( const QwtPlotItem *item1,
 
-                 const QwtPlotItem *item2 ) const
 
-             {
 
-                 return item1->z() < item2->z();
 
-             }
 
-         };
 
-     };
 
-     ItemList itemList;
 
-     bool autoDelete;
 
- };
 
- /*!
 
-    Constructor
 
-    Auto deletion is enabled.
 
-    \sa setAutoDelete(), attachItem()
 
- */
 
- QwtPlotDict::QwtPlotDict()
 
- {
 
-     d_data = new QwtPlotDict::PrivateData;
 
-     d_data->autoDelete = true;
 
- }
 
- /*!
 
-    Destructor
 
-    If autoDelete is on, all attached items will be deleted
 
-    \sa setAutoDelete(), autoDelete(), attachItem()
 
- */
 
- QwtPlotDict::~QwtPlotDict()
 
- {
 
-     detachItems( QwtPlotItem::Rtti_PlotItem, d_data->autoDelete );
 
-     delete d_data;
 
- }
 
- /*!
 
-    En/Disable Auto deletion
 
-    If Auto deletion is on all attached plot items will be deleted
 
-    in the destructor of QwtPlotDict. The default value is on.
 
-    \sa autoDelete(), attachItem()
 
- */
 
- void QwtPlotDict::setAutoDelete( bool autoDelete )
 
- {
 
-     d_data->autoDelete = autoDelete;
 
- }
 
- /*!
 
-    \return true if auto deletion is enabled
 
-    \sa setAutoDelete(), attachItem()
 
- */
 
- bool QwtPlotDict::autoDelete() const
 
- {
 
-     return d_data->autoDelete;
 
- }
 
- /*!
 
-    Attach/Detach a plot item
 
-    Attached items will be deleted in the destructor,
 
-    if auto deletion is enabled (default). Manually detached
 
-    items are not deleted.
 
-    \param item Plot item to attach/detach
 
-    \ on If true attach, else detach the item
 
-    \sa setAutoDelete(), ~QwtPlotDict()
 
- */
 
- void QwtPlotDict::attachItem( QwtPlotItem *item, bool on )
 
- {
 
-     if ( on )
 
-         d_data->itemList.insertItem( item );
 
-     else
 
-         d_data->itemList.removeItem( item );
 
- }
 
- /*!
 
-    Detach items from the dictionary
 
-    \param rtti In case of QwtPlotItem::Rtti_PlotItem detach all items
 
-                otherwise only those items of the type rtti.
 
-    \param autoDelete If true, delete all detached items
 
- */
 
- void QwtPlotDict::detachItems( int rtti, bool autoDelete )
 
- {
 
-     PrivateData::ItemList list = d_data->itemList;
 
-     QwtPlotItemIterator it = list.begin();
 
-     while ( it != list.end() )
 
-     {
 
-         QwtPlotItem *item = *it;
 
-         ++it; // increment before removing item from the list
 
-         if ( rtti == QwtPlotItem::Rtti_PlotItem || item->rtti() == rtti )
 
-         {
 
-             item->attach( NULL );
 
-             if ( autoDelete )
 
-                 delete item;
 
-         }
 
-     }
 
- }
 
- /*!
 
-   \brief A QwtPlotItemList of all attached plot items.
 
-   Use caution when iterating these lists, as removing/detaching an item will
 
-   invalidate the iterator. Instead you can place pointers to objects to be
 
-   removed in a removal list, and traverse that list later.
 
-   \return List of all attached plot items.
 
- */
 
- const QwtPlotItemList &QwtPlotDict::itemList() const
 
- {
 
-     return d_data->itemList;
 
- }
 
- /*!
 
-   \return List of all attached plot items of a specific type.
 
-   \sa QwtPlotItem::rtti()
 
- */
 
- QwtPlotItemList QwtPlotDict::itemList( int rtti ) const
 
- {
 
-     if ( rtti == QwtPlotItem::Rtti_PlotItem )
 
-         return d_data->itemList;
 
-     QwtPlotItemList items;
 
-     PrivateData::ItemList list = d_data->itemList;
 
-     for ( QwtPlotItemIterator it = list.begin(); it != list.end(); ++it )
 
-     {
 
-         QwtPlotItem *item = *it;
 
-         if ( item->rtti() == rtti )
 
-             items += item;
 
-     }
 
-     return items;
 
- }
 
 
  |