Browse Source

Initial code commit.

master
atom0s 8 years ago
parent
commit
858b679b90
  1. 235
      imguistyle.lua

235
imguistyle.lua

@ -0,0 +1,235 @@ @@ -0,0 +1,235 @@
--[[
* Ashita - Copyright (c) 2014 - 2016 atom0s [atom0s@live.com]
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to
* Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
*
* By using Ashita, you agree to the above license and its terms.
*
* Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were
* made. You must do so in any reasonable manner, but not in any way that suggests the licensor
* endorses you or your use.
*
* Non-Commercial - You may not use the material (Ashita) for commercial purposes.
*
* No-Derivatives - If you remix, transform, or build upon the material (Ashita), you may not distribute the
* modified material. You are, however, allowed to submit the modified works back to the original
* Ashita project in attempt to have it added to the original project.
*
* You may not apply legal terms or technological measures that legally restrict others
* from doing anything the license permits.
*
* No warranties are given.
]]--
_addon.author = 'atom0s';
_addon.name = 'ImGui Style';
_addon.version = '3.0.0';
require 'common'
----------------------------------------------------------------------------------------------------
-- Variables
----------------------------------------------------------------------------------------------------
local show_style_window = nil;
---------------------------------------------------------------------------------------------------
-- func: SaveImGuiStyle
-- desc: Saves the current ImGui style for the current player.
---------------------------------------------------------------------------------------------------
local function SaveImGuiStyle()
-- Obtain the local player entity..
local p = GetPlayerEntity();
if (p == nil) then return; end;
-- Ensure we have a name..
if (p.Name == nil or string.len(p.Name) == 0) then
return;
end
-- Obtain the current style..
local s = imgui.style;
-- Build a style block to save..
local f = { };
f.Alpha = s.Alpha;
f.WindowPadding = { s.WindowPadding.x, s.WindowPadding.y };
f.WindowMinSize = { s.WindowMinSize.x, s.WindowMinSize.y };
f.WindowRounding = s.WindowRounding;
f.WindowTitleAlign = s.WindowTitleAlign;
f.ChildWindowRounding = s.ChildWindowRounding;
f.FramePadding = { s.FramePadding.x, s.FramePadding.y };
f.FrameRounding = s.FrameRounding;
f.ItemSpacing = { s.ItemSpacing.x, s.ItemSpacing.y };
f.ItemInnerSpacing = { s.ItemInnerSpacing.x, s.ItemInnerSpacing.y };
f.TouchExtraPadding = { s.TouchExtraPadding.x, s.TouchExtraPadding.y };
f.IndentSpacing = s.IndentSpacing;
f.ColumnsMinSpacing = s.ColumnsMinSpacing;
f.ScrollbarSize = s.ScrollbarSize;
f.ScrollbarRounding = s.ScrollbarRounding;
f.GrabMinSize = s.GrabMinSize;
f.GrabRounding = s.GrabRounding;
f.DisplayWindowPadding = { s.DisplayWindowPadding.x, s.DisplayWindowPadding.y };
f.DisplaySafeAreaPadding = { s.DisplaySafeAreaPadding.x, s.DisplaySafeAreaPadding.y };
f.AntiAliasedLines = s.AntiAliasedLines;
f.AntiAliasedShapes = s.AntiAliasedShapes;
f.CurveTessellationTol = s.CurveTessellationTol;
f.colors = { };
for x = 0, ImGuiCol_ModalWindowDarkening do
f.colors[x] = { s.Colors[x].x, s.Colors[x].y, s.Colors[x].z, s.Colors[x].w };
end
-- Save the style..
ashita.settings.save(_addon.path .. 'settings/' .. p.Name .. '.json', f);
print('[ImGuiStyle] Saved player UI configurations!');
end
---------------------------------------------------------------------------------------------------
-- func: LoadImGuiStyle
-- desc: Loads the current players style.
---------------------------------------------------------------------------------------------------
local function LoadImGuiStyle(name)
local f = ashita.settings.load(_addon.path .. 'settings/' .. name .. '.json', f);
if (f == nil) then return; end
local s = imgui.style;
s.Alpha = f.Alpha;
s.WindowPadding = ImVec2(f.WindowPadding[1], f.WindowPadding[2]);
s.WindowMinSize = ImVec2(f.WindowMinSize[1], f.WindowMinSize[2]);
s.WindowRounding = f.WindowRounding;
s.WindowTitleAlign = f.WindowTitleAlign;
s.ChildWindowRounding = f.ChildWindowRounding;
s.FramePadding = ImVec2(f.FramePadding[1], f.FramePadding[2]);
s.FrameRounding = f.FrameRounding;
s.ItemSpacing = ImVec2(f.ItemSpacing[1], f.ItemSpacing[2]);
s.ItemInnerSpacing = ImVec2(f.ItemInnerSpacing[1], f.ItemInnerSpacing[2]);
s.TouchExtraPadding = ImVec2(f.TouchExtraPadding[1], f.TouchExtraPadding[2]);
s.IndentSpacing = f.IndentSpacing;
s.ColumnsMinSpacing = f.ColumnsMinSpacing;
s.ScrollbarSize = f.ScrollbarSize;
s.ScrollbarRounding = f.ScrollbarRounding;
s.GrabMinSize = f.GrabMinSize;
s.GrabRounding = f.GrabRounding;
s.DisplayWindowPadding = ImVec2(f.DisplayWindowPadding[1], f.DisplayWindowPadding[2]);
s.DisplaySafeAreaPadding = ImVec2(f.DisplaySafeAreaPadding[1], f.DisplaySafeAreaPadding[2]);
s.AntiAliasedLines = f.AntiAliasedLines;
s.AntiAliasedShapes = f.AntiAliasedShapes;
s.CurveTessellationTol = f.CurveTessellationTol;
for x = 0, ImGuiCol_ModalWindowDarkening do
ashita.gui.stylecolor(x, ImVec4(f.colors[tostring(x)][1], f.colors[tostring(x)][2], f.colors[tostring(x)][3], f.colors[tostring(x)][4]));
end
end
----------------------------------------------------------------------------------------------------
-- func: print_help
-- desc: Displays a help block for proper command usage.
----------------------------------------------------------------------------------------------------
local function print_help(cmd, help)
-- Print the invalid format header..
print('\31\200[\31\05' .. _addon.name .. '\31\200]\30\01 ' .. '\30\68Invalid format for command:\30\02 ' .. cmd .. '\30\01');
-- Loop and print the help commands..
for k, v in pairs(help) do
print('\31\200[\31\05' .. _addon.name .. '\31\200]\30\01 ' .. '\30\68Syntax:\30\02 ' .. v[1] .. '\30\71 ' .. v[2]);
end
end
----------------------------------------------------------------------------------------------------
-- func: load
-- desc: Event called when the addon is being loaded.
----------------------------------------------------------------------------------------------------
ashita.register_event('load', function()
show_style_window = imgui.CreateVar(1);
-- Obtain the local player entity..
local p = GetPlayerEntity();
if (p == nil) then return; end;
-- Ensure we have a name..
if (p.Name == nil or string.len(p.Name) == 0) then
return;
end
-- Load the current players settings..
LoadImGuiStyle(p.Name);
end);
----------------------------------------------------------------------------------------------------
-- func: unload
-- desc: Event called when the addon is being unloaded.
----------------------------------------------------------------------------------------------------
ashita.register_event('unload', function()
if (show_style_window ~= nil) then
imgui.DeleteVar(show_style_window);
end
end);
----------------------------------------------------------------------------------------------------
-- func: command
-- desc: Event called when a command was entered.
----------------------------------------------------------------------------------------------------
ashita.register_event('command', function(command, ntype)
local args = command:args();
-- Ensure this is an imguistyle command..
if (args[1] ~= '/imguistyle') then
return false;
end
-- Toggles the editor..
if (#args == 1 or args[2] == 'show') then
if (show_style_window ~= nil) then
imgui.SetVarValue(show_style_window, not imgui.GetVarValue(show_style_window));
end
return true;
end
-- Saves the style..
if (#args == 2 and args[2] == 'save') then
SaveImGuiStyle();
return true;
end
print_help('/imguistyle', {
{ '/imguistyle show', '- Toggles the ImGui style editor window on and off.' },
{ '/imguistyle save', '- Saves the current style to the players personal settings file.' },
});
return true;
end);
----------------------------------------------------------------------------------------------------
-- func: render
-- desc: Event called when the addon is being rendered.
----------------------------------------------------------------------------------------------------
ashita.register_event('render', function()
if (show_style_window == nil) then
return;
end
if (imgui.GetVarValue(show_style_window) == true) then
imgui.Begin('Style Editor');
imgui.ShowStyleEditor();
imgui.End();
end
end);
---------------------------------------------------------------------------------------------------
-- func: incoming_packet
-- desc: Called when our addon receives an incoming packet.
---------------------------------------------------------------------------------------------------
ashita.register_event('incoming_packet', function(id, size, data)
-- Look for zoning / login packets to load
-- player specific configs..
if (id == 0x000A) then
-- Get the players name and load their config..
local name = struct.unpack('s', data, 0x84 + 1);
LoadImGuiStyle(name);
end
return false;
end);
Loading…
Cancel
Save