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

Go to the SVN repository for this file.

1 /* $Id: table_format_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: Bob Falk
27  *
28  * File Description:
29  *
30  */
31 
32 #include <ncbi_pch.hpp>////@begin includes
33 #include "wx/imaglist.h"
34 ////@end includes
35 
36 #include <corelib/ncbifile.hpp>
37 #include <corelib/ncbitime.hpp>
38 
39 #include "table_format_panel.hpp"
41 
44 
46 
47 #include <wx/sizer.h>
48 #include <wx/stattext.h>
49 #include <wx/statbox.h>
50 #include <wx/icon.h>
51 #include <wx/bitmap.h>
52 #include <wx/msgdlg.h>
53 #include <wx/radiobut.h>
54 #include <wx/listctrl.h>
55 #include <wx/filename.h>
56 
57 ////@begin XPM images
58 ////@end XPM images
59 
62 
63 IMPLEMENT_DYNAMIC_CLASS( CTableFormatPanel, wxPanel )
64 
65 BEGIN_EVENT_TABLE( CTableFormatPanel, wxPanel )
66 
67 ////@begin CTableFormatPanel event table entries
68  EVT_RADIOBUTTON( ID_DELIMITEDBUTTON, CTableFormatPanel::OnDelimitedButtonSelected )
69  EVT_RADIOBUTTON( ID_FIXEDWIDTHBUTTON, CTableFormatPanel::OnFixedwidthButtonSelected )
70  EVT_SPINCTRL( ID_FIRSTLINESPINCTRL, CTableFormatPanel::OnFirstLineSpinCtrlUpdated )
71  EVT_TEXT( ID_COMMENTCHARTXTCTRL, CTableFormatPanel::OnCommentCharTxtCtrlTextUpdated )
73  EVT_LIST_ITEM_SELECTED( ID_LISTCTRL, CTableFormatPanel::OnListCtrlSelected )
74 ////@end CTableFormatPanel event table entries
76 
78 {
79  Init();
80 }
81 
82 CTableFormatPanel::CTableFormatPanel( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
83 {
84  Init();
85  Create(parent, id, caption, pos, size, style);
86 }
87 
88 bool CTableFormatPanel::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
89 {
90 ////@begin CTableFormatPanel creation
91  wxPanel::Create( parent, id, pos, size, style );
92 
94  if (GetSizer())
95  {
96  GetSizer()->SetSizeHints(this);
97  }
98  Centre();
99 ////@end CTableFormatPanel creation
100  return true;
101 }
102 
104 {
105 ////@begin CTableFormatPanel destruction
106 ////@end CTableFormatPanel destruction
107 }
108 
110 {
111 ////@begin CTableFormatPanel member initialisation
123 ////@end CTableFormatPanel member initialisation
124 }
125 
127 {
128 ////@begin CTableFormatPanel content construction
129  // Generated by DialogBlocks, 14/08/2019 16:36:08 (unregistered)
130 
131  CTableFormatPanel* itemPanel1 = this;
132 
133  wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
134  itemPanel1->SetSizer(itemBoxSizer2);
135 
136  wxStaticBox* itemStaticBoxSizer3Static = new wxStaticBox(itemPanel1, wxID_ANY, wxEmptyString);
137  wxStaticBoxSizer* itemStaticBoxSizer3 = new wxStaticBoxSizer(itemStaticBoxSizer3Static, wxVERTICAL);
138  itemBoxSizer2->Add(itemStaticBoxSizer3, 0, wxALIGN_LEFT|wxALL, 5);
139 
140  wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
141  itemStaticBoxSizer3->Add(itemBoxSizer4, 0, wxALIGN_LEFT|wxALL, 5);
142 
143  wxStaticBox* itemStaticBoxSizer5Static = new wxStaticBox(itemStaticBoxSizer3->GetStaticBox(), wxID_ANY, _("Table Data Format"));
144  wxStaticBoxSizer* itemStaticBoxSizer5 = new wxStaticBoxSizer(itemStaticBoxSizer5Static, wxVERTICAL);
145  itemBoxSizer4->Add(itemStaticBoxSizer5, 1, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5);
146 
147  m_DelimitedBtn = new wxRadioButton( itemStaticBoxSizer5->GetStaticBox(), ID_DELIMITEDBUTTON, _("Delimited - Columns are separated by characters, e.g. tabs or commas"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
148  m_DelimitedBtn->SetValue(false);
149  itemStaticBoxSizer5->Add(m_DelimitedBtn, 0, wxALIGN_LEFT|wxALL, 5);
150 
151  m_FixedWidthBtn = new wxRadioButton( itemStaticBoxSizer5->GetStaticBox(), ID_FIXEDWIDTHBUTTON, _("Fixed Width - Columns all have a fixed character width"), wxDefaultPosition, wxDefaultSize, 0 );
152  m_FixedWidthBtn->SetValue(false);
153  itemStaticBoxSizer5->Add(m_FixedWidthBtn, 0, wxALIGN_LEFT|wxALL, 5);
154 
155  wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxHORIZONTAL);
156  itemStaticBoxSizer3->Add(itemBoxSizer8, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT, 5);
157 
158  m_ImportStaticText = new wxStaticText( itemStaticBoxSizer3->GetStaticBox(), wxID_STATIC, _("Import data starting with row:"), wxDefaultPosition, wxDefaultSize, 0 );
159  m_ImportStaticText->Enable(false);
160  itemBoxSizer8->Add(m_ImportStaticText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
161 
162  m_DataImportLine = new wxSpinCtrl( itemStaticBoxSizer3->GetStaticBox(), ID_FIRSTLINESPINCTRL, wxT("1"), wxDefaultPosition, wxSize(80, -1), wxSP_ARROW_KEYS, 1, 500, 1 );
163  m_DataImportLine->Enable(false);
164  itemBoxSizer8->Add(m_DataImportLine, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
165 
166  m_CommentStaticText = new wxStaticText( itemStaticBoxSizer3->GetStaticBox(), wxID_STATIC, _("Comment Character:"), wxDefaultPosition, wxDefaultSize, 0 );
167  m_CommentStaticText->Enable(false);
168  itemBoxSizer8->Add(m_CommentStaticText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
169 
170  m_CommentCharTextCtrl = new wxTextCtrl( itemStaticBoxSizer3->GetStaticBox(), ID_COMMENTCHARTXTCTRL, wxEmptyString, wxDefaultPosition, wxSize(20, -1), 0 );
171  m_CommentCharTextCtrl->SetMaxLength(1);
172  m_CommentCharTextCtrl->Enable(false);
173  itemBoxSizer8->Add(m_CommentCharTextCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
174 
175  wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxHORIZONTAL);
176  itemStaticBoxSizer3->Add(itemBoxSizer13, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT, 5);
177 
178  m_ParseColumnNamesBtn = new wxCheckBox( itemStaticBoxSizer3->GetStaticBox(), ID_PARSECOLUMNNAMESBTN, _("Parse Column Names from Selected Row:"), wxDefaultPosition, wxDefaultSize, 0 );
179  m_ParseColumnNamesBtn->SetValue(false);
180  itemBoxSizer13->Add(m_ParseColumnNamesBtn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
181 
182  m_HeaderImportRow = new wxStaticText( itemStaticBoxSizer3->GetStaticBox(), wxID_COLUMNNAMESROW, wxEmptyString, wxDefaultPosition, wxSize(40, -1), wxST_NO_AUTORESIZE|wxSTATIC_BORDER );
183  itemBoxSizer13->Add(m_HeaderImportRow, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
184 
185  m_PreviewResultsInfoTxt = new wxStaticText( itemStaticBoxSizer3->GetStaticBox(), wxID_PREVIEWRESULTSTXT, _("Preview Results"), wxDefaultPosition, wxDefaultSize, 0 );
186  m_PreviewResultsInfoTxt->SetFont(wxFont(wxNORMAL_FONT->GetPointSize(), wxNORMAL_FONT->GetFamily(), wxNORMAL_FONT->GetStyle(), wxFONTWEIGHT_BOLD, wxNORMAL_FONT->GetUnderlined(), wxNORMAL_FONT->GetFaceName()));
187  itemStaticBoxSizer3->Add(m_PreviewResultsInfoTxt, 0, wxALIGN_LEFT|wxALL, 5);
188 
189  wxStaticBox* itemStaticBoxSizer17Static = new wxStaticBox(itemPanel1, wxID_ANY, _("Table Preview"));
190  wxStaticBoxSizer* itemStaticBoxSizer17 = new wxStaticBoxSizer(itemStaticBoxSizer17Static, wxHORIZONTAL);
191  itemBoxSizer2->Add(itemStaticBoxSizer17, 1, wxGROW|wxALL, 5);
192 
193  m_ListCtrlPanel = new wxPanel( itemStaticBoxSizer17->GetStaticBox(), ID_PANEL4, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
194  itemStaticBoxSizer17->Add(m_ListCtrlPanel, 1, wxGROW|wxTOP, 5);
195 
196  wxBoxSizer* itemBoxSizer19 = new wxBoxSizer(wxHORIZONTAL);
197  m_ListCtrlPanel->SetSizer(itemBoxSizer19);
198 
199  m_TableListCtrl = new CTableImportListCtrl( m_ListCtrlPanel, ID_LISTCTRL, wxDefaultPosition, wxSize(100, 100), wxLC_REPORT );
200  itemBoxSizer19->Add(m_TableListCtrl, 1, wxGROW|wxALL, 5);
201 
202 ////@end CTableFormatPanel content construction
203 }
204 
205 void CTableFormatPanel::SetMainTitle(const wxString& /*title*/)
206 {
207  // m_MainBox->SetLabel(title);
208 }
209 
211 {
212  if (m_DelimitedBtn->GetValue() == false &&
213  m_FixedWidthBtn->GetValue() == false)
214  return false;
215 
216  /// Make sure file was loade successfully:
218  return true;
219  else
220  return false;
221 }
222 
223 
224 void CTableFormatPanel::SetRegistryPath( const string& path )
225 {
226  m_RegPath = path;
227 }
228 
229 
231 {
233 }
234 
235 
237 {
238 }
239 
241 {
242  if (m_FixedWidthBtn->GetValue())
243  return false;
244 
245  return true;
246 }
247 
248 
250 {
251  wxString s = m_PreviewFname;
252 
253  try {
254 
255  CStopWatch loadtime;
256  loadtime.Start();
257 
258  Int8 filesize = -1;
259  {
260  CFile tstfile(s.c_str().AsChar());
261 
262  if (!tstfile.IsFile()) {
263  if (!CCompressedFile::FileExists(s)) {
264  wxString msg = wxT("Error opening file: ") + s;
265  wxMessageBox(msg, wxT("Error Opening or Loading File"),
266  wxOK | wxICON_ERROR, this);
267  return false;
268  }
269  }
270  else
271  filesize = tstfile.GetLength();
272  }
273 
274  // Set listcontrol to an empty table first so that any ui events don't try to access
275  // the loading table.
276  CRef<CTableImportDataSource> empty_table;
277  m_TableListCtrl->SetDataSource(empty_table);
278 
279  if (!GUI_AsyncExec(
280  [this, filesize](ICanceled& canceled)
281  {
282  return m_ImportedTableData->LoadTable(m_PreviewFname, filesize, &canceled) || canceled.IsCanceled();
283  }, wxT("Loading Table..."))) {
284  wxString msg = wxT("Error loading table from file: ") + m_PreviewFname;
285  wxMessageBox(msg, wxT("Error Opening or Loading File"),
286  wxOK | wxICON_ERROR);
287  }
288 
289  //_TRACE("Time to load: " << loadtime.Elapsed());
290 
291  // If there was an error or user cancelled the load there will be no rows
292  // so just refresh and return.
293  if (m_ImportedTableData->GetNumRows() == 0) {
295  Refresh();
296  }
297 
298  /// Set the import row (subtract 1 to make it 0 based)
299  //m_ImportedTableData->SetFirstImportRow(m_DataImportLine->GetValue()-1);
300  m_DataImportLine->Enable(true);
301  m_CommentCharTextCtrl->Enable(true);
302  m_ImportStaticText->Enable(true);
303  m_CommentStaticText->Enable(true);
304  m_ParseColumnNamesBtn->SetValue(false);
305  m_HeaderImportRow->SetLabelText(ToWxString(""));
306 
307 
308  // Set (optional) character preceeding comments. Blank, ' ', indicates that
309  // there is no comment character so we set the field empty, "", in this case.
310  wxString comment_char = ToWxString(string(1,m_ImportedTableData->GetCommentChar()));
311  if (comment_char == wxT(" ") )
312  comment_char = wxT("");
313 
314  m_CommentCharTextCtrl->SetValue(comment_char);
316 
319  m_DelimitedBtn->SetValue(true);
320  m_FixedWidthBtn->SetValue(false);
321 
322  if (m_ImportedTableData->GetDelimiters().size() == 1) {
323  char delim = m_ImportedTableData->GetDelimiters()[0];
324  wxString delim_char(delim);
325  if (delim == ' ')
326  delim_char = "space";
327  else if (delim == '\t')
328  delim_char = "tab";
329 
330  m_PreviewResultsInfoTxt->SetLabelText(wxT("The table file seems to be delimited by character: '") +
331  delim_char + wxT("'"));
332  }
333  // Currently only option for two characters as delimiters from first
334  // panel is whitespace:
335  else if (m_ImportedTableData->GetDelimiters().size() == 2) {
336  m_PreviewResultsInfoTxt->SetLabelText(wxT("The table file seems to be delimited by whitespace"));
337  }
338  }
339  else {
340  m_DelimitedBtn->SetValue(false);
341  m_FixedWidthBtn->SetValue(true);
342 
343  m_PreviewResultsInfoTxt->SetLabelText("The table file seems to be composed of fixed-width fields");
344  }
345 
347 
348  Refresh();
349  }
350  catch(...) {
351  wxString msg = wxT("Unable to open file: ") + s + wxT(" for reading");
352  wxMessageBox(msg, wxT("Error Opening File"),
353  wxOK | wxICON_ERROR, this);
354  return false;
355  }
356 
357  return true;
358 }
359 
361 {
362  return true;
363 }
364 wxBitmap CTableFormatPanel::GetBitmapResource( const wxString& name )
365 {
366  // Bitmap retrieval
367 ////@begin CTableFormatPanel bitmap retrieval
368  wxUnusedVar(name);
369  return wxNullBitmap;
370 ////@end CTableFormatPanel bitmap retrieval
371 }
372 wxIcon CTableFormatPanel::GetIconResource( const wxString& name )
373 {
374  // Icon retrieval
375 ////@begin CTableFormatPanel icon retrieval
376  wxUnusedVar(name);
377  return wxNullIcon;
378 ////@end CTableFormatPanel icon retrieval
379 }
380 
381 void CTableFormatPanel::OnDelimitedButtonSelected( wxCommandEvent& /*event*/ )
382 {
384 }
385 
386 void CTableFormatPanel::OnFixedwidthButtonSelected( wxCommandEvent& /*event*/ )
387 {
389 }
390 
391 void CTableFormatPanel::OnFirstLineSpinCtrlUpdated( wxSpinEvent& /*event*/ )
392 {
393  int first_row = m_DataImportLine->GetValue();
394  if (!m_ImportedTableData.IsNull()) {
395  /// Set the import row (subtract 1 to make it 0 based)
397  m_TableListCtrl->Refresh();
398  }
399 }
400 
401 void CTableFormatPanel::OnCommentCharTxtCtrlTextUpdated( wxCommandEvent& /*event*/ )
402 {
403  string str = ToStdString(m_CommentCharTextCtrl->GetValue());
404  char updated_char = str.size() > 0 ? str[0] : ' ';
405 
406  // Treat tab as default comment char (meaning there is none)
407  if (updated_char == '\t')
408  updated_char = ' ';
409 
410  char comment_char = m_ImportedTableData->GetCommentChar();
411 
412  // Update table if comment character has changed. Blank (' ') is
413  // the defualt character.
414  if (comment_char != updated_char) {
415  m_ImportedTableData->SetCommentChar(updated_char);
416  m_TableListCtrl->Refresh();
417  }
418 }
419 
420 
421 void CTableFormatPanel::OnParseColumnNamesBtnClick( wxCommandEvent& /*event*/ )
422 {
423  long sel = m_TableListCtrl->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
424 
425  // Currently no row is selected
426  if (m_ParseColumnNamesBtn->GetValue() && sel == -1) {
427  m_ParseColumnNamesBtn->SetValue(false);
428  return;
429  }
430 
431  if (sel != -1 && m_ParseColumnNamesBtn->GetValue()) {
432  string numstr = NStr::NumericToString<long>(sel+1);
433  m_HeaderImportRow->SetLabelText(ToWxString(numstr.c_str()));
434  m_ImportedTableData->SetColumnHeaderRow(static_cast<int>(sel));
435  }
436  else {
437  m_HeaderImportRow->SetLabelText(ToWxString(""));
439  }
440 
442  m_TableListCtrl->Refresh();
443 }
444 
445 void CTableFormatPanel::OnListCtrlSelected( wxListEvent& event )
446 {
447  if (m_ParseColumnNamesBtn->GetValue()) {
448  string numstr = NStr::Int8ToString(Int8(event.GetIndex()+1));
449  m_HeaderImportRow->SetLabelText(ToWxString(numstr.c_str()));
450  m_ImportedTableData->SetColumnHeaderRow(static_cast<int>(event.GetIndex()));
451 
453  m_TableListCtrl->Refresh();
454  }
455 }
456 
457 
459 
460 
461 
462 
EVT_CHECKBOX(ID_CADJUSTFEATURES_CHECKBOX, CAdjustFeaturesForGaps::OnKnownUnknownSelected) EVT_CHECKBOX(ID_CADJUSTFEATURES_CHECKBOX1
std::invoke_result< _Fty, ICanceled & >::type GUI_AsyncExec(_Fty &&_Fnarg, const wxString &msg=wxT("Accessing network..."))
Definition: async_call.hpp:130
#define ID_PARSECOLUMNNAMESBTN
#define ID_LISTCTRL
static bool FileExists(const wxString &fileName)
CFile –.
Definition: ncbifile.hpp:1604
CStopWatch –.
Definition: ncbitime.hpp:1937
wxStaticText * m_HeaderImportRow
bool PreviewData()
Load the selected file and displays its contents in the list.
wxSpinCtrl * m_DataImportLine
void OnFirstLineSpinCtrlUpdated(wxSpinEvent &event)
wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_FIRSTLINESPINCTRL
void OnFixedwidthButtonSelected(wxCommandEvent &event)
wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_FIXEDWIDTHBUTTON
void SetMainTitle(const wxString &title)
CRef< CTableImportDataSource > m_ImportedTableData
void OnCommentCharTxtCtrlTextUpdated(wxCommandEvent &event)
wxEVT_COMMAND_TEXT_UPDATED event handler for ID_COMMENTCHARTXTCTRL
wxStaticText * m_ImportStaticText
void OnParseColumnNamesBtnClick(wxCommandEvent &event)
wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_PARSECOLUMNNAMESBTN
bool IsDelimitedFile() const
Return true if delimited button selected, false if fixed btn selected.
wxCheckBox * m_ParseColumnNamesBtn
bool Create(wxWindow *parent, wxWindowID id=ID_CTABLEFORMATPANEL, const wxString &caption=_("Select Table Format"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(400, 300), long style=wxTAB_TRAVERSAL)
CTableImportListCtrl * m_TableListCtrl
wxRadioButton * m_DelimitedBtn
static bool ShowToolTips()
void SetRegistryPath(const string &path)
void OnDelimitedButtonSelected(wxCommandEvent &event)
wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_DELIMITEDBUTTON
wxStaticText * m_CommentStaticText
wxIcon GetIconResource(const wxString &name)
Retrieves icon resources.
wxStaticText * m_PreviewResultsInfoTxt
wxBitmap GetBitmapResource(const wxString &name)
Retrieves bitmap resources.
wxRadioButton * m_FixedWidthBtn
wxTextCtrl * m_CommentCharTextCtrl
void OnListCtrlSelected(wxListEvent &event)
wxEVT_COMMAND_LIST_ITEM_SELECTED event handler for ID_LISTCTRL
int GetNumImportedRows() const
Get the total # of rows imported (row num>m_ImportFromRow and not starting with m_CommentChar.
const vector< char > & GetDelimiters() const
Return copy of current delimiter(s)
void SetColumnHeaderRow(int c)
set/get (optional) row from which to parse column names
void SetTableType(EFieldSeparatorType e)
Update current table type.
void SetCommentChar(char c)
set/get comment character (lines beginning with this are not imported)
EFieldSeparatorType GetTableType() const
bool LoadTable(const wxString &fname, CUser_object &user_object)
size_t GetNumRows() const
return total number of rows read
void RecomputeHeaders()
Update columns to genereated names or names parsed from row m_ColumnHeaderRow.
void SetFirstImportRow(int r)
set/get first row for import (0-based)
void SetViewType(eDataViewType t)
Set/get view type.
void SetDataSource(CRef< CTableImportDataSource > ds)
Set/update data source (used to refresh view to match data source column info)
Interface for testing cancellation request in a long lasting operation.
Definition: icanceled.hpp:51
#define _(proto)
Definition: ct_nlmzip_i.h:78
static void Init(void)
Definition: cursor6.c:76
static const char * str(char *buf, int n)
Definition: stats.c:84
#define NULL
Definition: ncbistd.hpp:225
Int8 GetLength(void) const
Get size of file.
Definition: ncbifile.cpp:3204
bool IsFile(EFollowLinks follow=eFollowLinks) const
Check whether a directory entry is a file.
Definition: ncbifile.hpp:3940
bool IsNull(void) const THROWS_NONE
Check if pointer is null – same effect as Empty().
Definition: ncbiobj.hpp:735
int64_t Int8
8-byte (64-bit) signed integer
Definition: ncbitype.h:104
#define END_NCBI_SCOPE
End previously defined NCBI scope.
Definition: ncbistl.hpp:103
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
Definition: ncbistl.hpp:100
virtual bool IsCanceled(void) const =0
static string Int8ToString(Int8 value, TNumToStringFlags flags=0, int base=10)
Convert Int8 to string.
Definition: ncbistr.hpp:5159
void Start(void)
Start the timer.
Definition: ncbitime.hpp:2764
END_EVENT_TABLE()
#define wxT(x)
Definition: muParser.cpp:41
const struct ncbi::grid::netcache::search::fields::SIZE size
Defines classes: CDirEntry, CFile, CDir, CSymLink, CMemoryFile, CFileUtil, CFileLock,...
Defines: CTimeFormat - storage class for time format.
static static static wxID_ANY
USING_SCOPE(objects)
wxString ToWxString(const string &s)
Definition: wx_utils.hpp:173
string ToStdString(const wxString &s)
Definition: wx_utils.hpp:161
Modified on Wed Jun 12 11:15:31 2024 by modify_doxy.py rev. 669887