Quantcast

updates

Steven Jackson [05-21-15 - 13:38]
updates
Filename
SVUI_!Core/setup/installer.lua
SVUI_!Core/system/dock.lua
SVUI_!Core/system/dropdown.lua
SVUI_Chat/SVUI_Chat.lua
diff --git a/SVUI_!Core/setup/installer.lua b/SVUI_!Core/setup/installer.lua
index c2a58d8..41aee50 100644
--- a/SVUI_!Core/setup/installer.lua
+++ b/SVUI_!Core/setup/installer.lua
@@ -270,123 +270,127 @@ end
 function SV.Setup:ChatConfigs(mungs)
 	forceCVars()

-	for i=1, NUM_CHAT_WINDOWS do
-		local chatFrame = _G["ChatFrame"..i];
-		if(chatFrame) then
-			chatFrame.isUninteractable = false;
-			chatFrame:SetMovable(true);
+	if(SV.Chat) then
+		SV.Chat:ResetChatWindows()
+	else
+		for i=1, NUM_CHAT_WINDOWS do
+			local chatFrame = _G["ChatFrame"..i];
+			if(chatFrame) then
+				chatFrame.isUninteractable = false;
+				chatFrame:SetMovable(true);
+			end
 		end
-	end

-	FCF_ResetChatWindows()
-	FCF_SetLocked(ChatFrame1, true)
-	FCF_SetLocked(ChatFrame2, true)
-	FCF_OpenNewWindow(LOOT)
-	FCF_SetLocked(ChatFrame3, true)
-
-	for i = 1, NUM_CHAT_WINDOWS do
-		local chat = _G["ChatFrame"..i]
-		local chatID = chat:GetID()
-		if i == 1 and SV.Chat then
-			chat:ClearAllPoints()
-			chat:SetAllPoints(SV.Chat.Dock);
-		end
-		FCF_SavePositionAndDimensions(chat)
-		FCF_StopDragging(chat)
-		FCF_SetChatWindowFontSize(nil, chat, 12)
-		if i == 1 then
-			FCF_SetWindowName(chat, GENERAL)
-		elseif i == 2 then
-			FCF_SetWindowName(chat, GUILD_EVENT_LOG)
-		elseif i == 3 then
-			FCF_SetWindowName(chat, LOOT)
+		FCF_ResetChatWindows()
+		FCF_SetLocked(ChatFrame1, true)
+		FCF_SetLocked(ChatFrame2, true)
+		FCF_OpenNewWindow(LOOT)
+		FCF_SetLocked(ChatFrame3, true)
+
+		for i = 1, NUM_CHAT_WINDOWS do
+			local chat = _G["ChatFrame"..i]
+			local chatID = chat:GetID()
+			if i == 1 and SV.Chat then
+				chat:ClearAllPoints()
+				chat:SetAllPoints(SV.Chat.Dock);
+			end
+			FCF_SavePositionAndDimensions(chat)
+			FCF_StopDragging(chat)
+			FCF_SetChatWindowFontSize(nil, chat, 12)
+			if i == 1 then
+				FCF_SetWindowName(chat, GENERAL)
+			elseif i == 2 then
+				FCF_SetWindowName(chat, GUILD_EVENT_LOG)
+			elseif i == 3 then
+				FCF_SetWindowName(chat, LOOT)
+			end
 		end
+
+		ChatFrame_RemoveAllMessageGroups(ChatFrame1)
+		ChatFrame_AddMessageGroup(ChatFrame1, "SAY")
+		ChatFrame_AddMessageGroup(ChatFrame1, "EMOTE")
+		ChatFrame_AddMessageGroup(ChatFrame1, "YELL")
+		ChatFrame_AddMessageGroup(ChatFrame1, "GUILD")
+		ChatFrame_AddMessageGroup(ChatFrame1, "OFFICER")
+		ChatFrame_AddMessageGroup(ChatFrame1, "GUILD_ACHIEVEMENT")
+		ChatFrame_AddMessageGroup(ChatFrame1, "WHISPER")
+		ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_SAY")
+		ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_EMOTE")
+		ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_YELL")
+		ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_BOSS_EMOTE")
+		ChatFrame_AddMessageGroup(ChatFrame1, "PARTY")
+		ChatFrame_AddMessageGroup(ChatFrame1, "PARTY_LEADER")
+		ChatFrame_AddMessageGroup(ChatFrame1, "RAID")
+		ChatFrame_AddMessageGroup(ChatFrame1, "RAID_LEADER")
+		ChatFrame_AddMessageGroup(ChatFrame1, "RAID_WARNING")
+		ChatFrame_AddMessageGroup(ChatFrame1, "INSTANCE_CHAT")
+		ChatFrame_AddMessageGroup(ChatFrame1, "INSTANCE_CHAT_LEADER")
+		ChatFrame_AddMessageGroup(ChatFrame1, "BATTLEGROUND")
+		ChatFrame_AddMessageGroup(ChatFrame1, "BATTLEGROUND_LEADER")
+		ChatFrame_AddMessageGroup(ChatFrame1, "BG_HORDE")
+		ChatFrame_AddMessageGroup(ChatFrame1, "BG_ALLIANCE")
+		ChatFrame_AddMessageGroup(ChatFrame1, "BG_NEUTRAL")
+		ChatFrame_AddMessageGroup(ChatFrame1, "SYSTEM")
+		ChatFrame_AddMessageGroup(ChatFrame1, "ERRORS")
+		ChatFrame_AddMessageGroup(ChatFrame1, "AFK")
+		ChatFrame_AddMessageGroup(ChatFrame1, "DND")
+		ChatFrame_AddMessageGroup(ChatFrame1, "IGNORED")
+		ChatFrame_AddMessageGroup(ChatFrame1, "ACHIEVEMENT")
+		ChatFrame_AddMessageGroup(ChatFrame1, "BN_WHISPER")
+		ChatFrame_AddMessageGroup(ChatFrame1, "BN_CONVERSATION")
+		ChatFrame_AddMessageGroup(ChatFrame1, "BN_INLINE_TOAST_ALERT")
+		ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_FACTION_CHANGE")
+		ChatFrame_AddMessageGroup(ChatFrame1, "SKILL")
+		ChatFrame_AddMessageGroup(ChatFrame1, "LOOT")
+		ChatFrame_AddMessageGroup(ChatFrame1, "MONEY")
+		ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_XP_GAIN")
+		ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_HONOR_GAIN")
+		ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_GUILD_XP_GAIN")
+
+		ChatFrame_RemoveAllMessageGroups(ChatFrame3)
+		ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_FACTION_CHANGE")
+		ChatFrame_AddMessageGroup(ChatFrame3, "SKILL")
+		ChatFrame_AddMessageGroup(ChatFrame3, "LOOT")
+		ChatFrame_AddMessageGroup(ChatFrame3, "MONEY")
+		ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_XP_GAIN")
+		ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_HONOR_GAIN")
+		ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_GUILD_XP_GAIN")
+
+		ChatFrame_AddChannel(ChatFrame1, GENERAL)
+
+		ToggleChatColorNamesByClassGroup(true, "SAY")
+		ToggleChatColorNamesByClassGroup(true, "EMOTE")
+		ToggleChatColorNamesByClassGroup(true, "YELL")
+		ToggleChatColorNamesByClassGroup(true, "GUILD")
+		ToggleChatColorNamesByClassGroup(true, "OFFICER")
+		ToggleChatColorNamesByClassGroup(true, "GUILD_ACHIEVEMENT")
+		ToggleChatColorNamesByClassGroup(true, "ACHIEVEMENT")
+		ToggleChatColorNamesByClassGroup(true, "WHISPER")
+		ToggleChatColorNamesByClassGroup(true, "PARTY")
+		ToggleChatColorNamesByClassGroup(true, "PARTY_LEADER")
+		ToggleChatColorNamesByClassGroup(true, "RAID")
+		ToggleChatColorNamesByClassGroup(true, "RAID_LEADER")
+		ToggleChatColorNamesByClassGroup(true, "RAID_WARNING")
+		ToggleChatColorNamesByClassGroup(true, "BATTLEGROUND")
+		ToggleChatColorNamesByClassGroup(true, "BATTLEGROUND_LEADER")
+		ToggleChatColorNamesByClassGroup(true, "INSTANCE_CHAT")
+		ToggleChatColorNamesByClassGroup(true, "INSTANCE_CHAT_LEADER")
+		ToggleChatColorNamesByClassGroup(true, "CHANNEL1")
+		ToggleChatColorNamesByClassGroup(true, "CHANNEL2")
+		ToggleChatColorNamesByClassGroup(true, "CHANNEL3")
+		ToggleChatColorNamesByClassGroup(true, "CHANNEL4")
+		ToggleChatColorNamesByClassGroup(true, "CHANNEL5")
+		ToggleChatColorNamesByClassGroup(true, "CHANNEL6")
+		ToggleChatColorNamesByClassGroup(true, "CHANNEL7")
+		ToggleChatColorNamesByClassGroup(true, "CHANNEL8")
+		ToggleChatColorNamesByClassGroup(true, "CHANNEL9")
+		ToggleChatColorNamesByClassGroup(true, "CHANNEL10")
+		ToggleChatColorNamesByClassGroup(true, "CHANNEL11")
+
+		ChangeChatColor("CHANNEL1", 195 / 255, 230 / 255, 232 / 255)
+		ChangeChatColor("CHANNEL2", 232 / 255, 158 / 255, 121 / 255)
+		ChangeChatColor("CHANNEL3", 232 / 255, 228 / 255, 121 / 255)
 	end
