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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: scanner_output_dlg.cpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 20:48:49  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.14
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: scanner_output_dlg.cpp,v 1000.3 2004/06/01 20:48:49 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.  *    CScannerOutputDlg -- dialog box to display the results of running
  38.  *                         'gbench_plugin_scan'
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include "scanner_output_dlg.hpp"
  42. #include "gbench.hpp"
  43. #include <connect/ncbi_pipe.hpp>
  44. #include <gui/utils/system_path.hpp>
  45. BEGIN_NCBI_SCOPE
  46. #include "scanner_output_dlg_.cpp"
  47. CScannerOutputDlg::CScannerOutputDlg()
  48. {
  49.     m_Window.reset(x_CreateWindow());
  50.     m_Buffer.reset(new Fl_Text_Buffer());
  51.     m_Text->buffer(m_Buffer.get());
  52. }
  53. CScannerOutputDlg::~CScannerOutputDlg()
  54. {
  55.     m_Window.reset();
  56.     m_Buffer.reset();
  57. }
  58. void CScannerOutputDlg::Show(const string& plugin_path)
  59. {
  60.     if ( !m_Window.get() ) {
  61.         return;
  62.     }
  63.     m_Window->show();
  64.     m_Buffer->text("");
  65.     // pipe our command and run 'gbench_plugin_scan'
  66.     string exec_path = 
  67.         CSystemPath::ResolvePath("<std>", "bin/gbench_plugin_scan");
  68.     list<string> paths;
  69.     NStr::Split(plugin_path, ",", paths);
  70.     ITERATE (list<string>, iter, paths) {
  71.         string dir = NStr::TruncateSpaces(*iter);
  72.         string subdir;
  73.         if (dir == "<std>"  ||  dir == "<home>") {
  74.             subdir = "plugins";
  75.         }
  76.         dir = CSystemPath::ResolvePath(dir, subdir);
  77. #ifdef NCBI_OS_MSWIN
  78.         // if we're in windows, we should double quote the directory because
  79.         // any spaces in the firectory name (and there will be spaces) will be
  80.         // mis-interpreted
  81.         dir = string(""") + dir + string(""");
  82. #endif
  83.         vector<string> args;
  84.         args.push_back(dir);
  85.         CPipe pipe(exec_path.c_str(), args);
  86.         size_t bytes_read;
  87.         char buf[512];
  88.         while (pipe.Read(buf, 512, &bytes_read) == eIO_Success) {
  89.             string val(buf, bytes_read);
  90.             string::size_type pos = 0;
  91.             while ( (pos = val.find_first_of("r", pos)) != string::npos) {
  92.                 val.erase(pos, 1);
  93.             }
  94.             m_Buffer->append(val.c_str());
  95.             m_Text->scroll(m_Buffer->count_lines(0, m_Buffer->length()), 0);
  96.             Fl::wait();
  97.         }
  98.     }
  99. }
  100. END_NCBI_SCOPE
  101. /*
  102.  * ===========================================================================
  103.  * $Log: scanner_output_dlg.cpp,v $
  104.  * Revision 1000.3  2004/06/01 20:48:49  gouriano
  105.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.14
  106.  *
  107.  * Revision 1.14  2004/05/21 22:27:42  gorelenk
  108.  * Added PCH ncbi_pch.hpp
  109.  *
  110.  * Revision 1.13  2004/02/17 20:35:24  rsmith
  111.  * moved core/settings.[ch]pp and core/system_path.[ch]pp to config and utils, respectively.
  112.  *
  113.  * Revision 1.12  2003/11/26 17:11:55  dicuccio
  114.  * Fixed memory leak (Fl_Text_Buffer was dropped).  Added autoscrolling
  115.  *
  116.  * Revision 1.11  2003/09/29 15:33:39  dicuccio
  117.  * Inherit dialog from CDialog
  118.  *
  119.  * Revision 1.10  2003/09/02 23:23:57  jcherry
  120.  * Accomodated changes to CPipe
  121.  *
  122.  * Revision 1.9  2003/07/30 12:51:53  dicuccio
  123.  * Moved 'gbench_system.[h,c]pp' to 'system_path.[h,c]pp'
  124.  *
  125.  * Revision 1.8  2003/07/30 12:21:29  dicuccio
  126.  * Changed access to system paths
  127.  *
  128.  * Revision 1.7  2003/04/29 14:51:52  dicuccio
  129.  * Reworked FLUID-generated code: more explicit control over constructor, better
  130.  * memeory management
  131.  *
  132.  * Revision 1.6  2003/03/14 18:28:40  dicuccio
  133.  * Made quoting of direcotry argument conditional for Windows - quotes don't work
  134.  * in Unix.
  135.  *
  136.  * Revision 1.5  2003/03/11 15:18:57  kuznets
  137.  * iterate -> ITERATE
  138.  *
  139.  * Revision 1.4  2003/03/07 17:33:16  dicuccio
  140.  * Quote directory names passed to 'gbench_plugin_scan' so that spaces in
  141.  * directory names are adequately handled
  142.  *
  143.  * Revision 1.3  2003/03/07 17:00:49  dicuccio
  144.  * Code clean-up.  Strip 'r' from pipe output.
  145.  *
  146.  * Revision 1.2  2003/03/07 15:54:50  dicuccio
  147.  * Minor fixes to the scanner output dialog
  148.  *
  149.  * Revision 1.1  2003/02/26 19:19:06  dicuccio
  150.  * Initial revision
  151.  *
  152.  * ===========================================================================
  153.  */