qwt_picker_machine.cpp
Go to the documentation of this file.
00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
00002  * Qwt Widget Library
00003  * Copyright (C) 1997   Josef Wilgen
00004  * Copyright (C) 2002   Uwe Rathmann
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the Qwt License, Version 1.0
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                         // Uh, strange we missed the MouseButtonRelease
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 }


plotjuggler
Author(s): Davide Faconti
autogenerated on Fri Sep 1 2017 02:41:56