myspace / CommonLua /X /XCascade.lua
sirnii's picture
Upload 1816 files
b6a38d7 verified
raw
history blame
2.65 kB
DefineClass.XCascade = {
__parents = { "XActionsView" },
properties = {
{ category = "General", id = "MenuEntries", editor = "text", default = "", },
{ category = "General", id = "ShowIcons", editor = "bool", default = false, },
{ category = "General", id = "IconReservedSpace", editor = "number", default = 0, },
{ category = "General", id = "CollapseTitles", editor = "bool", default = false, },
{ category = "General", id = "ItemTemplate", editor = "text", default = "XTextButton" }
},
IdNode = true,
VAlign = "stretch",
HandleMouse = true,
idSubCascade = false,
}
function XCascade:Init()
XSleekScroll:new({
Id = "idScroll",
Target = "idContainer",
Dock = "right",
Margins = box(1, 1, 1, 1),
AutoHide = true,
MinThumbSize = 30,
}, self)
XScrollArea:new({
Id = "idContainer",
VAlign = "top",
LayoutMethod = "VList",
VScroll = "idScroll",
}, self)
end
function XCascade:OnDelete()
if IsKindOf(self.parent, "XCascade") then
self.parent:SetCollapsed(false)
end
end
function XCascade:PopupAction(action_id, host, source)
if self.idSubCascade then
self.idSubCascade:Close()
end
local menu = g_Classes[self.class]:new({
Id = "idSubCascade",
MenuEntries = action_id,
Dock = "right",
GetActionsHost = function(self) return host end,
IconReservedSpace = self.IconReservedSpace,
ShowIcons = self.ShowIcons,
CollapseTitles = self.CollapseTitles,
ItemTemplate = self.ItemTemplate,
}, self)
menu:Open()
menu:SetFocus()
self:SetCollapsed(true)
end
function XCascade:SetCollapsed(collapsed)
self.idContainer:SetMaxWidth(collapsed and self.CollapseTitles and self.IconReservedSpace or 1000000)
if collapsed then
self.idScroll:SetAutoHide(false)
self.idScroll:SetVisible(false)
else
self.idScroll:SetAutoHide(true)
end
end
function XCascade:OnMouseButtonDown(pt, button)
if button == "L" then
self:SetFocus()
if self.idSubCascade then
self.idSubCascade:Close()
end
return "break"
end
if button == "R" then
self:Close()
return "break"
end
end
function XCascade:RebuildActions(host)
local menu = self.MenuEntries
local context = host.context
self.idContainer:DeleteChildren()
for _, action in ipairs(host:GetMenubarActions(menu)) do
if host:FilterAction(action) then
local entry = XTemplateSpawn(self.ItemTemplate, self.idContainer, action)
entry.action = action
entry:SetProperty("Translate", action.ActionTranslate)
entry:SetProperty("Text", action.ActionName)
entry:SetProperty("IconReservedSpace", self.IconReservedSpace)
if self.ShowIcons then
entry:SetProperty("Icon", action.ActionIcon)
end
entry:Open()
end
end
end