moldyn.h 1.39 KB
Newer Older
Tobias WEBER's avatar
Tobias WEBER committed
1
/**
Tobias WEBER's avatar
Tobias WEBER committed
2
 * atom dynamics
Tobias WEBER's avatar
Tobias WEBER committed
3
4
5
6
7
 * @author Tobias Weber <tweber@ill.fr>
 * @date Dec-2019
 * @license GPLv3, see 'LICENSE' file
 */

Tobias WEBER's avatar
Tobias WEBER committed
8
9
#ifndef __MOLDYN_GUI_H__
#define __MOLDYN_GUI_H__
Tobias WEBER's avatar
Tobias WEBER committed
10

Tobias WEBER's avatar
Tobias WEBER committed
11
#include <QtWidgets/QMainWindow>
Tobias WEBER's avatar
Tobias WEBER committed
12
#include <QtWidgets/QMenu>
Tobias WEBER's avatar
Tobias WEBER committed
13
14
15
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtCore/QSettings>
Tobias WEBER's avatar
Tobias WEBER committed
16
17
18

#include <vector>

Tobias WEBER's avatar
Tobias WEBER committed
19
20
#include "libs/_cxx20/glplot.h"
#include "libs/_cxx20/math_algos.h"
Tobias WEBER's avatar
Tobias WEBER committed
21

Tobias WEBER's avatar
Tobias WEBER committed
22
23
#include "moldyn-loader.h"

Tobias WEBER's avatar
Tobias WEBER committed
24

Tobias WEBER's avatar
Tobias WEBER committed
25
26
27
using t_real = double;
using t_vec = std::vector<t_real>;
using t_mat = m::mat<t_real, std::vector>;
Tobias WEBER's avatar
Tobias WEBER committed
28
29


Tobias WEBER's avatar
Tobias WEBER committed
30
class MolDynDlg : public QMainWindow
Tobias WEBER's avatar
Tobias WEBER committed
31
{
Tobias WEBER's avatar
Tobias WEBER committed
32
33
34
public:
	MolDynDlg(QWidget* pParent = nullptr);
	~MolDynDlg() = default;
Tobias WEBER's avatar
Tobias WEBER committed
35

Tobias WEBER's avatar
Tobias WEBER committed
36
protected:
Tobias WEBER's avatar
Tobias WEBER committed
37
38
	MolDyn<t_real, t_vec> m_mol;

Tobias WEBER's avatar
Tobias WEBER committed
39
40
41
	QSettings *m_sett = nullptr;
	QMenuBar *m_menu = nullptr;
	QStatusBar *m_status = nullptr;
Tobias WEBER's avatar
Tobias WEBER committed
42

Tobias WEBER's avatar
Tobias WEBER committed
43
44
	GlPlot *m_plot = nullptr;
	std::size_t m_sphere = 0;
Tobias WEBER's avatar
Tobias WEBER committed
45
46


Tobias WEBER's avatar
Tobias WEBER committed
47
protected:
Tobias WEBER's avatar
Tobias WEBER committed
48
49
	void Add3DItem(const t_vec& vec, const t_vec& col, t_real scale, const std::string& label);
	void SetStatusMsg(const std::string& msg);
Tobias WEBER's avatar
Tobias WEBER committed
50

Tobias WEBER's avatar
Tobias WEBER committed
51
52
53
	void New();
	void Load();
	void Save();
Tobias WEBER's avatar
Tobias WEBER committed
54

Tobias WEBER's avatar
Tobias WEBER committed
55
56
57
58
	void PlotMouseDown(bool left, bool mid, bool right);
	void PlotMouseUp(bool left, bool mid, bool right);
	void PickerIntersection(const t_vec3_gl* pos, std::size_t objIdx, const t_vec3_gl* posSphere);
	void AfterGLInitialisation();
Tobias WEBER's avatar
Tobias WEBER committed
59

Tobias WEBER's avatar
Tobias WEBER committed
60
	virtual void closeEvent(QCloseEvent *evt) override;
Tobias WEBER's avatar
Tobias WEBER committed
61

Tobias WEBER's avatar
Tobias WEBER committed
62
63
64
private:
	long m_curPickedObj = -1;
	bool m_ignoreChanges = 1;
Tobias WEBER's avatar
Tobias WEBER committed
65
	bool m_ignoreCalc = 1;
Tobias WEBER's avatar
Tobias WEBER committed
66
67
68
69
};


#endif