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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: erritem_view.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:03:14  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: erritem_view.cpp,v 1000.1 2004/06/01 21:03:14 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.  *    Main graphical view class for the validator
  38.  *    
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include <corelib/ncbistd.hpp>
  42. #include <corelib/ncbistr.hpp>
  43. #include <objtools/validator/validator.hpp>
  44. #include <FL/Fl.H>
  45. #include <FL/Fl_Text_Display.H>
  46. #include <FL/Fl_Text_Buffer.H>
  47. #include "erritem_view.hpp"
  48. BEGIN_NCBI_SCOPE
  49. USING_SCOPE(objects::validator);
  50. const string CValidErrItemView::sm_Prefix =  "          "; // 10 spaces
  51. const string CValidErrItemView::sm_NewLine = "n";
  52.   
  53. CValidErrItemView::CValidErrItemView
  54. (const CValidErrItem& item,
  55.  int W,
  56.  EMessage message) :
  57.     Fl_Text_Display(0, 0, W, 0, 0),
  58.     m_Item(&item),
  59.     m_Message(message),
  60.     m_Selected(false)
  61. {
  62.     box(FL_NO_BOX);
  63.     scrollbar_width(0);
  64.     textfont(FL_COURIER);
  65.     Fl_Text_Buffer* buf = new Fl_Text_Buffer;
  66.     buf->text(CreateTextString(W).c_str());
  67.     buffer(buf);
  68.     size( W, Height() );
  69.     end();
  70. }
  71. CValidErrItemView::~CValidErrItemView(void)
  72. {
  73. }
  74. void CValidErrItemView::Select(void)
  75. {
  76.     m_Selected = true;
  77.     color (FL_SELECTION_COLOR);
  78.     textcolor(FL_WHITE);
  79.     redraw();
  80. }
  81. void CValidErrItemView::DeSelect(void)
  82. {
  83.     m_Selected = false;
  84.     color(FL_WHITE);
  85.     textcolor(FL_FOREGROUND_COLOR);
  86.     redraw();
  87. }
  88. void CValidErrItemView::DoubleClick(void)
  89. {
  90. }
  91. int CValidErrItemView::handle (int event)
  92. {
  93.     switch (event) {
  94.     case FL_PUSH:
  95.         if ( Fl::event_clicks() ) {
  96.             Select();
  97.             DoubleClick ();
  98.         } else if ( !m_Selected ) {
  99.             Select();
  100.         } else {
  101.             DeSelect();
  102.         }
  103.         
  104.         return 1;
  105.     default:
  106.         return Fl_Text_Display::handle(event);
  107.     }
  108. }
  109. void CValidErrItemView::resize(int X, int Y, int W, int H)
  110. {
  111.     if ( W != w() ) {
  112.         buffer()->text(CreateTextString(W).c_str());
  113.     }
  114.     Fl_Text_Display::resize(X, Y, W, Height());
  115. }
  116. // private
  117. string CValidErrItemView::CreateTextString(int W)
  118. {
  119.     if ( W < 0 ) {
  120.         W = w();
  121.     }
  122.     // Create the message
  123.     string sev = m_Item->GetSevAsStr();
  124.     sev.resize(10, ' ');
  125.     NStr::ToUpper(sev);
  126.     string msg = m_Item->GetErrCode();
  127.     msg += sm_NewLine;
  128.     msg += m_Item->GetMsg();
  129.     msg += sm_NewLine;
  130.     if ( m_Message == eMessage_Verbose ) {
  131.         msg += sm_NewLine;
  132.         msg += m_Item->GetVerbose();
  133.         msg += sm_NewLine;
  134.     }
  135.     // Wrap it to fit the window size
  136.     list<string> arr;
  137.     double font_width = textsize() * 0.64;
  138.     SIZE_TYPE width = static_cast<SIZE_TYPE>(W / font_width);
  139.     NStr::Wrap(msg, width, arr, 0, sm_Prefix, sev);
  140.     
  141.     return NStr::Join(arr, "n");
  142. }
  143. void CValidErrItemView::SetMessage(EMessage new_message)
  144. {
  145.     if ( m_Message != new_message ) {
  146.         m_Message = new_message;
  147.         buffer()->text(CreateTextString(w()).c_str());
  148.         resize(x(), y(), w(), Height());
  149.     }
  150. }
  151. int CValidErrItemView::Height(void)
  152. {
  153.     SIZE_TYPE lines = buffer()->count_lines(0, buffer()->length() - 1) + 1;
  154.     return lines * textsize() + 10;
  155. }
  156. END_NCBI_SCOPE
  157. /*
  158.  * ===========================================================================
  159.  *
  160.  * $Log: erritem_view.cpp,v $
  161.  * Revision 1000.1  2004/06/01 21:03:14  gouriano
  162.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  163.  *
  164.  * Revision 1.4  2004/05/21 22:27:50  gorelenk
  165.  * Added PCH ncbi_pch.hpp
  166.  *
  167.  * Revision 1.3  2003/06/02 16:06:24  dicuccio
  168.  * Rearranged src/objects/ subtree.  This includes the following shifts:
  169.  *     - src/objects/asn2asn --> arc/app/asn2asn
  170.  *     - src/objects/testmedline --> src/objects/ncbimime/test
  171.  *     - src/objects/objmgr --> src/objmgr
  172.  *     - src/objects/util --> src/objmgr/util
  173.  *     - src/objects/alnmgr --> src/objtools/alnmgr
  174.  *     - src/objects/flat --> src/objtools/flat
  175.  *     - src/objects/validator --> src/objtools/validator
  176.  *     - src/objects/cddalignview --> src/objtools/cddalignview
  177.  * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  178.  * replaces the three libmmdb? libs.
  179.  *
  180.  * Revision 1.2  2003/04/22 16:25:51  shomrat
  181.  * Fl -> FL
  182.  *
  183.  * Revision 1.1  2003/04/18 19:56:37  shomrat
  184.  * Initial revision
  185.  *
  186.  *
  187.  * ===========================================================================
  188.  */