You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.6 KiB
128 lines
3.6 KiB
/****************************************************************************** |
|
* |
|
* Copyright 2008 Szymon Tomasz Stefanek <pragma@kvirc.net> |
|
* |
|
* 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. |
|
* |
|
* This program is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU General Public License |
|
* along with this program; if not, write to the Free Software |
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
* |
|
*******************************************************************************/ |
|
|
|
#include "messagelistview/core/messageitemsetmanager.h" |
|
#include "messagelistview/core/messageitem.h" |
|
|
|
namespace KMail |
|
{ |
|
|
|
namespace MessageListView |
|
{ |
|
|
|
namespace Core |
|
{ |
|
|
|
MessageItemSetManager::MessageItemSetManager() |
|
{ |
|
mSets = new QHash< MessageItemSetReference, QHash< MessageItem *, MessageItem * > * >(); |
|
} |
|
|
|
MessageItemSetManager::~MessageItemSetManager() |
|
{ |
|
clearAllSets(); |
|
delete mSets; |
|
} |
|
|
|
void MessageItemSetManager::clearAllSets() |
|
{ |
|
for ( QHash< MessageItemSetReference, QHash< MessageItem *, MessageItem * > * >::Iterator it = mSets->begin(); it != mSets->end(); ++it ) |
|
delete ( *it ); |
|
|
|
mSets->clear(); |
|
} |
|
|
|
void MessageItemSetManager::removeSet( MessageItemSetReference ref ) |
|
{ |
|
QHash< MessageItem *, MessageItem * > * set = mSets->value( static_cast< unsigned long int >( ref ), 0 ); |
|
if ( !set ) |
|
return; |
|
mSets->remove( static_cast< unsigned long int >( ref ) ); |
|
delete set; |
|
} |
|
|
|
QList< MessageItem * > MessageItemSetManager::messageItems( MessageItemSetReference ref ) |
|
{ |
|
QList< MessageItem * > ret; |
|
QHash< MessageItem *, MessageItem * > * set = mSets->value( static_cast< unsigned long int >( ref ), 0 ); |
|
if ( !set ) |
|
return ret; |
|
|
|
for ( QHash< MessageItem *, MessageItem * >::Iterator it = set->begin(); it != set->end(); ++it ) |
|
ret.append( *it ); |
|
|
|
return ret; |
|
} |
|
|
|
void MessageItemSetManager::removeMessageItemFromAllSets( MessageItem * mi ) |
|
{ |
|
QList< MessageItemSetReference > setsToBeKilled; |
|
|
|
for ( QHash< MessageItemSetReference, QHash< MessageItem *, MessageItem * > * >::Iterator it = mSets->begin(); it != mSets->end(); ++it ) |
|
{ |
|
( *it )->remove( mi ); |
|
if ( ( *it )->count() < 1 ) |
|
setsToBeKilled.append( it.key() ); |
|
} |
|
|
|
for ( QList< MessageItemSetReference >::Iterator it2 = setsToBeKilled.begin(); it2 != setsToBeKilled.end(); ++it2 ) |
|
removeSet( *it2 ); |
|
} |
|
|
|
MessageItemSetReference MessageItemSetManager::createSet() |
|
{ |
|
static unsigned long int uNextId = 0; |
|
uNextId++; |
|
|
|
QHash< MessageItem *, MessageItem * > * set = mSets->value( uNextId, 0 ); |
|
|
|
// Here we assume that having 2^32 sets is impossible |
|
// (that would be _at_least_ 2^32 * 8 bytes of allocated memory which is |
|
// quite a lot...) |
|
|
|
while( set ) |
|
{ |
|
uNextId++; |
|
set = mSets->value( uNextId, 0 ); |
|
} |
|
|
|
set = new QHash< MessageItem *, MessageItem * >(); |
|
mSets->insert( uNextId, set ); |
|
|
|
return static_cast< MessageItemSetReference >( uNextId ); |
|
} |
|
|
|
bool MessageItemSetManager::addMessageItem( MessageItemSetReference ref, MessageItem * mi ) |
|
{ |
|
QHash< MessageItem *, MessageItem * > * set = mSets->value( static_cast< unsigned long int >( ref ), 0 ); |
|
if ( !set ) |
|
return false; |
|
|
|
set->insert( mi, mi ); |
|
|
|
return true; |
|
} |
|
|
|
} // namespace Core |
|
|
|
} // namespace MessageListView |
|
|
|
} // namespace KMail |
|
|
|
|