Newer
Older
* @author Tobias Weber <tweber@ill.fr>
* @date Dec-2019
* @license GPLv3, see 'LICENSE' file
*/
#ifndef __MOLDYN_GUI_H__
#define __MOLDYN_GUI_H__
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
using t_real = double;
using t_vec = std::vector<t_real>;
public:
MolDynDlg(QWidget* pParent = nullptr);
~MolDynDlg() = default;
std::size_t Add3DItem(const t_vec& vec, const t_vec& col, t_real scale, const std::string& typelabel, int atomindex=-1);
void Change3DItem(std::size_t obj, const t_vec* vec, const t_vec* col=nullptr, const t_real *scale=nullptr,
const std::string *typelabel=nullptr, int atomindex=-1);
void PlotMouseDown(bool left, bool mid, bool right);
void PlotMouseUp(bool left, bool mid, bool right);
void PlotMouseClick(bool left, bool mid, bool right);
void PickerIntersection(const t_vec3_gl* pos, std::size_t objIdx, const t_vec3_gl* posSphere);
void AfterGLInitialisation();
std::tuple<bool, std::size_t, std::size_t, std::size_t> GetAtomIndexFromHandle(std::size_t handle) const;
std::tuple<std::string, int> SplitDataString(const std::string&) const;
void CalculatePositionsOfAtoms();
void CalculateDeltaDistancesOfAtoms();
void SliderValueChanged(int val);
void SelectAll();
void SelectNone();
void DeleteSelectedAtoms();
void OnlyKeepSelectedAtoms();
void DeleteAtomUnderCursor();
void DeleteAllAtomsOfSameType();
void KeepAtomsOfSameType();
virtual void closeEvent(QCloseEvent *evt) override;
virtual void keyPressEvent(QKeyEvent *evt) override;
protected:
MolDyn<t_real, t_vec> m_mol;
t_mat m_crystA = tl2::unit<t_mat>(3);
t_mat m_crystB = tl2::unit<t_mat>(3);
QSettings *m_sett = nullptr;
QMenuBar *m_menu = nullptr;
GlPlot *m_plot = nullptr;
std::size_t m_sphere = 0;
std::vector<std::size_t> m_sphereHandles;
private:
long m_curPickedObj = -1;
bool m_ignoreChanges = 1;