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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: featgroup_config_dlg.cpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 21:15:13  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id $
  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 Smith
  35.  *
  36.  * File Description:
  37.  *    Test application for plugins
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <corelib/ncbiapp.hpp>
  41. #include <corelib/ncbiargs.hpp>
  42. #include <corelib/ncbienv.hpp>
  43. #include <corelib/ncbireg.hpp>
  44. #include <serial/serial.hpp>
  45. #include <serial/objostr.hpp>
  46. #include <serial/objistr.hpp>
  47. #include <corelib/ncbifile.hpp>
  48. #include <gui/config/PluginConfigCache.hpp>
  49. #include <gui/dialogs/config/config_dlg.hpp>
  50. #include <gui/widgets/seq_graphic/seqgraphic_conf.hpp>
  51. #include "featgroup_config_mediat.hpp"
  52. #include "featgroup_config_panel.hpp"
  53. USING_NCBI_SCOPE;
  54. USING_SCOPE(objects);
  55. //
  56. // a test exception class
  57. //
  58. class CPluginTestException : EXCEPTION_VIRTUAL_BASE public CException
  59. {
  60. public:
  61.     // Enumerated list of document management errors
  62.     enum EErrCode {
  63.         eTestFailed
  64.     };
  65.     // Translate the specific error code into a string representations of
  66.     // that error code.
  67.     virtual const char* GetErrCodeString(void) const
  68.     {
  69.         switch (GetErrCode()) {
  70.         case eTestFailed:   return "eTestFailed";
  71.         default:            return CException::GetErrCodeString();
  72.         }
  73.     }
  74.     NCBI_EXCEPTION_DEFAULT(CPluginTestException, CException);
  75. };
  76. class CPluginTestApp : public CNcbiApplication
  77. {
  78. public:
  79.     CPluginTestApp();
  80. private:
  81.     CRef<objects::CPluginConfigCache>  m_PCC;
  82.     virtual void Init(void);
  83.     virtual int  Run(void);
  84.     virtual void Exit(void);
  85.     void WritePluginConfig(const string& pcfile, const CPluginConfigCache& pcc);
  86.     void ReadPluginConfig(const string& pc_file);
  87.     void SetPluginConfig(CPluginConfigCache& pcc);
  88. };
  89. CPluginTestApp::CPluginTestApp()
  90. {
  91. }
  92. /////////////////////////////////////////////////////////////////////////////
  93. //  Init test for all different types of arguments
  94. void CPluginTestApp::Init(void)
  95. {
  96.     // Create command-line argument descriptions class
  97.     auto_ptr<CArgDescriptions> arg_desc(new CArgDescriptions);
  98.     // Specify USAGE context
  99.     arg_desc->SetUsageContext(GetArguments().GetProgramBasename(),
  100.                               "Test for the Configuration dialog.");
  101.     // Setup arg.descriptions for this application
  102.     SetupArgDescriptions(arg_desc.release());
  103. }
  104. int CPluginTestApp::Run(void)
  105. {
  106.     string  pcc_file("/Users/rsmith/test_config.asn");
  107.     ReadPluginConfig(pcc_file);
  108.     CRef<CSeqGraphicConfig> configSettings(new CSeqGraphicConfig(m_PCC));
  109.     // create panel
  110.     CFeatGroupConfigPanel  preference_panel;
  111.         
  112.     // create configuration mediator from data set and panel
  113.     CTestConfigMediator preference_mediator(*configSettings, preference_panel);
  114.     
  115.     // create and display dialog given the mediator.
  116.     CConfigDlg preference_dialog(preference_mediator);
  117.     EDialogReturnValue dlg_ret = preference_dialog.ShowModal();
  118.     if (eCancel != dlg_ret) {
  119.         cerr << "ok chosen" << endl;
  120.         WritePluginConfig( pcc_file, configSettings->SetConfigCache());
  121.     } else {
  122.         cerr << "cancel chosen, no processing done." << endl;
  123.     }
  124.     return 0;
  125. }
  126. void CPluginTestApp::WritePluginConfig(const string& pcfile, const CPluginConfigCache& pcc)
  127. {
  128.     try {
  129.         auto_ptr<CObjectOStream> os(CObjectOStream::Open(eSerial_AsnText, pcfile));
  130.         *os << pcc;
  131.         cerr <<  "plugin config cache written to: " << pcfile;
  132.      } catch (...) {
  133.         cerr << "Write of plugin config cache to " << pcfile << " failed";
  134.      }
  135.      
  136.      return;
  137. }
  138. void CPluginTestApp::ReadPluginConfig(const string& pcfile)
  139. {
  140.     {{
  141.         // first check if the file exists.
  142.         CFile   file(pcfile);
  143.         if ( ! file.Exists() ) {
  144.             LOG_POST( Info << "CSettings::LoadPluginConfig(): "
  145.                 "no plugin config cache found at " << pcfile);
  146.             return;
  147.         }
  148.     }}
  149.     
  150.     // try reading in ASN.1 test format
  151.     try {
  152.         auto_ptr<CObjectIStream> is(CObjectIStream::Open(eSerial_AsnText, pcfile));
  153.         CRef<CPluginConfigCache> config_cache(new CPluginConfigCache);
  154.     
  155.         *is >> *config_cache;
  156.         LOG_POST( Info << "CSettings::LoadPluginConfig(): "
  157.             "text plugin config cache read from: " << pcfile);
  158.         SetPluginConfig(*config_cache);
  159.         return;
  160.     } catch (...) {
  161.         _TRACE("read of ASN.1 text plugin config cache in " << pcfile << " failed");
  162.     }
  163.     
  164.     // try reading in ASN.1 binary format
  165.     try {
  166.         auto_ptr<CObjectIStream> is(CObjectIStream::Open(eSerial_AsnBinary, pcfile));
  167.         CRef<CPluginConfigCache> config_cache(new CPluginConfigCache);
  168.     
  169.         *is >> *config_cache;
  170.         LOG_POST( Info << "CSettings::LoadPluginConfig(): "
  171.             "binary plugin config cache read from: " << pcfile);
  172.         SetPluginConfig(*config_cache);
  173.         return;
  174.     } catch (...) {
  175.         _TRACE("read of ASN.1 binary plugin config cache in " << pcfile << " failed");
  176.     }
  177.     // if not, try reading in XML
  178.     try {
  179.         auto_ptr<CObjectIStream> is(CObjectIStream::Open(eSerial_Xml, pcfile));
  180.         CRef<CPluginConfigCache> config_cache(new CPluginConfigCache);
  181.     
  182.         *is >> *config_cache;
  183.         LOG_POST( Info << "CSettings::LoadPluginConfig(): "
  184.             "XML plugin config cache read from: " << pcfile);
  185.         SetPluginConfig(*config_cache);
  186.         return;
  187.     } catch (...) {
  188.         _TRACE("read of XML plugin config cache in " << pcfile << " failed");
  189.     }
  190.     
  191.     // Log an error and continue.
  192.     LOG_POST( Error << "CSettings::LoadPluginConfig(): "
  193.         "File does not contain a plugin config cache: " << pcfile);
  194.     
  195.     return;
  196. }
  197. void CPluginTestApp::SetPluginConfig(CPluginConfigCache& pcc)
  198. {
  199.     m_PCC.Reset(&pcc);
  200. }
  201. /////////////////////////////////////////////////////////////////////////////
  202. //  Cleanup
  203. void CPluginTestApp::Exit(void)
  204. {
  205.     SetDiagStream(0);
  206. }
  207. /////////////////////////////////////////////////////////////////////////////
  208. //  MAIN
  209. int main(int argc, const char* argv[])
  210. {
  211.     // Execute main application function
  212.     return CPluginTestApp().AppMain(argc, argv, 0, eDS_Default, 0);
  213. }
  214. /*
  215.  * ===========================================================================
  216.  * $Log: featgroup_config_dlg.cpp,v $
  217.  * Revision 1000.0  2004/06/01 21:15:13  gouriano
  218.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.3
  219.  *
  220.  * Revision 1.3  2004/05/21 22:27:40  gorelenk
  221.  * Added PCH ncbi_pch.hpp
  222.  *
  223.  * Revision 1.2  2004/02/24 16:59:03  rsmith
  224.  * update include paths.
  225.  *
  226.  * Revision 1.1  2004/02/20 16:14:18  rsmith
  227.  * Initial checkin of prototype, currenty unused code.
  228.  *
  229.  * ===========================================================================
  230.  */