-
-	ChatFrame_RemoveAllMessageGroups(ChatFrame1)
-	ChatFrame_AddMessageGroup(ChatFrame1, "SAY")
-	ChatFrame_AddMessageGroup(ChatFrame1, "EMOTE")
-	ChatFrame_AddMessageGroup(ChatFrame1, "YELL")
-	ChatFrame_AddMessageGroup(ChatFrame1, "GUILD")
-	ChatFrame_AddMessageGroup(ChatFrame1, "OFFICER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "GUILD_ACHIEVEMENT")
-	ChatFrame_AddMessageGroup(ChatFrame1, "WHISPER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_SAY")
-	ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_EMOTE")
-	ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_YELL")
-	ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_BOSS_EMOTE")
-	ChatFrame_AddMessageGroup(ChatFrame1, "PARTY")
-	ChatFrame_AddMessageGroup(ChatFrame1, "PARTY_LEADER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "RAID")
-	ChatFrame_AddMessageGroup(ChatFrame1, "RAID_LEADER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "RAID_WARNING")
-	ChatFrame_AddMessageGroup(ChatFrame1, "INSTANCE_CHAT")
-	ChatFrame_AddMessageGroup(ChatFrame1, "INSTANCE_CHAT_LEADER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BATTLEGROUND")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BATTLEGROUND_LEADER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BG_HORDE")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BG_ALLIANCE")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BG_NEUTRAL")
-	ChatFrame_AddMessageGroup(ChatFrame1, "SYSTEM")
-	ChatFrame_AddMessageGroup(ChatFrame1, "ERRORS")
-	ChatFrame_AddMessageGroup(ChatFrame1, "AFK")
-	ChatFrame_AddMessageGroup(ChatFrame1, "DND")
-	ChatFrame_AddMessageGroup(ChatFrame1, "IGNORED")
-	ChatFrame_AddMessageGroup(ChatFrame1, "ACHIEVEMENT")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BN_WHISPER")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BN_CONVERSATION")
-	ChatFrame_AddMessageGroup(ChatFrame1, "BN_INLINE_TOAST_ALERT")
-	ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_FACTION_CHANGE")
-	ChatFrame_AddMessageGroup(ChatFrame1, "SKILL")
-	ChatFrame_AddMessageGroup(ChatFrame1, "LOOT")
-	ChatFrame_AddMessageGroup(ChatFrame1, "MONEY")
-	ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_XP_GAIN")
-	ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_HONOR_GAIN")
-	ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_GUILD_XP_GAIN")
-
-	ChatFrame_RemoveAllMessageGroups(ChatFrame3)
-	ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_FACTION_CHANGE")
-	ChatFrame_AddMessageGroup(ChatFrame3, "SKILL")
-	ChatFrame_AddMessageGroup(ChatFrame3, "LOOT")
-	ChatFrame_AddMessageGroup(ChatFrame3, "MONEY")
-	ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_XP_GAIN")
-	ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_HONOR_GAIN")
-	ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_GUILD_XP_GAIN")
-
-	ChatFrame_AddChannel(ChatFrame1, GENERAL)
-
-	ToggleChatColorNamesByClassGroup(true, "SAY")
-	ToggleChatColorNamesByClassGroup(true, "EMOTE")
-	ToggleChatColorNamesByClassGroup(true, "YELL")
-	ToggleChatColorNamesByClassGroup(true, "GUILD")
-	ToggleChatColorNamesByClassGroup(true, "OFFICER")
-	ToggleChatColorNamesByClassGroup(true, "GUILD_ACHIEVEMENT")
-	ToggleChatColorNamesByClassGroup(true, "ACHIEVEMENT")
-	ToggleChatColorNamesByClassGroup(true, "WHISPER")
-	ToggleChatColorNamesByClassGroup(true, "PARTY")
-	ToggleChatColorNamesByClassGroup(true, "PARTY_LEADER")
-	ToggleChatColorNamesByClassGroup(true, "RAID")
-	ToggleChatColorNamesByClassGroup(true, "RAID_LEADER")
-	ToggleChatColorNamesByClassGroup(true, "RAID_WARNING")
-	ToggleChatColorNamesByClassGroup(true, "BATTLEGROUND")
-	ToggleChatColorNamesByClassGroup(true, "BATTLEGROUND_LEADER")
-	ToggleChatColorNamesByClassGroup(true, "INSTANCE_CHAT")
-	ToggleChatColorNamesByClassGroup(true, "INSTANCE_CHAT_LEADER")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL1")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL2")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL3")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL4")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL5")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL6")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL7")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL8")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL9")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL10")
-	ToggleChatColorNamesByClassGroup(true, "CHANNEL11")
-
-	ChangeChatColor("CHANNEL1", 195 / 255, 230 / 255, 232 / 255)
-	ChangeChatColor("CHANNEL2", 232 / 255, 158 / 255, 121 / 255)
-	ChangeChatColor("CHANNEL3", 232 / 255, 228 / 255, 121 / 255)

 	if not mungs then
 		if SV.Chat then
