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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: wm_tab_control.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:14:53  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: wm_tab_control.cpp,v 1000.1 2004/06/01 21:14:53 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/wm_tab_control.hpp>
  41. #include <gui/widgets/fl/menu_window.hpp>
  42. BEGIN_NCBI_SCOPE
  43. ///////////////////////////////////////////////////////////////////////////////
  44. /// CWMTabPos
  45. CWMTabPos::CWMTabPos()
  46. :   m_Pos(-1)// invaid position
  47. {
  48. }
  49. CWMTabPos::CWMTabPos(int pos)
  50. :   m_Pos(pos)
  51. {
  52. }
  53. CWMTabPos::~CWMTabPos()
  54. {
  55. }
  56. bool    CWMTabPos::IsValid()    const
  57. {
  58.     return m_Pos >=0;
  59. }
  60. IWMPosition*    CWMTabPos::Clone() const
  61. {
  62.     return new CWMTabPos(this->GetPos());
  63. }
  64. int     CWMTabPos::GetPos()    const
  65. {
  66.     return m_Pos;
  67. }
  68. void    CWMTabPos::Set(int pos)
  69. {
  70.     m_Pos = pos;
  71. }
  72. ///////////////////////////////////////////////////////////////////////////////
  73. /// CWMTabControl
  74. CWMTabControl::CWMTabControl()
  75. :   CTabControl(),
  76.     m_pManager(NULL)
  77. {
  78. }
  79. CWMTabControl::CWMTabControl(int x, int y, int w, int h, const char* label)
  80. :   CTabControl(x, y, w, h, label),
  81.     m_pManager(NULL)
  82. {
  83. }
  84. CWMTabControl::~CWMTabControl()
  85. {
  86. }
  87. BEGIN_CMD_MAP(CWMTabControl, CCommandTarget)
  88. END_CMD_MAP()
  89. void    CWMTabControl::SetManager(IWindowManager* manager)
  90. {
  91.     m_pManager = manager;
  92. }
  93. bool    CWMTabControl::IsVacant(const IWMPosition& pos)
  94. {
  95.     const CWMTabPos* p_pos = dynamic_cast<const CWMTabPos*>(&pos);
  96.     if(p_pos)   {
  97.         int ind = p_pos->GetPos();        
  98.         return ind == x_GetTabsCount();
  99.     }
  100.     return false;
  101. }
  102. CWMTabControl::TChild*  CWMTabControl::GetChild(const IWMPosition& pos)
  103. {
  104.     const CWMTabPos* p_pos = dynamic_cast<const CWMTabPos*>(&pos); 
  105.     if(p_pos)   {
  106.         return GetTab(p_pos->GetPos());
  107.     }
  108.     return NULL;
  109. }
  110. bool    CWMTabControl::Insert(TChild* child, const IWMPosition& pos)
  111. {
  112.     const CWMTabPos* p_pos = dynamic_cast<const CWMTabPos*>(&pos);    
  113.     if(child  &&  p_pos)   {
  114.         if(p_pos->IsValid()  &&  IsVacant(pos))   {
  115.             IWMClient* client = dynamic_cast<IWMClient*>(child);
  116.             string tab_name = client ? client->GetLabel() : "Container";
  117.             return AddTab(child, tab_name.c_str());
  118.         }
  119.     }
  120.     return false;
  121. }
  122. void    CWMTabControl::RemoveAll()
  123. {
  124.     RemoveAllTabs();
  125. }
  126. bool    CWMTabControl::Remove(const IWMPosition& pos)
  127. {
  128.     const CWMTabPos* p_pos = dynamic_cast<const CWMTabPos*>(&pos); 
  129.     if(p_pos)   {
  130.         return RemoveTab(p_pos->GetPos());
  131.     }
  132.     return false;
  133. }
  134.  
  135. bool    CWMTabControl::Remove(TChild* child)
  136. {
  137.     return RemoveTab(child);
  138. }
  139.    
  140. void    CWMTabControl::GetChildren(vector<TChild*>& children)
  141. {
  142.     int n = x_GetTabsCount();
  143.     children.clear();
  144.     for( int i = 0; i < n; i++ )    {
  145.         Fl_Widget* child = x_GetPane(i);
  146.         children.push_back(child);
  147.     }
  148. }
  149. void    CWMTabControl::x_OnShowPopupMenu()
  150. {
  151.     int i_tab;
  152.     EHitResult hit_res = x_HitTest(Fl::event_x(), Fl::event_y(), i_tab);
  153.     CMenuItem* root = new CMenuItem("Root");
  154.     
  155.     m_PopupPos.Set(hit_res == eTab ? i_tab : x_GetTabsCount());
  156.     if(m_pManager)  {
  157.         vector<CMenuItem*>  items;            
  158.         m_pManager->GetPopupItems(this, m_PopupPos, items); 
  159.         ITERATE(vector<CMenuItem*>, it, items)  {
  160.             root->AddSubItem(*it);
  161.         }
  162.     }
  163.     
  164.     if(root->IsSubmenuEmpty())  {
  165.         delete root;
  166.     } else {
  167.         CPopupMenu1  menu(Fl::event_x_root(), Fl::event_y_root(), root, this);
  168.         menu.Popup();
  169.     }
  170. }
  171. bool    CWMTabControl::OnCommand(const TCmdID cmd)
  172. {
  173.     bool b_handled = CCommandTarget::OnCommand(cmd);
  174.     if(! b_handled  && m_pManager) {
  175.         b_handled = m_pManager->OnContainerCommand(this, m_PopupPos, cmd);        
  176.     }
  177.     return b_handled;
  178. }
  179. END_NCBI_SCOPE
  180. /*
  181.  * ===========================================================================
  182.  * $Log: wm_tab_control.cpp,v $
  183.  * Revision 1000.1  2004/06/01 21:14:53  gouriano
  184.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  185.  *
  186.  * Revision 1.3  2004/05/21 22:27:56  gorelenk
  187.  * Added PCH ncbi_pch.hpp
  188.  *
  189.  * Revision 1.2  2004/05/07 14:27:33  yazhuk
  190.  * Replaced CPopupMenu  with CPopupMenu1
  191.  *
  192.  * Revision 1.1  2004/02/04 19:41:35  yazhuk
  193.  * Initial revision
  194.  *
  195.  * ===========================================================================
  196.  */