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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: browser_config.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 20:47:40  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: browser_config.cpp,v 1000.2 2004/06/01 20:47:40 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:  Josh Cherry
  35.  *
  36.  * File Description:  Configure things so that gbench MIME types
  37.  *                    launch this copy of gbench
  38.  *
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include "browser_config.hpp"
  42. #ifdef NCBI_OS_MSWIN
  43. #include "windows_registry.hpp"
  44. #endif
  45. #include <corelib/ncbiapp.hpp>
  46. #include <gui/objutils/utils.hpp>
  47. #include <gui/utils/system_path.hpp>
  48. BEGIN_NCBI_SCOPE
  49. #ifdef NCBI_OS_MSWIN
  50. // Set the appropriate Windows registry variables.
  51. // class_name is just a name that gets used in the registry;
  52. // something like "gbench.asntext" seems appropriate.
  53. static void s_RegisterMimeType(EHkey root_key, const string& mime_type,
  54.                                const string& extension,
  55.                                const string& command_line,
  56.                                const string& class_name,
  57.                                const string& description)
  58. {
  59.     
  60.     SetWinRegVariable(root_key, 
  61.         "Software\CLASSES\MIME\Database\Content Type\" + mime_type,
  62.         "Extension", extension);
  63.     
  64.     
  65.     SetWinRegVariable(root_key, 
  66.         "Software\CLASSES\" + class_name,
  67.         "", description);
  68.     
  69.     SetWinRegVariable(root_key, 
  70.         "Software\CLASSES\" + class_name + "\shell",
  71.         "", "open");
  72.     
  73.     SetWinRegVariable(root_key, 
  74.         "Software\CLASSES\" + class_name + "\shell\open",
  75.         "", "open");
  76.     
  77.     SetWinRegVariable(root_key, 
  78.         "Software\CLASSES\" + class_name + "\shell\open\command",
  79.         "", command_line);
  80.     
  81.     
  82.     SetWinRegVariable(root_key, 
  83.         "Software\CLASSES\" + extension,
  84.         "", class_name);
  85.     
  86.     SetWinRegVariable(root_key, 
  87.         "Software\CLASSES\" + extension,
  88.         "Content Type", mime_type);
  89.     
  90.     SetWinRegVariable(root_key, 
  91.         "Software\CLASSES\" + extension + "\" + class_name,
  92.         "", "");
  93.     
  94.     SetWinRegVariable(root_key, 
  95.         "Software\CLASSES\" + extension + "\" + class_name + "\ShellNew",
  96.         "", "");
  97.     
  98. }
  99. #endif  // NCBI_OS_MSWIN
  100. // For windows, set a bunch of stuff in the registry.  Both IE and
  101. // Netscape/Mozilla look at this.
  102. // We associate each MIME type of interest with a file name extension,
  103. // and associate each file name extension with a command line
  104. // involving gbench.
  105. void GBenchBrowserConfig(bool whole_machine, bool remote)
  106. {
  107. #ifdef NCBI_OS_MSWIN
  108.     CNcbiApplication* app = CNcbiApplication::Instance();
  109.     _ASSERT(app);
  110. // enclose the path name in quotes
  111. string gbench_exe = """ + app->GetArguments().GetProgramName() + """;
  112.     if (remote) {
  113.         gbench_exe += " -remote";
  114.     } else {
  115.         gbench_exe += " -noremote";
  116.     }
  117. EHkey root_key;
  118.     if (whole_machine) {
  119.         root_key = eHkey_local_machine;
  120.     } else {
  121.         root_key = eHkey_current_user;
  122.     }
  123.     s_RegisterMimeType(root_key, "application/x-gbench",
  124.         ".gbench", gbench_exe + " -t auto "%1"", "gbench.auto",
  125.         "Genome Workbench input file");
  126.     
  127.     s_RegisterMimeType(root_key, "application/x-gbench-asntext",
  128.         ".gbasntx", gbench_exe + " -t asntext "%1"", "gbench.asntext",
  129.         "Genome Workbench ASN.1 text");
  130.     
  131.     s_RegisterMimeType(root_key, "application/x-gbench-asnbin",
  132.         ".gbasnbn", gbench_exe + " -t asnbin "%1"", "gbench.asnbin",
  133.         "Genome Workbench ASN.1 binary");
  134.     
  135.     s_RegisterMimeType(root_key, "application/x-gbench-xml",
  136.         ".gbxml", gbench_exe + " -t xml "%1"", "gbench.xml",
  137.         "Genome Workbench XML");
  138.     
  139.     s_RegisterMimeType(root_key, "application/x-gbench-fasta",
  140.         ".gbfasta", gbench_exe + " -t fasta "%1"", "gbench.fasta",
  141.         "Genome Workbench FASTA format file");
  142.     
  143.     s_RegisterMimeType(root_key, "application/x-gbench-newick",
  144.         ".gbnewic", gbench_exe + " -t newick "%1"", "gbench.newick",
  145.         "Genome Workbench Newick format tree file");
  146.     
  147.     s_RegisterMimeType(root_key, "application/x-gbench-textalign",
  148.         ".gbtxaln", gbench_exe + " -t textalign "%1"", "gbench.textalign",
  149.         "Genome Workbench text format sequence alignment");
  150. #else  // some kind of unix
  151.     // For unix we'll just manipulate the user's .mailcap file.
  152.     // Netscape/Mozilla looks at this.  Unfortunately Opera and
  153.     // Konqueror don't.
  154.     string mailcap_path = CDir::GetHome() + ".mailcap";
  155.     CFile orig_mailcap_file(mailcap_path);
  156.     bool orig_mailcap_exists = orig_mailcap_file.Exists();
  157.     if (orig_mailcap_exists) {
  158.         orig_mailcap_file.Rename(orig_mailcap_file.GetPath()
  159.             + "-gbench-backup");
  160.     }
  161.     CNcbiOfstream new_mailcap(mailcap_path.c_str());
  162.     if (orig_mailcap_exists) {
  163.         CNcbiIfstream orig_mailcap(orig_mailcap_file.GetPath().c_str());
  164.         string line;
  165.         while (getline(orig_mailcap, line)) {
  166.             if (!NStr::StartsWith(line, "application/x-gbench",
  167.                 NStr::eNocase)) {
  168.                 new_mailcap << line << 'n';
  169.             }
  170.         }
  171.     }
  172.     
  173.     static const string sc_Types[] = {"asntext", "asnbin", "xml", "newick",
  174.         "textalign", "fasta"};
  175.     
  176.     string bin_dir = CSystemPath::GetStdPath() + "/bin/";
  177.     string remoteness;
  178.     if (remote) {
  179.         remoteness = "remote";
  180.     } else {
  181.         remoteness = "noremote";
  182.     }
  183.     new_mailcap << "application/x-gbench; "
  184.                 << bin_dir << "gbench_" << remoteness << "_auto %s" << 'n';
  185.     for (unsigned int i = 0;
  186.     i < sizeof(sc_Types) / sizeof(string);  ++i) {
  187.         new_mailcap << "application/x-gbench-" << sc_Types[i] << "; "
  188.             << bin_dir << "gbench_" << remoteness << "_" << sc_Types[i]
  189.             << " %s" << 'n';
  190.     }
  191. #endif
  192. }
  193. END_NCBI_SCOPE
  194. /*
  195.  * ===========================================================================
  196.  * $Log: browser_config.cpp,v $
  197.  * Revision 1000.2  2004/06/01 20:47:40  gouriano
  198.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  199.  *
  200.  * Revision 1.6  2004/05/21 22:27:42  gorelenk
  201.  * Added PCH ncbi_pch.hpp
  202.  *
  203.  * Revision 1.5  2004/05/03 13:01:25  dicuccio
  204.  * gui/utils --> gui/objutils where needed
  205.  *
  206.  * Revision 1.4  2004/04/12 20:16:29  jcherry
  207.  * Support "noremote" configuration option for unix too
  208.  *
  209.  * Revision 1.3  2004/04/12 18:14:31  dicuccio
  210.  * Made browser config API standard on all platforms.
  211.  *
  212.  * Revision 1.2  2004/04/09 17:24:47  jcherry
  213.  * Implemented browser configuration for Windows, and changed how
  214.  * it works on unix for consistency
  215.  *
  216.  * Revision 1.1  2004/04/07 21:04:10  jcherry
  217.  * Initial version
  218.  *
  219.  * ===========================================================================
  220.  */