diff --git a/SVUI_!Core/system/dock.lua b/SVUI_!Core/system/dock.lua
index 9c0f44c..e004446 100644
--- a/SVUI_!Core/system/dock.lua
+++ b/SVUI_!Core/system/dock.lua
@@ -623,6 +623,16 @@ end
 DRAGGING HIGHLIGHT FUNCTIONS
 ##########################################################
 ]]--
+local function UpdateAllLayouts()
+	for location, settings in pairs(DOCK_LOCATIONS) do
+		local dock = MOD[location];
+		local dockbar = dock.Bar;
+		if(dockbar) then
+			dockbar:Update()
+		end
+	end
+end
+
 local function UpdateDividers(self)
 	local location = self.Data.Location;
 	local anchor = upper(location);
@@ -664,7 +674,7 @@ local function UpdateDividers(self)
 					end
 				else
 					afterTarget = true;
-					offset = offset + (calcWidth + 2);
+					--offset = offset + (calcWidth + 2);
 				end
 			end
 		end
@@ -681,33 +691,25 @@ local HighLight_OnUpdate = function(self)
 	end
 	if(highlight:IsMouseOver(50, -50, -50, 50)) then
 		highlight:SetAlpha(1)
-		local targeted = false;
 		for i = 1, #self.Data.Order do
 			local divider = self.Dividers[i]
 			if(divider) then
-
-				if(divider:IsMouseOver(15, -10, -15, 10)) then
+				if(divider:IsMouseOver(35, -5, -35, 5)) then
 					highlight:SetAlpha(0.5)
-					if((not divider.placeHolder) and (divider:GetAlpha() > 0)) then
-						DRAG_ORDERINDEX = i
-					else
-						divider:SetAlpha(1)
-						divider:SetWidth(divider.activeWidth)
-					end
-				elseif(divider.placeHolder) then
 					divider:SetAlpha(1)
 					divider:SetWidth(divider.activeWidth)
+					DRAG_ORDERINDEX = i
+					--print(DRAG_ORDERINDEX)
 				else
 					divider:SetAlpha(0)
 					divider:SetWidth(1)
 				end
 			end
 		end
-		--print(DRAG_ORDERINDEX)
-		UpdateDividers(self)
 	else
 		highlight:SetAlpha(0.2)
 	end
+	UpdateDividers(self)
 end

 local function GetDragToTarget()
@@ -716,11 +718,8 @@ local function GetDragToTarget()
 		local dockbar = dock.Bar;
 		if(dockbar and (dockbar.Highlight:IsMouseOver(50, -50, -50, 50))) then
 			local newLocation = dockbar.Data.Location;
-			local newOrder = DRAG_ORDERINDEX;
-			--print(newLocation)
-			--print(newOrder)
-			DRAG_ORDERINDEX = nil
-			return newLocation, newOrder;
+			--print("Result: " .. DRAG_ORDERINDEX)
+			return newLocation, DRAG_ORDERINDEX;
 		end
 	end
 end
@@ -740,17 +739,11 @@ local function ToggleBarHighlights(button)
 						dockbar.Dividers[i].activeWidth = button:GetWidth()
 						dockbar.Dividers[i]:SetAlpha(0)
 						dockbar.Dividers[i]:SetWidth(1)
-						if(i == index) then
-							dockbar.Dividers[i].placeHolder = true;
-							dockbar.Dividers[i]:SetBackdropColor(0, 0, 0, 0.5)
-							dockbar.Dividers[i]:SetBackdropBorderColor(0, 0, 0, 0.5)
-						else
-							dockbar.Dividers[i].placeHolder = nil;
-							dockbar.Dividers[i]:SetBackdropColor(0, 0.5, 1, 1)
-							dockbar.Dividers[i]:SetBackdropBorderColor(0, 1, 1, 1)
-						end
+						dockbar.Dividers[i]:SetBackdropColor(0, 0.5, 1, 1)
+						dockbar.Dividers[i]:SetBackdropBorderColor(0, 1, 1, 1)
 					end
 				end
+				--UpdateDividers(dockbar);
 			else
 				dockbar.Highlight:Hide()
 				dockbar.Highlight:SetAlpha(0)
@@ -760,12 +753,10 @@ local function ToggleBarHighlights(button)
 						dockbar.Dividers[i].activeWidth = 1
 						dockbar.Dividers[i]:SetAlpha(0)
 						dockbar.Dividers[i]:SetWidth(1)
-						dockbar.Dividers[i].placeHolder = nil;
 						dockbar.Dividers[i]:SetBackdropColor(0, 0.5, 1, 1)
 						dockbar.Dividers[i]:SetBackdropBorderColor(0, 1, 1, 1)
 					end
 				end
-				dockbar:Update();
 			end
 		end
 	end
@@ -851,18 +842,14 @@ end

 local function EnableDockletFloating(button)
 	if(button and button.FrameLink and button.CanFloat) then
