Skip to content

Commit 38fa298

Browse files
committedApr 1, 2016
[composer] Fix polylines would be removed if they had < 3 points
when deleting nodes (2 node lines should be allowed)
1 parent 90b6f46 commit 38fa298

11 files changed

+69
-49
lines changed
 

‎python/core/composer/qgscomposernodesitem.sip

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ class QgsComposerNodesItem: QgsComposerItem
8787
/** Method called in addNode. */
8888
virtual bool _addNode( const int nodeIndex, const QPointF &newPoint, const double radius ) = 0;
8989

90+
/** Method called in removeNode. */
91+
virtual bool _removeNode( const int nodeIndex ) = 0;
92+
9093
/** Method called in paint. */
9194
virtual void _draw( QPainter *painter ) = 0;
9295

‎python/core/composer/qgscomposerpolygon.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ class QgsComposerPolygon: QgsComposerNodesItem
2323

2424
protected:
2525

26-
/** Add the point newPoint at the given position according to some
27-
* criteres. */
2826
bool _addNode( const int indexPoint, const QPointF &newPoint, const double radius );
2927

28+
bool _removeNode( const int indexPoint );
29+
3030
/** Draw points for the current shape. */
3131
void _draw( QPainter *painter );
3232

‎python/core/composer/qgscomposerpolyline.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ class QgsComposerPolyline: QgsComposerNodesItem
2323

2424
protected:
2525

26-
/** Add the point newPoint at the given position according to some
27-
* criteres. */
2826
bool _addNode( const int indexPoint, const QPointF &newPoint, const double radius );
2927

28+
bool _removeNode( const int indexPoint );
29+
3030
/** Draw points for the current shape. */
3131
void _draw( QPainter *painter );
3232

‎src/core/composer/qgscomposernodesitem.cpp

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -255,27 +255,9 @@ bool QgsComposerNodesItem::nodePosition( const int index, QPointF &position )
255255

256256
bool QgsComposerNodesItem::removeNode( const int index )
257257
{
258-
bool rc( false );
259-
260-
if ( index >= 0 && index < mPolygon.size() )
261-
{
262-
mPolygon.remove( index );
263-
264-
if ( mPolygon.size() < 3 )
265-
mPolygon.clear();
266-
else
267-
{
268-
int newSelectNode = index;
269-
if ( index == mPolygon.size() )
270-
newSelectNode = 0;
271-
setSelectedNode( newSelectNode );
272-
}
273-
258+
bool rc = _removeNode( index );
259+
if ( rc )
274260
updateSceneRect();
275-
276-
rc = true;
277-
}
278-
279261
return rc;
280262
}
281263

‎src/core/composer/qgscomposernodesitem.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ class CORE_EXPORT QgsComposerNodesItem: public QgsComposerItem
128128
/** Method called in addNode. */
129129
virtual bool _addNode( const int nodeIndex, const QPointF &newNode, const double radius ) = 0;
130130

131+
/** Method called in removeNode. */
132+
virtual bool _removeNode( const int nodeIndex ) = 0;
133+
131134
/** Method called in paint. */
132135
virtual void _draw( QPainter *painter ) = 0;
133136

‎src/core/composer/qgscomposerpolygon.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,23 @@ void QgsComposerPolygon::_writeXMLStyle( QDomDocument &doc, QDomElement &elmt )
120120
doc );
121121
elmt.appendChild( pe );
122122
}
123+
124+
bool QgsComposerPolygon::_removeNode( const int index )
125+
{
126+
if ( index < 0 || index >= mPolygon.size() )
127+
return false;
128+
129+
mPolygon.remove( index );
130+
131+
if ( mPolygon.size() < 3 )
132+
mPolygon.clear();
133+
else
134+
{
135+
int newSelectNode = index;
136+
if ( index == mPolygon.size() )
137+
newSelectNode = 0;
138+
setSelectedNode( newSelectNode );
139+
}
140+
141+
return true;
142+
}

