<SlavedSlider>:

<SlavedTextInput>:

<TenraRoller>:
    dice_slider: dice_slider
    dice_text: dice_text
    skill_slider: skill_slider
    skill_text: skill_text

    roll_button: roll_button
    result_label: result_label
    previous_results: previous_results

    BoxLayout:
        orientation: 'vertical'
        spacing: 10
        size_hint: 1, 1

        BoxLayout:
            orientation: 'horizontal'
            spacing: 10
            center_x: root.center_x
            width: root.width
            Label:
                text: "Dice"
            SlavedSlider:
                id: dice_slider
                orientation: 'horizontal'
                min: 1
                max: root.max_dice
                step: 1
                value: int(root.max_dice / 2)
                on_value: root.slider_value_change(dice_slider)
            SlavedTextInput:
                id: dice_text
                multiline: False
                on_text: root.text_value_change(dice_text)
                text: str(int(root.max_dice / 2))

        BoxLayout:
            orientation: 'horizontal'
            spacing: 10
            width: root.width
            Label:
                text: "Skill"
            SlavedSlider:
                id: skill_slider
                orientation: 'horizontal'
                min: 1
                max: root.max_skill
                step: 1
                value: int(root.max_skill / 2)
                on_value: root.slider_value_change(skill_slider)
            SlavedTextInput:
                id: skill_text
                multiline: False
                on_text: root.text_value_change(skill_text)
                text: str(int(root.max_skill / 2))
        
        Button:
            id: roll_button
            text: "Roll"
            on_press: root.roll_dice()

        Label:
            id: result_label
            text: "No result"

        ListView:
            id: previous_results
            adapter: root.previous_results_la