103 lines
3.2 KiB
Rust
103 lines
3.2 KiB
Rust
use gtk::prelude::*;
|
|
use gio::prelude::*;
|
|
use maraiah::durandal::err::*;
|
|
|
|
fn run_app(app: >k::Application) -> ResultS<()>
|
|
{
|
|
fn load_img(path: &'static str) -> ResultS<gdk_pixbuf::Pixbuf>
|
|
{
|
|
Ok(gdk_pixbuf::Pixbuf::new_from_resource(path)?)
|
|
}
|
|
|
|
fn get_obj<T>(b: >k::Builder, name: &str) -> ResultS<T>
|
|
where T: glib::object::IsA<glib::object::Object>
|
|
{
|
|
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<()>
|
|
{
|
|
// 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(|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();
|
|
}
|
|
}
|
|
});
|
|
|
|
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
|