‎src/core/composer/qgscomposerpolygon.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ class CORE_EXPORT QgsComposerPolygon: public QgsComposerNodesItem
6969
* criteres. */
7070
bool _addNode( const int indexPoint, const QPointF &newPoint, const double radius ) override;
7171

72+
bool _removeNode( const int nodeIndex ) override;
73+
7274
/** Draw nodes for the current shape. */
7375
void _draw( QPainter *painter ) override;
7476

‎src/core/composer/qgscomposerpolyline.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,26 @@ bool QgsComposerPolyline::_addNode( const int indexPoint,
5959
return true;
6060
}
6161

62+
bool QgsComposerPolyline::_removeNode( const int index )
63+
{
64+
if ( index < 0 || index >= mPolygon.size() )
65+
return false;
66+
67+
mPolygon.remove( index );
68+
69+
if ( mPolygon.size() < 2 )
70+
mPolygon.clear();
71+
else
72+
{
73+
int newSelectNode = index;
74+
if ( index >= mPolygon.size() )
75+
newSelectNode = mPolygon.size() - 1;
76+
setSelectedNode( newSelectNode );
77+
}
78+
79+
return true;
80+
}
81+
6282
void QgsComposerPolyline::createDefaultPolylineStyleSymbol()
6383
{
6484
QgsStringMap properties;

‎src/core/composer/qgscomposerpolyline.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ class CORE_EXPORT QgsComposerPolyline: public QgsComposerNodesItem
6868
* criteres. */
6969
bool _addNode( const int indexPoint, const QPointF &newPoint, const double radius ) override;
7070

71+
bool _removeNode( const int nodeIndex ) override;
72+
7173
/** Draw nodes for the current shape. */
7274
void _draw( QPainter *painter ) override;
7375

‎src/gui/qgscomposerview.cpp

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,27 +1577,24 @@ void QgsComposerView::deleteSelectedItems()
15771577
if ( mNodesItemIndex != -1 )
15781578
{
15791579
composition()->beginCommand( mNodesItem, tr( "Remove item node" ) );
1580-
bool rc = mNodesItem->removeNode( mNodesItemIndex );
1581-
composition()->endCommand();
1582-
1583-
bool nodeDeleted = true;
1584-
if ( rc )
1580+
if ( mNodesItem->removeNode( mNodesItemIndex ) )
15851581
{
1586-
mNodesItemIndex = mNodesItem->selectedNode();
1587-
1588-
if ( mNodesItemIndex != -1 )
1582+
composition()->endCommand();
1583+
if ( mNodesItem->nodesSize() > 0 )
15891584
{
1590-
nodeDeleted = false;
1591-
setSelectedNode( mNodesItem, mNodesItemIndex );
1585+
mNodesItemIndex = mNodesItem->selectedNode();
1586+
// setSelectedNode( mNodesItem, mNodesItemIndex );
1587+
}
1588+
else
1589+
{
1590+
mNodesItemIndex = -1;
1591+
mNodesItem = nullptr;
15921592
}
1593+
scene()->update();
15931594
}
1594-
1595-
if ( nodeDeleted )
1595+
else
15961596
{
1597-
scene()->update();
1598-
1599-
mNodesItemIndex = -1;
1600-
mNodesItem = nullptr;
1597+
composition()->cancelCommand();
16011598
}
16021599
}
16031600
}

‎tests/src/python/test_qgscomposerpolygon.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -139,15 +139,6 @@ def testRemoveNode(self):
139139
assert myTestResult, myMessage
140140

141141
self.assertEqual(self.mComposerPolygon.nodesSize(), 4)
142-
rc = self.mComposerPolygon.removeNode(3)
143-
self.assertEqual(rc, True)
144-
self.assertEqual(self.mComposerPolygon.nodesSize(), 3)
145-
146-
checker = QgsCompositionChecker(
147-
'composerpolygon_removednode', self.mComposition)
148-
checker.setControlPathPrefix("composer_polygon")
149-
myTestResult, myMessage = checker.testComposition()
150-
assert myTestResult, myMessage
151142

152143
def testAddNode(self):
153144
"""Test addNode method"""

0 commit comments

Comments
 (0)
Please sign in to comment.