/* This file is part of the KDE project Copyright (C) 2004 Peter Simonsson , 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. */ #ifndef KIVIOKIVIOPOLYLINECONNECTOR_H #define KIVIOKIVIOPOLYLINECONNECTOR_H #include #include #include #include "kivio_1d_stencil.h" #include "kivio_arrowhead.h" #include class KivioIntraStencilData; class KivioCustomDragData; class KivioPage; namespace Kivio { class KIVIO_EXPORT PolyLineConnector : public Kivio1DStencil { public: PolyLineConnector(); virtual ~PolyLineConnector(); virtual KivioStencil* duplicate(); virtual bool loadCustom(const TQDomElement& e); virtual bool saveCustom(TQDomElement& e, TQDomDocument& doc); virtual KivioCollisionType checkForCollision(KoPoint* p, double threshold); virtual void paint(KivioIntraStencilData* data); virtual void paintOutline(KivioIntraStencilData* data); virtual void paintSelectionHandles(KivioIntraStencilData* data); /** Append a new point to the list. * * @param p The point to append. */ void addPoint(const KoPoint& p); /// Remove a point from the list. void removePoint(unsigned int index); /// Remove the last point from the list void removeLastPoint(); unsigned int pointCount() const { return m_points.count(); } /** Move point with index @param index. * * @param index Which point to move. * @param xOffset How far to move the point horizontaly. * @param yOffset How far to move the point verticaly. */ void movePoint(unsigned int index, double xOffset, double yOffset); void movePointTo(unsigned int index, const KoPoint& p); void moveLastPointTo(const KoPoint& p); virtual void customDrag(KivioCustomDragData* data); virtual void move(double xOffset, double yOffset); virtual double x(); virtual void setX(double x); virtual double y(); virtual void setY(double y); virtual double w() { return 0; } virtual double h() { return 0; } virtual KoRect rect(); virtual bool isInRect(const KoRect& rect); virtual void setCustomIDPoint(int customID, const KoPoint& point, KivioPage* page); virtual KoPoint customIDPoint(int customID); virtual void updateConnectorPoints(KivioConnectorPoint* cp, double /*oldX*/, double /*oldY*/); // Arrow head properties virtual void setStartAHType(int i) { m_startArrow->setType(i); } virtual int startAHType() { return m_startArrow->type(); } virtual void setStartAHWidth(double f) { m_startArrow->setWidth(f); } virtual double startAHWidth() { return m_startArrow->width(); } virtual void setStartAHLength(double f) { m_startArrow->setLength(f); } virtual double startAHLength() { return m_startArrow->length(); } virtual void setEndAHType(int i) { m_endArrow->setType(i); } virtual int endAHType() { return m_endArrow->type(); } virtual void setEndAHWidth(double f) { m_endArrow->setWidth(f); } virtual double endAHWidth() { return m_endArrow->width(); } virtual void setEndAHLength(double f) { m_endArrow->setLength(f); } virtual double endAHLength() { return m_endArrow->length(); } protected: void checkForConnection(KivioConnectorPoint* cp, KivioPage* page); bool loadArrowHeads(const TQDomElement& e); TQDomElement saveArrowHeads(TQDomDocument& doc); private: KivioArrowHead* m_startArrow; // Arrow head for the first point. KivioArrowHead* m_endArrow; // Arrow head for the last point. TQValueList m_points; }; } #endif