changeset 4:247118593c66

Console interface properly resides in XML, and has been fitted with a sizing widget. Console frame can be moved by clicking and dragging anywhere, and can be minimized by right click. Font paths point to the actual addon tree.
author Nenue
date Fri, 18 Dec 2015 19:48:10 -0500
parents 957f42cb49d0
children ac644fc860cc
files Devian.lua Devian.toc Devian.xml
diffstat 3 files changed, 162 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/Devian.lua	Fri Dec 18 04:10:09 2015 -0500
+++ b/Devian.lua	Fri Dec 18 19:48:10 2015 -0500
@@ -5,10 +5,31 @@
 end
 Devian = LibStub("AceAddon-3.0"):NewAddon("Devian", "AceConsole-3.0", "AceEvent-3.0")
 local D = _G.Devian
-local db
 local STATE_LOW, STATE_HIGH = 1, 2
 local PLAYER_REALM = UnitName("player") .. '-' .. GetRealmName()
-local DEVIAN_FRAME = DevianDebugInfo
+local DEVIAN_FRAME = DevianConsole
+local cherry = false
+if not DevianDB then
+  DevianDB = {
+    ['global'] = {[STATE_LOW] = {}, [STATE_HIGH] = {}},
+    console = true,
+    dnd_status = true,
+    dnd_message = "Debugging. Your messages may get eaten.",
+    x = 100,
+    y = -150,
+    height = 500,
+    width = 600,
+  }
+  cherry = "This is probably the first time, so:\n  /dvn 2 to save your regular addon list\n  /dvn 1 to save your development addon list\n  /dvn to switch between the two\n  /dvc to toggle print() frame"
+end
+local db = DevianDB
+
+function D:SavePos(x,y)
+  db.y = DEVIAN_FRAME:GetTop()
+  db.x = DEVIAN_FRAME:GetLeft()
+  db.width = DEVIAN_FRAME:GetWidth()
+  db.height = DEVIAN_FRAME:GetHeight()
+end
 
 local ScanAddOnList = function(args)
   local list_state
@@ -86,15 +107,13 @@
 
 -- Debug info
 local function CreateMessenger()
-  -- TODO: throw this into an XML file
-  if not DEVIAN_FRAME then
-    DEVIAN_FRAME = CreateFrame('ScrollingMessageFrame', DEVIAN_FRAME, UIParent)
-    if not db.console then
-      DEVIAN_FRAME:Hide()
-    end
+  if db.console == true then
+    DEVIAN_FRAME:Show()
   end
 
+
   local f = DEVIAN_FRAME
+  --[[
   f.backdrop = f:CreateTexture('backdrop', 'BACKGROUND')
   f.backdrop:SetTexture(1,1,1,1)
   f.backdrop:SetGradient('HORIZONTAL', 0.2, 0.2, 0.2, 1, 1, 1)
@@ -105,30 +124,20 @@
   f:EnableMouseWheel(true)
   f:EnableKeyboard(true)
   f:SetScript('OnMouseWheel', function (self, delta)
-    local up =  delta > 0
-    if IsControlKeyDown() then
-      if up then self:ScrollToTop()
-      else self:ScrollToBottom() end
-    elseif IsShiftKeyDown() then
-      if up then self:PageUp()
-      else self:PageDown() end
-    else
-      if up then self:ScrollUp()
-      else self:ScrollDown() end
-    end
   end)
 
   f:ScrollToBottom()
   f:SetMaxLines(500)
-  f:SetInsertMode('BOTTOM')
-  f:SetPoint('BOTTOMLEFT', GENERAL_CHAT_DOCK, 'TOPLEFT', 0, 25)
-  f:SetPoint('TOPRIGHT', UIParent, 'TOP', 0, 0- PlayerFrame:GetHeight())
-  f:SetFrameStrata('BACKGROUND')
-  f:SetFont([[Interface\Addons\Turok\Media\font\SourceCodePro-Regular.ttf]], 14, 'NONE')
+  --]]
+  f.console:SetInsertMode('BOTTOM')
+  f:SetPoint('CENTER', UIParent, 'CENTER', db.x, db.y)
+  f:SetSize(db.width, db.height)
+  f:Lower()
+  f.console:SetFont([[Interface\Addons\Turok\Media\font\SourceCodePro-Regular.ttf]], 13, 'NONE')
 
-  f:SetFading(false)
-  f:SetTimeVisible(2147483647)
-  f:SetJustifyH('LEFT')
+  f.console:SetFading(false)
+  f.console:SetTimeVisible(2147483647)
+  --f:SetJustifyH('LEFT')
 
 
   D.debug_init = true
@@ -177,7 +186,7 @@
 
     table.insert(buffer, var)
   end
-  DEVIAN_FRAME:AddMessage(table.concat(buffer, ' '))
+  DEVIAN_FRAME.console:AddMessage(table.concat(buffer, ' '))
   table.wipe(buffer)
 end
 
@@ -192,18 +201,6 @@
 
 function D:OnInitialize()
 
-  local cherry = false
-  if not DevianDB then
-    DevianDB = {
-      ['global'] = {[STATE_LOW] = {}, [STATE_HIGH] = {}},
-      console = true,
-      dnd_status = true,
-      dnd_message = "Debugging. Your messages may get eaten.",
-    }
-    cherry = "This is probably the first time, so:\n  /dvn 2 to save your regular addon list\n  /dvn 1 to save your development addon list\n  /dvn to switch between the two\n  /dvc to toggle print() frame"
-  end
-  db = DevianDB
-
   if not db[PLAYER_REALM] then
     db[PLAYER_REALM] = {[STATE_LOW] = {}, [STATE_HIGH] = {} }
     if not cherry then
