98 lines
3.6 KiB
Rust
98 lines
3.6 KiB
Rust
/*
|
|
* advotracker - Hotline tackingtool for Advocats
|
|
*
|
|
* Copyright 2020 Ralf Zerres <ralf.zerres@networkx.de>
|
|
* SPDX-License-Identifier: (0BSD or MIT)
|
|
*/
|
|
|
|
use orbtk::prelude::*;
|
|
|
|
use crate::{
|
|
data::constants::*,
|
|
widgets::localization::localization_state::LocalizationState,
|
|
};
|
|
|
|
type List = Vec<String>;
|
|
|
|
// Macro that initializes the widget structures/variables for our view
|
|
widget!(LocalizationView<LocalizationState> {
|
|
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("auto")
|
|
)
|
|
.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::<Vec<String>>("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::<LocalizationState>(id).change_language();
|
|
})
|
|
.selected_index(id)
|
|
.build(ctx),
|
|
)
|
|
.build(ctx),
|
|
)
|
|
}
|
|
}
|