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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: cross_aln_widget.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:06:35  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: cross_aln_widget.cpp,v 1000.1 2004/06/01 21:06:35 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:  Vlad Lebedev
  35.  *
  36.  */
  37. #include <ncbi_pch.hpp>
  38. #include <gui/widgets/aln_crossaln/cross_aln_widget.hpp>
  39. #include "cross_aln_pane.hpp"
  40. BEGIN_NCBI_SCOPE
  41. void s_CCrossAlnWidget_ScrollCB(Fl_Widget* w, void*)
  42. {
  43.     dynamic_cast<CCrossAlnWidget&> (*w->parent()).x_ScrollCB();
  44. }
  45. CCrossAlnWidget::CCrossAlnWidget(int x, int y, int w, int h, const char* label)
  46.     : Fl_Group(x, y, w, h, label)
  47. {
  48.     const int kScrollBarSize = 15;
  49.     const int kCrossPanelSize = 100;
  50.     
  51.     begin();
  52.     m_ScrollX1 = new Fl_Scrollbar(x, y, w - kScrollBarSize, kScrollBarSize);
  53.     m_ScrollX1->type(FL_HORIZONTAL);
  54.     m_ScrollX1->callback( s_CCrossAlnWidget_ScrollCB );
  55.     m_ScrollX1->labeltype(FL_NO_LABEL);
  56.     int p_size = (h - kScrollBarSize * 2 - kCrossPanelSize) / 2;
  57.     
  58.     m_ScrollY1 = new Fl_Scrollbar
  59.             (x + (w - kScrollBarSize), y + kScrollBarSize,
  60.             kScrollBarSize, p_size);
  61.     m_ScrollY1->callback( s_CCrossAlnWidget_ScrollCB );
  62.     m_ScrollY1->labeltype(FL_NO_LABEL);
  63.     m_ScrollX2 = new Fl_Scrollbar(x, y + h - kScrollBarSize, 
  64.                 w - kScrollBarSize, kScrollBarSize);
  65.     m_ScrollX2->type(FL_HORIZONTAL);
  66.     m_ScrollX2->callback( s_CCrossAlnWidget_ScrollCB );
  67.     m_ScrollX2->labeltype(FL_NO_LABEL);
  68.     m_ScrollY2 = new Fl_Scrollbar
  69.             (x + (w - kScrollBarSize), y + h - kScrollBarSize - p_size,
  70.             kScrollBarSize, p_size);
  71.     m_ScrollY2->callback( s_CCrossAlnWidget_ScrollCB );
  72.     m_ScrollY2->labeltype(FL_NO_LABEL);
  73.     // we wrap the panel in a group because FLTK will not respect the
  74.     // widget's border type
  75.     Fl_Group* group = new Fl_Group(x, y + kScrollBarSize,
  76.             w - kScrollBarSize,  h - kScrollBarSize * 2);
  77.     const Fl_Boxtype panel_box = FL_THIN_DOWN_FRAME;
  78.     group->box(panel_box);
  79.     group->labeltype(FL_NO_LABEL);
  80.                                           
  81.     m_CrossPane.reset( new CCrossAlnPane
  82.         (x  + Fl::box_dx(panel_box), 
  83.          y + kScrollBarSize + Fl::box_dy(panel_box),
  84.          w - kScrollBarSize - Fl::box_dw(panel_box),
  85.          h - kScrollBarSize * 2 - Fl::box_dh(panel_box))
  86.     );
  87.     
  88.     group->end();
  89.     group->resizable(m_CrossPane.get());
  90.     
  91.     end();
  92.     resizable(group);
  93. }
  94. CCrossAlnWidget::~CCrossAlnWidget()
  95. {
  96.     delete m_ScrollX1;
  97.     delete m_ScrollX2;
  98.     delete m_ScrollY1;
  99.     delete m_ScrollY2;
  100. }
  101. void CCrossAlnWidget::x_ScrollCB()
  102. {
  103.     m_CrossPane->Scroll(m_ScrollX1->value(), m_ScrollY1->value(),
  104.                         m_ScrollX2->value(), m_ScrollY2->value() );
  105. }
  106. void CCrossAlnWidget::FitToWindow(void)
  107. {
  108.     m_CrossPane->FitToWindow();
  109. }
  110. void CCrossAlnWidget::ZoomToSequence(void)
  111. {
  112.     m_CrossPane->ZoomToSequence();
  113. }
  114. void CCrossAlnWidget::ZoomOnRange(const TSeqRange& range)
  115. {
  116.     m_CrossPane->ZoomOnRange(range);
  117. }
  118. void CCrossAlnWidget::ZoomOnAlignment()
  119. {
  120.     m_CrossPane->ZoomOnAlignment();
  121. }
  122.     
  123. void CCrossAlnWidget::SetDataSource(CCrossAlnDataSource* ds)
  124. {
  125.     m_CrossPane->SetDataSource(ds);
  126. }
  127. void CCrossAlnWidget::Update()
  128. {
  129.     m_CrossPane->Update();
  130. }
  131. // Set/Clear selection
  132. void CCrossAlnWidget::SelectObject(const CObject* obj)
  133. {
  134.     m_CrossPane->SelectObject(obj);
  135. }
  136. void CCrossAlnWidget::SelectSeqLoc(const CSeq_loc* loc)
  137. {
  138.     //m_CrossPane->SelectSeqLoc(loc);
  139. }
  140. void CCrossAlnWidget::ClearSelection()
  141. {
  142.     m_CrossPane->ClearSelection();
  143. }
  144. void CCrossAlnWidget::SetColor(EDisplayElement elem, Fl_Color color)
  145. {
  146.     //m_CrossPane->SetColor(elem, color);
  147. }
  148. /*Fl_Color CCrossAlnWidget::GetColor(EDisplayElement elem) const
  149. {
  150.     return m_CrossPane->GetColor(elem);
  151. }*/
  152. END_NCBI_SCOPE
  153. /*
  154.  * ===========================================================================
  155.  * $Log: cross_aln_widget.cpp,v $
  156.  * Revision 1000.1  2004/06/01 21:06:35  gouriano
  157.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  158.  *
  159.  * Revision 1.4  2004/05/21 22:27:52  gorelenk
  160.  * Added PCH ncbi_pch.hpp
  161.  *
  162.  * Revision 1.3  2004/03/11 17:50:41  dicuccio
  163.  * Updated typedefs: dropped TDimension, TPosition, TIndex, TColor; use TSeqRange
  164.  * instead of TRange
  165.  *
  166.  * Revision 1.2  2004/01/27 16:20:26  lebedev
  167.  * Methods for working with selections added
  168.  *
  169.  * Revision 1.1  2003/12/22 13:12:34  lebedev
  170.  * Initial revision
  171.  *
  172.  * ===========================================================================
  173.  */