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

Go to the SVN repository for this file.

1 /* $Id: desktop_view_context.cpp 37872 2017-02-24 21:11:01Z asztalos $
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  * File Description:
29  *
30  */
31 
32 #include <ncbi_pch.hpp>
33 #include <objects/pub/Pub.hpp>
34 #include <objects/seq/Pubdesc.hpp>
36 #include <gui/objutils/objects.hpp>
44 
50 
55 #include <wx/menu.h>
56 #include <wx/window.h>
57 #include <wx/msgdlg.h>
58 
59 
62 
63 static
64 WX_DEFINE_MENU(kDesktopEditMenu)
65  WX_MENU_ITEM(wxID_CUT)
66  WX_MENU_ITEM(wxID_COPY)
67  WX_MENU_ITEM(wxID_PASTE)
69 
70 BEGIN_EVENT_TABLE(CDesktopViewContext, wxEvtHandler)
71  EVT_MENU(wxID_CUT, CDesktopViewContext::OnCutSelection)
72  EVT_UPDATE_UI(wxID_CUT, CDesktopViewContext::OnUpdateCutSelection)
73 
74  EVT_MENU(wxID_COPY, CDesktopViewContext::OnCopySelection)
75  EVT_UPDATE_UI(wxID_COPY, CDesktopViewContext::OnUpdateCopySelection)
76 
77  EVT_MENU(wxID_PASTE, CDesktopViewContext::OnPasteSelection)
78  EVT_UPDATE_UI(wxID_PASTE, CDesktopViewContext::OnUpdatePasteSelection)
80 
81 
83  const CSerialObject* saved_object, ESavedObjectType saved_type)
84  : m_BioseqEditor(bioseqEditor), m_CmdProccessor(cmdProccessor), m_Canvas(nullptr), m_SavedType(saved_type)
85 {
86  if (m_BioseqEditor) {
87  m_BioseqEditor->SetCallBack(this);
88  }
89 
90  m_SavedObject.Reset(saved_object);
91 }
92 
94 {
95  if (m_Canvas) {
96  m_Canvas->PopEventHandler();
97  if (m_BioseqEditor) {
98  m_Canvas->PopEventHandler();
99  }
100  }
101 }
102 
104 {
106  wxMenu* menu = cmd_reg.CreateMenu(kDesktopEditMenu);
107 
108  if (m_BioseqEditor) {
109  wxMenu* editorMenu(m_BioseqEditor->CreateContextMenu(true));
110  if (editorMenu) {
111  Merge(*menu, *editorMenu);
112  }
113  }
114  return menu;
115 }
116 
118 {
119  if (m_Canvas) {
120  m_Canvas->PopEventHandler();
121  if (m_BioseqEditor) {
122  m_Canvas->PopEventHandler();
123  }
124  }
125 
126  m_Canvas = canvas;
127 
128  if (m_Canvas) {
129  m_Canvas->PushEventHandler(this);
130  if (m_BioseqEditor) {
131  m_Canvas->PushEventHandler(m_BioseqEditor);
132  }
133  }
134 }
135 
137 {
139  if (!data_item) return;
140 
141  const CDesktopCitSubItem* citsub_item = dynamic_cast<const CDesktopCitSubItem*>(data_item.GetPointer());
142  const CDesktopContactInfoItem* contact_item = dynamic_cast<const CDesktopContactInfoItem*>(data_item.GetPointer());
143  // if the selected item is a Cit-sub or a Contact-info object, the object passed to the editor is a Submit-block
144  if (citsub_item) {
145  objects.push_back(CEditObject(citsub_item->GetSubmitBlock(), data_item->GetSeqentryHandle()));
146  }
147  else if (contact_item) {
148  objects.push_back(CEditObject(contact_item->GetSubmitBlock(), data_item->GetSeqentryHandle()));
149  }
150  else {
151  // for the rest of objects
152  objects.push_back(CEditObject(*data_item->GetObject(), data_item->GetSeqentryHandle()));
153  }
154  return;
155 }
156 
158 {
159  return CBioseq_Handle();
160 }
161 
163 {
164  const IDesktopItem* item = m_Canvas->GetSelection();
165  if (!item) return CConstRef<IDesktopDataItem>();
166 
167  return item->GetDataItem();
168 }
169 
170 
171 void CDesktopViewContext::OnCutSelection(wxCommandEvent& event)
172 {
174  if (!data_item) return;
175 
176  if (auto item = dynamic_cast<const CDesktopSeqdescItem*>(data_item.GetPointer())) {
177  CIRef<IEditCommand> deldesc_cmd(new CCmdDelDesc(item->GetSeqentryHandle(), item->GetSeqdesc()));
178  if (deldesc_cmd) {
179  m_SavedObject.Reset(&item->GetSeqdesc());
181  m_CmdProccessor.Execute(deldesc_cmd);
182  }
183  }
184  else if (auto item = dynamic_cast<const CDesktopFeatItem*>(data_item.GetPointer())) {
185 
186  bool remove_protein = true;
187  CSeq_feat_Handle fh = item->GetFeatHandle();
188  if (fh.IsSetData() && fh.GetData().IsCdregion()) {
189  wxMessageDialog dlg(NULL, _("Would you like to remove the protein as well?"), _("Question"),
190  wxYES_DEFAULT | wxYES_NO | wxCANCEL | wxICON_QUESTION);
191  switch (dlg.ShowModal()) {
192  case wxID_YES:
193  remove_protein = true;
194  break;
195  case wxID_NO:
196  remove_protein = false;
197  break;
198  case wxID_CANCEL:
199  return;
200  }
201  }
202 
203  CRef<CCmdComposite> delfeat_cmd = GetDeleteFeatureCommand(item->GetFeatHandle(), remove_protein);
204  if (delfeat_cmd) {
205  m_SavedObject.Reset(item->GetFeatHandle().GetOriginalSeq_feat());
207  m_CmdProccessor.Execute(delfeat_cmd);
208  }
209  }
210  else if (auto item = dynamic_cast<const CDesktopAnnotItem*>(data_item.GetPointer())) {
211  CIRef<IEditCommand> delannot_cmd(new CCmdDelSeq_annot(item->GetAnnotHandle()));
212  if (delannot_cmd) {
213  m_SavedObject.Reset(item->GetAnnotHandle().GetCompleteSeq_annot());
215  m_CmdProccessor.Execute(delannot_cmd);
216  }
217  }
218  else if (auto item = dynamic_cast<const CDesktopAlignItem*>(data_item.GetPointer())) {
219  CIRef<IEditCommand> delalign_cmd(new CCmdDelSeq_align(item->GetAlignHandle()));
220  if (delalign_cmd) {
221  m_SavedObject.Reset(item->GetAlignHandle().GetSeq_align());
223  m_CmdProccessor.Execute(delalign_cmd);
224  }
225  }
226  else if (auto item = dynamic_cast<const CDesktopBioseqItem*>(data_item.GetPointer())) {
227  CRef<CCmdComposite> delseq_cmd = GetDeleteSequenceCommand(item->GetBioseqHandle());
228  if (delseq_cmd) {
229  m_SavedObject.Reset(item->GetBioseqHandle().GetCompleteBioseq());
231  m_CmdProccessor.Execute(delseq_cmd);
232  }
233  }
234  else if (auto item = dynamic_cast<const CDesktopContactInfoItem*>(data_item.GetPointer())) {
235  m_SavedObject.Reset(&item->GetContactInfo());
237 
238  const CSubmit_block& submit_block = item->GetSubmitBlock();
239  CRef<CSerialObject> edited_subblock;
240  edited_subblock.Reset((CSerialObject*)CSubmit_block::GetTypeInfo()->Create());
241  edited_subblock->Assign(submit_block);
242  CSubmit_block& new_subblock = dynamic_cast<CSubmit_block&>(*edited_subblock);
243 
244  new_subblock.ResetContact();
245 
247  CObject* actual = (CObject*)&submit_block;
248  chg_subblock->Add(actual, CConstRef<CObject>(edited_subblock));
249  CRef<CCmdComposite> cmd(new CCmdComposite("Remove contact info"));
250  cmd->AddCommand(*chg_subblock);
252  }
253  else if (auto item = dynamic_cast<const CDesktopCitSubItem*>(data_item.GetPointer())) {
254  m_SavedObject.Reset(&item->GetCitSub());
256 
257  const CSubmit_block& submit_block = item->GetSubmitBlock();
258  CRef<CSerialObject> edited_subblock;
259  edited_subblock.Reset((CSerialObject*)CSubmit_block::GetTypeInfo()->Create());
260  edited_subblock->Assign(submit_block);
261  CSubmit_block& new_subblock = dynamic_cast<CSubmit_block&>(*edited_subblock);
262 
263  new_subblock.ResetCit();
264 
266  CObject* actual = (CObject*)&submit_block;
267  chg_subblock->Add(actual, CConstRef<CObject>(edited_subblock));
268  CRef<CCmdComposite> cmd(new CCmdComposite("Remove citsub"));
269  cmd->AddCommand(*chg_subblock);
271  }
272  else if (auto item = dynamic_cast<const CDesktopBioseqsetItem*>(data_item.GetPointer())) {
273  CBioseq_set_Handle bssh = item->GetBioseqsetHandle();
274  CIRef<IEditCommand> delset_cmd(new CCmdDelBioseqSet(bssh));
275  if (delset_cmd) {
276  m_SavedObject.Reset(item->GetBioseqsetHandle().GetCompleteBioseq_set());
278  m_CmdProccessor.Execute(delset_cmd);
279  }
280  }
281  else if (auto item = dynamic_cast<const CDesktopGraphItem*>(data_item.GetPointer())) {
282  CIRef<IEditCommand> delgraph_cmd(new CCmdDelSeq_graph(item->GetGraphHandle()));
283  if (delgraph_cmd) {
284  m_SavedObject.Reset(item->GetGraphHandle().GetSeq_graph());
286  m_CmdProccessor.Execute(delgraph_cmd);
287  }
288  }
289 
290  event.Skip();
291 }
292 
293 void CDesktopViewContext::OnCopySelection(wxCommandEvent& event)
294 {
296  if (!data_item) return;
297 
298  if (auto item = dynamic_cast<const CDesktopSeqdescItem*>(data_item.GetPointer())) {
299  m_SavedObject.Reset(&item->GetSeqdesc());
301  }
302  else if (auto item = dynamic_cast<const CDesktopFeatItem*>(data_item.GetPointer())) {
303  m_SavedObject.Reset(item->GetFeatHandle().GetOriginalSeq_feat());
305  }
306  else if (auto item = dynamic_cast<const CDesktopAnnotItem*>(data_item.GetPointer())) {
307  m_SavedObject.Reset(item->GetAnnotHandle().GetCompleteSeq_annot());
309  }
310  else if (auto item = dynamic_cast<const CDesktopAlignItem*>(data_item.GetPointer())) {
311  m_SavedObject.Reset(item->GetAlignHandle().GetSeq_align());
313  }
314  else if (auto item = dynamic_cast<const CDesktopBioseqItem*>(data_item.GetPointer())) {
315  m_SavedObject.Reset(item->GetBioseqHandle().GetCompleteBioseq());
317  }
318  else if (auto item = dynamic_cast<const CDesktopContactInfoItem*>(data_item.GetPointer())) {
319  m_SavedObject.Reset(&item->GetContactInfo());
321  }
322  else if (auto item = dynamic_cast<const CDesktopCitSubItem*>(data_item.GetPointer())) {
323  m_SavedObject.Reset(&item->GetCitSub());
325  }
326  else if (auto item = dynamic_cast<const CDesktopBioseqsetItem*>(data_item.GetPointer())) {
327  m_SavedObject.Reset(item->GetBioseqsetHandle().GetCompleteBioseq_set());
329  }
330  else if (auto item = dynamic_cast<const CDesktopGraphItem*>(data_item.GetPointer())) {
331  m_SavedObject.Reset(item->GetGraphHandle().GetSeq_graph());
333  }
334 
335  event.Skip();
336 }
337 
338 void CDesktopViewContext::OnPasteSelection(wxCommandEvent& event)
339 {
341  if (!data_item || !m_SavedObject || m_SavedType == eSavedObjectType_not_set) return;
342 
343  const string& type = data_item->GetType();
344 
345  switch (m_SavedType){
347  {
348  const CSeqdesc* desc = dynamic_cast<const CSeqdesc*>(m_SavedObject.GetPointer());
349  _ASSERT(desc);
350  if (type == CBioseq::GetTypeInfo()->GetName()
351  || type == CBioseq_set::GetTypeInfo()->GetName()) {
352  CIRef<IEditCommand> add_desc(new CCmdCreateDesc(data_item->GetSeqentryHandle(), *desc));
353  if (add_desc) {
354  m_CmdProccessor.Execute(add_desc);
355  }
356  }
357  break;
358  }
360  {
361  const CSeq_feat* feat = dynamic_cast<const CSeq_feat*>(m_SavedObject.GetPointer());
362  _ASSERT(feat);
363  if (type == CBioseq::GetTypeInfo()->GetName()
364  || type == CBioseq_set::GetTypeInfo()->GetName()
365  || type == CSeq_annot::GetTypeInfo()->GetName()) {
366  CSeq_entry_Handle seh = data_item->GetSeqentryHandle();
367  CIRef<IEditCommand> add_feat(new CCmdCreateFeat(seh, *feat));
368  if (add_feat) {
369  m_CmdProccessor.Execute(add_feat);
370  }
371  }
372  break;
373  }
375  {
376  const CSeq_annot* annot = dynamic_cast<const CSeq_annot*>(m_SavedObject.GetPointer());
377  _ASSERT(annot);
378  if (type == CBioseq::GetTypeInfo()->GetName()
379  || type == CBioseq_set::GetTypeInfo()->GetName()) {
380  CSeq_entry_Handle seh = data_item->GetSeqentryHandle();
381  CIRef<IEditCommand> add_annot(new CCmdCreateSeq_annot(seh, const_cast<CSeq_annot&>(*annot)));
382  if (add_annot) {
383  m_CmdProccessor.Execute(add_annot);
384  }
385  }
386  break;
387  }
389  {
390  const CSeq_align* align = dynamic_cast<const CSeq_align*>(m_SavedObject.GetPointer());
391  _ASSERT(align);
392  if (type == CBioseq::GetTypeInfo()->GetName()
393  || type == CBioseq_set::GetTypeInfo()->GetName()
394  || type == CSeq_annot::GetTypeInfo()->GetName()) {
395  CSeq_entry_Handle seh = data_item->GetSeqentryHandle();
396  CIRef<IEditCommand> add_align(new CCmdCreateAlign(seh, *align));
397  if (add_align) {
398  m_CmdProccessor.Execute(add_align);
399  }
400  }
401  break;
402  }
404  {
405  const CBioseq* bseq = dynamic_cast<const CBioseq*>(m_SavedObject.GetPointer());
406  _ASSERT(bseq);
407  if (type == CBioseq_set::GetTypeInfo()->GetName()) {
408  CRef<CSeq_entry> entry(new CSeq_entry);
409  entry->SetSeq().Assign(*bseq);
410  CIRef<IEditCommand> add_bseq(new CCmdAddSeqEntry(entry, data_item->GetSeqentryHandle()));
411  if (add_bseq) {
412  m_CmdProccessor.Execute(add_bseq);
413  }
414  }
415  break;
416  }
418  {
419  const CContact_info* contact = dynamic_cast<const CContact_info*>(m_SavedObject.GetPointer());
420  _ASSERT(contact);
421  if (type == CSeq_submit::GetTypeInfo()->GetName()) {
422  if (auto item = dynamic_cast<const CDesktopSeqSubmitItem*>(data_item.GetPointer())) {
423  const CSeq_submit& submit = item->GetSeqSubmit();
424  // don't paste it if there isn't a submiblock present already
425  if (!submit.IsSetSub()) return;
426 
427  const CSubmit_block& submit_block = submit.GetSub();
428  CRef<CSerialObject> edited_subblock;
429  edited_subblock.Reset((CSerialObject*)CSubmit_block::GetTypeInfo()->Create());
430  edited_subblock->Assign(submit_block);
431  CSubmit_block& new_subblock = dynamic_cast<CSubmit_block&>(*edited_subblock);
432 
433  new_subblock.SetContact().Assign(*contact);
434 
436  CObject* actual = (CObject*)&submit_block;
437  chg_subblock->Add(actual, CConstRef<CObject>(edited_subblock));
438  CRef<CCmdComposite> cmd(new CCmdComposite("Change contact info"));
439  cmd->AddCommand(*chg_subblock);
441  }
442  }
443  break;
444  }
446  {
447  const CCit_sub* citsub = dynamic_cast<const CCit_sub*>(m_SavedObject.GetPointer());
448  _ASSERT(citsub);
449  if (type == CBioseq::GetTypeInfo()->GetName()
450  || type == CBioseq_set::GetTypeInfo()->GetName()) {
451  CRef<CPub> new_pub(new CPub);
452  new_pub->SetSub().Assign(*citsub);
453  CRef<CSeqdesc> new_desc(new CSeqdesc);
454  new_desc->SetPub().SetPub().Set().push_back(new_pub);
455  CIRef<IEditCommand> add_desc(new CCmdCreateDesc(data_item->GetSeqentryHandle(), *new_desc));
456  if (add_desc) {
457  m_CmdProccessor.Execute(add_desc);
458  }
459  }
460  else if (type == CSeq_submit::GetTypeInfo()->GetName()) {
461  if (auto item = dynamic_cast<const CDesktopSeqSubmitItem*>(data_item.GetPointer())) {
462  const CSeq_submit& submit = item->GetSeqSubmit();
463  // don't paste it if there isn't a submiblock present already
464  if (!submit.IsSetSub()) return;
465 
466  const CSubmit_block& submit_block = submit.GetSub();
467  CRef<CSerialObject> edited_subblock;
468  edited_subblock.Reset((CSerialObject*)CSubmit_block::GetTypeInfo()->Create());
469  edited_subblock->Assign(submit_block);
470  CSubmit_block& new_subblock = dynamic_cast<CSubmit_block&>(*edited_subblock);
471 
472  new_subblock.SetCit().Assign(*citsub);
473 
475  CObject* actual = (CObject*)&submit_block;
476  chg_subblock->Add(actual, CConstRef<CObject>(edited_subblock));
477  CRef<CCmdComposite> cmd(new CCmdComposite("Change cit-sub"));
478  cmd->AddCommand(*chg_subblock);
480  }
481  }
482  break;
483  }
485  {
486  const CBioseq_set* bset = dynamic_cast<const CBioseq_set*>(m_SavedObject.GetPointer());
487  _ASSERT(bset);
488  if (type == CBioseq_set::GetTypeInfo()->GetName()) {
489  CRef<CSeq_entry> entry(new CSeq_entry);
490  entry->SetSet().Assign(*bset);
491  CIRef<IEditCommand> add_bset(new CCmdAddSeqEntry(entry, data_item->GetSeqentryHandle()));
492  if (add_bset) {
493  m_CmdProccessor.Execute(add_bset);
494  }
495  }
496  break;
497  }
499  {
500  // not implemented yet
501  }
502  default:
503  break;
504  }
505 }
506 
507 void CDesktopViewContext::OnUpdateCutSelection(wxUpdateUIEvent& event)
508 {
510 }
511 void CDesktopViewContext::OnUpdateCopySelection(wxUpdateUIEvent& event)
512 {
514 }
516 {
517  (m_SavedObject) ? event.Enable(true) : event.Enable(false);
518 }
519 
521 {
522  event.Enable(false);
524  if (!data_item) return;
525 
526  if (!dynamic_cast<const CDesktopSeqSubmitItem*>(data_item.GetPointer())) {
527  event.Enable(true);
528  }
529 }
530 
532 {
534  if (!data_item || !m_BioseqEditor) return;
535 
536  m_BioseqEditor->EditSelection();
537 }
538 
540 
EVT_UPDATE_UI(eCmdAlnShowMethodsDlg, CAlnMultiWidget::OnUpdateShowMethodDlg) EVT_UPDATE_UI(eCmdMethodProperties
CBioseq_Handle –.
CBioseq_set_Handle –.
void Add(CObject *obj, const CObject *new_obj)
CContact_info –.
Defines a scrollable canvas for drawing purposes.
IDesktopItem * GetSelection() const
const objects::CSubmit_block & GetSubmitBlock() const
const objects::CSubmit_block & GetSubmitBlock() const
ESavedObjectType m_SavedType
Type of the saved object resulting from a Cut/Copy operation.
void OnPasteSelection(wxCommandEvent &event)
virtual void GetCurrentSelection(TEditObjectList &)
void OnCopySelection(wxCommandEvent &event)
void OnUpdateCutSelection(wxUpdateUIEvent &event)
virtual objects::CBioseq_Handle GetCurrentBioseq()
void SetCanvas(CDesktopCanvas *canvas)
void OnUpdateCopySelection(wxUpdateUIEvent &event)
ICommandProccessor & m_CmdProccessor
void x_UpdateCutCopySelection(wxUpdateUIEvent &event)
CConstRef< IDesktopDataItem > x_GetSelectedDataItem() const
void OnCutSelection(wxCommandEvent &event)
CIRef< IBioseqEditor > m_BioseqEditor
void OnUpdatePasteSelection(wxUpdateUIEvent &event)
CConstRef< CSerialObject > m_SavedObject
Saved object resulting from a Cut/Copy operation.
CObject –.
Definition: ncbiobj.hpp:180
Definition: Pub.hpp:56
CSeq_entry_Handle –.
Definition: Seq_entry.hpp:56
CSeq_feat_Handle –.
namespace ncbi::objects::
Definition: Seq_feat.hpp:58
Base class for all serializable objects.
Definition: serialbase.hpp:150
CSubmit_block –.
CUICommandRegistry is a centralized registry where all application commands should be registered.
Definition: ui_command.hpp:146
static CUICommandRegistry & GetInstance()
the main instance associated with the application
Definition: ui_command.cpp:176
wxMenu * CreateMenu(const SwxMenuItemRec *items)
create a menu from a static definition (see WX_*_MENU macros)
Definition: ui_command.cpp:349
IBioseqEditor.
Undo/Redo interface for editing operations.
virtual void Execute(IEditCommand *command, wxWindow *window=0)=0
virtual const CObject * GetObject(void) const =0
virtual objects::CSeq_entry_Handle GetSeqentryHandle() const =0
virtual const string & GetType() const
virtual CConstRef< IDesktopDataItem > GetDataItem() const =0
static CS_COMMAND * cmd
Definition: ct_dynamic.c:26
#define _(proto)
Definition: ct_nlmzip_i.h:78
CChangeUnindexedObjectCommand< objects::CSubmit_block > CChangeSubmitBlockCommand
USING_SCOPE(objects)
#define NULL
Definition: ncbistd.hpp:225
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
const CSeqFeatData & GetData(void) const
bool IsSetData(void) const
TObjectType * GetPointer(void) const THROWS_NONE
Get pointer,.
Definition: ncbiobj.hpp:1684
void Reset(void)
Reset reference object.
Definition: ncbiobj.hpp:1439
void Reset(void)
Reset reference object.
Definition: ncbiobj.hpp:773
#define END_NCBI_SCOPE
End previously defined NCBI scope.
Definition: ncbistl.hpp:103
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
Definition: ncbistl.hpp:100
TSub & SetSub(void)
Select the variant.
Definition: Pub_.cpp:195
bool IsCdregion(void) const
Check if variant Cdregion is selected.
TSet & SetSet(void)
Select the variant.
Definition: Seq_entry_.cpp:130
TSeq & SetSeq(void)
Select the variant.
Definition: Seq_entry_.cpp:108
void SetPub(TPub &value)
Assign a value to Pub data member.
Definition: Pubdesc_.cpp:72
TPub & SetPub(void)
Select the variant.
Definition: Seqdesc_.cpp:362
void SetCit(TCit &value)
Assign a value to Cit data member.
void ResetContact(void)
Reset Contact data member.
void ResetCit(void)
Reset Cit data member.
const TSub & GetSub(void) const
Get the Sub member data.
bool IsSetSub(void) const
Check if a value has been assigned to Sub data member.
void SetContact(TContact &value)
Assign a value to Contact data member.
vector< CEditObject > TEditObjectList
END_EVENT_TABLE()
ViewerWindowBase::OnEditMenu ViewerWindowBase::OnJustification EVT_MENU(MID_SHOW_GEOM_VLTNS, ViewerWindowBase::OnShowGeomVltns) EVT_MENU(MID_FIND_PATTERN
Definition: type.c:6
#define _ASSERT
#define WX_DEFINE_MENU(name)
New macros for defining menus for use with CUICommandRegistry.
Definition: ui_command.hpp:266
#define WX_END_MENU()
Definition: ui_command.hpp:294
#define WX_MENU_ITEM(cmd)
Definition: ui_command.hpp:270
CRef< CCmdComposite > GetDeleteSequenceCommand(objects::CBioseq_Handle bsh)
CRef< CCmdComposite > GetDeleteFeatureCommand(const objects::CSeq_feat_Handle &fh, bool remove_proteins=true)
void Merge(wxMenu &menu_1, const wxMenu &menu_2)
merges all items form menu_2 into menu_1, preserving the structure if possible
Definition: wx_utils.cpp:579
#define const
Definition: zconf.h:230
Modified on Sat Dec 02 09:20:07 2023 by modify_doxy.py rev. 669887