mirror of
https://github.com/a-b-street/abstreet.git
synced 2025-01-01 10:57:17 +03:00
Change the KML/external shapefile debug tool to use a real file picker
This commit is contained in:
parent
8fa0f97d37
commit
81f9ee5a1b
@ -8,7 +8,8 @@ use abstutil::{prettyprint_usize, Parallelism, Timer};
|
|||||||
use geom::{Circle, Distance, PolyLine, Polygon, Pt2D, Ring};
|
use geom::{Circle, Distance, PolyLine, Polygon, Pt2D, Ring};
|
||||||
use kml::{ExtraShape, ExtraShapes};
|
use kml::{ExtraShape, ExtraShapes};
|
||||||
use map_gui::colors::ColorScheme;
|
use map_gui::colors::ColorScheme;
|
||||||
use map_gui::tools::{ChooseSomething, PopupMsg};
|
use map_gui::load::FutureLoader;
|
||||||
|
use map_gui::tools::PopupMsg;
|
||||||
use map_model::BuildingID;
|
use map_model::BuildingID;
|
||||||
use widgetry::{
|
use widgetry::{
|
||||||
lctrl, Choice, Color, Drawable, EventCtx, GeomBatch, GfxCtx, HorizontalAlignment, Key, Line,
|
lctrl, Choice, Color, Drawable, EventCtx, GeomBatch, GfxCtx, HorizontalAlignment, Key, Line,
|
||||||
@ -143,28 +144,7 @@ impl State<App> for ViewKML {
|
|||||||
return Transition::Pop;
|
return Transition::Pop;
|
||||||
}
|
}
|
||||||
"load KML file" => {
|
"load KML file" => {
|
||||||
return Transition::Push(ChooseSomething::new(
|
return pick_file(ctx, app);
|
||||||
ctx,
|
|
||||||
"Load file",
|
|
||||||
Choice::strings(
|
|
||||||
abstio::list_dir(app.primary.map.get_city_name().input_path(""))
|
|
||||||
.into_iter()
|
|
||||||
.filter(|x| {
|
|
||||||
(x.ends_with(".bin")
|
|
||||||
|| x.ends_with(".kml")
|
|
||||||
|| x.ends_with(".csv"))
|
|
||||||
&& !x.ends_with("popdat.bin")
|
|
||||||
&& !x.ends_with("collisions.bin")
|
|
||||||
})
|
|
||||||
.collect(),
|
|
||||||
),
|
|
||||||
Box::new(|path, ctx, app| {
|
|
||||||
Transition::Multi(vec![
|
|
||||||
Transition::Pop,
|
|
||||||
Transition::Replace(ViewKML::new(ctx, app, Some(path))),
|
|
||||||
])
|
|
||||||
}),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
},
|
},
|
||||||
@ -235,8 +215,10 @@ fn load_objects(
|
|||||||
// happened.
|
// happened.
|
||||||
abstio::write_binary(path.replace(".csv", ".bin"), &shapes);
|
abstio::write_binary(path.replace(".csv", ".bin"), &shapes);
|
||||||
shapes
|
shapes
|
||||||
} else {
|
} else if path.ends_with(".bin") {
|
||||||
abstio::read_binary::<ExtraShapes>(path.to_string(), timer)
|
abstio::read_binary::<ExtraShapes>(path.to_string(), timer)
|
||||||
|
} else {
|
||||||
|
ExtraShapes { shapes: Vec::new() }
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ExtraShapes { shapes: Vec::new() }
|
ExtraShapes { shapes: Vec::new() }
|
||||||
@ -414,3 +396,35 @@ fn make_query(app: &App, objects: &Vec<Object>, query: &str) -> (GeomBatch, usiz
|
|||||||
}
|
}
|
||||||
(batch, cnt)
|
(batch, cnt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn pick_file(ctx: &mut EventCtx, app: &App) -> Transition {
|
||||||
|
let (_, outer_progress_rx) = futures_channel::mpsc::channel(1);
|
||||||
|
let (_, inner_progress_rx) = futures_channel::mpsc::channel(1);
|
||||||
|
let start_dir = app.primary.map.get_city_name().input_path("");
|
||||||
|
Transition::Push(FutureLoader::<App, Option<String>>::new(
|
||||||
|
ctx,
|
||||||
|
Box::pin(async move {
|
||||||
|
let result = rfd::AsyncFileDialog::new()
|
||||||
|
.set_directory(&start_dir)
|
||||||
|
.pick_file()
|
||||||
|
.await
|
||||||
|
.map(|x| x.path().display().to_string());
|
||||||
|
let wrap: Box<dyn Send + FnOnce(&App) -> Option<String>> =
|
||||||
|
Box::new(move |_: &App| result);
|
||||||
|
Ok(wrap)
|
||||||
|
}),
|
||||||
|
outer_progress_rx,
|
||||||
|
inner_progress_rx,
|
||||||
|
"Waiting for a file to be chosen",
|
||||||
|
Box::new(|ctx, app, maybe_path| {
|
||||||
|
if let Ok(Some(path)) = maybe_path {
|
||||||
|
Transition::Multi(vec![
|
||||||
|
Transition::Pop,
|
||||||
|
Transition::Replace(ViewKML::new(ctx, app, Some(path))),
|
||||||
|
])
|
||||||
|
} else {
|
||||||
|
Transition::Pop
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user