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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_client.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:14:45  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_client.cpp,v 1000.1 2004/06/01 21:14:45 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 <gui/widgets/workspace/test_client.hpp>
  41. #include <FL/Fl.H>
  42. BEGIN_NCBI_SCOPE
  43. static int s_iColor = 0;
  44. const static int kColors = 4;
  45. static Fl_Color    GetRandomColor()
  46. {
  47.     s_iColor = (s_iColor + 1) % kColors;
  48.     switch(s_iColor)    {
  49.     case 0: return fl_rgb_color(128, 128, 255);
  50.     case 1: return fl_rgb_color(255, 128, 128);
  51.     case 2: return fl_rgb_color(128, 255, 128);
  52.     case 3: return fl_rgb_color(255, 128, 255);
  53.     }
  54.     return FL_MAGENTA;
  55. }
  56. ////////////////////////////////////////////////////////////////////////////////
  57. /// CFLTestClient 
  58. CFLTestClient::CFLTestClient(int type, const char* slabel)
  59. :   Fl_Box(0, 0, 0, 0, 0), 
  60.     m_Label(slabel),
  61.     m_Type(type)
  62. {
  63.     m_StateLabel = m_Label;
  64.     label(m_StateLabel.c_str());
  65.     color(GetRandomColor());
  66.     box(FL_FLAT_BOX);
  67.     m_MenuRoot = new CMenuItem("Root");
  68.     CMenuItem* submenu = m_MenuRoot->AddSubMenu("Commands");
  69.     submenu->AddSubItem("Test", eCmdTest);
  70.     
  71.     string s = "Test " + NStr::IntToString(m_Type);    
  72.     submenu->AddSubItem(s, eCmdTest + m_Type);
  73. }
  74. CFLTestClient::~CFLTestClient()
  75. {
  76.     delete m_MenuRoot;
  77. }
  78. string  CFLTestClient::GetLabel(void)  const 
  79.     return m_Label; 
  80. }
  81. BEGIN_CMD_MAP(CFLTestClient, CCommandTarget)
  82.     ON_COMMAND_RANGE(eCmdTest, eCmdTest3, &CFLTestClient::OnTest)
  83.     ON_UPDATE_COMMAND_UI_RANGE(eCmdTest, eCmdTest3, &CFLTestClient::OnUpdateTest)
  84. END_CMD_MAP()
  85. int    CFLTestClient::handle(int event)
  86. {
  87.     switch(event)   {
  88.     case FL_FOCUS:    {
  89.         m_StateLabel = m_Label + "  FOCUSED";
  90.         label(m_StateLabel.c_str());
  91.         redraw();
  92.         return true;
  93.     }
  94.     case FL_UNFOCUS:  {
  95.         m_StateLabel = m_Label;
  96.         label(m_StateLabel.c_str());
  97.         redraw();
  98.         return true;
  99.     }
  100.     case FL_PUSH:   {
  101.         if(Fl::focus() != static_cast<Fl_Widget*>(this))    {
  102.             take_focus();
  103.         }
  104.     }
  105.     };
  106.     return Fl_Box::handle(event);
  107. }        
  108. void    CFLTestClient::OnTest(TCmdID cmd)
  109. {
  110.     if(cmd == eCmdTest1  || cmd == (eCmdTest + m_Type))    {
  111.         cout << "nOnTest() cmd = eCmdTest" << (cmd - eCmdTest);
  112.     }
  113. }
  114. // clients handles two commands: eCmdTest and (eCmdTest + m_Type)
  115. void    CFLTestClient::OnUpdateTest(ICmdUI* pCmdUI)
  116. {
  117.     TCmdID cmd = pCmdUI->GetCommand();
  118.     pCmdUI->Enable(cmd == eCmdTest  || cmd == (eCmdTest + m_Type));
  119. }
  120. ////////////////////////////////////////////////////////////////////////////////
  121. /// CGLTestClient 
  122. CGLTestClient::CGLTestClient(int type, const char* slabel)
  123. :   CGlCanvas2d(0, 0, 0, 0, 0), 
  124.     m_Label(slabel),
  125.     m_Type(type),
  126.     m_Font(CGlBitmapFont::eHelvetica18)
  127. {
  128.     label(m_Label.c_str());
  129.     m_Color = GetRandomColor();
  130.     m_StateLabel = m_Label;
  131.     m_MenuRoot = new CMenuItem("Root");
  132.     CMenuItem* submenu = m_MenuRoot->AddSubMenu("Commands");
  133.     submenu->AddSubItem("Test", eCmdTest);
  134.     
  135.     string s = "Test " + NStr::IntToString(m_Type);    
  136.     submenu->AddSubItem(s, eCmdTest + m_Type);
  137. }
  138. CGLTestClient::~CGLTestClient()
  139. {
  140.     delete m_MenuRoot;
  141. }
  142. BEGIN_CMD_MAP(CGLTestClient, CCommandTarget)
  143.     ON_COMMAND_RANGE(eCmdTest, eCmdTest3, &CGLTestClient::OnTest)
  144.     ON_UPDATE_COMMAND_UI_RANGE(eCmdTest, eCmdTest3, &CGLTestClient::OnUpdateTest)
  145. END_CMD_MAP()
  146. int    CGLTestClient::handle(int event)
  147. {
  148.     switch(event)   {
  149.     case FL_FOCUS:    {
  150.         m_StateLabel = m_Label + "  FOCUSED";
  151.         redraw();
  152.         return true;
  153.     }
  154.     case FL_UNFOCUS:  {
  155.         m_StateLabel = m_Label;
  156.         redraw();
  157.         return true;
  158.     }
  159.     case FL_PUSH:   {
  160.         if(Fl::focus() != static_cast<Fl_Widget*>(this))    {
  161.             take_focus();
  162.         }
  163.     }
  164.     };
  165.     return CGlCanvas2d::handle(event);
  166. }        
  167. void    CGLTestClient::OnTest(TCmdID cmd)
  168. {
  169.     if(cmd == eCmdTest1  || cmd == (eCmdTest + m_Type))    {
  170.         cout << "nOnTest() cmd = eCmdTest" << (cmd - eCmdTest);
  171.     }
  172. }
  173. // clients handles two commands: eCmdTest and (eCmdTest + m_Type)
  174. void    CGLTestClient::OnUpdateTest(ICmdUI* pCmdUI)
  175. {
  176.     TCmdID cmd = pCmdUI->GetCommand();
  177.     pCmdUI->Enable(cmd == eCmdTest  || cmd == (eCmdTest + m_Type));
  178. }
  179. string  CGLTestClient::GetLabel(void)  const 
  180.     return m_Label; 
  181. }
  182. void  CGLTestClient::draw(void)
  183. {
  184.     glClearColor(1.0, 1.0, 1.0, 1.0);
  185.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    
  186.     
  187.     CGlPane pane;
  188.     pane.SetViewport(TVPRect(0, 0, w(), h()));
  189.     pane.SetModelLimitsRect(TModelRect(0,0,1,1));
  190.     pane.ZoomAll();
  191.     pane.OpenOrtho();
  192.     glColorC(m_Color);
  193.     glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  194.     glRectd(0.1, 0.1, 0.9, 0.9);
  195.     glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  196.     glRectd(0.2, 0.2, 0.8, 0.8);
  197.     glColor3i(0, 0, 0);
  198.     m_Font.TextOut(0.15f, 0.5f, m_Label.c_str());
  199.     
  200.     pane.Close();
  201. }
  202. END_NCBI_SCOPE
  203. /*
  204.  * ===========================================================================
  205.  * $Log: test_client.cpp,v $
  206.  * Revision 1000.1  2004/06/01 21:14:45  gouriano
  207.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  208.  *
  209.  * Revision 1.6  2004/05/21 22:27:56  gorelenk
  210.  * Added PCH ncbi_pch.hpp
  211.  *
  212.  * Revision 1.5  2004/05/13 17:32:22  yazhuk
  213.  * Extended CGLClient to support command handling
  214.  *
  215.  * Revision 1.4  2004/05/07 14:23:04  yazhuk
  216.  * Extended CLTestClient to implement IWMClient and support command handling
  217.  *
  218.  * Revision 1.3  2004/02/18 02:21:34  ucko
  219.  * Remove the remaining use of PolyMode (no longer declared...)
  220.  *
  221.  * Revision 1.2  2004/02/17 15:22:19  yazhuk
  222.  * Refactoring - removed CGlParam
  223.  *
  224.  * Revision 1.1  2004/02/04 19:42:01  yazhuk
  225.  * Initial revision
  226.  *
  227.  * ===========================================================================
  228.  */