Skip to content
Snippets Groups Projects
moldyn.h 2.67 KiB
Newer Older
  • Learn to ignore specific revisions
  • Tobias WEBER's avatar
    Tobias WEBER committed
     * atom dynamics
    
     * @author Tobias Weber <tweber@ill.fr>
     * @date Dec-2019
     * @license GPLv3, see 'LICENSE' file
     */
    
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    #ifndef __MOLDYN_GUI_H__
    #define __MOLDYN_GUI_H__
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    #include <QtWidgets/QMainWindow>
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    #include <QtWidgets/QMenu>
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    #include <QtWidgets/QMenuBar>
    #include <QtWidgets/QStatusBar>
    
    #include <QtWidgets/QSlider>
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    #include <QtWidgets/QLabel>
    
    #include <QtWidgets/QDoubleSpinBox>
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    #include <QtCore/QSettings>
    
    
    #include <vector>
    
    #include <tuple>
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    #include "libs/glplot.h"
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    #include "libs/math20.h"
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    #include "moldyn-loader.h"
    
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    using t_real = double;
    using t_vec = std::vector<t_real>;
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    using t_mat = tl2::mat<t_real, std::vector>;
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    class MolDynDlg : public QMainWindow
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    public:
    	MolDynDlg(QWidget* pParent = nullptr);
    	~MolDynDlg() = default;
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    protected:
    
    	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);
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	void SetStatusMsg(const std::string& msg);
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	void UpdateAtomsStatusMsg();
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	void New();
    	void Load();
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	void SaveAs();
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	void PlotMouseDown(bool left, bool mid, bool right);
    	void PlotMouseUp(bool left, bool mid, bool right);
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	void PlotMouseClick(bool left, bool mid, bool right);
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	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
    	void GLInitialisationFailed();
    
    	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 CalculateDistanceBetweenAtoms();
    
    	void CalculatePositionsOfAtoms();
    	void CalculateDeltaDistancesOfAtoms();
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	void SliderValueChanged(int val);
    
    	void SelectAll();
    	void SelectNone();
    
    
        void DeleteSelectedAtoms();
        void OnlyKeepSelectedAtoms();
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	void SelectAtomsOfSameType();
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	void DeleteAtomUnderCursor();
    	void DeleteAllAtomsOfSameType();
    	void KeepAtomsOfSameType();
    
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	virtual void closeEvent(QCloseEvent *evt) override;
    
    	virtual void keyPressEvent(QKeyEvent *evt) override;
    
    
    protected:
    	MolDyn<t_real, t_vec> m_mol;
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	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;
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    
    
    	QStatusBar *m_status = nullptr;
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	QLabel *m_statusCurAtom = nullptr;
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	QLabel *m_statusAtoms = nullptr;
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    
    
    	QSlider *m_slider = nullptr;
    
    	QDoubleSpinBox *m_spinScale = nullptr;
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    	QMenu *m_atomContextMenu = nullptr;
    
    
    	GlPlot *m_plot = nullptr;
    	std::size_t m_sphere = 0;
    	std::vector<std::size_t> m_sphereHandles;
    
    
    
    Tobias WEBER's avatar
    Tobias WEBER committed
    private:
    	long m_curPickedObj = -1;
    	bool m_ignoreChanges = 1;