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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: viewer_base.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 18:42:52  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.17
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: viewer_base.hpp,v 1000.0 2003/10/29 18:42:52 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. *      base functionality for non-GUI part of viewers
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef CN3D_VIEWER_BASE__HPP
  42. #define CN3D_VIEWER_BASE__HPP
  43. #include <corelib/ncbistl.hpp>
  44. #include <list>
  45. #include <string>
  46. BEGIN_SCOPE(Cn3D)
  47. class ViewerWindowBase;
  48. class Sequence;
  49. class Messenger;
  50. class SequenceDisplay;
  51. class BlockMultipleAlignment;
  52. class Vector;
  53. class AlignmentManager;
  54. class Molecule;
  55. class MoleculeIdentifier;
  56. class ViewerBase
  57. {
  58.     friend class ViewerWindowBase;
  59.     friend class AlignmentManager;
  60.     friend class SequenceDisplay;
  61. public:
  62.     // to update/remove the GUI window
  63.     void Refresh(void);
  64.     void DestroyGUI(void);
  65.     void GUIDestroyed(void) { *viewerWindow = NULL; }
  66.     // set customized window title
  67.     void SetWindowTitle(void) const;
  68.     // ask whether the editor is enabled for this viewer
  69.     bool EditorIsOn(void) const;
  70.     void RemoveBlockBoundaryRows(void);
  71.     // tell viewer to save its data
  72.     virtual void SaveDialog(bool prompt);
  73.     // to be notified of font change
  74.     void NewFont(void);
  75.     // make residue visible, if present
  76.     void MakeResidueVisible(const Molecule *molecule, int seqIndex);
  77.     void MakeSequenceVisible(const MoleculeIdentifier *identifier);
  78.     void CalculateSelfHitScores(const BlockMultipleAlignment *multiple);
  79.     typedef std::list < BlockMultipleAlignment * > AlignmentList;
  80. protected:
  81.     // can't instantiate this base class
  82.     ViewerBase(ViewerWindowBase* *window, AlignmentManager *alnMgr);
  83.     virtual ~ViewerBase(void);
  84.     AlignmentManager *alignmentManager;
  85.     // handle to the associated window
  86.     ViewerWindowBase* *const viewerWindow;
  87. private:
  88.     // alignment and display stack data
  89.     AlignmentList currentAlignments;
  90.     typedef std::list < AlignmentList > AlignmentStack;
  91.     AlignmentStack alignmentStack;
  92.     SequenceDisplay *currentDisplay;
  93.     typedef std::list < SequenceDisplay * > DisplayStack;
  94.     DisplayStack displayStack;
  95.     // limits the size of the stack (set to -1 for unlimited)
  96.     static const int MAX_UNDO_STACK_SIZE;
  97.     int nRedosStored;
  98.     bool stacksEnabled;
  99.     void CopyDataFromStack(void);
  100.     void ClearAllData(void);
  101.     void SetUndoRedoMenuStates(void);
  102. public:
  103.     // initialization
  104.     void InitData(const AlignmentList *alignments, SequenceDisplay *display);
  105.     // to store alignment+display data for undo/redo during editing
  106.     void EnableStacks(void);
  107.     void Save(void);
  108.     void Undo(void);
  109.     void Redo(void);
  110.     // revert back to bottom of stack, or keep current
  111.     void Revert(void);
  112.     void KeepCurrent(void);
  113. protected:
  114.     const AlignmentList& GetCurrentAlignments(void) const { return currentAlignments; }
  115.     AlignmentList& GetCurrentAlignments(void) { return currentAlignments; }
  116.     SequenceDisplay * GetCurrentDisplay(void) { return currentDisplay; }
  117. };
  118. END_SCOPE(Cn3D)
  119. #endif // CN3D_VIEWER_BASE__HPP
  120. /*
  121. * ---------------------------------------------------------------------------
  122. * $Log: viewer_base.hpp,v $
  123. * Revision 1000.0  2003/10/29 18:42:52  gouriano
  124. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.17
  125. *
  126. * Revision 1.17  2003/10/20 13:17:15  thiessen
  127. * add float geometry violations sorting
  128. *
  129. * Revision 1.16  2003/02/03 19:20:08  thiessen
  130. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  131. *
  132. * Revision 1.15  2002/10/13 22:58:08  thiessen
  133. * add redo ability to editor
  134. *
  135. * Revision 1.14  2002/10/07 13:29:32  thiessen
  136. * add double-click -> show row to taxonomy tree
  137. *
  138. * Revision 1.13  2002/09/09 13:38:23  thiessen
  139. * separate save and save-as
  140. *
  141. * Revision 1.12  2002/06/13 14:54:07  thiessen
  142. * add sort by self-hit
  143. *
  144. * Revision 1.11  2002/06/05 14:28:42  thiessen
  145. * reorganize handling of window titles
  146. *
  147. * Revision 1.10  2002/02/05 18:53:26  thiessen
  148. * scroll to residue in sequence windows when selected in structure window
  149. *
  150. * Revision 1.9  2001/12/06 23:13:47  thiessen
  151. * finish import/align new sequences into single-structure data; many small tweaks
  152. *
  153. * Revision 1.8  2001/10/01 16:03:59  thiessen
  154. * make CDD annotation window non-modal; add SetWindowTitle to viewers
  155. *
  156. * Revision 1.7  2001/08/14 17:17:48  thiessen
  157. * add user font selection, store in registry
  158. *
  159. * Revision 1.6  2001/06/14 18:59:27  thiessen
  160. * left out 'class' in 'friend ...' statments
  161. *
  162. * Revision 1.5  2001/04/05 22:54:51  thiessen
  163. * change bg color handling ; show geometry violations
  164. *
  165. * Revision 1.4  2001/03/22 00:32:36  thiessen
  166. * initial threading working (PSSM only); free color storage in undo stack
  167. *
  168. * Revision 1.3  2001/03/13 01:24:16  thiessen
  169. * working undo system for >1 alignment (e.g., update window)
  170. *
  171. * Revision 1.2  2001/03/06 20:20:44  thiessen
  172. * progress towards >1 alignment in a SequenceDisplay ; misc minor fixes
  173. *
  174. * Revision 1.1  2001/03/01 20:15:30  thiessen
  175. * major rearrangement of sequence viewer code into base and derived classes
  176. *
  177. */