Quantcast

Initial commit

Scott Sibley [08-31-10 - 22:23]
Initial commit
Filename
.pkgmeta
Driver.lua
LCD4WoW.lua
LCDWoW.toc
config.lua
embeds.xml
modules.xml
diff --git a/.pkgmeta b/.pkgmeta
new file mode 100644
index 0000000..37b3557
--- /dev/null
+++ b/.pkgmeta
@@ -0,0 +1,51 @@
+externals:
+    Libs/LibStub:
+        url: svn://svn.wowace.com/wow/libstub/mainline/trunk
+        tag: latest
+    Libs/CallbackHandler-1.0: svn://svn.wowace.com/wow/callbackhandler/mainline/tags/1.0.3/CallbackHandler-1.0
+    Libs/AceAddon-3.0:
+        url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceAddon-3.0
+        tag: latest
+    Libs/AceHook-3.0:
+        url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceHook-3.0
+        tag: latest
+    Libs/AceTimer-3.0:
+        url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceTimer-3.0
+        tag: latest
+    Libs/AceConfig-3.0:
+        url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceConfig-3.0
+        tag: latest
+    Libs/AceConsole-3.0:
+        url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceConsole-3.0
+        tag: latest
+    Libs/AceDB-3.0:
+        url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceDB-3.0
+        tag: latest
+    Libs/AceEvent-3.0:
+        url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceEvent-3.0
+        tag: latest
+    Libs/AceGUI-3.0:
+        url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceGUI-3.0
+        tag: latest
+    Libs/AceLocale-3.0:
+        url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceLocale-3.0
+        tag: latest
+    Libs/AceDBOptions-3.0:
+        url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceDBOptions-3.0
+        tag: latest
+    Libs/LibSharedMedia-3.0:
+        url: svn://svn.wowace.com/wow/libsharedmedia-3-0/mainline/trunk
+        tag: latest
+    Libs/LibTalentQuery-1.0:
+        url: svn://svn.wowace.com/wow/libtalentquery-1-0/mainline/trunk
+    Libs/LibDBIcon-1.0:
+        url: svn://svn.wowace.com/wow/libdbicon-1-0/mainline/trunk/LibDBIcon-1.0
+        tag: latest
+    Libs/LibDataBroker-1.1:
+        url: git://github.com/tekkub/libdatabroker-1-1.git
+        tag: v1.1.4
+    Libs/LibQtip-1.0:
+        url: svn://svn.wowace.com/wow/libqtip-1-0/mainline/trunk
+		tag: latest
+	Libs/StarLibs-1.0:
+	    url: svn://svn.curseforge.net/wow/starlibs-1-0/mainline/trunk
\ No newline at end of file
diff --git a/Driver.lua b/Driver.lua
new file mode 100644
index 0000000..62a8c0a
--- /dev/null
+++ b/Driver.lua
@@ -0,0 +1,401 @@
+local mod = LCD4WoW:NewModule("LCD4WoWDriver")
+mod.name = "LCD Display"
+mod.toggled = true
+mod.defaultOff = true
+local Evaluator = LibStub("StarLibEvaluator-1.0")
+local LibCore = LibStub("StarLibCore-1.0")
+local LibLCDText = LibStub("StarLibLCDText-1.0")
+local LibDriverQTip = LibStub("StarLibDriverQTip-1.0")
+local WidgetText = LibStub("StarLibWidgetText-1.0")
+local WidgetBar = LibStub("StarLibWidgetBar-1.0")
+local WidgetHistogram = LibStub("StarLibWidgetHistogram-1.0")
+local WidgetKey = LibStub("StarLibWidgetKey-1.0")
+local WidgetTimer = LibStub("StarLibWidgetTimer-1.0")
+local LayoutOptions = LibStub("StarLibLayoutOptions-1.0")
+
+local _G = _G
+local GameTooltip = _G.GameTooltip
+
+local function copy(tbl)
+	local new = {}
+	for k, v in pairs(tbl) do
+		if type(v) == "table" then
+			new[k] = copy(v)
+		else
+			new[k] = v
+		end
+	end
+	return new
+end
+
+local defaults = {profile= {config=copy(LCD4WoW.config)}}
+local displays = {}
+
+local options
+local blankOptions = {
+	restart = {
+		name = "Restart Displays",
+		type = "execute",
+		func = function()
+			mod:StopDisplays()
+			mod:StartDisplays()
+		end,
+		order = 1
+	},
+	defaults = {
+		name = "Restore Defaults",
+		type = "execute",
+		func = function()
+			mod.db.profile.config = copy(LCD4WoW.config)
+			LCD4WoW:RebuildOpts()
+		end,
+		order = 2
+	},
+	displays = {
+		name = "Displays",
+		type = "group",
+		args = {},
+		order = 3
+	},
+	layouts = {
+		name = "Layouts",
+		type = "group",
+		args = {},
+		order = 4
+	},
+	widgets = {
+		name = "Widgets",
+		type = "group",
+		args = {},
+		order = 5
+	}
+}
+
+function mod:RebuildOpts()
+	options = copy(blankOptions)
+	options.displays.args.add = {
+		name = "Add Display",
+		type = "input",
+		set = function(info, v)
+			self.db.profile.config["display_" .. v] = {name = v, layouts = {}, widgets = {}}
+			LCD4WoW:RebuildOpts()
+		end,
+		order = 1
+	}
+	options.layouts.args.add = {
+		name = "Add Layout",
+		type = "input",
+		set = function(info, v)
+			self.db.profile.config["layout_" .. v] = {name = v}
+			LCD4WoW:RebuildOpts()
+		end,
+		order = 1
+	}
+	options.widgets.args.text = {
+		name = "Text Widgets",
+		type = "group",
+		args = {
+			add = {
+				name = "Add",
+				desc = "Enter a name for your text widget",
+				type = "input",
+				set = function(info, v)
+					self.db.profile.config["widget_" .. v] = {type = "text"}
+					LCD4WoW:RebuildOpts()
+				end,
+				order = 1
+			},
+		}
+	}
+	options.widgets.args.bar = {
+		name = "Bars",
+		type = "group",
+		args = {
+			add = {
+				name = "Add",
+				desc = "Enter a name for your bar widget",
+				type = "input",
+				set = function(info, v)
+					self.db.profile.config["widget_" .. v] = {type = "bar"}
+					LCD4WoW:RebuildOpts()
+				end,
+				order = 1
+			}
+		}
+	}
+	options.widgets.args.histogram = {
+		name = "Histograms",
+		type = "group",
+		args = {
+			add = {
+				name = "Add",
+				desc = "Enter a name for your histogram widget",
+				type = "input",
+				set = function(info, v)
+					self.db.profile.config["widget_" .. v] = {type = "histogram"}
+					LCD4WoW:RebuildOpts()
+				end,
+				order = 1
+			}
+		}
+	}
+	options.widgets.args.icon = {
+		name = "Icons",
+		type = "group",
+		args = {
+			add = {
+				name = "Add",
+				desc = "Enter a name for your icon widget",
+				type = "input",
+				set = function(info, v)
+					self.db.profile.config["widget_" .. v] = {type = "icon"}
+					LCD4WoW:RebuildOpts()
+				end,
+				order = 1
+			}
+		}
+	}
+	options.widgets.args.key = {
+		name = "Keys",
+		type = "group",
+		args = {
+			add = {
+				name = "Add",
+				desc = "Enter a name for your key widget",
+				type = "input",
+				set = function(info, v)
+					self.db.profile.config["widget_" .. v] = {type = "key"}
+					LCD4WoW:RebuildOpts()
+				end,
+				order = 1
+			}
+		}
+	}
+	options.widgets.args.timer = {
+		name = "Timers",
+		type = "group",
+		args = {
+			add = {
+				name = "Add",
+				type = "input",
+				desc = "Enter a name for your timer widget",
+				set = function(info, v)
+					self.db.profile.config["widget_" .. v] = {type = "timer"}
+					LCD4WoW:RebuildOpts()
+				end,
+				order = 1
+			}
+		}
+	}
+	for k, v in pairs(self.db.profile.config) do
+		if k:match("^display_.*") then
+			options.displays.args[k:gsub(" ", "_")] = {
+				name = k:gsub("display_", ""),
+				type = "group",
+				args = {
+					enable = {
+						name = "Enable",
+						type = "toggle",
+						get = function()
+							return v.enabled
+						end,
+						set = function(info, val)
+							v.enabled = val
+						end,
+						order = 1
+					},
+					driver = {
+						name = "Driver",
+						desc = "This display's driver type",
+						type = "select",
+						values = LibCore.driverList,
+						get = function() return LibCore.driverDict[v.driver] end,
+						set = function(info, val)
+							v.driver = LibCore.driverList[val]
+							LCD4WoW:RebuildOpts()
+						end,
+						order = 2
+
+					},
+					delete = {
+						name = "Delete",
+						type = "execute",
+						func = function()
+							self.db.profile.config[k] = nil
+							LCD4WoW:RebuildOpts()
+						end,
+						order = 100
+					}
+				}
+			}
+			local driverOptions = {}
+			if v.driver == "QTip" then
+				driverOptions = LibDriverQTip:RebuildOpts(LCD4WoW, v, k)
+			end
+
+			for kk, vv in pairs(driverOptions) do
+				options.displays.args[k:gsub(" ", "_")].args[kk] = vv
+			end
+		end
+		if k:match("^layout_") then
+			options.layouts.args[k:gsub(" ", "_")] = {
+				name = k,
+				type = "group",
+				args = {}
+			}
+			options.layouts.args[k:gsub(" ", "_")].args = LayoutOptions:RebuildOpts(LCD4WoW, v, k)
+			options.layouts.args[k:gsub(" ", "_")].args.delete = {
+				name = "Delete",
+				type = "execute",
+				func = function()
+					self.db.profile.config[k] = nil
+					LCD4WoW:RebuildOpts()
+				end
+			}
+
+		end
+		if k:match("^widget_") then
+			if v.type == "text" then
+				options.widgets.args.text.args[k:gsub(" ", "_")] = {
+					name = k:gsub("widget_", ""),
+					type = "group",
+					args = WidgetText:GetOptions(LCD4WoW, v, k),
+					order = 1
+				}
+				options.widgets.args.text.args[k:gsub(" ", "_")].args.delete = {
+					name = "Delete",
+					type = "execute",
+					func = function()
+						self.db.profile.config[k] = nil
+						LCD4WoW:RebuildOpts()
+					end,
+					order = 100
+				}
+			elseif v.type == "bar" then
+				options.widgets.args.bar.args[k:gsub(" ", "_")] = {
+					name = k,
+					type = "group",
+					args = WidgetBar:GetOptions(LCD4WoW, v, k),
+					order = 1
+				}
+				options.widgets.args.bar.args[k:gsub(" ", "_")].args.delete = {
+					name = "Delete",
+					type = "execute",
+					func = function()
+						self.db.profile.config[k] = nil
+						LCD4WoW:RebuildOpts()
+					end,
+					order = 100
+				}
+			elseif v.type == "histogram" then
+				options.widgets.args.histogram.args[k:gsub(" ", "_")] = {
+					name = k,
+					type = "group",
+					args = WidgetHistogram:GetOptions(LCD4WoW, v, k),
+					order = 1
+				}
+				options.widgets.args.histogram.args[k:gsub(" ", "_")].args.delete = {
+					name = "Delete",
+					type = "execute",
+					func = function()
+						self.db.profile.config[k] = nil
+						LCD4WoW:RebuildOpts()
+					end,
+					order = 100
+				}
+			elseif v.type == "icon" then
+				options.widgets.args.icon.args[k:gsub(" ", "_")] = {
+					name = k,
+					type = "group",
+					args = {}, --WidgetIcon:GetOptions(LCD4WoW, v, k)},
+					order = 2
+				}
+				options.widgets.args.icon.args[k:gsub(" ", "_")].args.delete = {
+					name = "Delete",
+					type = "execute",
+					func = function()
+						self.db.profile.config[k] = nil
+						LCD4WoW:RebuildOpts()
+					end,
+					order = 100
+				}
+			elseif v.type == "key" then
+				options.widgets.args.key.args[k:gsub(" ", "_")] = {
+					name = k,
+					type = "group",
+					args = WidgetKey:GetOptions(LCD4WoW, v, k),
+					order = 3
+				}
+				options.widgets.args.key.args[k:gsub(" ", "_")].args.delete = {
+					name = "Delete",
+					type = "execute",
+					func = function()
+						self.db.profile.config[k] = nil
+						LCD4WoW:RebuildOpts()
+					end,
+					order = 100
+				}
+			elseif v.type == "timer" then
+				options.widgets.args.timers.args[k:gsub(" ", "_")] = {
+					name = k,
+					type = "group",
+					args = WidgetTimer:GetOptions(LCD4WoW, v, k),
+					order = 3
+				}
+				options.widgets.args.timers.args[k:gsub(" ", "_")].args.delete = {
+					name = "Delete",
+					type = "execute",
+					func = function()
+						self.db.profile.config[k] = nil
+						LCD4WoW:RebuildOpts()
+					end,
+					order = 100
+				}
+			end
+		end
+	end
+end
+
+function mod:GetOptions()
+	self:RebuildOpts()
+	return options
+end
+
+function mod:OnInitialize()
+	self.db = LCD4WoW.db:RegisterNamespace(self:GetName(), defaults)
+	self.environment = {_G=_G}
+end
+
+function mod:OnEnable()
+	self:StartDisplays()
+end
+
+function mod:OnDisable()
+	self:StopDisplays()
+end
+
+function mod:StartDisplays()
+	for k, v in pairs(self.db.profile.config) do
+		if k:match("^display_") then
+			if v.driver == "QTip" then
+				local display = LibDriverQTip:New(self, self.environment, k, self.db.profile.config, LCD4WoW.db.profile.errorLevel)
+				display:Show()
+				tinsert(displays, display)
+			end
+		end
+	end
+end
+
+function mod:StopDisplays()
+	for i, v in ipairs(displays) do
+		v:Hide()
+		v:Del()
+	end
+	table.wipe(displays)
+end
+
+function mod:MODIFIER_STATE_CHANGED(ev, modifier, up, ...)
+	for i, display in ipairs(displays) do
+		display:KeyEvent(modifier, up)
+	end
+end
\ No newline at end of file
diff --git a/LCD4WoW.lua b/LCD4WoW.lua
new file mode 100644
index 0000000..4d70c8a
--- /dev/null
+++ b/LCD4WoW.lua
@@ -0,0 +1,143 @@
+LCD4WoW = StarTip or LibStub("AceAddon-3.0"):NewAddon("LCD4WoW: @project-version@", "AceConsole-3.0", "AceHook-3.0", "AceEvent-3.0")
+LCD4WoW.version = GetAddOnMetadata("LCD4WoW", "X-LCD4WoW-Version") or ""
+if StarTip then return end
+local LibDBIcon = LibStub("LibDBIcon-1.0")
+local LSM = _G.LibStub("LibSharedMedia-3.0")
+local LDB = LibStub:GetLibrary("LibDataBroker-1.1")
+local AceConfigDialog = LibStub("AceConfigDialog-3.0")
+local LibError = LibStub("StarLibError-1.0")
+local LibQTip = LibStub("LibQTip-1.0")
+
+local _G = _G
+local GameTooltip = _G.GameTooltip
+local ipairs, pairs = _G.ipairs, _G.pairs
+
+local LDB = LibStub("LibDataBroker-1.1"):NewDataObject("LCD4WoW", {
+	type = "data source",
+	text = "LCD4WoW",
+	icon = "Interface\\Icons\\INV_Chest_Cloth_17",
+	OnClick = function() LCD4WoW:OpenConfig() end
+})
+
+local defaults = {profile={minimap={}, modules={}, errorLevel=2}}
+
+local options = {
+	name = "LCD4WoW",
+	type = "group",
+	args = {}
+}
+
+function LCD4WoW:OnInitialize()
+	self.db = LibStub("AceDB-3.0"):New("LCD4WoWDB", defaults, "Default")
+
+	LibStub("AceConfig-3.0"):RegisterOptionsTable("LCD4WoW", options)
+	self:RegisterChatCommand("lcd4wow", "OpenConfig")
+	self:RegisterChatCommand("lcd4linux4wow", "OpenConfig")
+	AceConfigDialog:AddToBlizOptions("LCD4WoW")
+	LibDBIcon:Register("LCD4WoWLDB", LDB, self.db.profile.minimap)
+
+end
+
+function LCD4WoW:OnEnable()
+	if self.db.profile.minimap.hide then
+		LibDBIcon:Hide("LCD4WoWLDB")
+	else
+		LibDBIcon:Show("LCD4WoWLDB")
+	end
+
+	for k,v in self:IterateModules() do
+		if (self.db.profile.modules[k]  == nil and not v.defaultOff) or self.db.profile.modules[k] then
+			v:Enable()
+		end
+	end
+
+	self:RebuildOpts()
+
+	self:RegisterEvent("MODIFIER_STATE_CHANGED")
+end
+
+function LCD4WoW:OnDisable()
+	for k, v in self:IterateModules() do
+		v:Disable()
+	end
+	self:UnRegisterEvent("MODIFIER_STATE_CHANGED")
+end
+
+function LCD4WoW:OpenConfig()
+	AceConfigDialog:SetDefaultSize("LCD4WoW", 800, 450)
+	AceConfigDialog:Open("LCD4WoW")
+end
+
+
+function LCD4WoW:RebuildOpts()
+	local driver = self:GetModule("LCD4WoWDriver")
+	options.args = driver:GetOptions()
+	options.args.errorLevel = {
+		name = "Error Verbosity",
+		type = "select",
+		values = LibError.defaultTexts,
+		get = function()
+			return self.db.profile.errorLevel
+		end,
+		set = function(info, v)
+			self.db.profile.errorLevel = v
+		end,
+		order = 100
+	}
+end
+
+-- Taken from CowTip and modified a bit
+function LCD4WoW:MODIFIER_STATE_CHANGED(ev, modifier, up, ...)
+	for i, v in self:IterateModules() do
+		if v.MODIFIER_STATE_CHANGED then
+			v:MODIFIER_STATE_CHANGED(ev, modifier, up, ...)
+		end
+	end
+
+	local mod
+	if self.db.profile.modifier == 2 then
+		mod = (modifier == "LCTRL" or modifier == "RCTRL") and "LCTRL"
+		modifier = "LCTRL"
+	elseif self.db.profile.modifier == 3 then
+		mod = (modifier == "LALT" or modifier == "RALT") and "LALT"
+		modifier = "LALT"
+	elseif self.db.profilemodifier == 4 then
+		mod = (modifier == "LSHIFT" or modifier == "RSHIFT") and "LSHIFT"
+		modifier = "LSHIFT"
+	end
+
+	if mod ~= modifier then
+		return
+	end
+
+	if up == 0 then
+		GameTooltip:Hide()
+		return
+	end
+
+	local mouseover_unit = StarTip:GetMouseoverUnit()
+
+	local frame = GetMouseFocus()
+	if frame == WorldFrame or frame == UIParent then
+		if not UnitExists(mouseover_unit) then
+			GameTooltip:Hide()
+			return
+		end
+		GameTooltip:Hide()
+		GameTooltip_SetDefaultAnchor(GameTooltip, UIParent)
+		GameTooltip:SetUnit(mouseover_unit)
+		GameTooltip:Show()
+	else
+		local OnLeave, OnEnter = frame:GetScript("OnLeave"), frame:GetScript("OnEnter")
+		if OnLeave then
+			_G.this = frame
+			OnLeave(frame)
+			_G.this = nil
+		end
+		if OnEnter then
+			_G.this = frame
+			OnEnter(frame)
+			_G.this = nil
+		end
+	end
+end
diff --git a/LCDWoW.toc b/LCDWoW.toc
new file mode 100644
index 0000000..b118cd1
--- /dev/null
+++ b/LCDWoW.toc
@@ -0,0 +1,23 @@
+## Interface: 30000
+## Title: LCD4WoW
+## Notes: LCDs for WoW
+## Author: Starlon
+## Version: 1.0
+## X-LCD4WoW-Version: @project-version@
+## OptionalDeps: Ace3, LibTalentQuery-1.0, LibMobHealth-4.0, DBM-Core, BigWigs, StarLibs-1.0, StarTip
+## SavedVariables: LCD4WoWDB
+
+Localization\enUS.lua
+
+Libs\LibStub\LibStub.lua
+Libs\CallbackHandler-1.0\CallbackHandler-1.0.lua
+
+embeds.xml
+
+LCD4WoW.lua
+
+config.lua
+
+modules.xml
+
+
diff --git a/config.lua b/config.lua
new file mode 100644
index 0000000..5e08cb6
--- /dev/null
+++ b/config.lua
@@ -0,0 +1,369 @@
+
+
+local ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_MARQUEE, ALIGN_AUTOMATIC, ALIGN_PINGPONG = 1, 2, 3, 4, 5, 6
+local SCROLL_RIGHT, SCROLL_LEFT = 1, 2
+
+local foo = 500
+
+LCD4WoW.config = {
+    ["display_startip"] = {
+		["enabled"] = true,
+		["driver"] = "QTip",
+		["layers"] = 3,
+		["background"] = "d9ccf16f",
+		["rows"] = 6,
+		["cols"] = 30,
+		["timeout"] = 7000,
+		["transition_speed"] = 50,
+		["widgets"] = {"widget_key_up", "widget_key_down"},
+		["layouts"] = {"layout_startip", "layout_histogram"},
+		["font"] = {normal="Interface\\AddOns\\startip\\Fonts\\ttf-bitstream-vera-1.10\\VeraMo.ttf", bold="Interface\\AddOns\\startip\\Fonts\\ttf-bitstream-vera-1.10\\VeraMoBd.ttf", size=12},
+		--["font"] = {file = GameTooltipText:GetFont(), size = 12}
+    },
+	["layout_blank"] = {
+		["keyless"] = 1,
+		["layout-timeout"] = 0
+    },
+	["layout_startip"] = {
+		[1] = { -- row
+    		[1] = "widget_name_label", -- column
+    		[10] = "widget_name"
+        },
+		[2] = {
+    		[1] = "widget_class_label",
+    		[10] = "widget_class"
+        },
+		[3] = {
+			[1] = "widget_race_label",
+			[10] = "widget_race",
+		},
+		[4] = {
+			[1] = "widget_level_label",
+			[10] = "widget_level",
+		},
+		[5] = {
+			[1] = "widget_mem_label",
+			[10] = "widget_mem",
+			[20] = "widget_mem_bar"
+		},
+		[6] = {
+			[1] = "widget_cpu_label",
+			[10] = "widget_cpu",
+			[20] = "widget_cpu_bar"
+		},
+		["transition"] = 1,
+		["timeout"] = 5000
+    },
+	["layout_histogram"] = {
+		["layer2"] = {
+			[1] = {
+				[1] = "widget_mem_histogram"
+			},
+		},
+		["layer1"] = {
+			[3] = {
+				[1] = "widget_mem_perc"
+			}
+		},
+		["transition"] = 2,
+		["timeout"] = 5000
+	},
+	["widget_name_label"] = {
+		type = "text",
+		value = 'return "Name:"',
+		precision = 0xbabe,
+		align = ALIGN_RIGHT,
+		cols = 9,
+		color = "return 0xffffffff"
+	},
+	["widget_name"] = {
+		type = "text",
+		value = "return '--' .. select(1, UnitName('player')) .. '--'",
+		cols = 20,
+		align = ALIGN_PINGPONG,
+		update = 1000,
+		speed = 100,
+		direction = SCROLL_LEFT,
+		dontRtrim = true
+	},
+	["widget_class_label"] = {
+		type = "text",
+		value = 'return "Class:"',
+		cols = 9,
+		align = ALIGN_RIGHT
+	},
+	["widget_class"] = {
+		type = "text",
+		value = "return UnitClass('player')",
+		cols = 10
+	},
+	["widget_race_label"] = {
+		type = "text",
+		value = 'return "Race:"',
+		cols = 9,
+		align = ALIGN_RIGHT
+	},
+	["widget_race"] = {
+		type = "text",
+		value = "return UnitRace('player')",
+		cols = 10
+	},
+	["widget_level_label"] = {
+		type = "text",
+		value = 'return "Level:"',
+		cols = 9,
+		align = ALIGN_RIGHT,
+	},
+	["widget_level"] = {
+		type = "text",
+		value = "return UnitLevel('player')",
+		cols = 10
+	},
+	["widget_mem_label"] = {
+		type = "text",
+		value = "return 'Memory:'",
+		cols = 9,
+		align = ALIGN_RIGHT
+	},
+	["widget_mem"] = {
+		type = "text",
+		value = [[
+mem = GetMemUsage("StarTip")
+if mem then
+    return memshort(tonumber(format("%.2f", mem)))
+end
+]],
+		cols = 10,
+		update = 1000,
+		dontRtrim = true
+	},
+	["widget_mem_perc"] = {
+		type = "text",
+		value = [[
+mem, percent, memdiff, totalMem, totaldiff = GetMemUsage("StarTip")
+if mem then
+    if totaldiff == 0 then totaldiff = 1 end
+    return '--------' .. format("%.2f", memdiff / totaldiff * 100) .. "%" .. "-------"
+end
+]],
+		align = ALIGN_PINGPONG,
+		direction = SCROLL_RIGHT,
+		cols = 30,
+		update = 1000,
+		speed = 100,
+		dontRtrim = true
+	},
+	["widget_mem_bar"] = {
+		type = "bar",
+		expression = [[
+mem, percent, memdiff, totalMem, totaldiff = GetMemUsage("StarTip")
+if mem then
+    if totaldiff == 0 then return 0 end
+    return memdiff / totaldiff * 100
+end
+]],
+		min = "return 0",
+		max = "return 100",
+		length = 10
+	},
+	["widget_mem_histogram"] = {
+		type = "histogram",
+		expression = [[
+mem, percent, memdiff, totalMem, totaldiff = GetMemUsage("StarTip")
+if mem then
+    if totaldiff == 0 then return 0 end
+    return memdiff / totaldiff * 100
+end
+]],
+		min = "return 0",
+		max = "return 100",
+		width = 30,
+		height = 6,
+		layer = 1
+	},
+	["widget_cpu_label"] = {
+		type = "text",
+		value = "return 'CPU:'",
+		cols = 9,
+		align = ALIGN_RIGHT
+	},
+	["widget_cpu"] = {
+		type = "text",
+		value = [[
+cpu = GetCPUUsage("StarTip")
+if cpu then
+    return timeshort(cpu)
+end
+]],
+		cols = 10,
+		update = 1000,
+		dontRtrim = true
+	},
+	["widget_cpu_bar"] = {
+		type = "bar",
+		expression = [[
+cpu, percent, cpudiff, totalCPU, totaldiff = GetCPUUsage("StarTip")
+if cpu then
+    if totaldiff == 0 then return 0 end
+    return cpudiff / totaldiff * 100
+end
+]],
+		min = "return 0",
+		max = "return 100",
+		length = 10
+	},
+	["widget_cpu_histogram"] = {
+		type = "histogram",
+		expression = [[
+cpu, percent, cpudiff, totalCPU, totaldiff = GetCPUUsage("StarTip")
+if cpu then
+    if totaldiff == 0 then return 0 end
+    return cpudiff / totaldiff * 100
+end
+]],
+		min = "return 0",
+		max = "return 100",
+		width = 30,
+		height = 6
+	},
+	["widget_icon_blob"] = {
+		["bitmap"] = {
+    		["row1"] = ".....|.....|.....",
+    		["row2"] = ".....|.....|.***.",
+    		["row3"] = ".....|.***.|*...*",
+    		["row4"] = "..*..|.*.*.|*...*",
+    		["row5"] = ".....|.***.|*...*",
+    		["row6"] = ".....|.....|.***.",
+    		["row7"] = ".....|.....|.....",
+    		["row8"] = ".....|.....|....."
+        },
+		["speed"] = "return foo",
+		["type"] = "icon"
+    },
+	["widget_icon_ekg"] = {
+		["bitmap"] = {
+    		["row1"] = ".....|.....|.....|.....|.....|.....|.....|.....",
+    		["row2"] = ".....|....*|...*.|..*..|.*...|*....|.....|.....",
+    		["row3"] = ".....|....*|...*.|..*..|.*...|*....|.....|.....",
+    		["row4"] = ".....|....*|...**|..**.|.**..|**...|*....|.....",
+    		["row5"] = ".....|....*|...**|..**.|.**..|**...|*....|.....",
+    		["row6"] = ".....|....*|...*.|..*.*|.*.*.|*.*..|.*...|*....",
+    		["row7"] = "*****|*****|****.|***..|**..*|*..**|..***|.****",
+    		["row8"] = ".....|.....|.....|.....|.....|.....|.....|....."
+        },
+		["speed"] = "return foo",
+		["type"] = "icon"
+    },
+	["widget_icon_heart"] = {
+		["bitmap"] = {
+    		["row1"] = ".....|.....|.....|.....|.....|.....",
+    		["row2"] = ".*.*.|.....|.*.*.|.....|.....|.....",
+    		["row3"] = "*****|.*.*.|*****|.*.*.|.*.*.|.*.*.",
+    		["row4"] = "*****|.***.|*****|.***.|.***.|.***.",
+    		["row5"] = ".***.|.***.|.***.|.***.|.***.|.***.",
+    		["row6"] = ".***.|..*..|.***.|..*..|..*..|..*..",
+    		["row7"] = "..*..|.....|..*..|.....|.....|.....",
+    		["row8"] = ".....|.....|.....|.....|.....|....."
+        },
+		["speed"] = "return foo",
+		["type"] = "icon"
+    },
+	["widget_icon_heartbeat"] = {
+		["bitmap"] = {
+    		["row1"] = ".....|.....",
+    		["row2"] = ".*.*.|.*.*.",
+    		["row3"] = "*****|*.*.*",
+    		["row4"] = "*****|*...*",
+    		["row5"] = ".***.|.*.*.",
+    		["row6"] = ".***.|.*.*.",
+    		["row7"] = "..*..|..*..",
+    		["row8"] = ".....|....."
+        },
+		["speed"] = "return foo",
+		["type"] = "icon"
+    },
+	["widget_icon_karo"] = {
+		["bitmap"] = {
+    		["row1"] = ".....|.....|.....|.....|..*..|.....|.....|.....",
+    		["row2"] = ".....|.....|.....|..*..|.*.*.|..*..|.....|.....",
+    		["row3"] = ".....|.....|..*..|.*.*.|*...*|.*.*.|..*..|.....",
+    		["row4"] = ".....|..*..|.*.*.|*...*|.....|*...*|.*.*.|..*..",
+    		["row5"] = ".....|.....|..*..|.*.*.|*...*|.*.*.|..*..|.....",
+    		["row6"] = ".....|.....|.....|..*..|.*.*.|..*..|.....|.....",
+    		["row7"] = ".....|.....|.....|.....|..*..|.....|.....|.....",
+    		["row8"] = ".....|.....|.....|.....|.....|.....|.....|....."
+        },
+		["speed"] = "return foo",
+		["type"] = "icon"
+    },
+	["widget_icon_rain"] = {
+		["bitmap"] = {
+    		["row1"] = "...*.|.....|.....|.*...|....*|..*..|.....|*....",
+    		["row2"] = "*....|...*.|.....|.....|.*...|....*|..*..|.....",
+    		["row3"] = ".....|*....|...*.|.....|.....|.*...|....*|..*..",
+    		["row4"] = "..*..|.....|*....|...*.|.....|.....|.*...|....*",
+    		["row5"] = "....*|..*..|.....|*....|...*.|.....|.....|.*...",
+    		["row6"] = ".*...|....*|..*..|.....|*....|...*.|.....|.....",
+    		["row7"] = ".....|.*...|....*|..*..|.....|*....|...*.|.....",
+    		["row8"] = ".....|.....|.*...|....*|..*..|.....|*....|...*."
+        },
+		["speed"] = "return foo",
+		["type"] = "icon"
+    },
+	["widget_icon_squirrel"] = {
+		["bitmap"] = {
+    		["row1"] = ".....|.....|.....|.....|.....|.....",
+    		["row2"] = ".....|.....|.....|.....|.....|.....",
+    		["row3"] = ".....|.....|.....|.....|.....|.....",
+    		["row4"] = "**...|.**..|..**.|...**|....*|.....",
+    		["row5"] = "*****|*****|*****|*****|*****|*****",
+    		["row6"] = "...**|..**.|.**..|**...|*....|.....",
+    		["row7"] = ".....|.....|.....|.....|.....|.....",
+    		["row8"] = ".....|.....|.....|.....|.....|....."
+        },
+		["speed"] = "return foo",
+		["type"] = "icon"
+    },
+	["widget_icon_timer"] = {
+		["bitmap"] = {
+    		["row1"] = ".....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|",
+    		["row2"] = ".***.|.*+*.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.*++.|.+++.|.+*+.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|.+**.|",
+    		["row3"] = "*****|**+**|**++*|**+++|**++.|**++.|**+++|**+++|**+++|**+++|**+++|+++++|+++++|++*++|++**+|++***|++**.|++**.|++***|++***|++***|++***|++***|*****|",
+    		["row4"] = "*****|**+**|**+**|**+**|**+++|**+++|**+++|**+++|**+++|**+++|+++++|+++++|+++++|++*++|++*++|++*++|++***|++***|++***|++***|++***|++***|*****|*****|",
+    		["row5"] = "*****|*****|*****|*****|*****|***++|***++|**+++|*++++|+++++|+++++|+++++|+++++|+++++|+++++|+++++|+++++|+++**|+++**|++***|+****|*****|*****|*****|",
+    		["row6"] = ".***.|.***.|.***.|.***.|.***.|.***.|.**+.|.*++.|.+++.|.+++.|.+++.|.+++.|.+++.|.+++.|.+++.|.+++.|.+++.|.+++.|.++*.|.+**.|.***.|.***.|.***.|.***.|",
+    		["row7"] = ".....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|",
+    		["row8"] = ".....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|"
+        },
+		["speed"] = "return foo",
+		["type"] = "icon"
+    },
+	["widget_icon_wave"] = {
+		["bitmap"] = {
+    		["row1"] = "..**.|.**..|**...|*....|.....|.....|.....|.....|....*|...**",
+    		["row2"] = ".*..*|*..*.|..*..|.*...|*....|.....|.....|....*|...*.|..*..",
+    		["row3"] = "*....|....*|...*.|..*..|.*...|*....|....*|...*.|..*..|.*...",
+    		["row4"] = "*....|....*|...*.|..*..|.*...|*....|....*|...*.|..*..|.*...",
+    		["row5"] = "*....|....*|...*.|..*..|.*...|*....|....*|...*.|..*..|.*...",
+    		["row6"] = ".....|.....|....*|...*.|..*..|.*..*|*..*.|..*..|.*...|*....",
+    		["row7"] = ".....|.....|.....|....*|...**|..**.|.**..|**...|*....|.....",
+    		["row8"] = ".....|.....|.....|.....|.....|.....|.....|.....|.....|....."
+        },
+		["speed"] = "return foo",
+		["type"] = "icon"
+    },
+	["widget_key_down"] = {
+		["expression"] = "lcd.Transition(-1)",
+		["key"] = 2,
+		["type"] = "key"
+    },
+	["widget_key_up"] = {
+		["expression"] = "lcd.Transition(1)",
+		["key"] = 1,
+		["type"] = "key"
+    },
+	["widget_percent"] = {
+		["expression"] = "'%'",
+		["type"] = "text"
+    }
+}
\ No newline at end of file
diff --git a/embeds.xml b/embeds.xml
new file mode 100644
index 0000000..67ef9ed
--- /dev/null
+++ b/embeds.xml
@@ -0,0 +1,23 @@
+<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
+..\FrameXML\UI.xsd">
+
+<Include file = "Libs\StarLibs-1.0\StarLibs-1.0.xml"/>
+
+<Include file = "Libs\AceAddon-3.0\AceAddon-3.0.xml"/>
+<Include file = "Libs\AceEvent-3.0\AceEvent-3.0.xml"/>
+<Include file = "Libs\AceHook-3.0\AceHook-3.0.xml"/>
+<Include file = "Libs\AceDB-3.0\AceDB-3.0.xml"/>
+<Include file = "Libs\AceDBOptions-3.0\AceDBOptions-3.0.xml"/>
+<Include file = "Libs\AceConsole-3.0\AceConsole-3.0.xml"/>
+<Include file = "Libs\AceGUI-3.0\AceGUI-3.0.xml"/>
+<Include file = "Libs\AceLocale-3.0\AceLocale-3.0.xml"/>
+<Include file = "Libs\AceConfig-3.0\AceConfig-3.0.xml"/>
+<Include file = "Libs\AceTimer-3.0\AceTimer-3.0.xml"/>
+
+<Include file = "Libs\LibSharedMedia-3.0\lib.xml"/>
+<Include file = "Libs\LibMobHealth-4.0\lib.xml"/>
+<Script file = "Libs\LibTalentQuery-1.0\LibTalentQuery-1.0.lua"/>
+<Script file = "Libs\LibDatabroker-1.1\LibDatabroker-1.1.lua"/>
+<Script file = "Libs\LibDBIcon-1.0\LibDBIcon-1.0.lua"/>
+
+</Ui>
diff --git a/modules.xml b/modules.xml
new file mode 100644
index 0000000..d1e7e98
--- /dev/null
+++ b/modules.xml
@@ -0,0 +1,6 @@
+<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
+..\FrameXML\UI.xsd">
+
+<Script file = "Driver.lua"/>
+
+</Ui>