entrez_record_table.cpp
来自「ncbi源码」· C++ 代码 · 共 395 行
CPP
395 行
/* * =========================================================================== * PRODUCTION $Log: entrez_record_table.cpp,v $ * PRODUCTION Revision 1000.0 2004/06/01 21:26:40 gouriano * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.2 * PRODUCTION * =========================================================================== *//* $Id: entrez_record_table.cpp,v 1000.0 2004/06/01 21:26:40 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: * CGBSearchPlugin - load sequence information form Genbank. */#include <ncbi_pch.hpp>#include <gui/widgets/fl/menu.hpp>#include <gui/core/algo_menu.hpp>#include "entrez_record_table.hpp"#include <gui/utils/message_box.hpp>#include <gui/objutils/label.hpp>#include <gui/core/doc_manager.hpp>#include <gui/core/plugin_handle.hpp>#include <gui/core/plugin_registry.hpp>#include <gui/core/plugin_utils.hpp>#include <gui/plugin/PluginArg.hpp>#include <gui/plugin/PluginValue.hpp>#include <objmgr/bioseq_handle.hpp>#include <objmgr/scope.hpp>#include <objects/seq/Seq_annot.hpp>BEGIN_NCBI_SCOPEUSING_SCOPE(objects);CEntrezRecordTable::CEntrezRecordTable(int x, int y, int w, int h, const char* label) : TParent(x, y, w, h, label) , m_Reporter(NULL){ m_Handler.StandardConfig(); SetCellBox(CFltkUtils::eBox_RightEdge);}void CEntrezRecordTable::SetReporter(IReporter* reporter){ m_Reporter = reporter;}bool CEntrezRecordTable::SetDatabase(const string& db){ m_DbName = db; try { IEntrezDBHandler& handler = m_DbManager.GetHandler(m_DbName); return true; } catch (...) { return false; }}void CEntrezRecordTable::GetDatabases(list<string>& db){ CEntrezDBManager::TEntries entries; m_DbManager.GetDatabases(entries); ITERATE (CEntrezDBManager::TEntries, iter, entries) { db.push_back(iter->visible_db_name); }}void CEntrezRecordTable::Query(const string& terms, size_t& total_count, size_t start, size_t visible){ Clear(); redraw(); // get our handler try { // set some limits - if num > 0, we assume it's correct IEntrezDBHandler& handler = m_DbManager.GetHandler(m_DbName); CRef<objects::CEntrez2_docsum_list> docsums = handler.Query(terms, total_count, start, visible); // // set our columns up correctly // vector<IEntrezDBHandler::SHeaderInfo> headers; handler.GetHeaders(headers); SetCols(0); ITERATE (vector<IEntrezDBHandler::SHeaderInfo>, iter, headers) { SetColumn(iter - headers.begin(), iter->name, eString, FL_ALIGN_LEFT, iter->rel_width); } // // now, add the docsums to the list... // we only want certain fields from each docsum // SetRows(0); if (visible) { Reserve(visible); } else { Reserve(total_count); } if (docsums.GetPointer() && docsums->IsSetList() && docsums->GetList().size() != 0) { vector<string> cols; size_t row = 0; NON_CONST_ITERATE(CEntrez2_docsum_list::TList, iter, docsums->SetList()) { const CEntrez2_docsum& docsum = **iter; cols.clear(); handler.Format(docsum, cols); ITERATE (vector<string>, col_iter, cols) { SetCell(row, col_iter - cols.begin(), *col_iter); } SetData(row).Reset(*iter); ++row; } } // // add a nice status message // if (m_Reporter) { string str("Search Results"); if (docsums.GetPointer() && docsums->GetCount() != 0) { int start_idx = start + 1; int end_idx = start_idx + visible; if (visible == -1) { end_idx = start_idx + docsums->GetCount(); } end_idx -= 1; end_idx = min(end_idx, start_idx + docsums->GetCount()); str += " - Showing "; str += NStr::IntToString(start_idx) + " - "; str += NStr::IntToString(end_idx) + " of "; str += NStr::IntToString(total_count); str += " matching records."; } else { str += " - No records found."; } m_Reporter->SetMessage(str); m_Reporter->SetPctCompleted(0); } // finally, save our query string m_Query = terms; } catch (CException& e) { string str("Can't submit query:\n"); str += e.GetMsg(); NcbiMessageBox(str); } catch (std::exception& e) { string str("Can't submit query:\n"); str += e.what(); NcbiMessageBox(str); } catch (...) { }}#if 0void CEntrezRecordTable::GetSelections(TConstScopedObjects& objs) const{ CEntrez2_docsum_list docsums; for (size_t i = 0; i < GetRows(); ++i) { if ( !IsRowSelected(i) ) { continue; } CRef<CEntrez2_docsum> ref = GetData(i); docsums.SetList().push_back(ref); } docsums.SetCount(docsums.GetList().size()); // retrieve our handler and get our IDs. try { IEntrezDBHandler& handler = m_DbManager.GetHandler(m_DbName); IEntrezDBHandler::TIds ids = handler.GetSeqIds(docsums); ITERATE (IEntrezDBHandler::TIds, iter, ids) { SConstScopedObject obj; obj.object.Reset(iter->GetPointer()); objs.push_back(obj); } } catch (...) { }}void CEntrezRecordTable::SetSelections(const TConstScopedObjects& objs){}#endifvoid CEntrezRecordTable::OnNewDocument(){ try { IEntrezDBHandler& handler = m_DbManager.GetHandler(m_DbName); CPluginArg::TValues value_list; for (size_t i = 0; i < GetRows(); ++i) { if ( !IsRowSelected(i) ) { continue; } CRef<CScope> scope(new CScope(CDocManager::GetObjectManager())); scope->AddDefaults(); IEntrezDBHandler::TIds ids = handler.GetSeqIds(*GetData(i)); size_t idx = 0; ITERATE (IEntrezDBHandler::TIds, iter, ids) { const CSeq_id& id = **iter; CBioseq_Handle handle = scope->GetBioseqHandle(id); if (handle) { string id_str; CLabel::GetLabel(id, &id_str, CLabel::eDefault, scope); CRef<CPluginValue> value(new CPluginValue()); value->SetString(id_str); value_list.push_back(value); if (m_Reporter) { string msg("Loaded sequence "); msg += id_str; m_Reporter->SetMessage(msg); int pct = 100 * ++idx / ids.size(); m_Reporter->SetPctCompleted(pct); } } } } // now load them all CPluginHandle ph = CPluginRegistry::GetPlugin("CDataPlugin_GenbankLoader"); if (ph) { CRef<CPluginMessage> msg = ph.CreateMessage(eDataCommand_load); CPluginArg& arg = msg->SetRequest().SetCommand()["acc"]; arg.SetList(value_list); CPluginUtils::CallPlugin(*msg); } } catch (...) { }}void CEntrezRecordTable::OnNewBulkDocument(){ try { CFltkCursorGuard WAIT_GUARD; IEntrezDBHandler& handler = m_DbManager.GetHandler(m_DbName); CPluginArg::TValues value_list; IEntrezDBHandler::TIds ids; for (size_t i = 0; i < GetRows(); ++i) { if ( !IsRowSelected(i) ) { continue; } IEntrezDBHandler::TIds temp = handler.GetSeqIds(*GetData(i)); ids.insert(ids.end(), temp.begin(), temp.end()); } CRef<CSeq_annot> annot(new CSeq_annot()); string title("Query Results: '"); title += m_Query; title += "', "; title += NStr::IntToString(ids.size()); title += " sequences"; annot->AddTitle(title); annot->SetCreateDate(CTime(CTime::eCurrent)); annot->SetData().SetIds().swap(ids); CRef<CScope> scope(new CScope(CDocManager::GetObjectManager())); scope->AddDefaults(); CDocManager::CreateDocument(*scope, *annot); CDocManager::UpdateAllViews(); } catch (...) { }}void CEntrezRecordTable::OnLoadNuclNeighbors(){}void CEntrezRecordTable::OnLoadProtNeighbors(){}enum EEntrezResultsDlgCommands { eCmd_NewDocument = eBaseCmdLast + 200, eCmd_NewBatchDocument, eCmd_LoadNucleotideNeighbors, eCmd_LoadProteinNeighbors};staticDEFINE_MENU(PopupMenu) MENU_ITEM(eCmd_NewDocument, "Open in New Document") MENU_ITEM(eCmd_NewBatchDocument, "Open in Combined Document") MENU_ITEM(eCmd_LoadNucleotideNeighbors, "Open Nucleotide Neighbors") MENU_ITEM(eCmd_LoadProteinNeighbors, "Open Protein Neighbors")END_MENU()BEGIN_CMD_MAP(CEntrezRecordTable, CCommandTarget) ON_COMMAND(eCmd_NewDocument, &CEntrezRecordTable::OnNewDocument) ON_COMMAND(eCmd_NewBatchDocument, &CEntrezRecordTable::OnNewBulkDocument) ON_COMMAND(eCmd_LoadNucleotideNeighbors, &CEntrezRecordTable::OnLoadNuclNeighbors) ON_COMMAND(eCmd_LoadProteinNeighbors, &CEntrezRecordTable::OnLoadProtNeighbors)END_CMD_MAP()int CEntrezRecordTable::handle(int event){ m_Handler.OnFLTKEvent(event); switch (m_Handler.GetGUISignal()) { case CGUIEvent::ePopupSignal: {{ CPopupMenu menu(x(), y(), w(), h()); menu.SetCmdTarget(static_cast<CCommandTarget*>(this)); add(&menu); menu.SetItems(PopupMenu); menu.popup(); remove(menu); }} return 1; default: break; } return TParent::handle(event);}END_NCBI_SCOPE/* * =========================================================================== * =========================================================================== */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?