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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: view_taxplot.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:01:53  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: view_taxplot.cpp,v 1000.1 2004/06/01 21:01:53 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.  *    User-modifiable implementation file for extension of Taxplot Viewer
  38.  *    
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include "view_taxplot.hpp"
  42. #include "view_taxplot_ds.hpp"
  43. #include <gui/types.hpp>
  44. #include <gui/core/plugin_utils.hpp>
  45. #include <gui/core/version.hpp>
  46. #include <gui/plugin/PluginRequest.hpp>
  47. #include <gui/plugin/PluginCommand.hpp>
  48. #include <gui/plugin/PluginCommandSet.hpp>
  49. #include <gui/plugin/PluginValue.hpp>
  50. #include <objmgr/scope.hpp>
  51. #include <serial/typeinfo.hpp>
  52. #include <objmgr/util/sequence.hpp>
  53. #include <gui/core/doc_manager.hpp>
  54. #include <gui/utils/message_box.hpp>
  55. BEGIN_NCBI_SCOPE
  56. USING_SCOPE(objects);
  57. // We include the generated _.cpp file here.  This avoids a nasty bug in some
  58. // versions of gcc in which inline functions are not intantiated.
  59. #include "view_taxplot_.cpp"
  60. // temporary...
  61. int    xTax,   yTax,   zTax;
  62. string labelx, labely, labelz;
  63. // defines : should be obtained automatically
  64. Fl_Menu_Item taxonomy[] = {
  65.     {"A. gambiae str. PEST", 0,0, (void*)"180454"},
  66.     {"A. thaliana (thale cress)",0,0,(void*)"3702"},
  67.     {"C. elegans", 0,0,(void*)"6239"},
  68.     {"C. parvum", 0,0,(void*)"5807"},
  69.     {"Candida albicans", 0,0,(void*)"5476"},
  70.     {"D. melanogaster (fruit fly)", 0,0,(void*)"7227"},
  71.     {"E. cuniculi", 0,0,(void*)"6035"},
  72.     {"E. histolytica",0,0,(void*)"5759"},
  73.     {"G. lamblia ATCC 50803", 0,0,(void*)"184922"},
  74.     {"Homo sapiens (human)", 0,0,(void*)"9606"},
  75.     {"Leishmania major", 0,0,(void*)"5664"},
  76.     {"M. grisea 70-15", 0,0,(void*)"242507"},
  77.     {"Mus musculus (house mouse)",0,0,(void*)"10090"},
  78.     {"Neurospora crassa", 0,0,(void*)"5141"},
  79.     {"P. falciparum 3D7", 0,0,(void*)"36329"},
  80.     {"P. yoelii yoelii", 0,0,(void*)"73239"},
  81.     {"Rattus norvegicus", 0,0,(void*)"10116"},
  82.     {"S. cerevisiae", 0,0,(void*)"4932"},  
  83.     {"S. pombe (fission yeast)", 0,0,(void*)"4896"},
  84.     {"Trypanosoma brucei", 0,0,(void*)"5691"},
  85.     {"Trypanosoma cruzi", 0,0,(void*)"5693"},
  86.     {0}
  87. };
  88. void cb_Tax1(Fl_Widget * widget, void * data)
  89. {
  90.     Fl_Menu_* mw = (Fl_Menu_*)widget;
  91.     const   Fl_Menu_Item* m = mw->mvalue();
  92.     xTax      = NStr::StringToInt(string((char*)m->user_data()));    
  93.     labelx    = m->label();
  94.     if(data) ((CTaxplotView*)data)->OnDocumentChanged();;
  95. }
  96. void cb_Tax2(Fl_Widget * widget, void * data)
  97. {
  98.     Fl_Menu_* mw = (Fl_Menu_*)widget;
  99.     const   Fl_Menu_Item* m = mw->mvalue();  
  100.     yTax      = NStr::StringToInt(string((char*)m->user_data()));
  101.     labely = m->label();    
  102.     if(data) ((CTaxplotView*)data)->OnDocumentChanged();;
  103. }
  104. void cb_Tax3(Fl_Widget * widget, void * data)
  105. {
  106.     Fl_Menu_* mw = (Fl_Menu_*)widget;
  107.     const   Fl_Menu_Item* m = mw->mvalue();  
  108.     zTax      = NStr::StringToInt(string((char*)m->user_data()));
  109.     labelz = m->label();
  110.     if(data) ((CTaxplotView*)data)->OnDocumentChanged();;
  111. }
  112. //
  113. // standard plugin announcement boilerplate
  114. //
  115. void CTaxplotView::GetInfo(CPluginInfo& info)
  116. {
  117.     info.Reset();
  118.     // version info macro
  119.     info.SetInfo(CPluginVersion::eMajor, CPluginVersion::eMinor, 0,
  120.                  string(__DATE__) + " " + string(__TIME__),
  121.                  "CTaxplotView",
  122.                  "Taxplot Viewer",
  123.                  "Taxplot Viewer", "");
  124.     // command info
  125.     CPluginCommandSet& cmds = info.SetCommands();
  126.     CPluginCommand&    args = cmds.AddViewCommand(eViewCommand_new_view);
  127.     
  128.     // only document            
  129.     //args.AddArgument("document", "Document", CPluginArg::eDocument);        
  130.     args.AddArgument("taxplot", "Taxplot", CShiReaderCache::GetTypeInfo());
  131. }
  132. CTaxplotView::CTaxplotView(const CPluginMessage& msg, const string& pool_name)
  133.     : CView()
  134. {
  135.     // main window
  136.     m_Window.reset(x_CreateWindow());
  137.     
  138.     // getting document
  139.     const CPluginCommand& args = msg.GetRequest().GetCommand();
  140.     const CPluginArg& arg = args["taxplot"];
  141.     const IDocument* doc = arg.GetDocument();
  142.     //IDocument* doc = const_cast<IDocument*> (&args["document"].AsDocument());
  143.     const CShiReaderCache * cache   = dynamic_cast<const CShiReaderCache*>(&args["taxplot"].AsObject());
  144.     
  145.     // setting view document
  146.     if (doc)  x_SetDocument(*doc);       
  147.     // comboboxes
  148.     m_xCombo->menu(taxonomy); m_xCombo->value(5);
  149.     m_yCombo->menu(taxonomy); m_yCombo->value(2);
  150.     m_zCombo->menu(taxonomy); m_zCombo->value(17);
  151.     // events    
  152.     m_xCombo->callback(cb_Tax1,(void*)this);  
  153.     m_yCombo->callback(cb_Tax2,(void*)this);  
  154.     m_zCombo->callback(cb_Tax3,(void*)this);
  155.     // setting initial values
  156.     cb_Tax1(m_xCombo, NULL);  
  157.     cb_Tax2(m_yCombo, NULL);  
  158.     cb_Tax3(m_zCombo, NULL); 
  159.     
  160.     
  161. }
  162. void CTaxplotView::OnViewCreated(IView& view)
  163. {       
  164. }
  165. void CTaxplotView::OnDocumentChanged()
  166. {
  167.     if (m_Document){    
  168.         SetTitle(m_Document->GetShortTitle() + ": " + GetTitle());
  169.     
  170.     
  171.         CShiReaderCache * cache   = dynamic_cast<CShiReaderCache*>(m_Document->GetObject());
  172.         if (cache) {
  173.             CTaxplotDataSource * ds = new CTaxplotDataSource(cache,  xTax, yTax, zTax);
  174.             ds->xLabel() = labelx; ds->yLabel() = labely; ds->zLabel() = labelz;                
  175.             m_DataSource.Reset(ds);  
  176.             m_AlnInfo->SetDataSource(m_DataSource);
  177.         }
  178.         else {
  179.             throw runtime_error("No valid Taxplot data found in this document");            
  180.         }
  181.     }
  182. }
  183. void CTaxplotView::x_OnHelp()
  184. {
  185. }
  186. const string& CTaxplotView::GetTitle(void) const
  187. {
  188.     static string s_str("Taxplot View");
  189.     return s_str;
  190. }
  191. void CTaxplotView::x_OnFileClose()
  192. {
  193.     Hide();
  194. }
  195. END_NCBI_SCOPE
  196. /*
  197.  * ===========================================================================
  198.  * $Log: view_taxplot.cpp,v $
  199.  * Revision 1000.1  2004/06/01 21:01:53  gouriano
  200.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  201.  *
  202.  * Revision 1.7  2004/05/21 22:27:49  gorelenk
  203.  * Added PCH ncbi_pch.hpp
  204.  *
  205.  * Revision 1.6  2004/05/20 21:40:46  tereshko
  206.  * Argument retrieval changed to uniform way with identifier taxplot
  207.  *
  208.  * Revision 1.5  2004/04/07 13:05:11  dicuccio
  209.  * Changed view API - require CPluginMessage instead of CPluginArgSet
  210.  *
  211.  * Revision 1.4  2004/01/15 21:36:57  tereshko
  212.  * Updates to UI, event hooks
  213.  *
  214.  * Revision 1.3  2004/01/15 17:01:09  tereshko
  215.  * Fix for 64 bit compiler
  216.  *
  217.  * Revision 1.2  2004/01/14 23:22:42  tereshko
  218.  * Removed unused pointer
  219.  *
  220.  * Revision 1.1  2004/01/14 16:37:05  tereshko
  221.  * Taxplot viewer, initial revision
  222.  *
  223.  * ===========================================================================
  224.  */