| 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 | |