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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: diag_panel.cpp,v $
  4.  * PRODUCTION Revision 1000.4  2004/06/02 20:24:29  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: diag_panel.cpp,v 1000.4 2004/06/02 20:24:29 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:  Mike DiCuccio
  35.  *
  36.  * File Description:
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <gui/widgets/fl/diag_panel.hpp>
  41. #include <gui/utils/clipboard.hpp>
  42. #include <FL/Fl.H>
  43. BEGIN_NCBI_SCOPE
  44. CDiagPanel::CDiagPanel(int px, int py, int wid, int ht, const char* label)
  45.     : Fl_Group(px, py, wid, ht, label)
  46.     , m_Display(px, py, wid, ht)
  47.     , m_OrigHandler(GetDiagHandler(true))
  48. {
  49.     SetDiagHandler(this, false);
  50.     m_Display.buffer(m_Buffer);
  51.     m_Display.box(FL_THIN_DOWN_FRAME);
  52.     /**
  53.     m_Display.resize(px + Fl::box_dx(box()),
  54.                      py + Fl::box_dy(box()),
  55.                      wid - Fl::box_dw(box()),
  56.                      ht  - Fl::box_dh(box()));
  57.                      **/
  58.     resizable(&m_Display);
  59.     m_Handler.StandardConfig();
  60. }
  61. CDiagPanel::~CDiagPanel()
  62. {
  63.     RestoreOrigHandler();
  64. }
  65. void CDiagPanel::RestoreOrigHandler(void)
  66. {
  67.     if (m_OrigHandler) {
  68.         SetDiagHandler(m_OrigHandler);
  69.         m_OrigHandler = NULL;
  70.     }
  71. }
  72. void CDiagPanel::Post(const SDiagMessage& mess)
  73. {
  74.     if (m_OrigHandler) {
  75.         m_OrigHandler->Post(mess);
  76.     }
  77.     // append the text to the buffer's window
  78.     string str(mess.m_Buffer, mess.m_BufferLen);
  79.     //str += "n";
  80.     if ( !str.empty()  &&  str[ str.length()-1 ] == 'n') {
  81.         str.erase(str.length()-1);
  82.     }
  83.     if (m_Buffer.length() != 0) {
  84.         m_Buffer.append("n");
  85.     }
  86.     m_Buffer.append(str.c_str());
  87.     int lines = m_Buffer.count_lines(0, m_Buffer.length());
  88.     m_Display.scroll(lines, 0);
  89. }
  90. void CDiagPanel::SetTextSize(int size)
  91. {
  92.     m_Display.textsize(size);
  93. }
  94. void CDiagPanel::SetTextFont(Fl_Font font)
  95. {
  96.     m_Display.textfont(font);
  97. }
  98. int CDiagPanel::handle(int event)
  99. {
  100.     m_Handler.OnFLTKEvent(event);
  101.     switch (m_Handler.GetGUIState()) {
  102.     case CGUIEvent::eCopyState:
  103.         {{
  104.             const char* sel = m_Buffer.selection_text();
  105.             if (sel) {
  106.                 CClipboard::Clear();
  107.                 CClipboard::Add(sel);
  108.                 CClipboard::Copy();
  109.                 return 1;
  110.             }
  111.         }}
  112.         break;
  113.     default:
  114.         break;
  115.     }
  116.     return Fl_Group::handle(event);
  117. }
  118. END_NCBI_SCOPE
  119. /*
  120.  * ===========================================================================
  121.  * $Log: diag_panel.cpp,v $
  122.  * Revision 1000.4  2004/06/02 20:24:29  gouriano
  123.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  124.  *
  125.  * Revision 1.8  2004/06/02 14:15:43  dicuccio
  126.  * Removed Fl::check() - infinite loop in FLTK
  127.  *
  128.  * Revision 1.7  2004/05/28 15:09:25  dicuccio
  129.  * Added call to Fl::check() after adding a message
  130.  *
  131.  * Revision 1.6  2004/05/21 22:27:53  gorelenk
  132.  * Added PCH ncbi_pch.hpp
  133.  *
  134.  * Revision 1.5  2004/05/07 15:43:07  dicuccio
  135.  * Use new CClipboard class - relieves dependency on objutils
  136.  *
  137.  * Revision 1.4  2004/05/03 13:23:57  dicuccio
  138.  * gui/utils --> gui/objutils where needed
  139.  *
  140.  * Revision 1.3  2004/03/01 15:14:24  dicuccio
  141.  * Added handling of copy events
  142.  *
  143.  * Revision 1.2  2003/11/26 17:17:19  dicuccio
  144.  * Added autoscrolling
  145.  *
  146.  * Revision 1.1  2003/10/27 17:45:25  dicuccio
  147.  * Added CDiagPanel
  148.  *
  149.  * ===========================================================================
  150.  */