use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::prelude::*; pub struct LicensesDialog { pub localized_commit_year: String, } impl DialogLayoutHolder for LicensesDialog { const ICON: &'static str = "License12px"; const TITLE: &'static str = "Licenses"; fn layout_buttons(&self) -> Layout { let widgets = vec![TextButton::new("OK").emphasized(true).on_update(|_| FrontendMessage::DisplayDialogDismiss.into()).widget_holder()]; Layout::WidgetLayout(WidgetLayout::new(vec![LayoutGroup::Row { widgets }])) } fn layout_column_2(&self) -> Layout { let icons_license_link = "https://raw.githubusercontent.com/GraphiteEditor/Graphite/master/frontend/assets/LICENSE.md"; let links = [ ("GraphiteLogo", "Graphite Logo", "https://graphite.rs/logo/"), ("IconsGrid", "Graphite Icons", icons_license_link), ("License", "Graphite License", "https://graphite.rs/license/"), ("License", "Other Licenses", "/third-party-licenses.txt"), ]; let widgets = links .into_iter() .map(|(icon, label, url)| { TextButton::new(label) .icon(Some(icon.into())) .flush(true) .on_update(|_| FrontendMessage::TriggerVisitLink { url: url.into() }.into()) .widget_holder() }) .collect(); Layout::WidgetLayout(WidgetLayout::new(vec![LayoutGroup::Column { widgets }])) } } impl LayoutHolder for LicensesDialog { fn layout(&self) -> Layout { let description = concat!( "The Graphite logo and brand identity are copyright © [YEAR]\nGraphite Labs, LLC. See \"Graphite Logo\" for usage policy.", "\n\n", "The Graphite editor's icons and design assets are copyright\n© [YEAR] Graphite Labs, LLC. See \"Graphite Icons\" for details.", "\n\n", "Graphite code is copyright © [YEAR] Graphite contributors\nand is made available under the Apache 2.0 license. See\n\"Graphite License\" for details.", "\n\n", "Graphite is distributed with third-party open source code\ndependencies. See \"Other Licenses\" for details.", ) .replace("[YEAR]", &self.localized_commit_year); Layout::WidgetLayout(WidgetLayout::new(vec![ LayoutGroup::Row { widgets: vec![TextLabel::new("Graphite is free, open source software").bold(true).widget_holder()], }, LayoutGroup::Row { widgets: vec![TextLabel::new(description).multiline(true).widget_holder()], }, ])) } }