Quantcast

Fixed issues with line numbering

James Whitehead II [04-28-08 - 22:34]
Fixed issues with line numbering
Filename
FAIAP.lua
WowLua.lua
WowLua.xml
diff --git a/FAIAP.lua b/FAIAP.lua
index c9a82c0..356299e 100755
--- a/FAIAP.lua
+++ b/FAIAP.lua
@@ -1103,7 +1103,11 @@ local function onUpdateHook(editbox, ...)
 	end
 end

-local function newGetText(editbox)
+local function newGetText(editbox, raw)
+	if raw then
+		return lib.decode(editboxGetText(editbox))
+	end
+
 	local decoded = decodeCache[editbox]
 	if not decoded then
 		decoded = lib.decode(editboxGetText(editbox))
diff --git a/WowLua.lua b/WowLua.lua
index f5b4dcf..3daaee2 100644
--- a/WowLua.lua
+++ b/WowLua.lua
@@ -320,7 +320,7 @@ end

 local function slashHandler(txt)
 	local page = WowLuaDB.pages[WowLuaDB.currentPage]
-	WowLuaFrameEditBox:SetText(WowLuaDB.pages[page])
+	WowLuaFrameEditBox:SetText(WowLuaDB.pages[page] or "")
 	if WowLuaDB.currentPage == 1 then
 		WowLuaButton_Previous:Disable()
 		SetDesaturation(WowLuaButton_Previous:GetNormalTexture(),true)
@@ -495,33 +495,51 @@ function WowLua.OnVerticalScroll(scrollFrame)
 end

 function WowLua.UpdateLineNums(highlightNum)
-	local text = WowLuaFrameEditBox:GetText()
+	-- highlightNum is the line number indicated by the error message

-	highlightNum = highlightNum or WowLuaFrameEditBox.highlightNum
+	-- Since we know this is FAIAP enabled, we need to pass true in order
+	-- to get the raw values
+	local editbox = WowLuaFrameEditBox
+	local linebox = WowLuaFrameLineNumEditBox
+	local linetest = WowLuaFrameEditBoxLineTest
+	local linescroll = WowLuaFrameLineNumScrollFrame

-	local lineText = ""
+	local width = editbox:GetWidth()
+	local text = editbox:GetText(true)
+
+	local linetext = ""
 	local count = 1
+	for line in text:gmatch("([^\n]*\n?)") do
+		if #line > 0 then
+			if count == highlightNum then
+				linetext = linetext .. "|cffff2222" .. count .. "|r\n"
+			else
+				linetext = linetext .. count .. "\n"
+			end
+			count = count + 1

-	if count == highlightNum then
-		lineText = lineText .. "|cFFFF1111" .. count .. "|r" .. "\n"
-	else
-		lineText = lineText .. count .. "\n"
+			-- Check to see if the line of text spans more than one actual line
+			linetest:SetText(line:gsub("|", "||"))
+			local testwidth = linetest:GetWidth()
+			if testwidth >= width then
+				linetext = linetext .. string.rep("\n", testwidth / width)
+			end
+		end
 	end

-	count = count + 1
-
-	for line in WowLuaFrameEditBox:GetText():gmatch("\n") do
-		if count == highlightNum then
-			lineText = lineText .. "|cFFFF1111" .. count .. "|r" .. "\n"
-		else
-			lineText = lineText .. count .. "\n"
-		end
-
+	if text:sub(-1, -1) == "\n" then
+		linetext = linetext .. count .. "\n"
 		count = count + 1
 	end
-	WowLuaFrameLineNumEditBox:SetText(lineText)
-	WowLuaFrameEditBox.oldtext = text
-	WowLuaFrameEditBox.highlightNum = highlightNum
+
+	-- Make the line number frame wider as necessary
+	local offset = tostring(count):len() * 10
+	linescroll:ClearAllPoints()
+	linescroll:SetPoint("TOPLEFT", WowLuaFrame, "TOPLEFT", 18, -74)
+	linescroll:SetPoint("BOTTOMRIGHT", WowLuaFrameResizeBar, "TOPLEFT", 15 + offset, -4)
+
+	linebox:SetText(linetext)
+	linetest:SetText(text)
 end

 local function canScroll(scroll, direction)
@@ -583,3 +601,11 @@ function WowLua.ScrollingMessageFrameScroll(scroll, direction, type)
 	scroll[method](scroll);
 end

+function WowLua.OnTextChanged(self)
+	self.highlightNum = nil
+end
+
+function WowLua.OnCursorChanged(self)
+	WowLua.dirty = true
+end
+
diff --git a/WowLua.xml b/WowLua.xml
index 070f770..d717bc7 100644
--- a/WowLua.xml
+++ b/WowLua.xml
@@ -422,6 +422,15 @@
 			<Size>
 			  <AbsDimension x="100" y="100"/>
 			</Size>
+			<Layers>
+				<Layer level="BACKGROUND">
+					<FontString name="$parentLineTest" font="Interface\AddOns\WowLua\fonts\VeraMono.ttf" hidden="true">
+						<Anchor point="TOPLEFT" relativePoint="TOPLEFT"/>
+						<Anchor point="TOPRIGHT" relativePoint="TOPRIGHT"/>
+						<FontHeight val="14"/>
+					</FontString>
+				</Layer>
+			</Layers>
 			<Anchors>
 			  <Anchor point="TOPLEFT">
 				<Offset x="20" y="0"/>