/* * advotracker - Hotline tackingtool for Advocats * * Copyright 2020 Ralf Zerres * SPDX-License-Identifier: (0BSD or MIT) */ use orbtk::prelude::*; use crate::{ data::constants::*, widgets::localization::localization_state::LocalizationState, }; type List = Vec; // Macro that initializes the widget structures/variables for our view widget!(LocalizationView { languages: List, selected_index: i32 } ); /// The template implementation of the localization view /// All GUI elements are styled using the "style" attribute referencing to a ron based css impl Template for LocalizationView { fn template(self, id: Entity, ctx: &mut BuildContext<'_>) -> Self { let languages = vec!["English".to_string(), "German".to_string()]; let count = languages.len(); self.languages(languages) .selected_index(1) .child( Grid::new() .id(ID_LOCALIZATION_FORM) .margin(4) .columns( Columns::create() .push(120) .push(12) .push(150) ) .rows(Rows::create() .push("auto") .push(4) .push("auto") .push(4) .push("auto") .push(12) .push("auto"), ) .child( TextBlock::new() .id(ID_LOCALIZATION_HEADER) .h_align("start") .attach(Grid::column(0)) .attach(Grid::row(0)) .attach(Grid::column_span(3)) .text("Localization dialog") .style("header") .build(ctx), ) .child( TextBlock::new() .id(ID_LOCALIZATION_LABEL_LANGUAGE_NAME) .attach(Grid::column(0)) .attach(Grid::row(2)) .v_align("center") .h_align("end") .text("Language ID") .build(ctx), ) .child( ComboBox::new() .id(ID_LOCALIZATION_LANGUAGES) .count(count) .attach(Grid::column(2)) .attach(Grid::row(2)) .items_builder(move |bc, index| { let text = bc.get_widget(id) .get::>("languages")[index] .clone(); TextBlock::new() .id(ID_LOCALIZATION_LANGUAGE_NAME) .v_align("center") .text(text) .build(bc) }) .on_changed("selected_index", move |states, _| { states.get_mut::(id).change_language(); }) .selected_index(id) .build(ctx), ) .build(ctx), ) } }