summaryrefslogtreecommitdiffstats
path: root/kig/objects/point_imp.cc
diff options
context:
space:
mode:
Diffstat (limited to 'kig/objects/point_imp.cc')
-rw-r--r--kig/objects/point_imp.cc223
1 files changed, 223 insertions, 0 deletions
diff --git a/kig/objects/point_imp.cc b/kig/objects/point_imp.cc
new file mode 100644
index 00000000..02d4d360
--- /dev/null
+++ b/kig/objects/point_imp.cc
@@ -0,0 +1,223 @@
+// Copyright (C) 2002 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.
+
+#include "point_imp.h"
+
+#include "bogus_imp.h"
+#include "../misc/kigtransform.h"
+#include "../misc/kigpainter.h"
+#include "../misc/coordinate_system.h"
+#include "../kig/kig_document.h"
+#include "../kig/kig_view.h"
+
+#include <klocale.h>
+
+PointImp::PointImp( const Coordinate& c )
+ : mc( c )
+{
+}
+
+Coordinate PointImp::attachPoint() const
+{
+ return mc;
+// return Coordinate::invalidCoord();
+}
+
+void PointImp::draw( KigPainter& p ) const
+{
+ p.drawFatPoint( mc );
+}
+
+bool PointImp::contains( const Coordinate& p, int width, const KigWidget& w ) const
+{
+ int twidth = width == -1 ? 5 : width;
+ return (p - mc).length() - twidth*w.screenInfo().pixelWidth() < 0;
+}
+
+bool PointImp::inRect( const Rect& r, int width, const KigWidget& w ) const
+{
+ double am = w.screenInfo().normalMiss( width );
+ return r.contains( mc, am );
+}
+
+const uint PointImp::numberOfProperties() const
+{
+ return Parent::numberOfProperties() + 3;
+}
+
+const QCStringList PointImp::propertiesInternalNames() const
+{
+ QCStringList l = Parent::propertiesInternalNames();
+ l << "coordinate";
+ l << "coordinate-x";
+ l << "coordinate-y";
+ assert( l.size() == PointImp::numberOfProperties() );
+ return l;
+}
+
+const QCStringList PointImp::properties() const
+{
+ QCStringList l = Parent::properties();
+ l << I18N_NOOP( "Coordinate" );
+ l << I18N_NOOP( "X coordinate" );
+ l << I18N_NOOP( "Y coordinate" );
+ assert( l.size() == PointImp::numberOfProperties() );
+ return l;
+}
+
+const ObjectImpType* PointImp::impRequirementForProperty( uint which ) const
+{
+ if ( which < Parent::numberOfProperties() )
+ return Parent::impRequirementForProperty( which );
+ else return PointImp::stype();
+}
+
+const char* PointImp::iconForProperty( uint which ) const
+{
+ if ( which < Parent::numberOfProperties() )
+ return Parent::iconForProperty( which );
+ if ( which == Parent::numberOfProperties() )
+ return "pointxy"; // coordinate
+ if ( which == Parent::numberOfProperties() + 1 )
+ return "pointxy"; // coordinate-x
+ if ( which == Parent::numberOfProperties() + 2 )
+ return "pointxy"; // coordinate-y
+ else assert( false );
+ return "";
+}
+
+ObjectImp* PointImp::property( uint which, const KigDocument& d ) const
+{
+ if ( which < Parent::numberOfProperties() )
+ return Parent::property( which, d );
+ if ( which == Parent::numberOfProperties() )
+ return new PointImp( mc );
+ if ( which == Parent::numberOfProperties() + 1 )
+ return new DoubleImp( mc.x );
+ if ( which == Parent::numberOfProperties() + 2 )
+ return new DoubleImp( mc.y );
+// else assert( false );
+ return new InvalidImp;
+}
+
+PointImp::~PointImp()
+{
+}
+
+PointImp* PointImp::copy() const
+{
+ return new PointImp( mc );
+}
+
+ObjectImp* PointImp::transform( const Transformation& t ) const
+{
+ Coordinate nc = t.apply( mc );
+ if ( nc.valid() ) return new PointImp( nc );
+ else return new InvalidImp();
+}
+
+void PointImp::setCoordinate( const Coordinate& c )
+{
+ mc = c;
+}
+
+void PointImp::fillInNextEscape( QString& s, const KigDocument& doc ) const
+{
+ s = s.arg( doc.coordinateSystem().fromScreen( mc, doc ) );
+}
+
+void PointImp::visit( ObjectImpVisitor* vtor ) const
+{
+ vtor->visit( this );
+}
+
+bool PointImp::equals( const ObjectImp& rhs ) const
+{
+ return rhs.inherits( PointImp::stype() ) &&
+ static_cast<const PointImp&>( rhs ).coordinate() == coordinate();
+}
+
+bool PointImp::canFillInNextEscape() const
+{
+ return true;
+}
+
+const ObjectImpType* PointImp::stype()
+{
+ static const ObjectImpType t(
+ Parent::stype(), "point",
+ I18N_NOOP( "point" ),
+ I18N_NOOP( "Select this point" ),
+ I18N_NOOP( "Select point %1" ),
+ I18N_NOOP( "Remove a Point" ),
+ I18N_NOOP( "Add a Point" ),
+ I18N_NOOP( "Move a Point" ),
+ I18N_NOOP( "Attach to this point" ),
+ I18N_NOOP( "Show a Point" ),
+ I18N_NOOP( "Hide a Point" )
+ );
+ return &t;
+}
+
+const ObjectImpType* PointImp::type() const
+{
+ return PointImp::stype();
+}
+
+bool PointImp::isPropertyDefinedOnOrThroughThisImp( uint which ) const
+{
+ return Parent::isPropertyDefinedOnOrThroughThisImp( which );
+}
+
+Rect PointImp::surroundingRect() const
+{
+ return Rect( mc, 0., 0. );
+}
+
+/*
+ */
+
+BogusPointImp::BogusPointImp( const Coordinate& c )
+ : PointImp( c )
+{
+}
+
+BogusPointImp::~BogusPointImp()
+{
+}
+
+const ObjectImpType* BogusPointImp::stype()
+{
+ static const ObjectImpType t(
+ 0, "boguspoint",
+ "SHOULDNOTBESEEN",
+ "SHOULDNOTBESEEN",
+ "SHOULDNOTBESEEN",
+ "SHOULDNOTBESEEN",
+ "SHOULDNOTBESEEN",
+ "SHOULDNOTBESEEN",
+ "SHOULDNOTBESEEN",
+ "SHOULDNOTBESEEN",
+ "SHOULDNOTBESEEN"
+ );
+ return &t;
+}
+
+const ObjectImpType* BogusPointImp::type() const
+{
+ return BogusPointImp::stype();
+}