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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: cn3d_tools.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 18:28:25  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.35
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: cn3d_tools.hpp,v 1000.3 2004/06/01 18:28: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. *      Miscellaneous utility functions
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef CN3D_TOOLS__HPP
  42. #define CN3D_TOOLS__HPP
  43. #include <corelib/ncbistl.hpp>
  44. #include <corelib/ncbidiag.hpp>
  45. #include <objects/cn3d/Cn3d_style_settings_set.hpp>
  46. #include <objects/seq/Bioseq.hpp>
  47. #include <string>
  48. #include <vector>
  49. #include <map>
  50. class wxFrame;
  51. /////
  52. ///// Check platform and wx option compatibility
  53. /////
  54. #include <wx/platform.h>
  55. #include <wx/version.h>
  56. #if !wxCHECK_VERSION(2,3,2)
  57. #error Cn3D requires wxWindows version 2.3.2 or higher!
  58. #endif
  59. #if !defined(__WXMSW__) && !defined(__WXGTK__) && !defined(__WXMAC__)
  60. #error Cn3D will only work with wxMSW, wxGTK, or wxMac!
  61. #endif
  62. #if defined(__WXMAC__) && !defined(__DARWIN__)
  63. #error Cn3D compilation is no longer supported for Mac OS 8/9 (classic or Carbon)
  64. #endif
  65. #if !wxUSE_GLCANVAS
  66. #error Please set wxUSE_GLCANVAS to 1 in <wx/setup.h>
  67. #endif
  68. #if !wxUSE_STREAMS || !wxUSE_ZIPSTREAM || !wxUSE_ZLIB
  69. #error Must turn on wxUSE_STREAMS && wxUSE_ZIPSTREAM && wxUSE_ZLIB for the Cn3D help system!
  70. #endif
  71. BEGIN_SCOPE(Cn3D)
  72. // program version number string
  73. #define CN3D_VERSION_STRING "4.2"
  74. // diagnostic streams
  75. #define TRACEMSG(stream) ERR_POST(ncbi::Trace << stream)
  76. #define INFOMSG(stream) ERR_POST(ncbi::Info << stream)
  77. #define WARNINGMSG(stream) ERR_POST(ncbi::Warning << stream)
  78. #define ERRORMSG(stream) ERR_POST(ncbi::Error << stream)
  79. #define FATALMSG(stream) ERR_POST(ncbi::Fatal << stream)
  80. // turn on/off dialog box for errors (on by default)
  81. void SetDialogSevereErrors(bool status);
  82. // strings for various directories - dirs will include trailing path separator character
  83. extern const std::string& GetWorkingDir(void);  // current working directory
  84. extern const std::string& GetUserDir(void);     // directory of latest user-selected file
  85. extern const std::string& GetProgramDir(void);  // directory where Cn3D executable lives
  86. extern const std::string& GetDataDir(void);     // 'data' directory with external data files
  87. extern const std::string& GetWorkingFilename(void); // name of current working file
  88. extern const std::string& GetPrefsDir(void);    // application preferences directory
  89. // get working document title; bring the log window forward
  90. extern const std::string& GetWorkingTitle(void);
  91. extern void RaiseLogWindow(void);
  92. // launch web browser on given URL
  93. extern void LaunchWebPage(const char *url);
  94. // retrieve a sequence via network; uid can be gi or accession
  95. ncbi::CRef < ncbi::objects::CBioseq > FetchSequenceViaHTTP(const std::string& id);
  96. // top-level window (the main structure window)
  97. extern wxFrame * GlobalTopWindow(void);
  98. // return BLOSUM62 score for two residues
  99. extern int GetBLOSUM62Score(char a, char b);
  100. // global program registry manipulation
  101. extern void LoadRegistry(void);
  102. extern void SaveRegistry(void);
  103. extern bool RegistryIsValidInteger(const std::string& section, const std::string& name);
  104. extern bool RegistryIsValidDouble(const std::string& section, const std::string& name);
  105. extern bool RegistryIsValidBoolean(const std::string& section, const std::string& name);
  106. extern bool RegistryIsValidString(const std::string& section, const std::string& name);
  107. extern bool RegistryGetInteger(const std::string& section, const std::string& name, int *value);
  108. extern bool RegistryGetDouble(const std::string& section, const std::string& name, double *value);
  109. extern bool RegistryGetBoolean(const std::string& section, const std::string& name, bool *value);
  110. extern bool RegistryGetString(const std::string& section, const std::string& name, std::string *value);
  111. extern bool RegistrySetInteger(const std::string& section, const std::string& name, int value);
  112. extern bool RegistrySetDouble(const std::string& section, const std::string& name, double value);
  113. extern bool RegistrySetBoolean(const std::string& section, const std::string& name, bool value,
  114.     bool useYesOrNo = false);
  115. extern bool RegistrySetString(const std::string& section, const std::string& name,
  116.     const std::string& value);
  117. // registry section/entry names
  118. static const std::string
  119.     // configuration
  120.     REG_CONFIG_SECTION = "Cn3D-4-Config",
  121.     REG_FAVORITES_NAME = "Favorites",
  122.         NO_FAVORITES_FILE = "(none)",   // to signal that no Favorites file is defined
  123.     REG_SHOW_LOG_ON_START = "ShowLogOnStartup",
  124.     // animation
  125.     REG_ANIMATION_SECTION = "Cn3D-4-Animation",
  126.     REG_SPIN_DELAY = "SpinDelay",
  127.     REG_SPIN_INCREMENT = "SpinIncrement",
  128.     REG_FRAME_DELAY = "FrameDelay",
  129.     // quality settings
  130.     REG_QUALITY_SECTION = "Cn3D-4-Quality",
  131.     REG_QUALITY_ATOM_SLICES = "AtomSlices",
  132.     REG_QUALITY_ATOM_STACKS = "AtomStacks",
  133.     REG_QUALITY_BOND_SIDES = "BondSides",
  134.     REG_QUALITY_WORM_SIDES = "WormSides",
  135.     REG_QUALITY_WORM_SEGMENTS = "WormSegments",
  136.     REG_QUALITY_HELIX_SIDES = "HelixSides",
  137.     REG_HIGHLIGHTS_ON = "HighlightsOn",
  138.     REG_PROJECTION_TYPE = "ProjectionType",
  139.     // font settings
  140.     REG_OPENGL_FONT_SECTION = "Cn3D-4-Font-OpenGL",
  141.     REG_SEQUENCE_FONT_SECTION = "Cn3D-4-Font-Sequence",
  142.     REG_FONT_NATIVE_FONT_INFO = "NativeFontInfo",
  143.     // cache settings
  144.     REG_CACHE_SECTION = "Cn3D-4-Cache",
  145.     REG_CACHE_ENABLED = "CacheEnabled",
  146.     REG_CACHE_FOLDER = "CacheFolder",
  147.     REG_CACHE_MAX_SIZE = "CacheSizeMax",
  148.     // advanced options
  149.     REG_ADVANCED_SECTION = "Cn3D-4-Advanced",
  150.     REG_CDD_ANNOT_READONLY = "CDDAnnotationsReadOnly",
  151. #ifdef __WXGTK__
  152.     REG_BROWSER_LAUNCH = "BrowserLaunchCommand",
  153. #endif
  154.     REG_MAX_N_STRUCTS = "MaxNumStructures",
  155.     REG_FOOTPRINT_RES = "FootprintExcessResidues",
  156.     REG_STEREO_SEPARATION = "StereoSeparationDegrees",
  157.     REG_PROXIMAL_STEREO = "ProxmimalStereo";
  158. // utility function to remove some elements from a vector
  159. template < class T >
  160. void VectorRemoveElements(std::vector < T >& v, const std::vector < bool >& remove, int nToRemove)
  161. {
  162.     if (v.size() != remove.size()) {
  163. #ifndef _DEBUG
  164.         // MSVC gets internal compiler error here on debug builds... ugh!
  165.         ERR_POST(ncbi::Error << "VectorRemoveElements() - size mismatch");
  166. #endif
  167.         return;
  168.     }
  169.     std::vector < T > copy(v.size() - nToRemove);
  170.     int i, nRemoved = 0;
  171.     for (i=0; i<v.size(); ++i) {
  172.         if (remove[i])
  173.             ++nRemoved;
  174.         else
  175.             copy[i - nRemoved] = v[i];
  176.     }
  177.     if (nRemoved != nToRemove) {
  178. #ifndef _DEBUG
  179.         ERR_POST(ncbi::Error << "VectorRemoveElements() - bad nToRemove");
  180. #endif
  181.         return;
  182.     }
  183.     v = copy;
  184. }
  185. // utility function to delete all elements from an STL container
  186. #define DELETE_ALL_AND_CLEAR(container, ContainerType) 
  187. do { 
  188.     ContainerType::iterator i, ie = (container).end(); 
  189.     for (i=(container).begin(); i!=ie; ++i) 
  190.         delete *i; 
  191.     (container).clear(); 
  192. } while (0)
  193. template < class T >
  194. class TypeStringAssociator
  195. {
  196. private:
  197.     typedef typename std::map < T , std::string > T2String;
  198.     T2String type2string;
  199.     typedef typename std::map < std::string , T > String2T;
  200.     String2T string2type;
  201. public:
  202.     void Associate(const T& type, const std::string& name)
  203.     {
  204.         type2string[type] = name;
  205.         string2type[name] = type;
  206.     }
  207.     const T * Find(const std::string& name) const
  208.     {
  209.         typename TypeStringAssociator::String2T::const_iterator i = string2type.find(name);
  210.         return ((i != string2type.end()) ? &(i->second) : NULL);
  211.     }
  212.     bool Get(const std::string& name, T *type) const
  213.     {
  214.         const T *found = Find(name);
  215.         if (found) *type = *found;
  216.         return (found != NULL);
  217.     }
  218.     const std::string * Find(const T& type) const
  219.     {
  220.         typename TypeStringAssociator::T2String::const_iterator i = type2string.find(type);
  221.         return ((i != type2string.end()) ? &(i->second) : NULL);
  222.     }
  223.     bool Get(const T& type, std::string *name) const
  224.     {
  225.         const std::string *found = Find(type);
  226.         if (found) *name = *found;
  227.         return (found != NULL);
  228.     }
  229.     int Size(void) const { return type2string.size(); }
  230. };
  231. END_SCOPE(Cn3D)
  232. #endif // CN3D_TOOLS__HPP
  233. /*
  234. * ---------------------------------------------------------------------------
  235. * $Log: cn3d_tools.hpp,v $
  236. * Revision 1000.3  2004/06/01 18:28:25  gouriano
  237. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.35
  238. *
  239. * Revision 1.35  2004/05/28 21:01:45  thiessen
  240. * namespace/typename fixes for GCC 3.4
  241. *
  242. * Revision 1.34  2004/03/15 17:17:56  thiessen
  243. * prefer prefix vs. postfix ++/-- operators
  244. *
  245. * Revision 1.33  2004/03/10 23:15:51  thiessen
  246. * add ability to turn off/on error dialogs; group block aligner errors in message log
  247. *
  248. * Revision 1.32  2004/02/19 17:04:52  thiessen
  249. * remove cn3d/ from include paths; add pragma to disable annoying msvc warning
  250. *
  251. * Revision 1.31  2004/01/17 00:17:30  thiessen
  252. * add Biostruc and network structure load
  253. *
  254. * Revision 1.30  2003/12/03 15:07:10  thiessen
  255. * add more sophisticated animation controls
  256. *
  257. * Revision 1.29  2003/11/15 16:08:35  thiessen
  258. * add stereo
  259. *
  260. * Revision 1.28  2003/03/13 16:57:14  thiessen
  261. * fix favorites load/save problem
  262. *
  263. * Revision 1.27  2003/03/13 14:26:18  thiessen
  264. * add file_messaging module; split cn3d_main_wxwin into cn3d_app, cn3d_glcanvas, structure_window, cn3d_tools
  265. *
  266. * Revision 1.26  2003/02/03 19:20:03  thiessen
  267. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  268. *
  269. * Revision 1.25  2003/01/31 17:18:58  thiessen
  270. * many small additions and changes...
  271. *
  272. * Revision 1.24  2002/12/19 15:56:16  thiessen
  273. * use wxCHECK_VERSION
  274. *
  275. * Revision 1.23  2002/10/18 17:15:33  thiessen
  276. * use wxNativeEncodingInfo to store fonts in registry
  277. *
  278. * Revision 1.22  2002/10/13 22:58:08  thiessen
  279. * add redo ability to editor
  280. *
  281. * Revision 1.21  2002/10/11 17:21:39  thiessen
  282. * initial Mac OSX build
  283. *
  284. * Revision 1.20  2002/09/13 14:21:45  thiessen
  285. * finish hooking up browser launch on unix
  286. *
  287. * Revision 1.19  2002/08/28 20:30:33  thiessen
  288. * fix proximity sort bug
  289. *
  290. * Revision 1.18  2002/07/23 15:46:49  thiessen
  291. * print out more BLAST info; tweak save file name
  292. *
  293. * Revision 1.17  2002/06/05 14:28:39  thiessen
  294. * reorganize handling of window titles
  295. *
  296. * Revision 1.16  2002/04/09 23:59:10  thiessen
  297. * add cdd annotations read-only option
  298. *
  299. * Revision 1.15  2002/03/04 15:52:13  thiessen
  300. * hide sequence windows instead of destroying ; add perspective/orthographic projection choice
  301. *
  302. * Revision 1.14  2001/12/20 21:41:46  thiessen
  303. * create/use user preferences directory
  304. *
  305. * Revision 1.13  2001/11/27 16:26:07  thiessen
  306. * major update to data management system
  307. *
  308. * Revision 1.12  2001/10/30 02:54:12  thiessen
  309. * add Biostruc cache
  310. *
  311. * Revision 1.11  2001/09/06 21:38:33  thiessen
  312. * tweak message log / diagnostic system
  313. *
  314. * Revision 1.10  2001/08/31 22:24:14  thiessen
  315. * add timer for animation
  316. *
  317. * Revision 1.9  2001/08/24 18:53:13  thiessen
  318. * add filename to sequence viewer window titles
  319. *
  320. * Revision 1.8  2001/08/16 19:21:16  thiessen
  321. * add face name info to fonts
  322. *
  323. * Revision 1.7  2001/08/14 17:17:48  thiessen
  324. * add user font selection, store in registry
  325. *
  326. * Revision 1.6  2001/08/13 22:30:51  thiessen
  327. * add structure window mouse drag/zoom; add highlight option to render settings
  328. *
  329. * Revision 1.5  2001/08/06 20:22:48  thiessen
  330. * add preferences dialog ; make sure OnCloseWindow get wxCloseEvent
  331. *
  332. * Revision 1.4  2001/08/03 13:41:24  thiessen
  333. * add registry and style favorites
  334. *
  335. * Revision 1.3  2001/07/19 19:12:46  thiessen
  336. * working CDD alignment annotator ; misc tweaks
  337. *
  338. * Revision 1.2  2001/05/31 18:46:26  thiessen
  339. * add preliminary style dialog; remove LIST_TYPE; add thread single and delete all; misc tweaks
  340. *
  341. * Revision 1.1  2001/05/15 14:57:48  thiessen
  342. * add cn3d_tools; bring up log window when threading starts
  343. *
  344. */