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.
tdeadmin/ksysv/ActionList.cpp

218 lines
3.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/***************************************************************************
begin : Sun Oct 3 1999
copyright : (C) 1999 by Peter Putzer
email : putzer@kde.org
***************************************************************************/
/***************************************************************************
* *
* 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; version 2. *
* *
***************************************************************************/
#include <tqapplication.h>
#include "ksvdraglist.h"
#include "ActionList.h"
//////////////////////////////////
// Action //
//////////////////////////////////
KSVAction::KSVAction()
{
}
KSVAction::~KSVAction()
{
// default - shouldn´t be used normally (pure virtual declaration)
}
SimpleAction::SimpleAction (KSVDragList* s, const KSVData* i)
: KSVAction(),
mSource (s),
mItem (new KSVData (*i))
{
}
SimpleAction::~SimpleAction()
{
delete mItem;
}
ChangeAction::ChangeAction (KSVDragList* s, const KSVData* oldS, const KSVData* newS)
: SimpleAction (s, oldS),
mNew (new KSVData (*newS))
{
source()->addToRMList (*oldState());
}
ChangeAction::~ChangeAction()
{
delete mNew;
}
void ChangeAction::redo ()
{
source()->addToRMList(*oldState());
source()->match (*oldState())->copy (*newState());
source()->sort();
}
void ChangeAction::undo()
{
source()->removeFromRMList(*oldState());
source()->match(*newState())->copy (*oldState());
source()->sort();
}
AddAction::AddAction (KSVDragList* s, const KSVData* i)
: SimpleAction(s, i)
{
}
AddAction::~AddAction()
{
}
void AddAction::redo ()
{
new KSVItem (source(), *item());
}
void AddAction::undo()
{
delete source()->match(*item());
}
RemoveAction::RemoveAction (KSVDragList* s, const KSVData* i)
: SimpleAction(s, i)
{
source()->addToRMList (*item());
}
RemoveAction::~RemoveAction()
{
}
void RemoveAction::redo()
{
source()->addToRMList(*item());
delete source()->match (*item());
}
void RemoveAction::undo()
{
source()->removeFromRMList(*item());
new KSVItem (source(), *item());
}
CompoundAction::CompoundAction (KSVAction** a, int nr)
: mActions (new KSVAction* [nr]),
mCount (nr)
{
memcpy (mActions, a, sizeof(KSVAction*) * nr);
}
CompoundAction::~CompoundAction()
{
for (int i=0; i < mCount; ++i)
{
delete mActions[i];
}
delete[] mActions;
}
void CompoundAction::redo ()
{
for (int i=0; i < mCount; ++i)
{
mActions[i]->redo();
}
}
void CompoundAction::undo()
{
for (int i=0; i < mCount; ++i)
{
mActions[i]->undo();
}
}
//////////////////////////////////
// ActionList //
//////////////////////////////////
ActionList::ActionList (TQObject* tqparent, const char* name)
: TQObject(tqparent, name)
{
setAutoDelete(false);
}
ActionList::~ActionList()
{
}
void ActionList::undoLast()
{
if (!count())
return;
KSVAction* a = TQPtrStack<KSVAction>::pop();
a->undo();
emit undone();
if (!count())
emit empty();
}
void ActionList::undoAll()
{
while (count())
undoLast();
}
void ActionList::redoLast()
{
if (!count())
return;
KSVAction* a = TQPtrStack<KSVAction>::pop();
a->redo();
emit undone();
if (!count())
emit empty();
}
void ActionList::redoAll()
{
while (count())
redoLast();
}
void ActionList::push (KSVAction* a)
{
TQPtrStack<KSVAction>::push(a);
if (count() == 1)
emit filled();
}
void ActionList::clear()
{
setAutoDelete (true);
TQPtrStack<KSVAction>::clear();
setAutoDelete (false);
emit empty();
}
#include "ActionList.moc"