2
* ExportRngDialog.cpp - "Range" data export dialog
3
* Copyright (C) 2010, D Haley
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, either version 3 of the License, or
8
* (at your option) any later version.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program. If not, see <http://www.gnu.org/licenses/>.
19
#include "ExportRngDialog.h"
22
// begin wxGlade: ::extracode
28
ID_LIST_ACTIVATE=wxID_ANY+1,
31
ExportRngDialog::ExportRngDialog(wxWindow* parent, int id, const wxString& title, const wxPoint& pos, const wxSize& size, long style):
32
wxDialog(parent, id, title, pos, size, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxTHICK_FRAME)
34
// begin wxGlade: ExportRngDialog::ExportRngDialog
35
lblRanges = new wxStaticText(this, wxID_ANY, wxT("Range Sources"));
36
listRanges = new wxListCtrl(this, ID_LIST_ACTIVATE, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxSUNKEN_BORDER);
37
label_3 = new wxStaticText(this, wxID_ANY, wxT("Details"));
38
gridDetails = new wxGrid(this, wxID_ANY);
39
btnOK = new wxButton(this, wxID_SAVE, wxEmptyString);
40
btnCancel = new wxButton(this, wxID_CANCEL, wxEmptyString);
46
//Add columns to report listviews
47
listRanges->InsertColumn(0,_("Source Filter"));
48
listRanges->InsertColumn(1,_("Ions"));
49
listRanges->InsertColumn(2,_("Ranges"));
54
BEGIN_EVENT_TABLE(ExportRngDialog, wxDialog)
55
// begin wxGlade: ExportRngDialog::event_table
56
EVT_LIST_ITEM_ACTIVATED(ID_LIST_ACTIVATE, ExportRngDialog::OnListRangeItemActivate)
57
EVT_BUTTON(wxID_SAVE, ExportRngDialog::OnSave)
58
EVT_BUTTON(wxID_CANCEL, ExportRngDialog::OnCancel)
63
void ExportRngDialog::OnListRangeItemActivate(wxListEvent &event)
65
updateGrid(event.GetIndex());
67
selectedRange=event.GetIndex();
70
void ExportRngDialog::updateGrid(unsigned int index)
72
const RangeFileFilter *rangeData;
73
rangeData=(RangeFileFilter *)rngFilters[index];
75
gridDetails->BeginBatch();
76
gridDetails->DeleteCols(0,gridDetails->GetNumberCols());
77
gridDetails->DeleteRows(0,gridDetails->GetNumberRows());
79
gridDetails->AppendCols(3);
80
gridDetails->SetColLabelValue(0,wxT("Param"));
81
gridDetails->SetColLabelValue(1,wxT("Value"));
82
gridDetails->SetColLabelValue(2,wxT("Value2"));
85
nRows=rangeData->rng.getNumIons()+rangeData->rng.getNumRanges() + 4;
86
gridDetails->AppendRows(nRows);
89
gridDetails->SetCellValue(0,0,_("Ion Name"));
90
gridDetails->SetCellValue(0,1,_("Num Ranges"));
94
//Add ion data, then range data
95
for(unsigned int ui=0;ui<rangeData->rng.getNumIons(); ui++)
98
// ION NAME | NUMBER OF RANGES
99
gridDetails->SetCellValue(row,0,wxStr(rangeData->rng.getName(ui)));
100
stream_cast(tmpStr,rangeData->rng.getNumRanges(ui));
101
gridDetails->SetCellValue(row,1,wxStr(tmpStr));
106
gridDetails->SetCellValue(row,0,_("Ion"));
107
gridDetails->SetCellValue(row,1,_("Range Start"));
108
gridDetails->SetCellValue(row,2,_("Range end"));
111
for(unsigned int ui=0;ui<rangeData->rng.getNumRanges(); ui++)
113
std::pair<float,float> rngPair;
116
rngPair=rangeData->rng.getRange(ui);
117
ionID=rangeData->rng.getIonID(ui);
118
gridDetails->SetCellValue(row,0,
119
wxStr(rangeData->rng.getName(ionID)));
121
stream_cast(tmpStr,rngPair.first);
122
gridDetails->SetCellValue(row,1,wxStr(tmpStr));
124
stream_cast(tmpStr,rngPair.second);
125
gridDetails->SetCellValue(row,2,wxStr(tmpStr));
130
gridDetails->EndBatch();
133
void ExportRngDialog::OnSave(wxCommandEvent &event)
136
if(!rngFilters.size())
137
EndModal(wxID_CANCEL);
139
//create a file chooser for later.
140
wxFileDialog *wxF = new wxFileDialog(this,wxT("Save pos..."), wxT(""),
141
wxT(""),wxT("ORNL format RNG (*.rng)|*.rng|All Files (*)|*"),wxSAVE);
142
//Show, then check for user cancelling export dialog
143
if(wxF->ShowModal() == wxID_CANCEL)
149
std::string dataFile = stlStr(wxF->GetPath());
152
if(((RangeFileFilter *)(rngFilters[selectedRange]))->rng.write(dataFile.c_str()))
154
std::string errString;
155
errString="Unable to save. Check output destination can be written to.";
157
wxMessageDialog *wxD =new wxMessageDialog(this,wxStr(errString)
158
,wxT("Save error"),wxOK|wxICON_ERROR);
167
void ExportRngDialog::OnCancel(wxCommandEvent &event)
169
EndModal(wxID_CANCEL);
171
// wxGlade: add ExportRngDialog event handlers
174
void ExportRngDialog::addRangeData(std::vector<const Filter *> rangeData)
177
//This function should only recieve rangefile filters
178
for(unsigned int ui=0;ui<rangeData.size(); ui++)
179
ASSERT(rangeData[ui]->getType() == FILTER_TYPE_RANGEFILE);
182
rngFilters.resize(rangeData.size());
183
std::copy(rangeData.begin(),rangeData.end(),rngFilters.begin());
189
//Use the first item to populate the grid
191
//select the first item
192
listRanges->SetItemState(0, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
199
void ExportRngDialog::updateRangeList()
201
listRanges->DeleteAllItems();
202
for(unsigned int ui=0;ui<rngFilters.size(); ui++)
204
const RangeFileFilter *rangeData;
205
rangeData=(RangeFileFilter *)rngFilters[ui];
208
itemIndex=listRanges->InsertItem(0, wxStr(rangeData->getUserString()));
209
unsigned int nIons,nRngs;
210
nIons = rangeData->rng.getNumIons();
211
nRngs = rangeData->rng.getNumIons();
213
stream_cast(tmpStr,nIons);
214
listRanges->SetItem(itemIndex, 1, wxStr(tmpStr));
215
stream_cast(tmpStr,nRngs);
216
listRanges->SetItem(itemIndex, 2, wxStr(tmpStr));
221
void ExportRngDialog::set_properties()
223
// begin wxGlade: ExportRngDialog::set_properties
224
SetTitle(wxT("Export Range"));
225
gridDetails->CreateGrid(0, 0);
226
gridDetails->SetRowLabelSize(0);
227
gridDetails->SetColLabelSize(0);
229
listRanges->SetToolTip(wxT("List of rangefiles in filter tree"));
230
gridDetails->EnableEditing(false);
231
gridDetails->SetToolTip(wxT("Detailed view of selected range"));
236
void ExportRngDialog::do_layout()
238
// begin wxGlade: ExportRngDialog::do_layout
239
wxBoxSizer* sizer_2 = new wxBoxSizer(wxVERTICAL);
240
wxBoxSizer* sizer_3 = new wxBoxSizer(wxHORIZONTAL);
241
wxBoxSizer* sizer_14 = new wxBoxSizer(wxHORIZONTAL);
242
wxBoxSizer* sizer_15 = new wxBoxSizer(wxVERTICAL);
243
wxBoxSizer* sizer_16 = new wxBoxSizer(wxVERTICAL);
244
sizer_16->Add(lblRanges, 0, wxLEFT|wxTOP, 5);
245
sizer_16->Add(listRanges, 1, wxALL|wxEXPAND, 5);
246
sizer_14->Add(sizer_16, 1, wxEXPAND, 0);
247
sizer_14->Add(10, 20, 0, 0, 0);
248
sizer_15->Add(label_3, 0, wxLEFT|wxTOP, 5);
249
sizer_15->Add(gridDetails, 1, wxALL|wxEXPAND, 5);
250
sizer_14->Add(sizer_15, 1, wxEXPAND, 0);
251
sizer_2->Add(sizer_14, 1, wxEXPAND, 0);
252
sizer_3->Add(20, 20, 1, 0, 0);
253
sizer_3->Add(btnOK, 0, wxALL, 5);
254
sizer_3->Add(btnCancel, 0, wxALL, 5);
255
sizer_2->Add(sizer_3, 0, wxEXPAND, 0);