lighttroupe/luz-next

View on GitHub
gui/addons/user_object_setting_directors.rb

Summary

Maintainability
A
0 mins
Test Coverage
class UserObjectSettingDirectors
    def to_yaml_properties
        super + ['@directors']
    end

    #
    # GUI
    #
    def gui_build_editor
        @on_image = $engine.load_image('images/buttons/enabled-overlay-on.png')
        @off_image = $engine.load_image('images/buttons/enabled-overlay-off.png')

        box = GuiBox.new
        box << (@list = GuiGrid.new.set(:scale_x => 0.98, :scale_y => 0.98, :offset_y => -0.40, :item_scale_y => 5.0, :min_columns => 8))    #, :item_aspect_ratio => 4.0))
        box << create_user_object_setting_name_label

        @list.contents = all_directors.map { |director|
            renderer = director.new_renderer
            if get_directors.include?(director)
                renderer.foreground_image = @on_image
            else
                renderer.foreground_image = @off_image
            end
            renderer.on_clicked {
                toggle_selection(director)
            }
            renderer
        }
        box
    end

    def toggle_selection(director)
        renderer = renderer_for_director(director)
        if @directors.include?(director)
            @directors.delete(director)
            renderer.foreground_image = @off_image
        else
            @directors = all_directors & (@directors + [director])        # preserves order of all_directors
            renderer.foreground_image = @on_image
        end
    end

    def renderer_for_director(director)
        @list.each { |renderer|
            return renderer if renderer.object == director
        }
    end
end