Mercurial > wow > cyborg-mmo7
changeset 0:bf9220814fb5
The first version of the Cyborg MMO7 addon for warcraft
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CallbackFactory.lua Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,127 @@ +--~ Warcraft Plugin for Cyborg MMO7 +--~ Filename: CalbackFactory.lua +--~ Description: Creates lua callbacks that can be executed from a user keycombination +--~ Copyright (C) 2012 Mad Catz Inc. +--~ Author: Christopher Hooks + +--~ This program is free software; you can redistribute it and/or +--~ modify it under the terms of the GNU General Public License +--~ as published by the Free Software Foundation; either version 2 +--~ of the License, or (at your option) any later version. + +--~ This program is distributed in the hope that it will be useful, +--~ but WITHOUT ANY WARRANTY; without even the implied warranty of +--~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--~ GNU General Public License for more details. + +--~ You should have received a copy of the GNU General Public License +--~ along with this program; if not, write to the Free Software +--~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +CallbackFactory = { + new = function() + local self = {} + self.Frame = CreateFrame("Frame","CallbackFactoryFrame", UIParent); + self.Callbacks = {} + self.Id = 1; + + self.AddCallback = function(fn) + local name = "Button"..self.Id + self.Callbacks[name] = CreateFrame("Button", name, self.Frame) + self.Callbacks[name]:SetScript("OnClick", fn); + self.Id = self.Id + 1; + return self.Callbacks[name], self.Frame, name; + end + + self.RemoveCallback = function(name) + self.Callbacks[name] = nil + end + + return self; + end, + + m_Instance = nil, + + Instance = function() + if(nil == CallbackFactory.m_Instance) then + CallbackFactory.m_Instance = CallbackFactory.new(); + end + return CallbackFactory.m_Instance; + end + +} + + +GetCallback = function(callbackName) + local callback = nil + if("Map" == callbackName) then + callback = ToggleMap; + elseif("CharacterPage" == callbackName) then + callback = ToggleCharacterPage; + elseif("Spellbook" == callbackName) then + callback = ToggleSpellbook; + elseif("Macros" == callbackName) then + callback = ToggleMacros; + elseif("QuestLog" == callbackName) then + callback = ToggleQuests; + elseif("Achievement" == callbackName) then + callback = ToggleAchievements; + elseif("Inventory" == callbackName) then + callback = ToggleBags; + end; + return callback; +end + + +ToggleMap = function() + ToggleFrame(WorldMapFrame) +end + +ToggleCharacterPage = function() + ToggleCharacter("PaperDollFrame") +end + +ToggleSpellbook = function() + ToggleFrame(SpellBookFrame) + if(SpellBookFrame:IsShown()) then + SpellbookMicroButton:SetButtonState("PUSHED", 1); + else + SpellbookMicroButton:SetButtonState("NORMAL"); + end + +end + +ToggleMacros = function() + if(MacroFrame:IsShown() and MacroFrame:IsVisible()) then + HideUIPanel(MacroFrame); + else + ShowMacroFrame(); + end +end + +ToggleQuests = function() + ToggleFrame(QuestLogFrame); + if ( QuestLogFrame:IsShown() ) then + QuestLogMicroButton:SetButtonState("PUSHED", 1); + else + QuestLogMicroButton:SetButtonState("NORMAL"); + end +end + +ToggleAchievements = function() + ToggleAchievementFrame(); + if ( AchievementFrame and AchievementFrame:IsShown() ) then + AchievementMicroButton:SetButtonState("PUSHED", 1); + else + if ( ( HasCompletedAnyAchievement() or IsInGuild() ) and CanShowAchievementUI() ) then + AchievementMicroButton:Enable(); + AchievementMicroButton:SetButtonState("NORMAL"); + else + AchievementMicroButton:Disable(); + end + end +end + +ToggleBags = function() + ToggleAllBags(); +end \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CyborgMMO7.lua Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,664 @@ +--~ Warcraft Plugin for Cyborg MMO7 +--~ Filename: CyborgMMO7.lua +--~ Description: Plugin entry point, String tables and other generic crap that I could not think to put anywhere else. +--~ Copyright (C) 2012 Mad Catz Inc. +--~ Author: Christopher Hooks + +--~ This program is free software; you can redistribute it and/or +--~ modify it under the terms of the GNU General Public License +--~ as published by the Free Software Foundation; either version 2 +--~ of the License, or (at your option) any later version. + +--~ This program is distributed in the hope that it will be useful, +--~ but WITHOUT ANY WARRANTY; without even the implied warranty of +--~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--~ GNU General Public License for more details. + +--~ You should have received a copy of the GNU General Public License +--~ along with this program; if not, write to the Free Software +--~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +Mode = { + ["enUS"] = { + "ALT-CTRL-E", + "ALT-CTRL-F", + "ALT-CTRL-[" + }, + ["frFR"] = { + "ALT-CTRL-E", + "ALT-CTRL-F", + "ALT-CTRL-^" + }, + ["deDE"] = { + "ALT-CTRL-E", + "ALT-CTRL-F", + "ALT-CTRL-ü" + }, + ["zhCN"] = { + "ALT-CTRL-E", + "ALT-CTRL-F", + "ALT-CTRL-[" + }, + ["zhTW"] = { + "ALT-CTRL-E", + "ALT-CTRL-F", + "ALT-CTRL-[" + }, + ["esES"] = { + "ALT-CTRL-E", + "ALT-CTRL-F", + "ALT-CTRL-'" + }, + ["esMX"] = { + "ALT-CTRL-E", + "ALT-CTRL-F", + "ALT-CTRL-'" + } +} + +WowCommands = { + ["enUS"] = { + "ALT-CTRL-NUMPAD1", + "ALT-CTRL-NUMPAD2", + "ALT-CTRL-NUMPAD3", + "ALT-CTRL-NUMPAD4", + "ALT-CTRL-NUMPAD5", + "ALT-CTRL-NUMPAD6", + "ALT-CTRL-NUMPAD7", + "ALT-CTRL-NUMPAD8", + "ALT-CTRL-NUMPAD9", + "ALT-CTRL-NUMPAD0", + "ALT-CTRL-1", + "ALT-CTRL-2", + "ALT-CTRL-3", + "ALT-CTRL-4", + "ALT-CTRL-5", + "ALT-CTRL-6", + "ALT-CTRL-7", + "ALT-CTRL-8", + "ALT-CTRL-9", + "ALT-CTRL-0", + "ALT-CTRL-F1", + "ALT-CTRL-F2", + "ALT-CTRL-F3", + "ALT-CTRL-F4", + "ALT-CTRL-F5", + "ALT-CTRL-F6", + "ALT-CTRL-F7", + "ALT-CTRL-F8", + "ALT-CTRL-F9", + "ALT-CTRL-F10", + "ALT-CTRL-F11", + "ALT-CTRL-F12", + "ALT-CTRL--", + "ALT-CTRL-H", + "ALT-CTRL-A", + "ALT-CTRL-B", + "ALT-CTRL-C", + "ALT-CTRL-D", + "ALT-CTRL-END" + }, + ["frFR"] = { + "ALT-CTRL-NUMPAD1", + "ALT-CTRL-NUMPAD2", + "ALT-CTRL-NUMPAD3", + "ALT-CTRL-NUMPAD4", + "ALT-CTRL-NUMPAD5", + "ALT-CTRL-NUMPAD6", + "ALT-CTRL-NUMPAD7", + "ALT-CTRL-NUMPAD8", + "ALT-CTRL-NUMPAD9", + "ALT-CTRL-NUMPAD0", + "ALT-CTRL-1", + "ALT-CTRL-2", + "ALT-CTRL-3", + "ALT-CTRL-4", + "ALT-CTRL-5", + "ALT-CTRL-6", + "ALT-CTRL-7", + "ALT-CTRL-8", + "ALT-CTRL-9", + "ALT-CTRL-0", + "ALT-CTRL-F1", + "ALT-CTRL-F2", + "ALT-CTRL-F3", + "ALT-CTRL-F4", + "ALT-CTRL-F5", + "ALT-CTRL-F6", + "ALT-CTRL-F7", + "ALT-CTRL-F8", + "ALT-CTRL-F9", + "ALT-CTRL-F10", + "ALT-CTRL-F11", + "ALT-CTRL-F12", + "ALT-CTRL-)", + "ALT-CTRL-H", + "ALT-CTRL-Q", + "ALT-CTRL-B", + "ALT-CTRL-C", + "ALT-CTRL-D", + "ALT-CTRL-END" + }, + ["deDE"] = { + "ALT-CTRL-NUMPAD1", + "ALT-CTRL-NUMPAD2", + "ALT-CTRL-NUMPAD3", + "ALT-CTRL-NUMPAD4", + "ALT-CTRL-NUMPAD5", + "ALT-CTRL-NUMPAD6", + "ALT-CTRL-NUMPAD7", + "ALT-CTRL-NUMPAD8", + "ALT-CTRL-NUMPAD9", + "ALT-CTRL-NUMPAD0", + "ALT-CTRL-1", + "ALT-CTRL-2", + "ALT-CTRL-3", + "ALT-CTRL-4", + "ALT-CTRL-5", + "ALT-CTRL-6", + "ALT-CTRL-7", + "ALT-CTRL-8", + "ALT-CTRL-9", + "ALT-CTRL-0", + "ALT-CTRL-F1", + "ALT-CTRL-F2", + "ALT-CTRL-F3", + "ALT-CTRL-F4", + "ALT-CTRL-F5", + "ALT-CTRL-F6", + "ALT-CTRL-F7", + "ALT-CTRL-F8", + "ALT-CTRL-F9", + "ALT-CTRL-F10", + "ALT-CTRL-F11", + "ALT-CTRL-F12", + "ALT-CTRL-ß", + "ALT-CTRL-H", + "ALT-CTRL-A", + "ALT-CTRL-B", + "ALT-CTRL-C", + "ALT-CTRL-D", + "ALT-CTRL-END" + }, + ["zhCN"] = { + "ALT-CTRL-NUMPAD1", + "ALT-CTRL-NUMPAD2", + "ALT-CTRL-NUMPAD3", + "ALT-CTRL-NUMPAD4", + "ALT-CTRL-NUMPAD5", + "ALT-CTRL-NUMPAD6", + "ALT-CTRL-NUMPAD7", + "ALT-CTRL-NUMPAD8", + "ALT-CTRL-NUMPAD9", + "ALT-CTRL-NUMPAD0", + "ALT-CTRL-1", + "ALT-CTRL-2", + "ALT-CTRL-3", + "ALT-CTRL-4", + "ALT-CTRL-5", + "ALT-CTRL-6", + "ALT-CTRL-7", + "ALT-CTRL-8", + "ALT-CTRL-9", + "ALT-CTRL-0", + "ALT-CTRL-F1", + "ALT-CTRL-F2", + "ALT-CTRL-F3", + "ALT-CTRL-F4", + "ALT-CTRL-F5", + "ALT-CTRL-F6", + "ALT-CTRL-F7", + "ALT-CTRL-F8", + "ALT-CTRL-F9", + "ALT-CTRL-F10", + "ALT-CTRL-F11", + "ALT-CTRL-F12", + "ALT-CTRL--", + "ALT-CTRL-H", + "ALT-CTRL-A", + "ALT-CTRL-B", + "ALT-CTRL-C", + "ALT-CTRL-D", + "ALT-CTRL-END" + }, + ["zhTW"] = { + "ALT-CTRL-NUMPAD1", + "ALT-CTRL-NUMPAD2", + "ALT-CTRL-NUMPAD3", + "ALT-CTRL-NUMPAD4", + "ALT-CTRL-NUMPAD5", + "ALT-CTRL-NUMPAD6", + "ALT-CTRL-NUMPAD7", + "ALT-CTRL-NUMPAD8", + "ALT-CTRL-NUMPAD9", + "ALT-CTRL-NUMPAD0", + "ALT-CTRL-1", + "ALT-CTRL-2", + "ALT-CTRL-3", + "ALT-CTRL-4", + "ALT-CTRL-5", + "ALT-CTRL-6", + "ALT-CTRL-7", + "ALT-CTRL-8", + "ALT-CTRL-9", + "ALT-CTRL-0", + "ALT-CTRL-F1", + "ALT-CTRL-F2", + "ALT-CTRL-F3", + "ALT-CTRL-F4", + "ALT-CTRL-F5", + "ALT-CTRL-F6", + "ALT-CTRL-F7", + "ALT-CTRL-F8", + "ALT-CTRL-F9", + "ALT-CTRL-F10", + "ALT-CTRL-F11", + "ALT-CTRL-F12", + "ALT-CTRL--", + "ALT-CTRL-H", + "ALT-CTRL-A", + "ALT-CTRL-B", + "ALT-CTRL-C", + "ALT-CTRL-D", + "ALT-CTRL-END" + }, + ["esES"] = { + "ALT-CTRL-NUMPAD1", + "ALT-CTRL-NUMPAD2", + "ALT-CTRL-NUMPAD3", + "ALT-CTRL-NUMPAD4", + "ALT-CTRL-NUMPAD5", + "ALT-CTRL-NUMPAD6", + "ALT-CTRL-NUMPAD7", + "ALT-CTRL-NUMPAD8", + "ALT-CTRL-NUMPAD9", + "ALT-CTRL-NUMPAD0", + "ALT-CTRL-1", + "ALT-CTRL-2", + "ALT-CTRL-3", + "ALT-CTRL-4", + "ALT-CTRL-5", + "ALT-CTRL-6", + "ALT-CTRL-7", + "ALT-CTRL-8", + "ALT-CTRL-9", + "ALT-CTRL-0", + "ALT-CTRL-F1", + "ALT-CTRL-F2", + "ALT-CTRL-F3", + "ALT-CTRL-F4", + "ALT-CTRL-F5", + "ALT-CTRL-F6", + "ALT-CTRL-F7", + "ALT-CTRL-F8", + "ALT-CTRL-F9", + "ALT-CTRL-F10", + "ALT-CTRL-F11", + "ALT-CTRL-F12", + "ALT-CTRL-'", + "ALT-CTRL-H", + "ALT-CTRL-A", + "ALT-CTRL-B", + "ALT-CTRL-C", + "ALT-CTRL-D", + "ALT-CTRL-END" + }, + ["esMX"] = { + "ALT-CTRL-NUMPAD1", + "ALT-CTRL-NUMPAD2", + "ALT-CTRL-NUMPAD3", + "ALT-CTRL-NUMPAD4", + "ALT-CTRL-NUMPAD5", + "ALT-CTRL-NUMPAD6", + "ALT-CTRL-NUMPAD7", + "ALT-CTRL-NUMPAD8", + "ALT-CTRL-NUMPAD9", + "ALT-CTRL-NUMPAD0", + "ALT-CTRL-1", + "ALT-CTRL-2", + "ALT-CTRL-3", + "ALT-CTRL-4", + "ALT-CTRL-5", + "ALT-CTRL-6", + "ALT-CTRL-7", + "ALT-CTRL-8", + "ALT-CTRL-9", + "ALT-CTRL-0", + "ALT-CTRL-F1", + "ALT-CTRL-F2", + "ALT-CTRL-F3", + "ALT-CTRL-F4", + "ALT-CTRL-F5", + "ALT-CTRL-F6", + "ALT-CTRL-F7", + "ALT-CTRL-F8", + "ALT-CTRL-F9", + "ALT-CTRL-F10", + "ALT-CTRL-F11", + "ALT-CTRL-F12", + "ALT-CTRL-'", + "ALT-CTRL-H", + "ALT-CTRL-A", + "ALT-CTRL-B", + "ALT-CTRL-C", + "ALT-CTRL-D", + "ALT-CTRL-END" + } +} + + +StringTable = { + ["enUS"] = { + CyborgButtonTitle="Cyborg Button", + MiniMapButtonTitle="MiniMap Button", + OptionPageTitle="Cyborg MMO7", + OptionPageSetDefaults="Default", + CyborgSizeSliderTitle="Cyborg Head Size", + PluginSizeSliderTitle="Interface Window Size" + }, + ["frFR"] = { + CyborgButtonTitle="Bouton Cyborg", + MiniMapButtonTitle="Bouton minimap", + OptionPageTitle="Cyborg MMO7", + OptionPageSetDefaults="Par défaut", + CyborgSizeSliderTitle="Dimension de la tête Cyborg", + PluginSizeSliderTitle="Dimension de la fenêtre d'interface" + }, + ["deDE"] = { + CyborgButtonTitle="Cyborg-Taste", + MiniMapButtonTitle="MiniMap-Taste", + OptionPageTitle="Cyborg MMO7", + OptionPageSetDefaults="Standard", + CyborgSizeSliderTitle="Größe des Cyborg-Kopfes", + PluginSizeSliderTitle="Größe des Schnittstellenfensters" + }, + ["zhCN"] = { + CyborgButtonTitle="Cyborg 按钮", + MiniMapButtonTitle="“迷你地图”按钮", + OptionPageTitle="Cyborg MMO7", + OptionPageSetDefaults="默认", + CyborgSizeSliderTitle="Cyborg 标题大小", + PluginSizeSliderTitle="界面窗口大小" + }, + ["zhTW"] = { + CyborgButtonTitle="Cyborg 按鈕", + MiniMapButtonTitle="MiniMap 按鈕", + OptionPageTitle="Cyborg MMO7", + OptionPageSetDefaults="預設", + CyborgSizeSliderTitle="Cyborg 頭大小", + PluginSizeSliderTitle="介面視窗大小" + }, + ["esES"] = { + CyborgButtonTitle="Botón Cyborg", + MiniMapButtonTitle="Botón Minimapa", + OptionPageTitle="Cyborg MMO7", + OptionPageSetDefaults="Predeterminado", + CyborgSizeSliderTitle="Tamaño de la cabeza de Cyborg", + PluginSizeSliderTitle="Tamaño de la ventana de la interfaz" + }, + ["esMX"] = { + CyborgButtonTitle="Botón de Cyborg", + MiniMapButtonTitle="Botón de Minimapa", + OptionPageTitle="Cyborg MMO7", + OptionPageSetDefaults="Modo predeterminado", + CyborgSizeSliderTitle="Tamaño de la cabeza de Cyborg", + PluginSizeSliderTitle="Tamaño de la ventana de interfaz" + } +} + +function LoadStrings(self) + self:SetText(StringTable[GetLocale()][self:GetName()]); +end + +local VarsLoaded = false; +local EnteredWorld = false; +local LoadBinding = false; +local SaveName = GetRealmName().."_"..UnitName("player"); +local Settings = nil; + + + +function CyborgMiniMapButton_Reposition(pos) + CyborgMiniMapFrame:SetPoint("TOPLEFT", + "Minimap", + "TOPLEFT", + 52-(80*cos(pos)), + (80*sin(pos))-52) +end + + +function CyborgMiniMapButton_OnUpdate() + + local xpos,ypos = GetCursorPosition() + local xmin,ymin = Minimap:GetLeft(), Minimap:GetBottom() + + xpos = (xmin)-(xpos / UIParent:GetScale()) + ypos = (ypos/ UIParent:GetScale())-(ymin) + + local degrees = math.deg(math.atan2(ypos,xpos)); + + while(degrees < 0) do + degrees = degrees + 360; + end + + + CyborgMiniMapButton_Reposition(degrees) +end + +function MouseModeChange(mode) + local MiniMapTexture = getglobal("CyborgMiniMapButton_Icon") + local MiniMapGlowTexture = getglobal("CyborgMiniMapButton_IconGlow") + local OpenButtonTexture = getglobal("OpenButtonPage".."OpenMainForm"):GetNormalTexture(); + local OpenButtonGlowTexture = getglobal("OpenButtonPage".."OpenMainForm"):GetHighlightTexture(); + if(1==mode) then + MiniMapTexture:SetVertexColor(1,0,0,1) + --MiniMapGlowTexture:SetVertexColor(1,0.26,0.26,.75); + OpenButtonTexture:SetVertexColor(1,0,0,0.75); + --OpenButtonGlowTexture:SetVertexColor(1,0.26,0.26,0.50); + elseif(2==mode) then + MiniMapTexture:SetVertexColor(0.07,0.22,1,1) + MiniMapGlowTexture:SetVertexColor(0.13,0.56,1,.75); + OpenButtonTexture:SetVertexColor(0.07,0.22,1,0.75); + OpenButtonGlowTexture:SetVertexColor(0.13,0.56,1,0.5); + elseif(3==mode) then + MiniMapTexture:SetVertexColor(0.52,0.08,0.89,1) + MiniMapGlowTexture:SetVertexColor(0.67,0.31,0.85,.75); + OpenButtonTexture:SetVertexColor(0.52,0.08,0.89,0.75); + OpenButtonGlowTexture:SetVertexColor(0.67,0.31,0.85,0.5); + end +end + +function GetSaveData() + if(VarsLoaded) then + if (CyborgMMO7SaveData == nil) then + CyborgMMO7SaveData = {}; + CyborgMMO7SaveData[SaveName] = {} + end + return CyborgMMO7SaveData[SaveName]; + end + return nil; +end + +function SetSaveData(data, index) + if(VarsLoaded) then + GetSaveData()[index] = data + end +end + +function Event(self, event, ...) + if(event == "VARIABLES_LOADED") then + VarsLoaded = true; + elseif(event == "PLAYER_ENTERING_WORLD") then + EnteredWorld = true; + elseif(event == "PLAYER_ENTER_COMBAT") then + msg("PLAYER_ENTER_COMBAT"); + Close(); + elseif(event == nil) then + msg("Event is nil"); + else + msg("Event is not nil"); + end + + + -- Fire Loading if and only if the player is in the world and vars are loaded + if(false == LoadBinding) then + if(VarsLoaded) then + if(EnteredWorld) then + local data = GetSaveData() + + RatPageModel.Instance().LoadData(); + LoadBinding = true; + + ShowMacroFrame(); + HideUIPanel(MacroFrame); + + + SetupModeCallbacks(1); + SetupModeCallbacks(2); + SetupModeCallbacks(3); + + + --Reload Slider values: + if(nil == data["Settings"]) then + data["Settings"] = {} + data["Settings"]["Cyborg"] = 0.75; + data["Settings"]["Plugin"] = 0.75; + data["Settings"]["MiniMapButton"] = true; + data["Settings"]["CyborgButton"] = true; + end + + Settings = data["Settings"]; + + CyborgSizeSlider:SetValue(Settings["Cyborg"]); + SetOpenButtonSize(Settings["Cyborg"]) + PluginSizeSlider:SetValue(Settings["Plugin"]); + SetMainPageSize(Settings["Plugin"]); + + if(Settings["MiniMapButton"] == false) then + CyborgMiniMapButton:Hide(); + end + + local xmin,ymin = Minimap:GetLeft(), Minimap:GetBottom() + CyborgMiniMapButton_Reposition(math.deg(math.atan2(ymin,xmin))) + -- Close the main window for now + Close(); + end + end + end +end + +function SetDefaultSettings() + OpenButtonPageOpenMainForm:ClearAllPoints(); + MainPage:ClearAllPoints(); + OpenButtonPageOpenMainForm:SetPoint("LEFT", UIParent, "LEFT", 0, 0); + MainPage:SetPoint("LEFT", UIParent, "LEFT", 0, 0); + + SetOpenButtonSize(0.75); + SetMainPageSize(0.75); + MiniMapButton:SetChecked(); + SetMiniMapButton(true); + CyborgButton:SetChecked(); + SetCyborgHeadButton(true); +end + +function SetupModeCallbacks(modeNum) + + fn = function() + MouseModeChange(modeNum); + RatPageModel.Instance().SetMode(modeNum) + end + + local buttonFrame, parentFrame, name = CallbackFactory.Instance().AddCallback(fn); + if(1 ~= SetOverrideBindingClick(parentFrame, true, Mode[GetLocale()][modeNum], name, "LeftButton")) then + msg("Failed to Bind modeChange"); + end +end + +function Loaded() + MainPage:RegisterEvent("VARIABLES_LOADED"); + MainPage:RegisterEvent("PLAYER_ENTERING_WORLD"); + MainPage:RegisterEvent("PLAYER_ENTER_COMBAT"); +end + +function Close() + MainPage:Hide(); + if(Settings["CyborgButton"] == true) then + OpenButtonPage:Show(); + end +end + +function Open() + MainPage:Show(); + RatQuickPage:Hide(); + if(Settings["CyborgButton"] == true) then + OpenButtonPage:Show(); + end +end + +function IsOpen() + if(MainPage:IsVisible() == 1) then + return true; + else + return false; + end +end + +function Toggle() + if(IsOpen()) then + Close(); + else + Open(); + end +end + +function msg(m) + local id, name = GetChannelName("Debug"); + SendChatMessage(m, "CHANNEL", nil, id); +end + +function SetMainPageSize(percent) + if(VarsLoaded) then + if(EnteredWorld) then + MainPage:SetScale(percent); + Settings["Plugin"] = percent; + local data = GetSaveData() + data["Settings"] = Settings + PluginSizeSlider:SetValue(percent); + end + end +end + +function SetOpenButtonSize(percent) + if(VarsLoaded) then + if(EnteredWorld) then + OpenButtonPage:SetScale(percent) + Settings["Cyborg"] = percent; + local data = GetSaveData() + data["Settings"] = Settings + CyborgSizeSlider:SetValue(percent); + end + end +end + +function SetCyborgHeadButton(boolVal) + Settings["CyborgButton"] = boolVal; + if(Settings["CyborgButton"] == true) then + Close(); + else + OpenButtonPage:Hide(); + end + local data = GetSaveData() + data["Settings"] = Settings +end + +function SetMiniMapButton(boolVal) + Settings["MiniMapButton"] = boolVal; + if(Settings["MiniMapButton"] == true) then + CyborgMiniMapButton:Show(); + else + CyborgMiniMapButton:Hide(); + end + local data = GetSaveData() + data["Settings"] = Settings +end +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CyborgMMO7.toc Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,19 @@ +## Interface: 40300 +## Title: Cyborg MMO7 Addon +## DefaultState: Enabled +## Version: 1.0.0 +## LoadOnDemand: 0 +## SavedVariablesPerCharacter: CyborgMMO7SaveData + +OptionView.lua +CallbackFactory.lua +WowObjects.lua +RatPageModel.lua +RatPageController.lua +RatPageView.lua +CyborgMMO7.lua +RatPage.xml +RatQuickPage.xml +MainPage.xml +OpenButtonPage.xml +OptionPage.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MainPage.xml Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,199 @@ +<Ui xmlns="http://www.blizzard.com/wow/ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <!-- + Warcraft Plugin for Cyborg MMO7 + Filename: MainPage.xml + Description: Xml description of the MMO7 UI + Copyright (C) 2012 Mad Catz Inc. + Author: Christopher Hooks + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + --> + + <!-- UIButtonsTemplate--> + <Button name="WowCallbackButtonsTemplate" virtual="true" inherits="IconTemplate"> + <Scripts> + <OnLoad> + self = CallbackIcons.new(self); + </OnLoad> + <OnClick> + self.OnClick(); + </OnClick> + <OnDragStart> + self.DragStart(); + </OnDragStart> + <OnDragStop> + self.DragStop(); + </OnDragStop> + </Scripts> + </Button> + + <!-- The Main Form --> + <Frame name="MainPage" movable="true" enableMouse="true" clampedtoscreen="true" frameStrata="MEDIUM"> + <TitleRegion> + <Size x="512" y="512"/> + <Anchors> + <Anchor point="LEFT"> + <Offset> + <AbsDimension x="0" + y="0" /> + </Offset> + </Anchor> + </Anchors> + </TitleRegion> + <Size> + <AbsDimension x="512" y="512" /> + </Size> + <Anchors> + <Anchor point="LEFT" relativeTo="UIParent"> + <Offset> + <AbsDimension x="0" y="0" /> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="BACKGROUND"> + <Texture name="BackgroundTexture" + file="Interface\AddOns\CyborgMMO7\Graphics\ParchmentAndAllIcons.tga" > + <Size> + <AbsDimension x="512" + y="512" /> + </Size> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="0" + y="0" /> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + <Layer level="ARTWORK"> + <Texture name="RatCalloutsTexture" + file="Interface\AddOns\CyborgMMO7\Graphics\Lines.tga" > + + <Size> + <AbsDimension x="512" + y="512" /> + </Size> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="0" + y="0" /> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + <Frames> + <Button name="CharacterPage" inherits="WowCallbackButtonsTemplate" resize="false"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="379" y="-411" /> + </Offset> + </Anchor> + </Anchors> + </Button> + <Button name="Inventory" inherits="WowCallbackButtonsTemplate"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="379" y="-446" /> + </Offset> + </Anchor> + </Anchors> + </Button> + <Button name="Spellbook" inherits="WowCallbackButtonsTemplate"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="414" y="-411" /> + </Offset> + </Anchor> + </Anchors> + </Button> + <Button name="Macros" inherits="WowCallbackButtonsTemplate"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="449" y="-446" /> + </Offset> + </Anchor> + </Anchors> + </Button> + <Button name="Achievement" inherits="WowCallbackButtonsTemplate"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="449" y="-411" /> + </Offset> + </Anchor> + </Anchors> + </Button> + <Button name="QuestLog" inherits="WowCallbackButtonsTemplate"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="344" y="-446" /> + </Offset> + </Anchor> + </Anchors> + </Button> + <Button name="Map" inherits="WowCallbackButtonsTemplate"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="414" y="-446" /> + </Offset> + </Anchor> + </Anchors> + </Button> + <Button name="$parentCloseButton"> + <Size> + <AbsDimension x="23" y="24" /> + </Size> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="474" y="-8" /> + </Offset> + </Anchor> + </Anchors> + <Scripts> + <OnClick>Close()</OnClick> + </Scripts> + <NormalTexture file="Interface\AddOns\CyborgMMO7\Graphics\CloseButton.tga"/> + <PushedTexture file="Interface\AddOns\CyborgMMO7\Graphics\CloseButtonDown.tga"/> + <HighlightTexture file="Interface\AddOns\CyborgMMO7\Graphics\CloseButtonOver.tga" alpha=".5"/> + </Button> + <Frame name="defaultPage" inherits="RatPageTemplate"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Frame> + </Frames> + <Scripts> + <OnLoad>Loaded();</OnLoad> + <OnEvent>Event(this, event,...);</OnEvent> + </Scripts> + </Frame> +</Ui>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OpenButtonPage.xml Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,185 @@ +<Ui xmlns="http://www.blizzard.com/wow/ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <!-- + Warcraft Plugin for Cyborg MMO7 + Filename: OpenButtonPage.xml + Description: The Cyborg Head logo button which opens and closes the UI + Copyright (C) 2012 Mad Catz Inc. + Author: Christopher Hooks + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + --> + <Frame name="OpenButtonPage" movable="true" clampedtoscreen="true" enableMouse="true" hidden="true"> + <TitleRegion> + <Size x="75" y="75"/> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="0" y="0" /> + </Offset> + </Anchor> + </Anchors> + </TitleRegion> + <Size> + <AbsDimension x="50" y="50" /> + </Size> + <Anchors> + <Anchor point="LEFT" relativeTo="UIParent"> + <Offset> + <AbsDimension x="0" y="0" /> + </Offset> + </Anchor> + </Anchors> + <Frames> + <Button name="$parentOpenMainForm" clampedtoscreen="true" enableMouse="true" movable="true"> + <Size> + <AbsDimension x="75" y="75" /> + </Size> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="16" y="-14" /> + </Offset> + </Anchor> + </Anchors> + <Scripts> + <OnLoad> + self:RegisterForDrag("LeftButton","RightButton") + </OnLoad> + <OnClick> + Toggle(); + + </OnClick> + <OnDragStart> + self:StartMoving(); + self.isMoving = true; + </OnDragStart> + <OnDragStop> + self:StopMovingOrSizing(); + self.isMoving = false; + </OnDragStop> + </Scripts> + + <NormalTexture file="Interface\AddOns\CyborgMMO7\Graphics\Cyborg.tga"> + <Color r="0.0" g="0.0" b="0.0" a="1" /> + </NormalTexture> + + <HighlightTexture file="Interface\AddOns\CyborgMMO7\Graphics\CyborgGlow.tga"> + <Color r=".38" g=".85" b="1.0" a="0.90" /> + </HighlightTexture> + <ButtonText name="$parentText"> + <FontHeight> + <AbsValue val="10" /> + </FontHeight> + </ButtonText> + <NormalFont style="GameFontNormal" /> + <HighlightFont style="GameFontHighlight" /> + <DisabledFont style="GameFontDisable" /> + <PushedTextOffset x="0" y="0" /> + </Button> + </Frames> + </Frame> + + <Frame name="CyborgMiniMapFrame" parent="Minimap" enableMouse="true" hidden="false" frameStrata="LOW"> + <Size> + <AbsDimension x="32" y="32"/> + </Size> + <Anchors> + <Anchor point="TOPLEFT" relativeTo="Minimap" relativePoint="RIGHT"> + <Offset> + <AbsDimension x="2" y="0"/> + </Offset> + </Anchor> + </Anchors> + <Frames> + <Button name="CyborgMiniMapButton"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + <HighlightTexture alphaMode="ADD" file="Interface\Minimap\UI-Minimap-ZoomButton-Highlight"/> + <Layers> + <Layer level="BACKGROUND"> + <Texture name="CyborgMiniMapButton_Icon" file="Interface\AddOns\CyborgMMO7\Graphics\Cyborg.tga"> + <Size> + <AbsDimension x="22" y="22"/> + </Size> + <Anchors> + <Anchor point="TOPLEFT"> + <AbsDimension x="6" y="-5"/> + </Anchor> + </Anchors> + <Color r="0.0" g="0.0" b="0.0" a="1" /> + </Texture> + </Layer> + <Layer level="ARTWORK"> + <Texture name="CyborgMiniMapButton_IconGlow" file="Interface\AddOns\CyborgMMO7\Graphics\CyborgGlow.tga"> + <Size> + <AbsDimension x="22" y="22"/> + </Size> + <Anchors> + <Anchor point="TOPLEFT"> + <AbsDimension x="6" y="-5"/> + </Anchor> + </Anchors> + <Color r=".38" g=".85" b="1.0" a="0.90" /> + </Texture> + </Layer> + <Layer level="OVERLAY"> + <Texture file="Interface\Minimap\MiniMap-TrackingBorder"> + <Size> + <AbsDimension x="56" y="56"/> + </Size> + <Anchors> + <Anchor point="TOPLEFT"/> + </Anchors> + </Texture> + </Layer> + </Layers> + <Scripts> + <OnLoad> + self:RegisterForDrag("LeftButton","RightButton") + </OnLoad> + <OnMouseDown> + </OnMouseDown> + <OnMouseUp> + Toggle(); + if(false == IsOpen()) then + RatQuickPage:Show(); + end + </OnMouseUp> + <OnEnter> + if(false == IsOpen()) then + RatQuickPage:Show(); + end + </OnEnter> + <OnLeave> + RatQuickPage:Hide(); + </OnLeave> + <OnUpdate> + if(self:IsDragging()) then + CyborgMiniMapButton_OnUpdate(); + end + </OnUpdate> + </Scripts> + </Button> + </Frames> + </Frame> +</Ui>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OptionPage.xml Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,325 @@ +<Ui xmlns="http://www.blizzard.com/wow/ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <!-- + Warcraft Plugin for Cyborg MMO7 + Filename: OptionPage.xml + Description: The configuration page layout for the addons interface page + Copyright (C) 2012 Mad Catz Inc. + Author: Christopher Hooks + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + --> + <FontString name="normalStringTemplate" font="Fonts\FRIZQT__.TTF" text="NoText" virtual="true"> + <FontHeight> + <AbsValue val="10" /> + </FontHeight> + <Color r="1" g="1" b="1" /> + <Shadow> + <Color r="0" g="0" b="0" /> + <Offset> + <AbsDimension x="1" y="-1" /> + </Offset> + </Shadow> + </FontString> + + <FontString name="SliderTitle" font="Fonts\FRIZQT__.TTF" text="NoText" virtual="true"> + <FontHeight> + <AbsValue val="14" /> + </FontHeight> + <Color r="1" g="0.8196079" b="0" /> + <Shadow> + <Color r="0" g="0" b="0" /> + <Offset> + <AbsDimension x="1" y="-1" /> + </Offset> + </Shadow> + </FontString> + + + + <Frame name="OptionPage"> + <Layers> + <Layer level="ARTWORK"> + <FontString name="$parentTitle" inherits="GameFontNormalLarge"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="15" y="-15" /> + </Offset> + </Anchor> + </Anchors> + </FontString> + </Layer> + </Layers> + + <Frames> + <CheckButton name="MiniMapButton" inherits="UICheckButtonTemplate" checked="true"> + <Size> + <AbsDimension x="32" y="32"/> + </Size> + <Anchors> + <Anchor point="TOPLEFT" relativeTo="$parentTitle"> + <Offset> + <AbsDimension x="25" y="-60"/> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer> + <FontString name="$parentTitle" font="Fonts\FRIZQT__.TTF" inherits="SliderTitle"> + <Anchors> + <Anchor point="LEFT" relativePoint="$parentMiniMapButton"> + <Offset> + <AbsDimension x="45" y="0" /> + </Offset> + </Anchor> + </Anchors> + </FontString> + </Layer> + </Layers> + <Scripts> + <OnLoad> + LoadStrings(getglobal(self:GetName().."Title")); + </OnLoad> + <OnClick> + if(self:GetChecked() == 1) then + SetMiniMapButton(true) + else + SetMiniMapButton(false) + end + </OnClick> + </Scripts> + </CheckButton> + + + <CheckButton name="CyborgButton" inherits="UICheckButtonTemplate" checked="true"> + <Size> + <AbsDimension x="32" y="32"/> + </Size> + <Anchors> + <Anchor point="TOPLEFT" relativeTo="$parentTitle"> + <Offset> + <AbsDimension x="25" y="-85"/> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer> + <FontString name="$parentTitle" font="Fonts\FRIZQT__.TTF" inherits="SliderTitle"> + <Anchors> + <Anchor point="LEFT" relativePoint="$parentCyborgButton"> + <Offset> + <AbsDimension x="45" y="0" /> + </Offset> + </Anchor> + </Anchors> + </FontString> + </Layer> + </Layers> + <Scripts> + <OnLoad> + LoadStrings(getglobal(self:GetName().."Title")); + </OnLoad> + <OnClick> + if(self:GetChecked() == 1) then + SetCyborgHeadButton(true) + else + SetCyborgHeadButton(false) + end + </OnClick> + </Scripts> + </CheckButton> + + <Button name="$parentSetDefaults"> + <Size> + <AbsDimension x="156" y="28" /> + </Size> + <Anchors> + <Anchor point="TOPLEFT" relativeTo="$parentTitle">> + <Offset> + <AbsDimension x="25" y="-220"/> + </Offset> + </Anchor> + </Anchors> + <NormalTexture file="Interface\Buttons\UI-Panel-Button-Up"> + <TexCoords left="0" right="0.625" top="0" bottom="0.6875" /> + </NormalTexture> + <PushedTexture file="Interface\Buttons\UI-Panel-Button-Down"> + <TexCoords left="0" right="0.625" top="0" bottom="0.6875" /> + </PushedTexture> + <DisabledTexture file="Interface\Buttons\UI-Panel-Button-Disabled"> + <TexCoords left="0" right="0.625" top="0" bottom="0.6875" /> + </DisabledTexture> + <HighlightTexture file="Interface\Buttons\UI-Panel-Button-Highlight" alphaMode="ADD"> + <TexCoords left="0" right="0.625" top="0" bottom="0.6875" /> + </HighlightTexture> + <ButtonText name="$parentText"> + <FontHeight> + <AbsValue val="10" /> + </FontHeight> + </ButtonText> + <NormalFont style="GameFontNormal" /> + <HighlightFont style="GameFontHighlight" /> + <DisabledFont style="GameFontDisable" /> + <Scripts> + <OnLoad> + LoadStrings(getglobal(self:GetName())); + </OnLoad> + <OnClick> + SetDefaultSettings(); + </OnClick> + </Scripts> + </Button> + + <Frame name="CyborgSize"> + <Size> + <AbsDimension x="198" y="60" /> + </Size> + <Anchors> + <Anchor point="TOPLEFT" relativeTo="$parentTitle"> + <Offset> + <AbsDimension x="25" y="-120"/> + </Offset> + </Anchor> + </Anchors> + <Frames> + <Slider name="$parentSlider" enableMouse="true" minValue=".5" maxValue="1" defaultValue=".75" valueStep=".01" orientation="HORIZONTAL"> + <Size> + <AbsDimension x="128" y="17" /> + </Size> + <Anchors> + <Anchor point="LEFT" /> + <Anchor point="RIGHT" /> + </Anchors> + <Backdrop bgFile="Interface\Buttons\UI-SliderBar-Background" edgeFile="Interface\Buttons\UI-SliderBar-Border" tile="true"> + <BackgroundInsets> + <AbsInset left="3" right="3" top="6" bottom="6" /> + </BackgroundInsets> + <TileSize> + <AbsValue val="8" /> + </TileSize> + <EdgeSize> + <AbsValue val="8" /> + </EdgeSize> + </Backdrop> + <Layers> + <Layer> + <FontString name="$parentTitle" font="Fonts\FRIZQT__.TTF" inherits="SliderTitle"> + <Anchors> + <Anchor point="BOTTOM" relativePoint="TOP" /> + </Anchors> + </FontString> + <FontString name="$parentLow" font="Fonts\FRIZQT__.TTF" inherits="normalStringTemplate" text="50%"> + <Anchors> + <Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" /> + </Anchors> + </FontString> + <FontString name="$parentHigh" font="Fonts\FRIZQT__.TTF" inherits="normalStringTemplate" text="100%"> + <Anchors> + <Anchor point="TOPRIGHT" relativePoint="BOTTOMRIGHT" /> + </Anchors> + </FontString> + </Layer> + </Layers> + <ThumbTexture name="$parentThumb" file="Interface\Buttons\UI-SliderBar-Button-Horizontal"> + <Size> + <AbsDimension x="32" y="32" /> + </Size> + </ThumbTexture> + <Scripts> + <OnLoad> + LoadStrings(getglobal(self:GetName().."Title")) + </OnLoad> + <OnValueChanged>SetOpenButtonSize(self:GetValue())</OnValueChanged> + </Scripts> + </Slider> + </Frames> + </Frame> + <Frame name="PluginSize"> + <Size> + <AbsDimension x="198" y="60" /> + </Size> + <Anchors> + <Anchor point="TOPLEFT" relativeTo="$parentTitle"> + <Offset> + <AbsDimension x="25" y="-165"/> + </Offset> + </Anchor> + </Anchors> + <Frames> + <Slider name="$parentSlider" enableMouse="true" minValue=".5" maxValue="1" defaultValue=".75" valueStep=".01" orientation="HORIZONTAL"> + <Size> + <AbsDimension x="128" y="17" /> + </Size> + <Anchors> + <Anchor point="LEFT" /> + <Anchor point="RIGHT" /> + </Anchors> + <Backdrop bgFile="Interface\Buttons\UI-SliderBar-Background" edgeFile="Interface\Buttons\UI-SliderBar-Border" tile="true"> + <BackgroundInsets> + <AbsInset left="3" right="3" top="6" bottom="6" /> + </BackgroundInsets> + <TileSize> + <AbsValue val="8" /> + </TileSize> + <EdgeSize> + <AbsValue val="8" /> + </EdgeSize> + </Backdrop> + <Layers> + <Layer> + <FontString name="$parentTitle" font="Fonts\FRIZQT__.TTF" inherits="SliderTitle"> + <Anchors> + <Anchor point="BOTTOM" relativePoint="TOP" /> + </Anchors> + </FontString> + <FontString name="$parentLow" font="Fonts\FRIZQT__.TTF" inherits="normalStringTemplate" text="50%"> + <Anchors> + <Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" /> + </Anchors> + </FontString> + <FontString name="$parentHigh" font="Fonts\FRIZQT__.TTF" inherits="normalStringTemplate" text="100%"> + <Anchors> + <Anchor point="TOPRIGHT" relativePoint="BOTTOMRIGHT" /> + </Anchors> + </FontString> + </Layer> + </Layers> + <ThumbTexture name="$parentThumb" file="Interface\Buttons\UI-SliderBar-Button-Horizontal"> + <Size> + <AbsDimension x="32" y="32" /> + </Size> + </ThumbTexture> + <Scripts> + <OnLoad> + LoadStrings(getglobal(self:GetName().."Title")); + </OnLoad> + <OnValueChanged> + SetMainPageSize(self:GetValue()) + </OnValueChanged> + </Scripts> + </Slider> + </Frames> + </Frame> + </Frames> + + <Scripts> + <OnLoad> + LoadStrings(getglobal(self:GetName().."Title")); + msg("Loaded Option Page"); + self = OptionView.new(self); + </OnLoad> + </Scripts> + </Frame> +</Ui>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OptionView.lua Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,28 @@ +--~ Warcraft Plugin for Cyborg MMO7 +--~ Filename: OptionView.lua +--~ Description: The code for the Option page in the UI, not much here because we dont have many options. Probably could refactor. +--~ Copyright (C) 2012 Mad Catz Inc. +--~ Author: Christopher Hooks + +--~ This program is free software; you can redistribute it and/or +--~ modify it under the terms of the GNU General Public License +--~ as published by the Free Software Foundation; either version 2 +--~ of the License, or (at your option) any later version. + +--~ This program is distributed in the hope that it will be useful, +--~ but WITHOUT ANY WARRANTY; without even the implied warranty of +--~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--~ GNU General Public License for more details. + +--~ You should have received a copy of the GNU General Public License +--~ along with this program; if not, write to the Free Software +--~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +OptionView = { + new = function(self) + self.name = "Cyborg MMO7 Plugin" + InterfaceOptions_AddCategory(self); + return self + + end +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RatPage.xml Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,481 @@ +<Ui xmlns="http://www.blizzard.com/wow/ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <!-- + Warcraft Plugin for Cyborg MMO7 + Filename: RatPage.xml + Description: Layout and description of the command slots for the mouse. + Copyright (C) 2012 Mad Catz Inc. + Author: Christopher Hooks + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + --> + <!-- IconTemplate--> + <Button name="IconTemplate" virtual="true" inherits="SecureActionButtonTemplate"> + <Size> + <AbsDimension x="32" y="32"/> + </Size> + <Layers> + <Layer level="OVERLAY"> + <Texture name="$parentIcon"/> + </Layer> + <Layer level="ARTWORK"> + <FontString name="$parentHotKey" inherits="NumberFontNormalSmallGray" justifyH="RIGHT"> + <Size> + <AbsDimension x="32" y="10"/> + </Size> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="-2" y="-2"/> + </Offset> + </Anchor> + </Anchors> + </FontString> + </Layer> + </Layers> + <PushedTexture file="Interface\Buttons\UI-Quickslot-Depress"/> + <HighlightTexture alphaMode="ADD" file="Interface\Buttons\ButtonHilight-Square"/> + </Button> + + <Button name="SlotTemplate" inherits="IconTemplate" virtual="true"> + <Scripts> + <OnLoad> + self = SlotView.new(self); + </OnLoad> + <OnMouseDown> + if(button == "LeftButton") then + self.Clicked(); + end + </OnMouseDown> + + </Scripts> + </Button> + + + + <Button name="ModeTemplate" virtual="true"> + <Size> + <AbsDimension x="127" y="63" /> + </Size> + + <ButtonText name="$parentText"> + <FontHeight> + <AbsValue val="10" /> + </FontHeight> + </ButtonText> + <NormalFont style="GameFontNormal" /> + <HighlightFont style="GameFontHighlight" /> + <DisabledFont style="GameFontDisable" /> + <Scripts> + <OnLoad> + self = ModeView.new(self); + </OnLoad> + <OnClick> + self.Clicked(); + </OnClick> + </Scripts> + </Button> + + <!-- The Rat Page Frame --> + <Frame name="RatPageTemplate" virtual="true"> + <Size> + <AbsDimension x="512" y="512"/> + </Size> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="0" y="-0"/> + </Offset> + </Anchor> + </Anchors> + <!-- Our Slot Locations --> + <Frames> + <CheckButton name="$parentSlot1" inherits="SlotTemplate" id="1"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="68" y="-116" /> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\Slot.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <CheckButton name="$parentSlot2" inherits="SlotTemplate" id="2"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="68" y="-153"/> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\Slot.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <CheckButton name="$parentSlot3" inherits="SlotTemplate" id="3"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="68" y="-189" /> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\Slot.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <CheckButton name="$parentSlot4" inherits="SlotTemplate" id="4"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="68" y="-238" /> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\SlotUp.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <CheckButton name="$parentSlot5" inherits="SlotTemplate" id="5"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="68" y="-273" /> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\SlotMiddle.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <CheckButton name="$parentSlot6" inherits="SlotTemplate" id="6"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="68" y="-308" /> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\SlotDown.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <CheckButton name="$parentSlot7" inherits="SlotTemplate" id="7"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="33" y="-273"/> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\SlotLeft.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <CheckButton name="$parentSlot8" inherits="SlotTemplate" id="8"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="103" y="-273"/> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\SlotRight.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <CheckButton name="$parentSlot9" inherits="SlotTemplate" id="9"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="68" y="-356"/> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\Slot.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <CheckButton name="$parentSlot10" inherits="SlotTemplate" id="10"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="68" y="-393"/> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\Slot.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <CheckButton name="$parentSlot11" inherits="SlotTemplate" id="11"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="68" y="-429"/> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\Slot.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <CheckButton name="$parentSlot12" inherits="SlotTemplate" id="12"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="50" y="-68"/> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\SlotLeft.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <CheckButton name="$parentSlot13" inherits="SlotTemplate" id="13"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="86" y="-68" /> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="ARTWORK"> + <Texture name="$parentText" file="Interface\AddOns\CyborgMMO7\Graphics\SlotRight.tga"> + <Size> + <AbsDimension x="33" y="33"/> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0"/> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + </CheckButton> + <Button name="Mode1" inherits="ModeTemplate" id="1"> + <NormalTexture file="Interface\AddOns\CyborgMMO7\Graphics\Mode1Down.tga" > + </NormalTexture> + <PushedTexture file="Interface\AddOns\CyborgMMO7\Graphics\Mode1Selected.tga"> + </PushedTexture> + <HighlightTexture file="Interface\AddOns\CyborgMMO7\Graphics\Mode1Over.tga"> + </HighlightTexture> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="384" y="-33" /> + </Offset> + </Anchor> + </Anchors> + </Button> + <Button name="Mode2" inherits="ModeTemplate" id="2"> + <NormalTexture file="Interface\AddOns\CyborgMMO7\Graphics\Mode2Down.tga" > + </NormalTexture> + <PushedTexture file="Interface\AddOns\CyborgMMO7\Graphics\Mode2Selected.tga"> + </PushedTexture> + <HighlightTexture file="Interface\AddOns\CyborgMMO7\Graphics\Mode2Over.tga"> + </HighlightTexture> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="384" y="-33" /> + </Offset> + </Anchor> + </Anchors> + </Button> + <Button name="Mode3" inherits="ModeTemplate" id="3"> + <NormalTexture file="Interface\AddOns\CyborgMMO7\Graphics\Mode3Down.tga" > + </NormalTexture> + <PushedTexture file="Interface\AddOns\CyborgMMO7\Graphics\Mode3Selected.tga"> + </PushedTexture> + <HighlightTexture file="Interface\AddOns\CyborgMMO7\Graphics\Mode3Over.tga"> + </HighlightTexture> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="384" y="-33" /> + </Offset> + </Anchor> + </Anchors> + </Button> + </Frames> + <Scripts> + <OnLoad> + self = RatPageView.new(self); + </OnLoad> + </Scripts> + </Frame> +</Ui>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RatPageController.lua Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,86 @@ +--~ Warcraft Plugin for Cyborg MMO7 +--~ Filename: RatPageController.lua +--~ Description: Controller logic for the RatPage +--~ Copyright (C) 2012 Mad Catz Inc. +--~ Author: Christopher Hooks + +--~ This program is free software; you can redistribute it and/or +--~ modify it under the terms of the GNU General Public License +--~ as published by the Free Software Foundation; either version 2 +--~ of the License, or (at your option) any later version. + +--~ This program is distributed in the hope that it will be useful, +--~ but WITHOUT ANY WARRANTY; without even the implied warranty of +--~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--~ GNU General Public License for more details. + +--~ You should have received a copy of the GNU General Public License +--~ along with this program; if not, write to the Free Software +--~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +RatPageController = { + new = function() + local self = {}; + RatPageModel.Instance().SetMode(1); + + self.SlotClicked = function(slot) + local slotObject = nil + slotObject = RatPageModel.Instance().GetObjectOnButton(slot.Id) + RatPageModel.Instance().SetObjectOnButton(slot.Id, RatPageModel.Instance().GetMode(), self.GetCursorObject()); + + if(slotObject ~= nil) then + slotObject.Pickup(); + end + + end + + self.ModeClicked = function(mode) + msg("Setting mode "..tostring(mode.Id)); + RatPageModel.Instance().SetMode(mode.Id); + end + + self.GetCursorObject = function() + local cursorObject = nil; + if(nil ~= GetCursorInfo()) then + local type, detail, subdetail = GetCursorInfo(); + cursorObject = WowObject.Create(type, detail, subdetail); + ClearCursor(); + end + return cursorObject; + end + + self.CallbackDropped = function(callbackObject) + local slot = nil; + local observers = RatPageModel.Instance().GetAllObservers(); + for i = 1, (# observers) do + if(MouseIsOver(observers[i])) then + slot = observers[i]; + break; + end + end + if(nil ~= slot) then + RatPageModel.Instance().SetObjectOnButton(slot.Id, RatPageModel.Instance().GetMode(), callbackObject.wowObject); + end + end + + + + self.Close = function() + + end + + self.Open = function() + end + + return self; + end, + + m_Instance = nil, + + Instance = function() + if(nil == RatPageController.m_Instance) then + RatPageController.m_Instance = RatPageController.new(); + end + return RatPageController.m_Instance; + end +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RatPageModel.lua Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,157 @@ +--~ Warcraft Plugin for Cyborg MMO7 +--~ Filename: RatPageModel.lua +--~ Description: Code model of the MMO7 mouse +--~ Copyright (C) 2012 Mad Catz Inc. +--~ Author: Christopher Hooks + +--~ This program is free software; you can redistribute it and/or +--~ modify it under the terms of the GNU General Public License +--~ as published by the Free Software Foundation; either version 2 +--~ of the License, or (at your option) any later version. + +--~ This program is distributed in the hope that it will be useful, +--~ but WITHOUT ANY WARRANTY; without even the implied warranty of +--~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--~ GNU General Public License for more details. + +--~ You should have received a copy of the GNU General Public License +--~ along with this program; if not, write to the Free Software +--~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +-- Constants -- + +local RAT7 = { BUTTONS = 13, MODES = 3, SHIFT = 0} + +local MIDDLEMOUSE = 1; + +RatPageModel = { + new = function() + local self = {} + self.m_Mode = 1; + self.ObserverCount = 0; + self.ObserverList = {} + self.Data = {} + + for i = 1,RAT7.MODES do + self.Data[i] = {} + for j = 1, RAT7.BUTTONS do + self.Data[i][j] = {}; + end + end + + self.InitSaveData = function(data) + for i = 1,RAT7.MODES do + if (nil == data["Rat"][i]) then + data["Rat"][i] = {} + end + for j = 1, RAT7.BUTTONS do + if (nil == data["Rat"][i][j]) then + data["Rat"][i][j] = {} + end + end + end + end + + + self.LoadData = function() + msg("Loading...") + local data = GetSaveData(); + + + if (nil == data["Rat"]) then + data["Rat"] = {} + self.InitSaveData(data); + end + + self.Data = data["Rat"] + if(data ~= nil) then + for mode = 1,RAT7.MODES do + for button = 1, RAT7.BUTTONS do + if(self.Data[mode][button] ~= nil) then + object = WowObject.Create(self.Data[mode][button].Type, self.Data[mode][button].Detail, self.Data[mode][button].Subdetail); + self.SetObjectOnButtonNoUpdate(button, mode, object); + else + object = WowObject.Create("", "", ""); + self.SetObjectOnButtonNoUpdate(button, mode, object); + self.Data[mode][button] = object; + end + end + end + self.UpdateObservers(); + end + end + + self.SaveData = function() + msg("Saving...") + SetSaveData(self.Data, "Rat"); + end + + self.SetMode = function(mode) + self.m_Mode = mode; + self.UpdateObservers(); + end + + self.GetMode = function() + return self.m_Mode; + end + + self.GetData = function() + return self.Data, self.m_Mode; + end + + self.GetObjectOnButton = function(button) + if(nil == self.Data[self.m_Mode][button]) then + return nil; + else + return self.Data[self.m_Mode][button] + end + end + + self.SetObjectOnButtonNoUpdate = function(button, mode, object) + --msg("button = "..tostring(button).." mode = "..tostring(mode)) + self.Data[mode][button] = object; + + if(nil ~= object) then + object.SetBinding(WowCommands[GetLocale()][((mode-1)*RAT7.BUTTONS)+button]); + if("callback" == object.Type) then + msg("trying to set texture") + local slot = getglobal("defaultPageSlot"..button); + slot:SetNormalTexture(object.Texture) + end + else + msg("clearing "..button) + WowObject.ClearBinding(WowCommands[GetLocale()][((mode-1)*RAT7.BUTTONS)+button]) + end + end + + self.SetObjectOnButton = function(button, mode, object) + self.SetObjectOnButtonNoUpdate(button, mode, object); + self.UpdateObservers() + end + + self.AddObserver = function(view) + table.insert(self.ObserverList,view) + self.observerCount = # self.ObserverList + end + + self.GetAllObservers = function() + return self.ObserverList; + end + + self.UpdateObservers = function() + for i = 1, (# self.ObserverList) do + self.ObserverList[i].Update(self.Data, self.m_Mode) + end + self.SaveData() + end + return self; + end, + + m_Instance = nil, + + Instance = function() + if(nil == RatPageModel.m_Instance) then + RatPageModel.m_Instance = RatPageModel.new(); + end + return RatPageModel.m_Instance; + end +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RatPageView.lua Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,157 @@ +--~ Warcraft Plugin for Cyborg MMO7 +--~ Filename: RatPageView.lua +--~ Description: Interaction logic for the RatPage +--~ Copyright (C) 2012 Mad Catz Inc. +--~ Author: Christopher Hooks + +--~ This program is free software; you can redistribute it and/or +--~ modify it under the terms of the GNU General Public License +--~ as published by the Free Software Foundation; either version 2 +--~ of the License, or (at your option) any later version. + +--~ This program is distributed in the hope that it will be useful, +--~ but WITHOUT ANY WARRANTY; without even the implied warranty of +--~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--~ GNU General Public License for more details. + +--~ You should have received a copy of the GNU General Public License +--~ along with this program; if not, write to the Free Software +--~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +RatPageView = { + new = function(self) + msg("new Rat Page View"); + for _, child in ipairs(self:GetChildren()) do + child.Register(); + end + + self.SlotClicked = function(slot) + msg("View Recieved Click") + RatPageController.Instance().SlotClicked(slot) + end + + self.ModeClicked = function(mode) + msg("View Recieved Click") + RatPageController.Instance().ModeClicked(mode) + end + + self.RegisterMode = function() + msg("ModeRegistered") + end + + self.RegisterSlot = function() + msg("SlotRegistered") + end + return self; + end +} + +RatQuickPageView = { + new = function(self) + for _, child in ipairs(self:GetChildren()) do + child.Register(); + end + + self.SlotClicked = function(slot) + RatPageController.Instance().SlotClicked(slot) + end + + return self; + end +} + +-- Slot Class -- +SlotView = { + new = function(self, parent) + self._assignedWowObject = nil; + self:RegisterForClicks("LeftButtonUp", "RightButtonUp"); + self.Id = self:GetID(); + RatPageModel.Instance().AddObserver(self); + self.UnCheckedTexture = self:GetNormalTexture(); + + -- Object Method -- + self.Clicked = function() + self:GetParent().SlotClicked(self) + + GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); + --GameTooltip:SetText(self:GetID()); + end + + self.Update = function(data, activeMode) + local icon = _G[self:GetName().."Icon"]; + if(nil ~= data[activeMode][self.Id]) then + self:SetChecked(true); + icon:SetTexture(data[activeMode][self.Id].Texture); + else + icon:SetTexture(nil); + self:SetChecked(false); + end + + + end + + return self; + end, +} + +SlotMiniView = { + new = function(self, parent) + self._assignedWowObject = nil; + self.Id = self:GetID(); + RatPageModel.Instance().AddObserver(self); + self.UnCheckedTexture = self:GetNormalTexture(); + + self.Update = function(data, activeMode) + local icon = _G[self:GetName().."Icon"]; + if(nil ~= data[activeMode][self.Id]) then + self:SetChecked(true); + + icon:SetTexture(data[activeMode][self.Id].Texture); + icon:SetAlpha(.5); + else + icon:SetTexture(nil); + self:SetChecked(false); + end + end + + return self; + end +} + + +-- ModeButton -- +ModeView = { + new = function(self) + self.Id = self:GetID(); + self.Name = self:GetName(); + RatPageModel.Instance().AddObserver(self); + if(self.Id ~= 1) then + self:Hide() + end + + self.Clicked = function() + local nextMode; + if(self.Id == 1) then + nextMode = getglobal("Mode2"); + else + if(self.Id == 2) then + nextMode = getglobal("Mode3"); + else + nextMode = getglobal("Mode1"); + end + end + self:GetParent().ModeClicked(nextMode) + end + + self.Update = function(data, activeMode) + if(self.Id == activeMode) then + self:Show() + else + self:Hide() + end + + end + + return self; + end +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RatQuickPage.xml Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,230 @@ +<Ui xmlns="http://www.blizzard.com/wow/ui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <!-- + Warcraft Plugin for Cyborg MMO7 + Filename: RatQuickPage.xml + Description: The mouse over reminder page for the commands. + Copyright (C) 2012 Mad Catz Inc. + Author: Christopher Hooks + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + --> + <!-- IconTemplate--> + <Button name="SmallIconTemplate" virtual="true"> + <Size> + <AbsDimension x="16.5" y="16.5"/> + </Size> + <Layers> + <Layer level="OVERLAY"> + <Texture name="$parentIcon"/> + </Layer> + <Layer level="ARTWORK"> + <FontString name="$parentHotKey" inherits="NumberFontNormalSmallGray" justifyH="RIGHT"> + <Size> + <AbsDimension x="32" y="10"/> + </Size> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="-2" y="-2"/> + </Offset> + </Anchor> + </Anchors> + </FontString> + </Layer> + </Layers> + <PushedTexture file="Interface\Buttons\UI-Quickslot-Depress"/> + <HighlightTexture alphaMode="ADD" file="Interface\Buttons\ButtonHilight-Square"/> + </Button> + + <Button name="SmallSlotTemplate" inherits="SmallIconTemplate" virtual="true"> + <Scripts> + <OnLoad> + self = SlotMiniView.new(self); + </OnLoad> + <OnClick> + self.Clicked(); + </OnClick> + </Scripts> + </Button> + + <!-- The Rat Page Frame --> + <Frame name="RatQuickPage" hidden="true"> + <Size> + <AbsDimension x="256" y="256" /> + </Size> + <Anchors> + <Anchor point="CENTER" relativeTo="UIParent"> + <Offset> + <AbsDimension x="0" y="0" /> + </Offset> + </Anchor> + </Anchors> + <Layers> + <Layer level="BACKGROUND"> + <Texture name="BackgroundTexture" file="Interface\AddOns\CyborgMMO7\Graphics\ParchmentAndLeftSide.tga"> + <Size> + <AbsDimension x="256" y="256" /> + </Size> + <Anchors> + <Anchor point="CENTER"> + <Offset> + <AbsDimension x="0" y="0" /> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + <Layer level="ARTWORK"> + <Texture name="RatCalloutsTexture" file="Interface\AddOns\CyborgMMO7\Graphics\Lines.tga"> + <Size> + <AbsDimension x="256" y="256" /> + </Size> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="0" y="0" /> + </Offset> + </Anchor> + </Anchors> + </Texture> + </Layer> + </Layers> + <!-- Our Slot Locations --> + <Frames> + <CheckButton name="$parentSlot1" inherits="SmallSlotTemplate" id="1"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="34" y="-58" /> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + <CheckButton name="$parentSlot2" inherits="SmallSlotTemplate" id="2"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="34" y="-76"/> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + <CheckButton name="$parentSlot3" inherits="SmallSlotTemplate" id="3"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="34" y="-94" /> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + <CheckButton name="$parentSlot4" inherits="SmallSlotTemplate" id="4"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="34" y="-119" /> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + <CheckButton name="$parentSlot5" inherits="SmallSlotTemplate" id="5"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="34" y="-136" /> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + <CheckButton name="$parentSlot6" inherits="SmallSlotTemplate" id="6"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="34" y="-153" /> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + <CheckButton name="$parentSlot7" inherits="SmallSlotTemplate" id="7"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="16.5" y="-136"/> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + <CheckButton name="$parentSlot8" inherits="SmallSlotTemplate" id="8"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="52.5" y="-136"/> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + <CheckButton name="$parentSlot9" inherits="SmallSlotTemplate" id="9"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="34" y="-180"/> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + <CheckButton name="$parentSlot10" inherits="SmallSlotTemplate" id="10"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="34" y="-197"/> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + <CheckButton name="$parentSlot11" inherits="SmallSlotTemplate" id="11"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="34" y="-214"/> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + <CheckButton name="Slot12" inherits="SmallSlotTemplate" id="12"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="24" y="-33"/> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + <CheckButton name="$parentSlot13" inherits="SmallSlotTemplate" id="13"> + <Anchors> + <Anchor point="TOPLEFT"> + <Offset> + <AbsDimension x="44" y="-33" /> + </Offset> + </Anchor> + </Anchors> + </CheckButton> + </Frames> + <Scripts> + <OnLoad> + RatQuickPageView.new(self); + </OnLoad> + </Scripts> + </Frame> +</Ui>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WowObjects.lua Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,443 @@ +--~ Warcraft Plugin for Cyborg MMO7 +--~ Filename: WowObjects.lua +--~ Description: Warcraft in game object models +--~ Copyright (C) 2012 Mad Catz Inc. +--~ Author: Christopher Hooks + +--~ This program is free software; you can redistribute it and/or +--~ modify it under the terms of the GNU General Public License +--~ as published by the Free Software Foundation; either version 2 +--~ of the License, or (at your option) any later version. + +--~ This program is distributed in the hope that it will be useful, +--~ but WITHOUT ANY WARRANTY; without even the implied warranty of +--~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--~ GNU General Public License for more details. + +--~ You should have received a copy of the GNU General Public License +--~ along with this program; if not, write to the Free Software +--~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +WowObject = { + new = function(type, detail, subdetail) + local self = {}; + self.Texture = nil; + self.Name = "NoName"; + self.Type = type; + self.Detail = detail; + self.Subdetail = subdetail; + + + -- Methods -- + self.DoAction = function() + msg("Nothing To Do"); + end + + self.Pickup = function() + msg("Pick up Item"); + end + + self.SetBinding = function(key) + end + + self.PlaySound = function() + PlaySound("igAbilityIconDrop"); + end + + return self; + end, + + ClearBinding = function(key) + local buttonFrame, parentFrame, name = CallbackFactory.Instance().AddCallback(WowObject.DoNothing); + if(1 ~= SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")) then + msg("Failed to bind companion to button click"); + end + end, + + DoNothing = function() + end, + + Load = function(object) + if("item" == type) then + object = WowItem.Load(Object) + elseif("macro" == type) then + object = WowMacro.Load(object) + elseif("spell" == type) then + object = WowSpell.Load(object) + elseif("petaction" == type) then + object = WowSpell.Load(object) + --elseif("merchant"== type) then + --object = SlotMerchant.new(detail,subdetail) + elseif("companion" == type) then + object = WowCompanion.Load(object) + elseif("equipmentset" == type) then + object = WowEquipmentSet.Load(object) + else + object = WowObject.new(type,detail, subdetail) + end + return object; + end, + + -- Static Methods -- + Create = function(objectType, detail, subdetail) + local object; + if("item" == objectType) then + object = WowItem.new(detail,subdetail) + elseif("macro" == objectType) then + object = WowMacro.new(detail) + elseif("spell" == objectType) then + object = WowSpell.new(objectType, detail,subdetail) + elseif("petaction" == objectType) then + object = WowSpell.new(objectType, detail,subdetail) + elseif("merchant"== objectType) then + object = SlotMerchant.new(detail,subdetail) + elseif("companion" == objectType) then + object = WowCompanion.new(detail,subdetail) + elseif("equipmentset" == objectType) then + object = WowEquipmentSet.new(objectType,detail,subdetail) + elseif("callback" == objectType) then + object = WowCallback.new(detail); + else + object = WowObject.new(objectType,detail, subdetail) + end + + return object; + end +} + +local CallbackCursor = nil; + +CallbackIcons = { + new = function(self) + self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs = self:GetPoint(); + --self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs); + self.strata = self:GetFrameStrata(); + self.wowObject = WowCallback.new(self:GetName()); + self.wowObject.SetTextures(self); + self:RegisterForDrag("LeftButton","RightButton") + self:SetResizable(false); + + self.OnClick = function() + self.wowObject.DoAction(); + end + + + self.DragStart = function() + self:SetMovable(true); + self:StartMoving(); + self.isMoving = true; + self:SetFrameStrata("TOOLTIP") + end + + self.DragStop = function() + + self:SetFrameStrata(self.strata); + self.isMoving = false; + self:SetMovable(false); + self:StopMovingOrSizing(); + + self:ClearAllPoints(); + self:SetPoint(self.point, self.relativeTo, self.relativePoint, self.xOfs, self.yOfs); + local x, y = GetCursorPosition(); + RatPageController.Instance().CallbackDropped(self) + end + + return self; + end +} + +WowCallback = { + new = function(callbackName) + local self = WowObject.new("callback", callbackName, ""); + self.CallbackName = callbackName; + self.Texture = "Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Unselected.tga" + + self.SetTextures = function(buttonFrame) + buttonFrame:SetNormalTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Unselected.tga") + buttonFrame:SetPushedTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Down.tga") + buttonFrame:SetHighlightTexture("Interface\\AddOns\\CyborgMMO7\\Graphics\\"..self.CallbackName.."Over.tga") + end + + self.DoAction = function() + local action = GetCallback(self.CallbackName) + msg("calling callback:- "..self.CallbackName); + action(); + + end + + self.PickupCallback = function() + + local slot = nil; + local observers = RatPageModel.Instance().GetAllObservers(); + for i = 1, (# observers) do + if(MouseIsOver(observers[i])) then + slot = observers[i]; + break; + end + end + slot:SetNormalTexture(slot.UnCheckedTexture) + end + + + self.ClickHandler = function(self, button, down) + msg("click handler"); + CallbackCursor:StopMoving(); + CallbackCursor:Hide(); + + if("LeftButton" == button) then + else + + end + end + + self.Pickup = function() + self.PlaySound() + ClearCursor(); + self.PickupCallback(); + + end + + + self.SetBinding = function(key) + local buttonFrame, parentFrame, name = CallbackFactory.Instance().AddCallback(self.DoAction); + if(1 ~= SetOverrideBindingClick(CallbackFactory.Instance().Frame, true, key, name, "LeftButton")) then + msg("Failed to Bind modeChange"); + end + end + + return self; + end +} + +-- WowItem Class -- + +WowItem = { + new = function(number, itemID) + local self = WowObject.new("item", number, itemID); -- base class + -- Set all the item info. -- + self.Name, + self.Link, + self.Rarity, + self.Level, + self.MinLevel, + self.Type, + self.SubType, + self.StackCount, + self.EquipLoc, + self.Texture, + self.SellPrice = GetItemInfo(itemID); + + -- override method -- + self.DoAction = function() + msg("Use Item"); + end + + -- override method -- + self.Pickup = function() + self.PlaySound() + ClearCursor(); + --SetCursor(self.Texture); + return PickupItem(self.Link); + end + + self.SetBinding = function(key) + SetOverrideBinding(CallbackFactory.Instance().Frame, true, key, "ITEM "..self.Name); + end + + return self; + end, +} + +-- WowSpell Class -- + +WowSpell = { + new = function(type, spellbookID, spellbook) + local self = WowObject.new(type, spellbookID, spellbook) -- base class + self.SpellbookID = spellbookID; + self.Spellbook = spellbook; + self.Name, self.Rank = GetSpellBookItemName(spellbookID, spellbook); + self.Texture = GetSpellBookItemTexture(spellbookID, spellbook); + self.Type = type; + + + -- override method -- + self.DoAction = function() + msg("Cast Spell"); + end + + -- override method -- + self.Pickup = function() + self.PlaySound() + ClearCursor(); + --SetCursor(self.Texture); + return PickupSpellBookItem(self.SpellbookID, self.Spellbook); + end + + self.SetBinding = function(key) + msg("Binding to key "..key) + self.Key = key + SetOverrideBinding(CallbackFactory.Instance().Frame, true, self.Key, self.Type.." "..self.Name); + end + + return self; + + end, + + Load = function(object) + local o = WowSpell.new(object.Type, object.Detail, object.Subdetail); + o.Name = object.Name; + o.Texture = object.Texture; + return o; + end +} + +-- WowMacro Class -- + +WowMacro = { + new = function(index) + local self = WowObject.new("macro", index, nil); -- base class + -- Set all the item info. -- + self.Name, + self.Texture, + self.Body, + self.isLocal = GetMacroInfo(index); + self.Index = index; + + -- override method -- + self.DoAction = function() + msg("Use Item"); + end + + -- override method -- + self.Pickup = function() + self.PlaySound() + ClearCursor(); + --SetCursor(self.Texture); + return PickupMacro(self.Index); + end + + self.SetBinding = function(key) + self.Key = key; + SetOverrideBinding(CallbackFactory.Instance().Frame, true, key, "MACRO "..self.Index); + end + + return self; + end, +} + + +-- WowCompanion Class -- + +WowCompanion = { + new = function(index, SubType) + local self = WowObject.new("companion", index, SubType); -- base class + -- Set all the item info. -- + self.Id, self.Name, self.SpellId, self.Texture, self.isSummoned = GetCompanionInfo(SubType, index); + self.SubType = SubType; + self.index = index; + -- override method -- + self.DoAction = function() + if((self.SubType == "MOUNT") and IsMounted()) then + Dismount(); + else + CallCompanion(self.SubType, self.index); + end + end + + -- override method -- + self.Pickup = function() + self.PlaySound() + return PickupCompanion(self.SubType, self.index); + end + + self.SetBinding = function(key) + self.Key = key + local buttonFrame, parentFrame, name = CallbackFactory.Instance().AddCallback(self.DoAction); + if(1 ~= SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")) then + msg("Failed to bind companion to button click"); + end + --SetOverrideBinding(hiddenModeChanger, true, key, "MACRO "..self.Index); + end + + return self; + end, + + Load = function(object) + local o = WowCompanion.new(object.index, object.SubType); + return o; + end +} + +-- WowMerchant Class -- +WowMerchant = { + new = function(index) + local self = WowObject.new("macro", index, nil); -- base class + -- Set all the item info. -- + self.Name, + self.Texture, + self.Price, + self.Quantity, + self.NumAvailable, + self.IsUsable, + self.ExtendedCost = GetMerchantItemInfo(index); + self.Index = index; + + -- override method -- + self.DoAction = function() + msg("Use Item"); + end + + -- override method -- + self.Pickup = function() + self.PlaySound() + ClearCursor(); + --SetCursor(self.Texture); + return PickupMerchantItem(self.Index); + end + + self.SetBinding = function(key) + self.Key = key + SetOverrideBinding(CallbackFactory.Instance().Frame, true, key, "MERCHANT "..self.Index); + end + + return self; + end, +} + +-- WowEquipmentSet Class -- +WowEquipmentSet = { + new = function(objectType, name, index) + local self = WowObject.new(objectType, name, index); -- base class + -- Set all the item info. -- + texture, lessIndex = GetEquipmentSetInfoByName(name); + self.Texture = "Interface\\Icons\\"..texture; + self.Name = name + self.Index = lessIndex+1; + + -- override method -- + self.DoAction = function() + UseEquipmentSet(self.Name); + end + + -- override method -- + self.Pickup = function() + self.PlaySound() + ClearCursor(); + --SetCursor(self.Texture); + return PickupEquipmentSetByName(self.Name); + end + + self.SetBinding = function(key) + self.Key = key + local buttonFrame, parentFrame, name = CallbackFactory.Instance().AddCallback(self.DoAction); + if(1 ~= SetOverrideBindingClick(parentFrame, true, key, name, "LeftButton")) then + msg("Failed to bind companion to button click"); + end + end + + return self; + end, +} + + +-- End Of WowObjects --
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/license.txt Tue Jan 24 17:14:21 2012 +0000 @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. \ No newline at end of file