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

Go to the SVN repository for this file.

1 /* $Id: configure_tracks_dlg.cpp 44121 2019-10-31 15:23:32Z katargir $
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: Roman Katargin
27  *
28  * File Description:
29  *
30  */
31 #include <ncbi_pch.hpp>
32 
33 #include "configure_tracks_dlg.hpp"
34 #include "track_list_ctrl.hpp"
35 
37 
38 #include <wx/bitmap.h>
39 #include <wx/icon.h>
40 #include <wx/sizer.h>
41 #include <wx/button.h>
42 #include <wx/stattext.h>
43 #include <wx/textctrl.h>
44 #include <wx/panel.h>
45 
48 
50 
51 IMPLEMENT_DYNAMIC_CLASS( CConfigureTracksDlg, CDialog )
52 
53 BEGIN_EVENT_TABLE( CConfigureTracksDlg, CDialog )
54 
55 ////@begin CConfigureTracksDlg event table entries
57  EVT_SEARCHCTRL_SEARCH_BTN( ID_SEARCHCTRL, CConfigureTracksDlg::OnSearchButtonClick )
58  EVT_SEARCHCTRL_CANCEL_BTN( ID_SEARCHCTRL, CConfigureTracksDlg::OnSearchCancelClick )
61  EVT_BUTTON( wxID_OK, CConfigureTracksDlg::OnOkClick )
62 ////@end CConfigureTracksDlg event table entries
63 
65 
67 : m_ImageList(16, 16, true, 0), m_FeaturePanel()
68 {
69  Init();
70 }
71 
73  CFeaturePanel* featurePanel,
74  wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style)
75  : m_ImageList(16, 16, true, 0), m_FeaturePanel(featurePanel)
76 {
77  Init();
78  Create(parent, id, caption, pos, size, style);
79 }
80 
81 bool CConfigureTracksDlg::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
82 {
83 ////@begin CConfigureTracksDlg creation
84  SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
85  CDialog::Create( parent, id, caption, pos, size, style );
86 
88  if (GetSizer())
89  {
90  GetSizer()->SetSizeHints(this);
91  }
92  Centre();
93 ////@end CConfigureTracksDlg creation
94 
95  SetSize(ConvertDialogToPixels(wxSize(375, 200)));
96  Centre();
97 
98  return true;
99 }
100 
102 {
103 ////@begin CConfigureTracksDlg destruction
104 ////@end CConfigureTracksDlg destruction
105 
106  for (auto i : m_AllTracks)
107  delete i;
108 }
109 
111 {
112 ////@begin CConfigureTracksDlg member initialisation
113  m_Splitter = NULL;
114  m_TreeCtrl = NULL;
115  m_SearchCtrl = NULL;
118 ////@end CConfigureTracksDlg member initialisation
119 
120  static bool sImagesRegistered = false;
121  if (!sImagesRegistered) {
123  provider->RegisterFileAlias(wxT("tracks::active"), wxT("sequence_dna_symbol.png"));
124  provider->RegisterFileAlias(wxT("tracks::search"), wxT("search.png"));
125  sImagesRegistered = true;
126  }
127 
128  wxBitmap bmp = wxArtProvider::GetBitmap(wxT("tracks::active"));
129  if (bmp.IsOk()) m_ImageList.Add(bmp);
130  bmp = wxArtProvider::GetBitmap(wxT("tracks::search"));
131  if (bmp.IsOk()) m_ImageList.Add(bmp);
132 }
133 
134 
135 namespace
136 {
137  class CTreeItemTrackData : public wxTreeItemData
138  {
139  public:
140  CTreeItemTrackData() {}
141  CTreeItemTrackData(const CTrackListCtrl::TTracks& tracks) : m_Tracks(tracks) {}
142  const CTrackListCtrl::TTracks& GetTracks() const { return m_Tracks; }
143  CTrackListCtrl::TTracks& GetTracks() { return m_Tracks; }
144 
145  private:
146  CTrackListCtrl::TTracks m_Tracks;
147  };
148 
149  class CTrackDlgProxyInfo : public CTrackListCtrl::ITrackInfo
150  {
151  public:
152  CTrackDlgProxyInfo(const CTempTrackProxy& paneTrack, bool visible) :
153  m_PaneTrack(CConstRef<CTempTrackProxy>(&paneTrack)), m_Visible(visible) {}
154 
155  virtual string GetDisplayName() const
156  {
157  string trackName;
158  if (m_PaneTrack->GetKey().empty() && !m_PaneTrack->IsNA() && m_PaneTrack->GetTrack())
159  trackName = m_PaneTrack->GetTrack()->GetFullTitle();
160  if (trackName.empty()) trackName = m_PaneTrack->GetDisplayName();
161  if (trackName.empty()) trackName = m_PaneTrack->GetName();
162  return trackName;
163  }
164 
165  virtual string GetAccession() const
166  {
167  return m_PaneTrack->GetSource();
168  }
169 
170  virtual string GetCategory() const
171  {
172  string category = m_PaneTrack->GetCategory();
173  if (category.empty()) {
174  const CAnnotMetaData* na = m_PaneTrack->GetNAdata();
175  if (na)
176  category = na->m_xClass;
177  }
178  return category;
179  }
180  virtual string GetSubCategory() const { return m_PaneTrack->GetSubcategory(); }
181  virtual string GetComments() const{ return m_PaneTrack->GetComments(); }
182  virtual bool GetVisible() const { return m_Toggled ? !m_Visible : m_Visible; }
183  virtual void SetVisible(bool visible) { m_Toggled = (m_Visible != visible); }
184 
185  const CTempTrackProxy& GetPaneTrack() { return *m_PaneTrack; }
186  bool GetToggled() const { return m_Toggled; }
187 
188  private:
189  CConstRef<CTempTrackProxy> m_PaneTrack;
190  bool m_Visible;
191  bool m_Toggled = false;
192  };
193 
194 
195  class CTreeBuilder
196  {
197  public:
198  CTreeBuilder(wxTreeCtrl& treeCtrl, wxTreeItemId rootItem, CTrackListCtrl::TTracks& allTracks)
199  : m_TreeCtrl(treeCtrl)
200  , m_VisibleTracksItemData(new CTreeItemTrackData())
201  , m_AllTracksItemData()
202  , m_AllTracks(allTracks)
203  , m_RootId(rootItem)
204  {
205  if (!m_RootId.IsOk())
206  m_RootId = m_TreeCtrl.AddRoot(wxT(""), -1, -1);
207 
208  m_VisibleTracksId = m_TreeCtrl.AppendItem(m_RootId, wxT("Visible Tracks"), -1, -1, m_VisibleTracksItemData);
209 
210  m_AllTracksItemData = dynamic_cast<CTreeItemTrackData*>(m_TreeCtrl.GetItemData(m_RootId));
211  if (!m_AllTracksItemData)
212  m_AllTracksId = m_TreeCtrl.AppendItem(m_RootId, wxT("All Tracks"), -1, -1, (m_AllTracksItemData = new CTreeItemTrackData()));
213  }
214 
215  wxTreeItemId GetAllTracksItem() const { return m_AllTracksId; }
216 
217  bool ContainerBegin(const CTempTrackProxy*, const CTrackContainer*, bool) const { return true; }
218  void ContainerEnd(const CTempTrackProxy*, const CTrackContainer*, bool) const { ;; }
219  bool Track(const CTempTrackProxy* proxy, const CLayoutTrack* track, bool visible);
220 
221  private:
222  wxTreeCtrl& m_TreeCtrl;
223 
224  CTreeItemTrackData* m_VisibleTracksItemData;
225  CTreeItemTrackData* m_AllTracksItemData;
226 
227  CTrackListCtrl::TTracks& m_AllTracks;
228 
229  wxTreeItemId m_RootId;
230  wxTreeItemId m_VisibleTracksId;
231  wxTreeItemId m_AllTracksId;
232  };
233 
234  class CTopLevelContainers
235  {
236  public:
237  bool ContainerBegin(CTempTrackProxy* proxy, CTrackContainer*, bool)
238  {
239  if (!proxy)
240  return true; // CFeaturePanel
241  m_Proxies.push_back(proxy);
242  return false;
243  }
244  void ContainerEnd(CTempTrackProxy* proxy, CTrackContainer*, bool)
245  {
246  ;;
247  }
248  bool Track(const CTempTrackProxy*, const CLayoutTrack*, bool) { return true; }
249 
250  const vector<CTempTrackProxy*>& GetProxies() const { return m_Proxies; }
251  private:
252  vector<CTempTrackProxy*> m_Proxies;
253  };
254 
255  bool CTreeBuilder::Track(const CTempTrackProxy* proxy, const CLayoutTrack* track, bool visible)
256  {
257  CTrackDlgProxyInfo* i = new CTrackDlgProxyInfo(*proxy, visible);
258  m_AllTracks.push_back(i);
259 
260  m_AllTracksItemData->GetTracks().push_back(i);
261  if (i->GetVisible())
262  m_VisibleTracksItemData->GetTracks().push_back(i);
263 
264  wxString category = wxString::FromUTF8(i->GetCategory().c_str());
265  if (category.empty()) category = wxT("[Unknown]");
266 
267  wxString subCategory = wxString::FromUTF8(i->GetSubCategory().c_str());
268  if (subCategory.empty()) subCategory = wxT("Uncategorized");
269 
270  wxTreeItemIdValue cookie;
271  wxTreeItemId categoryItem;
272 
273  wxTreeItemId child = m_TreeCtrl.GetFirstChild(m_RootId, cookie);
274  while (child.IsOk())
275  {
276  if (child != m_VisibleTracksId && child != m_AllTracksId) {
277  if (category == m_TreeCtrl.GetItemText(child)) {
278  categoryItem = child;
279  break;
280  }
281  }
282  child = m_TreeCtrl.GetNextChild(m_RootId, cookie);
283  }
284 
285  if (!categoryItem.IsOk())
286  categoryItem = m_TreeCtrl.AppendItem(m_RootId, category, -1, -1, new CTreeItemTrackData());
287 
288  CTreeItemTrackData* data = dynamic_cast<CTreeItemTrackData*>(m_TreeCtrl.GetItemData(categoryItem));
289  data->GetTracks().push_back(i);
290 
291  wxTreeItemId subCategoryItem;
292  child = m_TreeCtrl.GetFirstChild(categoryItem, cookie);
293  while (child.IsOk())
294  {
295  if (subCategory == m_TreeCtrl.GetItemText(child)) {
296  subCategoryItem = child;
297  break;
298  }
299  child = m_TreeCtrl.GetNextChild(categoryItem, cookie);
300  }
301 
302  if (!subCategoryItem.IsOk())
303  subCategoryItem = m_TreeCtrl.AppendItem(categoryItem, subCategory, -1, -1, new CTreeItemTrackData());
304 
305  data = dynamic_cast<CTreeItemTrackData*>(m_TreeCtrl.GetItemData(subCategoryItem));
306  data->GetTracks().push_back(i);
307 
308  return true;
309  }
310 
311  void s_CleanSingleChild(wxTreeCtrl& treeCtrl, wxTreeItemId item) {
312  wxTreeItemIdValue cookie;
313  wxTreeItemId child = treeCtrl.GetFirstChild(item, cookie);
314  while (child.IsOk())
315  {
316  if (treeCtrl.GetChildrenCount(child) == 1) {
317  wxTreeItemIdValue cookie2;
318  wxTreeItemId sub = treeCtrl.GetFirstChild(child, cookie2);
319  if (treeCtrl.GetItemText(sub) == "Uncategorized")
320  treeCtrl.DeleteChildren(child);
321  }
322  child = treeCtrl.GetNextChild(item, cookie);
323  }
324  }
325 } // namespace
326 
327 
329 {
330 ////@begin CConfigureTracksDlg content construction
331  CConfigureTracksDlg* itemCDialog1 = this;
332 
333  wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
334  itemCDialog1->SetSizer(itemBoxSizer2);
335 
336  m_Splitter = new wxSplitterWindow( itemCDialog1, ID_SPLITTERWINDOW, wxDefaultPosition, wxDLG_UNIT(itemCDialog1, wxSize(100, 100)), wxSP_3DBORDER|wxSP_3DSASH|wxNO_BORDER );
337  m_Splitter->SetMinimumPaneSize(wxDLG_UNIT(itemCDialog1, wxSize(150, -1)).x);
338 
339  m_TreeCtrl = new wxTreeCtrl( m_Splitter, ID_TREECTRL, wxDefaultPosition, wxDLG_UNIT(m_Splitter, wxSize(100, 100)), wxTR_HAS_BUTTONS |wxTR_HIDE_ROOT|wxTR_SINGLE|wxTR_GBENCH_LINES );
340 
341  wxPanel* itemPanel5 = new wxPanel( m_Splitter, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxTAB_TRAVERSAL );
342  wxBoxSizer* itemBoxSizer6 = new wxBoxSizer(wxVERTICAL);
343  itemPanel5->SetSizer(itemBoxSizer6);
344 
345  wxBoxSizer* itemBoxSizer7 = new wxBoxSizer(wxHORIZONTAL);
346  itemBoxSizer6->Add(itemBoxSizer7, 0, wxGROW|wxALL, 0);
347  m_SearchCtrl = new wxSearchCtrl( itemPanel5, ID_SEARCHCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
348  itemBoxSizer7->Add(m_SearchCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, wxDLG_UNIT(itemPanel5, wxSize(5, -1)).x);
349 
350  itemBoxSizer7->Add(wxDLG_UNIT(itemPanel5, wxSize(5, -1)).x, wxDLG_UNIT(itemPanel5, wxSize(-1, 5)).y, 1, wxALIGN_CENTER_VERTICAL|wxALL, wxDLG_UNIT(itemPanel5, wxSize(5, -1)).x);
351 
352  m_TrackCountCtrl = new wxStaticText( itemPanel5, wxID_STATIC, _("0 track(s)"), wxDefaultPosition, wxDefaultSize, 0 );
353  itemBoxSizer7->Add(m_TrackCountCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, wxDLG_UNIT(itemPanel5, wxSize(5, -1)).x);
354 
355  m_TrackListCtrl = new CTrackListCtrl( itemPanel5, ID_LISTCTRL, wxDefaultPosition, wxDLG_UNIT(itemPanel5, wxSize(100, 100)), wxLC_REPORT );
356  itemBoxSizer6->Add(m_TrackListCtrl, 1, wxGROW|wxALL, 0);
357 
358  m_Splitter->SplitVertically(m_TreeCtrl, itemPanel5, wxDLG_UNIT(itemCDialog1, wxSize(150, -1)).x);
359  itemBoxSizer2->Add(m_Splitter, 1, wxGROW|wxALL, wxDLG_UNIT(itemCDialog1, wxSize(5, -1)).x);
360 
361  wxStaticLine* itemStaticLine12 = new wxStaticLine( itemCDialog1, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
362  itemBoxSizer2->Add(itemStaticLine12, 0, wxGROW|wxALL, wxDLG_UNIT(itemCDialog1, wxSize(5, -1)).x);
363 
364  wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxHORIZONTAL);
365  itemBoxSizer2->Add(itemBoxSizer13, 0, wxALIGN_RIGHT|wxALL, 0);
366 
367  wxButton* itemButton14 = new wxButton( itemCDialog1, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
368  itemBoxSizer13->Add(itemButton14, 0, wxALIGN_CENTER_VERTICAL|wxALL, wxDLG_UNIT(itemCDialog1, wxSize(5, -1)).x);
369 
370  wxButton* itemButton15 = new wxButton( itemCDialog1, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
371  itemBoxSizer13->Add(itemButton15, 0, wxALIGN_CENTER_VERTICAL|wxALL, wxDLG_UNIT(itemCDialog1, wxSize(5, -1)).x);
372 
373 ////@end CConfigureTracksDlg content construction
374 
376  wxTreeItemId rootItem = m_TreeCtrl->AddRoot(wxT(""), -1, -1);
377  wxTreeItemId level1;
378 
379  CTopLevelContainers topCont;
380  m_FeaturePanel->Traverse(topCont, true);
381 
382  for (auto p : topCont.GetProxies()) {
383  CTrackContainer* cont = static_cast<CTrackContainer*>(p->GetTrack());
384 
385  wxString title = wxString::FromUTF8(cont->GetTitle().c_str());
386  wxTreeItemId level = m_TreeCtrl->AppendItem(rootItem, title, -1, -1, new CTreeItemTrackData());
387  if (!level1.IsOk())
388  level1 = level;
389  CTreeBuilder builder(*m_TreeCtrl, level, m_AllTracks);
390  cont->Traverse(builder, p->GetShown());
391  s_CleanSingleChild(*m_TreeCtrl, level);
392 
393  m_TreeCtrl->ExpandAll();
394  if (level1.IsOk())
395  m_TreeCtrl->ScrollTo(level1);
396  }
397  } else {
398  CTreeBuilder builder(*m_TreeCtrl, wxTreeItemId(), m_AllTracks);
399  m_FeaturePanel->Traverse(builder, true);
400  s_CleanSingleChild(*m_TreeCtrl, m_TreeCtrl->GetRootItem());
401  wxTreeItemId allTracksItem = builder.GetAllTracksItem();
402  m_TreeCtrl->ExpandAll();
403  if (allTracksItem.IsOk())
404  m_TreeCtrl->SelectItem(allTracksItem);
405  }
406 }
407 
408 void CConfigureTracksDlg::OnOkClick(wxCommandEvent& event)
409 {
410  bool update = false;
411 
412  for (auto t : m_AllTracks) {
413  CTrackDlgProxyInfo* tinfo = (CTrackDlgProxyInfo*)t;
414  CTempTrackProxy& paneTrack = const_cast<CTempTrackProxy&>(tinfo->GetPaneTrack());
415  if (tinfo->GetToggled()) {
417  update = true;
418  }
419  }
420 
421  if (update) {
422  vector<string> naAccessions;
423  m_FeaturePanel->ToggleTracks(naAccessions);
424  }
425 
426  EndModal(wxID_OK);
427 }
428 
429 
431 {
432  wxTreeItemId item = event.GetItem();
433  CTreeItemTrackData* data = 0;
434  if (item.IsOk())
435  data = dynamic_cast<CTreeItemTrackData*>(m_TreeCtrl->GetItemData(item));
436 
437  if (data)
438  m_TrackListCtrl->SetTracks(data->GetTracks());
439  else {
442  }
443 
444  m_SearchCtrl->SetValue(wxEmptyString);
445  m_SearchCtrl->ShowCancelButton(false);
446 
448 }
449 
450 void CConfigureTracksDlg::SetCategory(const string& category)
451 {
452  wxTreeItemId rootId = m_TreeCtrl->GetRootItem();
453  if (!rootId.IsOk())
454  return;
455 
456  wxString text = wxString::FromUTF8(category.c_str());
457 
458  wxTreeItemIdValue cookie;
459  wxTreeItemId item = m_TreeCtrl->GetFirstChild(rootId, cookie);
460  while (item.IsOk())
461  {
462  wxString itemText = m_TreeCtrl->GetItemText(item);
463  if (itemText == text) {
464  m_TreeCtrl->SelectItem(item);
465  break;
466  }
467  item = m_TreeCtrl->GetNextChild(rootId, cookie);
468  }
469 }
470 
472 {
473  wxString label = wxString::Format(wxT("%u track(s)"), (unsigned)m_TrackListCtrl->GetItemCount());
474  m_TrackCountCtrl->SetLabelText(label);
475 }
476 
477 void CConfigureTracksDlg::OnSearchButtonClick(wxCommandEvent& event)
478 {
479  x_OnSearch(event.GetString());
480 }
481 
483 {
484  x_OnSearch(wxEmptyString);
485 }
486 
488 {
489  x_OnSearch(m_SearchCtrl->GetValue());
490 }
491 
492 void CConfigureTracksDlg::OnSearchCtrlUpdate(wxUpdateUIEvent& event)
493 {
494  m_SearchCtrl->ShowCancelButton(!m_CurrentFilter.empty());
495 }
496 
498 {
499  m_CurrentFilter = value.ToUTF8();
503 }
504 
506 {
507  return true;
508 }
509 
510 wxBitmap CConfigureTracksDlg::GetBitmapResource( const wxString& name )
511 {
512  // Bitmap retrieval
513 ////@begin CConfigureTracksDlg bitmap retrieval
514  wxUnusedVar(name);
515  return wxNullBitmap;
516 ////@end CConfigureTracksDlg bitmap retrieval
517 }
518 
519 wxIcon CConfigureTracksDlg::GetIconResource( const wxString& name )
520 {
521  // Icon retrieval
522 ////@begin CConfigureTracksDlg icon retrieval
523  wxUnusedVar(name);
524  return wxNullIcon;
525 ////@end CConfigureTracksDlg icon retrieval
526 }
527 
528 static const char* kTrackListTag = "TrackList";
529 static const char* kSplitterPosTag = "SplitterPos";
530 
532 {
533  if (m_TrackListCtrl)
535 
536  if (m_Splitter) {
537  m_Splitter->SetSashPosition(
538  view.GetInt(kSplitterPosTag, m_Splitter->GetSashPosition()));
539  }
540 }
541 
543 {
544  if (m_TrackListCtrl)
546 
547  if (m_Splitter)
548  view.Set(kSplitterPosTag, m_Splitter->GetSashPosition());
549 }
550 
552 
EVT_UPDATE_UI(eCmdAlnShowMethodsDlg, CAlnMultiWidget::OnUpdateShowMethodDlg) EVT_UPDATE_UI(eCmdMethodProperties
Data structure for holding meta information for an annotaion.
Definition: annot_info.hpp:85
void OnTreectrlSelChanged(wxTreeEvent &event)
bool Create(wxWindow *parent, wxWindowID id=ID_CCONFIGURETRACKSDLG, const wxString &caption=_("Configure Tracks"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(400, 300), long style=wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX|wxTAB_TRAVERSAL)
CTrackListCtrl * m_TrackListCtrl
CTrackListCtrl::TTracks m_AllTracks
CFeaturePanel * m_FeaturePanel
void OnSearchButtonClick(wxCommandEvent &event)
void OnSearchEnter(wxCommandEvent &event)
wxSplitterWindow * m_Splitter
void OnOkClick(wxCommandEvent &event)
wxIcon GetIconResource(const wxString &name)
virtual void x_SaveSettings(CRegistryWriteView view) const
void OnSearchCtrlUpdate(wxUpdateUIEvent &event)
void OnSearchCancelClick(wxCommandEvent &event)
virtual void x_LoadSettings(const CRegistryReadView &view)
override these functions in derived classes
void SetCategory(const string &category)
void x_OnSearch(const wxString &value)
wxBitmap GetBitmapResource(const wxString &name)
CConstRef –.
Definition: ncbiobj.hpp:1266
CDialog.
Definition: dialog.hpp:47
virtual void EndModal(int retCode)
Definition: dialog.cpp:142
File Description:
string GetTitle() const
get the track title.
class CRegistryReadView provides a nested hierarchical view at a particular key.
Definition: reg_view.hpp:58
int GetInt(const string &key, int default_val=0) const
access a named key at this level, with no recursion
Definition: reg_view.cpp:230
CRegistryReadView GetReadView(const string &section) const
Definition: reg_view.cpp:74
CRegistryWriteView GetWriteView(const string &section)
Definition: reg_view.cpp:491
void Set(const string &key, int val)
access a named key at this level, with no recursion
Definition: reg_view.cpp:533
File Description:
void SetAction(EAction action)
CTrackContainer - a track container in the form of layout track.
void ToggleTracks(vector< string > &naAccessions)
void Traverse(Tr &&tr, bool visible)
vector< ITrackInfo * > TTracks
void FilterValues(const string &filter)
void LoadSettings(const CRegistryReadView &view)
void SetTracks(const TTracks &tracks)
void SaveSettings(CRegistryWriteView view) const
virtual void RegisterFileAlias(const wxArtID &anId, const wxArtClient &aClient, const wxSize &aSize, const wxString &aName, long aType=wxBITMAP_TYPE_ANY, int anIndex=-1)
static const char * kTrackListTag
static const char * kSplitterPosTag
#define _(proto)
Definition: ct_nlmzip_i.h:78
thread_local unique_ptr< FtaMsgPost > bmp
Definition: ftaerr.cpp:120
#define true
Definition: bool.h:35
static void Init(void)
Definition: cursor6.c:76
char data[12]
Definition: iconv.c:80
#define NULL
Definition: ncbistd.hpp:225
string m_xClass
annotation category
Definition: annot_info.hpp:105
#define END_NCBI_SCOPE
End previously defined NCBI scope.
Definition: ncbistl.hpp:103
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
Definition: ncbistl.hpp:100
static void TruncateSpacesInPlace(string &str, ETrunc where=eTrunc_Both)
Truncate spaces in a string (in-place)
Definition: ncbistr.cpp:3201
static const char label[]
END_EVENT_TABLE()
int i
#define ID_TREECTRL
static void text(MDB_val *v)
Definition: mdb_dump.c:62
#define wxT(x)
Definition: muParser.cpp:41
constexpr bool empty(list< Ts... >) noexcept
const struct ncbi::grid::netcache::search::fields::SIZE size
const GenericPointer< typename T::ValueType > T2 value
Definition: pointer.h:1227
EIPRangeType t
Definition: ncbi_localip.c:101
Format
Definition: njn_ioutil.hpp:52
const CConstRef< CSeq_id > GetAccession(const CSeq_id_Handle &id_handle)
#define ID_SEARCHCTRL
wxFileArtProvider * GetDefaultFileArtProvider()
Definition: wx_utils.cpp:334
#define wxTR_GBENCH_LINES
Definition: wx_utils.hpp:69
Modified on Wed Apr 17 13:09:03 2024 by modify_doxy.py rev. 669887