summaryrefslogtreecommitdiffstats
path: root/kig/modes/moving.h
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitce599e4f9f94b4eb00c1b5edb85bce5431ab3df2 (patch)
treed3bb9f5d25a2dc09ca81adecf39621d871534297 /kig/modes/moving.h
downloadtdeedu-ce599e4f9f94b4eb00c1b5edb85bce5431ab3df2.tar.gz
tdeedu-ce599e4f9f94b4eb00c1b5edb85bce5431ab3df2.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeedu@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kig/modes/moving.h')
-rw-r--r--kig/modes/moving.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/kig/modes/moving.h b/kig/modes/moving.h
new file mode 100644
index 00000000..32828db3
--- /dev/null
+++ b/kig/modes/moving.h
@@ -0,0 +1,101 @@
+// Copyright (C) 2002 Dominique Devriese <devriese@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; either version 2
+// of the License, or (at your option) any later version.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+// 02110-1301, USA.
+
+#ifndef MOVING_H
+#define MOVING_H
+
+#include "mode.h"
+
+#include "../misc/coordinate.h"
+#include "../objects/object_calcer.h"
+
+class ObjectType;
+class Coordinate;
+class NormalPoint;
+class KigWidget;
+class KigDocument;
+class MonitorDataObjects;
+
+/**
+ * "Template method" pattern ( see the Design patterns book ):
+ * This is a base class for two modes: normal MovingMode: used for
+ * moving a set of objects around, using Object::startMove,
+ * Object::moveTo and Object::stopMove, and another mode
+ * PointRedefineMode, used for redefining a NormalPoint...
+ */
+class MovingModeBase
+ : public KigMode
+{
+protected:
+ KigWidget& mview;
+private:
+ // all moving objects: these objects are all of the objects that
+ // need to be redrawn every time the cursor moves, and after calc is
+ // called.
+ std::vector<ObjectCalcer*> mcalcable;
+ std::vector<ObjectHolder*> mdrawable;
+protected:
+ MovingModeBase( KigPart& doc, KigWidget& v );
+ ~MovingModeBase();
+
+ /**
+ * Subclasses should call this in their constructor, when they know
+ * which objects will be moving around... They are expected to be in
+ * the right order for being calc()'ed...
+ */
+ void initScreen( const std::vector<ObjectCalcer*>& amo );
+
+ // in these functions, subclasses should do the equivalent of
+ // Object::stopMove() and moveTo()... Note that no calc()'ing or
+ // drawing is to be done..
+ virtual void stopMove() = 0;
+ virtual void moveTo( const Coordinate& o, bool snaptogrid ) = 0;
+
+public:
+ void leftReleased( QMouseEvent*, KigWidget* );
+ void leftMouseMoved( QMouseEvent*, KigWidget* );
+ void mouseMoved( QMouseEvent*, KigWidget* );
+};
+
+class MovingMode
+ : public MovingModeBase
+{
+ class Private;
+ Private* d;
+ void stopMove();
+ void moveTo( const Coordinate& o, bool snaptogrid );
+public:
+ MovingMode( const std::vector<ObjectHolder*>& objects, const Coordinate& c,
+ KigWidget&, KigPart& );
+ ~MovingMode();
+};
+
+class PointRedefineMode
+ : public MovingModeBase
+{
+ ObjectHolder* mp;
+ std::vector<ObjectCalcer::shared_ptr> moldparents;
+ const ObjectType* moldtype;
+ MonitorDataObjects* mmon;
+ void stopMove();
+ void moveTo( const Coordinate& o, bool snaptogrid );
+public:
+ PointRedefineMode( ObjectHolder* p, KigPart& d, KigWidget& v );
+ ~PointRedefineMode();
+};
+
+#endif