1 
2 /****************************************************************************
3  **
4  ** Copyright (C) 2011 Christian B. Huebschle & George M. Sheldrick
5  ** All rights reserved.
6  ** Contact: chuebsch@moliso.de
7  **
8  ** This file is part of the ShelXle
9  **
10  ** This file may be used under the terms of the GNU Lesser
11  ** General Public License version 2.1 as published by the Free Software
12  ** Foundation and appearing in the file COPYING included in the
13  ** packaging of this file.  Please review the following information to
14  ** ensure the GNU Lesser General Public License version 2.1 requirements
15  ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16  **
17  **
18  ****************************************************************************/
19 #ifndef WINDOW_H
20 #define WINDOW_H
21 #include <locale.h>
22 #include <QtGui>
23 #include <QtNetwork>
24 #include "chgl.h"
25 #include "highlighter.h"
26 #include "codeeditor.h"
27 #include "eacDlg.h"
28 #include "qpeakview.h"
29 #include "psewidget.h"
30 #include "dragdropatomsdlg.h"
31 #include "historywidget.h"
32 #include "savehistorywidget.h"
33 #include "fourxle.h"
34 #include "fcvsfo.h"
35 #include "itsme.h"
36 #ifndef nullptr
37 #define nullptr nullptr
38 #endif
39 #ifndef fmin
40 #define fmin(x, y) (((x) < (y)) ? (x) : (y))
41 #endif
42 #if defined _MSC_VER &&  _MSC_VER == 1500
43 #define round(x) (x<0?ceil((x)-0.5):floor((x)+0.5))
44 #endif
45 #undef vc7hack1
46 #ifdef _MSC_VER
47 #include <float.h>
48 #define std_isfinite _finite
49 #define vc7hack1 1
50 #else
51 #define std_isfinite std::isfinite
52 #endif
53 
54 #ifndef FONTFAM
55 #if defined Q_WS_WIN || defined Q_OS_WIN
56 #define FONTFAM "Droid Sans Mono"
57 #elif defined Q_WS_MAC || defined Q_OS_MAC
58 #define FONTFAM "Monaco"
59 #else
60 #define FONTFAM "Droid Sans Mono"
61 #endif
62 #endif
63 
64 #include "calculator.h"
65 #include "dsrgui.h"
66 #include "listfile.h"
67 #define SX_LINE_LENGTH 80
68 
69 /*! \brief Window is the main window class of ShelXle most of the magic happens here ;-)
70  *
71  */
72 
73 class Window : public QMainWindow {
74   Q_OBJECT
75   public:
76     Window();
77     virtual ~Window();
78     //bool scroller;
79     static int Version();//!< This return the actual Revision
80     bool restraintsOrConstraints();
81     int MaxNumberOfPeaks;
programName()82     static QString programName(){return QString(PROGRAM_NAME);}//!<get the actual programname
83     ChGL *chgl;
84     QDockWidget *dock, *renamDock, *qPeakDock, *histDock;
85     QDockWidget *shxEditorDock,*shxOutputDock,*infotainmentDock;
86     QAction *enterRenameMode;
87     QAction *showQPeakLegend;
88     QAction *openAct;
89     QAction *screenshotAct;
90     QAction *objExport;
91     QAction *tubeStyle;
92     QAction *ballStyle;
93     QAction *separateLabelFile;
94     QAction *toggleOrthoView;
95     QAction *belocube;
96     QAction *actionUniq;
97     QAction *actionSearch;
98     QAction *actionNext;
99     QAction *actionPrev;
100     QAction *actionSave;
101     QAction *actionSaveAs;
102     QAction *actionUndo;
103     QAction *actionRedo;
104     QAction *actionCut;
105     QAction *actionCopy;
106     QAction *actionPaste;
107     QAction *actionQPeakLimit;
108     QAction *actionHFix;
109     QAction *wghtRefineAct;
110     QAction *actionEP;
111     QAction *actionEM;
112     QAction *togAtom;
113     QAction *togBond;
114     QAction *togLabel;
115     QAction *togUnit;
116     QAction *togElli;
117     QAction *togHBond;
118     QAction *togBackGr;
119     QAction *togDepthCueing;
120     QAction *killQs;
121     QAction *killHs;
122     QAction *astdlg;
123     QAction *equivHighlighting;
124     QAction *wghtAct;
125     QAction *sinaAct;
126     QAction *recalcSDM;
127     QAction *renamUpdateAct;
128     QAction *cntrPlot;
129     QAction *useNativeDlg;
130     QAction *darkTheme;
131     QAction *symmElementsAct;
132     QTextBrowser *brs;
133     QProcess *runffmpeg;
134     QLineEdit *ffmpegedt,*mp4file;
135     QString fffn;
136     QLabel *ffl;
137     QString oldFileName;
138     QProgressBar *bar;
139     QPushButton  *closeFF ;
140     QDialog *extraOutput;
141 
142     QToolBar *editToolBar,//!< Edit toolbar (redo undo copy cut and paste...)
143              *refineToolBar,//!< WGHTrefine, autoHFIX, +kill Hs, kill Qs, refine XL and anis refine
144              *bottomToolBar,//!< selection toolbar with context specific content.
145              *fito,//!< File toolbar
146              *vito,//!< View toolbar to toggle bonds atoms etc...
147              *extraTB; //!< External programs can be startet from here.
148     QMenu  *runMenu;//!< the SHELX menu where you also run XL and do convientent stuff with the res file.
149     QMenu *fileMenu, //!< file menu including the save history
150           *editMenu, //!< standart edit menu
151           *dialogMenu, //!< settings menu
152           *viewMenu, //!< View menu
153           *packMenu, //!< Packing, growing, fusing etc...
154           *extraMenu;//!< add and start external programs...
155     QToolButton  *zoomIn;
156     QToolButton  *zoomOut;
157     QToolButton  *homeMe;
158     QToolButton *quickReLoadButton;
159     QCheckBox *sr_same;
160     QCheckBox *sr_simu;
161     QCheckBox *sr_rigu;
162     bool notRefine;
163     int tbiconSize;
164     QHash<QString,QVariant> myHash;//!< This Hash connects recent file names with cursor positions. So that files are opened always at the same position.
165     QAction *refineAct;
166     QAction *refineActAnis;
167     QAction *refineActActa;
168     QAction *clearVoro;
169     FourXle *fxle;//!<The fourier map object.
170     //  QList<V3> orte;
171     //  QList<V3> normalen,nnn;
172     //  QList<QColor> farben;
173     //  int zoff,yoff,xoff;
174     //  QList<int> sfac;//!<List of Scattering factors.
175     QList<double> fvar;//!<List of Free Variables.
176     QMap<int,int> fvarCntr;//!<Free Variable counter QMap.
177     bool isLabelInUse();//!< Checks if the current Label in the reaname dialog is in use. \returns true if Label is already in use.
178     QString dirName; //!< Full path of the currently opened file (including file name).
179     QString actionInfo;
setFocus(bool b)180     void setFocus(bool b){focusSet=b;}
isFocusSet()181     bool isFocusSet() {return focusSet;}
182     int getFvarCntr(int fvar);//!< returns the number of uses of a free variable.
183     int firstAtomLine;
184     int extraIndex;
185     bool finWasPressed;
186     QAction *ydleStart;
187     QAction *ydleStop;
188     QSpinBox *lpart;
189     QSpinBox *rpart;
190 
191 signals:
192     void fileLoaded(void);
193     void pipeStatus(const QString& s);  //!<changes the statusbar text to s @param s text for the status bar
194     void movedByUser();
195 
196     public slots:
197       void qinitres();
198     void addNewScatteringFactor(int oz);//!<Adds a new scattering factor to the SFAC / UNIT list.
199     void addDissorderedMethyl();//!<Adds rotation dissordered hydroghen atoms to a R-C carbon atom. (methyl group) AFIX 127.
200     void addMethyl();//!<Adds hydroghen atoms to a R-C carbon atom. (methyl group) AFIX 137.
201     void addHydroxyl();//!<Adds hydroghen atoms to a O-X oxygen atom. (hydroxyl group) AFIX 148.
202     void addH43();
203     void addH23();
204     void addH93();
205     void addH163();
206     void addHnonplanarAminR2();
207     void addHnonplanarAminR1();
208     void addMoreQPeaks();//!<Creates Q-Peaks from the Fo-Fc map.
209     void adoptEditToolBar(bool b);//editToolbar is child of shxMW or the MainWindow
210     void aula();//!< Auto Labeling
211     void autoHFix();//!<Automatically adds H atoms and AFIX instructions to the file uses the Fo-Fc map.
212     void brwsIcon();//!< Select an alternative icon for external program
213     void changeFixes(int i);//!< Variable that should not be refined get a 10 added.
214     void changeEditorFont();//!<Changes the Editor font via an font dialog.
215     void changeElemetofLabel(const QString &pse);//!<NextLabel of rename mode consists of labelPSE labelIndex labelSuffix, this changes the LabelPSE to pse. @param pse next labelPSE.
216     void changeElement();//!<Changes the element of an atom (chgl->ImeanThisAtom) to an other scattering factor (acation->data)
217     void changeIconSize();//!<Changes the size of the tool bar icons.
218     void changeInvRad(double r);
219     void changePlaneTransparence(double t);
220     void changeQPeakLimit();//!<Maximum number of Q-peaks created by addMoreQPeaks
221     void changeIndexofLabel(const int i);//!<NextLabel of rename mode consists of labelPSE labelIndex labelSuffix, this changes the LabelIndex to pse. @param i next labelIndex. For i < 0 no number in label.
222     void changeLabelFont();//!<Changes the font of the on screen Labels of the atoms.
223     void changeResiPart();//!< change the resi or part of selected atoms.
224     void changeScalefactor();//!<Changes the screen shot scale factor.
225     void changeSuffixofLabel(const QString &fix);//!<NextLabel of rename mode consists of labelPSE labelIndex labelSuffix, this changes the labelSuffix @param fix next labelSuffix.
226     void checkForUpdates();//!<Checks via the internet if new versions of ShelXle are availabe.
227     void clipboardDataChanged();//!<Enables the paste action if something is in the clipboard.
228     void clearStructure();
229     void closeEvent(QCloseEvent *event);//!<Tidys everything up and stores settings before closing the ShelXle app.
230     void configBeLos();//!< Configure BEDE LONE Objects style
231     void darkEdit();
232     void brwsEPS();
233     void everyPointOne();
234     void everyAIM();
235     void contourPlot();
236     void nocontourPlot();
237     void colorButtonDialog();
238     void convergeWght();//!<Tries to refine until the wheighting scheme converges.
239     bool compareWGHTS(QString w1, QString w2, double tolerance = 0.001);//!<Compare 2 WGHT strings by value
240     void complete();//!<forces the display list to be updated.
241     void configureBottomToolbar();//!<Changes the look and feel and position of the Selection Tool Bar.
242     void copySymmMate();//!<copies the fractional coordinates of a symmetry generated part -n atom in the file.
243     void createCentroid();//!<creates a centroid dummy atom which can be used for restraints and measurements.
244     void deleteAllH();//!<Deletes all Hydrogen atoms and associated AFIX instructions.
245     void deleteAllQ();//!<Deletes all Q-Peaks.
246     void deleteSelectedAtoms();//!<Deletes all selected atoms.
247     void displayResiduals(XLOutputParser &lfo, QString s);//!<Displays the residuals from SHELXL in a clear way
248     int duplicates();//!<searches for identical labeled Atoms and add them to a list.
249     void editorIsVisible(bool);//!is Editor really visble
250     void effuenf();//!<F5 recalculates the display lists sets the focus to the openGL widget and raises it on top.
251     void expandAll();//!<Expands all contacts .
252     void extraSettings();//!<A dialog to add/edit exteral programs started from ShelXle with or without arguments.
253     void extraSettingsLast();//!<A dialog to add/edit exteral programs started from ShelXle with or without arguments.
254     void exportCoordinates();//!<Exports all visible atoms to an extra file.
255     void exportCC();//!< Export coordinates to computational chemistry program inputs like Gaussian or Turbomol
256     void exportFMaps();
257     void fileNative();
258     bool fileSave(bool spell=true, bool loadafter=true);//!<saves the editor content to the current file. @param spell disable spell checking during save @param loadafter disable reloading of file.
259     bool fileSaveAs();//!<Saves the editor content to a specified file.
260     void fillCell();//!<Uses symmetry until the unit cell box is full.
261     void showSearch();//!< shows the search and repleace for the editor.
262     void findNext();//!<Find next (F3) functionality of search and replace in the editor.
263     void findPrev();//!<Find previous functionality of search and replace in the editor.
264     void findInStructure(const QString &info);//!<the atom with the matching orgiginal line gets centered and selected.@param info original line content.
265     void openIncludeFile(const QString &info);
266     void finXL();//!Finish XL by name.fin
267     void fixIt();//!< Fix some parameters from being refined.
268     void foversusfc();//!< Shows a duialog to analyse and omit outlier reflections.
269     void fuse();//!< show only the asymetric unit.
270     void grossRC(const QString &text);//!< Capitalizes the text and sets the resiResiClass text to text @param text new text for resiResiClass.
271     void grow();//!< completes the molecule by symmetry.
272     void growQPeaks(bool qpg);//!< applies symmetrie operations used for the main structure also for the Q-Peaks.
273     void hereAreMyKeys();
274     void hideToolz(bool b);//!< Hides all tool bars.
275     void hintLhide();//!< Hides a hint in the reaname mode for ever.
276     void idleRotStart();
277     void idleRotStop();
278     void incResiNr();
279     void decResiNr();
280     void infoKanalNews(const QString& s);//!< passes a string to the Info widget. @param s a new text for the info widget.
281     void inheritLabels();//!< opens an inherit labels dialog.
282     void insertSADI(int selected); //!< Insert SADI restraint into ins file
283     void insertTwin();
284     void invert();//!< inverts the structure and changes ot the right enantiomorph space group.
285     //  inline int Intersect( double& vm, double& vp ){ return vm*vp <= 0.0 && (vm<0.0 || vp<0.0); }//!<
286     void isUpToDate(QNetworkReply* antwort);//!< Interpretes the network reply for the check for updates (manual version)
287     void jnk();//!< Julian Henn and Kathrin Meindl frcatal dimension analisis
288     void jumpToAtom(int index);//!< if rename mode is visible the atom at index gets renamed if not the cursor of the editor is pointed to the specified atom.
289     void linkHelp();//!< Show a Link to the online help.
290     void loadAFile();//!< (re)loads the file specified in dirName.
291     void loadFile(QString fileName);//!< loads the file with the specified path the listfile is also loaded. @param fileName path to the res / ins file.
292     void load_sheldrick(QString fileName, QString &inhalt);//!< Loads a shelx file from a string. You have to take care that the file is valid beforehand.
293     bool quickReLoad(QString fn, QString &cont);//!< Updates a structure after refinement or save With keeping grow and hide states unchanged. If differences are to large false is returned 1/19/2021
294     void loadLst();//!< loads the .lst file if it exists.
295     void loadrefres();//!< loads the refinement results from the res file.
296     void loadThisFile();//!< loads a file from an QAction with path as Action data.
297 
298     void makeVoro();
299     void clearVoros();
300     void moveSymmMate();//!< Moves the specified symmetry generated atom to the asymmetric unit.
301     void moveSymmMateSel();//!< Moves selected symmetry generated atoms to the asymmetric unit.
302     void obj();
303     void omitRfl();
304     void openFile();//!< Open res file dialog
305     void openRecentFile();//!< opens a recently used file
306     void openSaveHistory();//!< sows the save history dialog
307     void outputIsVisible(bool);//!< is Output really visble
308     void packInLimits();//!< Pack inside given limits (eg multiple unit cells)
309     //  bool peakcomp(MyAtom &a1,MyAtom &a2);
310     void raiseTaff();// show visual refinement output
311     void raiseTaz();// show text refinement output
312     void redoRename();//!<if redo is clicked and it was a rename a rename is redone.
313     void removeExtra(QAbstractButton *button);//!<removes an external program from the menu / tool bar.
314     void renameRNchanged(int ii);//!< Residue Number of rename mode is changed to ii @param ii residue number.
315     void renameThisAtom();//!< The label of the specified atom is used to feed the inputs of rename mode and the latter is opened.
316     void renameThisAtom(int index);//!< specified atom is renamed as given by rename mode
317     void rename2ThisAtom(int index);//!< tries to find an apropriate H label
318     void renamUpdate(bool vis);//!<rename mode gets shown or hidden. @param vis visibitity of rename mode.
319     void replyFinished(QNetworkReply* antwort);//!<Interpretes the network reply for the check for updates (automatic version)
320     void resiSelectorCheck();//!<updates the 'Residue Finder' when the text cursor moves.
321     void rotd();//!< rotates down
322     void rotl();//!< rotates left
323     void rotr();//!< rotates right
324     void rotu();//!< rotates up
325     void rufmode();//!< new labels can not be duplicates if this mode is on
326     void runShelXL();//!< copies res to ins file and runs shelxl
327     void runExtra();//!< runs rexternal programs
328     void runXLWGHT();//!< runs shelxl for convergeWght.
329     void saveScene();//!< saves a srceen shot of the OpenGL widget
330     void savePovRay();
331     void savePovInc(QString povName);
332     void sdm();//!< the shortest distance matrix is (re)calculated and the structure is grown
333     void selectInStructure(const QString &info);//!< selects all atoms found in selected text in the structure @params info seleted text.
334     void shredCIF();//!< runs shredcif and loads ins/res file
335     void selectParts();//!< selects atoms for 'Part Selector'
336     void setShelxlOptions();//!< sets path and command line options for ShelXl executable.
337     void setShelxlPath();//!< sets path for ShelXl executable
338     void setExtraPath();//!<sets path for an external program
339     void setDefaultPath();//!<when the first recent file does not exists then open dialog starts here
340     void selOmitG5();
341     void selOmitG10();
342     void updateExtraIcon();//!< redraws the icon preview
343     void sColorDLG();
344     void setSDMLimit();//!< max atoms in au to skip sdm calculation
345     void setMonoQ(bool vis);//!<sets monochome modus for Q-Peaks to vis @param vis mochrome mode of Q-Peaks.
346     void shxActUpdate(bool vis);//!< the editor tool bar gets visible when the editor is visible.
347     void shxOPTUpdate(bool vis);//!< the editor tool bar gets visible when the editor is visible.
348     void sina();//!< ANIS backwards is SINA! makes specified, selected or all atoms isotrop again with uiso = 0.05
349     //  void springSlider();
350     void  spellCheck();//!< a syntax check for the res file.
351     void closeSR(bool vis);
352     void splitRotate();
353     QString strippedName(const QString &fullFileName);//!< the file name without the path is retrned \returns the filename without path. @param total file path.
354     void styleDialog();//!< Atom style dialog is shown.
355     void symmElements(bool b);
356     void symmetryManager();//!< a symmetry manager is shown
357     void testMerohedral();
358     void toggDocWid(bool weg);//!< hides Text Windows
359     void toggleEQHighlighting(bool);//!< toggles higlighting of symmetry generated atoms.
360     void toggleFullScreen();
361     void toggleHFSAO(bool on);
362     void togOMIT(bool b);
363     void togSop(bool b);
364     void togSel(bool b);
365     void toggleOrtho(bool ov);//!< toggles orthographic and perspective projection.
366     void undoRename();//!<if undo is clicked and it was a rename a rename is undone.
367     void uniq();//!< moves centers of gravity of all molecules into the unit cell box. !does not heal scrambled molecules!
368     void unique();//!< !does ?not? heal scrambled molecules!
369     void updateLabel();//!< the rename mode is updated
370     void updateLC();//!<updates the Lines and Columns display.
371     void updateRecentFileActions();//!<updates the recent file list
372     void updateScaleDlg();//!< recalculates scale factor with and heigth of the screen shot scale factor dialog
373     void updateSelectResi();//!< updates the ResiFinder ComboBox for each editor line starting with RESI a new item is issued .
374     void updateSM1();//!< for the symmetry manager dialog
375     void updateSM2();//!< for the symmetry manager dialog
376     void updateSM3(const QUrl link);//!< for the symmetry manager dialog
377     void updateSM4(QString s);//!< for the symmetry manager dialog
378     void updateStatusBar(const QString& s) ;  //!<changes the statusbar text to s @param s text for the status bar
379     void updateTieFreeVar();//!< if the occupancy factor should be tied to a free variable the rename mode
380     void updateTwinTest();
381     void updateXLput();//!< the output view for the shelxl run is updated
382     void updateExtraOutput();//!< the output view for the external program is updated.
383     void updateExtraSettings(int index);//!< the external programs dialog gets updated.
384     void updateExtraSettings();//!< the external programs dialog gets updated.
385     void wasDelete();//!< for undo redo fuctionality of atom deletion.
386     void worstReflections();
387     void setFFMPEGEXE();
388     void setMP4();
389     void updateOutput();
390     void makeRotMovi();
391     void split();
392     void notsplit();
393     void wasRename();//!< for undo redo fuctionality of atom renameing.
394     void withdrawres();//!< discard the results of the refinement. Copies back the ins file to the res file and loads that.
395     void zoomin(); //!< zoomes in
396     void zoomout();//!< zoomes out
397     void calculator(); //!< A dialog to work with resolution and 1,3 distances via the angle
398     void create_DSRGui(); //!< A dialog for DSR
399     void insertDSRLine(QString dsrline, int position, QVector<int> previousLine);
400     void dsrClosed();
401     void aboutXLE();//!<Shows the about dialog of ShelXle.
402     CEnvironment lonesome(QString s,int startNummer);//!< calculates LONE objects
403     void beloWriteCube();//bello braf!
404     static int isacommand(QString command);
405     void displayDisagreeableRestraints();
406     void defineBarray();
407   protected:
408     void paintEvent(QPaintEvent *event);
409     void moveEvent(QMoveEvent *event);
410     void dragEnterEvent(QDragEnterEvent *event);
411     void dropEvent(QDropEvent *event);
412   private:
413     bool focusSet;
414     bool fullscreen;
415     int wght_cycls; //!< Number of cycles during the wght refinement.
416     int ls_cycls;   //!< Number of least-squares cycles during L.S. or CGLS refinement.
417     bool nowaste;// start labeling always at 1
418     QNetworkAccessManager *net;
419     QNetworkReply *reply;
420     V3 urs;
421     QString altText,popel;//popel is original line of old rotation center rotze
422     PSEWidget *psew;
423     QSpinBox *symmIntBx;
424     QSpinBox *symmXBx;
425     QSpinBox *symmYBx;
426     QSpinBox *symmZBx;
427     QSpinBox *symmFrgBx;
428     QLineEdit *prosaSymm;
429     QTimer prosaTimer;
430     QTextBrowser *OrtepCodesbrowser;
431     QLabel *shortestDistanceLabel;
432     QPushButton *willpse;
433     QPushButton *beloColorButton;
434 
435     bool machPlatz,FehlerTeufel;
436     int hhh;
437     //  QSlider *zoomer;
438     //  QTimer *sliderTimer;
439     QSignalMapper *dsm;
440     HistoryWidget *hw;
441     double range,weight;
442     int falschAtom;
443     QCompleter *completer;
444     QString labelPSE,labelSuffix,nextLabel,title;
445     int labelIndex;
446     QLabel *nextNameL, *hintL;
447     QCheckBox *rufModeBox,*indexIncr;
448     QSpinBox *resiNrSpin;
449     QSpinBox *indexSpin;
450     QSpinBox *partSpin;
451     QSpinBox *spinSelectPart;
452     QCheckBox *inculdePartNull;
453     QCheckBox *selectPart;
454     QLabel *tieOccL;
455     QComboBox *tieType;
456     QLabel *tieFVNrL;
457     QSpinBox *tieFVNr;
458     QLabel *tieUsedL;
459     QDoubleSpinBox *tieFix;
460     QString FFTErrorString;
461     QComboBox *sufixBox;
462     QLineEdit *resiResiClass;
463     QComboBox *resiResiClassCB;
464     QPeakView *qpv;
465     CEnvironment undoAtom,redoAtom,deletedAtom,restoredAtom;
466     QList<int> undoAtomIndex,redoAtomIndex,gehtMichAn,gehtMichAn2;
467     int altursize;
468     int mode;
469     QMenu *recentFilesMenu,*stereoMenu,*moveMenu,*helpMenu,*sortMenu;
470     QActionGroup *stereoGroup,*tubeGroup,*sortGroup;
471     enum { MaxRecentFiles = 20 };
472     QAction *recentFileActs[MaxRecentFiles];
473     bool otherOpenFiles,doNotAnnoyMe;
474     Molecule mole;
475     QSpinBox *widthBox;
476     QSpinBox *heightBox;
477     QDoubleSpinBox *scalefBox;
478     QDoubleSpinBox *cStepBx;
479     QDialog *scalDlg;
480     QTextBrowser *infoKanal;
481     QRadioButton *pserbt[110];
482     QGroupBox *sfacBox;
483     double scalePic;
484     QString saveName,fvarinfo;
485     QProcess *shelxl,*extraProc;
486     QTextEdit *extraOutPut;
487     CodeEditor *editor , *xlPutor;
488     QString shelxlPath, shelxlArgs;
489     bool useMyBArray;    //! If set to true, the b-array is not automatically set by ShelXle
490     QStringList extraProgramNames,extraProgramPaths,extraOptions,extraExt2;
491     QList<Qt::CheckState>  extraArguments,extraExtensions, extraDetach, extraResIns, extraOpenFileDialogBefore, extraIconOverlay;
492     QLineEdit *extraPath,*extraName,*extraAltExtEdit,*extraArgumentsEdit,*shxPath,*shxOptions;
493     QList<int> extraOverlayPointSize;
494     QSpinBox *iovlPointSize;
495     QComboBox *pgms;
496     QToolButton *extraFakeButton;
497     QString altExtraIconPath;
498     QStringList altExtraIconPaths;
499     QDockWidget *helpDock;
500     //  QWebView *hilfe;
501     //QTextBrowser *hilfe;
502     QWidget *shx_group;
503     QMainWindow *shxMW;
504     QVBoxLayout *sss;
505     QVBoxLayout *hwl;
506     QHBoxLayout *nlt;
507     QGroupBox *renameBox ;
508     QVBoxLayout *rnla;
509     QLabel *nliL,*resiResiClassL,*resiNrSpinL,*partSpinL;
510     QHBoxLayout *sfacla;
511     QScrollArea *qsa,*qsa2;
512     QAction *zm_stereo, *pe_stereo, *xe_stereo, *an_stereo, *hw_stereo, *no_stereo;
513     QAction *fcvsfoAct, *calcAct, *dsrAct;
514     QAction *soact;
515     QString shredCIFPath;
516     QAction *backColor,*labelColor;
517     QVBoxLayout *lt;
518     QLabel *sLabel, *fvused;
519     QCheckBox *qGrowPeak,*search4duplicates;
520     QTimer *hidwillpse;
521 
522     QLabel *indexL,*sufixL;
523     QLabel *scalwla, *scalhla, *scalsla, *header;
524     QDialogButtonBox *buttonBoxRN;
525     QHBoxLayout *indexla;
526     QStringList alpha;
527     QGridLayout *scalla;
528     //QHBoxLayout *slt2;
529     QVBoxLayout *vlt, *resid_layout;
530     QTextEdit *resid_label; //! display the refinement residuals
531     QTextEdit *restr_table; //! display the bad restraints
532     //RenderPlot *plot;
533     LstData listf_info;
534     QGroupBox *resid_gb;
535     QGroupBox *gp;QHBoxLayout *rhla,*rhla2;
536     QHBoxLayout *buttomLt;
537     QPushButton *showLst;
538     QIcon extraIcon;
539     QCheckBox *useArgument;
540     QCheckBox *omitExtension;
541     QCheckBox *detach;
542     QCheckBox *copyResIns;
543     QCheckBox *openFileDialogBefore;
544     QCheckBox *iconOverlay;
545     QSize ediSize;
546     QPoint ediPos;
547     QLabel *lineColumn;
548     QGroupBox *navibox,*refineButtonBox,*refineButtonBox2;
549     QPushButton *stoppRefinement,*finishRefinement;
550     QPushButton *loadRes;
551     QPushButton *withdraw;
552     QPushButton *pro7;
553     QPushButton *stoppRefinement2,*finishRefinement2;// this is for infotainment dock
554     QPushButton *loadRes2;
555     QPushButton *withdraw2;
556     QToolButton *spellCheckact,*spellCheckact2;
557     QSettings *vis_settings;
558     void shx_editor(QString filename);//16.10.2019: title is class glabal variable. no need to give it as parameter her
559     double getNumber(double v,const QList<double> fv,double uiso);//to be changed!
560     double getNumber(double v,const QList<double> fv,int idx,int &fixFlag);//to be changed!
561     MyAtom findOH(V3 donor, V3 acceptor,int dindex,QStringList alab);
562     bool maybeSave();
563     bool maybeSave2();
564     bool startFused;
565     Calculator *calcmenu;
566     DSRGui *dsr;
567     QString pngName;//output file of povray export
568     QScrollArea *qsaPNG ;
569 
570     QList<bool> twinRedundant;
571     QList<bool> twinDone;
572     QDialog *twinDlg;
573     double rvalue2beat, wr2value2beat;
574     QVBoxLayout *twinvbl;
575     QGroupBox *twingpx;
576     QLabel *twinpatlab;
577     //QGroupBox *gpx =new QGroupBox("Posible twin laws for this structure:",twinDlg);
578     //QVBoxLayout *vbl = new QVBoxLayout();
579     //QString selectedRestraintsAtoms(QString buffer, QList<MyAtom> selected, QString resiSpec, bool exclude_H=false);
580 
581 };
582 #endif
583 
584