--- a/Devian.toc	Fri Dec 18 04:10:09 2015 -0500
+++ b/Devian.toc	Fri Dec 18 19:48:10 2015 -0500
@@ -8,5 +8,5 @@
 ## Version: 0.1
 ## SavedVariables: DevianDB
 ## Deps: Ace3
-
+Devian.xml
 Devian.lua
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Devian.xml	Fri Dec 18 19:48:10 2015 -0500
@@ -0,0 +1,124 @@
+<Ui>
+  <Frame name="DevianConsole" parent="UIParent" enableMouse="true" enableMouseWheel="true" movable="true" resizable="true" toplevel="true" hidden="true" clampedToScreen="true">
+
+    <Size width="500" height="600"/>
+    <KeyValues>
+      <KeyValue key="format" value="Devian [%s]" />
+    </KeyValues>
+    <Scripts>
+      <OnMouseDown>
+        if button == 'LeftButton' then
+          if self.sizer:IsMouseOver() then
+            return self:StartSizing()
+          end
+          return self:StartMoving()
+        end
+      </OnMouseDown>
+      <OnMouseUp>
+        if button == 'RightButton' then
+          if not self.minimized then
+            self.sizer:ClearAllPoints()
+            self.sizer:SetPoint('TOPRIGHT')
+            self:SetHeight(20)
+            self.minimized = true
+            return self.console:Hide()
+          else
+            self.sizer:ClearAllPoints()
+            self.sizer:SetPoint('BOTTOMRIGHT')
+            self:SetHeight(DevianDB.height)
+            self.minimized = nil
+            return self.console:Show()
+          end
+        end
+        self:StopMovingOrSizing()
+        Devian:SavePos()
+      </OnMouseUp>
+      <OnMouseWheel>
+        local up =  delta > 0
+        if IsControlKeyDown() then
+          if up then self.console:ScrollToTop()
+          else self.console:ScrollToBottom() end
+        elseif IsShiftKeyDown() then
+          if up then self.console:PageUp()
+          else self.console:PageDown() end
+        else
+          if up then self.console:ScrollUp()
+          else self.console:ScrollDown() end
+        end
+      </OnMouseWheel>
+      <OnUpdate>
+        if not self.throttle then
+          self.throttle = GetTime()
+        elseif (GetTime()-self.throttle &lt; 0.2) then
+          return
+        else
+          self.throttle = GetTime()
+        end
+
+        self.text:SetText(string.format(self.format, GetTime()))
+      </OnUpdate>
+    </Scripts>
+
+    <Frames>
+      <ScrollingMessageFrame name="$parentBuffer" parentkey="console" maxLines="500" displayduration="2000000">
+        <Anchors>
+          <Anchor point="TOPLEFT" y="-20" />
+          <Anchor point="BOTTOMRIGHT" />
+        </Anchors>
+        <FontString font="Interface\Addons\Devian\font\SourceCodePro-Regular.ttf" wordwrap="true" maxLines="500"
+                    justifyH="LEFT"
+                    indented="true"
+                    setAllPoints="true">
+          <FontHeight>
+            <AbsValue val="12"/>
+          </FontHeight>
+        </FontString>
+
+        <Layers>
+          <Layer level="BACKGROUND">
+            <Texture name="DevianConsoleBG" parentKey="backdrop" setAllPoints="true" alphaMode="MOD">
+              <Color r="1" g="1" b="1" a="1"/>
+              <Gradient orientation="HORIZONTAL">
+                <MinColor a="1" r="0" g="0" b="0"/>
+                <MaxColor a="1" r="1" g="1" b="1"/>
+              </Gradient>
+            </Texture>
+          </Layer>
+        </Layers>
+      </ScrollingMessageFrame>
+    </Frames>
+    <Layers>
+      <Layer level="OVERLAY">
+        <Texture parentKey="tbar" alphaMode="BLEND">
+          <Anchors>
+            <Anchor point="TOPLEFT" />
+            <Anchor point="TOPRIGHT" />
+          </Anchors>
+          <Size y="20" />
+          <Color r="0.3" g="0.3" b="0.3" a="1" />
+        </Texture>
+        <FontString parentKey="text" font="Interface\Addons\Devian\font\SourceCodePro-Bold.ttf" wordwrap="true" maxLines="500"
+                    justifyH="LEFT"
+                    indented="true">
+          <Anchors>
+            <Anchor point="TOPLEFT" x="4" y="-2" />
+            <Anchor point="TOPRIGHT" x="-4" />
+          </Anchors>
+          <Size y="20" />
+          <FontHeight>
+            <AbsValue val="12"/>
+          </FontHeight>
+        </FontString>
+      </Layer>
+      <Layer level="HIGHLIGHT">
+        <Texture parentKey="sizer" alphaMode="BLEND">
+          <Anchors>
+            <Anchor point="BOTTOMRIGHT" />
+          </Anchors>
+          <Size x="20" y="20" />
+          <Color r="1" g="1" b="1" a="0.7"/>
+        </Texture>
+      </Layer>
+    </Layers>
+  </Frame>
+</Ui>
\ No newline at end of file