00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _VFN_WX_CRYST_H_
00018 #define _VFN_WX_CRYST_H_
00019
00020 #include <string>
00021 #include <iostream>
00022
00023 #include "wx/window.h"
00024 #include "wx/button.h"
00025 #include "wx/sizer.h"
00026 #include "wx/stattext.h"
00027 #include "wx/textctrl.h"
00028 #include "wx/checkbox.h"
00029 #include "wx/choice.h"
00030 #include "CrystVector/CrystVector.h"
00031
00032 namespace ObjCryst
00033 {
00034 #ifndef DOXYGEN_SKIP_THIS
00035 enum
00036 {
00037 ID_FIX_SCROLLBARS,
00038 ID_WXOBJ_COLLAPSE,
00039 ID_WXOBJ_NAME,
00040 ID_WXFIELD,
00041 ID_WXFIELD_REFPAR,
00042 ID_WXFIELD_REFPAR_FIXBUTTON,
00043 ID_REFPAR_POPUP_SET_LIMITS,
00044 ID_REFPAR_POPUP_REMOVE_LIMITS,
00045 ID_WXFIELD_OPTION,
00046 ID_WXFIELD_COSTFUNC,
00047 ID_CRYST_MENU1,
00048 ID_CRYST_MENU2,
00049 ID_CRYST_MENU3,
00050 ID_CRYST_MENU4,
00051 ID_CRYST_MENU5,
00052 ID_CRYST_MENU6,
00053 ID_CRYST_MENU7,
00054 ID_CRYST_MENU8,
00055 ID_CRYST_MENU9,
00056 ID_CRYST_MENU10,
00057 ID_CRYST_MENU11,
00058 ID_CRYST_MENU12,
00059 ID_CRYST_MENU13,
00060 ID_CRYST_MENU14,
00061 ID_CRYST_MENU15,
00062 ID_CRYST_MENU16,
00063 ID_REFOBJ_MENU_OBJ,
00064 ID_REFOBJ_MENU_OBJ_SAVE,
00065 ID_REFOBJ_MENU_OBJ_LOAD,
00066 ID_REFOBJ_MENU_PAR,
00067 ID_REFOBJ_MENU_PAR_FIXALL,
00068 ID_REFOBJ_MENU_PAR_UNFIXALL,
00069 ID_REFOBJ_MENU_PAR_RANDOMIZE,
00070 ID_WXSCATTPOWATOM_SYMBOL,
00071 ID_SCATTPOWATOM_MENU_COLOUR,
00072 ID_SCATTPOWATOM_MENU_COLOUR_SETRGB,
00073 ID_ATOM_SCATTPOW,
00074 ID_CRYSTAL_MENU_SAVECIF,
00075 ID_CRYSTAL_MENU_SAVETEXT,
00076 ID_CRYSTAL_MENU_DISPLAY,
00077 ID_CRYSTAL_MENU_DISPLAY_3DVIEW,
00078 ID_CRYSTAL_MENU_SCATT,
00079 ID_CRYSTAL_MENU_PAR_ADDANTIBUMP,
00080 ID_CRYSTAL_MENU_SCATT_REMOVESCATTPOW,
00081 ID_CRYSTAL_MENU_SCATT_ADDSCATTPOWATOM,
00082 ID_CRYSTAL_MENU_SCATT_REMOVESCATTERER,
00083 ID_CRYSTAL_MENU_SCATT_ADDATOM,
00084 ID_CRYSTAL_MENU_SCATT_ADDZSCATTERER,
00085 ID_CRYSTAL_MENU_SCATT_ADDTETRAHEDRON,
00086 ID_CRYSTAL_MENU_SCATT_ADDOCTAHEDRON,
00087 ID_CRYSTAL_MENU_SCATT_ADDTRIANGLE,
00088 ID_CRYSTAL_MENU_SCATT_ADDSQUAREPLANE,
00089 ID_CRYSTAL_MENU_SCATT_ADDCUBE,
00090 ID_CRYSTAL_MENU_SCATT_ADDANTIPRISMTETRAGONAL,
00091 ID_CRYSTAL_MENU_SCATT_ADDPRISMTRIGONAL,
00092 ID_CRYSTAL_SPACEGROUP,
00093 ID_GLCRYSTAL_MENU_UPDATE,
00094 ID_GLCRYSTAL_MENU_CHANGELIMITS,
00095 ID_ZATOM_NAME,
00096 ID_ZATOM_SCATTPOW,
00097 ID_ZATOM_BOND,
00098 ID_ZATOM_ANGLE,
00099 ID_ZATOM_DIHED,
00100 ID_ZSCATTERER_MENU_ATOM,
00101 ID_ZSCATTERER_MENU_ATOM_ADD,
00102 ID_ZSCATTERER_MENU_ATOM_CHANGE_PIVOT,
00103 ID_ZSCATTERER_MENU_PAR_LIMITS_RELAT_BOND,
00104 ID_ZSCATTERER_MENU_PAR_LIMITS_RELAT_ANGLE,
00105 ID_ZSCATTERER_MENU_PAR_LIMITS_RELAT_DIHED,
00106 ID_POWDERSPECTRUM_MENU_SCATT_ADDCOMPBACKGD,
00107 ID_POWDERSPECTRUM_MENU_SCATT_ADDCOMPCRYST,
00108 ID_POWDERSPECTRUM_MENU_GRAPH,
00109 ID_POWDERSPECTRUM_MENU_SAVETEXT,
00110 ID_POWDERSPECTRUM_MENU_SIMULATE,
00111 ID_POWDERSPECTRUM_MENU_IMPORT_FULLPROF,
00112 ID_POWDERSPECTRUM_MENU_IMPORT_PSI_DMC,
00113 ID_POWDERSPECTRUM_MENU_IMPORT_ILL_D1A5,
00114 ID_POWDERSPECTRUM_MENU_IMPORT_XDD,
00115 ID_POWDERSPECTRUM_MENU_IMPORT_CPI,
00116 ID_POWDERSPECTRUM_MENU_IMPORT_2THETAOBSSIGMA,
00117 ID_POWDERSPECTRUM_MENU_IMPORT_2THETAOBS,
00118 ID_POWDERSPECTRUM_MENU_FITSCALE_R,
00119 ID_POWDERSPECTRUM_MENU_FITSCALE_RW,
00120 ID_POWDERSPECTRUM_MENU_WAVELENGTH,
00121 ID_POWDERSPECTRUM_MENU_WAVELENGTH_XRAY,
00122 ID_POWDERSPECTRUM_MENU_WAVELENGTH_NEUTRON,
00123 ID_POWDERSPECTRUM_MENU_WAVELENGTH_SET,
00124 ID_POWDERSPECTRUM_MENU_WAVELENGTH_SET_AG,
00125 ID_POWDERSPECTRUM_MENU_WAVELENGTH_SET_MO,
00126 ID_POWDERSPECTRUM_MENU_WAVELENGTH_SET_CU,
00127 ID_POWDERSPECTRUM_MENU_WAVELENGTH_SET_FE,
00128 ID_POWDERSPECTRUM_MENU_WAVELENGTH_SET_CR,
00129 ID_POWDERSPECTRUM_MENU_WAVELENGTH_SET_AGA1,
00130 ID_POWDERSPECTRUM_MENU_WAVELENGTH_SET_MOA1,
00131 ID_POWDERSPECTRUM_MENU_WAVELENGTH_SET_CUA1,
00132 ID_POWDERSPECTRUM_MENU_WAVELENGTH_SET_FEA1,
00133 ID_POWDERSPECTRUM_MENU_WAVELENGTH_SET_CRA1,
00134 ID_POWDERSPECTRUM_MENU_ADD_2THETA_EXCLUDE,
00135 ID_POWDERSPECTRUMGRAPH_MENU_UPDATE,
00136 ID_POWDERSPECTRUMBACKGROUND_IMPORT,
00137 ID_POWDERSPECTRUMDIFF_CRYSTAL,
00138 ID_POWDERSPECTRUM_GRAPH_NEW_PATTERN,
00139 ID_GLOBALOPT_MENU_GLOBAlOPT,
00140 ID_GLOBALOPT_MENU_GLOBAlOPT_ADDOBJ,
00141 ID_GLOBALOPT_MENU_GLOBAlOPT_ADDCOSTFUNC,
00142 ID_GLOBALOPT_MENU_GLOBAlOPT_RUN,
00143 ID_GLOBALOPT_MENU_GLOBAlOPT_STOP,
00144 };
00145 #endif
00146
00147 class WXCrystObjBasic: public wxWindow
00148 {
00149 public:
00151 WXCrystObjBasic(wxWindow* parent);
00153 virtual ~WXCrystObjBasic();
00158 virtual void CrystUpdate()=0;
00159 protected:
00161 wxWindow *mWXParent;
00163 bool mIsShown;
00164 };
00165
00167 class WXCrystObjBasicList
00168 {
00169 public:
00171 WXCrystObjBasicList();
00173 ~WXCrystObjBasicList();
00175 unsigned int GetNb()const;
00178 void Add(WXCrystObjBasic *);
00180 void Remove(const WXCrystObjBasic *);
00182 WXCrystObjBasic* Get(const unsigned int i);
00184 bool Show(bool);
00186 void CrystUpdate();
00187 private:
00189 unsigned int mNbWXCrystObj;
00191 unsigned int mMaxNbWXCrystObj;
00193 WXCrystObjBasic** mpWXCrystObj;
00194 };
00195
00196 class WXFieldName;
00197
00210 class WXCrystObj: public WXCrystObjBasic
00211 {
00212 public:
00214 WXCrystObj(wxWindow* parent,int orient=wxHORIZONTAL,bool showName=true);
00215 virtual ~WXCrystObj();
00217 bool Layout();
00221 void OnToggleCollapse(wxCommandEvent & WXUNUSED(event));
00225 virtual bool OnChangeName(const int id)=0;
00226 virtual void CrystUpdate();
00227 protected:
00229 wxBoxSizer *mpTopSizer;
00231 wxBoxSizer *mpSizer;
00233 WXFieldName *mpWXTitle;
00235 bool mIsExpanded;
00237 WXCrystObjBasicList mList;
00239 wxButton * mpCollapseButton;
00240 DECLARE_EVENT_TABLE()
00241 };
00242
00253 class WXField: public WXCrystObjBasic
00254 {
00255 public:
00259 WXField(wxWindow *parent,const string& label,const int field_id);
00261 bool Layout();
00263 void SetLabel(const string&);
00266 virtual void Revert()=0;
00269 virtual bool SetForegroundColour(const wxColour& colour);
00270 protected:
00272 wxBoxSizer *mpSizer;
00274 wxStaticText *mpLabel;
00276 const int mId;
00277 };
00278
00283 class WXFieldName:public WXField
00284 {
00285 public:
00286 WXFieldName(wxWindow *parent,const string& label, WXCrystObj* owner,const int field_id,
00287 const int hsize=50, bool isEditable=true);
00290 void OnUpdateUI(wxUpdateUIEvent & WXUNUSED(event));
00295 void OnEnter(wxCommandEvent & event);
00297 void SetValue(const string&);
00299 const string GetValue() const;
00302 virtual void CrystUpdate();
00303 void Revert();
00304 protected:
00306 WXCrystObj* mpWXObj;
00308 wxString mValue;
00310 wxTextCtrl *mpField;
00313 wxString mValueOld;
00314 DECLARE_EVENT_TABLE()
00315 };
00316
00320 class WXFieldParBase:public WXField
00321 {
00322 public:
00324 WXFieldParBase(wxWindow *parent,const string& label, const int field_id,
00325 const int hsize=50);
00328 void OnUpdateUI(wxUpdateUIEvent & WXUNUSED(event));
00333 void OnEnter(wxCommandEvent & WXUNUSED(event));
00335 virtual void CrystUpdate()=0;
00337 virtual void Revert()=0;
00338 protected:
00340 virtual void ReadNewValue()=0;
00342 virtual void ApplyNewValue()=0;
00344 wxTextCtrl *mpField;
00345 DECLARE_EVENT_TABLE()
00346 };
00347
00350 template<class T>class WXFieldPar:public WXFieldParBase
00351 {
00352 public:
00354 WXFieldPar(wxWindow *parent,const string& label, const int field_id,
00355 T *par,const int hsize=50);
00357 virtual void CrystUpdate();
00359 virtual void Revert();
00360 protected:
00362 virtual void ReadNewValue();
00364 virtual void ApplyNewValue();
00366 T* mpValue;
00368 T mValueOld;
00369 };
00370
00374 class WXFieldChoice:public WXField
00375 {
00376 public:
00378 WXFieldChoice(wxWindow *parent,const int field_id,
00379 const string &name,const int hsize=80);
00380 bool Layout();
00383 void OnUpdateUI(wxUpdateUIEvent & WXUNUSED(event));
00385 virtual void CrystUpdate();
00387 void Revert();
00389 void SetValue(const string&);
00390 protected:
00392 wxButton *mpButton;
00393 };
00394
00396 class WXCrystMenuBar: public WXCrystObjBasic
00397 {
00398 public:
00400 WXCrystMenuBar(wxWindow *parent, WXCrystObj* owner);
00402 bool Layout();
00404 void AddMenu(const string &name,const int menuId, const string& help="");
00406 void AddMenuItem(const int menuId, int id, const string& item, const string& help="",
00407 const bool checkable= false);
00409 void AddMenuItem(const int menuId,int id, const wxString& item,
00410 wxMenu *subMenu, const wxString& helpString = "");
00411 virtual void CrystUpdate();
00413 void OnPopupMenu(wxCommandEvent & event);
00414 protected:
00416 wxBoxSizer* mpSizer;
00418 CrystVector_int mMenuId;
00420 unsigned int mNbMenu;
00422 unsigned int mMaxNbMenu;
00424 wxMenu **mpMenu;
00426 wxButton **mpButton;
00427 DECLARE_EVENT_TABLE()
00428 };
00429
00430 }
00431
00432 #endif