Code:
function sendData( prefix, recipient )
SendAddonMessage(prefix, "Starting data sending", "WHISPER", recipient)
local conflict = conflicts_active[prefix]
-- TODO split the description/title string if it is too long and send it in several messages
SendAddonMessage(prefix, "Title=".. conflict.conflict_data["description"], "WHISPER", recipient)
-- Send the options information
for option_number=1, (#conflict.conflict_data["options"]) do
-- TODO split the string option if it is too long and send in different messages
SendAddonMessage(prefix, "Option".. option_number .."="..(conflict.conflict_data["options"][option_number]), "WHISPER", recipient)
end
-- Send the stakeholders information (also their interests and the values of those)
for stakeholder_number=1, (#conflict.conflict_data["stakeholders_names"]) do
-- TODO split the string if it is too long and send in different messages
SendAddonMessage(prefix, "Stakeholder".. stakeholder_number .."="..(conflict.conflict_data["stakeholders_names"][stakeholder_number]), "WHISPER", recipient)
for interest_number, interestlist in pairs (conflict.conflict_data["stakeholders_interests_values"][stakeholder_number]) do
SendAddonMessage(prefix, "Interest" .. interest_number .. "of" .. stakeholder_number .. "=" .. conflict.conflict_data["stakeholders_interests_names"][stakeholder_number][interest_number], "WHISPER", recipient)
-- Send row of values for each interest
for index, index_value in pairs(interestlist) do
SendAddonMessage(prefix, "Index".. index .. "of" .. interest_number .. "of" .. stakeholder_number .. "=" .. index_value, "WHISPER", recipient)
end
end
end
SendAddonMessage(prefix, "Data sent", "WHISPER", recipient)
end
function On_Event (frame, event, ...)
[...]
local option_number, option_value = message:match("Option(%d)=(.+)")
if (option_number ~= nil and option_value ~= nil and sender == master) then
local optionnumber = tonumber(option_number)
conflicts_active_testing[prefix].conflict_data["options"][optionnumber] = option_value
else
local stakeholder_number, stakeholder_name = message:match("Stakeholder(%d)=(.+)")
if (stakeholder_number ~= nil and stakeholder_name ~= nil and sender == master) then
conflicts_active_testing[prefix].conflict_data["stakeholders_names"][stakeholder_number] = stakeholder_name
conflicts_active_testing[prefix].conflict_data["stakeholders_interests_values"][stakeholder_number] = {}
conflicts_active_testing[prefix].conflict_data["stakeholders_interests_names"][stakeholder_number] = {}
else
local interest_number, stakeholder_number, interest_name = message:match("Interest(%d)of(%d)=(.+)")
if (interest_number ~= nil and stakeholder_number ~= nil and interest_name ~= nil and sender == master) then
conflicts_active_testing[prefix].conflict_data["stakeholders_interests_names"][stakeholder_number][interest_number] = interest_name
conflicts_active_testing[prefix].conflict_data["stakeholders_interests_values"][stakeholder_number][interest_number] = {}
else
local index_number, interest_number, stakeholder_number, index_value = message:match("Index(%d)of(%d)of(%d)=(.+)")
if (index_number ~= nil and interest_number ~= nil and stakeholder_number ~= nil and index_value ~= nil and sender == master) then
conflicts_active_testing[prefix].conflict_data["stakeholders_interests_values"][stakeholder_number][interest_number][index_number] = index_value
end
end
end
[...]
end
function createEditBoxes( prefix, discussion )
local conflict = conflicts_active_testing[prefix]
-- Create options/solutions bar
local option_boxes = {}
local posnegcounter = 1
for option_number = 1, #(conflict.conflict_data["options"]) do
local option = CreateFrame ("EditBox", "Option" .. option_number .. "of" .. prefix, discussion.scrollframe.content, "InputBoxTemplate")
option:SetHeight(15)
option:SetWidth(175)
option_boxes[option_number] = option
if (option_number == 1) then
option:SetPoint("LEFT", discussion.scrollframe.content, "TOPLEFT", 175*2,-40)--discussion.header:GetHeight()+20) -- 175 to leave space horizontally for the stakeholders column
else
option:SetPoint("LEFT", option_boxes[option_number-1], "RIGHT", 15, 0)
end
option:SetText(conflict.conflict_data["options"][option_number])
option:SetTextInsets(5, 5, 2, 2)
option:SetMultiLine(true)
option:SetAutoFocus(false)
option:SetScript("OnEnterPressed", editBox_OnEnterPressed)
end -- End of creation of options boxes
conflict.conflict_ui["options"] = option_boxes
-- Create stakeholders column and interests column, plus rows of consequences
local stakeholder_boxes = {}
local interests_boxes = {}
local index_boxes = {}
local index = 1
print ("Creating editboxes. #stakeholders_names = " .. tostring(conflict.conflict_data["stakeholders_names"]))
for stakeholder_number=1, #(conflict.conflict_data["stakeholders_names"]) do
local stakeholder = CreateFrame ("EditBox", "Stakeholder" .. stakeholder_number.. "of" .. prefix, discussion.scrollframe.content, "InputBoxTemplate")
stakeholder:SetWidth(175)
-- Height of this box depends on how many interests that stakeholder has
stakeholder:SetHeight(55 * (#(conflict.conflict_data["stakeholders_interests_names"][stakeholder_number])))
stakeholder_boxes[stakeholder_number] = stakeholder
if (stakeholder_number == 1) then
stakeholder:SetPoint("TOPRIGHT", option_boxes[1], "LEFT", -175, -50) -- --175 to leave room for the interests column
else
stakeholder:SetPoint("TOP", stakeholder_boxes[stakeholder_number-1], "BOTTOM", 0, 0)
end
stakeholder:SetText(conflict.conflict_data["stakeholders_names"][stakeholder_number])
stakeholder:SetTextInsets(5, 5, 2, 2)
stakeholder:SetAutoFocus(false)
stakeholder:SetScript("OnEnterPressed", editBox_OnEnterPressed)
-- Create boxes with the names of the interests of that stakeholder (and their values)
for key, interestlist in pairs (conflict.conflict_data["stakeholders_interests_values"][stakeholder_number]) do
local interestbox = CreateFrame ("EditBox", "Interest"..stakeholder_number .. "n" .. key.. "of" .. prefix, discussion.scrollframe.content, "InputBoxTemplate")
interestbox:SetHeight(55)
interestbox:SetWidth(155)
interests_boxes[key] = interestbox
if (key == 1) then
interestbox:SetPoint("LEFT", stakeholder, "RIGHT", 0, 0)
else
interestbox:SetPoint("TOP", interests_boxes[key-1], "BOTTOM", 0, 0)
end
interestbox:SetText(conflict.conflict_data["stakeholders_interests_names"][stakeholder_number][key])
--interestbox:SetMaxLetters(255)
interestbox:SetTextInsets(5, 5, 2, 2)
interestbox:SetMultiLine(true)
interestbox:SetAutoFocus(false)
interestbox:SetScript("OnEnterPressed", editBox_OnEnterPressed)
-- Create row of values for each interest
for key2, value2 in pairs(interestlist) do
local indexbox = CreateFrame ("EditBox", "Index".. index.. "of" .. prefix, discussion.scrollframe.content, "InputBoxTemplate")
indexbox:SetHeight(25)
indexbox:SetWidth(175/2)
index_boxes[index] = indexbox
if (key2 == 1) then
indexbox:SetPoint("LEFT", interestbox, "RIGHT", 15, 0)
elseif (key2 %2 == 0) then
indexbox:SetPoint("LEFT", index_boxes[index-1], "RIGHT", 3, 0)
else
indexbox:SetPoint("LEFT", index_boxes[index-1], "RIGHT", 15, 0)
end
index = index + 1
indexbox:SetText(value2)
indexbox:SetMultiLine(true)
--indexbox:SetMaxLetters(255)
indexbox:SetTextInsets(5, 5, 2, 2)
indexbox:SetAutoFocus(false)
indexbox:SetScript("OnEnterPressed", editBox_OnEnterPressed)
end
end
end -- Create stakeholder boxes
conflict.conflict_ui["stakeholders"] = stakeholder_boxes
conflict.conflict_ui["interests"] = interests_boxes
conflict.conflict_ui["index"] = index_boxes
return conflict
end