qwt_picker_machine.h 3.89 KB
Newer Older
pixhawk's avatar
pixhawk committed
1 2 3 4
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2002   Uwe Rathmann
5
 *
pixhawk's avatar
pixhawk committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the Qwt License, Version 1.0
 *****************************************************************************/

#ifndef QWT_PICKER_MACHINE
#define QWT_PICKER_MACHINE 1

#include "qwt_global.h"
#if QT_VERSION < 0x040000
#include <qvaluelist.h>
#else
#include <qlist.h>
#endif

class QEvent;
class QwtEventPattern;

/*!
  \brief A state machine for QwtPicker selections

  QwtPickerMachine accepts key and mouse events and translates them
27
  into selection commands.
pixhawk's avatar
pixhawk committed
28 29 30 31 32 33 34 35

  \sa QwtEventPattern::MousePatternCode, QwtEventPattern::KeyPatternCode
*/

class QWT_EXPORT QwtPickerMachine
{
public:
    //! Commands - the output of the state machine
36
    enum Command {
pixhawk's avatar
pixhawk committed
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
        Begin,
        Append,
        Move,
        End
    };

#if QT_VERSION < 0x040000
    typedef QValueList<Command> CommandList;
#else
    typedef QList<Command> CommandList;
#endif

    virtual ~QwtPickerMachine();

    //! Transition
    virtual CommandList transition(
        const QwtEventPattern &, const QEvent *) = 0;
54
    void reset();
pixhawk's avatar
pixhawk committed
55 56 57 58 59 60 61 62 63 64 65 66 67 68

    int state() const;
    void setState(int);

protected:
    QwtPickerMachine();

private:
    int d_state;
};

/*!
  \brief A state machine for point selections

69
  Pressing QwtEventPattern::MouseSelect1 or
pixhawk's avatar
pixhawk committed
70 71 72 73 74 75 76 77 78 79 80 81 82 83
  QwtEventPattern::KeySelect1 selects a point.

  \sa QwtEventPattern::MousePatternCode, QwtEventPattern::KeyPatternCode
*/
class QWT_EXPORT QwtPickerClickPointMachine: public QwtPickerMachine
{
public:
    virtual CommandList transition(
        const QwtEventPattern &, const QEvent *);
};

/*!
  \brief A state machine for point selections

84 85
  Pressing QwtEventPattern::MouseSelect1 or QwtEventPattern::KeySelect1
  starts the selection, releasing QwtEventPattern::MouseSelect1 or
pixhawk's avatar
pixhawk committed
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
  a second press of QwtEventPattern::KeySelect1 terminates it.
*/
class QWT_EXPORT QwtPickerDragPointMachine: public QwtPickerMachine
{
public:
    virtual CommandList transition(
        const QwtEventPattern &, const QEvent *);
};

/*!
  \brief A state machine for rectangle selections

  Pressing QwtEventPattern::MouseSelect1 starts
  the selection, releasing it selects the first point. Pressing it
  again selects the second point and terminates the selection.
101 102 103
  Pressing QwtEventPattern::KeySelect1 also starts the
  selection, a second press selects the first point. A third one selects
  the second point and terminates the selection.
pixhawk's avatar
pixhawk committed
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119

  \sa QwtEventPattern::MousePatternCode, QwtEventPattern::KeyPatternCode
*/

class QWT_EXPORT QwtPickerClickRectMachine: public QwtPickerMachine
{
public:
    virtual CommandList transition(
        const QwtEventPattern &, const QEvent *);
};

/*!
  \brief A state machine for rectangle selections

  Pressing QwtEventPattern::MouseSelect1 selects
  the first point, releasing it the second point.
120 121
  Pressing QwtEventPattern::KeySelect1 also selects the
  first point, a second press selects the second point and terminates
pixhawk's avatar
pixhawk committed
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
  the selection.

  \sa QwtEventPattern::MousePatternCode, QwtEventPattern::KeyPatternCode
*/

class QWT_EXPORT QwtPickerDragRectMachine: public QwtPickerMachine
{
public:
    virtual CommandList transition(
        const QwtEventPattern &, const QEvent *);
};

/*!
  \brief A state machine for polygon selections

137 138 139
  Pressing QwtEventPattern::MouseSelect1 or QwtEventPattern::KeySelect1
  starts the selection and selects the first point, or appends a point.
  Pressing QwtEventPattern::MouseSelect2 or QwtEventPattern::KeySelect2
pixhawk's avatar
pixhawk committed
140 141 142 143 144 145 146 147 148 149 150 151 152
  appends the last point and terminates the selection.

  \sa QwtEventPattern::MousePatternCode, QwtEventPattern::KeyPatternCode
*/

class QWT_EXPORT QwtPickerPolygonMachine: public QwtPickerMachine
{
public:
    virtual CommandList transition(
        const QwtEventPattern &, const QEvent *);
};

#endif