QtApplication.hh 4.41 KB
Newer Older
Jan Möbius's avatar
 
Jan Möbius committed
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
//=============================================================================
//
//                               OpenFlipper
//        Copyright (C) 2008 by Computer Graphics Group, RWTH Aachen
//                           www.openflipper.org
//
//-----------------------------------------------------------------------------
//
//                                License
//
//  OpenFlipper is free software: you can redistribute it and/or modify
//  it under the terms of the GNU Lesser General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  OpenFlipper is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU Lesser General Public License for more details.
//
//  You should have received a copy of the GNU Lesser General Public License
//  along with OpenFlipper.  If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
//
//   $Revision$
//   $Author$
//   $Date$
//
//=============================================================================




//=============================================================================
//
//  CLASS QtApplication
//
//=============================================================================

#ifndef QTAPPLICATION_HH
#define QTAPPLICATION_HH


//== INCLUDES =================================================================


// Qt
#include <QApplication>
#include <QObject>
#include <QEvent>
#include <QDateTime>

#include <QTimerEvent>

// stdc++
#include <vector>
#include <string>
#include <iostream>

#include "../Config/ACGDefines.hh"


//== FORWARD DECLARATIONS =====================================================


namespace ACG {
namespace QtWidgets {
  class QtMacroDialog;
}
}


//== NAMESPACES ===============================================================


namespace ACG {
namespace QtWidgets {


//== CLASS DEFINITION =========================================================


class ACGDLLEXPORT QtApplication : public QApplication
{
  Q_OBJECT

public:

  QtApplication(int _argc, char** _argv);
  virtual  ~QtApplication() { cleanUpEventBuffer(); }


public slots:

  // save recorded Events to file
  void saveFile(const char* _filename);

  // load recorded Events from file
  void loadFile(const char* _filename);

  // start playback
  void play();

  // stop playback or record
  void stop();

  // record
  void record();

  // change loop status for playback
  void loop(bool _b);


public:

  // filter events
  bool notify (QObject* _receiver, QEvent* _event);


private:

  // information for one event
  struct FootPrint
  {
    int          time;
    std::string  name;
    std::string  classname;
    std::string  parent;
    QPoint       cursorPos;
    QPoint       position;
    QSize        size;
    QEvent      *event;
  };

  typedef std::vector<FootPrint>  FootPrints;
  typedef FootPrints::iterator    FootPrintIter;


  // record and play events
  void recordEvent(QObject* _receiver, QEvent* _event);
  void playbackEvent(FootPrint & _fp);


  // store and restore sizes of all top-level widgets
  void storeTopLevelSizes();
  void restoreTopLevelSizes();

  // load and save sizes of top-level widgets
  void saveTopLevelSizes(std::ostream & _os);
  void loadTopLevelSizes(std::istream & _is);


  // find Widget for event _fp
  QWidget* findWidget(FootPrint & _fp);
  // timer callback
  void timerEvent(QTimerEvent* _e);
  // clear event buffer (pointers to QEvent)
  void cleanUpEventBuffer();


private:

  // state variables
  bool record_;
  bool playback_;
  bool play_loop_;

  // counter
  unsigned int eventnr_;

  // timer ID
  int timer_id_;

  // stop Time
  QTime time_;

  // vector to store events and top-levels sizes
  FootPrints events_, toplevels_;

  // macro dialog for interaction
  QtMacroDialog* dialog_;

  // Pointer to MainWidget
  QWidget* mainWidget_;

  // Main widget pos
  QPoint mainWidgetDiff_;

  // Old Main widget pos
  QPoint oldMainWidgetPos_;
};

//=============================================================================
} // namespace QtWidgets
} // namespace ACG
//=============================================================================
#endif // MACROAPPLICATION_HH defined
//=============================================================================