vanilla-wow-addons – Rev 1
?pathlinks?
IMBA_BLACKBOARD_MAX_TEXTBOXES = 20
IMBA_Blackboard_Mode=2
IMBA_Blackboard_AddTextBox_Num=0;
IMBA_Blackboard_Colors={};
IMBA_Blackboard_Colors[1]={1,1,1,1};
IMBA_Blackboard_Colors[2]={0,0,0,1};
IMBA_Blackboard_Zone=IMBA_LOCATIONS_NAXX;
IMBA_MapsSorted=false;
function IMBA_Blackboard_MapImageSort(v1,v2)
return v1.name<v2.name;
end
function IMBA_Blackboard_SortMaps()
if not IMBA_MapsSorted then
sort(IMBA_MapImages,IMBA_Blackboard_MapImageSort);
sort(IMBA_MapZones);
IMBA_MapsSorted=true;
end
end
function IMBA_Blackboard_OnLoad()
this:SetBackdropBorderColor(1, 1, 1, 1);
this:SetBackdropColor(0.0,0.0,0.0,0.6);
IMBA_Blackboard_Title:SetText("Blackboard");
IMBA_AddAddon("Blackboard", "A board for interactive strategy designing ingame", IMBA_LOCATIONS_OTHER, nil, nil,nil,"IMBA_Blackboard");
IMBA_Blackboard_NextUpdate=0;
IMBA_Blackboard_LastTextbox=0;
IMBA_Blackboard_SelectedImage=0;
IMBA_Blackboard_Canvas_MouseDown=false;
IMBA_Blackboard_Zone=IMBA_MapImages[1].zone;
IMBA_Blackboard_SetMap(IMBA_MapImages[1].name);
this:RegisterEvent("CHAT_MSG_ADDON");
end
function IMBA_Blackboard_SendMap(id)
if IMBA_IsPlayerALeader() then
if GetNumRaidMembers()>0 then
IMBA_AddMsg("IMBA_BLACKBOARD","MAP "..IMBA_MapImages[id].name,"RAID");
else
IMBA_AddMsg("IMBA_BLACKBOARD","MAP "..IMBA_MapImages[id].name,"PARTY");
end
end
end
function IMBA_Blackboard_MapImageDropDown_OnLoad()
IMBA_Blackboard_SortMaps();
UIDropDownMenu_Initialize(this, IMBA_Blackboard_MapImageDropDown_Initialize);
UIDropDownMenu_SetSelectedID(IMBA_Blackboard_MapImageDropDown,1);
end
function IMBA_Blackboard_MapImageDropDown_OnClick()
UIDropDownMenu_SetSelectedValue(IMBA_Blackboard_MapImageDropDown, this.value);
--UIDropDownMenu_SetSelectedID(IMBA_Blackboard_MapImageDropDown,this.value);
IMBA_Blackboard_Canvas_BG:SetTexture(IMBA_MapImages[this.value].image);
IMBA_Blackboard_SendMap(this.value)
IMBA_Blackboard_MapImageDropDownText:SetText(IMBA_MapImages[this.value].name);
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,10);
if IMBA_Blackboard_MapImageDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,9);
if IMBA_Blackboard_MapImageDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,8);
if IMBA_Blackboard_MapImageDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,7.5);
end
end
end
end
function IMBA_Blackboard_MapImageDropDown_Initialize()
for k,v in IMBA_MapImages do
if v.zone==IMBA_Blackboard_Zone then
info = {};
info.text = v.name;
info.value = k;
info.func = IMBA_Blackboard_MapImageDropDown_OnClick;
UIDropDownMenu_AddButton(info);
end
end
end
function IMBA_Blackboard_MapZoneDropDown_OnLoad()
IMBA_Blackboard_SortMaps();
UIDropDownMenu_Initialize(this, IMBA_Blackboard_MapZoneDropDown_Initialize);
UIDropDownMenu_SetSelectedID(IMBA_Blackboard_MapZoneDropDown,1);
--UIDropDownMenu_Initialize(IMBA_Blackboard_MapImageDropDown, IMBA_Blackboard_MapImageDropDown_Initialize);
--UIDropDownMenu_SetSelectedID(IMBA_Blackboard_MapImageDropDown,1);
IMBA_Blackboard_Zone=IMBA_MapZones[1];
for k,v in IMBA_MapImages do
if v.zone==IMBA_Blackboard_Zone then
--IMBA_Blackboard_Canvas_BG:SetTexture(v.image);
IMBA_Blackboard_SendMap(k)
return;
end
end
end
function IMBA_Blackboard_MapZoneDropDown_OnClick()
UIDropDownMenu_SetSelectedValue(IMBA_Blackboard_MapZoneDropDown, this.value);
UIDropDownMenu_SetSelectedID(IMBA_Blackboard_MapZoneDropDown,this.value);
IMBA_Blackboard_Zone=IMBA_MapZones[this.value]
IMBA_Blackboard_MapZoneDropDownText:SetFont(STANDARD_TEXT_FONT,10);
if IMBA_Blackboard_MapZoneDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapZoneDropDownText:SetFont(STANDARD_TEXT_FONT,9);
if IMBA_Blackboard_MapZoneDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapZoneDropDownText:SetFont(STANDARD_TEXT_FONT,8);
if IMBA_Blackboard_MapZoneDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapZoneDropDownText:SetFont(STANDARD_TEXT_FONT,7.5);
end
end
end
UIDropDownMenu_Initialize(IMBA_Blackboard_MapImageDropDown, IMBA_Blackboard_MapImageDropDown_Initialize);
UIDropDownMenu_SetSelectedID(IMBA_Blackboard_MapImageDropDown,1);
for k,v in IMBA_MapImages do
if v.zone==IMBA_Blackboard_Zone then
IMBA_Blackboard_Canvas_BG:SetTexture(v.image);
IMBA_Blackboard_SendMap(k)
IMBA_Blackboard_MapImageDropDownText:SetText(v.name);
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,10);
if IMBA_Blackboard_MapImageDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,9);
if IMBA_Blackboard_MapImageDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,8);
if IMBA_Blackboard_MapImageDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,7.5);
end
end
end
return;
end
end
end
function IMBA_Blackboard_MapZoneDropDown_Initialize()
for k,v in IMBA_MapZones do
info = {};
info.text = v;
info.value = k;
info.func = IMBA_Blackboard_MapZoneDropDown_OnClick;
UIDropDownMenu_AddButton(info);
end
end
--Button Functions
function IMBA_Blackboard_NewImage()
if IMBA_IsPlayerALeader() then
if GetNumRaidMembers()>0 then
IMBA_AddMsg("IMBA_LINES_IMBA_Blackboard","ERASEALL","RAID");
else
IMBA_AddMsg("IMBA_LINES_IMBA_Blackboard","ERASEALL","PARTY");
end
end
for i=1, IMBA_BLACKBOARD_MAX_TEXTBOXES do
getglobal("IMBA_Blackboard_Canvas_Text"..i):Hide();
end
for i=1, 8 do
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i):Hide();
end
IMBA_ClearLines(IMBA_Blackboard_Canvas);
end
function IMBA_Blackboard_ModeButton(i)
if i==1 then
return IMBA_Blackboard_ButtonCursor;
elseif i==2 then
return IMBA_Blackboard_ButtonPencil;
elseif i==3 then
return IMBA_Blackboard_ButtonType;
elseif i==4 then
return IMBA_Blackboard_ButtonEraser;
elseif i<=12 then
return getglobal("IMBA_Blackboard_ButtonRaidIcon"..i-4);
end
return nil
end
function IMBA_Blackboard_UnselectAll()
for i=1,12 do
getglobal(IMBA_Blackboard_ModeButton(i):GetName().."_Selected"):Hide()
end
end
function IMBA_BlackboardColor1Changed()
local color=IMBA_Blackboard_Color1.color;
IMBA_Blackboard_Colors[1]={color.r,color.g,color.b,color.a};
for i=1, IMBA_BLACKBOARD_MAX_TEXTBOXES,1 do
if getglobal("IMBA_Blackboard_Canvas_Text"..i).editbox.hasFocus then
getglobal("IMBA_Blackboard_Canvas_Text"..i):SetTextColor(IMBA_Blackboard_Colors[1])
end
end
end
function IMBA_BlackboardColor2Changed()
local color=IMBA_Blackboard_Color2.color;
IMBA_Blackboard_Colors[2]={color.r,color.g,color.b,color.a};
for i=1, IMBA_BLACKBOARD_MAX_TEXTBOXES,1 do
if getglobal("IMBA_Blackboard_Canvas_Text"..i).editbox.hasFocus then
getglobal("IMBA_Blackboard_Canvas_Text"..i):SetBGColor(IMBA_Blackboard_Colors[2])
end
end
end
function IMBA_Blackboard_SwapColors()
local temp=IMBA_Blackboard_Colors[1];
IMBA_Blackboard_Colors[1]=IMBA_Blackboard_Colors[2];
IMBA_Blackboard_Color1.color={r=IMBA_Blackboard_Colors[2][1];g=IMBA_Blackboard_Colors[2][2];b=IMBA_Blackboard_Colors[2][3];a=IMBA_Blackboard_Colors[2][4]};
IMBA_Blackboard_Color1_BG:SetVertexColor(IMBA_Blackboard_Colors[2][1],IMBA_Blackboard_Colors[2][2],IMBA_Blackboard_Colors[2][3]);
IMBA_Blackboard_Colors[2]=temp;
IMBA_Blackboard_Color2.color={r=IMBA_Blackboard_Colors[2][1];g=IMBA_Blackboard_Colors[2][2];b=IMBA_Blackboard_Colors[2][3];a=IMBA_Blackboard_Colors[2][4]};
IMBA_Blackboard_Color2_BG:SetVertexColor(IMBA_Blackboard_Colors[2][1],IMBA_Blackboard_Colors[2][2],IMBA_Blackboard_Colors[2][3]);
for i=1, IMBA_BLACKBOARD_MAX_TEXTBOXES,1 do
if getglobal("IMBA_Blackboard_Canvas_Text"..i).editbox.hasFocus then
getglobal("IMBA_Blackboard_Canvas_Text"..i):SetTextColor(IMBA_Blackboard_Colors[1])
getglobal("IMBA_Blackboard_Canvas_Text"..i):SetBGColor(IMBA_Blackboard_Colors[2])
end
end
end
--Canvas Functions
function IMBA_Blackboard_SetMap(map)
local id=1;
for k,v in IMBA_MapImages do
if v.name==map then
IMBA_Blackboard_SetZone(v.zone);
UIDropDownMenu_SetSelectedID(IMBA_Blackboard_MapImageDropDown,IMBA_Blackboard_MapID(v.name,v.zone));
IMBA_Blackboard_Canvas_BG:SetTexture(v.image);
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,10);
if IMBA_Blackboard_MapImageDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,9);
if IMBA_Blackboard_MapImageDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,8);
if IMBA_Blackboard_MapImageDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,7.5);
end
end
end
return;
end
end
end
function IMBA_Blackboard_MapID(map,zone)
local id=1;
for k,v in IMBA_MapImages do
if v.name==map then
return id;
end
if v.zone==zone then
id=id+1;
end
end
return 1;
end
function IMBA_Blackboard_SetZone(zone)
for k,v in IMBA_MapZones do
if v==zone then
UIDropDownMenu_SetSelectedID(IMBA_Blackboard_MapImageDropDown,k);
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,10);
if IMBA_Blackboard_MapImageDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,9);
if IMBA_Blackboard_MapImageDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,8);
if IMBA_Blackboard_MapImageDropDownText:GetStringWidth()>100 then
IMBA_Blackboard_MapImageDropDownText:SetFont(STANDARD_TEXT_FONT,7.5);
end
end
end
return;
end
end
end
function IMBA_Blackboard_OnCanvas(x,y)
if (x>=(IMBA_Blackboard_Canvas:GetWidth())) or (x<0) or (y>=(IMBA_Blackboard_Canvas:GetHeight())) or (y<0) then
return false
end
return true;
end
function IMBA_Blackboard_Canvas_AddTextBox()
if IMBA_Blackboard_AddTextBox_Num>=IMBA_BLACKBOARD_MAX_TEXTBOXES then
return
end
local Box
for i=1,IMBA_BLACKBOARD_MAX_TEXTBOXES do
if not getglobal("IMBA_Blackboard_Canvas_Text"..i):IsShown() then
Box=getglobal("IMBA_Blackboard_Canvas_Text"..i)
end
end
IMBA_Blackboard_AddTextBox_Num=IMBA_Blackboard_AddTextBox_Num+1;
local X,Y = GetCursorPosition();
X=X/IMBA_Blackboard_Canvas:GetEffectiveScale()-IMBA_Blackboard_Canvas:GetLeft();
Y=Y/IMBA_Blackboard_Canvas:GetEffectiveScale()-IMBA_Blackboard_Canvas:GetBottom();
Box:ClearAllPoints();
Box:SetPoint("BOTTOMLEFT",this,"BOTTOMLEFT",X,Y);
Box:SetTextColor(IMBA_Blackboard_Colors[1]);
Box:SetBGColor(IMBA_Blackboard_Colors[2]);
Box.text:SetText("");
Box.editbox:SetText("");
Box:Show();
getglobal(Box:GetName().."_Editbox"):SetFocus();
IMBA_Blackboard_SendText(Box:GetID());
end
function IMBA_Blackboard_Canvas_OnUpdate()
if IMBA_Blackboard_NextUpdate>GetTime() and not MouseIsOver(IMBA_Blackboard_Canvas) then
return
end
IMBA_Blackboard_NextUpdate=GetTime()+0.05;
if not IMBA_Blackboard_Canvas_MouseDown then
IMBA_Blackboard_LastX=nil;
IMBA_Blackboard_LastY=nil
if IMBA_StrokeStarted(IMBA_Blackboard_Canvas) then
IMBA_EndStroke(IMBA_Blackboard_Canvas);
end
return;
end
local X,Y = GetCursorPosition();
X=X/IMBA_Blackboard_Canvas:GetEffectiveScale()-IMBA_Blackboard_Canvas:GetLeft();
Y=Y/IMBA_Blackboard_Canvas:GetEffectiveScale()-IMBA_Blackboard_Canvas:GetBottom();
if not IMBA_Blackboard_OnCanvas(X,Y) then
IMBA_Blackboard_LastX=nil;
IMBA_Blackboard_LastY=nil
return;
end
if IMBA_Blackboard_Mode==2 then
if IMBA_Blackboard_LastX and IMBA_Blackboard_LastY then
local Dist=math.abs(X-IMBA_Blackboard_LastX)+math.abs(X-IMBA_Blackboard_LastY)
if Dist<=7 then
return;
end
IMBA_DrawLine(IMBA_Blackboard_Canvas,IMBA_Blackboard_LastX,IMBA_Blackboard_LastY,X,Y,32,IMBA_Blackboard_Colors[1])
if not IMBA_StrokeStarted(IMBA_Blackboard_Canvas) then
IMBA_StartStroke(IMBA_Blackboard_Canvas,IMBA_Blackboard_Colors[1],32,IMBA_Blackboard_LastX,IMBA_Blackboard_LastY,X,Y);
else
IMBA_AddToStroke(IMBA_Blackboard_Canvas,X,Y)
end
end
IMBA_Blackboard_LastX=X;
IMBA_Blackboard_LastY=Y;
elseif IMBA_Blackboard_Mode==3 and (IMBA_Blackboard_LastTextbox+0.2)<GetTime()then
IMBA_Blackboard_Canvas_AddTextBox()
IMBA_Blackboard_LastTextbox=GetTime();
IMBA_Blackboard_Canvas_MouseDown=false;
elseif IMBA_Blackboard_Mode==4 then
if IMBA_StrokeStarted(IMBA_Blackboard_Canvas) then
IMBA_EndStroke(IMBA_Blackboard_Canvas)
end
IMBA_EraseLines(IMBA_Blackboard_Canvas,X,Y,12);
IMBA_AddMsg("IMBA_LINES_IMBA_Blackboard_Canvas",string.format("ERASE %.1f %.1f",X,Y),"RAID");
IMBA_Blackboard_LastX=nil;
IMBA_Blackboard_LastY=nil
elseif (IMBA_Blackboard_Mode>=5) and(IMBA_Blackboard_Mode<=12) then
local X,Y = GetCursorPosition();
X=X/IMBA_Blackboard_Canvas:GetEffectiveScale()-IMBA_Blackboard_Canvas:GetLeft();
Y=Y/IMBA_Blackboard_Canvas:GetEffectiveScale()-IMBA_Blackboard_Canvas:GetBottom();
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..IMBA_Blackboard_Mode-4):ClearAllPoints();
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..IMBA_Blackboard_Mode-4):SetPoint("CENTER",this,"BOTTOMLEFT",X,Y);
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..IMBA_Blackboard_Mode-4):Update();
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..IMBA_Blackboard_Mode-4):Show();
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..IMBA_Blackboard_Mode-4):StartMoving();
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..IMBA_Blackboard_Mode-4).isMoving = true;
IMBA_Blackboard_SendRaidIcon(IMBA_Blackboard_Mode-4);
IMBA_Blackboard_Canvas_MouseDown=false;
IMBA_Blackboard_LastX=nil;
IMBA_Blackboard_LastY=nil
else
IMBA_Blackboard_LastX=nil;
IMBA_Blackboard_LastY=nil
end
end
--Text Templates
function IMBA_Blackboard_TextTemplate_OnLoad(b)
this.text=getglobal(this:GetName().."_Text");
this.editbox=getglobal(this:GetName().."_Editbox");
this.bg=getglobal(this:GetName().."_BG");
this.bg:SetVertexColor(0.5,0,0,0.5);
this.text:Hide();
function this:LockBox()
b.text:Show();
b.editbox:Hide();
b.isLocked=false;
end
function this:UnlockBox()
b.text:Hide();
b.editbox:Show();
b.isLocked=true;
end
function this:ShowBackground()
b.bg:Show();
end
function this:HideBackground()
b.bg:Hide();
end
function this:Update()
local left=b:GetLeft()-b:GetParent():GetLeft();
local mid=(b:GetBottom()+b:GetTop()-b:GetParent():GetBottom()-b:GetParent():GetTop())/2;
if (left+b:GetWidth())>b:GetParent():GetWidth() then
left=b:GetParent():GetWidth()-(b:GetWidth());
end
if left<0 then
left=0;
end
if (mid+b:GetHeight()/2)>b:GetParent():GetHeight()/2 then
mid=b:GetParent():GetHeight()/2-(b:GetHeight()/2);
end
if (mid-b:GetHeight()/2)<-b:GetParent():GetHeight()/2 then
mid=(b:GetHeight()/2)-b:GetParent():GetHeight()/2;
end
b:ClearAllPoints();
b:SetPoint("LEFT",b:GetParent(),"LEFT",left,mid);
end
function this:SetTextColor(color)
b.text:SetTextColor(color[1],color[2],color[3],color[4]);
b.editbox:SetTextColor(color[1],color[2],color[3],color[4]);
b.TextColor=color;
end
function this:SetBGColor(color)
b.BGColor=color;
b.bg:SetVertexColor(color[1],color[2],color[3],color[4]);
end
this.isLocked=true;
end
function IMBA_Blackboard_SaveText()
local TextData={};
for i=1,IMBA_BLACKBOARD_MAX_TEXTBOXES do
local TextBox = getglobal("IMBA_Blackboard_Canvas_Text"..i);
if TextBox:IsShown() then
TextData[i]={}
TextData[i].text=TextBox.editbox:GetText()
TextData[i].x=TextBox:GetLeft()-TextBox:GetParent():GetLeft();
TextData[i].y=TextBox:GetBottom()-TextBox:GetParent():GetBottom();
TextData[i].TextColor=TextBox.TextColor
TextData[i].BGColor=TextBox.BGColor
end
end
return TextData;
end
function IMBA_Blackboard_LoadText(data)
IMBA_SavedVariables.TestBlackboard2=data
for i=1,IMBA_BLACKBOARD_MAX_TEXTBOXES do
local TextBox = getglobal("IMBA_Blackboard_Canvas_Text"..i);
if data[i] then
TextBox.editbox:SetText(data[i].text);
TextBox.editbox:SetFocus();
TextBox.text:SetText(data[i].text);
TextBox:SetTextColor(data[i].TextColor)
TextBox:SetBGColor(data[i].BGColor)
TextBox:ClearAllPoints();
TextBox:SetPoint("BOTTOMLEFT",TextBox:GetParent(),"BOTTOMLEFT",data[i].x,data[i].y);
TextBox:Show()
--TextData[i].x=TextBox:GetLeft()-TextBox:GetParent():GetLeft();
--TextData[i].y=TextBox:GetBottom()-TextBox:GetParent():GetBottom();
IMBA_Blackboard_SendText(i);
else
IMBA_Blackboard_SendClearText(i);
TextBox:Hide();
end
end
end
function IMBA_Blackboard_SetText(id,text,x,y,textcolor,bgcolor)
local TextBox = getglobal("IMBA_Blackboard_Canvas_Text"..id);
TextBox.editbox:SetText(text);
TextBox.text:SetText(text);
TextBox.editbox:SetFocus();
TextBox:SetTextColor(textcolor);
TextBox:SetBGColor(bgcolor);
TextBox:ClearAllPoints();
TextBox:SetPoint("BOTTOMLEFT",TextBox:GetParent(),"BOTTOMLEFT",x,y);
TextBox:Show();
end
function IMBA_Blackboard_HideText(id)
local TextBox = getglobal("IMBA_Blackboard_Canvas_Text"..id);
TextBox:Hide();
end
function IMBA_Blackboard_FormatColor(color)
return string.format("%.2f %.2f %.2f %.2f",color[1],color[2],color[3],color[4]);
end
function IMBA_Blackboard_FormatPos(x,y)
return string.format("%.2f %.2f",x,y);
end
function IMBA_Blackboard_SendText(id)
if IMBA_IsPlayerALeader() then
local Text=getglobal("IMBA_Blackboard_Canvas_Text"..id);
local x,y,t;
x=Text:GetLeft()-Text:GetParent():GetLeft();
y=Text:GetBottom()-Text:GetParent():GetBottom();
t=Text.text:GetText();
if not t then
t=""
end
--Need to send colors as well
--TextBox.TextColor
--TextBox.BGColor
if GetNumRaidMembers()>0 then
IMBA_AddMsg("IMBA_BLACKBOARD","SETTEXT "..id.." "..IMBA_Blackboard_FormatPos(x,y).." "..IMBA_Blackboard_FormatColor(Text.TextColor).." "..IMBA_Blackboard_FormatColor(Text.BGColor).." "..t,"RAID");
else
IMBA_AddMsg("IMBA_BLACKBOARD","SETTEXT "..id.." "..IMBA_Blackboard_FormatPos(x,y).." "..IMBA_Blackboard_FormatColor(Text.TextColor).." "..IMBA_Blackboard_FormatColor(Text.BGColor).." "..t,"PARTY");
end
end
end
function IMBA_Blackboard_SendClearText(id)
if IMBA_IsPlayerALeader() then
if GetNumRaidMembers()>0 then
IMBA_AddMsg("IMBA_BLACKBOARD","CLEARTEXT "..id,"RAID");
else
IMBA_AddMsg("IMBA_BLACKBOARD","CLEARTEXT "..id,"PARTY");
end
end
end
--Raid Icon Templates
function IMBA_Blackboard_RaidIconTemplate_OnLoad(b)
this.icon=getglobal(this:GetName().."_Icon");
if this:GetID() then
local icon = UnitPopupButtons["RAID_TARGET_"..this:GetID()];
this.icon:SetTexture(icon.icon);
this.icon:SetTexCoord(icon.tCoordLeft,icon.tCoordRight,icon.tCoordTop,icon.tCoordBottom);
end
function this:Update()
local left=b:GetLeft()-b:GetParent():GetLeft();
local mid=(b:GetBottom()+b:GetTop()-b:GetParent():GetBottom()-b:GetParent():GetTop())/2;
if (left+b:GetWidth())>b:GetParent():GetWidth() then
left=b:GetParent():GetWidth()-(b:GetWidth());
end
if left<0 then
left=0;
end
if (mid+b:GetHeight()/2)>b:GetParent():GetHeight()/2 then
mid=b:GetParent():GetHeight()/2-(b:GetHeight()/2);
end
if (mid-b:GetHeight()/2)<-b:GetParent():GetHeight()/2 then
mid=(b:GetHeight()/2)-b:GetParent():GetHeight()/2;
end
b:ClearAllPoints();
b:SetPoint("LEFT",b:GetParent(),"LEFT",left,mid);
end
this.isLocked=false;
end
function IMBA_Blackboard_SaveRaidIcons()
local RaidIconData={}
local RaidIcon
for i=1,8 do
RaidIcon=getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i);
if RaidIcon:IsShown() then
RaidIconData[i]={}
RaidIconData[i].x=RaidIcon:GetLeft()-RaidIcon:GetParent():GetLeft();
RaidIconData[i].y=RaidIcon:GetBottom()-RaidIcon:GetParent():GetBottom();
end
end
return RaidIconData
end
function IMBA_Blackboard_SendRaidIcon(id)
if IMBA_IsPlayerALeader() or true then
local RaidIcon=getglobal("IMBA_Blackboard_Canvas_RaidIcon"..id);
local x,y;
x=RaidIcon:GetLeft()-RaidIcon:GetParent():GetLeft();
y=RaidIcon:GetBottom()-RaidIcon:GetParent():GetBottom();
if GetNumRaidMembers()>0 then
IMBA_AddMsg("IMBA_BLACKBOARD","SETRAIDICON "..id.." "..IMBA_Blackboard_FormatPos(x,y),"RAID");
else
IMBA_AddMsg("IMBA_BLACKBOARD","SETRAIDICON "..id.." "..IMBA_Blackboard_FormatPos(x,y),"PARTY");
end
end
end
function IMBA_Blackboard_LoadRaidIcons(data)
local RaidIcon
for i=1,8 do
RaidIcon=getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i);
if data[i] then
RaidIcon:ClearAllPoints()
RaidIcon:SetPoint("BOTTOMLEFT",RaidIcon:GetParent(),"BOTTOMLEFT",data[i].x,data[i].y)
RaidIcon:Show()
IMBA_Blackboard_SendRaidIcon(i);
else
IMBA_Blackboard_SendClearIcon(i);
RaidIcon:Hide()
end
end
end
function IMBA_Blackboard_SetRaidIcon(num,x,y)
local RaidIcon=getglobal("IMBA_Blackboard_Canvas_RaidIcon"..num);
RaidIcon:ClearAllPoints()
RaidIcon:SetPoint("BOTTOMLEFT",RaidIcon:GetParent(),"BOTTOMLEFT",x,y)
RaidIcon:Show()
end
function IMBA_Blackboard_ClearRaidIcon(i)
local RaidIcon=getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i);
RaidIcon:Hide();
end
function IMBA_Blackboard_SendClearIcon(id)
if IMBA_IsPlayerALeader() then
if GetNumRaidMembers()>0 then
IMBA_AddMsg("IMBA_BLACKBOARD","CLEARRAIDICON "..id,"RAID");
else
IMBA_AddMsg("IMBA_BLACKBOARD","CLEARRAIDICON "..id,"PARTY");
end
end
end
--Various Modes
function IMBA_Blackboard_CursorMode()
for i=1, IMBA_BLACKBOARD_MAX_TEXTBOXES do
getglobal("IMBA_Blackboard_Canvas_Text"..i):LockBox();
getglobal("IMBA_Blackboard_Canvas_Text"..i):EnableMouse(true);
end
for i=1, 8 do
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i):EnableMouse(true);
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i).isLocked=false;
end
end
function IMBA_Blackboard_PencilMode()
for i=1, IMBA_BLACKBOARD_MAX_TEXTBOXES do
getglobal("IMBA_Blackboard_Canvas_Text"..i):LockBox();
getglobal("IMBA_Blackboard_Canvas_Text"..i):EnableMouse(false);
getglobal("IMBA_Blackboard_Canvas_Text"..i).isLocked=true;
end
for i=1, 8 do
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i):EnableMouse(false);
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i).isLocked=true;
end
end
function IMBA_Blackboard_EraserMode()
for i=1, IMBA_BLACKBOARD_MAX_TEXTBOXES do
getglobal("IMBA_Blackboard_Canvas_Text"..i):LockBox();
getglobal("IMBA_Blackboard_Canvas_Text"..i):EnableMouse(true);
getglobal("IMBA_Blackboard_Canvas_Text"..i).isLocked=true;
end
for i=1, 8 do
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i):EnableMouse(true);
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i).isLocked=true;
end
end
function IMBA_Blackboard_TextMode()
for i=1, IMBA_BLACKBOARD_MAX_TEXTBOXES do
getglobal("IMBA_Blackboard_Canvas_Text"..i):EnableMouse(false);
getglobal("IMBA_Blackboard_Canvas_Text"..i):UnlockBox();
end
for i=1, 8 do
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i):EnableMouse(false);
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i).isLocked=true;
end
end
function IMBA_Blackboard_RaidIconMode()
for i=1, IMBA_BLACKBOARD_MAX_TEXTBOXES do
getglobal("IMBA_Blackboard_Canvas_Text"..i):LockBox();
getglobal("IMBA_Blackboard_Canvas_Text"..i):EnableMouse(false);
getglobal("IMBA_Blackboard_Canvas_Text"..i).isLocked=true;
end
for i=1, 8 do
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i).isLocked=true;
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i):EnableMouse(false);
if (i+4)==IMBA_Blackboard_Mode then
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i):EnableMouse(true);
getglobal("IMBA_Blackboard_Canvas_RaidIcon"..i).isLocked=false;
end
end
end
--Save/Loading
function IMBA_Blackboard_SaveData()
local Data={}
Data.Map=IMBA_Blackboard_MapImageDropDownText:GetText();
Data.Text=IMBA_Blackboard_SaveText()
Data.RaidIcons=IMBA_Blackboard_SaveRaidIcons()
Data.Lines=IMBA_CreateSaveImage(IMBA_Blackboard_Canvas);
return Data;
end
function IMBA_Blackboard_LoadData(Data)
for k,v in IMBA_MapImages do
if v.name==Data.Map then
IMBA_Blackboard_SendMap(k);
end
end
if IMBA_IsPlayerALeader() then
if GetNumRaidMembers()>0 then
IMBA_AddMsg("IMBA_LINES_IMBA_Blackboard","ERASEALL","RAID");
else
IMBA_AddMsg("IMBA_LINES_IMBA_Blackboard","ERASEALL","PARTY");
end
end
IMBA_Blackboard_SetMap(Data.Map)
IMBA_Blackboard_LoadRaidIcons(Data.RaidIcons)
if Data.Lines then
IMBA_DrawSavedImage(IMBA_Blackboard_Canvas,Data.Lines)
IMBA_SendSavedImage(IMBA_Blackboard_Canvas,Data.Lines)
end
IMBA_Blackboard_LoadText(Data.Text)
end
function IMBA_Blackboard_SortImages(v1,v2)
return v1.name<v2.name
end
function IMBA_Blackboard_SaveImage()
local Image,Name;
if not IMBA_SavedVariables.Mods["Blackboard"].Images then
IMBA_SavedVariables.Mods["Blackboard"].Images={};
end
Name=IMBA_BlackboardSave_ImageName:GetText()
if Name=="" then
Name="Unknown "..getn(IMBA_SavedVariables.Mods["Blackboard"].Images)+1;
end
Image=IMBA_Blackboard_SaveData()
tinsert(IMBA_SavedVariables.Mods["Blackboard"].Images,{name=Name;data=Image});
table.sort(IMBA_SavedVariables.Mods["Blackboard"].Images,IMBA_Blackboard_SortImages)
end
function IMBA_Blackboard_LoadImageClicked(num)
for i=1,8 do
if i==num then
getglobal("IMBA_BlackboardLoad_Image"..i.."_Selected"):Show()
else
getglobal("IMBA_BlackboardLoad_Image"..i.."_Selected"):Hide()
end
end
IMBA_Blackboard_SelectedImage=num+FauxScrollFrame_GetOffset(IMBA_BlackboardLoad_ScrollFrame);
end
function IMBA_Blackboard_DeleteImage()
local numEntries;
if IMBA_SavedVariables.Mods["Blackboard"].Images then
numEntries=getn(IMBA_SavedVariables.Mods["Blackboard"].Images)
else
numEntries=0;
end
if IMBA_Blackboard_SelectedImage~=0 and IMBA_Blackboard_SelectedImage<=numEntries then
tremove(IMBA_SavedVariables.Mods["Blackboard"].Images,IMBA_Blackboard_SelectedImage)
IMBA_Blackboard_SelectedImage=0;
IMBA_Blackboard_LoadImage_Update();
end
end
function IMBA_Blackboard_LoadImage()
local numEntries;
if IMBA_SavedVariables.Mods["Blackboard"].Images then
numEntries=getn(IMBA_SavedVariables.Mods["Blackboard"].Images)
else
numEntries=0;
end
if IMBA_Blackboard_SelectedImage~=0 and IMBA_Blackboard_SelectedImage<=numEntries then
IMBA_Blackboard_NewImage();
IMBA_Blackboard_LoadData(IMBA_SavedVariables.Mods["Blackboard"].Images[IMBA_Blackboard_SelectedImage].data);
--IMBA_DrawSavedImage(Whiteboard,Whiteboard_Saved[Whiteboard_SelectedImage][2]);
--IMBA_SendSavedImage(Whiteboard,Whiteboard_Saved[Whiteboard_SelectedImage][2]);
end
end
function IMBA_Blackboard_LoadImage_Update()
local numEntries;
if IMBA_SavedVariables.Mods["Blackboard"].Images then
numEntries=getn(IMBA_SavedVariables.Mods["Blackboard"].Images)
else
numEntries=0;
end
-- ScrollFrame update
FauxScrollFrame_Update(IMBA_BlackboardLoad_ScrollFrame, numEntries, 8, 25 );
for i=1, 8, 1 do
local obj = getglobal("IMBA_BlackboardLoad_Image" .. i);
local text = getglobal("IMBA_BlackboardLoad_Image" .. i .."_Text");
local selected = getglobal("IMBA_BlackboardLoad_Image" .. i .. "_Selected");
local index = i + FauxScrollFrame_GetOffset(IMBA_BlackboardLoad_ScrollFrame);
if ( index <= numEntries ) then
obj:Show();
text:SetText(IMBA_SavedVariables.Mods["Blackboard"].Images[index].name);
if index==IMBA_Blackboard_SelectedImage then
getglobal("IMBA_BlackboardLoad_Image"..i.."_Selected"):Show()
else
getglobal("IMBA_BlackboardLoad_Image"..i.."_Selected"):Hide()
end
else
obj:Hide();
end
end
end
function IMBA_Blackboard_OnEvent(event)
if event=="CHAT_MSG_ADDON" then
IMBA_LineMsgHandler(IMBA_Blackboard_Canvas);
if arg1=="IMBA_BLACKBOARD" and arg4~=UnitName("player") then
if string.find(arg2,"MAP") then
local _,_, NewMap = string.find(arg2, "MAP (.*)");
IMBA_Blackboard_SetMap(NewMap);
end
if string.find(arg2,"CLEARRAIDICON") then
local _,_, id =string.find(arg2,"CLEARRAIDICON (%d+)")
IMBA_Blackboard_ClearRaidIcon(id);
end
if string.find(arg2,"SETRAIDICON") then
local _,_, id, x, y = string.find(arg2,"SETRAIDICON (%d+) (%d+.?%d*) (%d+.?%d*)");
IMBA_Blackboard_SetRaidIcon(id,tonumber(x),tonumber(y));
end
if string.find(arg2,"CLEARTEXT") then
local _,_, id =string.find(arg2,"CLEARTEXT (%d+)")
IMBA_Blackboard_HideText(id);
end
if string.find(arg2,"SETTEXT") then
local _,_, id, x, y, r1, g1, b1, a1, r2, g2, b2, a2, t = string.find(arg2,"SETTEXT (%d+) (%d+.?%d*) (%d+.?%d*) (%d+.?%d*) (%d+.?%d*) (%d+.?%d*) (%d+.?%d*) (%d+.?%d*) (%d+.?%d*) (%d+.?%d*) (%d+.?%d*) (.*)");
IMBA_Blackboard_SetText(id,t,x,y,{tonumber(r1),tonumber(g1),tonumber(b1),tonumber(a1)},{tonumber(r2),tonumber(g2),tonumber(b2),tonumber(a2)});
end
end
end
end
Generated by GNU Enscript 1.6.5.90.