Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "qwt_picker_machine.h"
00011 #include "qwt_event_pattern.h"
00012 #include <qevent.h>
00013
00015 QwtPickerMachine::QwtPickerMachine( SelectionType type ):
00016 d_selectionType( type ),
00017 d_state( 0 )
00018 {
00019 }
00020
00022 QwtPickerMachine::~QwtPickerMachine()
00023 {
00024 }
00025
00027 QwtPickerMachine::SelectionType QwtPickerMachine::selectionType() const
00028 {
00029 return d_selectionType;
00030 }
00031
00033 int QwtPickerMachine::state() const
00034 {
00035 return d_state;
00036 }
00037
00039 void QwtPickerMachine::setState( int state )
00040 {
00041 d_state = state;
00042 }
00043
00045 void QwtPickerMachine::reset()
00046 {
00047 setState( 0 );
00048 }
00049
00051 QwtPickerTrackerMachine::QwtPickerTrackerMachine():
00052 QwtPickerMachine( NoSelection )
00053 {
00054 }
00055
00057 QList<QwtPickerMachine::Command> QwtPickerTrackerMachine::transition(
00058 const QwtEventPattern &, const QEvent *e )
00059 {
00060 QList<QwtPickerMachine::Command> cmdList;
00061
00062 switch ( e->type() )
00063 {
00064 case QEvent::Enter:
00065 case QEvent::MouseMove:
00066 {
00067 if ( state() == 0 )
00068 {
00069 cmdList += Begin;
00070 cmdList += Append;
00071 setState( 1 );
00072 }
00073 else
00074 {
00075 cmdList += Move;
00076 }
00077 break;
00078 }
00079 case QEvent::Leave:
00080 {
00081 cmdList += Remove;
00082 cmdList += End;
00083 setState( 0 );
00084 }
00085 default:
00086 break;
00087 }
00088
00089 return cmdList;
00090 }
00091
00093 QwtPickerClickPointMachine::QwtPickerClickPointMachine():
00094 QwtPickerMachine( PointSelection )
00095 {
00096 }
00097
00099 QList<QwtPickerMachine::Command> QwtPickerClickPointMachine::transition(
00100 const QwtEventPattern &eventPattern, const QEvent *event )
00101 {
00102 QList<QwtPickerMachine::Command> cmdList;
00103
00104 switch ( event->type() )
00105 {
00106 case QEvent::MouseButtonPress:
00107 {
00108 if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1,
00109 static_cast<const QMouseEvent *>( event ) ) )
00110 {
00111 cmdList += Begin;
00112 cmdList += Append;
00113 cmdList += End;
00114 }
00115 break;
00116 }
00117 case QEvent::KeyPress:
00118 {
00119 const QKeyEvent *keyEvent = static_cast<const QKeyEvent *> ( event );
00120 if ( eventPattern.keyMatch( QwtEventPattern::KeySelect1, keyEvent ) )
00121 {
00122 if ( !keyEvent->isAutoRepeat() )
00123 {
00124 cmdList += Begin;
00125 cmdList += Append;
00126 cmdList += End;
00127 }
00128 }
00129 break;
00130 }
00131 default:
00132 break;
00133 }
00134
00135 return cmdList;
00136 }
00137
00139 QwtPickerDragPointMachine::QwtPickerDragPointMachine():
00140 QwtPickerMachine( PointSelection )
00141 {
00142 }
00143
00145 QList<QwtPickerMachine::Command> QwtPickerDragPointMachine::transition(
00146 const QwtEventPattern &eventPattern, const QEvent *event )
00147 {
00148 QList<QwtPickerMachine::Command> cmdList;
00149
00150 switch ( event->type() )
00151 {
00152 case QEvent::MouseButtonPress:
00153 {
00154 if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1,
00155 static_cast<const QMouseEvent *>( event ) ) )
00156 {
00157 if ( state() == 0 )
00158 {
00159 cmdList += Begin;
00160 cmdList += Append;
00161 setState( 1 );
00162 }
00163 }
00164 break;
00165 }
00166 case QEvent::MouseMove:
00167 case QEvent::Wheel:
00168 {
00169 if ( state() != 0 )
00170 cmdList += Move;
00171 break;
00172 }
00173 case QEvent::MouseButtonRelease:
00174 {
00175 if ( state() != 0 )
00176 {
00177 cmdList += End;
00178 setState( 0 );
00179 }
00180 break;
00181 }
00182 case QEvent::KeyPress:
00183 {
00184 const QKeyEvent *keyEvent = static_cast<const QKeyEvent *> ( event );
00185 if ( eventPattern.keyMatch( QwtEventPattern::KeySelect1, keyEvent ) )
00186 {
00187 if ( !keyEvent->isAutoRepeat() )
00188 {
00189 if ( state() == 0 )
00190 {
00191 cmdList += Begin;
00192 cmdList += Append;
00193 setState( 1 );
00194 }
00195 else
00196 {
00197 cmdList += End;
00198 setState( 0 );
00199 }
00200 }
00201 }
00202 break;
00203 }
00204 default:
00205 break;
00206 }
00207
00208 return cmdList;
00209 }
00210
00212 QwtPickerClickRectMachine::QwtPickerClickRectMachine():
00213 QwtPickerMachine( RectSelection )
00214 {
00215 }
00216
00218 QList<QwtPickerMachine::Command> QwtPickerClickRectMachine::transition(
00219 const QwtEventPattern &eventPattern, const QEvent *event )
00220 {
00221 QList<QwtPickerMachine::Command> cmdList;
00222
00223 switch ( event->type() )
00224 {
00225 case QEvent::MouseButtonPress:
00226 {
00227 if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1,
00228 static_cast<const QMouseEvent *>( event ) ) )
00229 {
00230 switch ( state() )
00231 {
00232 case 0:
00233 {
00234 cmdList += Begin;
00235 cmdList += Append;
00236 setState( 1 );
00237 break;
00238 }
00239 case 1:
00240 {
00241
00242 break;
00243 }
00244 default:
00245 {
00246 cmdList += End;
00247 setState( 0 );
00248 }
00249 }
00250 }
00251 break;
00252 }
00253 case QEvent::MouseMove:
00254 case QEvent::Wheel:
00255 {
00256 if ( state() != 0 )
00257 cmdList += Move;
00258 break;
00259 }
00260 case QEvent::MouseButtonRelease:
00261 {
00262 if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1,
00263 static_cast<const QMouseEvent *>( event ) ) )
00264 {
00265 if ( state() == 1 )
00266 {
00267 cmdList += Append;
00268 setState( 2 );
00269 }
00270 }
00271 break;
00272 }
00273 case QEvent::KeyPress:
00274 {
00275 const QKeyEvent *keyEvent = static_cast<const QKeyEvent *> ( event );
00276 if ( eventPattern.keyMatch( QwtEventPattern::KeySelect1, keyEvent ) )
00277 {
00278 if ( !keyEvent->isAutoRepeat() )
00279 {
00280 if ( state() == 0 )
00281 {
00282 cmdList += Begin;
00283 cmdList += Append;
00284 setState( 1 );
00285 }
00286 else
00287 {
00288 if ( state() == 1 )
00289 {
00290 cmdList += Append;
00291 setState( 2 );
00292 }
00293 else if ( state() == 2 )
00294 {
00295 cmdList += End;
00296 setState( 0 );
00297 }
00298 }
00299 }
00300 }
00301 break;
00302 }
00303 default:
00304 break;
00305 }
00306
00307 return cmdList;
00308 }
00309
00311 QwtPickerDragRectMachine::QwtPickerDragRectMachine():
00312 QwtPickerMachine( RectSelection )
00313 {
00314 }
00315
00317 QList<QwtPickerMachine::Command> QwtPickerDragRectMachine::transition(
00318 const QwtEventPattern &eventPattern, const QEvent *event )
00319 {
00320 QList<QwtPickerMachine::Command> cmdList;
00321
00322 switch ( event->type() )
00323 {
00324 case QEvent::MouseButtonPress:
00325 {
00326 if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1,
00327 static_cast<const QMouseEvent *>( event ) ) )
00328 {
00329 if ( state() == 0 )
00330 {
00331 cmdList += Begin;
00332 cmdList += Append;
00333 cmdList += Append;
00334 setState( 2 );
00335 }
00336 }
00337 break;
00338 }
00339 case QEvent::MouseMove:
00340 case QEvent::Wheel:
00341 {
00342 if ( state() != 0 )
00343 cmdList += Move;
00344 break;
00345 }
00346 case QEvent::MouseButtonRelease:
00347 {
00348 if ( state() == 2 )
00349 {
00350 cmdList += End;
00351 setState( 0 );
00352 }
00353 break;
00354 }
00355 case QEvent::KeyPress:
00356 {
00357 if ( eventPattern.keyMatch( QwtEventPattern::KeySelect1,
00358 static_cast<const QKeyEvent *> ( event ) ) )
00359 {
00360 if ( state() == 0 )
00361 {
00362 cmdList += Begin;
00363 cmdList += Append;
00364 cmdList += Append;
00365 setState( 2 );
00366 }
00367 else
00368 {
00369 cmdList += End;
00370 setState( 0 );
00371 }
00372 }
00373 break;
00374 }
00375 default:
00376 break;
00377 }
00378
00379 return cmdList;
00380 }
00381
00383 QwtPickerPolygonMachine::QwtPickerPolygonMachine():
00384 QwtPickerMachine( PolygonSelection )
00385 {
00386 }
00387
00389 QList<QwtPickerMachine::Command> QwtPickerPolygonMachine::transition(
00390 const QwtEventPattern &eventPattern, const QEvent *event )
00391 {
00392 QList<QwtPickerMachine::Command> cmdList;
00393
00394 switch ( event->type() )
00395 {
00396 case QEvent::MouseButtonPress:
00397 {
00398 if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1,
00399 static_cast<const QMouseEvent *>( event ) ) )
00400 {
00401 if ( state() == 0 )
00402 {
00403 cmdList += Begin;
00404 cmdList += Append;
00405 cmdList += Append;
00406 setState( 1 );
00407 }
00408 else
00409 {
00410 cmdList += Append;
00411 }
00412 }
00413 if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect2,
00414 static_cast<const QMouseEvent *>( event ) ) )
00415 {
00416 if ( state() == 1 )
00417 {
00418 cmdList += End;
00419 setState( 0 );
00420 }
00421 }
00422 break;
00423 }
00424 case QEvent::MouseMove:
00425 case QEvent::Wheel:
00426 {
00427 if ( state() != 0 )
00428 cmdList += Move;
00429 break;
00430 }
00431 case QEvent::KeyPress:
00432 {
00433 const QKeyEvent *keyEvent = static_cast<const QKeyEvent *> ( event );
00434 if ( eventPattern.keyMatch( QwtEventPattern::KeySelect1, keyEvent ) )
00435 {
00436 if ( !keyEvent->isAutoRepeat() )
00437 {
00438 if ( state() == 0 )
00439 {
00440 cmdList += Begin;
00441 cmdList += Append;
00442 cmdList += Append;
00443 setState( 1 );
00444 }
00445 else
00446 {
00447 cmdList += Append;
00448 }
00449 }
00450 }
00451 else if ( eventPattern.keyMatch( QwtEventPattern::KeySelect2, keyEvent ) )
00452 {
00453 if ( !keyEvent->isAutoRepeat() )
00454 {
00455 if ( state() == 1 )
00456 {
00457 cmdList += End;
00458 setState( 0 );
00459 }
00460 }
00461 }
00462 break;
00463 }
00464 default:
00465 break;
00466 }
00467
00468 return cmdList;
00469 }
00470
00472 QwtPickerDragLineMachine::QwtPickerDragLineMachine():
00473 QwtPickerMachine( PolygonSelection )
00474 {
00475 }
00476
00478 QList<QwtPickerMachine::Command> QwtPickerDragLineMachine::transition(
00479 const QwtEventPattern &eventPattern, const QEvent *event )
00480 {
00481 QList<QwtPickerMachine::Command> cmdList;
00482
00483 switch( event->type() )
00484 {
00485 case QEvent::MouseButtonPress:
00486 {
00487 if ( eventPattern.mouseMatch( QwtEventPattern::MouseSelect1,
00488 static_cast<const QMouseEvent *>( event ) ) )
00489 {
00490 if ( state() == 0 )
00491 {
00492 cmdList += Begin;
00493 cmdList += Append;
00494 cmdList += Append;
00495 setState( 1 );
00496 }
00497 }
00498 break;
00499 }
00500 case QEvent::KeyPress:
00501 {
00502 if ( eventPattern.keyMatch( QwtEventPattern::KeySelect1,
00503 static_cast<const QKeyEvent *> ( event ) ) )
00504 {
00505 if ( state() == 0 )
00506 {
00507 cmdList += Begin;
00508 cmdList += Append;
00509 cmdList += Append;
00510 setState( 1 );
00511 }
00512 else
00513 {
00514 cmdList += End;
00515 setState( 0 );
00516 }
00517 }
00518 break;
00519 }
00520 case QEvent::MouseMove:
00521 case QEvent::Wheel:
00522 {
00523 if ( state() != 0 )
00524 cmdList += Move;
00525
00526 break;
00527 }
00528 case QEvent::MouseButtonRelease:
00529 {
00530 if ( state() != 0 )
00531 {
00532 cmdList += End;
00533 setState( 0 );
00534 }
00535 }
00536 default:
00537 break;
00538 }
00539
00540 return cmdList;
00541 }