test_taxtree.cpp
来自「ncbi源码」· C++ 代码 · 共 308 行
CPP
308 行
/* * =========================================================================== * PRODUCTION $Log: test_taxtree.cpp,v $ * PRODUCTION Revision 1000.2 2004/06/01 21:13:30 gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9 * PRODUCTION * =========================================================================== *//* $Id: test_taxtree.cpp,v 1000.2 2004/06/01 21:13:30 gouriano Exp $ * =========================================================================== * * PUBLIC DOMAIN NOTICE * National Center for Biotechnology Information * * This software / database is a "United States Government Work" under the * terms of the United States Copyright Act. It was written as part of * the author's official duties as a United States Government employee and * thus cannot be copyrighted. This software / database is freely available * to the public for use. The National Library of Medicine and the U.S. * Government have not placed any restriction on its use or reproduction. * * Although all reasonable efforts have been taken to ensure the accuracy * and reliability of the software and data, the NLM and the U.S. * Government do not and cannot warrant the performance or results that * may be obtained by using this software or data. The NLM and the U.S. * Government disclaim all warranties, express or implied, including * warranties of performance, merchantability or fitness for any particular * purpose. * * Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors: Mike DiCuccio * * File Description: * */#include <ncbi_pch.hpp>#include <corelib/ncbistd.hpp>#include <corelib/ncbiapp.hpp>#include <corelib/ncbienv.hpp>#include <corelib/ncbiargs.hpp>#include <gui/utils/fltk_utils.hpp>#include <gui/utils/message_box.hpp>#include <gui/widgets/fl/status_bar_ex.hpp>#include <gui/widgets/tax_tree/tax_tree.hpp>#include <gui/widgets/tax_tree/tax_tree_ds.hpp>#include <objects/entrez2/entrez2_client.hpp>#include <objects/entrez2/Entrez2_eval_boolean.hpp>#include <objects/entrez2/Entrez2_boolean_exp.hpp>#include <objects/entrez2/Entrez2_boolean_element.hpp>#include <objects/entrez2/Entrez2_boolean_reply.hpp>#include <objects/entrez2/Entrez2_id_list.hpp>#include <objmgr/object_manager.hpp>#include <objmgr/scope.hpp>#include <objtools/data_loaders/genbank/gbloader.hpp>#include <gui/utils/dialog.hpp>#include <FL/Fl.H>#include <FL/Fl_Double_Window.H>#include <FL/Fl_Menu_Bar.H>#include <FL/Fl_Group.H>#include <FL/Fl_Box.H>#include <FL/Fl_Input.H>#include <FL/Fl_Choice.H>// #include "entrez2_ds.hpp"BEGIN_NCBI_SCOPEUSING_SCOPE(ncbi::objects);#include "test_taxtree_.cpp"CTaxTreeTestDlg::CTaxTreeTestDlg(){ m_Window.reset(x_CreateWindow()); m_Tree->SetReporter(m_StatusBar);}void CTaxTreeTestDlg::x_OnSubmitQuery(){ CFltkCursorGuard WAIT_GUARD; CStatusBarGuard LOCK(*m_StatusBar, "Submitting query..."); string query = m_Query->value(); if (query.empty()) { return; } // // prepare the Entrez query // CEntrez2_eval_boolean req; req.SetReturn_UIDs(true); CEntrez2_boolean_exp& exp = req.SetQuery(); // set the database we're querying exp.SetDb().Set("nucleotide"); // set the query CRef<CEntrez2_boolean_element> elem(new CEntrez2_boolean_element()); elem->SetStr(query); exp.SetExp().push_back(elem); // set some limits - if num > 0, we assume it's correct CRef<CEntrez2_boolean_reply> query_res; try { // now, submit our query. this gets us the UIDs we want query_res = x_GetClient().AskEval_boolean(req); const CEntrez2_id_list& ids = query_res->GetUids(); vector<int> uids; uids.reserve(ids.GetNum()); _TRACE("query: " << query << " UIDs: " << ids.GetNum()); CTaxTreeDS_ObjMgr::TUidVec seq_ids; seq_ids.reserve(uids.size()); CEntrez2_id_list::TConstUidIterator iter = ids.GetConstUidIterator(); for (size_t i = 0; i < ids.GetNum(); ++i, ++iter) { uids.push_back(*iter); CRef<CSeq_id> id(new CSeq_id()); id->SetGi(*iter); seq_ids.push_back(id); } if ( !m_ObjMgr ) { m_ObjMgr.Reset(new CObjectManager()); m_ObjMgr->RegisterDataLoader(*new CGBDataLoader(), CObjectManager::eDefault); m_Scope.Reset(new CScope(*m_ObjMgr)); m_Scope->AddDefaults(); } m_DataSource.Reset(new CTaxTreeDS_ObjMgr(*m_Scope, seq_ids)); // m_DataSource.Reset(new CTaxTreeDS_Entrez2(uids)); m_Tree->SetDataSource(*m_DataSource); // m_Tree->SetGis(uids); } catch (CException& e) { LOG_POST(Info << "exception: " << e.what()); LOG_POST(Info << "query failed; reconnecting..."); }}void CTaxTreeTestDlg::x_OnShowRelatedSeqs(){ CTaxTreeDataSource::TUidVec gis; m_Tree->GetSelectedUids(gis); if (gis.size() != 1) { NcbiMessageBox("Please select one and only one sequence"); return; } CStatusBarGuard LOCK(*m_StatusBar, "Submitting query..."); int gi = gis.front(); vector<int> gis_n; x_GetClient().GetNeighbors(gi, "nucleotide", "nucleotide_nucleotide", gis_n); m_StatusBar->SetMessage("Found " + NStr::IntToString(gis_n.size()) + " related sequences"); // m_Tree->SetGis(gis);}CEntrez2Client& CTaxTreeTestDlg::x_GetClient(){ if ( !m_Client ) { m_Client.Reset(new CEntrez2Client()); } return *m_Client;}class CTestTreeApp : public CNcbiApplication{private: virtual void Init(void); virtual int Run(void); virtual void Exit(void);};void CTestTreeApp::Init(void){ // Create command-line argument descriptions class auto_ptr<CArgDescriptions> arg_desc(new CArgDescriptions); // Specify USAGE context arg_desc->SetUsageContext(GetArguments().GetProgramBasename(), "CTreeBrowser demo program"); // Setup arg.descriptions for this application SetupArgDescriptions(arg_desc.release());}int CTestTreeApp::Run(void){ // Get arguments CArgs args = GetArgs(); char *argv[1]; argv[0] = "app"; CTaxTreeTestDlg window; window.Show(1, argv); return 0;}/////////////////////////////////////////////////////////////////////////////// Cleanupvoid CTestTreeApp::Exit(void){ SetDiagStream(0);}/////////////////////////////////////////////////////////////////////////////// MAINEND_NCBI_SCOPEUSING_SCOPE(ncbi);int main(int argc, const char* argv[]){ // Execute main application function return CTestTreeApp().AppMain(argc, argv, 0, eDS_Default, 0);}/* * =========================================================================== * $Log: test_taxtree.cpp,v $ * Revision 1000.2 2004/06/01 21:13:30 gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9 * * Revision 1.9 2004/05/28 19:27:51 dicuccio * Compilation fixes * * Revision 1.8 2004/05/21 22:27:55 gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.7 2004/05/13 17:31:46 dicuccio * Renamed data source file * * Revision 1.6 2004/04/20 20:18:37 gorelenk * Fixed error in implementations of * CTaxTreeTestDlg::x_OnShowRelatedSeqs and * CTaxTreeTestDlg::x_OnSubmitQuery . * * Revision 1.5 2004/01/28 01:08:11 ucko * Use CTaxTreeDS_ObjMgr rather than CTaxTreeDS_Entrez2, which isn't * (yet) in the tree. * * Revision 1.4 2004/01/27 18:49:26 dicuccio * Restored functionality * * Revision 1.3 2003/12/23 15:39:19 dicuccio * Altered the data source - expose an ITreeIterator; the widget no longer * directly creates a CTaxon1 class. Chaned storage notion from 'gi' to 'uid' * * Revision 1.2 2003/12/22 22:00:19 ucko * Don't try to call SetGi, since it doesn't seem to exist yet.... * * Revision 1.1 2003/12/22 19:43:01 dicuccio * Initial revision * * Revision 1.1 2003/12/09 19:08:16 dicuccio * Moved test_treebrowser from widgets/FLU/demo to here * * Revision 1.1 2003/12/09 15:51:31 dicuccio * Deprecated Fl_Toggle_Tree - replaced with Flu_Tree_Browser. Added CTreeBrowser * as a standard tree interface * * Revision 1.2 2003/08/21 12:06:42 dicuccio * Many bug fixes - Fl_Toggle_Tree is nearly completed. Reimplemented correct * clipping of the widget to its extent. Added scroll bar (not yet working). * Removed dead code * * Revision 1.1 2003/07/30 12:25:25 dicuccio * Initial revision * * =========================================================================== */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?