history.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "history.h"
00026
00027 #include <libkcal/calendar.h>
00028 #include <libkcal/incidence.h>
00029
00030 #include <klocale.h>
00031 #include <kdebug.h>
00032
00033 using namespace KCal;
00034 using namespace KOrg;
00035
00036 History::History( KCal::Calendar *calendar )
00037 : mCalendar( calendar ), mCurrentMultiEntry( 0 ),
00038 mUndoEntry( mEntries ), mRedoEntry( mEntries )
00039 {
00040 mEntries.setAutoDelete( true );
00041 }
00042
00043 void History::undo()
00044 {
00045 if ( mCurrentMultiEntry ) mCurrentMultiEntry = 0;
00046 Entry *entry = mUndoEntry.current();
00047 if ( !entry ) return;
00048
00049 entry->undo();
00050 emit undone();
00051
00052 emit redoAvailable( entry->text() );
00053
00054 mRedoEntry = mUndoEntry;
00055 --mUndoEntry;
00056
00057 entry = mUndoEntry.current();
00058 if ( entry ) emit undoAvailable( entry->text() );
00059 else emit undoAvailable( QString::null );
00060 }
00061
00062 void History::redo()
00063 {
00064 if ( mCurrentMultiEntry ) mCurrentMultiEntry = 0;
00065 Entry *entry = mRedoEntry.current();
00066 if ( !entry ) return;
00067
00068 emit undoAvailable( entry->text() );
00069
00070 entry->redo();
00071 emit redone();
00072
00073 mUndoEntry = mRedoEntry;
00074 ++mRedoEntry;
00075
00076 entry = mRedoEntry.current();
00077 if ( entry ) emit redoAvailable( entry->text() );
00078 else emit redoAvailable( QString::null );
00079 }
00080
00081 void History::truncate()
00082 {
00083 while ( mUndoEntry.current() != mEntries.last() ) {
00084 mEntries.removeLast();
00085 }
00086 mRedoEntry = QPtrList<Entry>( mEntries );
00087 emit redoAvailable( QString::null );
00088 }
00089
00090 void History::recordDelete( Incidence *incidence )
00091 {
00092 Entry *entry = new EntryDelete( mCalendar, incidence );
00093 if (mCurrentMultiEntry) {
00094 mCurrentMultiEntry->appendEntry( entry );
00095 } else {
00096 truncate();
00097 mEntries.append( entry );
00098 mUndoEntry.toLast();
00099 mRedoEntry = QPtrList<Entry>( mEntries );
00100 emit undoAvailable( entry->text() );
00101 }
00102 }
00103
00104 void History::recordAdd( Incidence *incidence )
00105 {
00106 Entry *entry = new EntryAdd( mCalendar, incidence );
00107 if (mCurrentMultiEntry) {
00108 mCurrentMultiEntry->appendEntry( entry );
00109 } else {
00110 truncate();
00111 mEntries.append( entry );
00112 mUndoEntry.toLast();
00113 mRedoEntry = QPtrList<Entry>( mEntries );
00114 emit undoAvailable( entry->text() );
00115 }
00116 }
00117
00118 void History::recordEdit( Incidence *oldIncidence, Incidence *newIncidence )
00119 {
00120 Entry *entry = new EntryEdit( mCalendar, oldIncidence, newIncidence );
00121 if (mCurrentMultiEntry) {
00122 mCurrentMultiEntry->appendEntry( entry );
00123 } else {
00124 truncate();
00125 mEntries.append( entry );
00126 mUndoEntry.toLast();
00127 mRedoEntry = QPtrList<Entry>( mEntries );
00128 emit undoAvailable( entry->text() );
00129 }
00130 }
00131
00132 void History::startMultiModify( const QString &description )
00133 {
00134 if ( mCurrentMultiEntry ) {
00135 endMultiModify();
00136 }
00137 mCurrentMultiEntry = new MultiEntry( mCalendar, description );
00138 truncate();
00139 mEntries.append( mCurrentMultiEntry );
00140 mUndoEntry.toLast();
00141 mRedoEntry = QPtrList<Entry>( mEntries );
00142 emit undoAvailable( mCurrentMultiEntry->text() );
00143 }
00144
00145 void History::endMultiModify()
00146 {
00147 mCurrentMultiEntry = 0;
00148 }
00149
00150
00151 History::Entry::Entry( KCal::Calendar *calendar )
00152 : mCalendar( calendar )
00153 {
00154 }
00155
00156 History::Entry::~Entry()
00157 {
00158 }
00159
00160 History::EntryDelete::EntryDelete( Calendar *calendar, Incidence *incidence )
00161 : Entry( calendar ), mIncidence( incidence->clone() )
00162 {
00163 }
00164
00165 History::EntryDelete::~EntryDelete()
00166 {
00167 delete mIncidence;
00168 }
00169
00170 void History::EntryDelete::undo()
00171 {
00172 mCalendar->addIncidence( mIncidence->clone() );
00173 }
00174
00175 void History::EntryDelete::redo()
00176 {
00177 Incidence *incidence = mCalendar->incidence( mIncidence->uid() );
00178 mCalendar->deleteIncidence( incidence );
00179 }
00180
00181 QString History::EntryDelete::text()
00182 {
00183 return i18n("Delete %1").arg(mIncidence->type());
00184 }
00185
00186
00187 History::EntryAdd::EntryAdd( Calendar *calendar, Incidence *incidence )
00188 : Entry( calendar ), mIncidence( incidence->clone() )
00189 {
00190 }
00191
00192 History::EntryAdd::~EntryAdd()
00193 {
00194 delete mIncidence;
00195 }
00196
00197 void History::EntryAdd::undo()
00198 {
00199 Incidence *incidence = mCalendar->incidence( mIncidence->uid() );
00200 if ( incidence )
00201 mCalendar->deleteIncidence( incidence );
00202 }
00203
00204 void History::EntryAdd::redo()
00205 {
00206 mCalendar->addIncidence( mIncidence->clone() );
00207 }
00208
00209 QString History::EntryAdd::text()
00210 {
00211 return i18n("Add %1").arg(mIncidence->type());
00212 }
00213
00214
00215 History::EntryEdit::EntryEdit( Calendar *calendar, Incidence *oldIncidence,
00216 Incidence *newIncidence )
00217 : Entry( calendar ), mOldIncidence( oldIncidence->clone() ),
00218 mNewIncidence( newIncidence->clone() )
00219 {
00220 }
00221
00222 History::EntryEdit::~EntryEdit()
00223 {
00224 delete mOldIncidence;
00225 delete mNewIncidence;
00226 }
00227
00228 void History::EntryEdit::undo()
00229 {
00230 Incidence *incidence = mCalendar->incidence( mNewIncidence->uid() );
00231 if ( incidence )
00232 mCalendar->deleteIncidence( incidence );
00233 mCalendar->addIncidence( mOldIncidence->clone() );
00234 }
00235
00236 void History::EntryEdit::redo()
00237 {
00238 Incidence *incidence = mCalendar->incidence( mOldIncidence->uid() );
00239 if ( incidence )
00240 mCalendar->deleteIncidence( incidence );
00241 mCalendar->addIncidence( mNewIncidence->clone() );
00242 }
00243
00244 QString History::EntryEdit::text()
00245 {
00246 return i18n("Edit %1").arg(mNewIncidence->type());
00247 }
00248
00249 History::MultiEntry::MultiEntry( Calendar *calendar, QString text )
00250 : Entry( calendar ), mText( text )
00251 {
00252 mEntries.setAutoDelete( true );
00253 }
00254
00255 History::MultiEntry::~MultiEntry()
00256 {
00257 }
00258
00259 void History::MultiEntry::appendEntry( Entry* entry )
00260 {
00261 mEntries.append( entry );
00262 }
00263
00264 void History::MultiEntry::undo()
00265 {
00266 QPtrListIterator<Entry> it( mEntries );
00267 it.toLast();
00268 Entry *entry;
00269 while ( (entry = it.current()) != 0 ) {
00270 --it;
00271 entry->undo();
00272 }
00273 }
00274
00275 void History::MultiEntry::redo()
00276 {
00277 QPtrListIterator<Entry> it( mEntries );
00278 Entry *entry;
00279 while ( (entry = it.current()) != 0 ) {
00280 ++it;
00281 entry->redo();
00282 }
00283 }
00284
00285 QString History::MultiEntry::text()
00286 {
00287 return mText;
00288 }
00289
00290 #include "history.moc"
This file is part of the documentation for korganizer Library Version 3.3.2.