moldyn.h 2.31 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
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
Tobias WEBER's avatar
Tobias WEBER committed
15
#include <QtWidgets/QSlider>
Tobias WEBER's avatar
Tobias WEBER committed
16
#include <QtWidgets/QDoubleSpinBox>
Tobias WEBER's avatar
Tobias WEBER committed
17
#include <QtCore/QSettings>
Tobias WEBER's avatar
Tobias WEBER committed
18 19

#include <vector>
Tobias WEBER's avatar
Tobias WEBER committed
20
#include <tuple>
Tobias WEBER's avatar
Tobias WEBER committed
21

Tobias WEBER's avatar
Tobias WEBER committed
22 23
#include "libs/_cxx20/glplot.h"
#include "libs/_cxx20/math_algos.h"
Tobias WEBER's avatar
Tobias WEBER committed
24

Tobias WEBER's avatar
Tobias WEBER committed
25 26
#include "moldyn-loader.h"

Tobias WEBER's avatar
Tobias WEBER committed
27

Tobias WEBER's avatar
Tobias WEBER committed
28 29 30
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
31 32


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

Tobias WEBER's avatar
Tobias WEBER committed
39
protected:
40
	std::size_t Add3DItem(const t_vec& vec, const t_vec& col, t_real scale, const std::string& label);
Tobias WEBER's avatar
Tobias WEBER committed
41 42
	void Change3DItem(std::size_t obj, const t_vec* vec, const t_vec* col=nullptr, const t_real *scale=nullptr, const std::string *label=nullptr);

Tobias WEBER's avatar
Tobias WEBER committed
43
	void SetStatusMsg(const std::string& msg);
Tobias WEBER's avatar
Tobias WEBER committed
44

Tobias WEBER's avatar
Tobias WEBER committed
45 46
	void New();
	void Load();
Tobias WEBER's avatar
Tobias WEBER committed
47
	void SaveAs();
Tobias WEBER's avatar
Tobias WEBER committed
48

Tobias WEBER's avatar
Tobias WEBER committed
49 50
	void PlotMouseDown(bool left, bool mid, bool right);
	void PlotMouseUp(bool left, bool mid, bool right);
Tobias WEBER's avatar
Tobias WEBER committed
51
	void PlotMouseClick(bool left, bool mid, bool right);
Tobias WEBER's avatar
Tobias WEBER committed
52 53
	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
54

Tobias WEBER's avatar
Tobias WEBER committed
55
	void SliderValueChanged(int val);
Tobias WEBER's avatar
Tobias WEBER committed
56 57

	void SelectAll();
Tobias WEBER's avatar
Tobias WEBER committed
58 59 60
	void SelectNone();

	std::tuple<bool, std::size_t, std::size_t, std::size_t> GetAtomIndexFromHandle(std::size_t handle) const;
Tobias WEBER's avatar
Tobias WEBER committed
61

Tobias WEBER's avatar
Tobias WEBER committed
62
	void CalculateDistanceBetweenAtoms();
Tobias WEBER's avatar
Tobias WEBER committed
63 64
	void CalculatePositionsOfAtoms();
	void CalculateDeltaDistancesOfAtoms();
Tobias WEBER's avatar
Tobias WEBER committed
65

Tobias WEBER's avatar
Tobias WEBER committed
66 67 68 69
	void DeleteAtomUnderCursor();
	void DeleteAllAtomsOfSameType();
	void KeepAtomsOfSameType();

Tobias WEBER's avatar
Tobias WEBER committed
70
	virtual void closeEvent(QCloseEvent *evt) override;
Tobias WEBER's avatar
Tobias WEBER committed
71
	virtual void keyPressEvent(QKeyEvent *evt) override;
Tobias WEBER's avatar
Tobias WEBER committed
72

73 74 75

protected:
	MolDyn<t_real, t_vec> m_mol;
Tobias WEBER's avatar
Tobias WEBER committed
76 77
	t_mat m_crystA = m::unit<t_mat>(3);
	t_mat m_crystB = m::unit<t_mat>(3);
78 79 80 81 82

	QSettings *m_sett = nullptr;
	QMenuBar *m_menu = nullptr;
	QStatusBar *m_status = nullptr;
	QSlider *m_slider = nullptr;
Tobias WEBER's avatar
Tobias WEBER committed
83
	QDoubleSpinBox *m_spinScale = nullptr;
Tobias WEBER's avatar
Tobias WEBER committed
84
	QMenu *m_atomContextMenu = nullptr;
85 86 87 88 89 90

	GlPlot *m_plot = nullptr;
	std::size_t m_sphere = 0;
	std::vector<std::size_t> m_sphereHandles;


Tobias WEBER's avatar
Tobias WEBER committed
91 92 93
private:
	long m_curPickedObj = -1;
	bool m_ignoreChanges = 1;
Tobias WEBER's avatar
Tobias WEBER committed
94 95 96 97
};


#endif