diff --git a/DataViewer/DataSource.cpp b/DataViewer/DataSource.cpp index 3bbbed2a1..510669483 100644 --- a/DataViewer/DataSource.cpp +++ b/DataViewer/DataSource.cpp @@ -44,6 +44,7 @@ bool IDataSource::IsWritable(GdaConst::DataSourceType ds_type) ds_type == GdaConst::ds_gml || ds_type == GdaConst::ds_mapinfo || ds_type == GdaConst::ds_sqlite || + ds_type == GdaConst::ds_gpkg || ds_type == GdaConst::ds_mysql || ds_type == GdaConst::ds_oci || ds_type == GdaConst::ds_postgresql ) @@ -87,6 +88,8 @@ wxString IDataSource::GetDataTypeNameByExt(wxString ext) ds_format = "GeoJSON"; else if(ext.CmpNoCase("sqlite")==0) ds_format = "SQLite"; + else if(ext.CmpNoCase("gpkg")==0) + ds_format = "GPKG"; else if(ext.CmpNoCase("xls")==0) ds_format = "XLS"; else if(ext.CmpNoCase("xlsx")==0) @@ -182,6 +185,7 @@ IDataSource* IDataSource::CreateDataSource(wxString data_type_name, type == GdaConst::ds_esri_personal_gdb || type == GdaConst::ds_odbc || type == GdaConst::ds_sqlite || + type == GdaConst::ds_gpkg || type == GdaConst::ds_xls || type == GdaConst::ds_xlsx || type == GdaConst::ds_geo_json ) diff --git a/DataViewer/DataSource.h b/DataViewer/DataSource.h index 9183c9f9d..1d65ec568 100644 --- a/DataViewer/DataSource.h +++ b/DataViewer/DataSource.h @@ -148,7 +148,10 @@ class FileDataSource : public IDataSource { virtual IDataSource* Clone(); - virtual bool IsFileDataSource() { return ds_type == GdaConst::ds_sqlite ? false : true;} + virtual bool IsFileDataSource() { + return ds_type == GdaConst::ds_sqlite || ds_type == GdaConst::ds_gpkg ? false : true; + } + /** * Return file path. */ diff --git a/DialogTools/ConnectDatasourceDlg.cpp b/DialogTools/ConnectDatasourceDlg.cpp index eaa7919af..22755390c 100644 --- a/DialogTools/ConnectDatasourceDlg.cpp +++ b/DialogTools/ConnectDatasourceDlg.cpp @@ -290,6 +290,7 @@ IDataSource* ConnectDatasourceDlg::CreateDataSource() // a special case: sqlite is a file based database, so we need to get // avalible layers and prompt for user selecting if (datasource->GetType() == GdaConst::ds_sqlite || + datasource->GetType() == GdaConst::ds_gpkg|| datasource->GetType() == GdaConst::ds_osm || datasource->GetType() == GdaConst::ds_esri_personal_gdb|| datasource->GetType() == GdaConst::ds_esri_file_geodb) diff --git a/DialogTools/DatasourceDlg.cpp b/DialogTools/DatasourceDlg.cpp index a6295b775..a205b0a8d 100644 --- a/DialogTools/DatasourceDlg.cpp +++ b/DialogTools/DatasourceDlg.cpp @@ -60,6 +60,7 @@ void DatasourceDlg::Init() ds_names.Add("GeoJSON (*.geojson;*.json)|*.geojson;*.json|" "GeoJSON (*.geojson)|*.geojson|" "GeoJSON (*.json)|*.json"); + ds_names.Add("GeoPackage (*.gpkg)|*.gpkg"); ds_names.Add("SQLite/SpatiaLite (*.sqlite)|*.sqlite"); if( GeneralWxUtils::isWindows()){ diff --git a/DialogTools/ExportDataDlg.cpp b/DialogTools/ExportDataDlg.cpp index 1ef224a3f..7d3fa5592 100644 --- a/DialogTools/ExportDataDlg.cpp +++ b/DialogTools/ExportDataDlg.cpp @@ -326,7 +326,7 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event ) // cases: e.g. sqlite, ESRI FileGDB if (datasource_type == 0) { if (wxFileExists(ds_name)) { - if (ds_name.EndsWith(".sqlite")) { + if (ds_name.EndsWith(".sqlite") || ds_name.EndsWith(".gpkg")) { // add new layer to existing sqlite is_update = true; } else { @@ -394,9 +394,13 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event ) } catch (GdaException& e) { if (e.type() == GdaException::NORMAL) return; + // special clean up for file datasource if ( !tmp_ds_name.empty() ) { - if ( wxFileExists(tmp_ds_name) && !tmp_ds_name.EndsWith(".sqlite")){ + if ( wxFileExists(tmp_ds_name) && + !tmp_ds_name.EndsWith(".sqlite") && + !tmp_ds_name.EndsWith(".gpkg") ) + { wxRemoveFile(ds_name); wxCopyFile(tmp_ds_name, ds_name); wxRemoveFile(tmp_ds_name); diff --git a/DialogTools/SaveAsDlg.cpp b/DialogTools/SaveAsDlg.cpp index 65262e813..d8e66c895 100644 --- a/DialogTools/SaveAsDlg.cpp +++ b/DialogTools/SaveAsDlg.cpp @@ -122,7 +122,9 @@ void SaveAsDlg::OnBrowseDatasourceBtn ( wxCommandEvent& event ) ds_type != GdaConst::ds_geo_json && ds_type != GdaConst::ds_mapinfo && ds_type != GdaConst::ds_sqlite && - ds_type != GdaConst::ds_csv) { + ds_type != GdaConst::ds_gpkg && + ds_type != GdaConst::ds_csv) + { msg << "Save is not supported on current data source type: " << ds_format << ". Please try to use \"File->Save As\" other data source. " << "However, the project file can still be saved as other project file."; diff --git a/GdaConst.cpp b/GdaConst.cpp index 486f00d6e..d5a8cd2ac 100644 --- a/GdaConst.cpp +++ b/GdaConst.cpp @@ -600,6 +600,16 @@ void GdaConst::init() datasrc_field_illegal_regex[ds_sqlite] = wxEmptyString; datasrc_field_casesensitive[ds_sqlite] = true; + datasrc_str_to_type["GPKG"] = ds_gpkg; + datasrc_type_to_prefix[ds_gpkg] = ""; + datasrc_type_to_fullname[ds_gpkg] = "GeoPackage"; + datasrc_table_lens[ds_gpkg] = 128; + datasrc_field_lens[ds_gpkg] = 128; + datasrc_field_warning[ds_gpkg] = no_field_warning; + datasrc_field_regex[ds_gpkg] = wxEmptyString; + datasrc_field_illegal_regex[ds_gpkg] = wxEmptyString; + datasrc_field_casesensitive[ds_gpkg] = true; + datasrc_str_to_type["WFS"] = ds_wfs; datasrc_type_to_prefix[ds_wfs] = "WFS:"; datasrc_type_to_fullname[ds_wfs] = "OGC Web Feature Service"; @@ -670,23 +680,29 @@ void GdaConst::init() for (ds_fld_map::iterator it=datasrc_req_flds.begin(); it != datasrc_req_flds.end(); it++) { DataSourceType type = it->first; - if (type == ds_esri_file_geodb || type == ds_csv || type == ds_dbf || - type == ds_gml || type == ds_kml || type == ds_mapinfo || - type == ds_shapefile || type == ds_sqlite || type == ds_xls || - type == ds_geo_json || type == ds_osm) { + if (type == ds_esri_file_geodb || type == ds_csv || + type == ds_dbf || type == ds_gml || + type == ds_kml || type == ds_mapinfo || + type == ds_shapefile || type == ds_sqlite || + type == ds_gpkg || type == ds_xls || + type == ds_geo_json || type == ds_osm) + { // These are simple files, and a file name must be supplied it->second.insert("file"); } else if (type == ds_esri_arc_obj || type == ds_esri_personal_gdb || - type == ds_esri_arc_sde || type == ds_mysql || - type == ds_ms_sql || type == ds_oci || type == ds_odbc) { + type == ds_esri_arc_sde || type == ds_mysql || + type == ds_ms_sql || type == ds_oci || type == ds_odbc) + { it->second.insert("user"); it->second.insert("pwd"); it->second.insert("host"); it->second.insert("port"); it->second.insert("db_name"); } else if ( type == ds_wfs) { + it->second.insert("url"); } else if (type == ds_postgresql) { + it->second.insert("db_name"); } } diff --git a/GdaConst.h b/GdaConst.h index a02ea0e7b..ef0416d89 100644 --- a/GdaConst.h +++ b/GdaConst.h @@ -70,7 +70,7 @@ class GdaConst { ds_esri_personal_gdb, ds_esri_arc_sde, ds_csv, ds_dbf, ds_geo_json, ds_gml, ds_kml, ds_mapinfo, ds_mysql, ds_ms_sql, ds_oci, ds_odbc, ds_postgresql, - ds_shapefile, ds_sqlite, ds_wfs, ds_xls, ds_xlsx, ds_osm, ds_ods, ds_cartodb, ds_unknown }; + ds_shapefile, ds_sqlite, ds_gpkg, ds_wfs, ds_xls, ds_xlsx, ds_osm, ds_ods, ds_cartodb, ds_unknown }; static std::map datasrc_str_to_type; static std::map datasrc_type_to_str; diff --git a/GeoDa.cpp b/GeoDa.cpp index 671fdc7a3..c88494ad2 100644 --- a/GeoDa.cpp +++ b/GeoDa.cpp @@ -457,6 +457,7 @@ EVT_CHAR_HOOK(GdaFrame::OnKeyEvent) EVT_MENU(XRCID("ID_NEW_PROJ_FROM_SHP"), GdaFrame::OnNewProjectFromShp) EVT_MENU(XRCID("ID_NEW_PROJ_FROM_SQLITE"), GdaFrame::OnNewProjectFromSqlite) +EVT_MENU(XRCID("ID_NEW_PROJ_FROM_GPKG"), GdaFrame::OnNewProjectFromGpkg) EVT_MENU(XRCID("ID_NEW_PROJ_FROM_CSV"), GdaFrame::OnNewProjectFromCsv) EVT_MENU(XRCID("ID_NEW_PROJ_FROM_DBF"), GdaFrame::OnNewProjectFromDbf) EVT_MENU(XRCID("ID_NEW_PROJ_FROM_GDB"), GdaFrame::OnNewProjectFromGdb) @@ -1223,6 +1224,7 @@ void GdaFrame::UpdateToolbarAndMenus() GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_SHP"), !proj_open); GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_SQLITE"), !proj_open); + GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_GPKG"), !proj_open); GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_CSV"), !proj_open); GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_DBF"), !proj_open); GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_GDB"), !proj_open); @@ -1874,6 +1876,14 @@ void GdaFrame::OnNewProjectFromSqlite(wxCommandEvent& event) NewProjectFromFile(dlg.GetPath()); } +void GdaFrame::OnNewProjectFromGpkg(wxCommandEvent& event) +{ + wxString wc = "GeoPacakge (*.gpkg)|*.gpkg"; + wxFileDialog dlg(this,"New Project From GeoPackage", "", "", wc); + if (dlg.ShowModal() != wxID_OK) return; + NewProjectFromFile(dlg.GetPath()); +} + void GdaFrame::OnNewProjectFromCsv(wxCommandEvent& event) { wxString wc = "Comma Separated Value (*.csv)|*.csv"; diff --git a/GeoDa.h b/GeoDa.h index 8c4e4263a..7c4bb94de 100644 --- a/GeoDa.h +++ b/GeoDa.h @@ -99,6 +99,7 @@ class GdaFrame: public wxFrame void OnNewProject(wxCommandEvent& event); void OnNewProjectFromShp(wxCommandEvent& event); void OnNewProjectFromSqlite(wxCommandEvent& event); + void OnNewProjectFromGpkg(wxCommandEvent& event); void OnNewProjectFromCsv(wxCommandEvent& event); void OnNewProjectFromDbf(wxCommandEvent& event); void OnNewProjectFromGdb(wxCommandEvent& event); diff --git a/ShapeOperations/OGRLayerProxy.cpp b/ShapeOperations/OGRLayerProxy.cpp index 866b149c2..b665fb3d5 100644 --- a/ShapeOperations/OGRLayerProxy.cpp +++ b/ShapeOperations/OGRLayerProxy.cpp @@ -596,8 +596,11 @@ bool OGRLayerProxy::AddGeometries(Shapefile::Main& p_main) { // NOTE: OGR/GDAL 2.0 is still implementing addGeomField feature. // So, we only support limited datasources for adding geometries. - if ( !(ds_type == GdaConst::ds_geo_json || ds_type == GdaConst::ds_gml - || ds_type == GdaConst::ds_kml || ds_type == GdaConst::ds_sqlite) ) + if ( !(ds_type == GdaConst::ds_geo_json || + ds_type == GdaConst::ds_gml || + ds_type == GdaConst::ds_kml || + ds_type == GdaConst::ds_sqlite || + ds_type == GdaConst::ds_gpkg) ) { return false; } diff --git a/rc/GdaAppResources.cpp b/rc/GdaAppResources.cpp index 00e39ed1b..29a54fe8a 100644 --- a/rc/GdaAppResources.cpp +++ b/rc/GdaAppResources.cpp @@ -20188,7 +20188,7 @@ static unsigned char xml_res_file_8[] = { 76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111, 98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62,10}; -static size_t xml_res_size_9 = 159785; +static size_t xml_res_size_9 = 159913; static unsigned char xml_res_file_9[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, 110,99,111,100,105,110,103,61,34,73,83,79,45,56,56,53,57,45,49,53,34,63, @@ -20218,73 +20218,79 @@ static unsigned char xml_res_file_9[] = { 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74, -95,70,82,79,77,95,67,83,86,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,111,109,109,97,32,83,101,112,97,114,97,116,101,100, -32,86,97,108,117,101,32,40,42,46,99,115,118,41,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78, -69,87,95,80,82,79,74,95,70,82,79,77,95,68,66,70,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,100,66,97,115,101,32,68,97,116,97, -98,97,115,101,32,70,105,108,101,32,40,42,46,100,98,102,41,60,47,108,97, +95,70,82,79,77,95,71,80,75,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,71,101,111,80,97,99,107,97,103,101,32,40,42,46,103, +112,107,103,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,95,70,82,79, +77,95,67,83,86,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,109,109,97,32,83,101,112,97,114,97,116,101,100,32,86,97,108, +117,101,32,40,42,46,99,115,118,41,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82, +79,74,95,70,82,79,77,95,68,66,70,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,100,66,97,115,101,32,68,97,116,97,98,97,115,101, +32,70,105,108,101,32,40,42,46,100,98,102,41,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69, +87,95,80,82,79,74,95,70,82,79,77,95,74,83,79,78,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,71,101,111,74,83,79,78,32,40,42, +46,106,115,111,110,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,95, +70,82,79,77,95,71,77,76,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,71,101,111,103,114,97,112,104,121,32,77,97,114,107,117,112, +32,76,97,110,103,117,97,103,101,32,40,42,46,103,109,108,41,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,77,95,74,83,79,78,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,111,74,83, -79,78,32,40,42,46,106,115,111,110,41,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82, -79,74,95,70,82,79,77,95,71,77,76,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,71,101,111,103,114,97,112,104,121,32,77,97,114, -107,117,112,32,76,97,110,103,117,97,103,101,32,40,42,46,103,109,108,41, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,77,95,75,77, -76,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,101, -121,104,111,108,101,32,77,97,114,107,117,112,32,76,97,110,103,117,97,103, -101,32,40,42,46,107,109,108,41,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79, -74,95,70,82,79,77,95,77,65,80,73,78,70,79,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,77,97,112,73,110,102,111,32,40,42,46,116, -97,98,44,32,42,46,109,105,102,44,32,42,46,109,105,100,41,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,78,69,87,95,80,82,79,74,95,70,82,79,77,95,88,76,83,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,83,32,69,120,99,101, -108,32,40,42,46,120,108,115,41,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,77,95,75,77,76,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,101,121,104,111,108, +101,32,77,97,114,107,117,112,32,76,97,110,103,117,97,103,101,32,40,42,46, +107,109,108,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,95,70,82,79, +77,95,77,65,80,73,78,70,79,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,77,97,112,73,110,102,111,32,40,42,46,116,97,98,44,32,42, +46,109,105,102,44,32,42,46,109,105,100,41,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87, +95,80,82,79,74,95,70,82,79,77,95,88,76,83,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,77,83,32,69,120,99,101,108,32,40,42,46, +120,108,115,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,78,69,87,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,38,97,109,112,59,78,101,119,32,80,114,111,106, +101,99,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,97, +99,99,101,108,62,67,116,114,108,43,78,60,47,97,99,99,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,80,82,79, +74,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38, +97,109,112,59,79,112,101,110,32,80,114,111,106,101,99,116,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,97,99,99,101,108,62,67,116, +114,108,43,79,60,47,97,99,99,101,108,62,10,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,69,67,84,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,78,101,119,32, +109,101,61,34,73,68,95,83,65,86,69,95,65,83,95,80,82,79,74,69,67,84,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, 80,114,111,106,101,99,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,97,99,99,101,108,62,67,116,114,108,43,78,60,47,97,99,99,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69, -78,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,38,97,109,112,59,79,112,101,110,32,80,114,111,106,101,99,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,97,99,99,101,108, -62,67,116,114,108,43,79,60,47,97,99,99,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,65,83,95,80,82,79,74,69, -67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118, -101,32,80,114,111,106,101,99,116,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, -114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,65,86,69,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, +47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,83,65,86,69,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,97,118,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84, 95,76,65,89,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, 62,83,97,118,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, diff --git a/rc/menus.xrc b/rc/menus.xrc index 5dbd3276c..14b494982 100644 --- a/rc/menus.xrc +++ b/rc/menus.xrc @@ -10,6 +10,9 @@ + + + diff --git a/version.h b/version.h index 8b0ad9a8f..037865116 100644 --- a/version.h +++ b/version.h @@ -2,7 +2,7 @@ namespace Gda { const int version_major = 1; const int version_minor = 8; const int version_build = 9; - const int version_subbuild = 1; + const int version_subbuild = 3; const int version_year = 2016; const int version_month = 7; const int version_day = 8;