summaryrefslogtreecommitdiffstats
path: root/src/datavis3d/engine/scatter3dcontroller_p.h
blob: 7a535ae3eb6ac2ed9e715d66195640a5120a3b1d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
** This file is part of the QtDataVis3D module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.
**
** If you have questions regarding the use of this file, please use
** contact form at http://qt.digia.com
**
****************************************************************************/

//
//  W A R N I N G
//  -------------
//
// This file is not part of the QtDataVis3D API.  It exists purely as an
// implementation detail.  This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.

#ifndef Q3DSCATTERCONTROLLER_p_H
#define Q3DSCATTERCONTROLLER_p_H

#include "datavis3dglobal_p.h"
#include "abstract3dcontroller_p.h"

//#define DISPLAY_RENDER_SPEED

QT_DATAVIS3D_BEGIN_NAMESPACE

class Scatter3DRenderer;
class QScatterDataProxy;

struct Scatter3DChangeBitField {
    bool slicingActiveChanged     : 1;
    bool selectedItemIndexChanged : 1;

    Scatter3DChangeBitField() :
        slicingActiveChanged(true),
        selectedItemIndexChanged(true)
    {
    }
};

class QT_DATAVIS3D_EXPORT Scatter3DController : public Abstract3DController
{
    Q_OBJECT

private:
    Scatter3DChangeBitField m_changeTracker;

    // Interaction
    MouseState m_mouseState;
    QPoint m_mousePos;
    bool m_isSlicingActivated;

    // Rendering
    Scatter3DRenderer *m_renderer;
    int m_selectedItemIndex;

public:
    explicit Scatter3DController(QRect rect);
    ~Scatter3DController();

    void initializeOpenGL();

    MouseState mouseState();
    QPoint mousePosition();

    bool isSlicingActive();
    void setSlicingActive(bool isSlicing);

    QMatrix4x4 calculateViewMatrix(int zoom, int viewPortWidth, int viewPortHeight,
                                   bool showUnder = false);

    // Object type
    void setObjectType(QDataVis::MeshStyle style, bool smooth = false);

    // Change selection mode
    void setSelectionMode(QDataVis::SelectionMode mode);

    void setSelectedItemIndex(int index);
    int selectedItemIndex() const;
    static inline int noSelectionIndex() { return -1; }

#if defined(Q_OS_ANDROID)
    void mouseDoubleClickEvent(QMouseEvent *event);
    void touchEvent(QTouchEvent *event);
#endif
    void mousePressEvent(QMouseEvent *event, const QPoint &mousePos);
    void mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos);
    void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos);
    void wheelEvent(QWheelEvent *event);

    virtual void setActiveDataProxy(QAbstractDataProxy *proxy);

    void synchDataToRenderer();

    virtual void handleAxisAutoAdjustRangeChangedInOrientation(QAbstractAxis::AxisOrientation orientation, bool autoAdjust);

public slots:
    void handleArrayReset();
    void handleItemsAdded(int startIndex, int count);
    void handleItemsChanged(int startIndex, int count);
    void handleItemsRemoved(int startIndex, int count);
    void handleItemsInserted(int startIndex, int count);
    void handleSelectedItemIndexChanged(int index);

signals:
    void slicingActiveChanged(bool isSlicing);
    void selectedItemIndexChanged(int index);

private:
    void adjustValueAxisRange();

    Q_DISABLE_COPY(Scatter3DController)
};


QT_DATAVIS3D_END_NAMESPACE

#endif