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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: filter.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:03:16  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: filter.cpp,v 1000.1 2004/06/01 21:03:16 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: Mati Shomrat  
  35.  *
  36.  * File Description:
  37.  *    
  38.  *    
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include <corelib/ncbistd.hpp>
  42. #include <FL/Fl.H>
  43. #include <FL/Fl_Choice.H>
  44. #include <FL/Fl_Box.H>
  45. #include <FL/Fl_Button.H>
  46. #include <FL/Fl_Check_Button.H>
  47. #include <FL/Fl_Input.H>
  48. #include <algorithm>
  49. #include "filter.hpp"
  50. #include "valerror_display.hpp"
  51. #include "erritem_view.hpp"
  52. BEGIN_NCBI_SCOPE
  53. // Public:
  54. CValidatorFilter::CValidatorFilter
  55. (int x,
  56.  int y,
  57.  EDiagSev min,
  58.  EDiagSev max,
  59.  bool verbose) :
  60.     Fl_Group(x, y, 580, 134, 0)
  61. {
  62.     box(FL_ENGRAVED_BOX);
  63.     resizable(0);
  64.     AddSeverityFilter(min, max);
  65.     AddErrCodeFilter();
  66.     AddSearchFilter();
  67.     AddVerboseFilter(verbose);
  68.     end();
  69. }
  70. CValidatorFilter::~CValidatorFilter(void)
  71. {
  72. }
  73. string CValidatorFilter::GetErrCode(void) const
  74. {
  75.     return (m_ErrCodesChoice->value() == 0) ? 
  76.         kEmptyStr : m_ErrCodesChoice->text();
  77. }
  78. string CValidatorFilter::GetSearchString(void) const
  79. {
  80.     return m_SearchInput->value();
  81. }
  82. EDiagSev CValidatorFilter::GetMinSev(void) const
  83. {
  84.     return static_cast<EDiagSev>(m_MinSevChoice->value());
  85. }
  86. EDiagSev CValidatorFilter::GetMaxSev(void) const
  87. {
  88.     return static_cast<EDiagSev>(m_MaxSevChoice->value());
  89. }
  90. CValidErrItemView::EMessage CValidatorFilter::GetMessage(void) const
  91. {
  92.     return m_VerboseButton->value() ? 
  93.         CValidErrItemView::eMessage_Verbose : CValidErrItemView::eMessage_Terse;
  94. }
  95. void CValidatorFilter::SetErrCodes(const set<string>& errcodes)
  96. {
  97.     m_ErrCodesChoice->clear();
  98.     ITERATE( set<string>, errcode, errcodes ) {
  99.         m_ErrCodesChoice->add(errcode->c_str(), 0, 0);
  100.     }
  101.     m_ErrCodesChoice->value(0);
  102. }
  103. // Private:
  104. void CValidatorFilter::AddSeverityFilter(EDiagSev min, EDiagSev max)
  105. {
  106.     static const char* sevstr = "Info|Warning|Error|Critical";
  107.     
  108.     Fl_Box* b = new Fl_Box(x() + 2, y() + 5, 130, 25, "Severity - Min:");
  109.     b->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
  110.     b->labelfont(FL_COURIER);
  111.     m_MinSevChoice = new Fl_Choice(x() + 130, y() + 5, 85, 25);
  112.     m_MinSevChoice->labelfont(FL_COURIER);
  113.     m_MinSevChoice->add(sevstr);
  114.     m_MinSevChoice->value(min);
  115.     m_MinSevChoice->callback((Fl_Callback*)CValidatorFilter::cb_OnSevChange, this);
  116.     b = new Fl_Box(x() + 230, y() + 5, 50, 25, "Max:");
  117.     b->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
  118.     b->labelfont(FL_COURIER);
  119.     m_MaxSevChoice = new Fl_Choice(x() + 270, y() + 5, 85, 25);
  120.     m_MaxSevChoice->labelfont(FL_COURIER);
  121.     m_MaxSevChoice->add(sevstr);
  122.     m_MaxSevChoice->value(max);
  123.     m_MaxSevChoice->callback((Fl_Callback*)CValidatorFilter::cb_OnSevChange, this);
  124.     InactivateSev();
  125. }
  126. void CValidatorFilter::AddErrCodeFilter(void)
  127. {
  128.     Fl_Box* b = new Fl_Box(x() + 2, y() + 42, 130, 25, "Error Codes:");
  129.     b->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
  130.     b->labelfont(FL_COURIER);
  131.     m_ErrCodesChoice = new Fl_Choice(x() + 130, y() + 42, 250, 25);
  132.     m_ErrCodesChoice->labelfont(FL_COURIER);
  133.     m_ErrCodesChoice->callback((Fl_Callback*)CValidatorFilter::cb_OnErrCodeChange, this);
  134. }
  135. void CValidatorFilter::AddSearchFilter(void) 
  136. {
  137.     m_SearchButton = new Fl_Button(x() + 5, y() + 78, 90, 25, "Search:");
  138.     m_SearchButton->labelfont(FL_COURIER);
  139.     m_SearchButton->deactivate();
  140.     m_SearchButton->callback((Fl_Callback*)CValidatorFilter::cb_OnSearchPressed, this);
  141.     
  142.     m_SearchInput = new Fl_Input(x() + 130, y() + 78, 200, 25, 0);
  143.     m_SearchInput->callback((Fl_Callback*)CValidatorFilter::cb_OnSearchInput, this);
  144.     m_SearchInput->when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY_ALWAYS);
  145. }
  146. void CValidatorFilter::AddVerboseFilter(bool verbose)
  147. {
  148.     m_VerboseButton = new Fl_Check_Button(x() + 2, y() + 110, 25 , 25, " Verbose");
  149.     m_VerboseButton->labelfont(FL_COURIER);
  150.     m_VerboseButton->when(FL_WHEN_RELEASE);
  151.     m_VerboseButton->value(verbose);
  152.     m_VerboseButton->callback((Fl_Callback*)CValidatorFilter::cb_OnVerboseChange, this);
  153. }
  154. void CValidatorFilter::InactivateSev(void)
  155. {
  156.     int size = m_MinSevChoice->size() - 1;
  157.     unsigned int flag;
  158.     for ( int i = 0; i < size; ++i) {
  159.         flag = (i > m_MaxSevChoice->value()) ? FL_MENU_INACTIVE : 0;
  160.         m_MinSevChoice->mode(i, flag);
  161.     }
  162.     
  163.     for ( int i = 0; i < size; ++i) {
  164.         flag = (i < m_MinSevChoice->value()) ? FL_MENU_INACTIVE : 0;
  165.         m_MaxSevChoice->mode(i, flag);
  166.     }
  167. }
  168. // Callbacks:
  169. void CValidatorFilter::cb_OnSevChange(Fl_Choice*, CValidatorFilter* _this)
  170. {
  171.     _this->x_OnSevChange();
  172. }
  173. void CValidatorFilter::x_OnSevChange(void)
  174. {
  175.     InactivateSev();
  176.     m_Display->Update(this);
  177. }
  178. void CValidatorFilter::cb_OnErrCodeChange(Fl_Choice*, CValidatorFilter* _this)
  179. {
  180.     _this->x_OnOnErrCodeChange();
  181. }
  182. void CValidatorFilter::x_OnOnErrCodeChange(void)
  183. {
  184.     m_Display->Update(this);
  185. }
  186. void CValidatorFilter::cb_OnSearchPressed(Fl_Button*, CValidatorFilter* _this)
  187. {
  188.     _this->x_OnSearchPressed();
  189. }
  190. void CValidatorFilter::x_OnSearchPressed(void)
  191. {
  192.     m_Display->Update(this);
  193. }
  194. void CValidatorFilter::cb_OnSearchInput(Fl_Input*, CValidatorFilter* _this)
  195. {
  196.     _this->x_OnSearchInput();
  197. }
  198. void CValidatorFilter::x_OnSearchInput(void)
  199. {
  200.     string value = m_SearchInput->value();
  201.     if ( value.empty() ) {
  202.         m_SearchButton->deactivate();
  203.     } else {
  204.         m_SearchButton->activate();
  205.     }
  206.     if ( value.empty()  ||  Fl::event_key() == FL_Enter ) {
  207.         m_Display->Update(this);
  208.     }
  209. }
  210. void CValidatorFilter::cb_OnVerboseChange(Fl_Check_Button* b, CValidatorFilter* _this)
  211. {
  212.     _this->x_OnVerboseChange(b);
  213. }
  214. void CValidatorFilter::x_OnVerboseChange(Fl_Check_Button* b)
  215. {
  216.     m_Display->DisplayVerbose(b->value() != 0);
  217. }
  218. END_NCBI_SCOPE
  219. /*
  220.  * ===========================================================================
  221.  *
  222.  * $Log: filter.cpp,v $
  223.  * Revision 1000.1  2004/06/01 21:03:16  gouriano
  224.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  225.  *
  226.  * Revision 1.3  2004/05/21 22:27:50  gorelenk
  227.  * Added PCH ncbi_pch.hpp
  228.  *
  229.  * Revision 1.2  2003/04/22 16:25:32  shomrat
  230.  * Fl -> FL
  231.  *
  232.  * Revision 1.1  2003/04/18 19:56:49  shomrat
  233.  * Initial revision
  234.  *
  235.  *
  236.  * ===========================================================================
  237.  */