summaryrefslogtreecommitdiffstats
path: root/kig/objects/object_holder.h
diff options
context:
space:
mode:
Diffstat (limited to 'kig/objects/object_holder.h')
-rw-r--r--kig/objects/object_holder.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/kig/objects/object_holder.h b/kig/objects/object_holder.h
new file mode 100644
index 00000000..9b30453d
--- /dev/null
+++ b/kig/objects/object_holder.h
@@ -0,0 +1,145 @@
+// Copyright (C) 2003 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 KIG_OBJECTS_OBJECT_HOLDER_H
+#define KIG_OBJECTS_OBJECT_HOLDER_H
+
+#include "object_calcer.h"
+
+#include <qstring.h>
+
+/**
+ * An ObjectHolder represents an object as it is known to the
+ * document. It keeps a pointer to an ObjectCalcer, where it gets its
+ * data ( the ObjectImp that the ObjectCalcer holds ) from. It also
+ * holds information about how to draw this ObjectImp on the window,
+ * by keeping a pointer to an ObjectDrawer ( see below ). In its draw
+ * method, it gets the ObjectImp from the ObjectCalcer, and passes it
+ * to the ObjectDrawer, asking it to draw the ObjectImp on the window.
+ *
+ * The document ( check the KigDocument class ) holds a list of these
+ * ObjectHolder's. This is its only link with the ObjectCalcer
+ * dependency graph.
+ *
+ * An ObjectHolder keeps a reference to its * ObjectCalcer.
+ */
+class ObjectHolder
+{
+ ObjectCalcer::shared_ptr mcalcer;
+ ObjectDrawer* mdrawer;
+ ObjectConstCalcer::shared_ptr mnamecalcer;
+
+public:
+ /**
+ * Construct a new ObjectHolder with a given ObjectCalcer and
+ * ObjectDrawer, with a given name calcer.
+ */
+ ObjectHolder( ObjectCalcer* calcer, ObjectDrawer* drawer, ObjectConstCalcer* namecalcer );
+ /**
+ * Construct a new ObjectHolder with a given ObjectCalcer and
+ * ObjectDrawer.
+ */
+ ObjectHolder( ObjectCalcer* calcer, ObjectDrawer* drawer );
+ /**
+ * equivalent to the previous constructor, but with a default
+ * ObjectDrawer and no name.
+ */
+ ObjectHolder( ObjectCalcer* calcer );
+ ~ObjectHolder();
+
+ const ObjectImp* imp() const;
+ const ObjectCalcer* calcer() const;
+ ObjectCalcer* calcer();
+ const ObjectDrawer* drawer() const;
+ ObjectDrawer* drawer();
+ // the following two return zero if no name is set.
+ const ObjectConstCalcer* nameCalcer() const;
+ ObjectConstCalcer* nameCalcer();
+ /**
+ * Setting the namecalcer is only allowed if previously none was
+ * set. This way, we avoid keeping a useless namecalcer around if
+ * no name is set.
+ */
+ void setNameCalcer( ObjectConstCalcer* namecalcer );
+
+ /**
+ * returns QString::null if no name is set.
+ */
+ const QString name() const;
+ /**
+ * Set the ObjectDrawer of this ObjectHolder to \p d , the old
+ * ObjectDrawer is deleted.
+ */
+ void setDrawer( ObjectDrawer* d );
+ /**
+ * Set the ObjectDrawer of this ObjectHolder to \p d , the old
+ * ObjectDrawer is not deleted, but returned.
+ */
+ ObjectDrawer* switchDrawer( ObjectDrawer* d );
+
+ /**
+ * Make our ObjectCalcer recalculate its ObjectImp.
+ */
+ void calc( const KigDocument& );
+ /**
+ * Draw this object on the given KigPainter. If \p selected is true,
+ * then it will be drawn in red, instead of its normal color.
+ */
+ void draw( KigPainter& p, bool selected ) const;
+ /**
+ * Returns whether this object contains the point \p p .
+ */
+ bool contains( const Coordinate& p, const KigWidget& w, bool nv = false ) const;
+ /**
+ * Returns whether this object is in the rectangle \p r .
+ */
+ bool inRect( const Rect& r, const KigWidget& w ) const;
+ /**
+ * Returns whether this object is shown.
+ */
+ bool shown() const;
+
+ /**
+ * This call is simply forwarded to the ObjectCalcer. Check the
+ * documentation of ObjectCalcer::moveReferencePoint() for more info.
+ */
+ const Coordinate moveReferencePoint() const;
+ /**
+ * This call is simply forwarded to the ObjectCalcer. Check the
+ * documentation of ObjectCalcer::move() for more info.
+ */
+ void move( const Coordinate& to, const KigDocument& );
+ /**
+ * This call is simply forwarded to the ObjectCalcer. Check the
+ * documentation of ObjectCalcer::canMove() for more info.
+ */
+ bool canMove() const;
+ /**
+ * This call is simply forwarded to the ObjectCalcer. Check the
+ * documentation of ObjectCalcer::isFreelyTranslatable() for more info.
+ */
+ bool isFreelyTranslatable() const;
+
+ /**
+ * Return a statement saying something like "select this segment" or
+ * "select segment ab" depending on whether this ObjectHolder has a
+ * name.
+ */
+ QString selectStatement() const;
+};
+
+#endif