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

Go to the SVN repository for this file.

1 /* $Id: seqsub_plasmid_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  * CSeqSubPlasmidPanel type definition
59  */
60 
61 IMPLEMENT_DYNAMIC_CLASS( CSeqSubPlasmidPanel, wxPanel )
62 
63 
64 /*
65  * CSeqSubPlasmidPanel event table definition
66  */
67 
68 BEGIN_EVENT_TABLE( CSeqSubPlasmidPanel, wxPanel )
69 
70 ////@begin CSeqSubPlasmidPanel event table entries
71  EVT_RADIOBUTTON( ID_MOLPLASMIDYES, CSeqSubPlasmidPanel::OnPlasmidYesSelected )
72  EVT_RADIOBUTTON( ID_MOLPLASMIDNO, CSeqSubPlasmidPanel::OnPlasmidNoSelected )
73  EVT_HYPERLINK( ID_MOLADDPLASMID, CSeqSubPlasmidPanel::OnAddplasmidClicked )
74  EVT_HYPERLINK( ID_MOLDELPLASMID, CSeqSubPlasmidPanel::OnDeleteplasmidClicked )
75  EVT_HYPERLINK( ID_MOLDELONEPLASMID, CSeqSubPlasmidPanel::OnDeleteOnePlasmidClicked )
76 ////@end CSeqSubPlasmidPanel event table entries
77 
79 
80 
81 /*
82  * CSeqSubPlasmidPanel constructors
83  */
84 
86 {
87  Init();
88 }
89 
90 CSeqSubPlasmidPanel::CSeqSubPlasmidPanel( 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  * CSeqSubPlasmidPanel creator
100  */
101 
102 bool CSeqSubPlasmidPanel::Create( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
103 {
104 ////@begin CSeqSubPlasmidPanel 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 CSeqSubPlasmidPanel creation
115  return true;
116 }
117 
118 
119 /*
120  * CSeqSubPlasmidPanel destructor
121  */
122 
124 {
125 ////@begin CSeqSubPlasmidPanel destruction
126 ////@end CSeqSubPlasmidPanel destruction
127 }
128 
129 
130 /*
131  * Member initialisation
132  */
133 
135 {
136 ////@begin CSeqSubPlasmidPanel member initialisation
137  m_YesPlasmid = NULL;
138  m_NoPlasmid = NULL;
140  m_Sizer = NULL;
141  m_LabelSizer = NULL;
142  m_AddPlasmid = NULL;
143  m_DelPlasmid = NULL;
144 ////@end CSeqSubPlasmidPanel member initialisation
145 }
146 
147 
148 /*
149  * Control creation for CSeqSubPlasmidPanel
150  */
151 
153 {
154 ////@begin CSeqSubPlasmidPanel content construction
155  CSeqSubPlasmidPanel* itemPanel1 = this;
156 
157  wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
158  itemPanel1->SetSizer(itemBoxSizer2);
159 
160  itemBoxSizer2->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
161 
162  wxFlexGridSizer* itemFlexGridSizer1 = new wxFlexGridSizer(0, 1, 0, 0);
163  itemBoxSizer2->Add(itemFlexGridSizer1, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 0);
164 
165  wxStaticText* itemStaticText2 = new wxStaticText( itemPanel1, wxID_STATIC, _("Does any sequence belong to a plasmid?*"), wxDefaultPosition, wxDefaultSize, 0 );
166  itemFlexGridSizer1->Add(itemStaticText2, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
167 
168  wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL);
169  itemFlexGridSizer1->Add(itemBoxSizer3, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP|wxBOTTOM, 5);
170 
171  m_YesPlasmid = new wxRadioButton( itemPanel1, ID_MOLPLASMIDYES, _("Yes"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
172  m_YesPlasmid->SetValue(false);
173  itemBoxSizer3->Add(m_YesPlasmid, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
174 
175  m_NoPlasmid = new wxRadioButton( itemPanel1, ID_MOLPLASMIDNO, _("No"), wxDefaultPosition, wxDefaultSize, 0 );
176  m_NoPlasmid->SetValue(true);
177  itemBoxSizer3->Add(m_NoPlasmid, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
178 
179  m_LabelSizer = new wxBoxSizer(wxHORIZONTAL);
180  itemFlexGridSizer1->Add(m_LabelSizer, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP|wxBOTTOM|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
181 
182  wxStaticText* itemStaticText7 = new wxStaticText( itemPanel1, wxID_STATIC, _("Sequence ID*"), wxDefaultPosition, wxDefaultSize, 0 );
183  m_LabelSizer->Add(itemStaticText7, 0, wxALIGN_CENTER_VERTICAL|wxALL| wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
184 #ifdef __WXMSW__
185  m_LabelSizer->Add(60, 5, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
186 #else
187  m_LabelSizer->Add(40, 5, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
188 #endif
189  wxStaticText* itemStaticText9 = new wxStaticText( itemPanel1, wxID_STATIC, _("Length"), wxDefaultPosition, wxDefaultSize, 0 );
190  m_LabelSizer->Add(itemStaticText9, 0, wxALIGN_CENTER_VERTICAL|wxALL| wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
191 
192  m_LabelSizer->Add(5, 5, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
193 
194  wxStaticText* itemStaticText10 = new wxStaticText( itemPanel1, wxID_STATIC, _("Plasmid name*"), wxDefaultPosition, wxDefaultSize, 0 );
195  m_LabelSizer->Add(itemStaticText10, 0, wxALIGN_CENTER_VERTICAL|wxALL| wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
196 #ifdef __WXMSW__
197  m_LabelSizer->Add(15, 5, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
198 #else
199  m_LabelSizer->Add(10, 5, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
200 #endif
201  wxStaticText* itemStaticText12 = new wxStaticText( itemPanel1, wxID_STATIC, _("Complete"), wxDefaultPosition, wxDefaultSize, 0 );
202  m_LabelSizer->Add(itemStaticText12, 0, wxALIGN_CENTER_VERTICAL|wxALL| wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
203 
204  wxStaticText* itemStaticText13 = new wxStaticText( itemPanel1, wxID_STATIC, _("Circular"), wxDefaultPosition, wxDefaultSize, 0 );
205  m_LabelSizer->Add(itemStaticText13, 0, wxALIGN_CENTER_VERTICAL|wxALL| wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
206 
207  m_ScrolledWindow = new wxScrolledWindow( itemPanel1, ID_MOLPLASMIDSCROLLEDWND, wxDefaultPosition, wxSize(496, 92), wxTAB_TRAVERSAL);
208  itemFlexGridSizer1->Add(m_ScrolledWindow, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
209  m_ScrolledWindow->SetScrollbars(1, 1, 0, 0);
210 
211  m_Sizer = new wxFlexGridSizer(0, 2, 0, 0);
212  m_ScrolledWindow->SetSizer(m_Sizer);
213 
214  for (size_t index = 0; index < m_Rows; ++index) {
215  x_AddEmptyRow();
216  }
217 
218  wxBoxSizer* itemBoxSizer16 = new wxBoxSizer(wxHORIZONTAL);
219  itemFlexGridSizer1->Add(itemBoxSizer16, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP|wxBOTTOM, 5);
220 
221  m_AddPlasmid = new wxHyperlinkCtrl( itemPanel1, ID_MOLADDPLASMID, _("Add another plasmid"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
222  itemBoxSizer16->Add(m_AddPlasmid, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
223 
224  itemBoxSizer16->Add(5, 5, 1, wxGROW|wxALL, 5);
225 
226  m_DelPlasmid = new wxHyperlinkCtrl( itemPanel1, ID_MOLDELPLASMID, _("Delete all plasmids"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
227  itemBoxSizer16->Add(m_DelPlasmid, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5);
228 
229  x_EnableControls(false);
230 
231 ////@end CSeqSubPlasmidPanel content construction
232 }
233 
235 {
236  for (size_t i = 0; i < m_LabelSizer->GetItemCount(); ++i) {
237  wxSizerItem* item = m_LabelSizer->GetItem(i);
238  if (item->IsWindow()) {
239  item->GetWindow()->Show(value);
240  }
241  }
242  m_ScrolledWindow->Show(value);
243  m_AddPlasmid->Show(value);
244  m_DelPlasmid->Show(value);
245 
246  wxSizerItemList& itemList = m_Sizer->GetChildren();
247  wxSizerItemList::iterator node = itemList.begin();
248  while (node != itemList.end()) {
249  wxWindow* child = (**node).GetWindow();
250  if (child) {
251  if (wxHyperlinkCtrl* link = dynamic_cast<wxHyperlinkCtrl*>(child)) {
252  link->Show(value);
253  }
254  }
255  ++node;
256  }
257 }
258 
260 {
261  CSingleSequencePanel* row = new CSingleSequencePanel(m_ScrolledWindow, m_Seh, objects::CSubSource::eSubtype_plasmid_name);
262  if (m_RowHeight == 0) {
263  int row_width;
264  row->GetClientSize(&row_width, &m_RowHeight);
265  }
266  x_AddRowToWindow(row);
267 }
268 
270 {
271  m_Sizer->Add(row, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 0);
272  wxHyperlinkCtrl* itemHyperLink = new CNoTabHyperlinkCtrl(m_ScrolledWindow, ID_MOLDELONEPLASMID, wxT("Delete"), wxT("delete"));
273  itemHyperLink->SetVisitedColour(itemHyperLink->GetNormalColour());
274  m_Sizer->Add(itemHyperLink, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 0);
275 #ifdef __WXMSW__
276  m_ScrolledWindow->SetScrollRate(0, m_RowHeight);
277  m_ScrolledWindow->FitInside();
278  m_ScrolledWindow->Refresh();
279 #else
280  int row_width, row_height;
281  row->GetClientSize(&row_width, &row_height);
282 
283  int link_width, link_height;
284  itemHyperLink->GetClientSize(&link_width, &link_height);
285  if (link_height > row_height) {
286  row_height = link_height;
287  }
288  row_width += link_width;
289 
290  if (row_width > m_TotalWidth) {
291  m_TotalWidth = row_width;
292  }
293 
294  m_TotalHeight += row_height;
295  m_ScrollRate = row_height;
296 
297  m_ScrolledWindow->SetVirtualSize(m_TotalWidth, m_TotalHeight);
298  m_ScrolledWindow->SetScrollRate(0, m_ScrollRate);
299  m_ScrolledWindow->FitInside();
300  m_ScrolledWindow->SetMinSize(wxSize(m_TotalWidth + 20, m_MaxRows * m_ScrollRate));
301  m_ScrolledWindow->Refresh();
302 #endif
303 }
304 
305 
306 
307 /*
308  * Should we show tooltips?
309  */
310 
312 {
313  return true;
314 }
315 
316 /*
317  * Get bitmap resources
318  */
319 
320 wxBitmap CSeqSubPlasmidPanel::GetBitmapResource( const wxString& name )
321 {
322  // Bitmap retrieval
323 ////@begin CSeqSubPlasmidPanel bitmap retrieval
324  wxUnusedVar(name);
325  return wxNullBitmap;
326 ////@end CSeqSubPlasmidPanel bitmap retrieval
327 }
328 
329 /*
330  * Get icon resources
331  */
332 
333 wxIcon CSeqSubPlasmidPanel::GetIconResource( const wxString& name )
334 {
335  // Icon retrieval
336 ////@begin CSeqSubPlasmidPanel icon retrieval
337  wxUnusedVar(name);
338  return wxNullIcon;
339 ////@end CSeqSubPlasmidPanel icon retrieval
340 }
341 
342 
343 /*
344  * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_MOLPLASMIDYES
345  */
346 
347 void CSeqSubPlasmidPanel::OnPlasmidYesSelected( wxCommandEvent& event )
348 {
349  x_EnableControls(true);
350  if (m_Sizer->IsEmpty()) {
351  x_AddEmptyRow();
352  }
353 }
354 
355 
356 /*
357  * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_MOLPLASMIDNO
358  */
359 
360 void CSeqSubPlasmidPanel::OnPlasmidNoSelected( wxCommandEvent& event )
361 {
362  x_EnableControls(false);
363 }
364 
365 
366 /*
367  * wxEVT_COMMAND_HYPERLINK event handler for ID_MOLADDPLASMID
368  */
369 
370 void CSeqSubPlasmidPanel::OnAddplasmidClicked( wxHyperlinkEvent& event )
371 {
372  x_AddEmptyRow();
373  int x, y;
374  m_ScrolledWindow->GetVirtualSize(&x, &y);
375 
376  int xUnit, yUnit;
377  m_ScrolledWindow->GetScrollPixelsPerUnit(&xUnit, &yUnit);
378  m_ScrolledWindow->Scroll(0, y / yUnit);
379 }
380 
381 
382 /*
383  * wxEVT_COMMAND_HYPERLINK event handler for ID_MOLDELPLASMID
384  */
385 
386 void CSeqSubPlasmidPanel::OnDeleteplasmidClicked( wxHyperlinkEvent& event )
387 {
389 }
390 
392 {
393  while (m_Sizer->GetItemCount() > 0) {
394  int pos = 0;
395  m_Sizer->GetItem(pos)->DeleteWindows();
396  m_Sizer->Remove(pos);
397  }
398 }
399 
400 
402 {
403  wxWindow *win = dynamic_cast<wxWindow*>(event.GetEventObject());
404  if (!win)
405  return;
406  wxWindowList &children = m_ScrolledWindow->GetChildren();
407  wxWindow *prev = NULL;
408  for (wxWindowList::iterator child = children.begin(); child != children.end(); ++child)
409  {
410  if (*child == win)
411  {
412  wxSizer *sizer = win->GetContainingSizer();
413  win->Destroy();
414  prev->Destroy();
415  m_Sizer->Remove(sizer);
416  m_Sizer->Layout();
417  m_ScrolledWindow->FitInside();
418  break;
419  }
420  prev = *child;
421  }
422 }
423 
424 
426 {
427  if (!m_Seh) {
428  return false;
429  }
430 
431  // examine sequences looking for sources with plasmid modifiers
432  size_t num_rows_needed = 0;
433  for (objects::CBioseq_CI bi(m_Seh, objects::CSeq_inst::eMol_na); bi; ++bi) {
434  if (CSingleSequencePanel::NeedsRow(*bi, objects::CSubSource::eSubtype_plasmid_name)) {
435  num_rows_needed++;
436  }
437  }
438 
439  // count existing rows
440  size_t num_rows_now = 0;
441  for (auto item : m_ScrolledWindow->GetChildren()) {
442  CSingleSequencePanel* row = dynamic_cast<CSingleSequencePanel *>(item);
443  if (row) {
444  num_rows_now++;
445  }
446  }
447  while (num_rows_now < num_rows_needed) {
448  x_AddEmptyRow();
449  num_rows_now++;
450  }
451 
452  if (num_rows_needed > 0) {
453  m_YesPlasmid->SetValue(true);
454  m_NoPlasmid->SetValue(false);
455  x_EnableControls(true);
456  } else {
457  m_YesPlasmid->SetValue(false);
458  m_NoPlasmid->SetValue(true);
459  x_EnableControls(false);
460  }
461 
462  auto rit = m_ScrolledWindow->GetChildren().begin();
463  for (objects::CBioseq_CI bi(m_Seh, objects::CSeq_inst::eMol_na); bi; ++bi) {
464  if (CSingleSequencePanel::NeedsRow(*bi, objects::CSubSource::eSubtype_plasmid_name)) {
465  CSingleSequencePanel* row = dynamic_cast<CSingleSequencePanel *>(*rit);
466  while (!row) {
467  rit++;
468  row = dynamic_cast<CSingleSequencePanel *>(*rit);
469  }
470  row->SetValue(*bi);
471  rit++;
472  }
473  }
474  while (rit != m_ScrolledWindow->GetChildren().end()) {
475  CSingleSequencePanel* row = dynamic_cast<CSingleSequencePanel *>(*rit);
476  if (row) {
477  row->ClearValue();
478  }
479  rit++;
480  }
481 
482  return true;
483 }
484 
485 
487 {
488  if (!m_Seh) {
489  return;
490  }
491 
492  bool any_changes = false;
493  CRef<CCmdComposite> cmd(new CCmdComposite("Update plasmids"));
494  typedef map<objects::CBioseq_Handle, bool> TUpdateMap;
495  TUpdateMap updated;
496 
497  for (auto rit : m_ScrolledWindow->GetChildren()) {
498  CSingleSequencePanel* row = dynamic_cast<CSingleSequencePanel *>(rit);
499  if (row) {
500  string seqid = row->GetSeqId();
501  if (!seqid.empty()) {
502  CRef<objects::CSeq_id> id(new objects::CSeq_id(seqid));
503  objects::CBioseq_Handle bh = m_Seh.GetScope().GetBioseqHandle(*id);
504  updated[bh] = true;
505 
506  any_changes |= row->AddToUpdateCommand(*cmd);
507  }
508  }
509  }
510 
511  for (objects::CBioseq_CI bi(m_Seh, objects::CSeq_inst::eMol_na); bi; ++bi) {
512  if (CSingleSequencePanel::NeedsRow(*bi, objects::CSubSource::eSubtype_plasmid_name) && !updated[*bi]) {
513  // take plasmid name off
514  any_changes |= CSingleSequencePanel::RemoveNamedValue(*cmd, objects::CSubSource::eSubtype_plasmid_name, *bi);
515  }
516  }
517 
518 
519  if (any_changes) {
521  }
522 
523 }
524 
526 {
527  if (m_NoPlasmid->GetValue())
528  return;
529 
530  bool found = false;
531  for (auto rit : m_ScrolledWindow->GetChildren())
532  {
533  CSingleSequencePanel* row = dynamic_cast<CSingleSequencePanel *>(rit);
534  if (row)
535  {
536  string seqid = row->GetSeqId();
537  string name = row->GetModifierValue();
538  if (!seqid.empty() && !name.empty())
539  {
540  found = true;
541  }
542  }
543  }
544  if (!found)
545  text += "Plasmid Name\n";
546 }
547 
User-defined methods of the data storage class.
wxHyperlinkCtrl * m_AddPlasmid
wxBitmap GetBitmapResource(const wxString &name)
Retrieves bitmap resources.
virtual bool TransferDataToWindow()
wxIcon GetIconResource(const wxString &name)
Retrieves icon resources.
void x_EnableControls(bool value)
void OnPlasmidNoSelected(wxCommandEvent &event)
wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_MOLPLASMIDNO
bool Create(wxWindow *parent, wxWindowID id=ID_CSEQSUBPLASMIDPANEL, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(400, 300), long style=wxTAB_TRAVERSAL)
Creation.
void OnDeleteOnePlasmidClicked(wxHyperlinkEvent &event)
wxScrolledWindow * m_ScrolledWindow
wxHyperlinkCtrl * m_DelPlasmid
objects::CSeq_entry_Handle m_Seh
void OnAddplasmidClicked(wxHyperlinkEvent &event)
wxEVT_COMMAND_HYPERLINK event handler for ID_MOLADDPLASMID
void OnPlasmidYesSelected(wxCommandEvent &event)
wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_MOLPLASMIDYES
void CreateControls()
Creates the controls and sizers.
CSeqSubPlasmidPanel()
Constructors.
ICommandProccessor * m_CmdProcessor
void x_AddRowToWindow(wxWindow *row)
void OnDeleteplasmidClicked(wxHyperlinkEvent &event)
wxEVT_COMMAND_HYPERLINK event handler for ID_MOLDELPLASMID
virtual void ReportMissingFields(string &text)
static bool ShowToolTips()
Should we show tooltips?
void Init()
Initialises member variables.
void SetValue(objects::CBioseq_Handle bh)
static bool NeedsRow(objects::CBioseq_Handle bh, objects::CSubSource::ESubtype subtype)
bool AddToUpdateCommand(CCmdComposite &cmd)
static bool RemoveNamedValue(CCmdComposite &cmd, objects::CSubSource::ESubtype subtype, objects::CBioseq_Handle bh)
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
#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:08:29 2024 by modify_doxy.py rev. 669887