-rw-r--r-- | korganizer/cellitem.cpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/korganizer/cellitem.cpp b/korganizer/cellitem.cpp new file mode 100644 index 0000000..61d06ac --- a/dev/null +++ b/korganizer/cellitem.cpp | |||
@@ -0,0 +1,98 @@ | |||
1 | /* | ||
2 | This file is part of KOrganizer. | ||
3 | |||
4 | Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> | ||
5 | |||
6 | This program is free software; you can redistribute it and/or modify | ||
7 | it under the terms of the GNU General Public License as published by | ||
8 | the Free Software Foundation; either version 2 of the License, or | ||
9 | (at your option) any later version. | ||
10 | |||
11 | This program is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | GNU General Public License for more details. | ||
15 | |||
16 | You should have received a copy of the GNU General Public License | ||
17 | along with this program; if not, write to the Free Software | ||
18 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
19 | |||
20 | As a special exception, permission is given to link this program | ||
21 | with any edition of Qt, and distribute the resulting executable, | ||
22 | without including the source code for Qt in the source distribution. | ||
23 | */ | ||
24 | |||
25 | #include "cellitem.h" | ||
26 | |||
27 | #include <klocale.h> | ||
28 | #include <kdebug.h> | ||
29 | |||
30 | #include <qintdict.h> | ||
31 | |||
32 | using namespace KOrg; | ||
33 | |||
34 | QString CellItem::label() const | ||
35 | { | ||
36 | return i18n("<undefined>"); | ||
37 | } | ||
38 | |||
39 | QPtrList<CellItem> CellItem::placeItem( QPtrList<CellItem> cells, | ||
40 | CellItem *placeItem ) | ||
41 | { | ||
42 | kdDebug(5855) << "Placing " << placeItem->label() << endl; | ||
43 | |||
44 | QPtrList<KOrg::CellItem> conflictItems; | ||
45 | int maxSubCells = 0; | ||
46 | QIntDict<KOrg::CellItem> subCellDict; | ||
47 | |||
48 | // Find all items which are in same cell | ||
49 | QPtrListIterator<KOrg::CellItem> it2( cells ); | ||
50 | for( it2.toFirst(); it2.current(); ++it2 ) { | ||
51 | KOrg::CellItem *item = it2.current(); | ||
52 | if ( item == placeItem ) continue; | ||
53 | |||
54 | if ( item->overlaps( placeItem ) ) { | ||
55 | kdDebug(5855) << " Overlaps: " << item->label() << endl; | ||
56 | |||
57 | conflictItems.append( item ); | ||
58 | if ( item->subCells() > maxSubCells ) maxSubCells = item->subCells(); | ||
59 | subCellDict.insert( item->subCell(), item ); | ||
60 | } | ||
61 | } | ||
62 | |||
63 | if ( conflictItems.count() > 0 ) { | ||
64 | // Look for unused sub cell and insert item | ||
65 | int i; | ||
66 | for( i = 0; i < maxSubCells; ++i ) { | ||
67 | kdDebug(5855) << " Trying subcell " << i << endl; | ||
68 | if ( !subCellDict.find( i ) ) { | ||
69 | kdDebug(5855) << " Use subcell " << i << endl; | ||
70 | placeItem->setSubCell( i ); | ||
71 | break; | ||
72 | } | ||
73 | } | ||
74 | if ( i == maxSubCells ) { | ||
75 | kdDebug(5855) << " New subcell " << i << endl; | ||
76 | placeItem->setSubCell( maxSubCells ); | ||
77 | maxSubCells++; // add new item to number of sub cells | ||
78 | } | ||
79 | |||
80 | kdDebug(5855) << " Sub cells: " << maxSubCells << endl; | ||
81 | |||
82 | // Write results to item to be placed | ||
83 | conflictItems.append( placeItem ); | ||
84 | placeItem->setSubCells( maxSubCells ); | ||
85 | |||
86 | QPtrListIterator<KOrg::CellItem> it3( conflictItems ); | ||
87 | for( it3.toFirst(); it3.current(); ++it3 ) { | ||
88 | (*it3)->setSubCells( maxSubCells ); | ||
89 | } | ||
90 | // Todo: Adapt subCells of items conflicting with conflicting items | ||
91 | } else { | ||
92 | kdDebug(5855) << " no conflicts" << endl; | ||
93 | placeItem->setSubCell( 0 ); | ||
94 | placeItem->setSubCells( 1 ); | ||
95 | } | ||
96 | |||
97 | return conflictItems; | ||
98 | } | ||