Перейти к основному содержимому

MantleTable

Таблица с колонками, выделением строк и сортировкой. Строки прокручиваются, заголовок остаётся на месте.

Пример

local frame = vgui.Create('MantleFrame')
frame:SetSize(520, 440)
frame:Center()
frame:MakePopup()

local tbl = vgui.Create('MantleTable', frame)
tbl:Dock(FILL)
tbl:DockMargin(12, 12, 12, 12)

local cols = {
{ 'Ник', 120, TEXT_ALIGN_LEFT, true },
{ 'Роль', 110, TEXT_ALIGN_LEFT, true },
{ 'Клан', 120, TEXT_ALIGN_LEFT, true },
{ 'Очки', 90, TEXT_ALIGN_RIGHT, true },
}

for _, col in ipairs(cols) do
tbl:AddColumn(col[1], col[2], col[3], col[4])
end

local data = {
{ 'Влад', 'Админ', 'Легенда', 1240 },
{ 'Макс', 'ВИП', 'Соколы', 486 },
{ 'Саша', 'Игрок', 'Тайфун', 154 },
{ 'Дима', 'Модератор', 'Корсары', 620 },
{ 'Васёк', 'ВИП', 'Феникс', 301 },
{ 'Артём', 'Игрок', 'Волки', 98 },
{ 'Егор', 'Игрок', 'Металл', 245 },
{ 'Игорь', 'Админ', 'Искра', 877 },
{ 'Лала', 'Игрок', 'Тайфун', 64 },
{ 'Паша', 'Модератор', 'Соколы', 512 },
{ 'Олег', 'ВИП', 'Корсары', 999 },
{ 'Мангол', 'Игрок', 'Волки', 187 },
}

for i = 1, #data do
tbl:AddItem(unpack(data[i]))
end

Сортировка по колонке

Сортировка включается кликом по заголовку. Для этого колонка помечается сортируемой.

local frame = vgui.Create('MantleFrame')
frame:SetSize(520, 440)
frame:Center()
frame:MakePopup()

local tbl = vgui.Create('MantleTable', frame)
tbl:Dock(FILL)
tbl:DockMargin(12, 12, 12, 12)

tbl:AddColumn('Ник', 200, nil, true) -- если false, то не сортируемая
tbl:AddColumn('Очки', 100, nil, true) -- по умолчанию false

tbl:AddItem('darkf', 42)
tbl:AddItem('john', 5)
tbl:AddItem('sasha', 150)
tbl:AddItem('max', 87)
tbl:AddItem('dima', 33)

Выравнивание колонок

local frame = vgui.Create('MantleFrame')
frame:SetSize(520, 440)
frame:Center()
frame:MakePopup()

local tbl = vgui.Create('MantleTable', frame)
tbl:Dock(FILL)
tbl:DockMargin(12, 12, 12, 12)

-- Выравнивание: 'left', 'center', 'right'
tbl:AddColumn('Имя', 200, 'left')
tbl:AddColumn('Очки', 100, 'center', true)
tbl:AddColumn('Статус', 80, 'right')

tbl:AddItem('Влад', 1240, 'Онлайн')
tbl:AddItem('Макс', 486, 'Онлайн')
tbl:AddItem('Саша', 154, 'Офлайн')
tbl:AddItem('Олег', 999, 'Онлайн')

Действия над строками


local frame = vgui.Create('MantleFrame')
frame:SetSize(520, 440)
frame:Center()
frame:MakePopup()

local tbl = vgui.Create('MantleTable', frame)
tbl:Dock(FILL)
tbl:DockMargin(12, 12, 12, 12)

tbl:AddColumn('Ник', 160)
tbl:AddColumn('Роль', 140)
tbl:AddColumn('Очки', 90)

tbl:AddItem('darkf', 'Админ', 42)
tbl:AddItem('john', 'Игрок', 5)
tbl:AddItem('sasha', 'ВИП', 150)
tbl:AddItem('max', 'Модератор', 87)
tbl:AddItem('dima', 'Игрок', 33)

-- Клик по строке
tbl:SetAction(function(row)
print('Клик по строке')
PrintTable(row)
end)

-- ПКМ по строке
tbl:SetRightClickAction(function(row)
print('ПКМ по строке')
PrintTable(row)
end)

Удаление строки

local frame = vgui.Create('MantleFrame')
frame:SetSize(520, 440)
frame:Center()
frame:MakePopup()

local tbl = vgui.Create('MantleTable', frame)
tbl:Dock(FILL)
tbl:DockMargin(12, 12, 12, 12)

tbl:AddColumn('Ник', 300)

tbl:AddItem('darkf')
tbl:AddItem('john')
tbl:AddItem('sasha')
tbl:AddItem('max')

-- Удалить первую строку (нумерация с 1)
tbl:RemoveRow(1)

print(tbl:GetRowCount()) -- 3

Методы

МетодОписание
:AddColumn(string name, int width, string align, bool sortable)Колонка. align: left, center, right
:AddItem(...)Добавить строку. Возвращает номер строки
:SortByColumn(int columnIndex)Программная сортировка
:SetAction(function func)Действие при ЛКМ: func(row)
:SetRightClickAction(function func)Действие при ПКМ: func(row)
:Clear()Очистка
:GetSelectedRow()Индекс выбранной строки или nil
:GetRowCount()Количество строк
:RemoveRow(int index)Удалить строку по индексу

Примечания

  • ПКМ по строке показывает меню с пунктами "Копировать значение" и "Удалить строку".
  • Повторный клик по сортируемой колонке меняет направление сортировки.