-		if(not button.isFloating) then
-			button.isFloating = true;
-			local location = "Floating";
-			local name = button:GetName();
-			MOD.private.Locations[name] = location;
-			button.FrameLink:ClearAllPoints();
-			button.FrameLink:SetPoint("BOTTOMLEFT", button, "TOPLEFT", -3, 6);
-			button.FrameLink:SetResizable(true);
-			button.FrameLink.resize:Show();
-		else
-
-		end
+		button.isFloating = true;
+		local location = "Floating";
+		local name = button:GetName();
+		MOD.private.Locations[name] = location;
+		button.FrameLink:ClearAllPoints();
+		button.FrameLink:SetPoint("BOTTOMLEFT", button, "TOPLEFT", -3, 6);
+		button.FrameLink:SetResizable(true);
+		button.FrameLink.resize:Show();
 	end
 end

@@ -893,7 +880,7 @@ local function UpdateDockletFloating(button)
 end

 local function LoadFloatingDocklet(button)
-	if(button and button.FrameLink) then
+	if(button and button.FrameLink and (not MOD.private.Disabled[button:GetName()])) then
 		local location = "Floating";
 		button:Show();
 		local name = button:GetName();
@@ -966,6 +953,26 @@ local DockBar_NextDefault = function(self)
 	SV.Events:Trigger("DOCKLET_LIST_EMPTY", location);
 end

+local DockBar_UpdateOrder = function(self)
+	--print('DockBar_UpdateOrder')
+	wipe(ORDER_TEST);
+	wipe(self.Data.Order);
+	local location = self.Data.Location;
+	local safeIndex = 1;
+	for i = 1, #MOD.private.Order[location] do
+		local nextName = MOD.private.Order[location][i];
+		local nextButton = self.Data.Buttons[nextName];
+		if(nextButton) then
+			if(not ORDER_TEST[nextName]) then
+				ORDER_TEST[nextName] = true;
+				nextButton.OrderIndex = safeIndex;
+				self.Data.Order[safeIndex] = nextName;
+				safeIndex = safeIndex + 1;
+			end
+		end
+	end
+end
+
 local DockBar_ChangeOrder = function(self, button, targetIndex)
 	--print('DockBar_ChangeOrder')
 	local location = self.Data.Location;
@@ -992,30 +999,10 @@ local DockBar_ChangeOrder = function(self, button, targetIndex)
 	local safeIndex = 1;
 	for i = 1, #ORDER_TEMP do
 		local nextName = ORDER_TEMP[i];
-		MOD.private.Order[location][i] = nextName;
+		tinsert(MOD.private.Order[location], nextName);
 	end

-	self:Update()
-end
-
-local DockBar_UpdateOrder = function(self)
-	--print('DockBar_UpdateOrder')
-	wipe(ORDER_TEST);
-	wipe(self.Data.Order);
-	local location = self.Data.Location;
-	local safeIndex = 1;
-	for i = 1, #MOD.private.Order[location] do
-		local nextName = MOD.private.Order[location][i];
-		local nextButton = self.Data.Buttons[nextName];
-		if(nextButton) then
-			if(not ORDER_TEST[nextName]) then
-				ORDER_TEST[nextName] = true;
-				nextButton.OrderIndex = safeIndex;
-				self.Data.Order[safeIndex] = nextName;
-				safeIndex = safeIndex + 1;
-			end
-		end
-	end
+	DockBar_UpdateOrder(self);
 end

 local DockBar_CheckOrder = function(self, targetName)
@@ -1029,10 +1016,11 @@ local DockBar_CheckOrder = function(self, targetName)
 	if(not found) then
 		tinsert(MOD.private.Order[location], targetName);
 	end
+
+	DockBar_UpdateOrder(self);
 end

 local DockBar_UpdateLayout = function(self)
-	DockBar_UpdateOrder(self);
 	local location = self.Data.Location;
 	local anchor = upper(location);
 	local mod = self.Data.Modifier
@@ -1054,15 +1042,18 @@ local DockBar_UpdateLayout = function(self)
 				divider:SetPoint(anchor, self.ToolBar, anchor, (offset * mod), 0);
 				offset = offset + (divider:GetWidth() + 2);

-				nextButton:ClearAllPoints();
-				nextButton:SetSize(calcWidth, size);
-				nextButton:SetPoint(anchor, self.ToolBar, anchor, (offset * mod), 0);
-				offset = offset + (calcWidth + 2);
-
+				if(not nextButton.isFloating) then
+					nextButton:ClearAllPoints();
+					nextButton:SetSize(calcWidth, size);
+					nextButton:SetPoint(anchor, self.ToolBar, anchor, (offset * mod), 0);
+					offset = offset + (calcWidth + 2);
+					nextButton.OrderIndex = safeIndex;
+				else
+					nextButton.OrderIndex = 0;
+				end
 				if(not nextButton:IsShown()) then
 					nextButton:Show();
 				end
-				nextButton.OrderIndex = safeIndex;
 				safeIndex = safeIndex + 1;
 			end
 		end
@@ -1080,11 +1071,13 @@ local DockBar_UpdateLayout = function(self)
 	self.ToolBar:SetWidth(offset + size);
 end

-local DockBar_AddButton = function(self, button, forced)
+local DockBar_AddButton = function(self, button, order)
 	if not button then return end
 	local name = button:GetName();
 	local currentLocation = self.Data.Location
-	if(self.Data.Buttons[name] and (not forced)) then return end
+	if(MOD.private.Disabled[name]) then return end
+	order = order or 0;
+	--if(self.Data.Buttons[name] and (order == 0)) then return end

 	local registeredLocation = MOD.private.Locations[name];

@@ -1102,7 +1095,11 @@ local DockBar_AddButton = function(self, button, forced)
 	end

 	self.Data.Buttons[name] = button;
+	MOD.private.Disabled[name] = nil;
 	DockBar_CheckOrder(self, name);
+	if(order > 0) then
+		DockBar_ChangeOrder(self, button, order)
+	end

 	MOD.private.Locations[name] = currentLocation;
 	button.Parent = self;
@@ -1149,9 +1146,8 @@ local DockBar_RemoveButton = function(self, button, isMoving)

 	if(self.Data.Buttons[name]) then
 		button.OrderIndex = 0;
-
 		button:Hide()
-
+		MOD.private.Disabled[name] = currentLocation;
 		if(button.FrameLink) then
 			local frameName = button.FrameLink:GetName()
 			MOD.private.Locations[frameName] = nil;
@@ -1184,7 +1180,7 @@ local DockButton_OnDragStart = function(self)
 		self:SetMovable(true);
 		self:StartMoving();
 		ToggleBarHighlights(self);
-		if(self.CanFloat and (not self.isFloating)) then
+		if(self.CanFloat) then
 			EnableDockletFloating(self)
 		end
 	end
@@ -1196,15 +1192,14 @@ local DockButton_OnDragStop = function(self)
 	local target, order = GetDragToTarget()
 	if(target) then
 		self:SetMovable(false);
