diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | ce599e4f9f94b4eb00c1b5edb85bce5431ab3df2 (patch) | |
tree | d3bb9f5d25a2dc09ca81adecf39621d871534297 /kig/modes/moving.h | |
download | tdeedu-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.h | 101 |
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 |