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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: valerror_display.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:03:20  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: valerror_display.cpp,v 1000.1 2004/06/01 21:03: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: Mati Shomrat  
  35.  *
  36.  * File Description:
  37.  *  
  38.  *    
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include <corelib/ncbistd.hpp>
  42. #include <objtools/validator/validator.hpp>
  43. #include <FL/Fl.H>
  44. #include <FL/Fl_Group.H>
  45. #include <FL/Fl_Scroll.H>
  46. #include <FL/Fl_Pack.H>
  47. #include <FL/Fl_Box.H>
  48. #include "valerror_display.hpp"
  49. #include "erritem_view.hpp"
  50. #include "filter.hpp"
  51. #include "statistics.hpp"
  52. USING_SCOPE(ncbi::objects::validator);
  53. BEGIN_NCBI_SCOPE
  54. // static variables initializers
  55. const string CValidErrorDisplay::sm_ShownLabel = "Error shown: ";
  56. // public:
  57. CValidErrorDisplay::CValidErrorDisplay(int x, int y, int w, int h) :
  58.     Fl_Group(x, y, w, h, 0),
  59.     m_Scroll(0),
  60.     m_Pack(0),
  61.     m_Shown(0),
  62.     m_Stats(0)
  63. {
  64.     m_Shown = CreateShown(x, y, w, 25);
  65.     SetShown(0);
  66.     m_Scroll = CreateScroll(x, y + 25, w, h - 55);
  67.     m_Pack = CreatePack(x, y + 25, w, h - 55);
  68.     m_Scroll->add(m_Pack);
  69.     m_Stats = new CValidErrorStats(x + 10, y + h - 25 , w, 25);
  70.     end();
  71. }
  72. CValidErrorDisplay::~CValidErrorDisplay(void)
  73. {
  74. }
  75. void CValidErrorDisplay::Update(const CValidatorFilter* filter)
  76. {
  77.     EDiagSev min = eDiag_Info;
  78.     EDiagSev max = eDiag_Critical;
  79.     string err_code = kEmptyStr;
  80.     string search_str = kEmptyStr;
  81.     CValidErrItemView::EMessage message = CValidErrItemView::eMessage_Verbose;
  82.     if ( filter ) {
  83.         min = filter->GetMinSev();
  84.         max = filter->GetMaxSev();
  85.         err_code = filter->GetErrCode();
  86.         if ( err_code == "All" ) {
  87.             err_code = kEmptyStr;
  88.         }
  89.         search_str = filter->GetSearchString();
  90.         message = filter->GetMessage();
  91.     }
  92.     m_Pack->clear();
  93.     for ( CValidError_CI iter(*m_Errors, err_code, min, max);
  94.           iter; 
  95.           ++iter ) {
  96.         if ( search_str.empty()  ||
  97.              NStr::FindNoCase(iter->GetMsg(), search_str) != NPOS) {
  98.             m_Pack->add(new CValidErrItemView(*iter, w(), message));
  99.         }
  100.     }
  101.     SetShown(m_Pack->children());
  102.     
  103.     m_Scroll->redraw();
  104. }
  105. void CValidErrorDisplay::SetValidError(const CValidError& errors)
  106. {
  107.     m_Errors.Reset(&errors);
  108.     m_Stats->SetValidError(errors);
  109.     Update();
  110. }
  111. void CValidErrorDisplay::DisplayVerbose(bool verbose)
  112. {
  113.     Fl_Widget*const* items = m_Pack->array();
  114.     SIZE_TYPE num_items = m_Pack->children();
  115.     CValidErrItemView::EMessage message = verbose ?
  116.         CValidErrItemView::eMessage_Verbose : CValidErrItemView::eMessage_Terse;
  117.     for ( SIZE_TYPE i = 0; i < num_items; ++i ) {
  118.         CValidErrItemView* item = dynamic_cast<CValidErrItemView*>(items[i]);
  119.         item->SetMessage(message);
  120.     }
  121.     m_Scroll->position(0,0);
  122.     m_Scroll->redraw();
  123. }
  124. // private:
  125. class CMyScroll : public Fl_Scroll 
  126. {
  127. public:
  128.     CMyScroll(int x, int y, int w, int h, const char* label = 0) :
  129.         Fl_Scroll(x, y, w, h, label)
  130.     {}
  131.     
  132.     // Insure the scrollbars are the last children:
  133.     void fix_scrollbar_order() 
  134.     {
  135.         Fl_Widget** a = (Fl_Widget**)array();
  136.         if (a[children()-1] != &scrollbar) {
  137.             int i,j; for (i = j = 0; j < children(); j++)
  138.                 if (a[j] != &hscrollbar && a[j] != &scrollbar) a[i++] = a[j];
  139.                 a[i++] = &hscrollbar;
  140.                 a[i++] = &scrollbar;
  141.         }
  142.     }
  143.     virtual void resize(int X, int Y, int W, int H)
  144.     {
  145.         fix_scrollbar_order();
  146.         // size all the children:
  147.         int _W = W - scrollbar.w();
  148.         int _H = H - hscrollbar.h();
  149.         Fl_Widget*const* a = array();
  150.         for (int i=children()-2; i--;) {
  151.             Fl_Widget* o = *a++;
  152.             o->resize(o->x()+X-x(), o->y()+Y-y(), _W, _H);
  153.         }
  154.         Fl_Widget::resize(X,Y,W,H);
  155.     }
  156. };
  157. Fl_Scroll* CValidErrorDisplay::CreateScroll(int X, int Y, int W, int H)
  158. {
  159.     Fl_Boxtype box_type = FL_DOWN_FRAME;
  160.     int dx = Fl::box_dx(box_type);
  161.     int dy = Fl::box_dy(box_type);
  162.     int dw = Fl::box_dw(box_type);
  163.     int dh = Fl::box_dh(box_type);
  164.     
  165.     Fl_Group* group = new Fl_Group(X, Y, W, H);
  166.     group->box(box_type);
  167.     resizable(group);
  168.     Fl_Scroll* scroll = new CMyScroll(X + dx, Y + dy, W - dw, H - dh);
  169.     scroll->type(Fl_Scroll::VERTICAL);
  170.     scroll->color(FL_WHITE);
  171.     scroll->end();
  172.     group->end();
  173.     return scroll;
  174. }
  175. Fl_Pack* CValidErrorDisplay::CreatePack(int x, int y, int w, int h)
  176. {
  177.     Fl_Pack* pack = new Fl_Pack(x, y, w, h, 0);
  178.     pack->end();
  179.     return pack;
  180. }
  181. Fl_Box* CValidErrorDisplay::CreateShown(int x, int y, int w, int h)
  182. {
  183.     Fl_Box* shown = new Fl_Box(x, y, w, h, 0);
  184.     shown->labelfont(FL_COURIER);
  185.     shown->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
  186.     
  187.     return shown;
  188. }
  189. void CValidErrorDisplay::SetShown(int num)
  190. {
  191.     m_ShownLabel = "Errors Shown: " + NStr::IntToString(num);
  192.     m_Shown->label(m_ShownLabel.c_str());
  193. }
  194. END_NCBI_SCOPE
  195. /*
  196.  * ===========================================================================
  197.  *
  198.  * $Log: valerror_display.cpp,v $
  199.  * Revision 1000.1  2004/06/01 21:03:20  gouriano
  200.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  201.  *
  202.  * Revision 1.4  2004/05/21 22:27:50  gorelenk
  203.  * Added PCH ncbi_pch.hpp
  204.  *
  205.  * Revision 1.3  2003/06/02 16:06:25  dicuccio
  206.  * Rearranged src/objects/ subtree.  This includes the following shifts:
  207.  *     - src/objects/asn2asn --> arc/app/asn2asn
  208.  *     - src/objects/testmedline --> src/objects/ncbimime/test
  209.  *     - src/objects/objmgr --> src/objmgr
  210.  *     - src/objects/util --> src/objmgr/util
  211.  *     - src/objects/alnmgr --> src/objtools/alnmgr
  212.  *     - src/objects/flat --> src/objtools/flat
  213.  *     - src/objects/validator --> src/objtools/validator
  214.  *     - src/objects/cddalignview --> src/objtools/cddalignview
  215.  * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  216.  * replaces the three libmmdb? libs.
  217.  *
  218.  * Revision 1.2  2003/04/22 16:24:52  shomrat
  219.  * Fl -> FL
  220.  *
  221.  * Revision 1.1  2003/04/18 19:57:16  shomrat
  222.  * Initial revision
  223.  *
  224.  *
  225.  * ===========================================================================
  226.  */