1 #include "SUIT_SelectionMgr.h"
3 SUIT_SelectionMgr::SUIT_SelectionMgr( const bool Feedback )
4 : myIterations( Feedback ? 1 : 0 ),
5 myIsSelChangeEnabled( true )
9 SUIT_SelectionMgr::~SUIT_SelectionMgr()
13 void SUIT_SelectionMgr::installSelector( SUIT_Selector* sel )
15 if ( sel && !mySelectors.contains( sel ) )
16 mySelectors.append( sel );
19 void SUIT_SelectionMgr::removeSelector( SUIT_Selector* sel )
21 mySelectors.remove( sel );
24 void SUIT_SelectionMgr::selectors( QPtrList<SUIT_Selector>& lst ) const
27 for ( SelectorListIterator it( mySelectors ); it.current(); ++it )
28 lst.append( it.current() );
31 void SUIT_SelectionMgr::selectors( const QString& typ, QPtrList<SUIT_Selector>& lst ) const
34 for ( SelectorListIterator it( mySelectors ); it.current(); ++it )
36 if ( it.current()->type() == typ )
37 lst.append( it.current() );
41 void SUIT_SelectionMgr::setEnabled( const bool on, const QString& typ )
43 for ( SelectorListIterator it( mySelectors ); it.current(); ++it )
45 if ( typ.isEmpty() || it.current()->type() == typ )
46 it.current()->setEnabled( on );
50 void SUIT_SelectionMgr::selected( SUIT_DataOwnerPtrList& lst ) const
54 QMap<const SUIT_DataOwner*, int> map;
55 for ( SelectorListIterator it( mySelectors ); it.current(); ++it )
57 SUIT_DataOwnerPtrList curList;
58 it.current()->selected( curList );
59 for ( SUIT_DataOwnerPtrList::const_iterator itr = curList.begin(); itr != curList.end(); ++itr )
61 const SUIT_DataOwnerPtr& ptr = *itr;
62 if ( !map.contains( ptr.operator->() ) )
64 map.insert( ptr.operator->(), 0 );
69 void SUIT_SelectionMgr::setSelected( const SUIT_DataOwnerPtrList& lst, const bool append )
71 SUIT_DataOwnerPtrList owners;
72 filterOwners( lst, owners );
74 for ( SelectorListIterator it( mySelectors ); it.current(); ++it )
78 SUIT_DataOwnerPtrList current;
79 it.current()->selected( current );
80 for ( SUIT_DataOwnerPtrList::const_iterator it = current.begin(); it != current.end(); ++it )
83 it.current()->setSelected( owners );
87 void SUIT_SelectionMgr::clearSelected()
89 setSelected( SUIT_DataOwnerPtrList() );
92 void SUIT_SelectionMgr::selectionChanged( SUIT_Selector* sel )
94 if ( !sel || !myIsSelChangeEnabled || !sel->isEnabled() )
97 SUIT_DataOwnerPtrList owners;
99 myIsSelChangeEnabled = false;
100 sel->selected( owners );
102 SUIT_DataOwnerPtrList newOwners;
103 filterOwners( owners, newOwners );
105 for ( int i = 0; i < myIterations; i++ )
107 for ( SUIT_Selector* aSel = mySelectors.first(); aSel; aSel = mySelectors.next() )
110 aSel->setSelected( newOwners );
113 myIsSelChangeEnabled = true;
115 emit selectionChanged();
118 bool SUIT_SelectionMgr::hasSelectionMode( const int mode ) const
120 return mySelModes.contains( mode );
123 void SUIT_SelectionMgr::selectionModes( QValueList<int>& vals ) const
128 void SUIT_SelectionMgr::setSelectionModes( const int mode )
132 setSelectionModes( lst );
135 void SUIT_SelectionMgr::setSelectionModes( const QValueList<int>& lst )
140 void SUIT_SelectionMgr::appendSelectionModes( const int mode )
144 appendSelectionModes( lst );
147 void SUIT_SelectionMgr::appendSelectionModes( const QValueList<int>& lst )
150 for ( QValueList<int>::const_iterator it = mySelModes.begin(); it != mySelModes.end(); ++it )
151 map.insert( *it, 0 );
153 for ( QValueList<int>::const_iterator itr = lst.begin(); itr != lst.end(); ++itr )
155 if ( !map.contains( *itr ) )
156 mySelModes.append( *itr );
160 void SUIT_SelectionMgr::removeSelectionModes( const int mode )
164 removeSelectionModes( lst );
167 void SUIT_SelectionMgr::removeSelectionModes( const QValueList<int>& lst )
170 for ( QValueList<int>::const_iterator it = mySelModes.begin(); it != mySelModes.end(); ++it )
171 map.insert( *it, 0 );
173 for ( QValueList<int>::const_iterator itr = lst.begin(); itr != lst.end(); ++itr )
177 for ( QMap<int, int>::ConstIterator iter = map.begin(); iter != map.end(); ++iter )
178 mySelModes.append( iter.key() );
181 bool SUIT_SelectionMgr::isOk( const SUIT_DataOwner* owner ) const
187 for ( SelFilterListIterator it( myFilters ); it.current() && ok; ++it )
188 ok = it.current()->isOk( owner );
193 bool SUIT_SelectionMgr::isOk( const SUIT_DataOwnerPtr& ptr ) const
198 return isOk( ptr.operator->() );
201 bool SUIT_SelectionMgr::hasFilter( SUIT_SelectionFilter* f ) const
203 return myFilters.contains( f );
206 void SUIT_SelectionMgr::installFilter( SUIT_SelectionFilter* f )
208 if ( !hasFilter( f ) )
209 myFilters.append( f );
212 void SUIT_SelectionMgr::removeFilter( SUIT_SelectionFilter* f )
214 myFilters.remove( f );
217 void SUIT_SelectionMgr::clearFilters()
222 bool SUIT_SelectionMgr::autoDeleteFilter() const
224 return myFilters.autoDelete();
227 void SUIT_SelectionMgr::setAutoDeleteFilter( const bool on )
229 myFilters.setAutoDelete( on );
232 void SUIT_SelectionMgr::filterOwners( const SUIT_DataOwnerPtrList& in, SUIT_DataOwnerPtrList& out ) const
235 for ( SUIT_DataOwnerPtrList::const_iterator it = in.begin(); it != in.end(); ++it )