void BoatDialog::OnAddPolar( wxCommandEvent& event ) { wxFileConfig *pConf = GetOCPNConfigObject(); pConf->SetPath ( _T( "/PlugIns/WeatherRouting/BoatDialog" ) ); wxString path; pConf->Read ( _T ( "FilePath" ), &path, *GetpSharedDataLocation() + _T("plugins/weather_routing_pi/data/polars")); path = wxFileName(path).GetPath(); wxFileDialog openDialog ( this, _( "Select Polar File" ), path, wxT ( "" ), wxT ( "CSV, POL, TXT (*.csv, *.pol, *.txt)|*.CSV;*.csv;*.csv.gz;*.csv.bz2;*.POL;*.pol;*.pol.gz;*.pol.bz2;*.TXT;*.txt;*.txt.gz;*.txt.bz2|All files (*.*)|*.*" ), wxFD_OPEN | wxFD_MULTIPLE ); if( openDialog.ShowModal() != wxID_OK ) return; pConf->Write( _T ( "FilePath" ), openDialog.GetPath()); wxArrayString paths; openDialog.GetPaths(paths); bool generate = false, existed = true; for(unsigned int i=0; i<paths.GetCount(); i++) { wxString filename = paths[i], message; Polar polar; for(unsigned int j=0; j<m_Boat.Polars.size(); j++) if(m_Boat.Polars[j].FileName == filename) goto skip; existed = wxFileName::Exists(filename); // write dummy file if(!existed) { wxFile file; if(file.Open(filename, wxFile::write)) file.Write(dummy_polar); } if(polar.Open(filename, message)) { m_Boat.Polars.push_back(polar); RepopulatePolars(); m_lPolars->SetItemState(m_Boat.Polars.size()-1, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); generate = true; } else { wxMessageDialog md(this, message, _("OpenCPN Weather Routing Plugin"), wxICON_ERROR | wxOK ); md.ShowModal(); } skip:; } if(generate) GenerateCrossOverChart(); if(!existed) OnEditPolar(event); }