aboutsummaryrefslogtreecommitdiff
path: root/src/app/mod.rs
diff options
context:
space:
mode:
authorJoris2022-01-09 13:12:45 +0100
committerJoris2022-01-09 13:12:45 +0100
commit99af88a840bef534540a4b273d24a8a17e7fc9b9 (patch)
tree20bda6c9eccd66d0c165e1f5d42fe76f80be58d2 /src/app/mod.rs
parentbd59a5128c05dcd550e91bbdd0cd9d5996a65586 (diff)
downloadcalendar-99af88a840bef534540a4b273d24a8a17e7fc9b9.tar.gz
calendar-99af88a840bef534540a4b273d24a8a17e7fc9b9.tar.bz2
calendar-99af88a840bef534540a4b273d24a8a17e7fc9b9.zip
Split app into modules
Diffstat (limited to 'src/app/mod.rs')
-rw-r--r--src/app/mod.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/app/mod.rs b/src/app/mod.rs
new file mode 100644
index 0000000..30b59af
--- /dev/null
+++ b/src/app/mod.rs
@@ -0,0 +1,38 @@
+mod app;
+mod calendar;
+mod form;
+mod update;
+mod utils;
+
+use gtk4 as gtk;
+
+use gtk::gdk::Display;
+use gtk::prelude::*;
+use rusqlite::Connection;
+use std::rc::Rc;
+
+use app::App;
+
+pub fn run(conn: Connection) {
+ let conn = Rc::new(conn);
+ let app = gtk::Application::new(Some("me.guyonvarch.calendar"), Default::default());
+ app.connect_startup(|_| load_style());
+ app.connect_activate(move |app| build_ui(conn.clone(), app));
+ app.run();
+}
+
+fn build_ui(conn: Rc<Connection>, app: &gtk::Application) {
+ let (tx, rx) = async_channel::unbounded();
+ let app = App::new(conn.clone(), app, tx.clone());
+ utils::spawn(update::event_handler(conn, rx, tx, app))
+}
+
+fn load_style() {
+ let provider = gtk::CssProvider::new();
+ provider.load_from_data(include_bytes!("style.css"));
+ gtk::StyleContext::add_provider_for_display(
+ &Display::default().expect("Error initializing gtk css provider."),
+ &provider,
+ gtk::STYLE_PROVIDER_PRIORITY_APPLICATION,
+ );
+}