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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: sequence_viewer_widget.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 18:38:55  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.20
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: sequence_viewer_widget.hpp,v 1000.0 2003/10/29 18:38:55 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 display sequences and alignments with wxWindows front end
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef WX_SEQUENCE_VIEWER_WIDGET__HPP
  42. #define WX_SEQUENCE_VIEWER_WIDGET__HPP
  43. #ifdef __WXMSW__
  44. #include <windows.h>
  45. #include <wx/msw/winundef.h>
  46. #endif
  47. #include <wx/wx.h>
  48. #include <wx/splitter.h>
  49. class ViewableAlignment;
  50. // This is the GUI class itself. It is a wxSplitterWindow - a viewing area where
  51. // characters are drawn, with right and bottom scrollbars that will automatically
  52. // be added if necessary. Note that it is *not* a complete top-level window!
  53. // Thus, it can be embedded in other windows, and more than one can exist in a window.
  54. // If you want a separate top-level sequence viewing window, then simply put this
  55. // object into a wxFrame (with whatever menus you want to attach to it).
  56. // A note on memory and processor efficiency: the SequenceViewerWidget does *not*
  57. // keep an entire array of characters in memory, nor does it keep a canvas of the
  58. // entire pixel image of the alignment in memory, thus it should be able to display
  59. // large alignments without incurring NxN memory usage. However, this means that
  60. // the display must be created dynamically, by calls to the ViewableAlignment's
  61. // member functions, as appropriate. It only calls these functions on the
  62. // minimum number of positions needed to fill out the display, including on
  63. // scrolling operations: if you scroll the view one column to the right, only
  64. // the rightmost column is redrawn, and thus the number of calls to GetCharacterAt()
  65. // is equal only to the number of rows in the visible region. Hopefully this will
  66. // provide a reasonable compromise between memory and CPU efficiency.
  67. class SequenceViewerWidget_SequenceArea;
  68. class SequenceViewerWidget_TitleArea;
  69. class SequenceViewerWidget : public wxSplitterWindow
  70. {
  71. public:
  72.     // constructor
  73.     SequenceViewerWidget(
  74.         wxWindow* parent,
  75.         wxWindowID id = -1,
  76.         const wxPoint& pos = wxDefaultPosition,
  77.         const wxSize& size = wxDefaultSize
  78.     );
  79.     // destructor
  80.     ~SequenceViewerWidget(void);
  81.     // to provide a ViewableAlignment to show. It is passed as a pointer, but
  82.     // is not "owned" by the SequenceViewerWidget, and will not be deconstructed
  83.     // even if the SequenceViewerWidget is destroyed. Returns false on error.
  84.     bool AttachAlignment(ViewableAlignment *newAlignment, int initX = 0, int initY = 0);
  85.     // sets mouse mode. If eSelect, dragging the mouse with the left button
  86.     // down will cause a rubberband to be drawn around a block of characters,
  87.     // and the ViewableAlignment's SelectedRectangle() callback will be called
  88.     // upon button-up. If eDrag, two individual cells are rubberbanded: one where
  89.     // the mouse was upon button-down, and one where the mouse is while
  90.     // being dragged; DraggedCell() will be called upon button-up. In any case,
  91.     // selection is limited to coordinates given by ViewableAlignment's GetSize(),
  92.     // even if the window is larger.
  93.     enum eMouseMode {
  94.         eSelectRectangle,   // select rectangle of cells
  95.         eSelectColumns,     // select whole columns
  96.         eSelectRows,        // select whole rows
  97.         eDrag,              // move one cell
  98.         eDragHorizontal,    // move one cell only horizontally
  99.         eDragVertical       // move one cell only vertically
  100.     };
  101.     void SetMouseMode(eMouseMode mode);
  102.     eMouseMode GetMouseMode(void) const;
  103.     // sets the background color for the window after refresh
  104.     void SetBackgroundColor(const wxColor& backgroundColor);
  105.     // set the font for the characters; refreshes automatically. This font
  106.     // object will be owned and destroyed by the SequenceViewerWidget
  107.     void SetCharacterFont(wxFont *font);
  108.     // set the rubber band color after refresh
  109.     void SetRubberbandColor(const wxColor& rubberbandColor);
  110.     // scroll sequence area to specific column or row; if either is -1, will
  111.     // not scroll in that direction
  112.     void ScrollTo(int column, int row);
  113.     // get current uppermost row & leftmost column
  114.     void GetScroll(int *vsX, int *vsY) const;
  115.     // make character visible (in sequence area) if it's not already; if either coordinate
  116.     // is < 0, will not scroll in that direction
  117.     void MakeCharacterVisible(int column, int row) const;
  118.     // turn on/off the title area
  119.     void TitleAreaOn(void);
  120.     void TitleAreaOff(void);
  121.     void TitleAreaToggle(void);
  122.     void Refresh(bool eraseBackground = TRUE, const wxRect *rect = NULL);
  123. private:
  124.     SequenceViewerWidget_SequenceArea *sequenceArea;
  125.     SequenceViewerWidget_TitleArea *titleArea;
  126.     void OnDoubleClickSash(int x, int y);
  127. };
  128. #endif // WX_SEQUENCE_VIEWER_WIDGET__HPP
  129. /*
  130. * ---------------------------------------------------------------------------
  131. * $Log: sequence_viewer_widget.hpp,v $
  132. * Revision 1000.0  2003/10/29 18:38:55  gouriano
  133. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.20
  134. *
  135. * Revision 1.20  2003/02/03 19:20:06  thiessen
  136. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  137. *
  138. * Revision 1.19  2002/10/07 13:29:32  thiessen
  139. * add double-click -> show row to taxonomy tree
  140. *
  141. * Revision 1.18  2002/08/15 22:13:16  thiessen
  142. * update for wx2.3.2+ only; add structure pick dialog; fix MultitextDialog bug
  143. *
  144. * Revision 1.17  2002/02/05 18:53:25  thiessen
  145. * scroll to residue in sequence windows when selected in structure window
  146. *
  147. * Revision 1.16  2001/05/22 19:09:10  thiessen
  148. * many minor fixes to compile/run on Solaris/GTK
  149. *
  150. * Revision 1.15  2001/05/03 14:38:32  thiessen
  151. * put ViewableAlignment in its own (non-wx) header
  152. *
  153. * Revision 1.14  2001/03/17 14:06:52  thiessen
  154. * more workarounds for namespace/#define conflicts
  155. *
  156. * Revision 1.13  2000/11/02 16:48:23  thiessen
  157. * working editor undo; dynamic slave transforms
  158. *
  159. * Revision 1.12  2000/10/16 20:02:17  thiessen
  160. * working block creation
  161. *
  162. * Revision 1.11  2000/10/12 16:39:31  thiessen
  163. * fix MouseDown return value
  164. *
  165. * Revision 1.10  2000/10/12 16:22:37  thiessen
  166. * working block split
  167. *
  168. * Revision 1.9  2000/10/05 18:34:35  thiessen
  169. * first working editing operation
  170. *
  171. * Revision 1.8  2000/10/04 17:40:47  thiessen
  172. * rearrange STL #includes
  173. *
  174. * Revision 1.7  2000/10/03 18:59:55  thiessen
  175. * added row/column selection
  176. *
  177. * Revision 1.6  2000/10/02 23:25:08  thiessen
  178. * working sequence identifier window in sequence viewer
  179. *
  180. * Revision 1.5  2000/09/14 14:55:26  thiessen
  181. * add row reordering; misc fixes
  182. *
  183. * Revision 1.4  2000/09/11 22:57:55  thiessen
  184. * working highlighting
  185. *
  186. * Revision 1.3  2000/09/09 14:35:35  thiessen
  187. * fix wxWin problem with large alignments
  188. *
  189. * Revision 1.2  2000/09/07 17:37:42  thiessen
  190. * minor fixes
  191. *
  192. * Revision 1.1  2000/09/03 18:45:57  thiessen
  193. * working generalized sequence viewer
  194. *
  195. * Revision 1.2  2000/08/30 23:45:36  thiessen
  196. * working alignment display
  197. *
  198. * Revision 1.1  2000/08/30 19:49:05  thiessen
  199. * working sequence window
  200. *
  201. */