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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: edit_styles_dlg.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 20:45:36  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: edit_styles_dlg.cpp,v 1000.1 2004/06/01 20:45:36 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:  Robert G. Smith
  35.  *
  36.  * File Description:
  37.  *    User-modifiable implementation file for extension of basic class, 
  38.  *      CEditStylesDlg, a prototype dialog box used for editing preferences.
  39.  *    A suitable mediator must be supplied to instantiate one.
  40.  */
  41. #include <ncbi_pch.hpp>
  42. #include <gui/dialogs/config/edit_styles_dlg.hpp>
  43. #include <gui/dialogs/config/iconfig_mediator.hpp>
  44. #include <gui/dialogs/config/config_panel.hpp>
  45. #include <gui/utils/message_box.hpp>
  46. #include <FL/fl_ask.H>
  47. BEGIN_NCBI_SCOPE
  48. #include "edit_styles_dlg_.cpp"
  49. CEditStylesDlg::CEditStylesDlg(IConfigMediator& mediator)
  50. {
  51.     m_ConfigMediator.Reset(& mediator);
  52.     m_Window.reset(x_CreateWindow());
  53.     
  54.     SetTitle(m_ConfigMediator->GetWindowTitle());
  55.     
  56.     // populate our browser
  57.     x_SetStates(m_ConfigMediator->GetStates());
  58.     // select the first thing in the state browser.
  59.     m_StyleBrowser->deselect();
  60.     m_StyleBrowser->value(1);
  61.     // OR find out what the current state is and select that.
  62.     // string first_state = m_ConfigMediator->GetCurrentState();
  63.     // x_SetSelectedState(first_state);
  64.     x_UpdateSetBtns();
  65. }
  66. void CEditStylesDlg::x_SetStates(list<string> const& states)
  67. {
  68.     m_StyleBrowser->clear();
  69.     ITERATE(list<string>, state_it, states) {
  70.         m_StyleBrowser->add(state_it->c_str());
  71.     }
  72. }
  73. //
  74. // Browser selection -> State
  75. // Return in the state param the string displayed
  76. // on the selected line in the browser.
  77. // If nothing was selected returns false and 'state'
  78. // is unmodified.
  79. //
  80. bool CEditStylesDlg::x_GetSelectedState(string& state)
  81. {
  82.     int sel_idx = m_StyleBrowser->value();
  83.     if (sel_idx == 0) {
  84.         return false;
  85.     }
  86.     
  87.     const char *browser_text = m_StyleBrowser->text(sel_idx);
  88.     if (browser_text == NULL) {
  89.         return false;
  90.     }
  91.     string the_state(browser_text);
  92.     state.swap(the_state);
  93.     return true;
  94. }
  95. // State -> Browser selection
  96. // Select the line in the browser that has text the same
  97. // as the 'state' parameter. 
  98. // Does nothing if that text was not found.
  99. void CEditStylesDlg::x_SetSelectedState(const string& state)
  100. {
  101.     int n = m_StyleBrowser->size();
  102.     int i;
  103.     for (i = 1; i <= n; ++i) {
  104.         const char *a_text = m_StyleBrowser->text(i);
  105.         if (a_text != NULL  &&  state == a_text) {
  106.             m_StyleBrowser->deselect();
  107.             m_StyleBrowser->value(i);
  108.             x_UpdateSetBtns();
  109.             return;
  110.         }
  111.     }
  112. }
  113. void CEditStylesDlg::x_SelectFirstState()
  114. {
  115.     m_StyleBrowser->deselect();
  116.     m_StyleBrowser->value(1);
  117.     x_UpdateSetBtns();
  118. }
  119. void CEditStylesDlg::x_OnAdd()
  120. {
  121.     string  new_state;
  122.     if ( m_ConfigMediator->AddState(new_state) ) {
  123.         x_SetStates(m_ConfigMediator->GetStates());
  124.         x_SetSelectedState(new_state);
  125.         m_Window->redraw();
  126.     } else {
  127.         NcbiMessageBox("Failed to add new state.");
  128.     }
  129. }
  130. void CEditStylesDlg::x_OnCopy()
  131. {
  132.     string this_state;
  133.     if ( ! x_GetSelectedState(this_state) ) {
  134.         return;
  135.     }
  136.     
  137.     string  new_state;
  138.     if ( m_ConfigMediator->DuplicateState(this_state, new_state) ) {
  139.         x_SetStates(m_ConfigMediator->GetStates());
  140.         x_SetSelectedState(new_state);
  141.         m_Window->redraw();
  142.     } else {
  143.         string msg("Can not copy ");
  144.         msg += this_state;
  145.         NcbiMessageBox(msg);
  146.     }
  147. }
  148. void CEditStylesDlg::x_OnRename()
  149. {
  150.     string this_state;
  151.     if ( ! x_GetSelectedState(this_state) ) {
  152.         return;
  153.     }
  154.     
  155.     // can we do this?
  156.     if ( ! m_ConfigMediator->CanRenameState(this_state)) {
  157.         string msg("Can not rename ");
  158.         msg += this_state;
  159.         NcbiMessageBox(msg);
  160.         return;
  161.     }
  162.     
  163.     // Get a new name from the user (requested name).
  164.     const char * req_state_cp =
  165.         fl_input("Rename %s as:", this_state.c_str(), this_state.c_str());
  166.     if (req_state_cp == 0) { // Canceled input
  167.         return;
  168.     }
  169.     string  req_state(req_state_cp);
  170.     if (req_state.empty()  ||  req_state  ==  this_state) {
  171.         // requested name blank or no change to the name.
  172.         return;
  173.     }
  174.     
  175.     // rename it, get back the new name actually used.
  176.     string  new_state;
  177.     if ( m_ConfigMediator->RenameState(this_state, req_state, new_state) ) {
  178.         x_SetStates(m_ConfigMediator->GetStates());
  179.         x_SetSelectedState(new_state);
  180.         // did we rename the mediator's currently loaded state?
  181.         if (m_ConfigMediator->GetCurrentState() == this_state) {
  182.             m_ConfigMediator->Load(new_state);
  183.         }
  184.         m_Window->redraw();
  185.     } else {
  186.         // something else went wrong.
  187.         string msg("Can not rename ");
  188.         msg += this_state;
  189.         NcbiMessageBox(msg);
  190.     }
  191. }
  192. void CEditStylesDlg::x_OnDelete()
  193. {
  194.     string this_state;
  195.     if ( ! x_GetSelectedState(this_state) ) {
  196.         return;
  197.     }
  198.     
  199.     if ( m_ConfigMediator->DeleteState(this_state) ) {
  200.         m_StyleBrowser->deselect();
  201.         x_SetStates(m_ConfigMediator->GetStates());
  202.         
  203.         // did we delete the currently loaded state?
  204.         if (m_ConfigMediator->GetCurrentState() == this_state) {
  205.             // select and load the first state in the list.
  206.             x_SelectFirstState();
  207.             string first_state;
  208.             x_GetSelectedState(first_state);
  209.             m_ConfigMediator->Load(first_state);
  210.         }
  211.         m_Window->redraw();
  212.     } else {
  213.         string msg("Can not delete ");
  214.         msg += this_state;
  215.         NcbiMessageBox(msg);
  216.     }
  217. }
  218. void CEditStylesDlg::x_UpdateSetBtns()
  219. {
  220.     bool    delRenameOn = true;
  221.     
  222.     string this_state;
  223.     if ( x_GetSelectedState(this_state) ) {
  224.         if ( ! m_ConfigMediator->CanRenameState(this_state)) {
  225.             delRenameOn = false;
  226.         }
  227.     }
  228.     
  229.     if (delRenameOn) {
  230.         m_RenameBtn->activate();
  231.         m_DeleteBtn->activate();
  232.     } else {
  233.         m_RenameBtn->deactivate();
  234.         m_DeleteBtn->deactivate();
  235.     }
  236.      
  237. }
  238. END_NCBI_SCOPE
  239. /*
  240.  * ===========================================================================
  241.  * $Log: edit_styles_dlg.cpp,v $
  242.  * Revision 1000.1  2004/06/01 20:45:36  gouriano
  243.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  244.  *
  245.  * Revision 1.3  2004/05/21 22:27:41  gorelenk
  246.  * Added PCH ncbi_pch.hpp
  247.  *
  248.  * Revision 1.2  2004/01/08 13:24:03  rsmith
  249.  * fix button updating.
  250.  *
  251.  * Revision 1.1  2004/01/02 21:04:21  rsmith
  252.  * initial checkin
  253.  *
  254.  * Revision 1.1  2003/12/30 14:09:38  dicuccio
  255.  * Initial check-in - moved from gui/config
  256.  *
  257.  * Revision 1.5  2003/12/29 14:38:14  rsmith
  258.  * take out SetTitle since it is supplied by the parent class.
  259.  *
  260.  * Revision 1.4  2003/11/21 12:52:25  rsmith
  261.  * Fix bug with renaming loaded set of values.
  262.  *
  263.  * Revision 1.3  2003/11/18 20:23:46  rsmith
  264.  * Various bug fixes and enhancements.
  265.  *
  266.  * Revision 1.2  2003/10/14 12:48:54  dicuccio
  267.  * Inherit from CDialog.  Fix resizing issues.  Standardized widget sizes.
  268.  *
  269.  * Revision 1.1  2003/10/10 17:43:42  rsmith
  270.  * moved from gui/core to gui/config
  271.  *
  272.  * Revision 1.1  2003/09/26 18:15:31  rsmith
  273.  * plugin configration data and dialog
  274.  *
  275.  * ===========================================================================
  276.  */