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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: alnvec_multi_model.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:07:20  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: alnvec_multi_model.cpp,v 1000.1 2004/06/01 21:07:20 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:  Andrey Yazhuk
  35.  *
  36.  * File Description:
  37.  * 
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <corelib/ncbistd.hpp>
  41. #include <gui/widgets/aln_multiple/alnvec_multi_model.hpp>
  42. #include <gui/widgets/aln_multiple/align_row.hpp>
  43. BEGIN_NCBI_SCOPE
  44. static const int kColorGradNumber = 32; /// number of gradient colors in alignment
  45. ////////////////////////////////////////////////////////////////////////////////
  46. ///
  47. CAlnVecMultiModel::CAlnVecMultiModel()
  48.     : m_bEnableScoring(true)
  49. {
  50.     m_ScoreCache.SetGradNumber(kColorGradNumber);
  51.     
  52.     CSimpleScoringMethod* p_method = new CSimpleScoringMethod();
  53.     //CSNPScoringMethod* p_method = new CSNPScoringMethod();
  54.     p_method->CreateColorTable(kColorGradNumber);
  55.     
  56.     AddScoringMethod(p_method);
  57.     SetCurrentMethod(p_method->GetName());
  58. }
  59. CAlnVecMultiModel::~CAlnVecMultiModel()
  60. {
  61.     ITERATE(TMethods, it, m_Methods)   {
  62.         delete *it;
  63.     }
  64.     m_Methods.clear();
  65. }
  66. void CAlnVecMultiModel::SetDataSource(IAlnMultiDataSource* p_ds)
  67. {
  68.     CAlnVecMultiDataSource* p_alnvec_ds = dynamic_cast<CAlnVecMultiDataSource*>(p_ds);
  69.     
  70.     // check whether p_ds is compatible with this widget
  71.     _ASSERT(p_ds == NULL  ||  p_alnvec_ds);    
  72.     
  73.     m_pDataSource = p_ds;    
  74.     if(p_alnvec_ds)
  75.         p_alnvec_ds->SetGapChar('-');
  76.     
  77.     m_ScoreCache.SetAlnVec(p_alnvec_ds ? &p_alnvec_ds->GetAlnMgr() : NULL);
  78.     
  79.     x_UpdateOnDataChanged();
  80. }
  81. void    CAlnVecMultiModel::EnableScoring(bool b_en)
  82. {
  83.     m_bEnableScoring = b_en;
  84. }
  85.     
  86. bool    CAlnVecMultiModel::AddScoringMethod(IScoringMethod* method)
  87. {
  88.     TMethods::const_iterator it = std::find(m_Methods.begin(), m_Methods.end(), method);
  89.     if(it == m_Methods.end())   {
  90.         m_Methods.push_back(method);
  91.         return true;
  92.     }
  93.     return false;
  94. }
  95. const   CAlnVecMultiModel::TMethods&        CAlnVecMultiModel::GetMethods()
  96. {
  97.     return  m_Methods;
  98. }
  99. bool    CAlnVecMultiModel::SetCurrentMethod(const string& name)
  100. {
  101.     ITERATE(TMethods, it, m_Methods)   {
  102.         if((*it)->GetName() == name)   { // found it
  103.             m_ScoreCache.SetScoringMethod(*it);
  104.             return true;
  105.         }
  106.     }
  107.     return false;
  108. }
  109. const IScoringMethod*    CAlnVecMultiModel::GetCurrentMethod() const
  110. {
  111.     return m_ScoreCache.GetScoringMethod();
  112. }
  113. /// factory method for creation rows
  114. IAlignRow*  CAlnVecMultiModel::x_CreateRow(TNumrow row)
  115. {
  116.     _ASSERT(m_pDataSource  &&  m_pStyleCatalog);
  117.     const IAlignRowHandle* p_abs_handle = m_pDataSource->GetRowHandle(row);
  118.     const CAlnVecRowHandle* p_handle = dynamic_cast<const CAlnVecRowHandle*>(p_abs_handle);
  119.     _ASSERT(p_handle);
  120.     CAlnVecRow* p_row = new CAlnVecRow(*p_handle);
  121.         
  122.     const CRowDisplayStyle* style = m_pStyleCatalog->GetStyleForRow(row);
  123.     p_row->SetDisplayStyle(style);
  124.     
  125.     p_row->SetScoreCache(m_bEnableScoring ? &m_ScoreCache : NULL);
  126.     return static_cast<IAlignRow*>(p_row);
  127. }
  128. void CAlnVecMultiModel::x_UpdateOnDataChanged()
  129. {    
  130.     CAlnMultiModel::x_UpdateOnDataChanged();
  131.     if(m_pDataSource) {         
  132.         m_ScoreCache.SetAlnVec(& x_GetAlnVecDS()->GetAlnMgr());
  133.         if(m_bEnableScoring)    {
  134.             m_ScoreCache.CalculateScores();
  135.         }
  136.     } else {
  137.         m_ScoreCache.SetAlnVec(NULL);
  138.     }
  139. }
  140. void    CAlnVecMultiModel::SetMasterRow(TNumrow new_row)
  141. {
  142.     CAlnMultiModel::SetMasterRow(new_row);
  143.     x_UpdateOnCoordsChanged();
  144. }
  145. void    CAlnVecMultiModel::x_UpdateOnCoordsChanged()
  146. {
  147.     // this can be eliminated if scores are saved in seq coords
  148.     if(m_bEnableScoring)    {
  149.         m_ScoreCache.CalculateScores(); 
  150.     }
  151. }
  152. END_NCBI_SCOPE
  153. /*
  154.  * ===========================================================================
  155.  * $Log: alnvec_multi_model.cpp,v $
  156.  * Revision 1000.1  2004/06/01 21:07:20  gouriano
  157.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  158.  *
  159.  * Revision 1.6  2004/05/21 22:27:52  gorelenk
  160.  * Added PCH ncbi_pch.hpp
  161.  *
  162.  * Revision 1.5  2004/04/07 13:07:43  dicuccio
  163.  * Minor formatting change
  164.  *
  165.  * Revision 1.4  2004/04/02 16:27:00  yazhuk
  166.  * Replaced UpdateOnCoordsChanged() with x_UpdateOnCoordsChanged(); added
  167.  * SetMasterRow(TNumrow)
  168.  *
  169.  * Revision 1.3  2004/03/24 19:18:24  yazhuk
  170.  * Implemented scoring enabling/disabling
  171.  *
  172.  * Revision 1.2  2004/03/18 17:06:20  yazhuk
  173.  * Redesigned Scoring Methods API
  174.  *
  175.  * Revision 1.1  2004/03/17 17:21:09  yazhuk
  176.  * Initial revision; factored out from CAlnVecMultiWidget
  177.  *
  178.  * ===========================================================================
  179.  */