libs/flake
KoShapeShadowCommand.cppGo to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "KoShapeShadowCommand.h"
00021 #include "KoShape.h"
00022 #include "KoShapeShadow.h"
00023
00024 #include <klocale.h>
00025
00026 class KoShapeShadowCommand::Private
00027 {
00028 public:
00029 Private() {}
00030 ~Private() {
00031 foreach(KoShapeShadow* shadow, oldShadows) {
00032 if (shadow && ! shadow->removeUser())
00033 delete shadow;
00034 }
00035 }
00036
00037 void addOldShadow( KoShapeShadow * oldShadow )
00038 {
00039 if (oldShadow)
00040 oldShadow->addUser();
00041 oldShadows.append(oldShadow);
00042 }
00043
00044 void addNewShadow( KoShapeShadow * newShadow )
00045 {
00046 if (newShadow)
00047 newShadow->addUser();
00048 newShadows.append(newShadow);
00049 }
00050
00051 QList<KoShape*> shapes;
00052 QList<KoShapeShadow*> oldShadows;
00053 QList<KoShapeShadow*> newShadows;
00054 };
00055
00056 KoShapeShadowCommand::KoShapeShadowCommand(const QList<KoShape*> &shapes, KoShapeShadow *shadow, QUndoCommand *parent)
00057 : QUndoCommand(parent)
00058 , d(new Private())
00059 {
00060 d->shapes = shapes;
00061
00062 foreach(KoShape *shape, d->shapes) {
00063 d->addOldShadow(shape->shadow());
00064 d->addNewShadow(shadow);
00065 }
00066
00067 setText(i18n("Set Shadow"));
00068 }
00069
00070 KoShapeShadowCommand::KoShapeShadowCommand(const QList<KoShape*> &shapes, const QList<KoShapeShadow*> &shadows, QUndoCommand *parent)
00071 : QUndoCommand(parent)
00072 , d(new Private())
00073 {
00074 Q_ASSERT(shapes.count() == shadows.count());
00075
00076 d->shapes = shapes;
00077
00078
00079 foreach(KoShape *shape, shapes)
00080 d->addOldShadow(shape->shadow());
00081 foreach(KoShapeShadow * shadow, shadows)
00082 d->addNewShadow(shadow);
00083
00084 setText(i18n("Set Shadow"));
00085 }
00086
00087 KoShapeShadowCommand::KoShapeShadowCommand(KoShape* shape, KoShapeShadow *shadow, QUndoCommand *parent)
00088 : QUndoCommand(parent)
00089 , d(new Private())
00090 {
00091 d->shapes.append(shape);
00092 d->addNewShadow(shadow);
00093 d->addOldShadow(shape->shadow());
00094
00095 setText(i18n("Set Shadow"));
00096 }
00097
00098 KoShapeShadowCommand::~KoShapeShadowCommand()
00099 {
00100 delete d;
00101 }
00102
00103 void KoShapeShadowCommand::redo()
00104 {
00105 QUndoCommand::redo();
00106 int shapeCount = d->shapes.count();
00107 for (int i = 0; i < shapeCount; ++i) {
00108 KoShape *shape = d->shapes[i];
00109 shape->update();
00110 shape->setShadow(d->newShadows[i]);
00111 shape->update();
00112 }
00113 }
00114
00115 void KoShapeShadowCommand::undo()
00116 {
00117 QUndoCommand::undo();
00118 int shapeCount = d->shapes.count();
00119 for (int i = 0; i < shapeCount; ++i) {
00120 KoShape *shape = d->shapes[i];
00121 shape->update();
00122 shape->setShadow(d->oldShadows[i]);
00123 shape->update();
00124 }
00125 }
|