15
15
***************************************************************************/
17
#include "qgsmapcanvas.h"
18
#include "qgsmaplayer.h"
19
#include "qgsvectorlayer.h"
20
17
#include "qgsgrassedittools.h"
18
#include "qgsgrassattributes.h"
21
19
#include "qgsgrassedit.h"
22
#include "qgsgrassattributes.h"
23
#include "../../src/providers/grass/qgsgrassprovider.h"
20
#include "qgsgrassprovider.h"
22
#include "qgisinterface.h"
23
#include "qgslogger.h"
24
#include "qgsmapcanvas.h"
24
25
#include "qgsvertexmarker.h"
27
#include <grass/gis.h>
27
#include <QMouseEvent>
28
31
#include <grass/Vect.h>
33
QgsGrassEditTool::QgsGrassEditTool(QgsGrassEdit* edit)
34
: QgsMapTool(edit->mCanvas), e(edit)
35
QgsGrassEditTool::QgsGrassEditTool( QgsGrassEdit* edit )
36
: QgsMapTool( edit->mCanvas ), e( edit )
38
void QgsGrassEditTool::canvasPressEvent(QMouseEvent * event)
40
void QgsGrassEditTool::canvasPressEvent( QMouseEvent * event )
40
QgsPoint point = toLayerCoords(e->layer(), event->pos());
41
mouseClick(point, event->button());
42
QgsPoint point = toLayerCoordinates( e->layer(), event->pos() );
43
mouseClick( point, event->button() );
44
46
e->mLastPoint = point;
46
e->statusBar()->message(e->mCanvasPrompt);
48
e->statusBar()->showMessage( e->mCanvasPrompt );
49
std::cerr << "n_points = " << e->mEditPoints->n_points << std::endl;
50
QgsDebugMsg( QString( "n_points = %1" ).arg( e->mEditPoints->n_points ) );
53
void QgsGrassEditTool::canvasMoveEvent(QMouseEvent * event)
53
void QgsGrassEditTool::canvasMoveEvent( QMouseEvent * event )
55
QgsPoint point = toLayerCoords(e->layer(), event->pos());
55
QgsPoint point = toLayerCoordinates( e->layer(), event->pos() );
58
e->statusBar()->message(e->mCanvasPrompt);
58
e->statusBar()->showMessage( e->mCanvasPrompt );
64
64
// ------------------------------------------------------------------
67
QgsGrassEditNewPoint::QgsGrassEditNewPoint(QgsGrassEdit* edit, bool newCentroid)
68
: QgsGrassEditTool(edit), mNewCentroid(newCentroid)
67
QgsGrassEditNewPoint::QgsGrassEditNewPoint( QgsGrassEdit* edit, bool newCentroid )
68
: QgsGrassEditTool( edit ), mNewCentroid( newCentroid )
71
e->setCanvasPropmt( QObject::tr("New centroid"), "", "" );
71
e->setCanvasPrompt( tr( "New centroid" ), "", "" );
73
e->setCanvasPropmt( QObject::tr("New point"), "", "" );
73
e->setCanvasPrompt( tr( "New point" ), "", "" );
78
void QgsGrassEditNewPoint::mouseClick(QgsPoint & point, Qt::ButtonState button)
78
void QgsGrassEditNewPoint::mouseClick( QgsPoint & point, Qt::MouseButton button )
80
Vect_reset_line ( e->mEditPoints );
82
Vect_append_point ( e->mEditPoints, point.x(), point.y(), 0.0 );
85
if (mNewCentroid) // new centroid or point ?
91
line = e->writeLine ( type, e->mEditPoints );
97
e->mAttributes->setLine ( line );
98
e->mAttributes->clear();
102
e->mAttributes = new QgsGrassAttributes ( e, e->mProvider, line, e->mQgisApp );
104
for ( int i = 0; i < e->mCats->n_cats; i++ ) {
105
e->addAttributes ( e->mCats->field[i], e->mCats->cat[i] );
107
e->mAttributes->show();
108
e->mAttributes->raise();
80
if ( button != Qt::LeftButton )
83
Vect_reset_line( e->mEditPoints );
85
Vect_append_point( e->mEditPoints, point.x(), point.y(), 0.0 );
88
if ( mNewCentroid ) // new centroid or point ?
94
line = e->writeLine( type, e->mEditPoints );
100
e->mAttributes->setLine( line );
101
e->mAttributes->clear();
105
e->mAttributes = new QgsGrassAttributes( e, e->mProvider, line, e->mIface->mainWindow() );
107
for ( int i = 0; i < e->mCats->n_cats; i++ )
109
e->addAttributes( e->mCats->field[i], e->mCats->cat[i] );
111
e->mAttributes->show();
112
e->mAttributes->raise();
113
117
// NEW LINE + NEW BOUNDARY
114
118
// ------------------------------------------------------------------
116
QgsGrassEditNewLine::QgsGrassEditNewLine(QgsGrassEdit* edit, bool newBoundary)
117
: QgsGrassEditTool(edit), mNewBoundary(newBoundary)
120
QgsGrassEditNewLine::QgsGrassEditNewLine( QgsGrassEdit* edit, bool newBoundary )
121
: QgsGrassEditTool( edit ), mNewBoundary( newBoundary )
119
e->setCanvasPropmt( QObject::tr("New vertex"), "", "");
123
e->setCanvasPrompt( tr( "New vertex" ), "", "" );
122
126
void QgsGrassEditNewLine::deactivate()
124
128
// Delete last segment
125
if ( e->mEditPoints->n_points > 1 ) {
126
Vect_reset_line ( e->mPoints );
127
Vect_append_points ( e->mPoints, e->mEditPoints, GV_FORWARD );
128
e->displayDynamic ( e->mPoints );
129
if ( e->mEditPoints->n_points > 1 )
131
Vect_reset_line( e->mPoints );
132
Vect_append_points( e->mPoints, e->mEditPoints, GV_FORWARD );
133
e->displayDynamic( e->mPoints );
130
e->setCanvasPropmt( QObject::tr("New vertex"), "", "");
135
e->setCanvasPrompt( tr( "New vertex" ), "", "" );
132
137
QgsGrassEditTool::deactivate(); // call default bahivour
135
140
void QgsGrassEditNewLine::activate()
137
std::cerr << "QgsGrassEditNewLine::activate()" << std::endl;
142
QgsDebugMsg( "entered." );
139
144
// Display dynamic segment
140
if ( e->mEditPoints->n_points > 0 ) {
141
Vect_reset_line ( e->mPoints );
142
Vect_append_points ( e->mPoints, e->mEditPoints, GV_FORWARD );
143
QgsPoint point = toMapCoords( e->mCanvas->mouseLastXY() );
144
Vect_append_point ( e->mPoints, point.x(), point.y(), 0.0 );
145
e->displayDynamic ( e->mPoints );
145
if ( e->mEditPoints->n_points > 0 )
147
Vect_reset_line( e->mPoints );
148
Vect_append_points( e->mPoints, e->mEditPoints, GV_FORWARD );
149
QgsPoint point = toMapCoordinates( e->mCanvas->mouseLastXY() );
150
Vect_append_point( e->mPoints, point.x(), point.y(), 0.0 );
151
e->displayDynamic( e->mPoints );
148
154
QgsGrassEditTool::activate(); // call default bahivour
151
void QgsGrassEditNewLine::mouseClick(QgsPoint & point, Qt::ButtonState button)
157
void QgsGrassEditNewLine::mouseClick( QgsPoint & point, Qt::MouseButton button )
154
161
case Qt::LeftButton:
155
162
if ( e->mEditPoints->n_points > 2 )
157
e->snap ( point, e->mEditPoints->x[0], e->mEditPoints->y[0] );
164
e->snap( point, e->mEditPoints->x[0], e->mEditPoints->y[0] );
163
Vect_append_point ( e->mEditPoints, point.x(), point.y(), 0.0 );
170
Vect_append_point( e->mEditPoints, point.x(), point.y(), 0.0 );
166
Vect_reset_line ( e->mPoints );
167
Vect_append_points ( e->mPoints, e->mEditPoints, GV_FORWARD );
168
e->displayDynamic ( e->mPoints );
173
Vect_reset_line( e->mPoints );
174
Vect_append_points( e->mPoints, e->mEditPoints, GV_FORWARD );
175
e->displayDynamic( e->mPoints );
170
177
case Qt::MidButton:
171
if ( e->mEditPoints->n_points > 0 ) {
178
if ( e->mEditPoints->n_points > 0 )
172
180
e->mEditPoints->n_points--;
173
Vect_reset_line ( e->mPoints );
174
Vect_append_points ( e->mPoints, e->mEditPoints, GV_FORWARD );
175
QgsPoint point = toMapCoords( e->mCanvas->mouseLastXY() );
176
Vect_append_point ( e->mPoints, point.x(), point.y(), 0.0 );
177
e->displayDynamic ( e->mPoints );
181
Vect_reset_line( e->mPoints );
182
Vect_append_points( e->mPoints, e->mEditPoints, GV_FORWARD );
183
QgsPoint point = toMapCoordinates( e->mCanvas->mouseLastXY() );
184
Vect_append_point( e->mPoints, point.x(), point.y(), 0.0 );
185
e->displayDynamic( e->mPoints );
180
188
case Qt::RightButton:
181
189
e->eraseDynamic();
182
if ( e->mEditPoints->n_points > 1 ) {
190
if ( e->mEditPoints->n_points > 1 )
185
194
if ( mNewBoundary ) // boundary or line?
191
line = e->writeLine ( type, e->mEditPoints );
200
line = e->writeLine( type, e->mEditPoints );
193
202
e->displayUpdated();
195
if ( e->mAttributes )
197
e->mAttributes->setLine ( line );
198
e->mAttributes->clear();
202
e->mAttributes = new QgsGrassAttributes ( e, e->mProvider, line, e->mQgisApp );
204
for ( int i = 0; i < e->mCats->n_cats; i++ ) {
205
e->addAttributes ( e->mCats->field[i], e->mCats->cat[i] );
204
if ( e->mAttributes )
206
e->mAttributes->setLine( line );
207
e->mAttributes->clear();
211
e->mAttributes = new QgsGrassAttributes( e, e->mProvider, line, e->mIface->mainWindow() );
213
for ( int i = 0; i < e->mCats->n_cats; i++ )
215
e->addAttributes( e->mCats->field[i], e->mCats->cat[i] );
207
217
e->mAttributes->show();
208
218
e->mAttributes->raise();
210
Vect_reset_line ( e->mEditPoints );
214
if ( e->mEditPoints->n_points == 0 ) {
215
e->setCanvasPropmt( QObject::tr("New point"), "", "");
216
} else if ( e->mEditPoints->n_points == 1 ) {
217
e->setCanvasPropmt( QObject::tr("New point"), QObject::tr("Undo last point"), "" );
218
} else if ( e->mEditPoints->n_points > 1 ) {
219
e->setCanvasPropmt( QObject::tr("New point"), QObject::tr("Undo last point"), QObject::tr("Close line"));
220
Vect_reset_line( e->mEditPoints );
228
if ( e->mEditPoints->n_points == 0 )
230
e->setCanvasPrompt( tr( "New point" ), "", "" );
232
else if ( e->mEditPoints->n_points == 1 )
234
e->setCanvasPrompt( tr( "New point" ), tr( "Undo last point" ), "" );
236
else if ( e->mEditPoints->n_points > 1 )
238
e->setCanvasPrompt( tr( "New point" ), tr( "Undo last point" ), tr( "Close line" ) );
223
void QgsGrassEditNewLine::mouseMove(QgsPoint & newPoint)
242
void QgsGrassEditNewLine::mouseMove( QgsPoint & newPoint )
225
if ( e->mEditPoints->n_points > 0 ) {
226
// Draw the line with new segment
227
Vect_reset_line ( e->mPoints );
228
Vect_append_points ( e->mPoints, e->mEditPoints, GV_FORWARD );
229
Vect_append_point ( e->mPoints, newPoint.x(), newPoint.y(), 0.0 );
230
e->displayDynamic ( e->mPoints );
244
if ( e->mEditPoints->n_points > 0 )
246
// Draw the line with new segment
247
Vect_reset_line( e->mPoints );
248
Vect_append_points( e->mPoints, e->mEditPoints, GV_FORWARD );
249
Vect_append_point( e->mPoints, newPoint.x(), newPoint.y(), 0.0 );
250
e->displayDynamic( e->mPoints );
237
257
// ------------------------------------------------------------------
239
QgsGrassEditMoveVertex::QgsGrassEditMoveVertex(QgsGrassEdit* edit)
240
: QgsGrassEditTool(edit)
259
QgsGrassEditMoveVertex::QgsGrassEditMoveVertex( QgsGrassEdit* edit )
260
: QgsGrassEditTool( edit )
242
e->setCanvasPropmt( QObject::tr("Select vertex"), "", "" );
262
e->setCanvasPrompt( tr( "Select vertex" ), "", "" );
245
void QgsGrassEditMoveVertex::mouseClick(QgsPoint & point, Qt::ButtonState button)
265
void QgsGrassEditMoveVertex::mouseClick( QgsPoint & point, Qt::MouseButton button )
247
267
double thresh = e->threshold();
250
271
case Qt::LeftButton:
251
// Move previously selected vertex
252
if ( e->mSelectedLine > 0 ) {
272
// Move previously selected vertex
273
if ( e->mSelectedLine > 0 )
253
275
e->eraseDynamic();
254
e->eraseElement ( e->mSelectedLine );
276
e->eraseElement( e->mSelectedLine );
257
int type = e->mProvider->readLine ( e->mPoints, e->mCats, e->mSelectedLine );
279
int type = e->mProvider->readLine( e->mPoints, e->mCats, e->mSelectedLine );
259
281
e->mPoints->x[e->mSelectedPart] = point.x();
260
282
e->mPoints->y[e->mSelectedPart] = point.y();
262
Vect_line_prune ( e->mPoints );
263
e->mProvider->rewriteLine ( e->mSelectedLine, type, e->mPoints, e->mCats );
284
Vect_line_prune( e->mPoints );
285
e->mProvider->rewriteLine( e->mSelectedLine, type, e->mPoints, e->mCats );
265
287
e->displayUpdated();
267
289
e->mSelectedLine = 0;
268
Vect_reset_line ( e->mEditPoints );
290
Vect_reset_line( e->mEditPoints );
270
e->setCanvasPropmt( QObject::tr("Select vertex"), "", "" );
292
e->setCanvasPrompt( tr( "Select vertex" ), "", "" );
272
296
// Select new line
273
e->mSelectedLine = e->mProvider->findLine ( point.x(), point.y(), GV_LINES, thresh );
297
e->mSelectedLine = e->mProvider->findLine( point.x(), point.y(), GV_LINES, thresh );
275
if ( e->mSelectedLine ) { // highlite
276
e->mProvider->readLine ( e->mEditPoints, NULL, e->mSelectedLine );
277
e->displayElement ( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
299
if ( e->mSelectedLine ) // highlite
301
e->mProvider->readLine( e->mEditPoints, NULL, e->mSelectedLine );
302
e->displayElement( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
279
304
double xl, yl; // nearest point on the line
281
306
// Note first segment is 1!
282
e->mSelectedPart = Vect_line_distance ( e->mEditPoints, point.x(), point.y(), 0.0, 0,
283
&xl, &yl, NULL, NULL, NULL, NULL );
307
e->mSelectedPart = Vect_line_distance( e->mEditPoints, point.x(), point.y(), 0.0, 0,
308
&xl, &yl, NULL, NULL, NULL, NULL );
285
double dist1 = Vect_points_distance ( xl, yl, 0.0, e->mEditPoints->x[e->mSelectedPart-1],
286
e->mEditPoints->y[e->mSelectedPart-1], 0.0, 0);
287
double dist2 = Vect_points_distance ( xl, yl, 0.0, e->mEditPoints->x[e->mSelectedPart],
288
e->mEditPoints->y[e->mSelectedPart], 0.0, 0);
310
double dist1 = Vect_points_distance( xl, yl, 0.0, e->mEditPoints->x[e->mSelectedPart-1],
311
e->mEditPoints->y[e->mSelectedPart-1], 0.0, 0 );
312
double dist2 = Vect_points_distance( xl, yl, 0.0, e->mEditPoints->x[e->mSelectedPart],
313
e->mEditPoints->y[e->mSelectedPart], 0.0, 0 );
290
315
if ( dist1 < dist2 ) e->mSelectedPart--;
292
e->setCanvasPropmt( QObject::tr("Select new position"), "", "Release vertex" );
317
e->setCanvasPrompt( tr( "Select new position" ), "", "Release vertex" );
297
322
case Qt::RightButton:
298
323
e->eraseDynamic();
299
e->displayElement ( e->mSelectedLine, e->mSymb[e->mLineSymb[e->mSelectedLine]], e->mSize );
324
e->displayElement( e->mSelectedLine, e->mSymb[e->mLineSymb[e->mSelectedLine]], e->mSize );
300
325
e->mSelectedLine = 0;
301
Vect_reset_line ( e->mEditPoints );
326
Vect_reset_line( e->mEditPoints );
303
e->setCanvasPropmt( QObject::tr("Select vertex"), "", "" );
328
e->setCanvasPrompt( tr( "Select vertex" ), "", "" );
312
void QgsGrassEditMoveVertex::mouseMove(QgsPoint & newPoint)
338
void QgsGrassEditMoveVertex::mouseMove( QgsPoint & newPoint )
314
if ( e->mSelectedLine > 0 ) {
340
if ( e->mSelectedLine > 0 )
315
342
// Transform coordinates
316
Vect_reset_line ( e->mPoints );
317
if ( e->mSelectedPart == 0 ) {
318
Vect_append_point ( e->mPoints, e->mEditPoints->x[1], e->mEditPoints->y[1], 0.0 );
319
Vect_append_point ( e->mPoints, newPoint.x(), newPoint.y(), 0.0 );
320
} else if ( e->mSelectedPart == e->mEditPoints->n_points-1 ) {
321
Vect_append_point ( e->mPoints, e->mEditPoints->x[e->mSelectedPart-1],
322
e->mEditPoints->y[e->mSelectedPart-1], 0.0 );
323
Vect_append_point ( e->mPoints, newPoint.x(), newPoint.y(), 0.0 );
325
Vect_append_point ( e->mPoints, e->mEditPoints->x[e->mSelectedPart-1],
326
e->mEditPoints->y[e->mSelectedPart-1], 0.0 );
327
Vect_append_point ( e->mPoints, newPoint.x(), newPoint.y(), 0.0 );
328
Vect_append_point ( e->mPoints, e->mEditPoints->x[e->mSelectedPart+1],
329
e->mEditPoints->y[e->mSelectedPart+1], 0.0 );
331
for (int i = 0; i < e->mPoints->n_points; i++ ) {
332
std::cerr << e->mPoints->x[i] << " " << e->mPoints->y[i] << std::endl;
343
Vect_reset_line( e->mPoints );
344
if ( e->mSelectedPart == 0 )
346
Vect_append_point( e->mPoints, e->mEditPoints->x[1], e->mEditPoints->y[1], 0.0 );
347
Vect_append_point( e->mPoints, newPoint.x(), newPoint.y(), 0.0 );
349
else if ( e->mSelectedPart == e->mEditPoints->n_points - 1 )
351
Vect_append_point( e->mPoints, e->mEditPoints->x[e->mSelectedPart-1],
352
e->mEditPoints->y[e->mSelectedPart-1], 0.0 );
353
Vect_append_point( e->mPoints, newPoint.x(), newPoint.y(), 0.0 );
357
Vect_append_point( e->mPoints, e->mEditPoints->x[e->mSelectedPart-1],
358
e->mEditPoints->y[e->mSelectedPart-1], 0.0 );
359
Vect_append_point( e->mPoints, newPoint.x(), newPoint.y(), 0.0 );
360
Vect_append_point( e->mPoints, e->mEditPoints->x[e->mSelectedPart+1],
361
e->mEditPoints->y[e->mSelectedPart+1], 0.0 );
363
for ( int i = 0; i < e->mPoints->n_points; i++ )
365
QgsDebugMsg( QString( "%1 %2" ).arg( e->mPoints->x[i] ).arg( e->mPoints->y[i] ) );
335
e->displayDynamic ( e->mPoints );
368
e->displayDynamic( e->mPoints );
342
375
// ------------------------------------------------------------------
344
QgsGrassEditAddVertex::QgsGrassEditAddVertex(QgsGrassEdit* edit)
345
: QgsGrassEditTool(edit)
377
QgsGrassEditAddVertex::QgsGrassEditAddVertex( QgsGrassEdit* edit )
378
: QgsGrassEditTool( edit )
347
e->setCanvasPropmt( QObject::tr("Select line segment"), "", "" );
380
e->setCanvasPrompt( tr( "Select line segment" ), "", "" );
350
void QgsGrassEditAddVertex::mouseClick(QgsPoint & point, Qt::ButtonState button)
383
void QgsGrassEditAddVertex::mouseClick( QgsPoint & point, Qt::MouseButton button )
352
385
double thresh = e->threshold();
355
389
case Qt::LeftButton:
356
// Add vertex to previously selected line
357
if ( e->mSelectedLine > 0 ) {
390
// Add vertex to previously selected line
391
if ( e->mSelectedLine > 0 )
358
393
e->eraseDynamic();
359
e->eraseElement ( e->mSelectedLine );
362
int type = e->mProvider->readLine ( e->mPoints, e->mCats, e->mSelectedLine );
364
if ( e->mAddVertexEnd && e->mSelectedPart == e->mEditPoints->n_points-1 ) {
366
Vect_append_point ( e->mPoints, point.x(), point.y(), 0.0 );
368
Vect_line_insert_point ( e->mPoints, e->mSelectedPart, point.x(), point.y(), 0.0 );
371
Vect_line_prune ( e->mPoints );
372
e->mProvider->rewriteLine ( e->mSelectedLine, type, e->mPoints, e->mCats );
394
e->eraseElement( e->mSelectedLine );
397
int type = e->mProvider->readLine( e->mPoints, e->mCats, e->mSelectedLine );
399
if ( e->mAddVertexEnd && e->mSelectedPart == e->mEditPoints->n_points - 1 )
402
Vect_append_point( e->mPoints, point.x(), point.y(), 0.0 );
406
Vect_line_insert_point( e->mPoints, e->mSelectedPart, point.x(), point.y(), 0.0 );
409
Vect_line_prune( e->mPoints );
410
e->mProvider->rewriteLine( e->mSelectedLine, type, e->mPoints, e->mCats );
374
412
e->displayUpdated();
376
414
e->mSelectedLine = 0;
377
Vect_reset_line ( e->mEditPoints );
379
e->setCanvasPropmt( QObject::tr("Select line segment"), "", "" );
382
e->mSelectedLine = e->mProvider->findLine ( point.x(), point.y(), GV_LINES, thresh );
384
if ( e->mSelectedLine ) { // highlite
385
e->mProvider->readLine ( e->mEditPoints, NULL, e->mSelectedLine );
386
e->displayElement ( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
415
Vect_reset_line( e->mEditPoints );
417
e->setCanvasPrompt( tr( "Select line segment" ), "", "" );
422
e->mSelectedLine = e->mProvider->findLine( point.x(), point.y(), GV_LINES, thresh );
424
if ( e->mSelectedLine ) // highlite
426
e->mProvider->readLine( e->mEditPoints, NULL, e->mSelectedLine );
427
e->displayElement( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
388
429
double xl, yl; // nearest point on the line
390
// Note first segment is 1!
391
e->mSelectedPart = Vect_line_distance ( e->mEditPoints, point.x(), point.y(), 0.0, 0,
392
&xl, &yl, NULL, NULL, NULL, NULL );
394
double dist1 = Vect_points_distance ( xl, yl, 0.0, e->mEditPoints->x[e->mSelectedPart-1],
395
e->mEditPoints->y[e->mSelectedPart-1], 0.0, 0);
396
double dist2 = Vect_points_distance ( xl, yl, 0.0, e->mEditPoints->x[e->mSelectedPart],
397
e->mEditPoints->y[e->mSelectedPart], 0.0, 0);
399
double maxdist = (dist1 + dist2)/4;
401
if ( e->mSelectedPart == 1 && dist1 < maxdist ) {
431
// Note first segment is 1!
432
e->mSelectedPart = Vect_line_distance( e->mEditPoints, point.x(), point.y(), 0.0, 0,
433
&xl, &yl, NULL, NULL, NULL, NULL );
435
double dist1 = Vect_points_distance( xl, yl, 0.0, e->mEditPoints->x[e->mSelectedPart-1],
436
e->mEditPoints->y[e->mSelectedPart-1], 0.0, 0 );
437
double dist2 = Vect_points_distance( xl, yl, 0.0, e->mEditPoints->x[e->mSelectedPart],
438
e->mEditPoints->y[e->mSelectedPart], 0.0, 0 );
440
double maxdist = ( dist1 + dist2 ) / 4;
442
if ( e->mSelectedPart == 1 && dist1 < maxdist )
402
444
e->mSelectedPart = 0;
403
445
e->mAddVertexEnd = true;
404
} else if ( e->mSelectedPart == e->mEditPoints->n_points-1 && dist2 < maxdist ) {
447
else if ( e->mSelectedPart == e->mEditPoints->n_points - 1 && dist2 < maxdist )
405
449
e->mAddVertexEnd = true;
407
453
e->mAddVertexEnd = false;
410
e->setCanvasPropmt( QObject::tr("New vertex position"), "", QObject::tr("Release") );
412
e->setCanvasPropmt( QObject::tr("Select line segment"), "", "" );
456
e->setCanvasPrompt( tr( "New vertex position" ), "", tr( "Release" ) );
460
e->setCanvasPrompt( tr( "Select line segment" ), "", "" );
417
465
case Qt::RightButton:
418
466
e->eraseDynamic();
419
e->displayElement ( e->mSelectedLine, e->mSymb[e->mLineSymb[e->mSelectedLine]], e->mSize );
467
e->displayElement( e->mSelectedLine, e->mSymb[e->mLineSymb[e->mSelectedLine]], e->mSize );
420
468
e->mSelectedLine = 0;
421
Vect_reset_line ( e->mEditPoints );
469
Vect_reset_line( e->mEditPoints );
423
e->setCanvasPropmt( QObject::tr("Select line segment"), "", "" );
471
e->setCanvasPrompt( tr( "Select line segment" ), "", "" );
432
void QgsGrassEditAddVertex::mouseMove(QgsPoint & newPoint)
481
void QgsGrassEditAddVertex::mouseMove( QgsPoint & newPoint )
434
if ( e->mSelectedLine > 0 ) {
435
Vect_reset_line ( e->mPoints );
436
if ( e->mAddVertexEnd ) {
437
Vect_append_point ( e->mPoints, e->mEditPoints->x[e->mSelectedPart],
438
e->mEditPoints->y[e->mSelectedPart], 0.0 );
439
Vect_append_point ( e->mPoints, newPoint.x(), newPoint.y(), 0.0 );
441
Vect_append_point ( e->mPoints, e->mEditPoints->x[e->mSelectedPart-1],
442
e->mEditPoints->y[e->mSelectedPart-1], 0.0 );
443
Vect_append_point ( e->mPoints, newPoint.x(), newPoint.y(), 0.0 );
444
Vect_append_point ( e->mPoints, e->mEditPoints->x[e->mSelectedPart],
445
e->mEditPoints->y[e->mSelectedPart], 0.0 );
447
for (int i = 0; i < e->mPoints->n_points; i++ ) {
448
std::cerr << e->mPoints->x[i] << " " << e->mPoints->y[i] << std::endl;
483
if ( e->mSelectedLine > 0 )
485
Vect_reset_line( e->mPoints );
486
if ( e->mAddVertexEnd )
488
Vect_append_point( e->mPoints, e->mEditPoints->x[e->mSelectedPart],
489
e->mEditPoints->y[e->mSelectedPart], 0.0 );
490
Vect_append_point( e->mPoints, newPoint.x(), newPoint.y(), 0.0 );
494
Vect_append_point( e->mPoints, e->mEditPoints->x[e->mSelectedPart-1],
495
e->mEditPoints->y[e->mSelectedPart-1], 0.0 );
496
Vect_append_point( e->mPoints, newPoint.x(), newPoint.y(), 0.0 );
497
Vect_append_point( e->mPoints, e->mEditPoints->x[e->mSelectedPart],
498
e->mEditPoints->y[e->mSelectedPart], 0.0 );
500
for ( int i = 0; i < e->mPoints->n_points; i++ )
502
QgsDebugMsg( QString( "%1 %2" ).arg( e->mPoints->x[i] ).arg( e->mPoints->y[i] ) );
451
e->displayDynamic ( e->mPoints );
505
e->displayDynamic( e->mPoints );
457
511
// ------------------------------------------------------------------
459
QgsGrassEditDeleteVertex::QgsGrassEditDeleteVertex(QgsGrassEdit* edit)
460
: QgsGrassEditTool(edit)
513
QgsGrassEditDeleteVertex::QgsGrassEditDeleteVertex( QgsGrassEdit* edit )
514
: QgsGrassEditTool( edit )
462
e->setCanvasPropmt( QObject::tr("Select vertex"), "", "" );
516
e->setCanvasPrompt( tr( "Select vertex" ), "", "" );
465
void QgsGrassEditDeleteVertex::mouseClick(QgsPoint & point, Qt::ButtonState button)
519
void QgsGrassEditDeleteVertex::mouseClick( QgsPoint & point, Qt::MouseButton button )
467
521
double thresh = e->threshold();
470
525
case Qt::LeftButton:
471
// Delete previously selected vertex
472
if ( e->mSelectedLine > 0 ) {
526
// Delete previously selected vertex
527
if ( e->mSelectedLine > 0 )
473
529
e->eraseDynamic();
474
e->eraseElement ( e->mSelectedLine );
530
e->eraseElement( e->mSelectedLine );
477
int type = e->mProvider->readLine ( e->mPoints, e->mCats, e->mSelectedLine );
478
Vect_line_delete_point ( e->mPoints, e->mSelectedPart );
533
int type = e->mProvider->readLine( e->mPoints, e->mCats, e->mSelectedLine );
534
Vect_line_delete_point( e->mPoints, e->mSelectedPart );
480
536
if ( e->mPoints->n_points < 2 ) // delete line
482
e->mProvider->deleteLine ( e->mSelectedLine );
538
e->mProvider->deleteLine( e->mSelectedLine );
484
// Check orphan records
485
for ( int i = 0 ; i < e->mCats->n_cats; i++ ) {
486
e->checkOrphan ( e->mCats->field[i], e->mCats->cat[i] );
540
// Check orphan records
541
for ( int i = 0 ; i < e->mCats->n_cats; i++ )
543
e->checkOrphan( e->mCats->field[i], e->mCats->cat[i] );
491
e->mProvider->rewriteLine ( e->mSelectedLine, type, e->mPoints, e->mCats );
548
e->mProvider->rewriteLine( e->mSelectedLine, type, e->mPoints, e->mCats );
495
552
e->displayUpdated();
497
554
e->mSelectedLine = 0;
498
Vect_reset_line ( e->mEditPoints );
555
Vect_reset_line( e->mEditPoints );
500
e->setCanvasPropmt( QObject::tr("Select vertex"), "", "" );
557
e->setCanvasPrompt( tr( "Select vertex" ), "", "" );
502
561
// Select new/next line
503
e->mSelectedLine = e->mProvider->findLine ( point.x(), point.y(), GV_LINES, thresh );
505
if ( e->mSelectedLine ) { // highlite
506
e->mProvider->readLine ( e->mEditPoints, NULL, e->mSelectedLine );
508
e->displayElement ( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
562
e->mSelectedLine = e->mProvider->findLine( point.x(), point.y(), GV_LINES, thresh );
564
if ( e->mSelectedLine ) // highlite
566
e->mProvider->readLine( e->mEditPoints, NULL, e->mSelectedLine );
568
e->displayElement( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
510
570
double xl, yl; // nearest point on the line
512
572
// Note first segment is 1!
513
e->mSelectedPart = Vect_line_distance ( e->mEditPoints, point.x(), point.y(), 0.0, 0,
514
&xl, &yl, NULL, NULL, NULL, NULL );
573
e->mSelectedPart = Vect_line_distance( e->mEditPoints, point.x(), point.y(), 0.0, 0,
574
&xl, &yl, NULL, NULL, NULL, NULL );
516
double dist1 = Vect_points_distance ( xl, yl, 0.0, e->mEditPoints->x[e->mSelectedPart-1],
517
e->mEditPoints->y[e->mSelectedPart-1], 0.0, 0);
518
double dist2 = Vect_points_distance ( xl, yl, 0.0, e->mEditPoints->x[e->mSelectedPart],
519
e->mEditPoints->y[e->mSelectedPart], 0.0, 0);
576
double dist1 = Vect_points_distance( xl, yl, 0.0, e->mEditPoints->x[e->mSelectedPart-1],
577
e->mEditPoints->y[e->mSelectedPart-1], 0.0, 0 );
578
double dist2 = Vect_points_distance( xl, yl, 0.0, e->mEditPoints->x[e->mSelectedPart],
579
e->mEditPoints->y[e->mSelectedPart], 0.0, 0 );
521
581
if ( dist1 < dist2 ) e->mSelectedPart--;
523
e->displayDynamic ( e->mEditPoints->x[e->mSelectedPart], e->mEditPoints->y[e->mSelectedPart],
524
QgsVertexMarker::ICON_BOX, e->mSize );
583
e->displayDynamic( e->mEditPoints->x[e->mSelectedPart], e->mEditPoints->y[e->mSelectedPart],
584
QgsVertexMarker::ICON_BOX, e->mSize );
526
e->setCanvasPropmt( QObject::tr("Delete vertex"), "", QObject::tr("Release vertex") );
528
e->setCanvasPropmt( QObject::tr("Select vertex"), "", "" );
586
e->setCanvasPrompt( tr( "Delete vertex" ), "", tr( "Release vertex" ) );
590
e->setCanvasPrompt( tr( "Select vertex" ), "", "" );
533
595
case Qt::RightButton:
534
596
e->eraseDynamic();
535
e->displayElement ( e->mSelectedLine, e->mSymb[e->mLineSymb[e->mSelectedLine]], e->mSize );
597
e->displayElement( e->mSelectedLine, e->mSymb[e->mLineSymb[e->mSelectedLine]], e->mSize );
536
598
e->mSelectedLine = 0;
537
Vect_reset_line ( e->mEditPoints );
599
Vect_reset_line( e->mEditPoints );
539
e->setCanvasPropmt( QObject::tr("Select vertex"), "", "" );
601
e->setCanvasPrompt( tr( "Select vertex" ), "", "" );
549
612
// ------------------------------------------------------------------
551
QgsGrassEditMoveLine::QgsGrassEditMoveLine(QgsGrassEdit* edit)
552
: QgsGrassEditTool(edit)
614
QgsGrassEditMoveLine::QgsGrassEditMoveLine( QgsGrassEdit* edit )
615
: QgsGrassEditTool( edit )
554
e->setCanvasPropmt( QObject::tr("Select element"), "", "" );
617
e->setCanvasPrompt( tr( "Select element" ), "", "" );
557
void QgsGrassEditMoveLine::mouseClick(QgsPoint & point, Qt::ButtonState button)
620
void QgsGrassEditMoveLine::mouseClick( QgsPoint & point, Qt::MouseButton button )
559
622
double thresh = e->threshold();
562
626
case Qt::LeftButton:
563
// Move previously selected line
564
if ( e->mSelectedLine > 0 ) {
627
// Move previously selected line
628
if ( e->mSelectedLine > 0 )
565
630
e->eraseDynamic();
566
e->eraseElement ( e->mSelectedLine );
631
e->eraseElement( e->mSelectedLine );
568
633
// Transform coordinates
569
int type = e->mProvider->readLine ( e->mPoints, e->mCats, e->mSelectedLine );
570
for ( int i = 0; i < e->mPoints->n_points; i++ ) {
571
e->mPoints->x[i] += point.x() - e->mLastPoint.x();
572
e->mPoints->y[i] += point.y() - e->mLastPoint.y();
634
int type = e->mProvider->readLine( e->mPoints, e->mCats, e->mSelectedLine );
635
for ( int i = 0; i < e->mPoints->n_points; i++ )
637
e->mPoints->x[i] += point.x() - e->mLastPoint.x();
638
e->mPoints->y[i] += point.y() - e->mLastPoint.y();
575
e->mProvider->rewriteLine ( e->mSelectedLine, type, e->mPoints, e->mCats );
641
e->mProvider->rewriteLine( e->mSelectedLine, type, e->mPoints, e->mCats );
577
643
e->displayUpdated();
579
645
e->mSelectedLine = 0;
580
Vect_reset_line ( e->mEditPoints );
646
Vect_reset_line( e->mEditPoints );
582
e->setCanvasPropmt( QObject::tr("Select element"), "", "" );
648
e->setCanvasPrompt( tr( "Select element" ), "", "" );
584
652
// Select new/next line
585
e->mSelectedLine = e->mProvider->findLine ( point.x(), point.y(), GV_POINT|GV_CENTROID, thresh );
587
if ( e->mSelectedLine == 0 )
588
e->mSelectedLine = e->mProvider->findLine ( point.x(), point.y(), GV_LINE|GV_BOUNDARY, thresh );
590
if ( e->mSelectedLine ) { // highlite
591
e->mProvider->readLine ( e->mEditPoints, NULL, e->mSelectedLine );
592
e->displayElement ( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
593
e->setCanvasPropmt( QObject::tr("New location"), "", QObject::tr("Release selected") );
595
e->setCanvasPropmt( QObject::tr("Select element"), "", "" );
653
e->mSelectedLine = e->mProvider->findLine( point.x(), point.y(), GV_POINT | GV_CENTROID, thresh );
655
if ( e->mSelectedLine == 0 )
656
e->mSelectedLine = e->mProvider->findLine( point.x(), point.y(), GV_LINE | GV_BOUNDARY, thresh );
658
if ( e->mSelectedLine ) // highlite
660
e->mProvider->readLine( e->mEditPoints, NULL, e->mSelectedLine );
661
e->displayElement( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
662
e->setCanvasPrompt( tr( "New location" ), "", tr( "Release selected" ) );
666
e->setCanvasPrompt( tr( "Select element" ), "", "" );
600
671
case Qt::RightButton:
601
672
e->eraseDynamic();
602
e->displayElement ( e->mSelectedLine, e->mSymb[e->mLineSymb[e->mSelectedLine]], e->mSize );
673
e->displayElement( e->mSelectedLine, e->mSymb[e->mLineSymb[e->mSelectedLine]], e->mSize );
603
674
e->mSelectedLine = 0;
604
e->setCanvasPropmt( QObject::tr("Select element"), "", "" );
675
e->setCanvasPrompt( tr( "Select element" ), "", "" );
612
void QgsGrassEditMoveLine::mouseMove(QgsPoint & newPoint)
684
void QgsGrassEditMoveLine::mouseMove( QgsPoint & newPoint )
614
// Move previously selected line
615
if ( e->mSelectedLine > 0 ) {
686
// Move previously selected line
687
if ( e->mSelectedLine > 0 )
616
689
// Transform coordinates
617
Vect_reset_line ( e->mPoints );
618
Vect_append_points ( e->mPoints, e->mEditPoints, GV_FORWARD );
690
Vect_reset_line( e->mPoints );
691
Vect_append_points( e->mPoints, e->mEditPoints, GV_FORWARD );
620
for ( int i = 0; i < e->mPoints->n_points; i++ ) {
621
e->mPoints->x[i] += newPoint.x() - e->mLastPoint.x();
622
e->mPoints->y[i] += newPoint.y() - e->mLastPoint.y();
693
for ( int i = 0; i < e->mPoints->n_points; i++ )
695
e->mPoints->x[i] += newPoint.x() - e->mLastPoint.x();
696
e->mPoints->y[i] += newPoint.y() - e->mLastPoint.y();
625
e->displayDynamic ( e->mPoints );
699
e->displayDynamic( e->mPoints );
661
738
// Select new/next line
662
e->mSelectedLine = e->mProvider->findLine ( point.x(), point.y(), GV_POINT|GV_CENTROID, thresh );
664
if ( e->mSelectedLine == 0 )
665
e->mSelectedLine = e->mProvider->findLine ( point.x(), point.y(), GV_LINE|GV_BOUNDARY, thresh );
667
if ( e->mSelectedLine ) { // highlite, propmt
668
e->displayElement ( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
669
e->setCanvasPropmt( QObject::tr("Delete selected / select next"), "", QObject::tr("Release selected") );
671
e->setCanvasPropmt( QObject::tr("Select element"), "", "" );
739
e->mSelectedLine = e->mProvider->findLine( point.x(), point.y(), GV_POINT | GV_CENTROID, thresh );
741
if ( e->mSelectedLine == 0 )
742
e->mSelectedLine = e->mProvider->findLine( point.x(), point.y(), GV_LINE | GV_BOUNDARY, thresh );
744
if ( e->mSelectedLine ) // highlite, propmt
746
e->displayElement( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
747
e->setCanvasPrompt( tr( "Delete selected / select next" ), "", tr( "Release selected" ) );
751
e->setCanvasPrompt( tr( "Select element" ), "", "" );
675
755
case Qt::RightButton:
676
e->displayElement ( e->mSelectedLine, e->mSymb[e->mLineSymb[e->mSelectedLine]], e->mSize );
756
e->displayElement( e->mSelectedLine, e->mSymb[e->mLineSymb[e->mSelectedLine]], e->mSize );
677
757
e->mSelectedLine = 0;
678
e->setCanvasPropmt( QObject::tr("Select element"), "", "" );
758
e->setCanvasPrompt( tr( "Select element" ), "", "" );
688
769
// ------------------------------------------------------------------
690
QgsGrassEditSplitLine::QgsGrassEditSplitLine(QgsGrassEdit* edit)
691
: QgsGrassEditTool(edit)
771
QgsGrassEditSplitLine::QgsGrassEditSplitLine( QgsGrassEdit* edit )
772
: QgsGrassEditTool( edit )
693
e->setCanvasPropmt( QObject::tr("Select position on line"), "", "" );
774
e->setCanvasPrompt( tr( "Select position on line" ), "", "" );
696
void QgsGrassEditSplitLine::mouseClick(QgsPoint & point, Qt::ButtonState button)
777
void QgsGrassEditSplitLine::mouseClick( QgsPoint & point, Qt::MouseButton button )
698
779
double thresh = e->threshold();
701
783
case Qt::LeftButton:
702
// Split previously selected line
703
if ( e->mSelectedLine > 0 ) {
784
// Split previously selected line
785
if ( e->mSelectedLine > 0 )
704
787
e->eraseDynamic();
705
e->eraseElement ( e->mSelectedLine );
788
e->eraseElement( e->mSelectedLine );
707
int type = e->mProvider->readLine ( e->mPoints, e->mCats, e->mSelectedLine );
790
int type = e->mProvider->readLine( e->mPoints, e->mCats, e->mSelectedLine );
710
Vect_line_distance ( e->mPoints, e->mLastPoint.x(), e->mLastPoint.y(), 0.0, 0,
711
&xl, &yl, NULL, NULL, NULL, NULL );
793
Vect_line_distance( e->mPoints, e->mLastPoint.x(), e->mLastPoint.y(), 0.0, 0,
794
&xl, &yl, NULL, NULL, NULL, NULL );
713
796
e->mPoints->n_points = e->mSelectedPart;
714
Vect_append_point ( e->mPoints, xl, yl, 0.0 );
715
e->mProvider->rewriteLine ( e->mSelectedLine, type, e->mPoints, e->mCats );
797
Vect_append_point( e->mPoints, xl, yl, 0.0 );
798
e->mProvider->rewriteLine( e->mSelectedLine, type, e->mPoints, e->mCats );
717
800
e->displayUpdated();
719
Vect_reset_line ( e->mPoints );
720
Vect_append_point ( e->mPoints, xl, yl, 0.0 );
721
for ( int i = e->mSelectedPart; i < e->mEditPoints->n_points; i++ ) {
722
Vect_append_point ( e->mPoints, e->mEditPoints->x[i], e->mEditPoints->y[i], 0.0 );
802
Vect_reset_line( e->mPoints );
803
Vect_append_point( e->mPoints, xl, yl, 0.0 );
804
for ( int i = e->mSelectedPart; i < e->mEditPoints->n_points; i++ )
806
Vect_append_point( e->mPoints, e->mEditPoints->x[i], e->mEditPoints->y[i], 0.0 );
725
e->mProvider->writeLine ( type, e->mPoints, e->mCats );
809
e->mProvider->writeLine( type, e->mPoints, e->mCats );
728
812
e->displayUpdated();
730
814
e->mSelectedLine = 0;
731
Vect_reset_line ( e->mEditPoints );
732
e->setCanvasPropmt( QObject::tr("Select position on line"), "", "" );
815
Vect_reset_line( e->mEditPoints );
816
e->setCanvasPrompt( tr( "Select position on line" ), "", "" );
734
820
// Select new/next line
735
e->mSelectedLine = e->mProvider->findLine ( point.x(), point.y(), GV_LINES, thresh );
737
if ( e->mSelectedLine ) { // highlite
738
e->mProvider->readLine ( e->mEditPoints, NULL, e->mSelectedLine );
740
e->displayElement ( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
821
e->mSelectedLine = e->mProvider->findLine( point.x(), point.y(), GV_LINES, thresh );
823
if ( e->mSelectedLine ) // highlite
825
e->mProvider->readLine( e->mEditPoints, NULL, e->mSelectedLine );
827
e->displayElement( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
742
829
double xl, yl; // nearest point on the line
744
// Note first segment is 1!
745
e->mSelectedPart = Vect_line_distance ( e->mEditPoints, point.x(), point.y(), 0.0, 0,
746
&xl, &yl, NULL, NULL, NULL, NULL );
748
e->displayDynamic ( xl, yl, QgsVertexMarker::ICON_X, e->mSize );
750
e->setCanvasPropmt( QObject::tr("Split the line"), "", QObject::tr("Release the line") );
752
e->setCanvasPropmt( QObject::tr("Select point on line"), "", "" );
831
// Note first segment is 1!
832
e->mSelectedPart = Vect_line_distance( e->mEditPoints, point.x(), point.y(), 0.0, 0,
833
&xl, &yl, NULL, NULL, NULL, NULL );
835
e->displayDynamic( xl, yl, QgsVertexMarker::ICON_X, e->mSize );
837
e->setCanvasPrompt( tr( "Split the line" ), "", tr( "Release the line" ) );
841
e->setCanvasPrompt( tr( "Select point on line" ), "", "" );
774
864
// EDIT ATTRIBUTES
775
865
// ------------------------------------------------------------------
777
QgsGrassEditAttributes::QgsGrassEditAttributes(QgsGrassEdit* edit)
778
: QgsGrassEditTool(edit)
867
QgsGrassEditAttributes::QgsGrassEditAttributes( QgsGrassEdit* edit )
868
: QgsGrassEditTool( edit )
780
e->setCanvasPropmt( QObject::tr("Select element"), "", "" );
870
e->setCanvasPrompt( tr( "Select element" ), "", "" );
783
void QgsGrassEditAttributes::mouseClick(QgsPoint & point, Qt::ButtonState button)
873
void QgsGrassEditAttributes::mouseClick( QgsPoint & point, Qt::MouseButton button )
785
875
double thresh = e->threshold();
787
// Redraw previously selected line
788
if ( e->mSelectedLine > 0 ) {
789
e->displayElement ( e->mSelectedLine, e->mSymb[e->mLineSymb[e->mSelectedLine]], e->mSize );
877
// Redraw previously selected line
878
if ( e->mSelectedLine > 0 )
880
e->displayElement( e->mSelectedLine, e->mSymb[e->mLineSymb[e->mSelectedLine]], e->mSize );
792
883
// Select new/next line
793
e->mSelectedLine = e->mProvider->findLine ( point.x(), point.y(), GV_POINT|GV_CENTROID, thresh );
795
if ( e->mSelectedLine == 0 )
796
e->mSelectedLine = e->mProvider->findLine ( point.x(), point.y(), GV_LINE|GV_BOUNDARY, thresh );
799
std::cerr << "mSelectedLine = " << e->mSelectedLine << std::endl;
802
if ( e->mAttributes )
884
e->mSelectedLine = e->mProvider->findLine( point.x(), point.y(), GV_POINT | GV_CENTROID, thresh );
886
if ( e->mSelectedLine == 0 )
887
e->mSelectedLine = e->mProvider->findLine( point.x(), point.y(), GV_LINE | GV_BOUNDARY, thresh );
889
QgsDebugMsg( QString( "mSelectedLine = %1" ).arg( e->mSelectedLine ) );
891
if ( e->mAttributes )
804
e->mAttributes->setLine ( 0 );
805
e->mAttributes->clear();
806
e->mAttributes->raise();
893
e->mAttributes->setLine( 0 );
894
e->mAttributes->clear();
895
e->mAttributes->raise();
809
if ( e->mSelectedLine ) { // highlite
810
e->displayElement ( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
812
e->mProvider->readLine ( NULL, e->mCats, e->mSelectedLine );
814
if ( !e->mAttributes )
898
if ( e->mSelectedLine ) // highlite
900
e->displayElement( e->mSelectedLine, e->mSymb[QgsGrassEdit::SYMB_HIGHLIGHT], e->mSize );
902
e->mProvider->readLine( NULL, e->mCats, e->mSelectedLine );
904
if ( !e->mAttributes )
816
e->mAttributes = new QgsGrassAttributes ( e, e->mProvider, e->mSelectedLine, e->mQgisApp );
906
e->mAttributes = new QgsGrassAttributes( e, e->mProvider, e->mSelectedLine, e->mIface->mainWindow() );
820
e->mAttributes->setLine ( e->mSelectedLine );
910
e->mAttributes->setLine( e->mSelectedLine );
822
for ( int i = 0; i < e->mCats->n_cats; i++ ) {
823
e->addAttributes ( e->mCats->field[i], e->mCats->cat[i] );
912
for ( int i = 0; i < e->mCats->n_cats; i++ )
914
e->addAttributes( e->mCats->field[i], e->mCats->cat[i] );
825
916
e->mAttributes->show();
826
917
e->mAttributes->raise();
920
e->mAttributes->setCategoryMode( static_cast<QgsGrassEdit::CatMode>( e->mCatModeBox->currentIndex() ), e->mCatEntry->text() );