From 1371e6c7fa12a2b7f37cfa1a1decd31a658f8a9f Mon Sep 17 00:00:00 2001 From: Marrub Date: Mon, 25 Feb 2019 14:33:13 -0500 Subject: [PATCH] more code for tycho --- Cargo.toml | 22 ++- data/icons.psd | Bin 0 -> 33974 bytes data/lines.png | Bin 0 -> 226 bytes data/points.png | Bin 0 -> 205 bytes data/polys.png | Bin 0 -> 538 bytes data/tycho.xml | 454 +++++++++++++++++++++++++-------------------- data/tycho_res.xml | 8 +- src/tycho/main.rs | 109 +++++++---- 8 files changed, 347 insertions(+), 246 deletions(-) create mode 100644 data/icons.psd create mode 100644 data/lines.png create mode 100644 data/points.png create mode 100644 data/polys.png diff --git a/Cargo.toml b/Cargo.toml index a0ebcbc..2d8c3a9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,14 +22,20 @@ serde = {version = "1.0", features = ["derive"]} serde_yaml = "0.8" # note: these have to be updated all at once, check the gtk crate for versions -atk = "0.6" -cairo-rs = "0.6" -gdk = "0.10" -gdk-pixbuf = "0.6" -gtk = "0.6" -gio = "0.6" -glib = "0.7" -pango = "0.6" +atk = "0.6" +cairo-rs = "0.6" +cairo-sys-rs = "0.8" +gdk = "0.10" +gdk-pixbuf = "0.6" +gio = "0.6" +gio-sys = "0.8" +glib = "0.7" +glib-sys = "0.8" +gobject-sys = "0.8" +gtk = "0.6" +gtk-sys = "0.8" +pango = "0.6" +pango-sys = "0.8" [profile.dev] opt-level = 1 diff --git a/data/icons.psd b/data/icons.psd new file mode 100644 index 0000000000000000000000000000000000000000..cb007c9d9f06ca94bc053d039c7ed55d509dc357 GIT binary patch literal 33974 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 literal 0 HcmV?d00001 diff --git a/data/lines.png b/data/lines.png new file mode 100644 index 0000000000000000000000000000000000000000..a61134535094f6985a6a1675adab7abffe4fc8a7 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjD?MEtLp(b7UfeBsSV6!wuqt3n zsfTI4q+0VCJy+Ejb~%a8gJScy-s9msXnWAA{5V7Rb|(G=&-!TxxZc!!^XU+s@Yv9; zuY+~M<5gW9GJ^Kpa~_?u3^6@go-mtH@3FCYMpr-6*^hz=uRFgp-Tf$+pmC3j=Xi9( z${(Tzvj16U9NEv9_E9Q9N}us_1!qNr0FzRZkbWa;h3XNdxZRF!I*&{h6z?h3G5y*Je1r5`FWp``g{-gAe>G7*!)4PkEbjLj>qP22WQ%mvv4F FO#ll#Qwsn9 literal 0 HcmV?d00001 diff --git a/data/polys.png b/data/polys.png new file mode 100644 index 0000000000000000000000000000000000000000..285871e0db3f027d4350795759c003c8a26f3fa4 GIT binary patch literal 538 zcmV+#0_FXQP)QM;F{IA27Ul< zcNOddKY<%1CP_lS-zQ0us_3Td+pjA)0Db{?N*E4@^m;u+WSQM=m%(6A72TC{2b%<6 zfP0;Y;~3xfSHSD(`#y0TS4H>0*M|fKa0L)W5uWF51h1#(c|=j9l0PMHMQ{kPSS+>z zujgX1P|2YRjDH&Gh=|PRb7>Nl`HmJU@I^$X(`h3?W!_&tELU_6;5bgB6*-QhD>|>9 z!7HEuFio?Oz%)%26u@g;(FYMR#^bRRMbT(QMN!CTG*Ygw#YYj5$z;+9t}&ay zDleW(u>67}5s`Mg{Val3tEJ_Uh=>560P;M?w(UlTY}+<@p6fw>R>2-{3XrBLhGFak zHw=R`O%;9$?5RM2m%s%;7=}9u!Z1|$Mah$@K!EqaEkFWmuNA5pG!)S(YjMWS#Yx;018Tc5znD)xMM80hcx5mu3IM cck=&^zqj+_LuR{_EdT%j07*qoM6N<$g8GT@Y5)KL literal 0 HcmV?d00001 diff --git a/data/tycho.xml b/data/tycho.xml index 4459934..16fd650 100644 --- a/data/tycho.xml +++ b/data/tycho.xml @@ -33,14 +33,131 @@ Author: Alison Sanderson + + True + False + /net/greyserv/maraiah/tycho/lines + + + True + False + /net/greyserv/maraiah/tycho/points + + + True + False + /net/greyserv/maraiah/tycho/polys + + + False + Tool Palette + 250 + True + True + + + + + + True + False + vertical + + + True + False + Geometry + + + True + False + Points + True + im_points + + + Points Tool + The tool that modifies points in the map. + push-button + + + + + True + + + + + True + False + Lines + True + im_lines + + + Lines Tool + The tool which modifies line segments on the map. + push-button + + + + + True + 1 + + + + + True + False + Polygons + True + im_polys + + + Polygon Tool + The tool which modifies polygon shapes on the map. + push-button + + + + + True + 2 + + + + + Geometry Collection + All of the tools which modify map geometry. + column-header + + + + + True + + + + + + + Tycho Tool Palette + Tycho's tool palette window. + window + + + False + True + True dialog - Tycho - 2018-2019 Alison Sanderson + Tycho Map Editor + Copyright © 2018-2019 Alison Sanderson greetigs i am tico the of superior ai to durdumbal go shoot my soldiers because its funny or ill put you in space - Website - resource:///net/greyserv/maraiah/tycho/tycho2.png + Home Page + image-loading mit-x11 @@ -66,253 +183,180 @@ Author: Alison Sanderson + + + About Screen + The about screen for Tycho. + dialog + + - + False - 440 + Tycho 250 + True - + True False - vertical + ttb - + True False - - + _File + True + + True False - _File - True - - + + + gtk-new True False - - - gtk-new - True - False - True - True - - - - - gtk-open - True - False - True - True - - - - - gtk-save - True - False - True - True - - - - - gtk-save-as - True - False - True - True - - - - - True - False - - - - - gtk-quit - True - False - True - True - - + True + True - - - - - True - False - _Edit - True - - + + + gtk-open True False - - - gtk-cut - True - False - True - True - - - - - gtk-copy - True - False - True - True - - - - - gtk-paste - True - False - True - True - - - - - gtk-delete - True - False - True - True - - + True + True - - - - - True - False - _View - True - - - - - True - False - _Help - True - - + + + gtk-save True False - - - gtk-about - True - False - True - True - - + True + True + + + + + gtk-save-as + True + False + True + True + + + + + True + False + + + + + gtk-quit + True + False + True + True - - False - True - 0 - - + True False - - + _Edit + True + + True False - vertical - + + gtk-cut True False - - - True - False - Points - True - gtk-media-play - - + True + True - - False - - - - - False - True - 0 - - - - - True - False - - - False - True - 1 - - - - - True - True - vertical - - - + + gtk-copy + True + False + True + True + + + + + gtk-paste + True + False + True + True + + + + + gtk-delete + True + False + True + True + + + + + + + + + True + False + _View + True + + + + + True + False + + + + + True + False + True + _Info + True + + + True + False + + + gtk-about + True + False + True + True + - - True - True - 2 - - - True - True - 1 - - - - - - Tycho Map Editor - The main window of the Tycho map editor. - window diff --git a/data/tycho_res.xml b/data/tycho_res.xml index a0417ec..b0892a8 100644 --- a/data/tycho_res.xml +++ b/data/tycho_res.xml @@ -1,7 +1,11 @@ - data/tycho1.png - data/tycho2.png + data/tycho1.png + data/tycho2.png + data/polys.png + data/lines.png + data/points.png + data/tycho.xml diff --git a/src/tycho/main.rs b/src/tycho/main.rs index b43a770..9d00d3a 100644 --- a/src/tycho/main.rs +++ b/src/tycho/main.rs @@ -2,54 +2,101 @@ use gtk::prelude::*; use gio::prelude::*; use maraiah::durandal::err::*; -// TODO: add detached draw area mode, make everything detachable - -const RESOURCE: &'static [u8] = - include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/data/tycho.res")); - -const XML: &'static str = - include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/data/tycho.xml")); - -fn run_app(app: >k::Application) +fn run_app(app: >k::Application) -> ResultS<()> { - let b = gtk::Builder::new_from_string(XML); - - let win: gtk::Window = b.get_object("win_tycho").unwrap(); - let abt: gtk::AboutDialog = b.get_object("win_about").unwrap(); - let bt_abt: gtk::MenuItem = b.get_object("btn_about").unwrap(); - - abt.set_authors(&env!("CARGO_PKG_AUTHORS").split(';').collect::>()); - abt.set_version(env!("CARGO_PKG_VERSION")); - abt.set_website(env!("CARGO_PKG_HOMEPAGE")); - + fn load_img(path: &'static str) -> ResultS { - let abt = abt.clone(); - bt_abt.connect_activate(move |_| { - abt.run(); - abt.hide(); - }); + Ok(gdk_pixbuf::Pixbuf::new_from_resource(path)?) } - win.set_application(app); - win.show_all(); + fn get_obj(b: >k::Builder, name: &str) -> ResultS + where T: glib::object::IsA + { + match b.get_object(name) { + Some(w) => Ok(w), + None => Err(err_msg("no object")), + } + } + + let b = gtk::Builder::new_from_resource("/net/greyserv/maraiah/tycho/ui"); + + let win_menus: gtk::Window = get_obj(&b, "win_menus")?; + let win_tools: gtk::Window = get_obj(&b, "win_tools")?; + let win_about: gtk::AboutDialog = get_obj(&b, "win_about")?; + let btn_about: gtk::MenuItem = get_obj(&b, "btn_about")?; + //t draw_area: gtk::DrawingArea = get_obj(&b, "draw_area")?; + //t btn_point: gtk::ToolButton = get_obj(&b, "btn_point")?; + //t btn_lines: gtk::ToolButton = get_obj(&b, "btn_lines")?; + //t btn_polys: gtk::ToolButton = get_obj(&b, "btn_polys")?; + + let authors: Vec<_> = env!("CARGO_PKG_AUTHORS").split(';').collect(); + + win_about.set_authors(&authors); + win_about.set_version(env!("CARGO_PKG_VERSION")); + win_about.set_website(env!("CARGO_PKG_HOMEPAGE")); + win_about.set_logo(&load_img("/net/greyserv/maraiah/tycho/tycho2")?); + + btn_about.connect_activate(move |_| { + win_about.run(); + win_about.hide(); + }); + + win_tools.set_deletable(false); + win_tools.show_all(); + + win_menus.set_application(app); + win_menus.show_all(); + + Ok(()) } fn main() -> ResultS<()> { - let rsrc = glib::Bytes::from(&RESOURCE[..]); - let rsrc = gio::Resource::new_from_data(&rsrc)?; - gio::resources_register(&rsrc); + // get jacked, punk. opaque data structures are for nerds. + const RESOURCE_DATA: &'static [u8] = + include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/data/tycho.res")); + + let mut static_resource = + gio_sys::GStaticResource{data: RESOURCE_DATA.as_ptr(), + data_len: RESOURCE_DATA.len(), + resource: std::ptr::null_mut(), + next: std::ptr::null_mut(), + padding: std::ptr::null_mut()}; + + unsafe { + gio_sys::g_static_resource_init(&mut static_resource); + } let app = gtk::Application::new("net.greyserv.maraiah.tycho", gio::ApplicationFlags::empty())?; - app.connect_activate(run_app); + app.connect_activate(|app| { + match run_app(app) { + Ok(()) => (), + Err(e) => { + // print out an error if init failed somehow, otherwise the main + // loop will proceed as normal (this is just to prevent panics in + // weird circumstances such as breaking the builder while devving) + gtk::MessageDialog::new(None::<>k::Window>, + gtk::DialogFlags::empty(), + gtk::MessageType::Error, + gtk::ButtonsType::Ok, + &format!("{:?}", e)).run(); + } + } + }); - if app.run(&[]) == 0 { + let ret = if app.run(&[]) == 0 { Ok(()) } else { Err(err_msg("bad return")) + }; + + unsafe { + gio_sys::g_static_resource_fini(&mut static_resource); } + + ret } // EOF