--[[
* Ashita - Copyright ( c ) 2014 - 2017 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 .
] ] --
ashita = ashita or { } ;
ashita.gui = ashita.gui or { } ;
-- Helper To Reduce Nesting
imgui = ashita.gui ;
----------------------------------------------------------------------------------------------------
-- Common Values Used By ImGui
----------------------------------------------------------------------------------------------------
FLT_MAX = 3.402823466e+38 ;
----------------------------------------------------------------------------------------------------
-- Flags for ImGui::Begin()
----------------------------------------------------------------------------------------------------
ImGuiWindowFlags_NoTitleBar = 1 ;
ImGuiWindowFlags_NoResize = 2 ;
ImGuiWindowFlags_NoMove = 4 ;
ImGuiWindowFlags_NoScrollbar = 8 ;
ImGuiWindowFlags_NoScrollWithMouse = 16 ;
ImGuiWindowFlags_NoCollapse = 32 ;
ImGuiWindowFlags_AlwaysAutoResize = 64 ;
ImGuiWindowFlags_ShowBorders = 128 ;
ImGuiWindowFlags_NoSavedSettings = 256 ;
ImGuiWindowFlags_NoInputs = 512 ;
ImGuiWindowFlags_MenuBar = 1024 ;
ImGuiWindowFlags_HorizontalScrollbar = 2048 ;
ImGuiWindowFlags_NoFocusOnAppearing = 4096 ;
ImGuiWindowFlags_NoBringToFrontOnFocus = 8192 ;
ImGuiWindowFlags_AlwaysVerticalScrollbar = 16384 ;
ImGuiWindowFlags_AlwaysHorizontalScrollbar = 32768 ;
ImGuiWindowFlags_AlwaysUseWindowPadding = 65536 ;
ImGuiWindowFlags_ChildWindow = 1048576 ; -- Internal use only!
ImGuiWindowFlags_ChildWindowAutoFitX = 2097152 ; -- Internal use only!
ImGuiWindowFlags_ChildWindowAutoFitY = 4194304 ; -- Internal use only!
ImGuiWindowFlags_ComboBox = 8388608 ; -- Internal use only!
ImGuiWindowFlags_Tooltip = 16777216 ; -- Internal use only!
ImGuiWindowFlags_Popup = 33554432 ; -- Internal use only!
ImGuiWindowFlags_Modal = 67108864 ; -- Internal use only!
ImGuiWindowFlags_ChildMenu = 134217728 ; -- Internal use only!
----------------------------------------------------------------------------------------------------
-- Flags for ImGui::InputText()
----------------------------------------------------------------------------------------------------
ImGuiInputTextFlags_CharsDecimal = 1 ;
ImGuiInputTextFlags_CharsHexadecimal = 2 ;
ImGuiInputTextFlags_CharsUppercase = 4 ;
ImGuiInputTextFlags_CharsNoBlank = 8 ;
ImGuiInputTextFlags_AutoSelectAll = 16 ;
ImGuiInputTextFlags_EnterReturnsTrue = 32 ;
ImGuiInputTextFlags_CallbackCompletion = 64 ;
ImGuiInputTextFlags_CallbackHistory = 128 ;
ImGuiInputTextFlags_CallbackAlways = 256 ;
ImGuiInputTextFlags_CallbackCharFilter = 512 ;
ImGuiInputTextFlags_AllowTabInput = 1024 ;
ImGuiInputTextFlags_CtrlEnterForNewLine = 2048 ;
ImGuiInputTextFlags_NoHorizontalScroll = 4096 ;
ImGuiInputTextFlags_AlwaysInsertMode = 8192 ;
ImGuiInputTextFlags_ReadOnly = 16384 ;
ImGuiInputTextFlags_Password = 32768 ;
ImGuiInputTextFlags_Multiline = 1048576 ; -- Internal use only!
----------------------------------------------------------------------------------------------------
-- Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*()
----------------------------------------------------------------------------------------------------
ImGuiTreeNodeFlags_Selected = 1 ;
ImGuiTreeNodeFlags_Framed = 2 ;
ImGuiTreeNodeFlags_AllowOverlapMode = 4 ;
ImGuiTreeNodeFlags_NoTreePushOnOpen = 8 ;
ImGuiTreeNodeFlags_NoAutoOpenOnLog = 16 ;
ImGuiTreeNodeFlags_DefaultOpen = 32 ;
ImGuiTreeNodeFlags_OpenOnDoubleClick = 64 ;
ImGuiTreeNodeFlags_OpenOnArrow = 128 ;
ImGuiTreeNodeFlags_Leaf = 256 ;
ImGuiTreeNodeFlags_Bullet = 512 ;
ImGuiTreeNodeFlags_CollapsingHeader = 18 ; -- ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoAutoOpenOnLog
----------------------------------------------------------------------------------------------------
-- Flags for ImGui::Selectable()
----------------------------------------------------------------------------------------------------
ImGuiSelectableFlags_DontClosePopups = 1 ;
ImGuiSelectableFlags_SpanAllColumns = 2 ;
ImGuiSelectableFlags_AllowDoubleClick = 4 ;
----------------------------------------------------------------------------------------------------
-- User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array
----------------------------------------------------------------------------------------------------
ImGuiKey_Tab = 0 ;
ImGuiKey_LeftArrow = 1 ;
ImGuiKey_RightArrow = 2 ;
ImGuiKey_UpArrow = 3 ;
ImGuiKey_DownArrow = 4 ;
ImGuiKey_PageUp = 5 ;
ImGuiKey_PageDown = 6 ;
ImGuiKey_Home = 7 ;
ImGuiKey_End = 8 ;
ImGuiKey_Delete = 9 ;
ImGuiKey_Backspace = 10 ;
ImGuiKey_Enter = 11 ;
ImGuiKey_Escape = 12 ;
ImGuiKey_A = 13 ;
ImGuiKey_C = 14 ;
ImGuiKey_V = 15 ;
ImGuiKey_X = 16 ;
ImGuiKey_Y = 17 ;
ImGuiKey_Z = 18 ;
----------------------------------------------------------------------------------------------------
-- Enumeration for PushStyleColor() / PopStyleColor()
----------------------------------------------------------------------------------------------------
ImGuiCol_Text = 0 ;
ImGuiCol_TextDisabled = 1 ;
ImGuiCol_WindowBg = 2 ;
ImGuiCol_ChildWindowBg = 3 ;
ImGuiCol_PopupBg = 4 ;
ImGuiCol_Border = 5 ;
ImGuiCol_BorderShadow = 6 ;
ImGuiCol_FrameBg = 7 ;
ImGuiCol_FrameBgHovered = 8 ;
ImGuiCol_FrameBgActive = 9 ;
ImGuiCol_TitleBg = 10 ;
ImGuiCol_TitleBgCollapsed = 11 ;
ImGuiCol_TitleBgActive = 12 ;
ImGuiCol_MenuBarBg = 13 ;
ImGuiCol_ScrollbarBg = 14 ;
ImGuiCol_ScrollbarGrab = 15 ;
ImGuiCol_ScrollbarGrabHovered = 16 ;
ImGuiCol_ScrollbarGrabActive = 17 ;
ImGuiCol_ComboBg = 18 ;
ImGuiCol_CheckMark = 19 ;
ImGuiCol_SliderGrab = 20 ;
ImGuiCol_SliderGrabActive = 21 ;
ImGuiCol_Button = 22 ;
ImGuiCol_ButtonHovered = 23 ;
ImGuiCol_ButtonActive = 24 ;
ImGuiCol_Header = 25 ;
ImGuiCol_HeaderHovered = 26 ;
ImGuiCol_HeaderActive = 27 ;
ImGuiCol_Column = 28 ;
ImGuiCol_ColumnHovered = 29 ;
ImGuiCol_ColumnActive = 30 ;
ImGuiCol_ResizeGrip = 31 ;
ImGuiCol_ResizeGripHovered = 32 ;
ImGuiCol_ResizeGripActive = 33 ;
ImGuiCol_CloseButton = 34 ;
ImGuiCol_CloseButtonHovered = 35 ;
ImGuiCol_CloseButtonActive = 36 ;
ImGuiCol_PlotLines = 37 ;
ImGuiCol_PlotLinesHovered = 38 ;
ImGuiCol_PlotHistogram = 39 ;
ImGuiCol_PlotHistogramHovered = 40 ;
ImGuiCol_TextSelectedBg = 41 ;
ImGuiCol_ModalWindowDarkening = 42 ;
----------------------------------------------------------------------------------------------------
-- Enumeration for PushStyleVar() / PopStyleVar()
-- NB: the enum only refers to fields of ImGuiStyle() which makes sense to be pushed/poped in UI code. Feel free to add others.
----------------------------------------------------------------------------------------------------
ImGuiStyleVar_Alpha = 0 ;
ImGuiStyleVar_WindowPadding = 1 ;
ImGuiStyleVar_WindowRounding = 2 ;
ImGuiStyleVar_WindowMinSize = 3 ;
ImGuiStyleVar_ChildWindowRounding = 4 ;
ImGuiStyleVar_FramePadding = 5 ;
ImGuiStyleVar_FrameRounding = 6 ;
ImGuiStyleVar_ItemSpacing = 7 ;
ImGuiStyleVar_ItemInnerSpacing = 8 ;
ImGuiStyleVar_IndentSpacing = 9 ;
ImGuiStyleVar_GrabMinSize = 10 ;
----------------------------------------------------------------------------------------------------
-- ImGuiAlign_
----------------------------------------------------------------------------------------------------
ImGuiAlign_Left = 1 ;
ImGuiAlign_Center = 2 ;
ImGuiAlign_Right = 4 ;
ImGuiAlign_Top = 8 ;
ImGuiAlign_VCenter = 16 ;
ImGuiAlign_Default = 9 ; -- ImGuiAlign_Left | ImGuiAlign_Top
----------------------------------------------------------------------------------------------------
-- Enumeration for ColorEditMode()
----------------------------------------------------------------------------------------------------
ImGuiColorEditMode_UserSelect = - 2 ;
ImGuiColorEditMode_UserSelectShowButton = - 1 ;
ImGuiColorEditMode_RGB = 0 ;
ImGuiColorEditMode_HSV = 1 ;
ImGuiColorEditMode_HEX = 2 ;
----------------------------------------------------------------------------------------------------
-- Enumeration for GetMouseCursor()
----------------------------------------------------------------------------------------------------
ImGuiMouseCursor_Arrow = 0 ;
ImGuiMouseCursor_TextInput = 1 ;
ImGuiMouseCursor_Move = 2 ;
ImGuiMouseCursor_ResizeNS = 3 ;
ImGuiMouseCursor_ResizeEW = 4 ;
ImGuiMouseCursor_ResizeNESW = 5 ;
ImGuiMouseCursor_ResizeNWSE = 6 ;
----------------------------------------------------------------------------------------------------
-- Condition flags for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions
-- All those functions treat 0 as a shortcut to ImGuiSetCond_Always
----------------------------------------------------------------------------------------------------
ImGuiSetCond_Always = 1 ;
ImGuiSetCond_Once = 2 ;
ImGuiSetCond_FirstUseEver = 4 ;
ImGuiSetCond_Appearing = 8 ;
----------------------------------------------------------------------------------------------------
-- Custom Variable Creation Types
-- Used with imgui.CreateVar
----------------------------------------------------------------------------------------------------
ImGuiVar_UNDEF = 0 ; -- 0 bytes (null)
ImGuiVar_BOOLCPP = 1 ; -- 1 byte bool
ImGuiVar_BOOL8 = 2 ; -- 1 byte char
ImGuiVar_BOOL16 = 3 ; -- 2 bytes short
ImGuiVar_BOOL32 = 4 ; -- 4 bytes BOOL
ImGuiVar_CHAR = 5 ; -- 1 byte char
ImGuiVar_INT8 = 6 ; -- 1 byte char
ImGuiVar_UINT8 = 7 ; -- 1 byte unsigned char
ImGuiVar_INT16 = 8 ; -- 2 bytes short
ImGuiVar_UINT16 = 9 ; -- 2 bytes unsigned short
ImGuiVar_INT32 = 10 ; -- 4 bytes int
ImGuiVar_UINT32 = 11 ; -- 4 bytes unsigned int
ImGuiVar_FLOAT = 12 ; -- 4 bytes float
ImGuiVar_DOUBLE = 13 ; -- 8 bytes double
ImGuiVar_CDSTRING = 14 ; -- ? bytes char[]
ImGuiVar_BOOLARRAY = 15 ; -- ? bytes bool[]
ImGuiVar_INT16ARRAY = 16 ; -- ? bytes short[]
ImGuiVar_INT32ARRAY = 17 ; -- ? bytes int[]
ImGuiVar_FLOATARRAY = 18 ; -- ? bytes float[]
ImGuiVar_DOUBLEARRAY = 19 ; -- ? bytes double[]
----------------------------------------------------------------------------------------------------
-- func: stylecolor
-- desc: Sets a style color of the ImGui system.
----------------------------------------------------------------------------------------------------
local function stylecolor ( idx , color )
if ( idx < 0 or idx > ImGuiCol_ModalWindowDarkening ) then
error ( ' Attempting to set an invalid style color! ' ) ;
return ;
end
local s = imgui.style . Colors ;
s [ idx ] = color ;
imgui.style . Colors = s ;
end
ashita.gui . stylecolor = stylecolor ;
----------------------------------------------------------------------------------------------------
-- func: bor
-- desc: Bitwise or operation handler to loop varargs of flags and bitwise or them together.
----------------------------------------------------------------------------------------------------
local function imguibor ( ... )
-- Obtain the arguments in a loopable table..
local args = { n = select ( ' # ' , ... ) , ... } ;
local ret = 0 ;
for x = 1 , args.n do
ret = bit.bor ( ret , args [ x ] ) ;
end
return ret ;
end
ashita.gui . bor = imguibor ;