draft welcome dialog with profile selection

This commit is contained in:
yggverse 2024-11-13 07:05:46 +02:00
parent 57594a3fc8
commit b0ee52c3f4
3 changed files with 86 additions and 0 deletions

View file

@ -0,0 +1,30 @@
mod widget;
use widget::Widget;
use crate::profile::Profile;
use gtk::prelude::IsA;
use std::rc::Rc;
pub struct Welcome {
profile: Rc<Profile>,
widget: Rc<Widget>,
}
impl Welcome {
// Construct
/// Create new `Self` for given Profile
pub fn new(profile: Rc<Profile>) -> Self {
Self {
profile,
widget: Rc::new(Widget::new()),
}
}
// Actions
/// Show dialog for parent [Window](https://docs.gtk.org/gtk4/class.Window.html)
pub fn present(&self, parent: Option<&impl IsA<gtk::Widget>>) {
self.widget.present(parent);
}
}

View file

@ -0,0 +1,47 @@
use adw::{
prelude::{AdwDialogExt, AlertDialogExtManual},
AlertDialog,
};
use gtk::prelude::IsA;
const HEADING: &str = "Welcome!";
const BODY: &str = "Select profile for browser data";
const RESPONSE_QUIT: (&str, &str) = ("quit", "Quit");
const RESPONSE_CREATE: (&str, &str) = ("create", "Create new profile");
pub struct Widget {
gobject: AlertDialog,
}
impl Widget {
// Constructors
/// Create new `Self`
pub fn new() -> Self {
// Init gobject
let gobject = AlertDialog::builder()
.heading(HEADING)
.body(BODY)
.default_response(RESPONSE_QUIT.1)
.build();
gobject.add_responses(&[RESPONSE_QUIT, RESPONSE_CREATE]);
// Return new `Self`
Self { gobject }
}
// Actions
/// Show dialog for parent [Window](https://docs.gtk.org/gtk4/class.Window.html)
pub fn present(&self, parent: Option<&impl IsA<gtk::Widget>>) {
self.gobject.present(parent);
}
/* @TODO not in use
/// Get reference to GObject
///
pub fn gobject(&self) -> &AlertDialog {
&self.gobject
} */
}