the-honkers-railway-launcher/src/ui/first_run/finish.rs
Observer KRypt0n_ ec30411ef8
feat: added app launch flags
Added `--run-game` and `--just-run-game` flags which can be used to run the game

1st will launch the game if launcher state is `Launch`.
Otherwise launcher window will appear

2nd will launch the game on `Launch` state,
as well as on `PredownloadAvailable` and `PatchAvailable(Patch::NotAvailable)`.

As well process stopping was changed by proper app exiting
by calling `relm4::main_application().quit()`
2023-03-01 23:47:34 +02:00

94 lines
2.4 KiB
Rust

use relm4::prelude::*;
use relm4::component::*;
use adw::prelude::*;
use crate::i18n::*;
use super::main::*;
pub struct FinishApp;
#[derive(Debug, Clone)]
pub enum FinishAppMsg {
Restart,
Exit
}
#[relm4::component(async, pub)]
impl SimpleAsyncComponent for FinishApp {
type Init = ();
type Input = FinishAppMsg;
type Output = FirstRunAppMsg;
view! {
adw::PreferencesPage {
set_hexpand: true,
add = &adw::PreferencesGroup {
set_valign: gtk::Align::Center,
set_vexpand: true,
gtk::Label {
set_label: &tr("finish-title"),
add_css_class: "title-1"
},
gtk::Label {
set_label: &tr("finish-message"),
set_justify: gtk::Justification::Center,
set_wrap: true,
set_margin_top: 32
}
},
add = &adw::PreferencesGroup {
set_valign: gtk::Align::Center,
set_vexpand: true,
gtk::Box {
set_orientation: gtk::Orientation::Horizontal,
set_halign: gtk::Align::Center,
set_spacing: 8,
gtk::Button {
set_label: &tr("restart"),
set_css_classes: &["suggested-action", "pill"],
connect_clicked => FinishAppMsg::Restart
},
gtk::Button {
set_label: &tr("exit"),
add_css_class: "pill",
connect_clicked => FinishAppMsg::Exit
}
}
}
}
}
async fn init(
_init: Self::Init,
root: Self::Root,
_sender: AsyncComponentSender<Self>,
) -> AsyncComponentParts<Self> {
let model = Self;
let widgets = view_output!();
AsyncComponentParts { model, widgets }
}
async fn update(&mut self, msg: Self::Input, _sender: AsyncComponentSender<Self>) {
match msg {
FinishAppMsg::Restart => {
std::process::Command::new(std::env::current_exe().unwrap()).spawn().unwrap();
relm4::main_application().quit();
}
FinishAppMsg::Exit => relm4::main_application().quit()
}
}
}