#! /usr/bin/env ruby
# -*- coding: UTF-8 -*-
#
module Tests
    #
    class TestBox < Efl::Elm::ElmWin
        def initialize name, title, fct
            super nil, name
            self.title = title
            self.autodel = true
            @bg = Elm::ElmBg.new self do |bg|
                bg.size_hint_weight_expand
                self.resize_object_add bg
                bg.show
            end
            self.send fct
            self.show
        end
        #
        def box_vert
            @bx = Elm::ElmBox.new self do |bx|
                bx.size_hint_weight_expand
                self.resize_object_add bx
                bx.show
            end
            icons = []
            (0..2).each do
                icons << Elm::ElmIcon.new(self) do |ico|
                    ico.file = "#{PACKAGE_DATA_DIR}/images/logo_small.png", nil
                    ico.scale = false, false
                    @bx.pack_end ico
                    ico.show
                end
            end
            icons[0].size_hint_align = 0.5, 0.5
            icons[1].size_hint_align = 0.0, 0.5
            icons[2].size_hint_align = Efl::Evas::EVAS_HINT_EXPAND, 0.5
        end
        #
        def box_vert2
            @bx = Elm::ElmBox.new self do |bx|
                bx.padding = 10, 10
                self.resize_object_add bx
                bx.size_hint_weight_expand
                bx.show
            end
            (1..5).each do |n|
                bt = Efl::Elm::ElmButton.new self
                bt.text = "Button #{n}"
                bt.size_hint_align_fill
                bt.size_hint_weight = 0.0, 0.0
                bt.smart_callback_add "clicked", method(:del_cb)
                @bx.pack_end bt
                bt.show
            end
        end
        #
        def del_cb data, evas_obj, event_info
            o = Efl::Elm::ElmObject.new(evas_obj)
            @bx.unpack o
            o.move 0, 0
            o.color = 128, 64, 0, 128
        end
        #
        def box_horiz
            @bx = Elm::ElmBox.new self do |bx|
                bx.horizontal = true
                self.resize_object_add bx
                bx.size_hint_weight_expand
                bx.show
            end
            icons = []
            (0..2).each do
                icons << Elm::ElmIcon.new(self) do |ico|
                    ico.file = "#{PACKAGE_DATA_DIR}/images/logo_small.png", nil
                    ico.scale = false, false
                    @bx.pack_end ico
                    ico.show
                end
            end
            icons[0].size_hint_align = 0.5, 0.5
            icons[1].size_hint_align = 0.5, 0.0
            icons[2].size_hint_align = 0.0, Efl::Evas::EVAS_HINT_EXPAND
        end
        #
        def box_transition
            @bx = Elm::ElmBox.new self do |bx|
                self.resize_object_add bx
                bx.size_hint_weight_expand
                bx.show
            end
            (1..3).each do |n|
                bt = Efl::Elm::ElmButton.new self
                bt.text = "Button #{n}"
                bt.size_hint_weight_expand
#                bt.size_hint_align_fill
                bt.smart_callback_add "clicked", method(:del_cb)
                @bx.pack_end bt
                bt.resize 100, 100
                bt.show
            end
            @idx = 0
            @transitions = [
                Efl::Native.find_variable('evas_object_box_layout_vertical'),
                Efl::Native.find_variable('evas_object_box_layout_horizontal'),
                Efl::Native.find_variable('evas_object_box_layout_stack'),
                Efl::Native.find_variable('evas_object_box_layout_homogeneous_vertical'),
                Efl::Native.find_variable('evas_object_box_layout_homogeneous_horizontal'),
                Efl::Native.find_variable('evas_object_box_layout_flow_vertical'),
                Efl::Native.find_variable('evas_object_box_layout_flow_horizontal'),
                Efl::Native.find_variable('evas_object_box_layout_stack'),
            ]
            self.resize 300, 300
            @bx.resize 300, 300
            @bx.layout =  @transitions[@idx], nil, nil
            self.show
            transition_change
        end
        #
        def transition_change data=nil
            last_layout = @transitions[@idx]
            @idx = (@idx+1) % @transitions.length
            next_layout = @transitions[@idx]
            transition = Efl::Native.elm_box_transition_new 1.0, last_layout, nil, nil, next_layout, nil, nil, method(:transition_change), nil
            transition_fct = Efl::Native.find_variable('elm_box_layout_transition')
            transition_free = Efl::Native.find_variable('elm_box_transition_free')
            @bx.layout = transition_fct, transition, transition_free
        end
        #
    end
    #
    def self.test_box_vert
        TestBox.new 'box-vert', 'Box Vert', :box_vert
    end
    def self.test_box_vert2
        TestBox.new 'box-vert', 'Box Vert', :box_vert2
    end
    def self.test_box_horiz
        TestBox.new 'box-horiz', 'Box Horiz', :box_horiz
    end
    def self.test_box_transition
        TestBox.new 'box-transition', 'Box Transition', :box_transition
    end
    #
end
#
# EOF