wx_tools.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:9k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: wx_tools.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 18:43:25  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.14
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: wx_tools.hpp,v 1000.0 2003/10/29 18:43:25 gouriano Exp $
  10. * ===========================================================================
  11. *
  12. *                            PUBLIC DOMAIN NOTICE
  13. *               National Center for Biotechnology Information
  14. *
  15. *  This software/database is a "United States Government Work" under the
  16. *  terms of the United States Copyright Act.  It was written as part of
  17. *  the author's official duties as a United States Government employee and
  18. *  thus cannot be copyrighted.  This software/database is freely available
  19. *  to the public for use. The National Library of Medicine and the U.S.
  20. *  Government have not placed any restriction on its use or reproduction.
  21. *
  22. *  Although all reasonable efforts have been taken to ensure the accuracy
  23. *  and reliability of the software and data, the NLM and the U.S.
  24. *  Government do not and cannot warrant the performance or results that
  25. *  may be obtained by using this software or data. The NLM and the U.S.
  26. *  Government disclaim all warranties, express or implied, including
  27. *  warranties of performance, merchantability or fitness for any particular
  28. *  purpose.
  29. *
  30. *  Please cite the author in any work or product based on this material.
  31. *
  32. * ===========================================================================
  33. *
  34. * Authors:  Paul Thiessen
  35. *
  36. * File Description:
  37. *      custom wx GUI controls
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef CN3D_WX_TOOLS__HPP
  42. #define CN3D_WX_TOOLS__HPP
  43. #include <corelib/ncbistd.hpp>
  44. #ifdef __WXMSW__
  45. #include <windows.h>
  46. #include <wx/msw/winundef.h>
  47. #endif
  48. #include <wx/wx.h>
  49. #include <wx/spinbutt.h>
  50. #include <wx/spinctrl.h>
  51. BEGIN_SCOPE(Cn3D)
  52. // "spin control" height
  53. #if defined(__WXMSW__)
  54. static const int SPIN_CTRL_HEIGHT = 20;
  55. #elif defined(__WXGTK__)
  56. static const int SPIN_CTRL_HEIGHT = 20;
  57. #elif defined(__WXMAC__)
  58. static const int SPIN_CTRL_HEIGHT = 24;
  59. #endif
  60. extern const int WX_TOOLS_NOTIFY_CHANGED;
  61. /////////////////////////////////////////////////////////////////////////////////////
  62. // the class from which my custom integer/float spin ctrls are derived
  63. /////////////////////////////////////////////////////////////////////////////////////
  64. class NotifyingSpinButton;
  65. class CustomSpinCtrl
  66. {
  67.     friend class NotifyingSpinButton;
  68. private:
  69.     virtual void OnSpinButtonUp(wxSpinEvent& event) = 0;
  70.     virtual void OnSpinButtonDown(wxSpinEvent& event) = 0;
  71. };
  72. /////////////////////////////////////////////////////////////////////////////////////
  73. // a spin button that notifies a parent when button pressed
  74. /////////////////////////////////////////////////////////////////////////////////////
  75. class NotifyingSpinButton : public wxSpinButton
  76. {
  77. private:
  78.     CustomSpinCtrl *notify;
  79.     void OnSpinButtonUp(wxSpinEvent& event);
  80.     void OnSpinButtonDown(wxSpinEvent& event);
  81.     DECLARE_EVENT_TABLE()
  82. public:
  83.     NotifyingSpinButton(CustomSpinCtrl* toNotify,
  84.             wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition,
  85.             const wxSize& size = wxDefaultSize, long style = wxSP_HORIZONTAL) :
  86.         wxSpinButton(parent, id, pos, size, style), notify(toNotify) { }
  87. };
  88. /////////////////////////////////////////////////////////////////////////////////////
  89. // a wxTextCtrl that only accepts valid floating point values (turns red otherwise)
  90. /////////////////////////////////////////////////////////////////////////////////////
  91. class IntegerTextCtrl : public wxTextCtrl
  92. {
  93. public:
  94.     IntegerTextCtrl(wxWindow* parent, wxWindowID id, const wxString& value = wxEmptyString,
  95.         const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0,
  96.         const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr);
  97.     void SetAllowedRange(int min, int max, int incr);
  98.     bool IsValidInteger(void) const;
  99. private:
  100.     int minVal, maxVal, incrVal;
  101.     void Validate(wxCommandEvent& event);
  102.     void OnChange(wxCommandEvent& event);
  103.     DECLARE_EVENT_TABLE()
  104. };
  105. /////////////////////////////////////////////////////////////////////////////////
  106. // my own special integer spin control - for more control over text box
  107. /////////////////////////////////////////////////////////////////////////////////
  108. class IntegerSpinCtrl : public CustomSpinCtrl
  109. {
  110. public:
  111.     IntegerSpinCtrl(wxWindow* parent,
  112.         int min, int max, int increment, int initial,
  113.         const wxPoint& textCtrlPos, const wxSize& textCtrlSize, long textCtrlStyle,
  114.         const wxPoint& spinCtrlPos, const wxSize& spinCtrlSize);
  115.     bool GetInteger(int *value) const;
  116.     bool SetInteger(int value);
  117. private:
  118.     IntegerTextCtrl *iTextCtrl;
  119.     NotifyingSpinButton *spinButton;
  120.     int minVal, maxVal, incrVal;
  121.     void OnSpinButtonUp(wxSpinEvent& event);
  122.     void OnSpinButtonDown(wxSpinEvent& event);
  123. public:
  124.     wxTextCtrl * GetTextCtrl(void) const { return iTextCtrl; }
  125.     wxSpinButton * GetSpinButton(void) const { return spinButton; }
  126. };
  127. /////////////////////////////////////////////////////////////////////////////////////
  128. // a wxTextCtrl that only accepts valid floating point values (turns red otherwise)
  129. /////////////////////////////////////////////////////////////////////////////////////
  130. class FloatingPointTextCtrl : public wxTextCtrl
  131. {
  132. public:
  133.     FloatingPointTextCtrl(wxWindow* parent, wxWindowID id, const wxString& value = wxEmptyString,
  134.         const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0,
  135.         const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr);
  136.     void SetAllowedRange(double min, double max);
  137.     bool IsValidDouble(void) const;
  138. private:
  139.     double minVal, maxVal;
  140.     void Validate(wxCommandEvent& event);
  141.     void OnChange(wxCommandEvent& event);
  142.     DECLARE_EVENT_TABLE()
  143. };
  144. /////////////////////////////////////////////////////////////////////////////////
  145. // like wxSpinCtrl, except works on floating point values
  146. /////////////////////////////////////////////////////////////////////////////////
  147. class FloatingPointSpinCtrl : public CustomSpinCtrl
  148. {
  149. public:
  150.     FloatingPointSpinCtrl(wxWindow* parent,
  151.         double min, double max, double increment, double initial,
  152.         const wxPoint& textCtrlPos, const wxSize& textCtrlSize, long textCtrlStyle,
  153.         const wxPoint& spinCtrlPos, const wxSize& spinCtrlSize);
  154.     bool GetDouble(double *value) const;
  155.     bool SetDouble(double value);
  156. private:
  157.     FloatingPointTextCtrl *fpTextCtrl;
  158.     NotifyingSpinButton *spinButton;
  159.     double minVal, maxVal, incrVal;
  160.     void OnSpinButtonUp(wxSpinEvent& event);
  161.     void OnSpinButtonDown(wxSpinEvent& event);
  162. public:
  163.     wxTextCtrl * GetTextCtrl(void) const { return fpTextCtrl; }
  164.     wxSpinButton * GetSpinButton(void) const { return spinButton; }
  165. };
  166. /////////////////////////////////////////////////////////////////////////////////
  167. // dialog that asks user for a floating point value
  168. /////////////////////////////////////////////////////////////////////////////////
  169. class GetFloatingPointDialog : public wxDialog
  170. {
  171. public:
  172.     GetFloatingPointDialog(wxWindow* parent, const wxString& message, const wxString& title,
  173.         double min, double max, double increment, double initial);
  174.     ~GetFloatingPointDialog(void);
  175.     double GetValue(void);
  176. private:
  177.     wxButton *buttonOK;
  178.     FloatingPointSpinCtrl *fpSpinCtrl;
  179.     void OnCloseWindow(wxCloseEvent& event);
  180.     void OnButton(wxCommandEvent& event);
  181.     DECLARE_EVENT_TABLE()
  182. };
  183. END_SCOPE(Cn3D)
  184. #endif // CN3D_WX_TOOLS__HPP
  185. /*
  186. * ---------------------------------------------------------------------------
  187. * $Log: wx_tools.hpp,v $
  188. * Revision 1000.0  2003/10/29 18:43:25  gouriano
  189. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.14
  190. *
  191. * Revision 1.14  2003/02/03 19:20:09  thiessen
  192. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  193. *
  194. * Revision 1.13  2002/10/11 17:21:39  thiessen
  195. * initial Mac OSX build
  196. *
  197. * Revision 1.12  2002/08/15 22:13:19  thiessen
  198. * update for wx2.3.2+ only; add structure pick dialog; fix MultitextDialog bug
  199. *
  200. * Revision 1.11  2002/05/22 17:17:10  thiessen
  201. * progress on BLAST interface ; change custom spin ctrl implementation
  202. *
  203. * Revision 1.10  2002/04/27 16:32:16  thiessen
  204. * fix small leaks/bugs found by BoundsChecker
  205. *
  206. * Revision 1.9  2001/11/27 16:26:11  thiessen
  207. * major update to data management system
  208. *
  209. * Revision 1.8  2001/09/04 20:05:39  thiessen
  210. * tweaks for Mac
  211. *
  212. * Revision 1.7  2001/08/15 20:48:49  juran
  213. * Define SPIN_CTRL_HEIGHT for Mac OS.
  214. *
  215. * Revision 1.6  2001/08/06 20:22:49  thiessen
  216. * add preferences dialog ; make sure OnCloseWindow get wxCloseEvent
  217. *
  218. * Revision 1.5  2001/06/08 14:46:47  thiessen
  219. * fully functional (modal) render settings panel
  220. *
  221. * Revision 1.4  2001/05/23 17:43:29  thiessen
  222. * change dialog implementation to wxDesigner; interface changes
  223. *
  224. * Revision 1.3  2001/05/17 18:34:01  thiessen
  225. * spelling fixes; change dialogs to inherit from wxDialog
  226. *
  227. * Revision 1.2  2001/04/04 00:54:19  thiessen
  228. * forgot to add 'public' inheritor
  229. *
  230. * Revision 1.1  2001/04/04 00:27:22  thiessen
  231. * major update - add merging, threader GUI controls
  232. *
  233. */