-		self:MoveTo(target);
-		if(order) then
-			DockBar_ChangeOrder(self.Parent, self, order)
-		end
+		self:MoveTo(target, order);
 	elseif(self.isFloating) then
 		UpdateDockletFloating(self)
+		UpdateAllLayouts()
 	else
 		self:SetMovable(false);
 		self:MoveTo(MOD.private.Locations[self:GetName()]);
+		UpdateAllLayouts()
 	end
 	if(self.FrameLink and self.FrameLink.UpdateBackdrop) then
 		self.FrameLink:UpdateBackdrop()
@@ -1293,22 +1288,48 @@ local DockButton_OnPostClick = function(self, ...)
 	MOD.ButtonSound()
 end

+local DockButton_IsEnabled = function(self)
+	local name = self:GetName()
+	if(MOD.private.Disabled[name]) then
+		return false;
+	end
+	return true;
+end
+
 local DockButton_SetDocked = function(self, attach)
-	if(not self.Parent) then return end
+	local name = self:GetName()
+	local lastKnownLocation = MOD.private.Disabled[name];
+	if((not self.Parent) and (not lastKnownLocation)) then return end
+	local parent = self.Parent;
 	if(attach) then
-		if(not self.Parent.Add) then return end
-		self.Parent:Add(self)
+		if(lastKnownLocation and MOD[lastKnownLocation]) then
+			parent = MOD[lastKnownLocation].Bar;
+		end
+		if(not parent.Add) then return end
+		MOD.private.Disabled[name] = nil;
+		parent:Add(self)
 	else
-		if(not self.Parent.Remove) then return end
-		self.Parent:Remove(self)
+		local lookup = MOD.private.Locations[name];
+		if(lookup and (lookup == "Floating")) then
+			self.OrderIndex = 0;
+			self:Hide()
+			MOD.private.Disabled[name] = currentLocation;
+			if(self.FrameLink) then
+				local frameName = self.FrameLink:GetName()
+				self.FrameLink:FadeOut(0.2, 1, 0, true);
+			end
+		elseif(parent.Remove) then
+			parent:Remove(self)
+		end
 	end
 end

-local DockButton_MoveTo = function(self, location)
+local DockButton_MoveTo = function(self, location, order)
 	if(not MOD[location]) then return end
 	local previousLocation = MOD.private.Locations[self.LocationKey];
+	MOD.private.Disabled[self:GetName()] = nil;
 	DisableDockletFloating(self);
-	MOD[location].Bar:Add(self, true);
+	MOD[location].Bar:Add(self, order);
 	SV.Events:Trigger("DOCKLET_LIST_DECREASED", previousLocation);
 	SV.Events:Trigger("DOCKLET_LIST_INCREASED", location);
 	SV.Events:Trigger("DOCKLET_MOVED", self.LocationKey);
@@ -1335,9 +1356,12 @@ local OptionMenu_ButtonFunc = function(self)
 end

 local OptionMenu_SliderFunc = function(self, value)
-	local name = self:GetName();
-	MOD.private.Opacity[name] = value;
-	self:UpdateBackdrop();
+	local frame = self.FrameLink;
+	if(frame) then
+		local name = frame:GetName();
+		MOD.private.Opacity[name] = value;
+		frame:UpdateBackdrop();
+	end
 end

 local DockButton_ShowDockOptions = function(self)
@@ -1355,7 +1379,7 @@ local DockButton_ShowDockOptions = function(self)
 		local name = frame:GetName();
 		local current = MOD.private.Opacity[name];
 		tinsert(list, { title = "Backdrop Alpha", divider = true });
-		tinsert(list, { range = {0,1}, target = frame, currentValue = current, func = OptionMenu_SliderFunc });
+		tinsert(list, { range = {0,1}, value = current, func = OptionMenu_SliderFunc });
 	end

 	local menuTitle = self:GetAttribute("tipText") or "Dock";
