summaryrefslogtreecommitdiffstats
path: root/kgantt/kgantt/KGanttItem.h
diff options
context:
space:
mode:
Diffstat (limited to 'kgantt/kgantt/KGanttItem.h')
-rw-r--r--kgantt/kgantt/KGanttItem.h548
1 files changed, 548 insertions, 0 deletions
diff --git a/kgantt/kgantt/KGanttItem.h b/kgantt/kgantt/KGanttItem.h
new file mode 100644
index 00000000..0528e478
--- /dev/null
+++ b/kgantt/kgantt/KGanttItem.h
@@ -0,0 +1,548 @@
+#ifndef _KGANTTITEM_H_
+#define _KGANTTITEM_H_
+
+/*
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+
+ author : jh, jochen@ifb.bv.tu-berlin.de
+
+ file : KGanttItem.h
+ date : 26 oct 2000
+
+
+ changelog : 26 dec 2000, jh
+ 09 jan 2001, jh - added signal destroyed(xQTask*)
+
+ 11 jan 2001, jh changed to kde : xQTask -> KGanttItem
+
+*/
+
+
+#include <qobject.h>
+#include <qdatetime.h>
+#include <qtextstream.h>
+#include <qptrlist.h>
+#include <qpainter.h>
+
+#include <kdepimmacros.h>
+
+#include "KGanttRelation.h"
+
+
+
+/// KGanttItem.
+/*!
+ * This class describes a item. It contains dates on which the item starts and
+ * ends. It also contains attributes that gouverns the graphical representation
+ * in a gantt diagramm.
+ */
+//////////////////////////////////
+class KDE_EXPORT KGanttItem : public QObject
+//////////////////////////////////
+{
+
+ Q_OBJECT
+
+
+public:
+
+ enum Change {
+ NoChange = 0,
+ StartChanged = 1,
+ EndChanged = 2,
+
+ /// Height for this item has changed. The
+ /// height doesn't include the subitems.
+ HeightChanged = 4,
+
+ /// Total height has changed. This
+ /// happens if the item was opened, closed
+ /// or subitems has been added or removed while
+ /// item is open.
+ TotalHeightChanged = 8,
+
+ /// Style for drawing has changed.
+ StyleChanged = 16,
+ TextChanged = 32,
+ ModeChanged = 64,
+ MinChanged = 128,
+ MaxChanged = 256,
+
+ /// Draw item including subitems.
+ Opened = 512,
+
+ /// Draw item without subitems.
+ Closed = 1024,
+
+ /// Item has been selected.
+ Selected = 2048,
+
+ /// Item has been unselected.
+ Unselected = 4096,
+
+ /// Changes may occurred but the types are unknown
+ Unknown = 8192,
+
+ /// Relation between two subitems has been added
+ RelationAdded = 16384,
+
+ /// Relation between two subitems has been removed
+ RelationRemoved = 32768
+
+ };
+
+
+
+ enum Style {
+ /// Set item invisible
+ DrawNothing = 0,
+
+ /// Draw border.
+ DrawBorder = 1,
+
+ // Fill item with brush.
+ DrawFilled = 2,
+ DrawText = 4,
+
+ // Draw handlke for opening/closing item.
+ DrawHandle = 16,
+
+ /// Draw handle only if item contains subitems
+ DrawHandleWSubitems = 32,
+
+ DrawAll = 255
+ };
+
+
+ enum Mode {
+ Normal,
+ Rubberband
+ };
+
+
+ /// Constructor.
+ /*!
+ *
+ */
+ KGanttItem(KGanttItem* parentItem, const QString& text,
+ const QDateTime& start, const QDateTime& end);
+
+
+
+ /// Constructor.
+ /*!
+ *
+ */
+ KGanttItem(KGanttItem* parentItem, const QString& text,
+ const QDateTime& start, long durationMin);
+
+
+
+ /// Destructor.
+ /*
+ * Emits signal destroyed(KGanttItem* this).
+ */
+ ~KGanttItem();
+
+
+
+ /// Add relation between two subitems.
+ /*
+ *
+ */
+ KGanttRelation* addRelation(KGanttItem* from, KGanttItem* to,
+ const QString& text);
+
+
+
+
+ /// Returns true if item is open (subitems has to be drawn)
+ /*!
+ *
+ */
+ bool isOpen() {
+ return _open;
+ }
+
+
+
+ /// Open / Close item
+ /*!
+ * Draw/don't draw subitems.
+ */
+ void open(bool f);
+
+
+
+ /// Set item editable or not.
+ /*!
+ * If item is not editable these methods have no effect :
+ * setStart(), setEnd(), setText(), select(), setMode(), setStyle(),
+ * setHeight(),
+ *
+ */
+ void setEditable(bool f) {
+ _editable = f;
+ }
+
+
+
+ /// Returns if item is editable.
+ /*!
+ * See also setEditable().
+ */
+ bool isEditable() {
+ return _editable;
+ }
+
+
+
+ /// Returns true if item is selected.
+ /*!
+ *
+ */
+ bool isSelected() {
+ return _selected;
+ }
+
+
+
+ /// Select/unselect item.
+ /*!
+ *
+ */
+ void select(bool f);
+
+
+
+ /// Set mode.
+ /*!
+ * If mode is 'Rubberband' and the number of subtaks is greater than 0,
+ * the start and end of the item is determined by the start and end of the
+ * earliest/latest subitem. <br>
+ * Default is 'Normal'.
+ */
+ void setMode(Mode flag);
+
+
+
+ /// Set drawing style.
+ /*!
+ *
+ */
+ void setStyle(int flag, bool includeSubitems = false);
+
+
+
+ /// Get drawing style.
+ /*!
+ *
+ */
+ int getStyle() {
+ return _style;
+ }
+
+
+
+ /// Set brush for filling
+ /*!
+ *
+ */
+ void setBrush(const QBrush& brush);
+
+
+
+ /// Get brush that is used for filling the item.
+ /*!
+ *
+ */
+ QBrush& getBrush() {
+ return _brush;
+ }
+
+
+
+ /// Get brush which has to be used for drawing this item as selected.
+ /*!
+ *
+ */
+ QBrush& getSelectBrush() {
+ return _selectBrush;
+ }
+
+
+
+ /// Set pen for border.
+ /*!
+ *
+ */
+ void setPen(const QPen& pen);
+
+
+
+ ///
+ /*!
+ *
+ */
+ QPen& getPen() {
+ return _pen;
+ }
+
+
+
+ ///
+ /*!
+ *
+ */
+ void setTextPen(const QPen& pen) {
+ _textPen = pen;
+ }
+
+
+
+ ///
+ /*!
+ *
+ */
+ QPen& getTextPen() {
+ return _textPen;
+ }
+
+
+
+ /// Set text.
+ /*!
+ *
+ */
+ void setText(const QString& text);
+
+
+
+ /// Get text.
+ /*!
+ *
+ */
+ QString getText() { return _text; }
+
+
+
+ /// Get date of starting.
+ /*!
+ * If mode == ´Rubberband´ and this item contains
+ * subitems, start of the item is determined by the start of the
+ * earliest subitem. <br>
+ */
+ QDateTime getStart();
+
+
+
+ /// Get date of ending.
+ /*!
+ *
+ */
+ QDateTime getEnd();
+
+
+
+ /// Set time/date of start.
+ /*!
+ *
+ */
+ void setStart(const QDateTime& start);
+
+
+
+ /// Set time/date of end.
+ /*!
+ *
+ */
+ void setEnd(const QDateTime& end);
+
+
+
+ /// Set height.
+ /*!
+ * Set height in pixel. These are scaled when this item is drawn
+ * by the barview.
+ */
+ void setHeight(int h);
+
+
+
+ /// Get height.
+ /*!
+ * Returns the height in pixel of this item. This does not include the height
+ * of any subitems; getTotalHeight() returns that if the subitems have
+ * to be drawn.
+ */
+ int getHeight() {
+ return _height;
+ }
+
+
+
+ /// Get total height.
+ /*!
+ * Returns the total height of this object in pixel, including any
+ * visible subitems. Notice, that the pixels are no screen pixel since
+ * the barview scales the height of a item.
+ */
+ int getTotalHeight();
+
+
+
+ /// Get width in minutes.
+ /*!
+ *
+ */
+ int getWidth();
+
+
+
+ /// Get list of subitems.
+ /*!
+ *
+ */
+ QPtrList<KGanttItem>& getSubItems() {
+ return _subitems;
+ }
+
+
+
+ /// Get list of relations.
+ /*!
+ *
+ */
+ QPtrList<KGanttRelation>& getRelations() {
+ return _relations;
+ }
+
+
+
+ /// Start a transaction.
+ /*!
+ * If you want to add a lot of subitems -> block signals
+ */
+ void startTransaction(){
+ blockSignals(true);
+ }
+
+
+
+ /// End a transaction.
+ /*!
+ * If you started a transaction and all signals have been blocked
+ * by method startTransaction(), invoke endTransaction() to unblock signals.<br>
+ * Signal changed(this,Unknown) is emitted.
+ */
+ void endTransaction();
+
+
+
+ /// Return a given change as a string.
+ /*!
+ *
+ */
+ static QString ChangeAsString(Change c);
+
+
+
+
+ /// Dump to cout.
+ /*!
+ *
+ */
+ void dump(QTextOStream& cout, const QString& pre);
+
+
+signals:
+
+ /// Item has changed.
+ /*!
+ * This signal is emitted if any of the items
+ * properties have been changed.
+ */
+ void changed(KGanttItem*, KGanttItem::Change);
+
+
+
+ /// Item will be deleted.
+ /*!
+ * This signal will be emitted immediately before
+ * the object will be deleted.
+ */
+ void destroyed(KGanttItem*);
+
+
+
+private slots:
+
+ void subItemChanged(KGanttItem*, KGanttItem::Change);
+
+ void removeRelation(KGanttRelation* rel);
+
+
+private:
+
+ void registerItem(KGanttItem* item);
+ void unregisterItem(KGanttItem* item);
+
+ void init(KGanttItem* parentItem, const QString& text,
+ const QDateTime& start, const QDateTime& end);
+
+
+ // set min/max date and time according to subitems
+ Change adjustMinMax();
+
+ /* if min < start set start to _min,
+ if max > end set end to max */
+ Change adjustStartEnd();
+
+
+ // is item open/closed
+ bool _open;
+ bool _selected;
+
+
+ // is this item editable by the user, if it is false, invoking
+ // of some methods has no effect
+ bool _editable;
+
+ int _height, _style, _mode;
+
+
+ KGanttItem* _parentItem;
+ QPtrList<KGanttItem> _subitems;
+ QPtrList<KGanttRelation> _relations;
+
+
+ // start/end date.
+ // start must always be earlier then _minDateTime
+ // end must always be later then _maxDateTime
+ QDateTime _start, _end, _minDateTime, _maxDateTime;
+
+ QString _text;
+
+ QBrush _brush;
+ QPen _pen, _textPen;
+
+ static QBrush _selectBrush;
+
+
+};
+
+#endif