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

Go to the SVN repository for this file.

1 /* $Id: molinfo_edit_dlg.cpp 42224 2019-01-16 16:10:33Z 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: Igor Filippov
27  */
28 
29 
30 #include <ncbi_pch.hpp>
31 
32 ////@begin includes
33 ////@end includes
34 
35 #include <objmgr/scope.hpp>
37 #include <objmgr/feat_ci.hpp>
38 #include <objmgr/bioseq_ci.hpp>
40 #include <objmgr/util/feature.hpp>
43 
44 #include <util/xregexp/regexp.hpp>
45 
46 #include <wx/button.h>
47 #include <wx/statbox.h>
48 #include <wx/stattext.h>
49 #include <wx/msgdlg.h>
50 
51 ////@begin XPM images
52 ////@end XPM images
53 
55 
56 
57 
58 IMPLEMENT_DYNAMIC_CLASS( CMolInfoEditDlg, wxDialog )
59 
60 
61 BEGIN_EVENT_TABLE( CMolInfoEditDlg, wxDialog )
62 
63 
65 
67 {
68  Init();
69 }
70 
71 CMolInfoEditDlg::CMolInfoEditDlg( wxWindow* parent, objects::CSeq_entry_Handle seh,
72  wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
73 : m_TopSeqEntry(seh)
74 {
75  Init();
76  Create(parent, id, caption, pos, size, style);
77 }
78 
79 
80 bool CMolInfoEditDlg::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
81 {
82  SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
83  wxDialog::Create( parent, id, caption, pos, size, style );
84 
86  if (GetSizer())
87  {
88  GetSizer()->SetSizeHints(this);
89  }
90  Centre();
91 
92  return true;
93 }
94 
95 
97 {
98 }
99 
100 
101 /*!
102  * Member initialisation
103  */
104 
106 {
107 
109  m_biomol["genomic"] = CMolInfo::eBiomol_genomic;
110  m_biomol["precursor RNA"] = CMolInfo::eBiomol_pre_RNA;
114 // CMolInfo::eBiomol_snRNA
115 // CMolInfo::eBiomol_scRNA
116 // CMolInfo::eBiomol_peptide
117  m_biomol["other-genetic"] = CMolInfo::eBiomol_other_genetic;
118  m_biomol["genomic mRNA"] = CMolInfo::eBiomol_genomic_mRNA;
120 // CMolInfo::eBiomol_snoRNA
121  m_biomol["transcribed RNA"] = CMolInfo::eBiomol_transcribed_RNA;
124 // CMolInfo::eBiomol_other
125 
127  m_tech["standard"] = CMolInfo::eTech_standard;
128  m_tech["EST"] = CMolInfo::eTech_est;
129  m_tech["STS"] = CMolInfo::eTech_sts;
130  m_tech["survey"] = CMolInfo::eTech_survey;
131  m_tech["genetic map"] = CMolInfo::eTech_genemap;
132  m_tech["physical map"] = CMolInfo::eTech_physmap;
133  m_tech["derived"] = CMolInfo::eTech_derived;
134  m_tech["concept-trans"] = CMolInfo::eTech_concept_trans;
135  m_tech["seq-pept"] = CMolInfo::eTech_seq_pept;
136  m_tech["both"] = CMolInfo::eTech_both;
137  m_tech["seq-pept-overlap"] = CMolInfo::eTech_seq_pept_overlap;
138  m_tech["seq-pept-homol"] = CMolInfo::eTech_seq_pept_homol;
139  m_tech["concept-trans-a"] = CMolInfo::eTech_concept_trans_a;
140  m_tech["HTGS-1"] = CMolInfo::eTech_htgs_1;
141  m_tech["HTGS-2"] = CMolInfo::eTech_htgs_2;
142  m_tech["HTGS-3"] = CMolInfo::eTech_htgs_3;
143  m_tech["fli-cDNA"] = CMolInfo::eTech_fli_cdna;
144  m_tech["HTGS-0"] = CMolInfo::eTech_htgs_0;
145  m_tech["HTC"] = CMolInfo::eTech_htc;
146  m_tech["WGS"] = CMolInfo::eTech_wgs;
147  m_tech["BARCODE"] = CMolInfo::eTech_barcode;
148  m_tech["composite WGS-HTGS"] = CMolInfo::eTech_composite_wgs_htgs;
149  m_tech["TSA"] = CMolInfo::eTech_tsa;
150  m_tech["other"] = CMolInfo::eTech_other;
151 
161 
163  m_class["DNA"] = CSeq_inst::eMol_dna;
164  m_class["RNA"] = CSeq_inst::eMol_rna;
165  m_class["protein"] = CSeq_inst::eMol_aa;
166  m_class["nucleotide"] = CSeq_inst::eMol_na;
167  m_class["other"] = CSeq_inst::eMol_other;
168 
174 
175 
177  m_strand["single"] = CSeq_inst::eStrand_ss;
178  m_strand["double"] = CSeq_inst::eStrand_ds;
181 }
182 
183 
184 
185 
187 {
188  CMolInfoEditDlg* itemDialog1 = this;
189 
190  wxBoxSizer* itemBoxSizer1 = new wxBoxSizer(wxVERTICAL);
191  itemDialog1->SetSizer(itemBoxSizer1);
192 
193 
194  wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
195  itemBoxSizer1->Add(itemBoxSizer2, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 3);
196  wxStaticText* itemStaticText1 = new wxStaticText( itemDialog1, wxID_STATIC, _(" "), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
197  itemBoxSizer2->Add(itemStaticText1, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP, 5);
198  wxStaticText* itemStaticText2 = new wxStaticText( itemDialog1, wxID_STATIC, _("From"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE|wxST_NO_AUTORESIZE );
199  itemBoxSizer2->Add(itemStaticText2, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP, 5);
200  wxStaticText* itemStaticText3 = new wxStaticText( itemDialog1, wxID_STATIC, _(" "), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
201  itemBoxSizer2->Add(itemStaticText3, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP, 5);
202  wxStaticText* itemStaticText4 = new wxStaticText( itemDialog1, wxID_STATIC, _("To"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE|wxST_NO_AUTORESIZE );
203  itemBoxSizer2->Add(itemStaticText4, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP, 5);
204 
205  wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL);
206  itemBoxSizer1->Add(itemBoxSizer3, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 3);
207 
208  wxStaticText* itemStaticText5 = new wxStaticText( itemDialog1, wxID_STATIC, _("Molecule"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
209  itemBoxSizer3->Add(itemStaticText5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 2);
210 
211  wxArrayString molecule1,molecule2;
212  molecule1.Add(ToWxString("Any"));
213  molecule2.Add(ToWxString("No change"));
215  {
216  molecule1.Add(ToWxString(i->first));
217  molecule2.Add(ToWxString(i->first));
218  }
219  m_ChoiceMolecule1 = new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(100, -1), molecule1,0,wxDefaultValidator);
220  m_ChoiceMolecule1->SetSelection(0);
221  itemBoxSizer3->Add(m_ChoiceMolecule1, 0, wxALIGN_LEFT|wxALL, 2);
222 
223  wxStaticText* itemStaticText6 = new wxStaticText( itemDialog1, wxID_STATIC, _("Molecule"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
224  itemBoxSizer3->Add(itemStaticText6, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 2);
225 
226  m_ChoiceMolecule2 = new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(100, -1), molecule2,0,wxDefaultValidator);
227  m_ChoiceMolecule2->SetSelection(0);
228  itemBoxSizer3->Add(m_ChoiceMolecule2, 0, wxALIGN_LEFT|wxALL, 2);
229 
230  wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
231  itemBoxSizer1->Add(itemBoxSizer4, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 3);
232 
233  wxStaticText* itemStaticText7 = new wxStaticText( itemDialog1, wxID_STATIC, _("Technique"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
234  itemBoxSizer4->Add(itemStaticText7, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 2);
235 
236  wxArrayString technique1,technique2;
237  technique1.Add(ToWxString("Any"));
238  technique2.Add(ToWxString("No change"));
240  {
241  technique1.Add(ToWxString(i->first));
242  technique2.Add(ToWxString(i->first));
243  }
244  m_ChoiceTechnique1 = new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(100, -1), technique1,0,wxDefaultValidator);
245  m_ChoiceTechnique1->SetSelection(0);
246  itemBoxSizer4->Add(m_ChoiceTechnique1, 0, wxALIGN_LEFT|wxALL, 2);
247 
248  wxStaticText* itemStaticText8 = new wxStaticText( itemDialog1, wxID_STATIC, _("Technique"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
249  itemBoxSizer4->Add(itemStaticText8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 2);
250 
251  m_ChoiceTechnique2 = new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(100, -1), technique2,0,wxDefaultValidator);
252  m_ChoiceTechnique2->SetSelection(0);
253  itemBoxSizer4->Add(m_ChoiceTechnique2, 0, wxALIGN_LEFT|wxALL, 2);
254 
255  wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxHORIZONTAL);
256  itemBoxSizer1->Add(itemBoxSizer5, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 3);
257 
258  wxStaticText* itemStaticText9 = new wxStaticText( itemDialog1, wxID_STATIC, _("Completeness"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
259  itemBoxSizer5->Add(itemStaticText9, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 2);
260 
261  wxArrayString complete1,complete2;
262  complete1.Add(ToWxString("Any"));
263  complete2.Add(ToWxString("No change"));
265  {
266  complete1.Add(ToWxString(i->first));
267  complete2.Add(ToWxString(i->first));
268  }
269  m_ChoiceComplete1 = new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(100, -1), complete1,0,wxDefaultValidator);
270  m_ChoiceComplete1->SetSelection(0);
271  itemBoxSizer5->Add(m_ChoiceComplete1, 0, wxALIGN_LEFT|wxALL, 2);
272 
273  wxStaticText* itemStaticText10 = new wxStaticText( itemDialog1, wxID_STATIC, _("Completeness"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
274  itemBoxSizer5->Add(itemStaticText10, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 2);
275 
276  m_ChoiceComplete2 = new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(100, -1), complete2,0,wxDefaultValidator);
277  m_ChoiceComplete2->SetSelection(0);
278  itemBoxSizer5->Add(m_ChoiceComplete2, 0, wxALIGN_LEFT|wxALL, 2);
279 
280  wxBoxSizer* itemBoxSizer6 = new wxBoxSizer(wxHORIZONTAL);
281  itemBoxSizer1->Add(itemBoxSizer6, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 3);
282 
283  wxStaticText* itemStaticText11 = new wxStaticText( itemDialog1, wxID_STATIC, _("Class"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
284  itemBoxSizer6->Add(itemStaticText11, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 2);
285 
286  wxArrayString class1,class2;
287  class1.Add(ToWxString("Any"));
288  class2.Add(ToWxString("No change"));
290  {
291  class1.Add(ToWxString(i->first));
292  class2.Add(ToWxString(i->first));
293  }
294  m_ChoiceClass1 = new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(100, -1), class1,0,wxDefaultValidator);
295  m_ChoiceClass1->SetSelection(0);
296  itemBoxSizer6->Add(m_ChoiceClass1, 0, wxALIGN_LEFT|wxALL, 2);
297 
298  wxStaticText* itemStaticText12 = new wxStaticText( itemDialog1, wxID_STATIC, _("Class"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
299  itemBoxSizer6->Add(itemStaticText12, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 2);
300 
301  m_ChoiceClass2 = new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(100, -1), class2,0,wxDefaultValidator);
302  m_ChoiceClass2->SetSelection(0);
303  itemBoxSizer6->Add(m_ChoiceClass2, 0, wxALIGN_LEFT|wxALL, 2);
304 
305  wxBoxSizer* itemBoxSizer7 = new wxBoxSizer(wxHORIZONTAL);
306  itemBoxSizer1->Add(itemBoxSizer7, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 3);
307 
308  wxStaticText* itemStaticText13 = new wxStaticText( itemDialog1, wxID_STATIC, _("Topology"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
309  itemBoxSizer7->Add(itemStaticText13, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 2);
310 
311  wxArrayString topology1,topology2;
312  topology1.Add(ToWxString("Any"));
313  topology2.Add(ToWxString("No change"));
315  {
316  topology1.Add(ToWxString(i->first));
317  topology2.Add(ToWxString(i->first));
318  }
319  m_ChoiceTopology1 = new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(100, -1), topology1,0,wxDefaultValidator);
320  m_ChoiceTopology1->SetSelection(0);
321  itemBoxSizer7->Add(m_ChoiceTopology1, 0, wxALIGN_LEFT|wxALL, 2);
322 
323  wxStaticText* itemStaticText14 = new wxStaticText( itemDialog1, wxID_STATIC, _("Topology"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
324  itemBoxSizer7->Add(itemStaticText14, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 2);
325 
326  m_ChoiceTopology2 = new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(100, -1), topology2,0,wxDefaultValidator);
327  m_ChoiceTopology2->SetSelection(0);
328  itemBoxSizer7->Add(m_ChoiceTopology2, 0, wxALIGN_LEFT|wxALL, 2);
329 
330  wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxHORIZONTAL);
331  itemBoxSizer1->Add(itemBoxSizer8, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 3);
332 
333  wxStaticText* itemStaticText15 = new wxStaticText( itemDialog1, wxID_STATIC, _("Strand"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
334  itemBoxSizer8->Add(itemStaticText15, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 2);
335 
336  wxArrayString strand1,strand2;
337  strand1.Add(ToWxString("Any"));
338  strand2.Add(ToWxString("No change"));
340  {
341  strand1.Add(ToWxString(i->first));
342  strand2.Add(ToWxString(i->first));
343  }
344  m_ChoiceStrand1 = new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(100, -1), strand1,0,wxDefaultValidator);
345  m_ChoiceStrand1->SetSelection(0);
346  itemBoxSizer8->Add(m_ChoiceStrand1, 0, wxALIGN_LEFT|wxALL, 2);
347 
348  wxStaticText* itemStaticText16 = new wxStaticText( itemDialog1, wxID_STATIC, _("Strand"), wxDefaultPosition, wxSize(100, -1), wxALIGN_CENTRE );
349  itemBoxSizer8->Add(itemStaticText16, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 2);
350 
351  m_ChoiceStrand2 = new wxChoice(itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(100, -1), strand2,0,wxDefaultValidator);
352  m_ChoiceStrand2->SetSelection(0);
353  itemBoxSizer8->Add(m_ChoiceStrand2, 0, wxALIGN_LEFT|wxALL, 2);
354 
355  wxBoxSizer* itemBoxSizer9 = new wxBoxSizer(wxHORIZONTAL);
356  itemBoxSizer1->Add(itemBoxSizer9, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 3);
357 
358  m_CreateNew = new wxCheckBox( itemDialog1,wxID_ANY, _("Create MolInfo descriptors if not present"));
359  itemBoxSizer9->Add(m_CreateNew, 0, wxALIGN_LEFT|wxALL, 4);
360 
361  wxBoxSizer* itemBoxSizer10 = new wxBoxSizer(wxHORIZONTAL);
362  itemBoxSizer1->Add(itemBoxSizer10, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 2);
363  m_RBAny = new wxRadioButton( itemDialog1, wxID_ANY, _("Any Sequence"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
364  m_RBAny->SetValue(false);
365  itemBoxSizer10->Add(m_RBAny, 0, wxALIGN_LEFT|wxALL, 4);
366  m_RBNuc = new wxRadioButton( itemDialog1, wxID_ANY, _("Nucleotides"));
367  m_RBNuc->SetValue(true);
368  itemBoxSizer10->Add(m_RBNuc, 0, wxALIGN_LEFT|wxALL, 4);
369  m_RBDna = new wxRadioButton( itemDialog1, wxID_ANY, _("DNA"));
370  m_RBDna->SetValue(false);
371  itemBoxSizer10->Add(m_RBDna, 0, wxALIGN_LEFT|wxALL, 4);
372  m_RBProt = new wxRadioButton( itemDialog1, wxID_ANY, _("Proteins"));
373  m_RBProt->SetValue(false);
374  itemBoxSizer10->Add(m_RBProt, 0, wxALIGN_LEFT|wxALL, 4);
375  m_RBRna = new wxRadioButton( itemDialog1, wxID_ANY, _("RNA"));
376  m_RBRna->SetValue(false);
377  itemBoxSizer10->Add(m_RBRna, 0, wxALIGN_LEFT|wxALL, 4);
378 
379  wxBoxSizer* itemBoxSizer11 = new wxBoxSizer(wxHORIZONTAL);
380  itemBoxSizer1->Add(itemBoxSizer11, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 2);
381  wxButton* itemButton1 = new wxButton( itemDialog1, wxID_OK, _("Accept"), wxDefaultPosition, wxDefaultSize, 0 );
382  itemBoxSizer11->Add(itemButton1, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
383  wxButton* itemButton2 = new wxButton( itemDialog1, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
384  itemBoxSizer11->Add(itemButton2, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
385 
386 }
387 
388 
389 /*!
390  * Should we show tooltips?
391  */
392 
394 {
395  return true;
396 }
397 
398 /*!
399  * Get bitmap resources
400  */
401 
402 wxBitmap CMolInfoEditDlg::GetBitmapResource( const wxString& name )
403 {
404  // Bitmap retrieval
405  wxUnusedVar(name);
406  return wxNullBitmap;
407 }
408 
409 /*!
410  * Get icon resources
411  */
412 
413 wxIcon CMolInfoEditDlg::GetIconResource( const wxString& name )
414 {
415  // Icon retrieval
416  wxUnusedVar(name);
417  return wxNullIcon;
418 }
419 
421 {
422  CRef<CCmdComposite> cmd( new CCmdComposite("Remove Descriptors") );
423  if (m_TopSeqEntry)
424  {
425  int item_mol1 = m_ChoiceMolecule1->GetSelection();
426  int item_mol2 = m_ChoiceMolecule2->GetSelection();
427  int item_tech1 = m_ChoiceTechnique1->GetSelection();
428  int item_tech2 = m_ChoiceTechnique2->GetSelection();
429  int item_complete1 = m_ChoiceComplete1->GetSelection();
430  int item_complete2 = m_ChoiceComplete2->GetSelection();
431  if (item_mol1 != wxNOT_FOUND && item_mol2 != wxNOT_FOUND &&
432  item_tech1 != wxNOT_FOUND && item_tech2 != wxNOT_FOUND &&
433  item_complete1 != wxNOT_FOUND && item_complete2 != wxNOT_FOUND)
434  {
435 
436  string choice_mol1 = ToStdString(m_ChoiceMolecule1->GetString(item_mol1));
437  string choice_mol2 = ToStdString(m_ChoiceMolecule2->GetString(item_mol2));
438  int sel_mol1,sel_mol2;
439  if (item_mol1 == 0) sel_mol1 = -1;
440  else sel_mol1 = m_biomol[choice_mol1];
441  if (item_mol2 == 0) sel_mol2 = -1;
442  else sel_mol2 = m_biomol[choice_mol2];
443  string choice_tech1 = ToStdString(m_ChoiceTechnique1->GetString(item_tech1));
444  string choice_tech2 = ToStdString(m_ChoiceTechnique2->GetString(item_tech2));
445  int sel_tech1,sel_tech2;
446  if (item_tech1 == 0) sel_tech1 = -1;
447  else sel_tech1 = m_tech[choice_tech1];
448  if (item_tech2 == 0) sel_tech2 = -1;
449  else sel_tech2 = m_tech[choice_tech2];
450  string choice_complete1 = ToStdString(m_ChoiceComplete1->GetString(item_complete1));
451  string choice_complete2 = ToStdString(m_ChoiceComplete2->GetString(item_complete2));
452  int sel_complete1,sel_complete2;
453  if (item_complete1 == 0) sel_complete1 = -1;
454  else sel_complete1 = m_complete[choice_complete1];
455  if (item_complete2 == 0) sel_complete2 = -1;
456  else sel_complete2 = m_complete[choice_complete2];
457  ApplyToMolInfo (*(m_TopSeqEntry.GetCompleteSeq_entry()), cmd, sel_mol1, sel_mol2, sel_tech1, sel_tech2, sel_complete1, sel_complete2);
458  }
459 
460  int item_class1 = m_ChoiceClass1->GetSelection();
461  int item_class2 = m_ChoiceClass2->GetSelection();
462  int item_topology1 = m_ChoiceTopology1->GetSelection();
463  int item_topology2 = m_ChoiceTopology2->GetSelection();
464  int item_strand1 = m_ChoiceStrand1->GetSelection();
465  int item_strand2 = m_ChoiceStrand2->GetSelection();
466  if (item_class1 != wxNOT_FOUND && item_class2 != wxNOT_FOUND &&
467  item_topology1 != wxNOT_FOUND && item_topology2 != wxNOT_FOUND &&
468  item_strand1 != wxNOT_FOUND && item_strand2 != wxNOT_FOUND)
469  {
470 
471  string choice_class1 = ToStdString(m_ChoiceClass1->GetString(item_class1));
472  string choice_class2 = ToStdString(m_ChoiceClass2->GetString(item_class2));
473  int sel_class1,sel_class2;
474  if (item_class1 == 0) sel_class1 = -1;
475  else sel_class1 = static_cast<int>(m_class[choice_class1]);
476  if (item_class2 == 0) sel_class2 = -1;
477  else sel_class2 = static_cast<int>(m_class[choice_class2]);
478  string choice_topology1 = ToStdString(m_ChoiceTopology1->GetString(item_topology1));
479  string choice_topology2 = ToStdString(m_ChoiceTopology2->GetString(item_topology2));
480  int sel_topology1,sel_topology2;
481  if (item_topology1 == 0) sel_topology1 = -1;
482  else sel_topology1 = static_cast<int>(m_topology[choice_topology1]);
483  if (item_topology2 == 0) sel_topology2 = -1;
484  else sel_topology2 = static_cast<int>(m_topology[choice_topology2]);
485  string choice_strand1 = ToStdString(m_ChoiceStrand1->GetString(item_strand1));
486  string choice_strand2 = ToStdString(m_ChoiceStrand2->GetString(item_strand2));
487  int sel_strand1,sel_strand2;
488  if (item_strand1 == 0) sel_strand1 = -1;
489  else sel_strand1 = static_cast<int>(m_strand[choice_strand1]);
490  if (item_strand2 == 0) sel_strand2 = -1;
491  else sel_strand2 = static_cast<int>(m_strand[choice_strand2]);
492  ApplyToInst (*(m_TopSeqEntry.GetCompleteSeq_entry()), cmd, sel_class1, sel_class2, sel_topology1, sel_topology2, sel_strand1, sel_strand2);
493  }
494  }
495  return cmd;
496 }
497 
499 {
501  CSeq_entry_Handle pseh = seh.GetParentEntry();
503  if (! prot) return res;
504  while (prot)
505  {
506  if (prot->IsSetData() && prot->GetData().IsProt() && prot->GetData().GetProt().IsSetProcessed())
507  {
508  CProt_ref::TProcessed processed = prot->GetData().GetProt().GetProcessed();
509  if (processed == CProt_ref::eProcessed_not_set)
510  {
511  const CSeq_loc& prot_loc = prot->GetLocation();
512  bool partial5 = prot_loc.IsPartialStart(eExtreme_Biological);
513  bool partial3 = prot_loc.IsPartialStop(eExtreme_Biological);
514  if (!partial3 && !partial5)
516  else if (partial3 && !partial5)
518  else if (!partial3 && partial5)
520  else if (partial3 && partial5)
522  }
523  }
524  ++prot;
525  }
526  return res;
527 }
528 
529 
530 void CMolInfoEditDlg::CreateNewMolInfo(const CSeq_entry& se, CCmdComposite* composite, int choice_mol2, int choice_tech2, int choice_complete2)
531 {
532  if (choice_mol2 == -1 && choice_tech2 == -1 && choice_complete2 == -1)
533  {
534  wxMessageBox(wxT("Nothing set for created MolInfo records"), wxT("Error"), wxOK | wxICON_ERROR, this);
535  return;
536  }
537  CRef<CMolInfo> molinfo(new CMolInfo);
538  CRef<CSeqdesc> desc(new CSeqdesc);
539  CSeq_entry_Handle seh = m_TopSeqEntry.GetScope().GetSeq_entryHandle(se);
540 
541  if (se.IsSeq() && se.GetSeq().IsSetInst() && se.GetSeq().GetInst().IsSetMol() && se.GetSeq().GetInst().GetMol() == CSeq_inst::eMol_aa)
542  {
543  molinfo->SetBiomol(CMolInfo::eBiomol_peptide);
544  molinfo->SetCompleteness(compute_peptide_completeness(seh));
545  }
546  else
547  {
548  molinfo->SetBiomol(CMolInfo::eBiomol_unknown);
549  molinfo->SetCompleteness(CMolInfo::eCompleteness_unknown);
550  }
551 
552  if (choice_mol2 != -1)
553  molinfo->SetBiomol(choice_mol2);
554 
555  if (choice_complete2 != -1)
556  molinfo->SetCompleteness(choice_complete2);
557 
558  if (choice_tech2 != -1)
559  molinfo->SetTech(choice_tech2);
560  else
561  molinfo->SetTech(CMolInfo::eTech_unknown);
562 
563  desc->SetMolinfo(*molinfo);
564  CCmdCreateDesc* cmd = new CCmdCreateDesc(seh,*desc);
565  composite->AddCommand(*cmd);
566 }
567 
568 void CMolInfoEditDlg::ApplyToMolInfo (const CSeq_entry& se, CCmdComposite* composite, int choice_mol1, int choice_mol2, int choice_tech1, int choice_tech2, int choice_complete1, int choice_complete2)
569 {
570 
571  if (se.IsSeq() && se.GetSeq().IsSetInst())
572  {
573  const CSeq_inst& inst = se.GetSeq().GetInst();
574  if ( (inst.IsNa() && m_RBNuc->GetValue()) ||
575  (inst.IsAa() && m_RBProt->GetValue()) ||
576  (inst.IsSetMol() && inst.GetMol() == CSeq_inst::eMol_dna && m_RBDna->GetValue()) ||
577  (inst.IsSetMol() && inst.GetMol() == CSeq_inst::eMol_rna && m_RBRna->GetValue()) ||
578  m_RBAny->GetValue())
579  {
580  bool found = false;
582  {
583  if ((*it)->IsMolinfo())
584  {
585  found = true;
586  const CMolInfo& molinfo = (*it)->GetMolinfo();
587 
588  CRef<CSeqdesc> edited_desc(new CSeqdesc);
589  edited_desc->Assign(**it);
590  CMolInfo& edited_molinfo = edited_desc->SetMolinfo();
591 
592  bool modified = false;
593  if (molinfo.IsSetBiomol())
594  {
595  if ((molinfo.GetBiomol() == choice_mol1 || choice_mol1 == -1) && choice_mol2 != -1 && choice_mol1 != choice_mol2)
596  {
597  modified = true;
598  edited_molinfo.SetBiomol(choice_mol2);
599  }
600  }
601  else if (choice_mol2 != -1)
602  {
603  modified = true;
604  edited_molinfo.SetBiomol(choice_mol2);
605  }
606  if (molinfo.IsSetTech())
607  {
608  if ((molinfo.GetTech() == choice_tech1 || choice_tech1 == -1) && choice_tech2 != -1 && choice_tech1 != choice_tech2)
609  {
610  modified = true;
611  edited_molinfo.SetTech(choice_tech2);
612  }
613  }
614  else if (choice_tech2 != -1)
615  {
616  modified = true;
617  edited_molinfo.SetTech(choice_tech2);
618  }
619  if (molinfo.IsSetCompleteness())
620  {
621  if ((molinfo.GetCompleteness() == choice_complete1 || choice_complete1 == -1) && choice_complete2 != -1 && choice_complete1 != choice_complete2)
622  {
623  modified = true;
624  edited_molinfo.SetCompleteness(choice_complete2);
625  }
626  }
627  else if (choice_complete2 != -1)
628  {
629  modified = true;
630  edited_molinfo.SetCompleteness(choice_complete2);
631  }
632  if (modified)
633  {
634  CRef<CCmdChangeSeqdesc> cmd(new CCmdChangeSeqdesc(m_TopSeqEntry.GetScope().GetSeq_entryHandle(se), **it, *edited_desc));
635  composite->AddCommand(*cmd);
636  }
637  }
638  }
639 
640  if (!found && m_CreateNew->IsChecked())
641  CreateNewMolInfo(se,composite,choice_mol2,choice_tech2,choice_complete2);
642  }
643  }
644  if (se.IsSet()) {
646  ApplyToMolInfo (**it, composite, choice_mol1, choice_mol2, choice_tech1, choice_tech2, choice_complete1, choice_complete2);
647  }
648  }
649 }
650 
651 void CMolInfoEditDlg::ApplyToInst (const CSeq_entry& se, CCmdComposite* composite, int choice_class1, int choice_class2, int choice_topology1, int choice_topology2, int choice_strand1, int choice_strand2)
652 {
653 
654  if (se.IsSeq() && se.GetSeq().IsSetInst())
655  {
656  const CSeq_inst& inst = se.GetSeq().GetInst();
657  if ( (inst.IsNa() && m_RBNuc->GetValue()) ||
658  (inst.IsAa() && m_RBProt->GetValue()) ||
659  (inst.IsSetMol() && inst.GetMol() == CSeq_inst::eMol_dna && m_RBDna->GetValue()) ||
660  (inst.IsSetMol() && inst.GetMol() == CSeq_inst::eMol_rna && m_RBRna->GetValue()) ||
661  m_RBAny->GetValue())
662  {
663  CRef<CSerialObject> edited_object;
664  edited_object.Reset((CSerialObject*)CSeq_inst::GetTypeInfo()->Create());
665  edited_object->Assign(inst);
666  CSeq_inst& edited_inst = dynamic_cast<CSeq_inst&>(*edited_object);
667  bool modified = false;
668  if ((choice_class1 == -1 || (inst.IsSetMol() && inst.GetMol() == static_cast<CSeq_inst::EMol>(choice_class1))) && choice_class2 != -1 && choice_class1 != choice_class2)
669  {
670  modified = true;
671  edited_inst.SetMol(static_cast<CSeq_inst::EMol>(choice_class2));
672  }
673  if ((choice_topology1 == -1 || (inst.IsSetTopology() && inst.GetTopology() == static_cast<CSeq_inst::ETopology>(choice_topology1))) && choice_topology2 != -1 && choice_topology1 != choice_topology2)
674  {
675  modified = true;
676  edited_inst.SetTopology(static_cast<CSeq_inst::ETopology>(choice_topology2));
677  }
678  if ((choice_strand1 == -1 || (inst.IsSetStrand() && inst.GetStrand() == static_cast<CSeq_inst::EStrand>(choice_strand1))) && choice_strand2 != -1 && choice_strand1 != choice_strand2)
679  {
680  modified = true;
681  edited_inst.SetStrand(static_cast<CSeq_inst::EStrand>(choice_strand2));
682  }
683  if (modified)
684  {
685  CBioseq_Handle bh = m_TopSeqEntry.GetScope().GetBioseqHandle(se.GetSeq());
686  CCmdChangeBioseqInst* cmd = new CCmdChangeBioseqInst(bh, edited_inst);
687  composite->AddCommand(*cmd);
688  }
689  }
690  }
691  if (se.IsSet()) {
693  ApplyToInst (**it, composite, choice_class1, choice_class2, choice_topology1, choice_topology2, choice_strand1, choice_strand2);
694  }
695  }
696 }
697 
698 
@ eExtreme_Biological
5' and 3'
Definition: Na_strand.hpp:62
CBioseq_Handle –.
void AddCommand(IEditCommand &command)
CFeat_CI –.
Definition: feat_ci.hpp:64
map< string, int > m_tech
CMolInfo::ECompleteness compute_peptide_completeness(CSeq_entry_Handle seh)
wxChoice * m_ChoiceTopology2
map< string, CSeq_inst::EMol > m_class
wxChoice * m_ChoiceTopology1
bool Create(wxWindow *parent, wxWindowID id=11000, const wxString &caption=_("Edit MolInfo"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX|wxTAB_TRAVERSAL)
Creation.
wxChoice * m_ChoiceClass2
wxCheckBox * m_CreateNew
wxChoice * m_ChoiceTechnique2
static bool ShowToolTips()
Should we show tooltips?
wxChoice * m_ChoiceStrand2
CMolInfoEditDlg()
Constructors.
void CreateNewMolInfo(const CSeq_entry &se, CCmdComposite *composite, int choice_mol2, int choice_tech2, int choice_complete2)
wxChoice * m_ChoiceStrand1
wxRadioButton * m_RBAny
wxRadioButton * m_RBProt
wxChoice * m_ChoiceTechnique1
map< string, int > m_biomol
~CMolInfoEditDlg()
Destructor.
wxChoice * m_ChoiceMolecule1
wxRadioButton * m_RBNuc
wxChoice * m_ChoiceClass1
void CreateControls()
Creates the controls and sizers.
map< string, CSeq_inst::ETopology > m_topology
wxChoice * m_ChoiceComplete1
wxIcon GetIconResource(const wxString &name)
Retrieves icon resources.
map< string, int > m_complete
objects::CSeq_entry_Handle m_TopSeqEntry
void ApplyToInst(const CSeq_entry &se, CCmdComposite *composite, int choice_class1, int choice_class2, int choice_topology1, int choice_topology2, int choice_strand1, int choice_strand2)
void Init()
Initialises member variables.
wxRadioButton * m_RBDna
map< string, CSeq_inst::EStrand > m_strand
wxRadioButton * m_RBRna
void ApplyToMolInfo(const CSeq_entry &se, CCmdComposite *composite, int choice_mol1, int choice_mol2, int choice_tech1, int choice_tech2, int choice_complete1, int choice_complete2)
CRef< CCmdComposite > GetCommand()
wxChoice * m_ChoiceMolecule2
wxBitmap GetBitmapResource(const wxString &name)
Retrieves bitmap resources.
wxChoice * m_ChoiceComplete2
CSeq_entry_Handle –.
Definition: Seq_entry.hpp:56
static bool IsAa(EMol mol)
Definition: Seq_inst.hpp:99
static bool IsNa(EMol mol)
Definition: Seq_inst.hpp:90
Base class for all serializable objects.
Definition: serialbase.hpp:150
const_iterator begin() const
Definition: map.hpp:151
const_iterator end() const
Definition: map.hpp:152
Definition: map.hpp:338
#define _(proto)
Definition: ct_nlmzip_i.h:78
static CS_COMMAND * cmd
Definition: ct_dynamic.c:26
static void Init(void)
Definition: cursor6.c:76
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
CSeq_entry_Handle GetParentEntry(void) const
Get parent Seq-entry handle.
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
EProcessed
processing status
Definition: Prot_ref_.hpp:95
const TSeq & GetSeq(void) const
Get the variant data.
Definition: Seq_entry_.cpp:102
const TSet & GetSet(void) const
Get the variant data.
Definition: Seq_entry_.cpp:124
bool IsSeq(void) const
Check if variant Seq is selected.
Definition: Seq_entry_.hpp:257
bool IsSet(void) const
Check if variant Set is selected.
Definition: Seq_entry_.hpp:263
void SetCompleteness(TCompleteness value)
Assign a value to Completeness data member.
Definition: MolInfo_.hpp:600
bool IsSetCompleteness(void) const
Check if a value has been assigned to Completeness data member.
Definition: MolInfo_.hpp:569
TStrand GetStrand(void) const
Get the Strand member data.
Definition: Seq_inst_.hpp:777
const TInst & GetInst(void) const
Get the Inst member data.
Definition: Bioseq_.hpp:336
TTopology GetTopology(void) const
Get the Topology member data.
Definition: Seq_inst_.hpp:733
bool IsSetMol(void) const
Check if a value has been assigned to Mol data member.
Definition: Seq_inst_.hpp:593
bool IsSetStrand(void) const
Check if a value has been assigned to Strand data member.
Definition: Seq_inst_.hpp:758
bool IsSetBiomol(void) const
Check if a value has been assigned to Biomol data member.
Definition: MolInfo_.hpp:422
TTech GetTech(void) const
Get the Tech member data.
Definition: MolInfo_.hpp:497
bool IsSetInst(void) const
the sequence data Check if a value has been assigned to Inst data member.
Definition: Bioseq_.hpp:324
TMol GetMol(void) const
Get the Mol member data.
Definition: Seq_inst_.hpp:612
TBiomol GetBiomol(void) const
Get the Biomol member data.
Definition: MolInfo_.hpp:447
void SetTopology(TTopology value)
Assign a value to Topology data member.
Definition: Seq_inst_.hpp:739
void SetBiomol(TBiomol value)
Assign a value to Biomol data member.
Definition: MolInfo_.hpp:453
ETopology
topology of molecule
Definition: Seq_inst_.hpp:121
EMol
molecule class in living organism
Definition: Seq_inst_.hpp:108
bool IsSetTech(void) const
Check if a value has been assigned to Tech data member.
Definition: MolInfo_.hpp:472
TCompleteness GetCompleteness(void) const
Get the Completeness member data.
Definition: MolInfo_.hpp:594
EStrand
strandedness in living organism
Definition: Seq_inst_.hpp:133
void SetStrand(TStrand value)
Assign a value to Strand data member.
Definition: Seq_inst_.hpp:786
void SetTech(TTech value)
Assign a value to Tech data member.
Definition: MolInfo_.hpp:503
TMolinfo & SetMolinfo(void)
Select the variant.
Definition: Seqdesc_.cpp:594
void SetMol(TMol value)
Assign a value to Mol data member.
Definition: Seq_inst_.hpp:621
bool IsSetTopology(void) const
Check if a value has been assigned to Topology data member.
Definition: Seq_inst_.hpp:708
@ eCompleteness_unknown
Definition: MolInfo_.hpp:155
@ eCompleteness_has_left
5' or NH3 end present
Definition: MolInfo_.hpp:161
@ eCompleteness_complete
complete biological entity
Definition: MolInfo_.hpp:156
@ eCompleteness_has_right
3' or COOH end present
Definition: MolInfo_.hpp:162
@ eCompleteness_no_left
missing 5' or NH3 end
Definition: MolInfo_.hpp:158
@ eCompleteness_partial
partial but no details given
Definition: MolInfo_.hpp:157
@ eCompleteness_no_right
missing 3' or COOH end
Definition: MolInfo_.hpp:159
@ eCompleteness_no_ends
missing both ends
Definition: MolInfo_.hpp:160
@ eTech_htgs_2
ordered High Throughput sequence contig
Definition: MolInfo_.hpp:138
@ eTech_physmap
from physical mapping techniques
Definition: MolInfo_.hpp:129
@ eTech_other
use Source.techexp
Definition: MolInfo_.hpp:148
@ eTech_htc
high throughput cDNA
Definition: MolInfo_.hpp:142
@ eTech_both
concept transl. w/ partial pept. seq.
Definition: MolInfo_.hpp:133
@ eTech_seq_pept_homol
sequenced peptide, ordered by homology
Definition: MolInfo_.hpp:135
@ eTech_composite_wgs_htgs
composite of WGS and HTGS
Definition: MolInfo_.hpp:145
@ eTech_sts
Sequence Tagged Site.
Definition: MolInfo_.hpp:126
@ eTech_htgs_3
finished High Throughput sequence
Definition: MolInfo_.hpp:139
@ eTech_seq_pept_overlap
sequenced peptide, ordered by overlap
Definition: MolInfo_.hpp:134
@ eTech_htgs_1
unordered High Throughput sequence contig
Definition: MolInfo_.hpp:137
@ eTech_concept_trans
conceptual translation
Definition: MolInfo_.hpp:131
@ eTech_tsa
transcriptome shotgun assembly
Definition: MolInfo_.hpp:146
@ eTech_standard
standard sequencing
Definition: MolInfo_.hpp:124
@ eTech_wgs
whole genome shotgun sequencing
Definition: MolInfo_.hpp:143
@ eTech_seq_pept
peptide was sequenced
Definition: MolInfo_.hpp:132
@ eTech_survey
one-pass genomic sequence
Definition: MolInfo_.hpp:127
@ eTech_barcode
barcode of life project
Definition: MolInfo_.hpp:144
@ eTech_htgs_0
single genomic reads for coordination
Definition: MolInfo_.hpp:141
@ eTech_derived
derived from other data, not a primary entity
Definition: MolInfo_.hpp:130
@ eTech_fli_cdna
full length insert cDNA
Definition: MolInfo_.hpp:140
@ eTech_est
Expressed Sequence Tag.
Definition: MolInfo_.hpp:125
@ eTech_concept_trans_a
conceptual transl. supplied by author
Definition: MolInfo_.hpp:136
@ eTech_genemap
from genetic mapping techniques
Definition: MolInfo_.hpp:128
@ eBiomol_pre_RNA
precursor RNA of any sort really
Definition: MolInfo_.hpp:102
@ eBiomol_cRNA
viral RNA genome copy intermediate
Definition: MolInfo_.hpp:111
@ eBiomol_genomic_mRNA
reported a mix of genomic and cdna sequence
Definition: MolInfo_.hpp:110
@ eBiomol_transcribed_RNA
transcribed RNA other than existing classes
Definition: MolInfo_.hpp:113
@ eBiomol_other_genetic
other genetic material
Definition: MolInfo_.hpp:109
@ eTopology_tandem
some part of tandem repeat
Definition: Seq_inst_.hpp:125
@ eMol_not_set
> cdna = rna
Definition: Seq_inst_.hpp:109
@ eMol_na
just a nucleic acid
Definition: Seq_inst_.hpp:113
@ eStrand_other
default ds for DNA, ss for RNA, pept
Definition: Seq_inst_.hpp:138
@ eStrand_ds
double strand
Definition: Seq_inst_.hpp:136
@ eStrand_ss
single strand
Definition: Seq_inst_.hpp:135
END_EVENT_TABLE()
int i
#define wxT(x)
Definition: muParser.cpp:41
const struct ncbi::grid::netcache::search::fields::SIZE size
static static static wxID_ANY
#define FOR_EACH_SEQENTRY_ON_SEQSET(Itr, Var)
FOR_EACH_SEQENTRY_ON_SEQSET EDIT_EACH_SEQENTRY_ON_SEQSET.
#define FOR_EACH_SEQDESC_ON_SEQENTRY(Itr, Var)
FOR_EACH_SEQDESC_ON_SEQENTRY EDIT_EACH_SEQDESC_ON_SEQENTRY.
C++ wrappers for the Perl-compatible regular expression (PCRE) library.
wxString ToWxString(const string &s)
Definition: wx_utils.hpp:173
string ToStdString(const wxString &s)
Definition: wx_utils.hpp:161
Modified on Wed May 15 15:06:18 2024 by modify_doxy.py rev. 669887