summaryrefslogtreecommitdiff
path: root/indra/newview/scripts/lua/test_LLAppearance.lua
blob: 5ddd9f15ffcd651b8a61d2e7c70d54b22ac8ffcb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
local Floater = require 'Floater'
local LLAppearance = require 'LLAppearance'
local startup = require 'startup'
local inspect = require 'inspect'

local SHOW_OUTFITS = true
local SELECTED_OUTFIT_ID = {}
local DATA_MAP = {}

local wearables_lbl = 'Show wearables'
local outfits_lbl = 'Show outfits'
local replace_cof_lbl = 'Replace COF'
local add_cof_lbl = 'Add to COF'
local outfits_title = 'Outfits'
local wear_lbl = 'Wear item'
local detach_lbl = 'Detach item'

local flt = Floater:new(
    "luafloater_outfits_list.xml",
    {outfits_list = {"double_click"}})

function get_selected_id()
    return flt:request({action="get_selected_id", ctrl_name='outfits_list'}).value
end

function populate_list()
    if SHOW_OUTFITS then
      DATA_MAP = LLAppearance.getOutfitsList()
    else
      DATA_MAP = LLAppearance.getOutfitItems(SELECTED_OUTFIT_ID)
    end

    local action_data = {}
    action_data.action = "add_list_element"
    action_data.ctrl_name = "outfits_list"
    local outfits = {}
    for uuid, info in pairs(DATA_MAP) do
      name = {}
      if SHOW_OUTFITS then
        name = info
      else
        name = info.name
      end
      table.insert(outfits, {value = uuid, columns={column = "outfit_name", value = name}})
    end
    action_data.value = outfits
    flt:post(action_data)
end

function set_label(btn_name, value)
    flt:post({action="set_label", ctrl_name=btn_name, value=value})
end

function set_enabled(btn_name, value)
    flt:post({action="set_enabled", ctrl_name=btn_name, value=value})
end

function update_labels()
    if SHOW_OUTFITS then
      set_label('select_btn', wearables_lbl)
      set_label('replace_btn', replace_cof_lbl)
      set_label('add_btn', add_cof_lbl)

      set_enabled('select_btn', false)
      flt:post({action="set_title", value=outfits_title})
    else
      set_label('select_btn', outfits_lbl)
      set_label('replace_btn', wear_lbl)
      set_label('add_btn', detach_lbl)

      set_enabled('select_btn', true)
      flt:post({action="set_title", value=DATA_MAP[SELECTED_OUTFIT_ID]})
    end

    set_enabled('replace_btn', false)
    set_enabled('add_btn', false)
end

function flt:post_build(event_data)
    populate_list()
end

function flt:commit_replace_btn(event_data)
    if SHOW_OUTFITS then
      LLAppearance.wearOutfit(get_selected_id(), 'replace')
    else
      LLAppearance.wearItems(get_selected_id(), false)
    end
end

function flt:commit_add_btn(event_data)
    if SHOW_OUTFITS then
      LLAppearance.wearOutfit(get_selected_id(), 'add')
    else
      LLAppearance.detachItems(get_selected_id())
    end
end

function flt:commit_select_btn(event_data)
    SHOW_OUTFITS = not SHOW_OUTFITS
    SELECTED_OUTFIT_ID = get_selected_id()
    update_labels()
    self:post({action="clear_list", ctrl_name='outfits_list'})
    populate_list()
end

function flt:commit_outfits_list(event_data)
      set_enabled('replace_btn', true)
      set_enabled('add_btn', true)
      set_enabled('select_btn', true)
end

startup.wait('STATE_STARTED')
flt:show()