Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   Related Pages  

wxCryst.h

00001 /*
00002 * LibCryst++ : a Crystallographic computing library in C++
00003 *
00004 *  (c) 2000 Vincent FAVRE-NICOLIN
00005 *           Laboratoire de Cristallographie
00006 *           24, quai Ernest-Ansermet, CH-1211 Geneva 4, Switzerland
00007 *  Contact: Vincent.Favre-Nicolin@cryst.unige.ch
00008 *           Radovan.Cerny@cryst.unige.ch
00009 *
00010 */
00011 /*
00012 *  header file for the general wxCryst functions.
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,//for FOX
00038    ID_WXOBJ_COLLAPSE,
00039    ID_WXOBJ_NAME,
00040    ID_WXFIELD,
00041    ID_WXFIELD_REFPAR,//id of all refpar window
00042    ID_WXFIELD_REFPAR_FIXBUTTON,
00043    ID_REFPAR_POPUP_SET_LIMITS,
00044    ID_REFPAR_POPUP_REMOVE_LIMITS,
00045    ID_WXFIELD_OPTION,//Actually not the id of a window
00046    ID_WXFIELD_COSTFUNC,//Actually not the id of a window
00047    ID_CRYST_MENU1,
00048    ID_CRYST_MENU2,   // This is done to 'reserve' some id for wxCrystMenu
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 } //namespace
00431 
00432 #endif //_VFN_WX_CRYST_H_

Generated on Wed Nov 14 19:48:36 2001 for ObjCryst++ by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001