[Marble-commits] KDE/kdeedu/marble/src/lib
Thibaut Gridel
tgridel at free.fr
Fri Jul 16 23:09:59 CEST 2010
SVN commit 1150816 by tgridel:
GeoDataMultiGeometry: store GeoDataGeometry* in GeoDataMultiGeometry
M +1 -1 MarbleGeometryModel.cpp
M +90 -40 geodata/data/GeoDataMultiGeometry.cpp
M +23 -8 geodata/data/GeoDataMultiGeometry.h
M +6 -1 geodata/data/GeoDataMultiGeometry_p.h
M +7 -0 geodata/data/GeoDataPlacemark.cpp
--- trunk/KDE/kdeedu/marble/src/lib/MarbleGeometryModel.cpp #1150815:1150816
@@ -52,7 +52,7 @@
if( !geometry ) return;
GeoDataMultiGeometry* multiGeometry = static_cast<GeoDataMultiGeometry*>( geometry );
- QVector<GeoDataGeometry> & vec = multiGeometry->vector();
+ QVector<GeoDataGeometry> vec = multiGeometry->vector();
QVector<GeoDataGeometry>::iterator iterator = vec.begin();
QVector<GeoDataGeometry>::iterator end = vec.end();
for(; iterator != end; ++iterator ) {
--- trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataMultiGeometry.cpp #1150815:1150816
@@ -52,94 +52,144 @@
return p()->m_vector.size();
}
-QVector<GeoDataGeometry>& GeoDataMultiGeometry::vector() const
+QVector<GeoDataGeometry> GeoDataMultiGeometry::vector() const
{
- return p()->m_vector;
+ QVector<GeoDataGeometry> results;
+
+ QVector<GeoDataGeometry*>::const_iterator it = p()->m_vector.constBegin();
+ QVector<GeoDataGeometry*>::const_iterator end = p()->m_vector.constEnd();
+
+ for (; it != end; ++it) {
+ GeoDataGeometry f = **it;
+ results.append( f );
}
+ return results;
+}
+
GeoDataGeometry& GeoDataMultiGeometry::at( int pos )
{
mDebug() << "detaching!";
- GeoDataGeometry::detach();
- return p()->m_vector[ pos ];
+ detach();
+ return *(p()->m_vector[ pos ]);
}
const GeoDataGeometry& GeoDataMultiGeometry::at( int pos ) const
{
- return p()->m_vector.at( pos );
+ return *(p()->m_vector.at( pos ));
}
GeoDataGeometry& GeoDataMultiGeometry::operator[]( int pos )
{
- GeoDataGeometry::detach();
- return p()->m_vector[ pos ];
+ detach();
+ return *(p()->m_vector[ pos ]);
}
const GeoDataGeometry& GeoDataMultiGeometry::operator[]( int pos ) const
{
- return p()->m_vector[ pos ];
+ return *(p()->m_vector[ pos ]);
}
GeoDataGeometry& GeoDataMultiGeometry::last()
{
- GeoDataGeometry::detach();
- return p()->m_vector.last();
+ detach();
+ return *(p()->m_vector.last());
}
GeoDataGeometry& GeoDataMultiGeometry::first()
{
- GeoDataGeometry::detach();
- return p()->m_vector.first();
+ detach();
+ return *(p()->m_vector.first());
}
const GeoDataGeometry& GeoDataMultiGeometry::last() const
{
- return p()->m_vector.last();
+ return *(p()->m_vector.last());
}
const GeoDataGeometry& GeoDataMultiGeometry::first() const
{
- return p()->m_vector.first();
+ return *(p()->m_vector.first());
}
-QVector<GeoDataGeometry>::Iterator GeoDataMultiGeometry::begin()
+QVector<GeoDataGeometry*>::Iterator GeoDataMultiGeometry::begin()
{
- GeoDataGeometry::detach();
+ detach();
return p()->m_vector.begin();
}
-QVector<GeoDataGeometry>::Iterator GeoDataMultiGeometry::end()
+QVector<GeoDataGeometry*>::Iterator GeoDataMultiGeometry::end()
{
- GeoDataGeometry::detach();
+ detach();
return p()->m_vector.end();
}
-QVector<GeoDataGeometry>::ConstIterator GeoDataMultiGeometry::constBegin() const
+QVector<GeoDataGeometry*>::ConstIterator GeoDataMultiGeometry::constBegin() const
{
return p()->m_vector.constBegin();
}
-QVector<GeoDataGeometry>::ConstIterator GeoDataMultiGeometry::constEnd() const
+QVector<GeoDataGeometry*>::ConstIterator GeoDataMultiGeometry::constEnd() const
{
return p()->m_vector.constEnd();
}
+/**
+ * @brief returns the requested child item
+ */
+GeoDataGeometry* GeoDataMultiGeometry::child( int i )
+{
+ return p()->m_vector.at( i );
+}
+
+/**
+ * @brief returns the position of an item in the list
+ */
+int GeoDataMultiGeometry::childPosition( GeoDataGeometry *object)
+{
+ for ( int i=0; i< p()->m_vector.size(); i++ )
+ {
+ if ( p()->m_vector.at( i ) == object )
+ {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/**
+* @brief add an element
+*/
+void GeoDataMultiGeometry::append( GeoDataGeometry *other )
+{
+ detach();
+ other->setParent( this );
+ p()->m_vector.append( other );
+}
+
+
+
void GeoDataMultiGeometry::append ( const GeoDataGeometry& value )
{
- GeoDataGeometry::detach();
- p()->m_vector.append( value );
+ detach();
+ GeoDataGeometry *g = new GeoDataGeometry( value );
+ g->setParent( this );
+ p()->m_vector.append( g );
}
GeoDataMultiGeometry& GeoDataMultiGeometry::operator << ( const GeoDataGeometry& value )
{
- GeoDataGeometry::detach();
- p()->m_vector.append( value );
+ detach();
+ GeoDataGeometry *g = new GeoDataGeometry( value );
+ g->setParent( this );
+ p()->m_vector.append( g );
return *this;
}
void GeoDataMultiGeometry::clear()
{
- GeoDataGeometry::detach();
+ detach();
+ qDeleteAll(p()->m_vector);
p()->m_vector.clear();
}
@@ -149,19 +199,19 @@
stream << p()->m_vector.size();
- for( QVector<GeoDataGeometry>::const_iterator iterator
+ for( QVector<GeoDataGeometry*>::const_iterator iterator
= p()->m_vector.constBegin();
iterator != p()->m_vector.constEnd();
++iterator ) {
- const GeoDataGeometry& geometry = *iterator;
- stream << geometry.geometryId();
- geometry.pack( stream );
+ const GeoDataGeometry *geometry = *iterator;
+ stream << geometry->geometryId();
+ geometry->pack( stream );
}
}
void GeoDataMultiGeometry::unpack( QDataStream& stream )
{
- GeoDataGeometry::detach();
+ detach();
GeoDataGeometry::unpack( stream );
int size = 0;
@@ -176,36 +226,36 @@
break;
case GeoDataPointId:
{
- GeoDataPoint point;
- point.unpack( stream );
+ GeoDataPoint *point = new GeoDataPoint;
+ point->unpack( stream );
p()->m_vector.append( point );
}
break;
case GeoDataLineStringId:
{
- GeoDataLineString lineString;
- lineString.unpack( stream );
+ GeoDataLineString *lineString = new GeoDataLineString;
+ lineString->unpack( stream );
p()->m_vector.append( lineString );
}
break;
case GeoDataLinearRingId:
{
- GeoDataLinearRing linearRing;
- linearRing.unpack( stream );
+ GeoDataLinearRing *linearRing = new GeoDataLinearRing;
+ linearRing->unpack( stream );
p()->m_vector.append( linearRing );
}
break;
case GeoDataPolygonId:
{
- GeoDataPolygon polygon;
- polygon.unpack( stream );
+ GeoDataPolygon *polygon = new GeoDataPolygon;
+ polygon->unpack( stream );
p()->m_vector.append( polygon );
}
break;
case GeoDataMultiGeometryId:
{
- GeoDataMultiGeometry multiGeometry;
- multiGeometry.unpack( stream );
+ GeoDataMultiGeometry *multiGeometry = new GeoDataMultiGeometry;
+ multiGeometry->unpack( stream );
p()->m_vector.append( multiGeometry );
}
break;
--- trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataMultiGeometry.h #1150815:1150816
@@ -52,19 +52,34 @@
GeoDataGeometry& last();
const GeoDataGeometry& last() const;
+ /**
+ * @brief returns the requested child item
+ */
+ GeoDataGeometry* child( int );
+
+ /**
+ * @brief returns the position of an item in the list
+ */
+ int childPosition( GeoDataGeometry *child);
+
+ /**
+ * @brief add an element
+ */
+ void append( GeoDataGeometry *other );
+
void append ( const GeoDataGeometry& value );
GeoDataMultiGeometry& operator << ( const GeoDataGeometry& value );
- QVector<GeoDataGeometry>::Iterator begin();
- QVector<GeoDataGeometry>::Iterator end();
- QVector<GeoDataGeometry>::ConstIterator constBegin() const;
- QVector<GeoDataGeometry>::ConstIterator constEnd() const;
+ QVector<GeoDataGeometry*>::Iterator begin();
+ QVector<GeoDataGeometry*>::Iterator end();
+ QVector<GeoDataGeometry*>::ConstIterator constBegin() const;
+ QVector<GeoDataGeometry*>::ConstIterator constEnd() const;
void clear();
- QVector<GeoDataGeometry>& vector() const;
+ QVector<GeoDataGeometry> vector() const;
- QVector<GeoDataGeometry>::Iterator erase ( QVector<GeoDataGeometry>::Iterator pos );
- QVector<GeoDataGeometry>::Iterator erase ( QVector<GeoDataGeometry>::Iterator begin,
- QVector<GeoDataGeometry>::Iterator end );
+ QVector<GeoDataGeometry*>::Iterator erase ( QVector<GeoDataGeometry*>::Iterator pos );
+ QVector<GeoDataGeometry*>::Iterator erase ( QVector<GeoDataGeometry*>::Iterator begin,
+ QVector<GeoDataGeometry*>::Iterator end );
// Serialize the Placemark to @p stream
virtual void pack( QDataStream& stream ) const;
--- trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataMultiGeometry_p.h #1150815:1150816
@@ -25,6 +25,11 @@
{
}
+ ~GeoDataMultiGeometryPrivate()
+ {
+ qDeleteAll(m_vector);
+ }
+
virtual GeoDataGeometryPrivate* copy()
{
GeoDataMultiGeometryPrivate* copy = new GeoDataMultiGeometryPrivate;
@@ -41,7 +46,7 @@
{
return GeoDataMultiGeometryId;
}
- QVector<GeoDataGeometry> m_vector;
+ QVector<GeoDataGeometry*> m_vector;
};
} // namespace Marble
--- trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataPlacemark.cpp #1150815:1150816
@@ -106,12 +106,14 @@
{
detach();
p()->m_coordinate = GeoDataPoint( lon, lat, alt );
+ p()->m_coordinate.setParent( this );
}
void GeoDataPlacemark::setCoordinate( const GeoDataPoint &point )
{
detach();
p()->m_coordinate = GeoDataPoint( point );
+ p()->m_coordinate.setParent( this );
}
void GeoDataPlacemark::setGeometry( const GeoDataPoint& point )
@@ -119,6 +121,7 @@
detach();
delete p()->m_geometry;
p()->m_geometry = new GeoDataPoint( point );
+ p()->m_geometry->setParent( this );
}
void GeoDataPlacemark::setGeometry( const GeoDataLineString& point )
@@ -126,6 +129,7 @@
detach();
delete p()->m_geometry;
p()->m_geometry = new GeoDataLineString( point );
+ p()->m_geometry->setParent( this );
}
void GeoDataPlacemark::setGeometry( const GeoDataLinearRing& point )
@@ -133,6 +137,7 @@
detach();
delete p()->m_geometry;
p()->m_geometry = new GeoDataLinearRing( point );
+ p()->m_geometry->setParent( this );
}
void GeoDataPlacemark::setGeometry( const GeoDataPolygon& point )
@@ -140,6 +145,7 @@
detach();
delete p()->m_geometry;
p()->m_geometry = new GeoDataPolygon( point );
+ p()->m_geometry->setParent( this );
}
void GeoDataPlacemark::setGeometry( const GeoDataMultiGeometry& point )
@@ -147,6 +153,7 @@
detach();
delete p()->m_geometry;
p()->m_geometry = new GeoDataMultiGeometry( point );
+ p()->m_geometry->setParent( this );
}
qreal GeoDataPlacemark::area() const
More information about the Marble-commits
mailing list