• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

messagelist

  • sources
  • kde-4.12
  • kdepim
  • messagelist
  • core
messageitemsetmanager.cpp
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  * Copyright 2008 Szymon Tomasz Stefanek <pragma@kvirc.net>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  *
19  *******************************************************************************/
20 
21 #include "core/messageitemsetmanager.h"
22 #include "core/messageitem.h"
23 
24 using namespace MessageList::Core;
25 
26 MessageItemSetManager::MessageItemSetManager()
27 {
28  mSets = new QHash< MessageItemSetReference, QHash< MessageItem *, MessageItem * > * >();
29 }
30 
31 MessageItemSetManager::~MessageItemSetManager()
32 {
33  clearAllSets();
34  delete mSets;
35 }
36 
37 void MessageItemSetManager::clearAllSets()
38 {
39  QHash< MessageItemSetReference, QHash< MessageItem *, MessageItem * > * >::ConstIterator end( mSets->constEnd() );
40  for ( QHash< MessageItemSetReference, QHash< MessageItem *, MessageItem * > * >::ConstIterator it = mSets->constBegin(); it != end; ++it )
41  delete ( *it );
42 
43  mSets->clear();
44 }
45 
46 int MessageItemSetManager::setCount() const
47 {
48  return mSets->count();
49 }
50 
51 
52 void MessageItemSetManager::removeSet( MessageItemSetReference ref )
53 {
54  QHash< MessageItem *, MessageItem * > * set = mSets->value( static_cast< unsigned long int >( ref ), 0 );
55  if ( !set )
56  return;
57  mSets->remove( static_cast< unsigned long int >( ref ) );
58  delete set;
59 }
60 
61 QList< MessageItem * > MessageItemSetManager::messageItems( MessageItemSetReference ref )
62 {
63  QList< MessageItem * > ret;
64  QHash< MessageItem *, MessageItem * > * set = mSets->value( static_cast< unsigned long int >( ref ), 0 );
65  if ( !set )
66  return ret;
67 
68  QHash< MessageItem *, MessageItem * >::ConstIterator end( set->constEnd() );
69  for ( QHash< MessageItem *, MessageItem * >::ConstIterator it = set->constBegin(); it != end; ++it )
70  ret.append( *it );
71 
72  return ret;
73 }
74 
75 void MessageItemSetManager::removeMessageItemFromAllSets( MessageItem * mi )
76 {
77  QList< MessageItemSetReference > setsToBeKilled;
78  QHash< MessageItemSetReference, QHash< MessageItem *, MessageItem * > * >::ConstIterator end( mSets->end());
79 
80  for ( QHash< MessageItemSetReference, QHash< MessageItem *, MessageItem * > * >::ConstIterator it = mSets->constBegin(); it != end; ++it )
81  {
82  ( *it )->remove( mi );
83  if ( ( *it )->isEmpty() )
84  setsToBeKilled.append( it.key() );
85  }
86 
87  QList< MessageItemSetReference >::ConstIterator endit2( setsToBeKilled.constEnd() );
88  for ( QList< MessageItemSetReference >::ConstIterator it2 = setsToBeKilled.constBegin(); it2 != endit2; ++it2 )
89  removeSet( *it2 );
90 }
91 
92 MessageItemSetReference MessageItemSetManager::createSet()
93 {
94  static unsigned long int uNextId = 0;
95  uNextId++;
96 
97  QHash< MessageItem *, MessageItem * > * set = mSets->value( uNextId, 0 );
98 
99  // Here we assume that having 2^32 sets is impossible
100  // (that would be _at_least_ 2^32 * 8 bytes of allocated memory which is
101  // quite a lot...)
102 
103  while( set )
104  {
105  uNextId++;
106  set = mSets->value( uNextId, 0 );
107  }
108 
109  set = new QHash< MessageItem *, MessageItem * >();
110  mSets->insert( uNextId, set );
111 
112  return static_cast< MessageItemSetReference >( uNextId );
113 }
114 
115 bool MessageItemSetManager::addMessageItem( MessageItemSetReference ref, MessageItem * mi )
116 {
117  QHash< MessageItem *, MessageItem * > * set = mSets->value( static_cast< unsigned long int >( ref ), 0 );
118  if ( !set )
119  return false;
120 
121  set->insert( mi, mi );
122 
123  return true;
124 }
125 
MessageList::Core::MessageItemSetManager::MessageItemSetManager
MessageItemSetManager()
Definition: messageitemsetmanager.cpp:26
MessageList::Core::MessageItem
Definition: messageitem.h:50
MessageList::Core::MessageItemSetManager::removeMessageItemFromAllSets
void removeMessageItemFromAllSets(MessageItem *mi)
Definition: messageitemsetmanager.cpp:75
MessageList::Core::MessageItemSetManager::~MessageItemSetManager
~MessageItemSetManager()
Definition: messageitemsetmanager.cpp:31
MessageList::Core::MessageItemSetManager::messageItems
QList< MessageItem * > messageItems(MessageItemSetReference ref)
Definition: messageitemsetmanager.cpp:61
MessageList::Core::MessageItemSetManager::clearAllSets
void clearAllSets()
Definition: messageitemsetmanager.cpp:37
messageitem.h
MessageList::Core::MessageItemSetManager::removeSet
void removeSet(MessageItemSetReference ref)
Definition: messageitemsetmanager.cpp:52
MessageList::Core::MessageItemSetManager::createSet
MessageItemSetReference createSet()
Definition: messageitemsetmanager.cpp:92
MessageList::Core::MessageItemSetManager::setCount
int setCount() const
Definition: messageitemsetmanager.cpp:46
MessageList::Core::MessageItemSetManager::addMessageItem
bool addMessageItem(MessageItemSetReference ref, MessageItem *mi)
Definition: messageitemsetmanager.cpp:115
MessageList::Core::MessageItemSetReference
long int MessageItemSetReference
Definition: messageitemsetmanager.h:33
messageitemsetmanager.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:55:32 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

messagelist

Skip menu "messagelist"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal