|
|
|
/* This file is part of the KDE project
|
|
|
|
Copyright (C) 2004 Peter Simonsson <psn@linux.se>,
|
|
|
|
|
|
|
|
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 <tqvaluelist.h>
|
|
|
|
|
|
|
|
#include <KoPoint.h>
|
|
|
|
#include <KoRect.h>
|
|
|
|
|
|
|
|
#include "kivio_1d_stencil.h"
|
|
|
|
#include "kivio_arrowhead.h"
|
|
|
|
#include <koffice_export.h>
|
|
|
|
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<KoPoint> m_points;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|