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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: colselect_dlg.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:08:48  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: colselect_dlg.cpp,v 1000.1 2004/06/01 21:08:48 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 "colselect_dlg.hpp"
  41. BEGIN_NCBI_SCOPE
  42. // We include the _.cpp here to avoid a compiler bug in gcc-2.95.3
  43. #include "colselect_dlg_.cpp"
  44. CColumnSelectDlg::~CColumnSelectDlg()
  45. {
  46.     delete m_MainWin;
  47. }
  48. EDialogReturnValue CColumnSelectDlg::Show()
  49. {
  50.     if ( !m_MainWin ) {
  51.         return eCancel;
  52.     }
  53.     m_RetVal = eCancel;
  54.     m_MainWin->show();
  55.     while (m_MainWin->shown()) {
  56.         Fl::wait();
  57.     }
  58.     return m_RetVal;
  59. }
  60. void CColumnSelectDlg::AddColumn(const string& str, int col, bool state)
  61. {
  62.     if (state) {
  63.         m_ShownData.push_back(std::make_pair(col, str));
  64.         m_ShownList->add(str.c_str());
  65.     } else {
  66.         m_HiddenData.push_back(std::make_pair(col, str));
  67.         m_HiddenList->add(str.c_str());
  68.     }
  69. }
  70. void CColumnSelectDlg::Clear()
  71. {
  72.     m_ShownData.clear();
  73.     m_ShownList->clear();
  74.     m_HiddenData.clear();
  75.     m_HiddenList->clear();
  76. }
  77. vector<int> CColumnSelectDlg::GetSelected(void) const
  78. {
  79.     vector<int> ret_val;
  80.     for (size_t i = 0;  i < m_ShownData.size();  ++i) {
  81.         ret_val.push_back(m_ShownData[i].first);
  82.     }
  83.     return ret_val;
  84. }
  85. void CColumnSelectDlg::x_OnOK()
  86. {
  87.     m_RetVal = eOK;
  88.     m_MainWin->hide();
  89. }
  90. void CColumnSelectDlg::x_OnCancel()
  91. {
  92.     m_RetVal = eCancel;
  93.     m_MainWin->hide();
  94. }
  95. void CColumnSelectDlg::x_OnDown()
  96. {
  97.     int start = -1;
  98.     int stop = -1;
  99.     for (int i = 1;  i < m_ShownList->size()+1;  ++i) {
  100.         if ( m_ShownList->selected(i)  &&  start == -1) {
  101.             start = i;
  102.         } else if ( !m_ShownList->selected(i)  &&  start != -1) {
  103.             stop = i - 1;
  104.             break;
  105.         }
  106.     }
  107.     if (start == -1) {
  108.         return;
  109.     }
  110.     if (stop == -1  ||  stop >= m_ShownList->size() + 1) {
  111.         return;
  112.     }
  113.     m_ShownList->remove(stop + 1);
  114.     m_ShownList->insert(start, m_ShownData[stop].second.c_str());
  115.     m_ShownData.insert(m_ShownData.begin() + start - 1, m_ShownData[stop]);
  116.     m_ShownData.erase(m_ShownData.begin() + stop + 1);
  117. }
  118. void CColumnSelectDlg::x_OnUp()
  119. {
  120.     int start = -1;
  121.     int stop = -1;
  122.     for (int i = 1;  i < m_ShownList->size()+1;  ++i) {
  123.         if ( m_ShownList->selected(i)  &&  start == -1) {
  124.             start = i;
  125.         } else if ( !m_ShownList->selected(i)  &&  start != -1) {
  126.             stop = i - 1;
  127.             break;
  128.         }
  129.     }
  130.     if (start <= 1) {
  131.         return;
  132.     }
  133.     if (stop == -1) {
  134.         stop = m_ShownList->size();
  135.     }
  136.     m_ShownList->insert(stop + 1, m_ShownData[start - 2].second.c_str());
  137.     m_ShownList->remove(start - 1);
  138.     m_ShownData.insert(m_ShownData.begin() + stop, m_ShownData[start - 2]);
  139.     m_ShownData.erase(m_ShownData.begin() + start - 2);
  140. }
  141. void CColumnSelectDlg::x_OnHide()
  142. {
  143.     int i;
  144.     int start = -1;
  145.     int stop = -1;
  146.     for (int i = 1;  i < m_ShownList->size()+1;  ++i) {
  147.         if ( m_ShownList->selected(i)  &&  start == -1) {
  148.             start = i;
  149.         } else if ( !m_ShownList->selected(i)  &&  start != -1) {
  150.             stop = i - 1;
  151.             break;
  152.         }
  153.     }
  154.     if (start == -1) {
  155.         return;
  156.     }
  157.     if (stop == -1) {
  158.         stop = m_ShownList->size();
  159.     }
  160.     // move the items...
  161.     for (i = start;  i <= stop;  ++i) {
  162.         m_HiddenList->add(m_ShownData[start - 1].second.c_str());
  163.         m_HiddenData.push_back(m_ShownData[start - 1]);
  164.         m_ShownList->remove(start);
  165.         m_ShownData.erase(m_ShownData.begin() + start - 1);
  166.     }
  167. }
  168. void CColumnSelectDlg::x_OnShow()
  169. {
  170.     int i;
  171.     int start = -1;
  172.     int stop = -1;
  173.     for (int i = 1;  i < m_HiddenList->size()+1;  ++i) {
  174.         if ( m_HiddenList->selected(i)  &&  start == -1) {
  175.             start = i;
  176.         } else if ( !m_HiddenList->selected(i)  &&  start != -1) {
  177.             stop = i - 1;
  178.             break;
  179.         }
  180.     }
  181.     if (start == -1) {
  182.         return;
  183.     }
  184.     if (stop == -1) {
  185.         stop = m_HiddenList->size();
  186.     }
  187.     // move the items...
  188.     for (i = start;  i <= stop;  ++i) {
  189.         m_ShownList->add(m_HiddenData[start - 1].second.c_str());
  190.         m_ShownData.push_back(m_HiddenData[start - 1]);
  191.         m_HiddenList->remove(start);
  192.         m_HiddenData.erase(m_HiddenData.begin() + start - 1);
  193.     }
  194. }
  195. END_NCBI_SCOPE
  196. /*
  197.  * ===========================================================================
  198.  * $Log: colselect_dlg.cpp,v $
  199.  * Revision 1000.1  2004/06/01 21:08:48  gouriano
  200.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2
  201.  *
  202.  * Revision 1.2  2004/05/21 22:27:53  gorelenk
  203.  * Added PCH ncbi_pch.hpp
  204.  *
  205.  * Revision 1.1  2003/12/09 15:51:47  dicuccio
  206.  * Deprecated Fl_Toggle_Tree - replaced with Flu_Tree_Browser.  Added CTreeBrowser
  207.  * as a standard tree interface
  208.  *
  209.  * Revision 1.6  2003/05/01 12:55:57  dicuccio
  210.  * Fixed compiler warning about signed/unsigend comparison
  211.  *
  212.  * Revision 1.5  2003/02/21 17:43:32  dicuccio
  213.  * Changed the column select dialog to avoid using a check browser - now have two
  214.  * independent lists with back-and-forth selection
  215.  *
  216.  * Revision 1.4  2003/02/05 19:58:15  dicuccio
  217.  * Implemented moving items up and down in the list
  218.  *
  219.  * Revision 1.3  2003/01/13 13:10:14  dicuccio
  220.  * Namespace clean-up.  Retired namespace gui -> converted all to namespace ncbi.
  221.  * Moved all FLUID-generated code into namespace ncbi.
  222.  *
  223.  * Revision 1.2  2003/01/08 15:04:58  dicuccio
  224.  * Moved header files out of include/ tree -> made private
  225.  *
  226.  * Revision 1.1  2003/01/03 17:36:02  dicuccio
  227.  * Initial revision
  228.  *
  229.  * ===========================================================================
  230.  */