Как обнаружить правой кнопкой мыши на DCollapsibleCategory? [GLua] - PullRequest
0 голосов
/ 29 апреля 2020

Я считаю, что * * * * * * Garry's Mod * DCollapsibleCategory является производным от Panel, поэтому я попытался создать пользовательский элемент v gui, чтобы я мог добавить function PANEL:OnMousePressed(keyCode), но это полностью изменило то, как он запускает dr aws мое табло.

Вот код для пользовательского элемента v gui, возможно, я что-то пропустил:

local PANEL = {}

AccessorFunc(PANEL, "hiddenPanel", "HiddenPanel")

function PANEL:Init()
    self.dataPanel = vgui.Create("DCollapsibleCategory", self)
    self.dataPanel:SetExpanded(0)
    self.dataPanel:SetLabel('')
    self.dataPanel:GetChildren()[1]:SetTall(45)
    self.dataPanel.Paint = function(pnl, w, h)
        draw.RoundedBox(0, 0, 0, w, h, Advocate_Scoreboard.Colors.BASE_HEADER)
    end

    self.hiddenList = vgui.Create("DPanelList", self.dataPanel)
    self.hiddenList:SetSpacing(1)
    self.dataPanel:SetContents(self.hiddenList)

    self.hiddenPanel = vgui.Create("DPanel", self.hiddenList)
    self.hiddenList:AddItem(self.hiddenPanel)
    self.hiddenPanel.Paint = function(pnl, w, h)
        draw.RoundedBox(0, 0, 0, w, h, Color(50, 50, 50))
    end
end

function PANEL:PerformLayout()
    self.dataPanel:SetSize(self:GetWide(), self:GetTall())
    self.dataPanel:GetChildren()[1]:SetTall(45)

    self.hiddenList:SetSize(self.dataPanel:GetWide(), self.dataPanel:GetTall())
    self.hiddenPanel:SetSize(self.hiddenList:GetWide(), 39)
end

function PANEL:OnMousePressed(keyCode)
    print(keyCode)
end

vgui.Register("Advocate_Scoreboard.Row", PANEL)

DCollapsibleCategory не отвечает ни на какие .DoClick функции - я не верьте, что у него есть какой-либо из этих методов, полученный из Panel.

1 Ответ

0 голосов
/ 08 мая 2020

DCollapsibleCategory состоит из строки заголовка и содержимого.

Заголовок не реализует OnMousePressed .

Содержимое составлено любых элементов пользовательского интерфейса, которые вы добавляете в него.
Если вы хотите, чтобы содержимое реагировало на события мыши, вы должны переопределить OnMousePressed для этих отдельных элементов.


Если вам действительно нужна подобная функциональность в строке заголовка, вы можете отправить запрос на извлечение данных в хранилище Garry's Mod.

Или альтернативно:

  1. Копировать код для DCollapsibleCategory
  2. Переименовать DCategoryHeader в DCategoryHeader2
  3. Переименовать DCollapsibleCategory в DCollapsibleCategory2
  4. Добавить следующую функцию в заголовок PANEL таблица
local PANEL = {
    ...

    OnMousePressed = function(self, mcode)
        self.DoClick(self)
        self:GetParent():OnMousePressed(mcode)
    end,

    ...
}

derma.DefineControl( "DCategoryHeader2", "Category Header", PANEL, "DButton" )

И теперь вы можете обнаружить щелчки мышью по заголовку

local DCollapsible = vgui.Create( "DCollapsibleCategory2", frame )
DCollapsible:SetLabel( "Collapsible Category" )
DCollapsible:SetPos( 25, 50 )
DCollapsible:SetSize( 250, 100 )
DCollapsible:SetExpanded( false )
function DCollapsible:OnMousePressed(keyCode)
    chat.AddText("DCollapsible Key pressed- " .. tostring(keyCode))
end

Фрагмент полного кода

...