tool to copy OriginalLane to clipboard. also fix wasm build breakage [rebuild]

This commit is contained in:
Dustin Carlino 2020-06-07 16:25:42 -07:00
parent c2563ae15f
commit 863593708a
8 changed files with 139 additions and 22 deletions

62
Cargo.lock generated
View File

@ -345,6 +345,26 @@ dependencies = [
"vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "clipboard"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"clipboard-win 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
"objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"x11-clipboard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "clipboard-win"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "cloudabi"
version = "0.0.3"
@ -946,6 +966,7 @@ dependencies = [
"abstutil 0.1.0",
"built 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
"clipboard 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
"colorous 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ezgui 0.1.0",
@ -2015,6 +2036,24 @@ dependencies = [
"malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "objc-foundation"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
"objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "objc_id"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "once_cell"
version = "1.3.1"
@ -3663,6 +3702,14 @@ dependencies = [
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "x11-clipboard"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"xcb 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "x11-dl"
version = "2.18.5"
@ -3674,6 +3721,15 @@ dependencies = [
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "xcb"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "xdg"
version = "2.2.0"
@ -3762,6 +3818,8 @@ dependencies = [
"checksum cgl 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff"
"checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2"
"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
"checksum clipboard 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "25a904646c0340239dcf7c51677b33928bf24fdf424b79a57909c0109075b2e7"
"checksum clipboard-win 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e3a093d6fed558e5fe24c3dfc85a68bb68f1c824f440d3ba5aca189e2998786b"
"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
"checksum cmake 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "81fb25b677f8bf1eb325017cb6bb8452f87969db0fedb4f757b297bee78a7c62"
"checksum cocoa 0.20.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8f7b6f3f7f4f0b3ec5c5039aaa9e8c3cef97a7a480a400fd62944841314f293d"
@ -3938,6 +3996,8 @@ dependencies = [
"checksum num_enum_derive 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d"
"checksum numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef"
"checksum objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
"checksum objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
"checksum objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
"checksum once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b"
"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
"checksum openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)" = "cee6d85f4cb4c4f59a6a85d5b68a233d280c82e29e822913b9c8b129fbf20bdd"
@ -4127,7 +4187,9 @@ dependencies = [
"checksum winit 0.22.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1e4ccbf7ddb6627828eace16cacde80fc6bf4dbb3469f88487262a02cf8e7862"
"checksum winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9"
"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
"checksum x11-clipboard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "89bd49c06c9eb5d98e6ba6536cf64ac9f7ee3a009b2f53996d405b3944f6bcea"
"checksum x11-dl 2.18.5 (registry+https://github.com/rust-lang/crates.io-index)" = "2bf981e3a5b3301209754218f962052d4d9ee97e478f4d26d4a6eced34c1fef8"
"checksum xcb 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5e917a3f24142e9ff8be2414e36c649d47d6cc2ba81f16201cdef96e533e02de"
"checksum xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57"
"checksum xml-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c1cb601d29fe2c2ac60a2b2e5e293994d87a1f6fa9687a31a15270f909be9c2"
"checksum xml-rs 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2bb76e5c421bbbeb8924c60c030331b345555024d56261dae8f3e786ed817c23"

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19 2H14.82C14.4 0.84 13.3 0 12 0C10.7 0 9.6 0.84 9.18 2H5C3.9 2 3 2.9 3 4V20C3 21.1 3.9 22 5 22H19C20.1 22 21 21.1 21 20V4C21 2.9 20.1 2 19 2ZM12 2C12.55 2 13 2.45 13 3C13 3.55 12.55 4 12 4C11.45 4 11 3.55 11 3C11 2.45 11.45 2 12 2ZM19 20H5V4H7V7H17V4H19V20Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 388 B

View File

@ -7,7 +7,7 @@ edition = "2018"
# TODO Can't toggle based on target_arch. https://github.com/rust-lang/cargo/issues/2524
# cargo web start --target wasm32-unknown-unknown --no-default-features --features wasm
[features]
default = ["built", "ezgui/glium-backend", "reqwest"]
default = ["built", "clipboard", "ezgui/glium-backend", "reqwest", "webbrowser"]
wasm = ["ezgui/wasm-backend"]
[dependencies]
@ -15,6 +15,7 @@ aabb-quadtree = "0.1.0"
abstutil = { path = "../abstutil" }
built = { version = "0.4.2", optional = true, features=["chrono"] }
chrono = "0.4.10"
clipboard = { version = "0.5.0", optional = true }
colorous = "1.0.1"
downcast-rs = "1.1.1"
ezgui = { path = "../ezgui", default-features=false }
@ -32,7 +33,7 @@ reqwest = { version = "0.10.4", optional = true, default-features=false, feature
serde = "1.0.110"
svg_face = "0.1.2"
sim = { path = "../sim" }
webbrowser = "0.5.2"
webbrowser = { version = "0.5.2", optional = true }
xmltree = "0.10.0"
[build-dependencies]

View File

@ -360,6 +360,8 @@ impl State for ParkingMapper {
if self.selected.is_some() && ctx.input.new_was_pressed(&hotkey(Key::S).unwrap()) {
if let Some(pt) = ctx.canvas.get_cursor_in_map_space() {
if let Some(gps) = pt.to_gps(app.primary.map.get_gps_bounds()) {
#[cfg(not(target_arch = "wasm32"))]
{
let _ = webbrowser::open(&format!(
"https://www.bing.com/maps?cp={}~{}&style=x",
gps.y(),
@ -368,8 +370,11 @@ impl State for ParkingMapper {
}
}
}
}
if let Some((ref roads, _)) = self.selected {
if ctx.input.new_was_pressed(&hotkey(Key::O).unwrap()) {
#[cfg(not(target_arch = "wasm32"))]
{
let _ = webbrowser::open(&format!(
"https://www.openstreetmap.org/way/{}",
app.primary
@ -380,6 +385,7 @@ impl State for ParkingMapper {
));
}
}
}
match self.composite.event(ctx) {
Some(Outcome::Clicked(x)) => match x.as_ref() {
@ -448,8 +454,10 @@ impl State for ParkingMapper {
}
#[cfg(target_arch = "wasm32")]
fn generate_osmc(data: &BTreeMap<i64, Value>, timer: &mut Timer) -> Result<(), Box<dyn Error>> {
Err("Woops, mapping mode isn't supported on the web yet".to_string())
fn generate_osmc(_: &BTreeMap<i64, Value>, _: bool, _: &mut Timer) -> Result<(), Box<dyn Error>> {
Err("Woops, mapping mode isn't supported on the web yet"
.to_string()
.into())
}
#[cfg(not(target_arch = "wasm32"))]

View File

@ -1,8 +1,8 @@
use crate::app::App;
use crate::info::{header_btns, make_table, make_tabs, throughput, DataOptions, Details, Tab};
use abstutil::prettyprint_usize;
use ezgui::{EventCtx, Line, LinePlot, PlotOptions, Series, Text, TextExt, Widget};
use map_model::LaneID;
use ezgui::{Btn, EventCtx, Line, LinePlot, PlotOptions, Series, Text, TextExt, Widget};
use map_model::{LaneID, OriginalLane};
pub fn info(ctx: &EventCtx, app: &App, details: &mut Details, id: LaneID) -> Vec<Widget> {
let mut rows = header(ctx, app, details, id, Tab::LaneInfo(id));
@ -121,6 +121,17 @@ pub fn debug(ctx: &EventCtx, app: &App, details: &mut Details, id: LaneID) -> Ve
rows.extend(make_table(ctx, kv));
rows.push(Widget::row(vec![
"Copy OriginalLane to clipboard: "
.draw_text(ctx)
.margin_right(15),
Btn::svg_def("../data/system/assets/tools/clipboard.svg").build(
ctx,
"copy OriginalLane",
None,
),
]));
let mut txt = Text::from(Line(""));
txt.add(Line("Raw OpenStreetMap data"));
rows.push(txt.draw(ctx));
@ -130,6 +141,20 @@ pub fn debug(ctx: &EventCtx, app: &App, details: &mut Details, id: LaneID) -> Ve
rows
}
pub fn copy_orig_lane(app: &App, id: LaneID) {
#[cfg(not(target_arch = "wasm32"))]
{
use clipboard::{ClipboardContext, ClipboardProvider};
let mut cb: ClipboardContext = ClipboardProvider::new().unwrap();
cb.set_contents(format!(
"{:?}",
OriginalLane::to_permanent(id, &app.primary.map)
))
.unwrap();
}
}
pub fn traffic(
ctx: &mut EventCtx,
app: &App,

View File

@ -436,6 +436,16 @@ impl InfoPanel {
},
))),
)
} else if action == "copy OriginalLane" {
// TODO Not happy about this :(
lane::copy_orig_lane(
app,
match maybe_id {
Some(ID::Lane(l)) => l,
_ => unreachable!(),
},
);
return (false, None);
} else {
let mut close_panel = true;
let t =

View File

@ -206,8 +206,12 @@ impl State for MainMenu {
return Transition::Push(About::new(ctx));
}
"Feedback" => {
// cargo fmt tries to remove this
#[cfg(not(target_arch = "wasm32"))]
{
let _ = webbrowser::open("https://forms.gle/ocvbek1bTaZUr3k49");
}
}
"Community Proposals" => {
return Transition::Push(Proposals::new(ctx, app));
}
@ -300,8 +304,12 @@ impl State for About {
return Transition::Pop;
}
"See full credits" => {
// cargo fmt tries to remove this
#[cfg(not(target_arch = "wasm32"))]
{
let _ = webbrowser::open("https://github.com/dabreegster/abstreet#credits");
}
}
_ => unreachable!(),
},
None => {}

View File

@ -392,7 +392,7 @@ impl PermanentEditIntersection {
}
impl OriginalLane {
fn to_permanent(l: LaneID, map: &Map) -> OriginalLane {
pub fn to_permanent(l: LaneID, map: &Map) -> OriginalLane {
let r = map.get_parent(l);
let (fwd, idx) = r.dir_and_offset(l);
OriginalLane {