@@ -1405,6 +1429,7 @@ local DockBar_CreateButton = function(self, displayName, globalName, texture, ti
 	button.MoveTo							= DockButton_MoveTo;
 	button.SetDocked 					= DockButton_SetDocked;
 	button.SetClickCallbacks 	= DockButton_SetClickCallbacks;
+	button.IsEnabled 	= DockButton_IsEnabled

 	if(tipFunction and type(tipFunction) == "function") then
 		button.GeneralTip = tipFunction
@@ -1553,6 +1578,17 @@ local Docklet_SetClickCallbacks = function(self, ...)
 	self.Button:SetClickCallbacks(...)
 end

+local Docklet_SetDocked = function(self, ...)
+	if(not self.Button) then return end
+	self.Button:SetDocked(...)
+end
+
+local Docklet_IsEnabled = function(self)
+	if(not self.Button) then return end
+	local result = self.Button:IsEnabled()
+	return result;
+end
+
 local Docklet_SetVisibilityCallbacks = function(self, onshow, onhide)
 	if(onshow and (type(onshow) == 'function')) then
 		self.PostShowCallback = onshow;
@@ -1575,6 +1611,11 @@ function MOD:NewDocklet(location, globalName, readableName, texture, onenter)
 	if(not newParent) then return end

 	local frame = _G[globalName] or CreateFrame("Frame", globalName, UIParent);
+
+	if(not self.private.Opacity[globalName]) then
+		self.private.Opacity[globalName] = 1;
+	end
+
 	frame:SetParent(newParent.Window);
 	frame:SetSize(newParent.Window:GetSize());
 	frame:SetAllPoints(newParent.Window);
@@ -1584,8 +1625,10 @@ function MOD:NewDocklet(location, globalName, readableName, texture, onenter)
 	frame.Bar = newParent.Bar;
 	frame.Disable = Docklet_Disable;
 	frame.Enable = Docklet_Enable;
+	frame.SetDocked = Docklet_SetDocked;
 	frame.Relocate = Docklet_Relocate;
 	frame.GetButtonSize = Docklet_ButtonSize;
+	frame.IsEnabled = Docklet_IsEnabled;
 	frame.SetClickCallbacks = Docklet_SetClickCallbacks;
 	frame.SetVisibilityCallbacks = Docklet_SetVisibilityCallbacks;

@@ -1745,6 +1788,7 @@ function MOD:Load()
 	if(not self.private.Locations) then self.private.Locations = {} end
 	if(not self.private.Floating) then self.private.Floating = {} end
 	if(not self.private.Opacity) then self.private.Opacity = {} end
+	if(not self.private.Disabled) then self.private.Disabled = {} end

 	if(self.private.DefaultDocklets) then
 		self.private.Active = copyTable(self.private.DefaultDocklets);
diff --git a/SVUI_!Core/system/dropdown.lua b/SVUI_!Core/system/dropdown.lua
index 54373d7..4c32adb 100644
--- a/SVUI_!Core/system/dropdown.lua
+++ b/SVUI_!Core/system/dropdown.lua
@@ -34,8 +34,9 @@ local twipe 		= _G.wipe;
 --MATH
 local math      	= _G.math;
 local min 			= math.min;
-local floor         = math.floor
-local ceil          = math.ceil
+local floor         = math.floor;
+local ceil          = math.ceil;
+local parsefloat 	= math.parsefloat;
 --BLIZZARD API
 local InCombatLockdown     	= _G.InCombatLockdown;
 local CreateFrame          	= _G.CreateFrame;
@@ -55,7 +56,9 @@ local DropdownButton_OnClick = function(self)
 end

 local DropdownSlider_OnValueChanged = function(self, value)
-	self.func(self.target, value);
+	local result = parsefloat(value, 2)
+	self.Text:SetText(result);
+	self.func(self.target, result);
 end

 local DropdownButton_OnEnter = function(self)
@@ -126,6 +129,7 @@ function SV.Dropdown:Open(target, list, titleText)
 	end

 	local heightOffset = 50;
+	local heightPadded = false;

 	for i=1, #list do
 		if(not self.option[i]) then
@@ -168,7 +172,8 @@ function SV.Dropdown:Open(target, list, titleText)
 			--SVUI_DDSliderTemplate
 			-- SLIDER
 			self.option[i].slider = CreateFrame("Slider", nil, self.option[i], "SVUI_TinySliderTemplate");
-			self.option[i].slider:SetAllPoints();
+			self.option[i].slider:SetPoint("TOPLEFT", self.option[i], "TOPLEFT", 0, -3);
+			self.option[i].slider:SetPoint("BOTTOMRIGHT", self.option[i], "BOTTOMRIGHT", 0, 3);
 			self.option[i].slider.Text:SetJustifyH("CENTER");
 			self.option[i].slider.Low:SetJustifyH("LEFT");
 			self.option[i].slider.High:SetJustifyH("RIGHT");
@@ -179,13 +184,12 @@ function SV.Dropdown:Open(target, list, titleText)
 		self.option[i].button:SetScript("OnClick", nil);
 		self.option[i].slider:SetScript("OnValueChanged", nil);

-		local yOffset = 0;
-
+		local yOffset = heightPadded and 12 or 0;
 		if(list[i].range) then
-			yOffset = -12;
-			heightOffset = heightOffset + 12;
+			yOffset = 12;
 			local minRange, maxRange = list[i].range[1], list[i].range[2];
-			local value = list[i].currentValue or 0;
+			local saved = list[i].value or 0;
+			local value = parsefloat(saved, 2)
 			self.option[i].button:Hide();
 			self.option[i].header:Hide();
 			self.option[i].slider:Show();
@@ -197,6 +201,7 @@ function SV.Dropdown:Open(target, list, titleText)
 			self.option[i].slider.Text:SetText(value);
 			self.option[i].slider.func = list[i].func;
 			self.option[i].slider:SetScript("OnValueChanged", DropdownSlider_OnValueChanged);
+			heightPadded = true;
 		else
 			if(list[i].title) then
 				self.option[i].button:Hide();
@@ -213,15 +218,18 @@ function SV.Dropdown:Open(target, list, titleText)
 				self.option[i].button.func = list[i].func;
 				self.option[i].button:SetScript("OnClick", DropdownButton_OnClick);
 			end
+			heightPadded = false;
 		end

+		heightOffset = heightOffset + yOffset;
+
 		if(i == 1) then
 			self.option[i]:SetPoint("TOPLEFT", self, "TOPLEFT", 10, -30)
 		elseif((i - 1) % maxPerColumn == 0) then
 			self.option[i]:SetPoint("TOPLEFT", self.option[i - maxPerColumn], "TOPRIGHT", 10, 0)
 			cols = cols + 1
 		else
-			self.option[i]:SetPoint("TOPLEFT", self.option[i - 1], "BOTTOMLEFT", 0, yOffset)
+			self.option[i]:SetPoint("TOPLEFT", self.option[i - 1], "BOTTOMLEFT", 0, -yOffset)
 		end
 	end

diff --git a/SVUI_Chat/SVUI_Chat.lua b/SVUI_Chat/SVUI_Chat.lua
index c6554a6..6be6478 100644
--- a/SVUI_Chat/SVUI_Chat.lua
+++ b/SVUI_Chat/SVUI_Chat.lua
@@ -711,14 +711,14 @@ do
 			ScrollIndicator:SetPoint("BOTTOMRIGHT", chat, "BOTTOMRIGHT", 6, 0)
 			ChatDock_ExtendedOptions = function()
 				local t = {};
-				local currentFontSize = SV.media.font.chatdialog.size;
+				local currentFontSize = SV.media.shared.font.chatdialog.size;
 				tinsert(t, { title = CHAT, divider = true });
 				tinsert(t, { text = RENAME_CHAT_WINDOW, func = function() CURRENT_CHAT_FRAME_ID = 1; FCF_RenameChatWindow_Popup(); end });
 				tinsert(t, { text = NEW_CHAT_WINDOW, func = function() CURRENT_CHAT_FRAME_ID = 1; SV:StaticPopup_Show("NEW_CHAT_DOCK"); end });
-				tinsert(t, { text = RESET_ALL_WINDOWS, func = function() CURRENT_CHAT_FRAME_ID = 1; FCF_ResetAllWindows(); end });
+				tinsert(t, { text = RESET_ALL_WINDOWS, func = function() CURRENT_CHAT_FRAME_ID = 1; MOD:ResetChatWindows(); end });
 				tinsert(t, { text = CHAT_CONFIGURATION, func = function() CURRENT_CHAT_FRAME_ID = 1; ShowUIPanel(ChatConfigFrame); end });
 				tinsert(t, { title = FONT_SIZE, divider = true });
-				tinsert(t, { range = {8,20}, target = chat, currentValue = currentFontSize, func = ChatDock_FontSizeSliderFunc });
+				tinsert(t, { range = {8,20}, value = currentFontSize, func = ChatDock_FontSizeSliderFunc });
 				return t;
 			end
 		else
@@ -729,8 +729,7 @@ do
 					tinsert(t, { text = RENAME_CHAT_WINDOW, func = function() CURRENT_CHAT_FRAME_ID = chatID; FCF_RenameChatWindow_Popup(); end });
 					tinsert(t, { text = CHAT_CONFIGURATION, func = function() CURRENT_CHAT_FRAME_ID = chatID; ShowUIPanel(ChatConfigFrame); end });
 				end
-				--tinsert(t, { title = " ", divider = true });
-				tinsert(t, { text = CLOSE_CHAT_WINDOW, func = function() CURRENT_CHAT_FRAME_ID = chatID; FCF_PopInWindow(chat); end });
+				tinsert(t, { text = CLOSE_CHAT_WINDOW, func = function() CURRENT_CHAT_FRAME_ID = chatID; MOD:CloseChatWindow(); end });
 				return t;
 			end
 		end
@@ -980,6 +979,7 @@ do
 				tab:HookScript('OnLeave', _hook_TabOnLeave)
 				chat.hookedHyperLinks = true
 			end
+			chat.isDockable = chat.Dock:IsEnabled()
 			chat.Dock.Button:SetDocked(chat.isDockable)
 		end
 		refreshLocked = true
@@ -987,14 +987,13 @@ do
 end

 local function OpenNewSVUIChatFrame(name)
-	local count = 1;
 	local chatFrame, chatTab;

 	for i=1, NUM_CHAT_WINDOWS do
 		local _, _, _, _, _, _, shown = FCF_GetChatWindowInfo(i);
 		chatFrame = _G["ChatFrame"..i];
 		chatTab = _G["ChatFrame"..i.."Tab"];
-		if((not chatFrame.isDockable) or (count == NUM_CHAT_WINDOWS)) then
+		if(not chatFrame.Dock:IsEnabled()) then
 			if((not name) or (name == "")) then
 				name = format(CHAT_NAME_TEMPLATE, i);
 			end
@@ -1030,12 +1029,158 @@ local function OpenNewSVUIChatFrame(name)
 			SetChatWindowShown(i, true);

 			-- Dock the frame by default
-			FCF_DockFrame(chatFrame, (#FCFDock_GetChatFrames(GENERAL_CHAT_DOCK)+1), true);
-			FCF_FadeInChatFrame(FCFDock_GetSelectedWindow(GENERAL_CHAT_DOCK));
-			return chatFrame;
+			--FCF_DockFrame(chatFrame, (#FCFDock_GetChatFrames(GENERAL_CHAT_DOCK)+1), true);
+			--FCF_FadeInChatFrame(FCFDock_GetSelectedWindow(GENERAL_CHAT_DOCK));
+
+			chatFrame.isDockable = true;
+			chatFrame.isDocked = nil;
+			chatFrame.isUninteractable = true;
+
+			FCF_CopyChatSettings(chatFrame, DEFAULT_CHAT_FRAME);
+			chatFrame.Dock:SetDocked(true)
+			MOD.RefreshChatFrames()
+		end
+	end
+end
+
+function MOD:CloseChatWindow()
+	local chatFrame = _G["ChatFrame" .. CURRENT_CHAT_FRAME_ID]
+	if(chatFrame) then
+		if(chatFrame.Dock) then
+			chatFrame.Dock:SetDocked(false)
+		end
+		FCF_Close(chatFrame)
+	end
+end
+
+function MOD:ResetChatWindows()
+	for k,v in pairs(SV.Dock.private.Disabled) do
+		if k:find("ChatFrame") then
+			SV.Dock.private.Disabled[k] = nil
+		end
+	end
+
+	for i=1, NUM_CHAT_WINDOWS do
+		local chatFrame = _G["ChatFrame"..i];
+		if(chatFrame) then
+			chatFrame.isUninteractable = false;
+			chatFrame:SetMovable(true);
+		end
+	end
+
+	FCF_ResetChatWindows()
+	--FCF_SetLocked(ChatFrame1, true)
+	FCF_SetWindowName(ChatFrame1, GENERAL)
+	if(ChatFrame1.Dock) then
+		ChatFrame1.Dock:SetDocked(true)
+	end
+
+	--FCF_SetLocked(ChatFrame2, true)
+	FCF_SetWindowName(ChatFrame2, GUILD_EVENT_LOG)
+	if(ChatFrame2.Dock) then
+		ChatFrame2.Dock:SetDocked(true)
+	end
+
+	OpenNewSVUIChatFrame(LOOT)
+	--FCF_SetLocked(ChatFrame3, true)
+	FCF_SetWindowName(ChatFrame3, LOOT)
+	if(ChatFrame3.Dock) then
+		ChatFrame3.Dock:SetDocked(true)
+	end
+
+	for i=4, NUM_CHAT_WINDOWS do
+		local chatFrame = _G["ChatFrame"..i];
+		if(chatFrame and chatFrame.Dock) then
+			chatFrame.Dock:SetDocked(false)
 		end
-		count = count + 1;
 	end
+
+	ChatFrame_RemoveAllMessageGroups(ChatFrame1)
+	ChatFrame_AddMessageGroup(ChatFrame1, "SAY")
+	ChatFrame_AddMessageGroup(ChatFrame1, "EMOTE")
+	ChatFrame_AddMessageGroup(ChatFrame1, "YELL")
+	ChatFrame_AddMessageGroup(ChatFrame1, "GUILD")
+	ChatFrame_AddMessageGroup(ChatFrame1, "OFFICER")
+	ChatFrame_AddMessageGroup(ChatFrame1, "GUILD_ACHIEVEMENT")
+	ChatFrame_AddMessageGroup(ChatFrame1, "WHISPER")
+	ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_SAY")
+	ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_EMOTE")
+	ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_YELL")
+	ChatFrame_AddMessageGroup(ChatFrame1, "MONSTER_BOSS_EMOTE")
+	ChatFrame_AddMessageGroup(ChatFrame1, "PARTY")
+	ChatFrame_AddMessageGroup(ChatFrame1, "PARTY_LEADER")
+	ChatFrame_AddMessageGroup(ChatFrame1, "RAID")
+	ChatFrame_AddMessageGroup(ChatFrame1, "RAID_LEADER")
+	ChatFrame_AddMessageGroup(ChatFrame1, "RAID_WARNING")
+	ChatFrame_AddMessageGroup(ChatFrame1, "INSTANCE_CHAT")
+	ChatFrame_AddMessageGroup(ChatFrame1, "INSTANCE_CHAT_LEADER")
+	ChatFrame_AddMessageGroup(ChatFrame1, "BATTLEGROUND")
+	ChatFrame_AddMessageGroup(ChatFrame1, "BATTLEGROUND_LEADER")
+	ChatFrame_AddMessageGroup(ChatFrame1, "BG_HORDE")
+	ChatFrame_AddMessageGroup(ChatFrame1, "BG_ALLIANCE")
+	ChatFrame_AddMessageGroup(ChatFrame1, "BG_NEUTRAL")
+	ChatFrame_AddMessageGroup(ChatFrame1, "SYSTEM")
+	ChatFrame_AddMessageGroup(ChatFrame1, "ERRORS")
+	ChatFrame_AddMessageGroup(ChatFrame1, "AFK")
+	ChatFrame_AddMessageGroup(ChatFrame1, "DND")
+	ChatFrame_AddMessageGroup(ChatFrame1, "IGNORED")
+	ChatFrame_AddMessageGroup(ChatFrame1, "ACHIEVEMENT")
+	ChatFrame_AddMessageGroup(ChatFrame1, "BN_WHISPER")
+	ChatFrame_AddMessageGroup(ChatFrame1, "BN_CONVERSATION")
+	ChatFrame_AddMessageGroup(ChatFrame1, "BN_INLINE_TOAST_ALERT")
+	ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_FACTION_CHANGE")
+	ChatFrame_AddMessageGroup(ChatFrame1, "SKILL")
+	ChatFrame_AddMessageGroup(ChatFrame1, "LOOT")
+	ChatFrame_AddMessageGroup(ChatFrame1, "MONEY")
+	ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_XP_GAIN")
+	ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_HONOR_GAIN")
+	ChatFrame_AddMessageGroup(ChatFrame1, "COMBAT_GUILD_XP_GAIN")
+
+	ChatFrame_RemoveAllMessageGroups(ChatFrame3)
+	ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_FACTION_CHANGE")
+	ChatFrame_AddMessageGroup(ChatFrame3, "SKILL")
+	ChatFrame_AddMessageGroup(ChatFrame3, "LOOT")
+	ChatFrame_AddMessageGroup(ChatFrame3, "MONEY")
+	ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_XP_GAIN")
+	ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_HONOR_GAIN")
+	ChatFrame_AddMessageGroup(ChatFrame3, "COMBAT_GUILD_XP_GAIN")
+
+	ChatFrame_AddChannel(ChatFrame1, GENERAL)
+
+	ToggleChatColorNamesByClassGroup(true, "SAY")
+	ToggleChatColorNamesByClassGroup(true, "EMOTE")
+	ToggleChatColorNamesByClassGroup(true, "YELL")
+	ToggleChatColorNamesByClassGroup(true, "GUILD")
+	ToggleChatColorNamesByClassGroup(true, "OFFICER")
+	ToggleChatColorNamesByClassGroup(true, "GUILD_ACHIEVEMENT")
+	ToggleChatColorNamesByClassGroup(true, "ACHIEVEMENT")
+	ToggleChatColorNamesByClassGroup(true, "WHISPER")
+	ToggleChatColorNamesByClassGroup(true, "PARTY")
+	ToggleChatColorNamesByClassGroup(true, "PARTY_LEADER")
+	ToggleChatColorNamesByClassGroup(true, "RAID")
+	ToggleChatColorNamesByClassGroup(true, "RAID_LEADER")
+	ToggleChatColorNamesByClassGroup(true, "RAID_WARNING")
+	ToggleChatColorNamesByClassGroup(true, "BATTLEGROUND")
+	ToggleChatColorNamesByClassGroup(true, "BATTLEGROUND_LEADER")
+	ToggleChatColorNamesByClassGroup(true, "INSTANCE_CHAT")
+	ToggleChatColorNamesByClassGroup(true, "INSTANCE_CHAT_LEADER")
+	ToggleChatColorNamesByClassGroup(true, "CHANNEL1")
+	ToggleChatColorNamesByClassGroup(true, "CHANNEL2")
+	ToggleChatColorNamesByClassGroup(true, "CHANNEL3")
+	ToggleChatColorNamesByClassGroup(true, "CHANNEL4")
+	ToggleChatColorNamesByClassGroup(true, "CHANNEL5")
+	ToggleChatColorNamesByClassGroup(true, "CHANNEL6")
+	ToggleChatColorNamesByClassGroup(true, "CHANNEL7")
+	ToggleChatColorNamesByClassGroup(true, "CHANNEL8")
+	ToggleChatColorNamesByClassGroup(true, "CHANNEL9")
+	ToggleChatColorNamesByClassGroup(true, "CHANNEL10")
+	ToggleChatColorNamesByClassGroup(true, "CHANNEL11")
+
+	ChangeChatColor("CHANNEL1", 195 / 255, 230 / 255, 232 / 255)
+	ChangeChatColor("CHANNEL2", 232 / 255, 158 / 255, 121 / 255)
+	ChangeChatColor("CHANNEL3", 232 / 255, 228 / 255, 121 / 255)
+
+	MOD:ReLoad()
 end
 --[[
 ##########################################################
@@ -1268,14 +1413,13 @@ do
 			self = FCF_GetCurrentChatFrame();
 		end
 		if(not self.Dock) then return end
-		self.Dock.Button:SetDocked(false)
+		self.Dock:SetDocked(false)
 	end

 	local _hook_FCF_Tab_OnClick = function(self)
 		if(not self) then
 			self = FCF_GetCurrentChatFrame();
 		end
-		print(self:GetName())
 	end

 	function SetAllChatHooks()
@@ -1292,7 +1436,7 @@ do
 		--NewHook("FCF_SetWindowColor", _hook_FCF_SetWindowColor)
 		--NewHook("FCF_SetWindowAlpha", _hook_FCF_SetWindowAlpha)

-		NewHook("FCF_Close", _hook_FCF_Close)
+		--NewHook("FCF_Close", _hook_FCF_Close)
 		NewHook("ChatEdit_UpdateHeader", _hook_OnUpdateHeader)
 	end
 end
@@ -1507,22 +1651,18 @@ function MOD:Load()
 		button1 = YES,
 		button2 = NO,
 		hasEditBox = 1,
-		OnAccept = function(self, renameID)
+		OnAccept = function(self)
 			local name = self.editBox:GetText();
-			local frame = OpenNewSVUIChatFrame(name);
-			FCF_CopyChatSettings(frame, DEFAULT_CHAT_FRAME);
 			self.editBox:SetText("");
-			FCF_DockUpdate();
+			OpenNewSVUIChatFrame(name);
 		end,
 		EditBoxOnEnterPressed = function(self)
 			local parent = self:GetParent();
 			local editBox = parent.editBox
 			local name = editBox:GetText();
-			local frame = OpenNewSVUIChatFrame(name);
-			FCF_CopyChatSettings(frame, DEFAULT_CHAT_FRAME);
 			editBox:SetText("");
-			FCF_DockUpdate();
 			parent:Hide();
+			OpenNewSVUIChatFrame(name);
 		end,
 		EditBoxOnEscapePressed = function (self)
 			self:GetParent():Hide();