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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: messenger.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:32:32  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.27
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: messenger.hpp,v 1000.1 2004/04/12 17:32:32 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. *      Classes to handle messaging and communication between sequence
  38. *      and structure windows
  39. *
  40. * ===========================================================================
  41. */
  42. #ifndef CN3D_MESSENGER__HPP
  43. #define CN3D_MESSENGER__HPP
  44. #include <corelib/ncbistl.hpp>
  45. #include <objects/mmdb1/Biostruc_annot_set.hpp>
  46. #include <string>
  47. #include <list>
  48. #include <map>
  49. #include <vector>
  50. BEGIN_SCOPE(Cn3D)
  51. // for now, there is only a single global messenger, which for convenience
  52. // can be accessed anywhere via this function
  53. class Messenger;
  54. Messenger * GlobalMessenger(void);
  55. class ViewerBase;
  56. class BlockMultipleAlignment;
  57. class Sequence;
  58. class StructureWindow;
  59. class StructureObject;
  60. class Molecule;
  61. class MoleculeIdentifier;
  62. class StructureSet;
  63. class Messenger
  64. {
  65. public:
  66.     // redraw messages - "Post..." means redraw is *not* immediate, but
  67.     // is cached and actually occurs during system idle time. Thus, during
  68.     // processing of an event, any number of PostRedraws can be called, and
  69.     // only one redraw as appropriate will be done at idle time.
  70.     void PostRedrawSequenceViewer(ViewerBase *viewer);
  71.     void PostRedrawAllSequenceViewers(void);
  72.     void PostRedrawMolecule(const Molecule *molecule);
  73.     void PostRedrawAllStructures(void);
  74.     // un-Post a redraw message - use (carefully!) to avoid redundant redraws
  75.     // (flicker) if some other action is known to cause immediate redraw.
  76.     void UnPostRedrawAllSequenceViewers(void);
  77.     void UnPostRedrawSequenceViewer(ViewerBase *viewer);
  78.     // un-Post structure redraws - again, use carefully to avoid redundant redraws
  79.     // when some non-Messenger method causes structure redraws to occur
  80.     void UnPostStructureRedraws(void);
  81.     // should be called only by Cn3DApp at idle time; processes any redraws
  82.     // that have been posted by prior event(s)
  83.     void ProcessRedraws(void);
  84.     // called if the application is about to exit - tell sequence window(s) to save
  85.     void SequenceWindowsSave(bool prompt);
  86.     // called to notify all sequence viewers that their font should be changed
  87.     void NewSequenceViewerFont(void);
  88.     // these next few are related to highlighting:
  89.     // typedef for highlight storage
  90.     typedef std::map < const MoleculeIdentifier *, std::vector < bool > > MoleculeHighlightMap;
  91.     // check for highlight
  92.     bool IsHighlighted(const Molecule *molecule, int residueID) const;
  93.     bool IsHighlighted(const Sequence *sequence, int seqIndex) const;
  94.     bool IsHighlightedAnywhere(const MoleculeIdentifier *identifier) const;
  95.     // clear all highlight stores - and optionally post redraws. Returns 'true'
  96.     // if there were actually any highlights to remove
  97.     bool RemoveAllHighlights(bool postRedraws);
  98.     // add/remove highlights based on sequence
  99.     void AddHighlights(const Sequence *sequence, int seqIndexFrom, int seqIndexTo);
  100.     void RemoveHighlights(const Sequence *sequence, int seqIndexFrom, int seqIndexTo);
  101.     // toggle highlights on each individual residue in given region
  102.     void ToggleHighlights(const Sequence *sequence, int seqIndexFrom, int seqIndexTo);
  103.     // highlight any 'ole residue, regardless of molecule type
  104.     void ToggleHighlight(const Molecule *molecule, int residueID, bool scrollViewersTo = false);
  105.     // set a bunch of highlights all at once - copies highlight list from given set
  106.     void SetHighlights(const MoleculeHighlightMap& newHighlights);
  107.     // highlights a sequence and moves viewer to that row
  108.     void HighlightAndShowSequence(const Sequence *sequence);
  109.     // temporarily turns off highlighting (suspend==true) - but doesn't erase highlight stores,
  110.     // so when called with suspend==false, highlights will come back on
  111.     void SuspendHighlighting(bool suspend);
  112. private:
  113.     // lists of registered viewers
  114.     typedef std::list < ViewerBase * > SequenceViewerList;
  115.     SequenceViewerList sequenceViewers;
  116.     // currently can only have one structure viewer
  117.     StructureWindow * structureWindow;
  118.     // to keep track of messages posted
  119.     typedef std::map < const Molecule *, bool > RedrawMoleculeList; // use map to preclude redundant redraws
  120.     RedrawMoleculeList redrawMolecules;
  121.     typedef std::map < ViewerBase *, bool > RedrawSequenceViewerList;
  122.     RedrawSequenceViewerList redrawSequenceViewers;
  123.     bool redrawAllStructures;
  124.     bool redrawAllSequenceViewers;
  125.     bool highlightingSuspended;
  126.     // To store lists of highlighted entities
  127.     MoleculeHighlightMap highlights;
  128.     bool IsHighlighted(const MoleculeIdentifier *identifier, int index) const;
  129.     void ToggleHighlights(const MoleculeIdentifier *identifier, int indexFrom, int indexTo,
  130.         const StructureSet *set);
  131.     void RedrawMoleculesWithIdentifier(const MoleculeIdentifier *identifier, const StructureSet *set);
  132. public:
  133.     Messenger(void) : redrawAllStructures(false), redrawAllSequenceViewers(false),
  134.         highlightingSuspended(false) { }
  135.     bool IsAnythingHighlighted(void) const { return (highlights.size() > 0); }
  136.     // to get lists of highlighted molecules with structure only (for user annotations)
  137.     bool GetHighlightedResiduesWithStructure(MoleculeHighlightMap *residues) const;
  138.     // to get lists of highlighted residues that come from a single structure object
  139.     // (for cdd annotations) - returns NULL if highlights aren't from one structure
  140.     ncbi::objects::CBiostruc_annot_set * CreateBiostrucAnnotSetForHighlightsOnSingleObject(void) const;
  141.     // formats list of highlighted residues for selection messaging; returns true if
  142.     // there are any highlights
  143.     bool GetHighlightsForSelectionMessage(std::string *data) const;
  144.     // to register sequence and structure viewers for redraw postings
  145.     void AddSequenceViewer(ViewerBase *sequenceViewer)
  146.         { sequenceViewers.push_back(sequenceViewer); }
  147.     void AddStructureWindow(StructureWindow *window)
  148.         { structureWindow = window; }
  149.     // to unregister viewers
  150.     void RemoveStructureWindow(const StructureWindow *structureWindow);
  151.     void RemoveSequenceViewer(const ViewerBase *sequenceViewer);
  152.     // set window titles
  153.     void SetAllWindowTitles(void) const;
  154.     // for sending messages through file messenger
  155.     bool IsFileMessengerActive(void) const;
  156.     void FileMessengerSend(const std::string& toApp, const std::string& command, const std::string& data);
  157. };
  158. END_SCOPE(Cn3D)
  159. #endif // CN3D_MESSENGER__HPP
  160. /*
  161. * ---------------------------------------------------------------------------
  162. * $Log: messenger.hpp,v $
  163. * Revision 1000.1  2004/04/12 17:32:32  gouriano
  164. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.27
  165. *
  166. * Revision 1.27  2004/01/08 15:31:03  thiessen
  167. * remove hard-coded CDTree references in messaging; add Cn3DTerminated message upon exit
  168. *
  169. * Revision 1.26  2003/07/10 18:47:29  thiessen
  170. * add CDTree->Select command
  171. *
  172. * Revision 1.25  2003/03/13 14:26:18  thiessen
  173. * add file_messaging module; split cn3d_main_wxwin into cn3d_app, cn3d_glcanvas, structure_window, cn3d_tools
  174. *
  175. * Revision 1.24  2003/02/03 19:20:04  thiessen
  176. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  177. *
  178. * Revision 1.23  2002/10/07 13:29:31  thiessen
  179. * add double-click -> show row to taxonomy tree
  180. *
  181. * Revision 1.22  2002/09/09 13:38:23  thiessen
  182. * separate save and save-as
  183. *
  184. * Revision 1.21  2002/09/05 18:38:57  thiessen
  185. * add sort by highlights
  186. *
  187. * Revision 1.20  2002/06/05 14:28:39  thiessen
  188. * reorganize handling of window titles
  189. *
  190. * Revision 1.19  2002/02/05 18:53:25  thiessen
  191. * scroll to residue in sequence windows when selected in structure window
  192. *
  193. * Revision 1.18  2001/10/01 16:03:58  thiessen
  194. * make CDD annotation window non-modal; add SetWindowTitle to viewers
  195. *
  196. * Revision 1.17  2001/08/27 00:06:35  thiessen
  197. * add structure evidence to CDD annotation
  198. *
  199. * Revision 1.16  2001/08/14 17:17:48  thiessen
  200. * add user font selection, store in registry
  201. *
  202. * Revision 1.15  2001/07/04 19:38:55  thiessen
  203. * finish user annotation system
  204. *
  205. * Revision 1.14  2001/06/29 18:12:53  thiessen
  206. * initial (incomplete) user annotation system
  207. *
  208. * Revision 1.13  2001/06/21 02:01:07  thiessen
  209. * major update to molecule identification and highlighting ; add toggle highlight (via alt)
  210. *
  211. * Revision 1.12  2001/03/22 00:32:36  thiessen
  212. * initial threading working (PSSM only); free color storage in undo stack
  213. *
  214. * Revision 1.11  2001/03/01 20:15:29  thiessen
  215. * major rearrangement of sequence viewer code into base and derived classes
  216. *
  217. * Revision 1.10  2000/12/15 15:52:08  thiessen
  218. * show/hide system installed
  219. *
  220. * Revision 1.9  2000/11/30 15:49:08  thiessen
  221. * add show/hide rows; unpack sec. struc. and domain features
  222. *
  223. * Revision 1.8  2000/11/02 16:48:22  thiessen
  224. * working editor undo; dynamic slave transforms
  225. *
  226. * Revision 1.7  2000/10/19 12:40:21  thiessen
  227. * avoid multiple sequence redraws with scroll set
  228. *
  229. * Revision 1.6  2000/10/12 02:14:32  thiessen
  230. * working block boundary editing
  231. *
  232. * Revision 1.5  2000/10/04 17:40:45  thiessen
  233. * rearrange STL #includes
  234. *
  235. * Revision 1.4  2000/10/02 23:25:07  thiessen
  236. * working sequence identifier window in sequence viewer
  237. *
  238. * Revision 1.3  2000/09/15 19:24:33  thiessen
  239. * allow repeated structures w/o different local id
  240. *
  241. * Revision 1.2  2000/09/11 22:57:55  thiessen
  242. * working highlighting
  243. *
  244. * Revision 1.1  2000/09/11 01:45:53  thiessen
  245. * working messenger for sequence<->structure window communication
  246. *
  247. */