NCBI C++ ToolKit
suppress_genes.cpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 /* $Id: suppress_genes.cpp 42430 2019-02-22 13:19:16Z filippov $
2  * ===========================================================================
3  *
4  * PUBLIC DOMAIN NOTICE
5  * National Center for Biotechnology Information
6  *
7  * This software/database is a "United States Government Work" under the
8  * terms of the United States Copyright Act. It was written as part of
9  * the author's official duties as a United States Government employee and
10  * thus cannot be copyrighted. This software/database is freely available
11  * to the public for use. The National Library of Medicine and the U.S.
12  * Government have not placed any restriction on its use or reproduction.
13  *
14  * Although all reasonable efforts have been taken to ensure the accuracy
15  * and reliability of the software and data, the NLM and the U.S.
16  * Government do not and cannot warrant the performance or results that
17  * may be obtained by using this software or data. The NLM and the U.S.
18  * Government disclaim all warranties, express or implied, including
19  * warranties of performance, merchantability or fitness for any particular
20  * purpose.
21  *
22  * Please cite the author in any work or product based on this material.
23  *
24  * ===========================================================================
25  *
26  * Authors: Igor Filippov
27  */
28 
29 
30 #include <ncbi_pch.hpp>
31 #include <sstream>
35 #include <objmgr/feat_ci.hpp>
36 #include <objmgr/bioseq_ci.hpp>
41 #include <gui/objutils/label.hpp>
44 #include <objmgr/util/feature.hpp>
46 #include <gui/objutils/utils.hpp>
48 
50 
52 
53 
54 
55 IMPLEMENT_DYNAMIC_CLASS( CSuppressGenes, CBulkCmdDlg )
56 
57 
58 BEGIN_EVENT_TABLE( CSuppressGenes, CBulkCmdDlg )
59 
61 
63 {
64  Init();
65 }
66 
68  wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
69  : CBulkCmdDlg(wb)
70 {
71  Init();
72  Create(parent, id, caption, pos, size, style);
73 }
74 
75 
76 bool CSuppressGenes::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
77 {
78  SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
79  CBulkCmdDlg::Create( parent, id, caption, pos, size, style );
80 
82  if (GetSizer())
83  {
84  GetSizer()->SetSizeHints(this);
85  }
86  Centre();
87 
88  return true;
89 }
90 
91 
93 {
94 }
95 
96 
97 /*!
98  * Member initialisation
99  */
100 
102 {
103  set<string> existing;
104  m_Types.clear();
105  m_Descriptions.clear();
106 
108  vector<const CFeatListItem *> feat_list = GetSortedFeatList(m_TopSeqEntry);
109  ITERATE(vector<const CFeatListItem *>, ft_it, feat_list) {
110  const CFeatListItem& item = **ft_it;
111  string desc = item.GetDescription();
112  int feat_type = item.GetType();
113  int feat_subtype = item.GetSubtype();
114  m_Types[pair<int,int>(feat_type,feat_subtype)] = desc;
115  if (existing.find(desc) == existing.end())
116  {
117  existing.insert(desc);
118  m_Descriptions.push_back(desc);
119  if (feat_subtype == CSeqFeatData::eSubtype_any)
120  m_SubtypeAnyFlag.push_back(true);
121  else
122  m_SubtypeAnyFlag.push_back(false);
123  }
124  }
125 
126  m_ListCtrl = NULL;
127  m_ErrorMessage = "No feature found";
128 }
129 
130 
131 
132 
134 {
135 
136  wxBoxSizer* itemBoxSizer1 = new wxBoxSizer(wxVERTICAL);
137  this->SetSizer(itemBoxSizer1);
138 
139  wxPanel *itemDialog1 = new wxPanel(this);
140  itemBoxSizer1->Add(itemDialog1, 1, wxGROW, 0);
141 
142  wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
143  itemDialog1->SetSizer(itemBoxSizer2);
144 
145  m_ListCtrl = new wxListCtrl( itemDialog1, ID_SUPPRESS_GENES_LISTCTRL, wxDefaultPosition, wxSize(250, 200), wxLC_REPORT );
146  itemBoxSizer2->Add(m_ListCtrl, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
147 
148  m_ListCtrl->InsertColumn(0," Feature",wxLIST_FORMAT_LEFT,237);
149 
150  for (unsigned int i=0; i<m_Descriptions.size(); i++)
151  m_ListCtrl->InsertItem(i,ToWxString(m_Descriptions[i]));
152 
153 
154  wxStaticBox* itemStaticBoxSizer17Static = new wxStaticBox(itemDialog1, wxID_ANY, wxEmptyString);
155  wxStaticBoxSizer* itemStaticBoxSizer17 = new wxStaticBoxSizer(itemStaticBoxSizer17Static, wxHORIZONTAL);
156  itemBoxSizer2->Add(itemStaticBoxSizer17, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
157 
158  wxStaticText* itemStaticText4 = new wxStaticText( itemDialog1, wxID_STATIC, _("Where feature text"), wxDefaultPosition, wxDefaultSize, 0 );
159  itemStaticBoxSizer17->Add(itemStaticText4, 0, wxALIGN_TOP|wxALL, 5);
160 
161  m_StringConstraintPanel = new CStringConstraintPanel( itemDialog1, false, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
162  itemStaticBoxSizer17->Add(m_StringConstraintPanel, 0, wxALIGN_TOP|wxALL|wxFIXED_MINSIZE, 0);
164 
165 
166  COkCancelPanel *OkCancel = new COkCancelPanel( itemDialog1, ID_SUPPRESS_GENES_OKCANCEL, wxDefaultPosition, wxSize(100, 100), 0 );
167  itemBoxSizer2->Add(OkCancel, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
168 }
169 
170 
171 /*!
172  * Should we show tooltips?
173  */
174 
176 {
177  return true;
178 }
179 
180 /*!
181  * Get bitmap resources
182  */
183 
184 wxBitmap CSuppressGenes::GetBitmapResource( const wxString& name )
185 {
186  // Bitmap retrieval
187  wxUnusedVar(name);
188  return wxNullBitmap;
189 }
190 
191 /*!
192  * Get icon resources
193  */
194 
195 wxIcon CSuppressGenes::GetIconResource( const wxString& name )
196 {
197  // Icon retrieval
198  wxUnusedVar(name);
199  return wxNullIcon;
200 }
201 
203 {
204  bool modified = false;
205  bool found = false;
206 
207  if (f.IsSetXref())
208  {
210  {
211  if ((*xit)->IsSetData() && (*xit)->GetData().IsGene())
212  {
213  found = true;
214  if (!(*xit)->GetData().GetGene().IsSuppressed())
215  {
216  (*xit)->SetData().SetGene().Reset();
217  modified = true;
218  }
219  break;
220  }
221  }
222  }
223  if (!found)
224  {
225  CRef< CSeqFeatXref > gene_ref(new CSeqFeatXref);
226  gene_ref->SetData().SetGene();
227  f.SetXref().push_back(gene_ref);
228  modified = true;
229  }
230  return modified;
231 }
232 
233 
234 static void s_RenderAccList(
235  stringstream& ostream, const CUser_field::TData::TStrs& item_data, const string& title)
236 {
237  string s(title);
238  if ( !s.empty() ) {
239  s += ": ";
240  }
241 
242  list<string> refseq;
243  list<string> non_refseq;
244  ITERATE (CUser_field::TData::TStrs, it, item_data) {
247  refseq.push_back(*it);
248  } else {
249  non_refseq.push_back(*it);
250  }
251  }
252 
253  string accs;
254  if (refseq.size()) {
255  accs += NStr::Join(refseq, ", ");
256  }
257 
258  if (non_refseq.size()) {
259  if ( !accs.empty() ) {
260  accs += ", ";
261  }
262  accs += NStr::Join(non_refseq, ", ");
263  }
264 
265  if ( !accs.empty() ) {
266  s += accs;
267  } else {
268  s += "<unknown>";
269  }
270 
271  list<string> lines;
272  NStr::Wrap(s, 78, lines);
273  if ( !lines.empty() ) {
274  ITERATE (list<string>, iter, lines) {
275  if (iter != lines.begin()) {
276  ostream << " " << *iter << endl;
277  } else {
278  ostream << *iter << endl;
279  }
280  }
281  }
282 }
283 
285  stringstream& ostream, const CSeq_feat& feat, CScope& /*scope*/)
286 {
287  if ( !feat.IsSetExt() && !feat.IsSetExts()) {
288  return;
289  }
290 
291  list< CConstRef<CUser_object> > objs;
292  if (feat.IsSetExt()) {
293  CConstRef<CUser_object> o(&feat.GetExt());
294  if (o->IsSetType() && o->GetType().IsStr() && o->GetType().GetStr() == "CombinedFeatureUserObjects") {
295  ITERATE (CUser_object::TData, it, o->GetData()) {
296  const CUser_field& field = **it;
297  CConstRef<CUser_object> sub_o(&field.GetData().GetObject());
298  objs.push_back(sub_o);
299  }
300  } else {
301  objs.push_back(o);
302  }
303  }
304  if (feat.IsSetExts()) {
305  copy(feat.GetExts().begin(), feat.GetExts().end(), back_inserter(objs));
306  }
307 
308  ITERATE (list< CConstRef<CUser_object> >, obj_it, objs) {
309  const CUser_object& obj = **obj_it;
310  if ( !obj.IsSetType() ||
311  !obj.GetType().IsStr() ||
312  obj.GetType().GetStr() != "ModelEvidence") {
313  continue;
314  }
315 
316  string s;
318 
319  ostream << endl;
320 
321  ///
322  /// generation method
323  string method;
324  ostream << "Model Generation Method: ";
325  f = obj.GetFieldRef("Method");
326  if (f) {
327  method = f->GetData().GetStr();
328  ostream << method;
329  } else {
330  ostream << "<unknown>";
331  }
332 
333  ostream << endl;
334 
335  ///
336  /// list of support
337  if (method == "Chainer" || method == "Gnomon") {
338 
339  ///
340  /// scan for multiple 'Core' entries
341  f = obj.GetFieldRef("Support");
342  if (f) {
343  string core;
344  ITERATE (CUser_field::TData::TFields, it, f->GetData().GetFields()) {
345  const CUser_field& this_f = **it;
346  if (this_f.GetLabel().GetStr() == "Core") {
347  if ( !core.empty() ) {
348  core += ", ";
349  }
350  core += this_f.GetData().GetStr();
351  }
352  }
353  if ( !core.empty() ) {
354  s = "Model Based On: ";
355  s += core;
356  ostream << s << endl;
357  }
358  }
359 
360  ///
361  /// supporting proteins
362  f = obj.GetFieldRef("Support.Proteins");
363  if (f) {
364  s_RenderAccList(ostream, f->GetData().GetStrs(), "Source Proteins");
365  }
366 
367  ///
368  /// supporting proteins
369  f = obj.GetFieldRef("Support.mRNAs");
370  if (f) {
371  s_RenderAccList(ostream, f->GetData().GetStrs(), "Source mRNAs");
372  }
373  }
374  }
375 }
376 
377 static void s_Render_SeqFeat(
378  stringstream& ostream, const objects::CSeq_feat& feat, objects::CScope& scope)
379 {
380  try {
381  string text;
382  /// start with the description text
383  CLabel::GetLabel( feat, &text, CLabel::eDescription, &scope );
384  ostream << text << endl;
385 
386  /// add information about the feature's location
387  TSeqRange range = feat.GetLocation().GetTotalRange();
388  ostream << "Total Range: ";
389  switch( sequence::GetStrand(feat.GetLocation(), &scope) ){
390  case eNa_strand_plus:
391  ostream << "(+) ";
392  break;
393  case eNa_strand_minus:
394  ostream << "(-) ";
395  break;
396  default:
397  break;
398  }
399 
400  ostream << NStr::IntToString(range.GetFrom() + 1, NStr::fWithCommas)
401  << " - "
402  << NStr::IntToString(range.GetTo() + 1, NStr::fWithCommas)
403  << endl;
404 
405  ostream << "Total Length: "
406  << NStr::IntToString(range.GetLength(), NStr::fWithCommas)
407  << endl;
408 
409  ostream << "Processed Length: "
410  << NStr::IntToString(sequence::GetLength(feat.GetLocation(), &scope),
412  << endl;
413 
414  if (feat.IsSetProduct()) {
415  try {
416  string prod_len_str;
417  CBioseq_Handle h = scope.GetBioseqHandle(feat.GetProduct());
418  if (h) {
419  ostream << "Product Length: "
422  << endl;
423  }
424  }
425  catch (CException&) {
426  }
427  }
428  ostream << endl;
429 
430  /// next, include the flat file text for this feature
431  CFlatFileConfig cfg;
432  cfg.SetNeverTranslateCDS();
433 
434  /// hack: search for this feature using CFeat_CI
435  /// it'd be better to use CMappedFeat instead of CSeq_feat
437  sel.IncludeFeatSubtype(feat.GetData().GetSubtype());
438 
439  CFeat_CI feat_it(scope, feat.GetLocation(), sel);
440  for (; feat_it ; ++feat_it) {
441  if (&feat_it->GetOriginalFeature() != &feat){
442  continue;
443  }
444  string s =
445  CFlatFileGenerator::GetSeqFeatText(*feat_it, scope, cfg);
446  string::size_type pos = s.find_first_not_of(" \n\r\t");
447  if( pos != string::npos ){
448  s.erase(0, pos);
449  }
450 
451  string::size_type lpos = string::npos;
452  do {
453  pos = lpos +1;
454  lpos = s.find_first_of("\n\r", pos );
455 
456  if( lpos == string::npos ){
457  text = s.substr( pos );
458  } else {
459  text = s.substr( pos, lpos - pos );
460  }
461  ostream << text << endl;
462 
463  } while( lpos != string::npos );
464  } // for
465 
466  /// lastly, add items relating to model evidence
467  s_Render_Feat_Evidence(ostream, feat, scope);
468  }
469  catch (CException&) {
470  }
471 }
472 
474 {
475  CRef<CCmdComposite> cmd( new CCmdComposite("Suppress Genes") );
477 
478  long item = -1;
479  if (m_ListCtrl && m_TopSeqEntry)
480  {
481  for ( ;; )
482  {
483  item = m_ListCtrl->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
484  if ( item == -1 ) break;
485  string name = ToStdString(m_ListCtrl->GetItemText(item));
486  bool subtypeAnyFlag = m_SubtypeAnyFlag[item];
487  for (CFeat_CI feat (m_TopSeqEntry); feat; ++feat)
488  {
489  bool filter = false;
490  if (NStr::EqualNocase(name, "All"))
491  {
492  filter = true;
493  }
494  else if (subtypeAnyFlag)
495  {
496  int type = feat->GetOriginalFeature().GetData().Which();
497  int subtype = CSeqFeatData::eSubtype_any;
498  string desc = m_Types[pair<int,int>(type,subtype)];
499  if (desc == name)
500  filter = true;
501  }
502  else if (feat->GetOriginalFeature().CanGetData())
503  {
504  int type = feat->GetOriginalFeature().GetData().Which();
505  int subtype = feat->GetOriginalFeature().GetData().GetSubtype();
506  string desc = m_Types[pair<int,int>(type,subtype)];
507  if (desc == name)
508  filter = true;
509  }
510 
511  if (filter)
512  {
513  bool go = true;
514  if (constraint)
515  {
516  stringstream str;
517  CScope &scope = m_TopSeqEntry.GetScope();
518  s_Render_SeqFeat(str, feat->GetOriginalFeature(), scope);
519  go = constraint->DoesTextMatch(str.str());
520  }
521 
522  if (go)
523  {
524  const CSeq_feat& orig = feat->GetOriginalFeature();
525  CRef<CSeq_feat> new_feat(new CSeq_feat);
526  new_feat->Assign(orig);
527  bool modified = CreateSuppressingGeneXrefs(*new_feat);
528 
529  if (modified)
530  {
531  cmd->AddCommand(*CRef<CCmdChangeSeq_feat>(new CCmdChangeSeq_feat(feat->GetSeq_feat_Handle(), *new_feat)));
532  }
533  }
534  }
535  }
536  }
537  }
538  return cmd;
539 }
540 
541 
CBioseq_Handle –.
objects::CSeq_entry_Handle m_TopSeqEntry
bool Create(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxDEFAULT_FRAME_STYLE, const wxString &name=wxFrameNameStr)
string m_ErrorMessage
bool GetTopLevelSeqEntryAndProcessor()
CFeatListItem - basic configuration data for one "feature" type.
int GetSubtype() const
string GetDescription() const
int GetType() const
CFeat_CI –.
Definition: feat_ci.hpp:64
CFlatFileConfig & SetNeverTranslateCDS(bool val=true)
static string GetSeqFeatText(const CMappedFeat &feat, CScope &scope, const CFlatFileConfig &cfg, CRef< feature::CFeatTree > ftree=null)
CRef –.
Definition: ncbiobj.hpp:618
CScope –.
Definition: scope.hpp:92
CSeqFeatXref –.
Definition: SeqFeatXref.hpp:66
namespace ncbi::objects::
Definition: Seq_feat.hpp:58
void SetStringSelection(const wxString &str)
CRef< edit::CStringConstraint > GetStringConstraint()
CSuppressGenes()
Constructors.
virtual CRef< CCmdComposite > GetCommand()
vector< string > m_Descriptions
vector< bool > m_SubtypeAnyFlag
bool CreateSuppressingGeneXrefs(CSeq_feat &f)
wxBitmap GetBitmapResource(const wxString &name)
Retrieves bitmap resources.
static bool ShowToolTips()
Should we show tooltips?
~CSuppressGenes()
Destructor.
void CreateControls()
Creates the controls and sizers.
wxListCtrl * m_ListCtrl
bool Create(wxWindow *parent, wxWindowID id=14000, const wxString &caption=_("Suppress Genes"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX|wxTAB_TRAVERSAL)
Creation.
map< pair< int, int >, string > m_Types
wxIcon GetIconResource(const wxString &name)
Retrieves icon resources.
CStringConstraintPanel * m_StringConstraintPanel
void Init()
Initialises member variables.
CConstRef< CUser_field > GetFieldRef(const string &str, const string &delim=".", NStr::ECase use_case=NStr::eCase) const
Definition: User_object.cpp:84
IWorkbench is the central interface in the application framework.
Definition: workbench.hpp:113
void clear()
Definition: map.hpp:169
iterator_bool insert(const value_type &val)
Definition: set.hpp:149
const_iterator find(const key_type &key) const
Definition: set.hpp:137
const_iterator end() const
Definition: set.hpp:136
#define _(proto)
Definition: ct_nlmzip_i.h:78
#define wxFIXED_MINSIZE
static CS_COMMAND * cmd
Definition: ct_dynamic.c:26
static void Init(void)
Definition: cursor6.c:76
static const char * str(char *buf, int n)
Definition: stats.c:84
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
Definition: ncbimisc.hpp:815
#define NULL
Definition: ncbistd.hpp:225
static objects::SAnnotSelector GetAnnotSelector(TAnnotFlags flags=0)
request an annotation selector for a given type
Definition: utils.cpp:167
vector< const objects::CFeatListItem * > GetSortedFeatList(objects::CSeq_entry_Handle seh, size_t max=numeric_limits< size_t >::max())
static void GetLabel(const CObject &obj, string *label, ELabelType type=eDefault)
Definition: label.cpp:140
@ eDescription
Definition: label.hpp:68
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
static EAccessionInfo IdentifyAccession(const CTempString &accession, TParseFlags flags=fParse_AnyRaw)
Deduces information from a bare accession a la WHICH_db_accession; may report false negatives on prop...
Definition: Seq_id.cpp:1634
EAccessionInfo
For IdentifyAccession (below)
Definition: Seq_id.hpp:220
@ eAcc_type_mask
Definition: Seq_id.hpp:247
TSeqPos GetLength(const CSeq_id &id, CScope *scope)
Get sequence length if scope not null, else return max possible TSeqPos.
ENa_strand GetStrand(const CSeq_loc &loc, CScope *scope=0)
Returns eNa_strand_unknown if multiple Bioseqs in loc Returns eNa_strand_other if multiple strands in...
TSeqPos GetBioseqLength(void) const
SAnnotSelector & IncludeFeatSubtype(TFeatSubtype subtype)
Include feature subtype in the search.
const CSeq_feat & GetOriginalFeature(void) const
Get original feature with unmapped location/product.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
Definition: ncbistl.hpp:103
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
Definition: ncbistl.hpp:100
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
Definition: ncbistr.hpp:5086
static string Join(const TContainer &arr, const CTempString &delim)
Join strings using the specified delimiter.
Definition: ncbistr.hpp:2699
static bool EqualNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive equality of a substring with another string.
Definition: ncbistr.hpp:5355
static void Wrap(const string &str, SIZE_TYPE width, IWrapDest &dest, TWrapFlags flags, const string *prefix, const string *prefix1)
Definition: ncbistr.cpp:5338
@ fWithCommas
Use commas as thousands separator.
Definition: ncbistr.hpp:254
const TStr & GetStr(void) const
Get the variant data.
bool IsStr(void) const
Check if variant Str is selected.
Definition: Object_id_.hpp:291
bool IsSetType(void) const
type of object within class Check if a value has been assigned to Type data member.
const TData & GetData(void) const
Get the Data member data.
vector< CRef< CUser_field > > TFields
const TStr & GetStr(void) const
Get the variant data.
Definition: Object_id_.hpp:297
const TData & GetData(void) const
Get the Data member data.
const TObject & GetObject(void) const
Get the variant data.
const TLabel & GetLabel(void) const
Get the Label member data.
const TType & GetType(void) const
Get the Type member data.
vector< CStringUTF8 > TStrs
vector< CRef< CUser_field > > TData
const TExts & GetExts(void) const
Get the Exts member data.
Definition: Seq_feat_.hpp:1477
bool IsSetExt(void) const
user defined structure extension Check if a value has been assigned to Ext data member.
Definition: Seq_feat_.hpp:1207
bool IsSetExts(void) const
set of extensions; will replace 'ext' field Check if a value has been assigned to Exts data member.
Definition: Seq_feat_.hpp:1465
const TExt & GetExt(void) const
Get the Ext member data.
Definition: Seq_feat_.hpp:1219
@ eNa_strand_plus
Definition: Na_strand_.hpp:66
@ eNa_strand_minus
Definition: Na_strand_.hpp:67
@ e_Other
for historical reasons, 'other' = 'refseq'
Definition: Seq_id_.hpp:104
where boath are integers</td > n< td ></td > n</tr > n< tr > n< td > tse</td > n< td > optional</td > n< td > String</td > n< td class=\"description\"> TSE option controls what blob is orig
END_EVENT_TABLE()
int i
static void text(MDB_val *v)
Definition: mdb_dump.c:62
static MDB_envinfo info
Definition: mdb_load.c:37
range(_Ty, _Ty) -> range< _Ty >
const struct ncbi::grid::netcache::search::fields::SIZE size
void copy(Njn::Matrix< S > *matrix_, const Njn::Matrix< T > &matrix0_)
Definition: njn_matrix.hpp:613
double f(double x_, const double &y_)
Definition: njn_root.hpp:188
Utility macros and typedefs for exploring NCBI objects from seqfeat.asn.
#define EDIT_EACH_SEQFEATXREF_ON_SEQFEAT(Itr, Var)
static static static wxID_ANY
SAnnotSelector –.
Definition: type.c:6
static void s_Render_SeqFeat(stringstream &ostream, const objects::CSeq_feat &feat, objects::CScope &scope)
USING_SCOPE(ncbi::objects)
static void s_RenderAccList(stringstream &ostream, const CUser_field::TData::TStrs &item_data, const string &title)
static void s_Render_Feat_Evidence(stringstream &ostream, const CSeq_feat &feat, CScope &)
#define ID_SUPPRESS_GENES_LISTCTRL
#define ID_SUPPRESS_GENES_OKCANCEL
wxString ToWxString(const string &s)
Definition: wx_utils.hpp:173
string ToStdString(const wxString &s)
Definition: wx_utils.hpp:161
Modified on Wed Sep 04 15:05:23 2024 by modify_doxy.py rev. 669887