summaryrefslogtreecommitdiffstats
path: root/kivio/kiviopart/kiviosdk/kivio_base_target_stencil.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
commit8362bf63dea22bbf6736609b0f49c152f975eb63 (patch)
tree0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kivio/kiviopart/kiviosdk/kivio_base_target_stencil.cpp
downloadkoffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz
koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kivio/kiviopart/kiviosdk/kivio_base_target_stencil.cpp')
-rw-r--r--kivio/kiviopart/kiviosdk/kivio_base_target_stencil.cpp530
1 files changed, 530 insertions, 0 deletions
diff --git a/kivio/kiviopart/kiviosdk/kivio_base_target_stencil.cpp b/kivio/kiviopart/kiviosdk/kivio_base_target_stencil.cpp
new file mode 100644
index 00000000..8a79c287
--- /dev/null
+++ b/kivio/kiviopart/kiviosdk/kivio_base_target_stencil.cpp
@@ -0,0 +1,530 @@
+#include "kivio_base_target_stencil.h"
+#include "kivio_common.h"
+#include "kivio_connector_point.h"
+#include "kivio_connector_target.h"
+#include "kivio_fill_style.h"
+#include "kivio_intra_stencil_data.h"
+#include "kivio_line_style.h"
+#include "kivio_painter.h"
+#include "kivio_stencil_spawner.h"
+#include "kivio_stencil_spawner_info.h"
+#include "kivio_stencil_spawner_set.h"
+#include "kivio_text_style.h"
+
+#include <KoZoomHandler.h>
+
+KivioBaseTargetStencil::KivioBaseTargetStencil()
+ : KivioStencil()
+{
+ m_pFillStyle = new KivioFillStyle();
+ m_pLineStyle = new KivioLineStyle();
+ m_pTextStyle = new KivioTextStyle();
+
+ m_pTargets = new QPtrList<KivioConnectorTarget>;
+ m_pTargets->setAutoDelete(true);
+}
+
+KivioBaseTargetStencil::~KivioBaseTargetStencil()
+{
+ delete m_pFillStyle;
+ delete m_pLineStyle;
+ delete m_pTextStyle;
+ delete m_pTargets;
+}
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// KivioLineStyle
+//
+//////////////////////////////////////////////////////////////////////////////
+QColor KivioBaseTargetStencil::fgColor()
+{
+ return m_pLineStyle->color();
+}
+
+void KivioBaseTargetStencil::setFGColor( QColor c )
+{
+ m_pLineStyle->setColor(c);
+}
+
+void KivioBaseTargetStencil::setLineWidth( double l )
+{
+ m_pLineStyle->setWidth(l);
+}
+
+double KivioBaseTargetStencil::lineWidth()
+{
+ return m_pLineStyle->width();
+}
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// KivioFillStyle
+//
+//////////////////////////////////////////////////////////////////////////////
+void KivioBaseTargetStencil::setBGColor( QColor c )
+{
+ m_pFillStyle->setColor(c);
+}
+
+QColor KivioBaseTargetStencil::bgColor()
+{
+ return m_pFillStyle->color();
+}
+
+KivioFillStyle *KivioBaseTargetStencil::fillStyle()
+{
+ return m_pFillStyle;
+}
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// KivioTextStyle
+//
+//////////////////////////////////////////////////////////////////////////////
+QColor KivioBaseTargetStencil::textColor()
+{
+ return m_pTextStyle->color();
+}
+void KivioBaseTargetStencil::setTextColor( QColor c )
+{
+ m_pTextStyle->setColor(c);
+}
+
+QFont KivioBaseTargetStencil::textFont()
+{
+ return m_pTextStyle->font();
+}
+void KivioBaseTargetStencil::setTextFont( const QFont &f )
+{
+ m_pTextStyle->setFont(f);
+}
+
+int KivioBaseTargetStencil::hTextAlign()
+{
+ return m_pTextStyle->hTextAlign();
+}
+
+int KivioBaseTargetStencil::vTextAlign()
+{
+ return m_pTextStyle->vTextAlign();
+}
+
+void KivioBaseTargetStencil::setHTextAlign(int a)
+{
+ m_pTextStyle->setHTextAlign(a);
+}
+
+void KivioBaseTargetStencil::setVTextAlign(int a)
+{
+ m_pTextStyle->setVTextAlign(a);
+}
+
+void KivioBaseTargetStencil::setText( const QString &a )
+{
+ m_pTextStyle->setText(a);
+}
+
+QString KivioBaseTargetStencil::text()
+{
+ return m_pTextStyle->text();
+}
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Paint Routines
+//
+//////////////////////////////////////////////////////////////////////////////
+
+void KivioBaseTargetStencil::paint( KivioIntraStencilData * )
+{
+ ;
+}
+
+void KivioBaseTargetStencil::paintOutline( KivioIntraStencilData * )
+{
+ ;
+}
+
+void KivioBaseTargetStencil::paintConnectorTargets( KivioIntraStencilData *pData )
+{
+ QPixmap *targetPic;
+ KivioPainter *painter;
+ double x, y;
+
+ // We don't draw these if we are selected!!!
+ if( isSelected() == true )
+ return;
+
+ // Obtain the graphic used for KivioConnectorTargets
+ targetPic = KivioConfig::config()->connectorTargetPixmap();
+
+
+ KoZoomHandler* zoomHandler = pData->zoomHandler;
+ painter = pData->painter;
+
+ KivioConnectorTarget *pTarget;
+ pTarget = m_pTargets->first();
+ while( pTarget )
+ {
+ x = zoomHandler->zoomItX(pTarget->x());
+ y = zoomHandler->zoomItY(pTarget->y());
+
+ painter->drawPixmap( x-3, y-3, *targetPic );
+
+ pTarget = m_pTargets->next();
+ }
+}
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// File I/O
+//
+//////////////////////////////////////////////////////////////////////////////
+bool KivioBaseTargetStencil::loadXML( const QDomElement &e )
+{
+ QDomNode node;
+ QString name;
+
+ node = e.firstChild();
+ while( !node.isNull() )
+ {
+ name = node.nodeName();
+
+ if( name == "KivioStencilProperties" )
+ {
+ loadProperties(node.toElement());
+ }
+
+ node = node.nextSibling();
+ }
+
+ updateGeometry();
+
+ return true;
+}
+
+QDomElement KivioBaseTargetStencil::createRootElement( QDomDocument &doc )
+{
+ QDomElement e = doc.createElement("KivioPluginStencil");
+
+ XmlWriteString( e, "id", m_pSpawner->info()->id() );
+ XmlWriteString( e, "setId", m_pSpawner->set()->id() );
+
+ return e;
+}
+
+QDomElement KivioBaseTargetStencil::saveXML( QDomDocument &doc )
+{
+ QDomElement e = createRootElement( doc );
+
+ e.appendChild( saveProperties(doc) );
+
+ return e;
+}
+
+
+QDomElement KivioBaseTargetStencil::saveProperties( QDomDocument &doc )
+{
+ QDomElement baseE = doc.createElement("KivioStencilProperties");
+
+ QDomElement geoE = doc.createElement("Geometry");
+ XmlWriteFloat( geoE, "x", m_x );
+ XmlWriteFloat( geoE, "y", m_y );
+ XmlWriteFloat( geoE, "w", m_w );
+ XmlWriteFloat( geoE, "h", m_h );
+ baseE.appendChild( geoE );
+
+ baseE.appendChild( m_pLineStyle->saveXML(doc) );
+ baseE.appendChild( m_pFillStyle->saveXML(doc) );
+ baseE.appendChild( m_pTextStyle->saveXML(doc) );
+ baseE.appendChild( saveTargets(doc) );
+
+ // Only save custom data if this returns true (means there is custom data)
+ QDomElement customE = doc.createElement("CustomData");
+ if( saveCustom( customE, doc )==true )
+ {
+ baseE.appendChild( customE );
+ }
+
+ return baseE;
+}
+
+bool KivioBaseTargetStencil::loadProperties( const QDomElement &e )
+{
+ QDomNode node;
+ QDomElement nodeE;
+ QString nodeName;
+
+ node = e.firstChild();
+ while( !node.isNull() )
+ {
+ nodeName = node.nodeName();
+ nodeE = node.toElement();
+
+ if( nodeName == "KivioFillStyle" )
+ {
+ m_pFillStyle->loadXML( node.toElement() );
+ }
+ else if( nodeName == "KivioLineStyle" )
+ {
+ m_pLineStyle->loadXML( node.toElement() );
+ }
+ else if( nodeName == "KivioTextStyle" )
+ {
+ m_pTextStyle->loadXML( node.toElement() );
+ }
+ else if( nodeName == "KivioTargetList" )
+ {
+ loadTargets( node.toElement() );
+ }
+ else if( nodeName == "CustomData" )
+ {
+ loadCustom( node.toElement() );
+ }
+ else if( nodeName == "Geometry" )
+ {
+ m_x = XmlReadFloat( nodeE, "x", 0.0f );
+ m_y = XmlReadFloat( nodeE, "y", 0.0f );
+ m_w = XmlReadFloat( nodeE, "w", 72.0f );
+ m_h = XmlReadFloat( nodeE, "h", 72.0f );
+ }
+
+ node = node.nextSibling();
+ }
+
+ return true;
+}
+
+bool KivioBaseTargetStencil::saveCustom( QDomElement &, QDomDocument & )
+{
+ return false;
+}
+
+bool KivioBaseTargetStencil::loadCustom( const QDomElement & )
+{
+ return true;
+}
+
+QDomElement KivioBaseTargetStencil::saveTargets( QDomDocument &doc )
+{
+ KivioConnectorTarget *p;
+
+ QDomElement e = doc.createElement("TargetList");
+
+ p = m_pTargets->first();
+ while( p )
+ {
+ e.appendChild( p->saveXML(doc) );
+
+ p = m_pTargets->next();
+ }
+
+ return e;
+}
+
+bool KivioBaseTargetStencil::loadTargets( const QDomElement &e )
+{
+ KivioConnectorTarget *p;
+ QDomNode node;
+ QDomElement targetE;
+ QString nodeName;
+
+ m_pTargets->clear();
+
+ node = e.firstChild();
+ while( !node.isNull() )
+ {
+ nodeName = node.nodeName();
+ targetE = node.toElement();
+
+ if( nodeName == "KivioConnectorTarget" )
+ {
+ p = new KivioConnectorTarget();
+ p->loadXML( targetE );
+ m_pTargets->append(p);
+ p = NULL;
+ }
+
+
+ node = node.nextSibling();
+ }
+
+
+ return true;
+}
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Geometry Routine
+//
+//////////////////////////////////////////////////////////////////////////////
+void KivioBaseTargetStencil::updateGeometry()
+{
+ ;
+}
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Target Routines
+//
+//////////////////////////////////////////////////////////////////////////////
+KivioConnectorTarget *KivioBaseTargetStencil::connectToTarget( KivioConnectorPoint *p, double threshHold)
+{
+ double px = p->x();
+ double py = p->y();
+
+ double tx, ty;
+
+ KivioConnectorTarget *pTarget = m_pTargets->first();
+ while( pTarget )
+ {
+ tx = pTarget->x();
+ ty = pTarget->y();
+
+
+ if( px >= tx - threshHold &&
+ px <= tx + threshHold &&
+ py >= ty - threshHold &&
+ py <= ty + threshHold )
+ {
+ // setTarget calls pTarget->addConnectorPoint() and removes
+ // any previous connections from p
+ p->setTarget( pTarget );
+ return pTarget;
+ }
+
+ pTarget = m_pTargets->next();
+ }
+
+ return NULL;
+}
+
+// we probably don't need targetID in the function since it's stored in p... but I don't remember so
+// i'm leaving it here for now.
+KivioConnectorTarget *KivioBaseTargetStencil::connectToTarget( KivioConnectorPoint *p, int /*targetID*/ )
+{
+ int id = p->targetId();
+
+ KivioConnectorTarget *pTarget = m_pTargets->first();
+ while( pTarget )
+ {
+ if( pTarget->id() == id )
+ {
+ p->setTarget(pTarget);
+
+ return pTarget;
+ }
+
+ pTarget = m_pTargets->next();
+ }
+
+ return NULL;
+}
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// ID Generation
+//
+//////////////////////////////////////////////////////////////////////////////
+int KivioBaseTargetStencil::generateIds( int nextAvailable )
+{
+ KivioConnectorTarget *pTarget = m_pTargets->first();
+
+ // Iterate through all the targets
+ while( pTarget )
+ {
+ // If this target has something connected to it
+ if( pTarget->hasConnections() )
+ {
+ // Set it's id to the next available id
+ pTarget->setId( nextAvailable );
+
+ // Increment the next available id
+ nextAvailable++;
+ }
+ else
+ {
+ // Otherwise mark it as unused (-1)
+ pTarget->setId( -1 );
+ }
+
+ pTarget = m_pTargets->next();
+ }
+
+ // Return the next availabe id
+ return nextAvailable;
+}
+
+void KivioBaseTargetStencil::copyBasicInto( KivioBaseTargetStencil *pStencil )
+{
+ pStencil->setSpawner( m_pSpawner );
+
+ m_pFillStyle->copyInto( pStencil->m_pFillStyle );
+ m_pLineStyle->copyInto( pStencil->m_pLineStyle );
+ m_pTextStyle->copyInto( pStencil->m_pTextStyle );
+
+ // Copy the targets
+ KivioConnectorTarget *pSrcTarget, *pTgTarget;
+ pSrcTarget = m_pTargets->first();
+ pTgTarget = pStencil->m_pTargets->first();
+
+ while( pSrcTarget && pTgTarget )
+ {
+ pTgTarget->setPosition( pSrcTarget->x(), pSrcTarget->y() );
+
+ pSrcTarget = m_pTargets->next();
+ pTgTarget = pStencil->m_pTargets->next();
+ }
+
+ // Copy the geometry
+ pStencil->m_x = m_x;
+ pStencil->m_y = m_y;
+ pStencil->m_w = m_w;
+ pStencil->m_h = m_h;
+
+ *(pStencil->m_pProtection) = *m_pProtection;
+ *(pStencil->m_pCanProtect) = *m_pCanProtect;
+}
+
+int KivioBaseTargetStencil::resizeHandlePositions()
+{
+ // Calculate the resize handle positions
+ int mask = KIVIO_RESIZE_HANDLE_POSITION_ALL;
+
+ if( m_pProtection->at( kpWidth ) )
+ {
+ mask &= ~(krhpNE | krhpNW | krhpSW | krhpSE | krhpE | krhpW);
+ }
+
+ if( m_pProtection->at( kpHeight) )
+ {
+ mask &= ~(krhpNE | krhpNW | krhpSW | krhpSE | krhpN | krhpS);
+ }
+
+ return mask;
+}