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

Go to the SVN repository for this file.

1 /* $Id: seqsub_organelle_panel.cpp 47479 2023-05-02 13:24:02Z ucko $
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: Andrea Asztalos
27 *
28 */
29 
30 #include <ncbi_pch.hpp>
34 #include <objmgr/bioseq_ci.hpp>
35 #include <objmgr/seqdesc_ci.hpp>
36 #include <objmgr/scope.hpp>
37 #include <objects/seq/Seqdesc.hpp>
38 #include <objects/seq/MolInfo.hpp>
47 
48 #include <wx/sizer.h>
49 #include <wx/stattext.h>
50 #include <wx/radiobut.h>
51 #include <wx/scrolwin.h>
52 #include <wx/icon.h>
53 
55 
56 
57 /*
58  * CSeqSubOrganellePanel type definition
59  */
60 
61 IMPLEMENT_DYNAMIC_CLASS( CSeqSubOrganellePanel, wxPanel )
62 
63 
64 /*
65  * CSeqSubOrganellePanel event table definition
66  */
67 
68 BEGIN_EVENT_TABLE( CSeqSubOrganellePanel, wxPanel )
69 
70 ////@begin CSeqSubOrganellePanel event table entries
71  EVT_RADIOBUTTON( ID_MOLORGANELLEYES, CSeqSubOrganellePanel::OnOrganelleYesSelected )
72  EVT_RADIOBUTTON( ID_MOLORGANELLENO, CSeqSubOrganellePanel::OnOrganelleNoSelected )
73  EVT_HYPERLINK( ID_MOLADDORGANELLE, CSeqSubOrganellePanel::OnAddOrganelleClicked )
74  EVT_HYPERLINK( ID_MOLDELORGANELLE, CSeqSubOrganellePanel::OnDeleteOrganelleClicked )
75  EVT_HYPERLINK( ID_MOLDELONEORGANELLE, CSeqSubOrganellePanel::OnDeleteOneOrganelleClicked )
76 ////@end CSeqSubOrganellePanel event table entries
77 
79 
80 
81 /*
82  * CSeqSubOrganellePanel constructors
83  */
84 
86 {
87  Init();
88 }
89 
90 CSeqSubOrganellePanel::CSeqSubOrganellePanel( wxWindow* parent, ICommandProccessor* cmdproc, objects::CSeq_entry_Handle seh, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) :
91  m_CmdProcessor(cmdproc), m_Seh(seh)
92 {
93  Init();
94  Create(parent, id, pos, size, style);
95 }
96 
97 
98 /*
99  * CSeqSubOrganellePanel creator
100  */
101 
102 bool CSeqSubOrganellePanel::Create( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
103 {
104 ////@begin CSeqSubOrganellePanel creation
105  SetExtraStyle(wxWS_EX_VALIDATE_RECURSIVELY);
106  wxPanel::Create( parent, id, pos, size, style );
107 
108  CreateControls();
109  if (GetSizer())
110  {
111  GetSizer()->SetSizeHints(this);
112  }
113  Centre();
114 ////@end CSeqSubOrganellePanel creation
115  return true;
116 }
117 
118 
119 /*
120  * CSeqSubOrganellePanel destructor
121  */
122 
124 {
125 ////@begin CSeqSubOrganellePanel destruction
126 ////@end CSeqSubOrganellePanel destruction
127 }
128 
129 
130 /*
131  * Member initialisation
132  */
133 
135 {
136 ////@begin CSeqSubOrganellePanel member initialisation
140  m_Sizer = NULL;
141  m_LabelSizer = NULL;
145 
146 ////@end CSeqSubOrganellePanel member initialisation
147 }
148 
149 
150 /*
151  * Control creation for CSeqSubOrganellePanel
152  */
153 
155 {
156 ////@begin CSeqSubOrganellePanel content construction
157  CSeqSubOrganellePanel* itemPanel1 = this;
158 
159  wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
160  itemPanel1->SetSizer(itemBoxSizer2);
161 
162  itemBoxSizer2->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
163 
164  wxFlexGridSizer* itemFlexGridSizer1 = new wxFlexGridSizer(0, 1, 0, 0);
165  itemBoxSizer2->Add(itemFlexGridSizer1, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 0);
166 
167  wxStaticText* itemStaticText2 = new wxStaticText( itemPanel1, wxID_STATIC, _("Does any sequence belong to an organelle?*"), wxDefaultPosition, wxDefaultSize, 0 );
168  itemFlexGridSizer1->Add(itemStaticText2, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
169 
170  wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL);
171  itemFlexGridSizer1->Add(itemBoxSizer3, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP|wxBOTTOM, 5);
172 
173  m_YesOrganelle = new wxRadioButton( itemPanel1, ID_MOLORGANELLEYES, _("Yes"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
174  m_YesOrganelle->SetValue(false);
175  itemBoxSizer3->Add(m_YesOrganelle, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
176 
177  m_NoOrganelle = new wxRadioButton( itemPanel1, ID_MOLORGANELLENO, _("No"), wxDefaultPosition, wxDefaultSize, 0 );
178  m_NoOrganelle->SetValue(true);
179  itemBoxSizer3->Add(m_NoOrganelle, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
180 
181  m_LabelSizer = new wxBoxSizer(wxHORIZONTAL);
182  itemFlexGridSizer1->Add(m_LabelSizer, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP|wxBOTTOM|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
183 
184  wxStaticText* itemStaticText7 = new wxStaticText( itemPanel1, wxID_STATIC, _("Sequence ID*"), wxDefaultPosition, wxDefaultSize, 0 );
185  m_LabelSizer->Add(itemStaticText7, 0, wxALIGN_CENTER_VERTICAL|wxALL| wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
186 
187 #ifdef __WXMSW__
188  m_LabelSizer->Add(60, 5, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
189 #else
190  m_LabelSizer->Add(40, 5, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
191 #endif
192 
193  wxStaticText* itemStaticText9 = new wxStaticText( itemPanel1, wxID_STATIC, _("Length"), wxDefaultPosition, wxDefaultSize, 0 );
194  m_LabelSizer->Add(itemStaticText9, 0, wxALIGN_CENTER_VERTICAL|wxALL| wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
195 #ifdef __WXMSW__
196  m_LabelSizer->Add(5, 5, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
197 #else
198  m_LabelSizer->Add(2, 5, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
199 #endif
200 
201  wxStaticText* itemStaticText10 = new wxStaticText( itemPanel1, wxID_STATIC, _("Organelle name*"), wxDefaultPosition, wxDefaultSize, 0 );
202  m_LabelSizer->Add(itemStaticText10, 0, wxALIGN_CENTER_VERTICAL|wxALL| wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
203 #if defined(__WXMSW__) || defined(__WXOSX_COCOA__)
204  m_LabelSizer->Add(75, 5, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
205 #else
206  m_LabelSizer->Add(90, 5, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
207 #endif
208 
209  wxStaticText* itemStaticText12 = new wxStaticText( itemPanel1, wxID_STATIC, _("Complete"), wxDefaultPosition, wxDefaultSize, 0 );
210  m_LabelSizer->Add(itemStaticText12, 0, wxALIGN_CENTER_VERTICAL|wxALL| wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
211 
212  wxStaticText* itemStaticText13 = new wxStaticText( itemPanel1, wxID_STATIC, _("Circular"), wxDefaultPosition, wxDefaultSize, 0 );
213  m_LabelSizer->Add(itemStaticText13, 0, wxALIGN_CENTER_VERTICAL|wxALL| wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
214 
215  m_ScrolledWindow = new wxScrolledWindow( itemPanel1, ID_MOLORGANELLESCROLLEDWND, wxDefaultPosition, wxSize(566, 92), wxTAB_TRAVERSAL );
216  itemFlexGridSizer1->Add(m_ScrolledWindow, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
217  m_ScrolledWindow->SetScrollbars(1, 1, 0, 0);
218 
219  m_Sizer = new wxFlexGridSizer(0, 2, 0, 0);
220  m_ScrolledWindow->SetSizer(m_Sizer);
221 
222  for (size_t index = 0; index < m_Rows; ++index) {
223  x_AddEmptyRow();
224  }
225 
226  wxBoxSizer* itemBoxSizer16 = new wxBoxSizer(wxHORIZONTAL);
227  itemFlexGridSizer1->Add(itemBoxSizer16, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP|wxBOTTOM, 5);
228 
229  m_AddOrganelle = new wxHyperlinkCtrl( itemPanel1, ID_MOLADDORGANELLE, _("Add another organelle"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
230  itemBoxSizer16->Add(m_AddOrganelle, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
231 
232  itemBoxSizer16->Add(5, 5, 1, wxGROW|wxALL, 5);
233 
234  m_DelOrganelle = new wxHyperlinkCtrl( itemPanel1, ID_MOLDELORGANELLE, _("Delete all organelles"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
235  itemBoxSizer16->Add(m_DelOrganelle, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
236 
237  x_EnableControls(false);
238 
239 ////@end CSeqSubOrganellePanel content construction
240 }
241 
243 {
244  m_organelle_types.clear();
245  CEnumeratedTypeValues::TValues type_values = objects::CBioSource::ENUM_METHOD_NAME(EGenome)()->GetValues();
246  for (CEnumeratedTypeValues::TValues::const_iterator i = type_values.begin(); i != type_values.end(); ++i)
247  {
248  objects::CBioSource::EGenome val = static_cast<objects::CBioSource::EGenome>(i->second);
249  if (val == objects::CBioSource::eGenome_unknown ||
250  val == objects::CBioSource::eGenome_genomic ||
251  val == objects::CBioSource::eGenome_plasmid ||
252  val == objects::CBioSource::eGenome_chromosome ||
253  val == objects::CBioSource::eGenome_endogenous_virus ||
254  val == objects::CBioSource::eGenome_extrachrom ||
255  val == objects::CBioSource::eGenome_macronuclear ||
256  val == objects::CBioSource::eGenome_proviral)
257  continue;
258  m_organelle_types.push_back(val);
259  }
260 }
261 
263 {
264  for (size_t i = 0; i < m_LabelSizer->GetItemCount(); ++i) {
265  wxSizerItem* item = m_LabelSizer->GetItem(i);
266  if (item->IsWindow()) {
267  item->GetWindow()->Show(value);
268  }
269  }
270  m_ScrolledWindow->Show(value);
271  m_AddOrganelle->Show(value);
272  m_DelOrganelle->Show(value);
273 
274  wxSizerItemList& itemList = m_Sizer->GetChildren();
275  wxSizerItemList::iterator node = itemList.begin();
276  while (node != itemList.end()) {
277  wxWindow* child = (**node).GetWindow();
278  if (child) {
279  if (wxHyperlinkCtrl* link = dynamic_cast<wxHyperlinkCtrl*>(child)) {
280  link->Show(value);
281  }
282  }
283  ++node;
284  }
285 }
286 
288 {
289  CSingleSequencePanel* row = new CSingleSequencePanel(m_ScrolledWindow, m_Seh, objects::CSubSource::eSubtype_other, true, m_organelle_types);
290  if (m_RowHeight == 0) {
291  int row_width;
292  row->GetClientSize(&row_width, &m_RowHeight);
293  }
294  x_AddRowToWindow(row);
295 }
296 
298 {
299  m_Sizer->Add(row, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 0);
300  wxHyperlinkCtrl* itemHyperLink = new CNoTabHyperlinkCtrl(m_ScrolledWindow, ID_MOLDELONEORGANELLE, wxT("Delete"), wxT("delete"));
301  itemHyperLink->SetVisitedColour(itemHyperLink->GetNormalColour());
302  m_Sizer->Add(itemHyperLink, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 0);
303 #ifdef __WXMSW__
304  m_ScrolledWindow->SetScrollRate(0, m_RowHeight);
305  m_ScrolledWindow->FitInside();
306  m_ScrolledWindow->Refresh();
307 #else
308  int row_width, row_height;
309  row->GetClientSize(&row_width, &row_height);
310 
311  int link_width, link_height;
312  itemHyperLink->GetClientSize(&link_width, &link_height);
313  if (link_height > row_height) {
314  row_height = link_height;
315  }
316  row_width += link_width;
317 
318  if (row_width > m_TotalWidth) {
319  m_TotalWidth = row_width;
320  }
321 
322  m_TotalHeight += row_height;
323  m_ScrollRate = row_height;
324 
325  m_ScrolledWindow->SetVirtualSize(m_TotalWidth, m_TotalHeight);
326  m_ScrolledWindow->SetScrollRate(0, m_ScrollRate);
327  m_ScrolledWindow->FitInside();
328  m_ScrolledWindow->SetMinSize(wxSize(m_TotalWidth + 20, m_MaxRows * m_ScrollRate));
329  m_ScrolledWindow->Refresh();
330 #endif
331 }
332 
333 
334 
335 /*
336  * Should we show tooltips?
337  */
338 
340 {
341  return true;
342 }
343 
344 /*
345  * Get bitmap resources
346  */
347 
348 wxBitmap CSeqSubOrganellePanel::GetBitmapResource( const wxString& name )
349 {
350  // Bitmap retrieval
351 ////@begin CSeqSubOrganellePanel bitmap retrieval
352  wxUnusedVar(name);
353  return wxNullBitmap;
354 ////@end CSeqSubOrganellePanel bitmap retrieval
355 }
356 
357 /*
358  * Get icon resources
359  */
360 
361 wxIcon CSeqSubOrganellePanel::GetIconResource( const wxString& name )
362 {
363  // Icon retrieval
364 ////@begin CSeqSubOrganellePanel icon retrieval
365  wxUnusedVar(name);
366  return wxNullIcon;
367 ////@end CSeqSubOrganellePanel icon retrieval
368 }
369 
370 
371 /*
372  * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_MOLORGANELLEYES
373  */
374 
376 {
377  x_EnableControls(true);
378  if (m_Sizer->IsEmpty()) {
379  x_AddEmptyRow();
380  }
381 }
382 
383 
384 /*
385  * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_MOLORGANELLENO
386  */
387 
388 void CSeqSubOrganellePanel::OnOrganelleNoSelected( wxCommandEvent& event )
389 {
390  x_EnableControls(false);
391 }
392 
393 
394 /*
395  * wxEVT_COMMAND_HYPERLINK event handler for ID_MOLADDORGANELLE
396  */
397 
398 void CSeqSubOrganellePanel::OnAddOrganelleClicked( wxHyperlinkEvent& event )
399 {
400  x_AddEmptyRow();
401  int x, y;
402  m_ScrolledWindow->GetVirtualSize(&x, &y);
403 
404  int xUnit, yUnit;
405  m_ScrolledWindow->GetScrollPixelsPerUnit(&xUnit, &yUnit);
406  m_ScrolledWindow->Scroll(0, y / yUnit);
407 }
408 
409 
410 /*
411  * wxEVT_COMMAND_HYPERLINK event handler for ID_MOLDELORGANELLE
412  */
413 
414 void CSeqSubOrganellePanel::OnDeleteOrganelleClicked( wxHyperlinkEvent& event )
415 {
417 }
418 
420 {
421  while (m_Sizer->GetItemCount() > 0) {
422  int pos = 0;
423  m_Sizer->GetItem(pos)->DeleteWindows();
424  m_Sizer->Remove(pos);
425  }
426 }
427 
428 
430 {
431  wxWindow *win = dynamic_cast<wxWindow*>(event.GetEventObject());
432  if (!win)
433  return;
434  wxWindowList &children = m_ScrolledWindow->GetChildren();
435  wxWindow *prev = NULL;
436  for (wxWindowList::iterator child = children.begin(); child != children.end(); ++child)
437  {
438  if (*child == win)
439  {
440  wxSizer *sizer = win->GetContainingSizer();
441  win->Destroy();
442  prev->Destroy();
443  m_Sizer->Remove(sizer);
444  m_Sizer->Layout();
445  m_ScrolledWindow->FitInside();
446  break;
447  }
448  prev = *child;
449  }
450 }
451 
452 
454 {
455  if (!m_Seh) {
456  return false;
457  }
458 
459  // examine sequences looking for sources with organelle modifiers
460  size_t num_rows_needed = 0;
461  for (objects::CBioseq_CI bi(m_Seh, objects::CSeq_inst::eMol_na); bi; ++bi) {
463  num_rows_needed++;
464  }
465  }
466 
467  // count existing rows
468  size_t num_rows_now = 0;
469  for (auto item : m_ScrolledWindow->GetChildren()) {
470  CSingleSequencePanel* row = dynamic_cast<CSingleSequencePanel *>(item);
471  if (row) {
472  num_rows_now++;
473  }
474  }
475  while (num_rows_now < num_rows_needed) {
476  x_AddEmptyRow();
477  num_rows_now++;
478  }
479 
480  if (num_rows_needed > 0) {
481  m_YesOrganelle->SetValue(true);
482  m_NoOrganelle->SetValue(false);
483  x_EnableControls(true);
484  } else {
485  m_YesOrganelle->SetValue(false);
486  m_NoOrganelle->SetValue(true);
487  x_EnableControls(false);
488  }
489 
490  auto rit = m_ScrolledWindow->GetChildren().begin();
491  for (objects::CBioseq_CI bi(m_Seh, objects::CSeq_inst::eMol_na); bi; ++bi) {
493  CSingleSequencePanel* row = dynamic_cast<CSingleSequencePanel *>(*rit);
494  while (!row) {
495  rit++;
496  row = dynamic_cast<CSingleSequencePanel *>(*rit);
497  }
498  row->SetValue(*bi);
499  rit++;
500  }
501  }
502  while (rit != m_ScrolledWindow->GetChildren().end()) {
503  CSingleSequencePanel* row = dynamic_cast<CSingleSequencePanel *>(*rit);
504  if (row) {
505  row->ClearValue();
506  }
507  rit++;
508  }
509 
510  return true;
511 }
512 
513 
515 {
516  if (!m_Seh) {
517  return;
518  }
519 
520  bool any_changes = false;
521  CRef<CCmdComposite> cmd(new CCmdComposite("Update organelles"));
522  typedef map<objects::CBioseq_Handle, bool> TUpdateMap;
523  TUpdateMap updated;
524 
525  for (auto rit : m_ScrolledWindow->GetChildren()) {
526  CSingleSequencePanel* row = dynamic_cast<CSingleSequencePanel *>(rit);
527  if (row) {
528  string seqid = row->GetSeqId();
529  if (!seqid.empty()) {
530  CRef<objects::CSeq_id> id(new objects::CSeq_id(seqid));
531  objects::CBioseq_Handle bh = m_Seh.GetScope().GetBioseqHandle(*id);
532  updated[bh] = true;
533 
534  any_changes |= row->AddToUpdateCommand(*cmd);
535  }
536  }
537  }
538 
539 
540  if (any_changes) {
542  }
543 
544 }
545 
547 {
548  if (m_NoOrganelle->GetValue())
549  return;
550 
551  bool found = false;
552  for (auto rit : m_ScrolledWindow->GetChildren())
553  {
554  CSingleSequencePanel* row = dynamic_cast<CSingleSequencePanel *>(rit);
555  if (row)
556  {
557  string seqid = row->GetSeqId();
558  string name = row->GetOrganelleValue();
559  if (!seqid.empty() && !name.empty())
560  {
561  found = true;
562  }
563  }
564  }
565  if (!found)
566  text += "Organelle Name\n";
567 }
568 
User-defined methods of the data storage class.
bool Create(wxWindow *parent, wxWindowID id=ID_CSEQSUBORGANELLEPANEL, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(400, 300), long style=wxTAB_TRAVERSAL)
Creation.
wxIcon GetIconResource(const wxString &name)
Retrieves icon resources.
void OnDeleteOneOrganelleClicked(wxHyperlinkEvent &event)
void Init()
Initialises member variables.
void CreateControls()
Creates the controls and sizers.
virtual void ReportMissingFields(string &text)
wxBitmap GetBitmapResource(const wxString &name)
Retrieves bitmap resources.
objects::CSeq_entry_Handle m_Seh
wxScrolledWindow * m_ScrolledWindow
ICommandProccessor * m_CmdProcessor
void OnOrganelleYesSelected(wxCommandEvent &event)
wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_MOLORGANELLEYES
static bool ShowToolTips()
Should we show tooltips?
void x_AddRowToWindow(wxWindow *row)
void OnOrganelleNoSelected(wxCommandEvent &event)
wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_MOLORGANELLENO
void OnAddOrganelleClicked(wxHyperlinkEvent &event)
wxEVT_COMMAND_HYPERLINK event handler for ID_MOLADDORGANELLE
vector< objects::CBioSource::EGenome > m_organelle_types
void OnDeleteOrganelleClicked(wxHyperlinkEvent &event)
wxEVT_COMMAND_HYPERLINK event handler for ID_MOLDELORGANELLE
void SetValue(objects::CBioseq_Handle bh)
bool AddToUpdateCommand(CCmdComposite &cmd)
static bool NeedsOrganelleRow(objects::CBioseq_Handle bh, const vector< objects::CBioSource::EGenome > &organelle_types)
Undo/Redo interface for editing operations.
virtual void Execute(IEditCommand *command, wxWindow *window=0)=0
Definition: map.hpp:338
char value[7]
Definition: config.c:431
static CS_COMMAND * cmd
Definition: ct_dynamic.c:26
#define _(proto)
Definition: ct_nlmzip_i.h:78
static void Init(void)
Definition: cursor6.c:76
static DLIST_TYPE *DLIST_NAME() prev(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
Definition: dlist.tmpl.h:61
#define NULL
Definition: ncbistd.hpp:225
list< pair< string, TEnumValueType > > TValues
Definition: enumvalues.hpp:54
#define ENUM_METHOD_NAME(EnumName)
Definition: serialbase.hpp:994
#define END_NCBI_SCOPE
End previously defined NCBI scope.
Definition: ncbistl.hpp:103
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
Definition: ncbistl.hpp:100
END_EVENT_TABLE()
int i
static void text(MDB_val *v)
Definition: mdb_dump.c:62
#define wxT(x)
Definition: muParser.cpp:41
const struct ncbi::grid::netcache::search::fields::SIZE size
Modified on Fri Mar 01 10:07:58 2024 by modify_doxy.py rev. 669887