summaryrefslogtreecommitdiff
path: root/lua/autorun/cl_nadmin.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/autorun/cl_nadmin.lua')
-rw-r--r--lua/autorun/cl_nadmin.lua724
1 files changed, 350 insertions, 374 deletions
diff --git a/lua/autorun/cl_nadmin.lua b/lua/autorun/cl_nadmin.lua
index 31f7730..5b87058 100644
--- a/lua/autorun/cl_nadmin.lua
+++ b/lua/autorun/cl_nadmin.lua
@@ -1,374 +1,350 @@
-AddCSLuaFile()
-if SERVER then return end
-local nadmin = include("sh_nadmin.lua")
-
---Functions
-local add_group_to_groupsheet
-local remove_group_from_groupsheet
-
---Override what print() does, just for this file
-local oldprint = print
-local print = function(...)
- local args = {...}
- table.insert(args,1,"[NADMIN]")
- oldprint(unpack(args))
-end
---The variables that hold things
---local groups = nadmin.groups
---local players = nadmin.players
---local privileges = nadmin.privileges
-
-local usergroup_dropdowns = {}
-local function add_usergroup_to_usergroup_dropdowns(name)
- for k,v in pairs(usergroup_dropdowns) do
- if v:IsValid() then
- v:AddChoice(name)
- else
- usergroup_dropdowns[k] = nil
- end
- end
-end
-local function delete_usergroup_from_usergroup_dropdowns(group)
- for _,v in pairs(usergroup_dropdowns) do
- print("Looking at object:",v)
- table.RemoveByValue(v.Choices, name)
- if v.Menu then
- v.Menu:Remove()
- v.Menu = nil
- end
- if v:GetText() == group.group.Name then
- v:SetText(group.group.MinAccess)
- end
- end
-end
-net.Receive("nadmin_init_privileges", function(len)
- print("got privileges")
- nadmin.privileges = net.ReadTable()
-end)
-net.Receive("nadmin_init_players", function(len)
- print("got players")
- nadmin.players = net.ReadTable()
-end)
-net.Receive("nadmin_init_groups", function(len)
- print("got groups")
- nadmin.groups = net.ReadTable()
- PrintTable(nadmin.groups)
-end)
-
-net.Receive("nadmin_update_privilege", function(len)
- local exists = net.ReadBool()
- local privilege = net.ReadTable()
- if exists then
- nadmin.privileges[privilege.Name] = privilege
- else
- nadmin.privileges[privilege.Name] = nil
- end
-end)
-net.Receive("nadmin_create_group", function(len)
- local name = net.ReadString()
- local inherits = net.ReadString()
- local source = net.ReadString()
- nadmin.groups[name] = {
- name = name,
- group = {
- Name = name,
- Inherits = inherits
- },
- privileges = {},
- nadmin = source == "nadmin",
- src = source
- }
- add_group_to_groupsheet(nadmin.groups[name])
- add_usergroup_to_usergroup_dropdowns(name)
- CAMI.RegisterUsergroup(nadmin.groups[name].group, "nadmin")
-end)
-net.Receive("nadmin_update_group", function(len)
- local name = net.ReadString()
- local privilege = net.ReadString()
- local exists = net.ReadBool()
- if exists then
- nadmin.groups[name].privileges[privilege] = exists
- else
- nadmin.groups[name].privileges[privilege] = nil
- end
-end)
-net.Receive("nadmin_delete_group", function(len)
- local name = net.ReadString()
- remove_group_from_groupsheet(nadmin.groups[name])
- delete_usergroup_from_usergroup_dropdowns(nadmin.groups[name])
- nadmin.groups[name] = nil
- CAMI.UnregisterUsergroup(name,"nadmin")
-end)
-net.Receive("nadmin_update_player", function(len)
- local player = net.ReadEntity()
- local group = net.ReadString()
- local sid = player:SteamID64()
- print("At time of nadmin_update_player, player is", player)
- nadmin.players[sid] = nadmin.players[sid] or {}
- nadmin.players[sid].group = group
- nadmin.players[sid].last_name = player:Name()
- if nadmin.players[sid].combo then
- nadmin.players[sid].combo:SetValue(group)
- end
- if nadmin.players[sid].line then
- nadmin.players[sid].line:SetColumnText(2,player:Name())
- end
- CAMI.SignalSteamIDUserGroupChanged(sid,group,"nadmin")
-end)
-
-concommand.Add("cl_print_privileges", function(ply,cmd,args)
- PrintTable(nadmin.privileges)
-end)
-concommand.Add("cl_print_groups", function(ply,cmd,args)
- print("NAdmin groups:",nadmin.groups)
- PrintTable(nadmin.groups)
- print("Local groups:",groups)
- PrintTable(nadmin.groups)
-end)
-concommand.Add("cl_print_players", function(ply,cmd,args)
- PrintTable(nadmin.players)
-end)
-
-local function create_usergroup_combo(parent)
- local ret = vgui.Create("DComboBox",parent)
- for groupname, _ in pairs(nadmin.groups) do
- ret:AddChoice(groupname)
- end
- table.insert(usergroup_dropdowns, ret)
- return ret
-end
-
-local nadmin_frame,users_tbl,groups_tbl = nil,nil,nil
-local users_sheet,groups_sheet = nil,nil
---ply :: entity
-local function add_user_to_usersheet(steamid,ply)
- if not nadmin_frame then return end
- local player_ent = player.GetBySteamID64(steamid)
- local line = users_tbl:AddLine(steamid, ply.last_name, ply.group)
- local dropdown = create_usergroup_combo(line)
- if nadmin.players[steamid] then
- dropdown:SetValue(nadmin.players[steamid].group)
- else
- dropdown:SetValue("user")
- end
- dropdown.OnSelect = function(self, index, value)
- net.Start("nadmin_request_set_user_group")
- net.WriteEntity(player_ent)
- net.WriteString(value)
- net.SendToServer()
- end
- line:SetColumnText(3,dropdown)
- ply.combo = dropdown --Update the combo box when someone else updates the group
- ply.line = line
-end
-
---ply :: entity
-local function remove_user_from_usersheet(ply)
- if not nadmin_frame then return end
- if not ply.line then return end
- users_tbl:RemoveLine(ply.line.m_iID)
-end
-
-local privilege_checkboxes = {}
-local function add_privilege_to_groupsheet(privilege)
- local ordered_privileges = {}
- for _,privilege in pairs(nadmin.privileges) do
- table.insert(ordered_privileges,privilege)
- end
- table.sort(ordered_privileges, function(a,b) return a.Name > b.Name end)
- local privilege_num = 0
- for num,ordered_privilege in pairs(ordered_privileges) do
- if ordered_privilege == privilege then
- privilege_num = num
- break
- end
- end
- local column = groups_tbl:AddColumn(privilege.Name)
- column.DoClick = function(self)
- local explain_frame = vgui.Create("DFrame")
- explain_frame:SetTitle(privilege.Name)
- local description = vgui.Create("DLabel",explain_frame)
- description:SetWrap(true)
- if privilege.Description then
- description:SetText(privilege.Description)
- else
- description:SetText("This privilege does not have a description")
- end
- explain_frame:SetSize(ScrW() / 6, ScrH() / 4)
- explain_frame:SetPos(ScrW() / 4 + 100,ScrH() / 4 + 50)
- explain_frame:MakePopup()
- description:Dock(FILL)
- end
- column:SetWrap(true)
- for groupname,group in pairs(nadmin.groups) do
- local checkbox = vgui.Create("DCheckBox", group.line)
- privilege_checkboxes[groupname] = checkbox
- print("Group:")
- PrintTable(group)
- if group.nadmin then
- checkbox:SetChecked(group.privileges[privilege.Name])
- checkbox.OnChange = function(self,value)
- net.Start("nadmin_request_update_group")
- net.WriteString(groupname)
- net.WriteString(privilege.Name)
- net.WriteBool(value)
- net.SendToServer()
- end
- else
- checkbox:SetDisabled(true)
- end
- group.line:SetColumnText(privilege_num + 2,checkbox)
- end
-end
-
-local function remove_privilege_from_groupsheet(privilege)
-
-end
-
-add_group_to_groupsheet = function(group)
- if not groups_tbl then return end
- local line = groups_tbl:AddLine(group.group.Name)
- local ordered_privileges = {}
- for _,privilege in pairs(nadmin.privileges) do
- table.insert(ordered_privileges,privilege)
- end
- table.sort(ordered_privileges, function(a,b) return a.Name > b.Name end)
- local delete_group_button = vgui.Create("DButton",line)
- delete_group_button:SetText("-")
- delete_group_button:SetEnabled(group.nadmin)
- delete_group_button.DoClick = function(self)
- net.Start("nadmin_request_delete_group")--(group :: string)
- net.WriteString(group.group.Name)
- net.SendToServer()
- end
- line:SetColumnText(2,delete_group_button)
- for n,privilege_name in pairs(ordered_privileges) do
- local privilege_checkbox = vgui.Create("DCheckBox",line)
- line:SetColumnText(n + 2,privilege_checkbox)
- if group.nadmin then
- privilege_checkbox:SetChecked(group.privileges[privilege_name])
- privilege_checkbox.OnChange = function(self,val)
- net.Start("nadmin_request_update_group") --(group :: string, privilege :: string, set :: bool)
- net.WriteString(group.group.Name)
- net.WriteString(privilege_name.Name)
- net.WriteBool(val)
- net.SendToServer()
- end
- else
- privilege_checkbox:SetDisabled(true)
- end
- end
- group.line = line
- group.line_id = #groups_tbl.Lines
-end
-
-function remove_group_from_groupsheet(group)
- groups_tbl:RemoveLine(group.line_id)
-end
-
-local function create_new_group_dialog()
- local dialog = vgui.Create("DFrame")
- dialog:SetTitle("Create Group")
-
- local inherits_label = vgui.Create("DLabel",dialog)
- inherits_label:Dock(TOP)
- inherits_label:SetText("Inherits from")
-
- local inherits = create_usergroup_combo(dialog)
- inherits:Dock(TOP)
-
- local groupname_label = vgui.Create("DLabel",dialog)
- groupname_label:Dock(TOP)
- groupname_label:SetText("Group Name")
-
- local groupname = vgui.Create("DTextEntry",dialog)
- groupname:Dock(TOP)
-
- local createbtn = vgui.Create("DButton",dialog)
- createbtn:SetText("Create Group")
- createbtn.DoClick = function(self)
- net.Start("nadmin_request_create_group")
- net.WriteString(groupname:GetText())
- net.WriteString(inherits:GetText())
- net.SendToServer()
- dialog:Close()
- end
- createbtn:Dock(BOTTOM)
-
- dialog:SetSize(250,150)
- dialog:Center()
- dialog:MakePopup()
-end
-
-local function create_nadmin_panel()
- if nadmin_frame ~= nil and nadmin_frame:IsValid() then
- nadmin_frame:SetVisible(true)
- return
- end
-
- nadmin_frame = vgui.Create("DFrame")
- nadmin_frame:SetTitle("nAdmin")
- nadmin_frame.OnClose = function(self)
- self:SetVisible(false)
- return false
- end
- nadmin_frame:SetSizable(true)
- local prop_sheet = vgui.Create("DPropertySheet",nadmin_frame)
- prop_sheet:Dock(FILL)
- users_tbl = vgui.Create("DListView",prop_sheet)
- users_tbl:AddColumn("SteamID")
- users_tbl:AddColumn("Name")
- users_tbl:AddColumn("Group")
- for steamid,player in pairs(nadmin.players) do
- add_user_to_usersheet(steamid,player)
- end
-
- prop_sheet:AddSheet("Users",users_tbl,nil,true,true,"Sets users to particular groups")
-
- users_tbl:Dock(FILL)
-
- local groups_scroller = vgui.Create("DHorizontalScroller",prop_sheet)
- groups_tbl = vgui.Create("DListView",groups_scroller)
- groups_scroller:Dock(FILL)
- local gcol = groups_tbl:AddColumn("Group")
- local dcol = groups_tbl:AddColumn("Delete")
- gcol:SetEnabled(false)
- dcol:SetEnabled(false)
- local tot_columns = 0
- local tot_width = 0
- --Don't do anything if the user clicks the Group or Delete headers
- for _,v in pairs(groups_tbl.Columns) do
- v.DoClick = function() end
- end
- local add_line = groups_tbl:AddLine("")
- local add_btn = vgui.Create("DButton",add_line)
- add_btn:SetText("+")
- add_btn.DoClick = function(self)
- create_new_group_dialog()
- end
- add_line:SetColumnText(1,add_btn)
- for groupname,group in pairs(nadmin.groups) do
- tot_columns = tot_columns + 1
- add_group_to_groupsheet(group)
- tot_width = tot_width + string.len(groupname)*30 --10 pixels for each character?
- end
-
- for privilegename, privilege in pairs(nadmin.privileges) do
- add_privilege_to_groupsheet(privilege)
- end
- groups_tbl:SetWidth(tot_width)
- prop_sheet:AddSheet("Groups",groups_scroller,nil,true,true,"Set the privileges for a group")
- groups_scroller:AddPanel(groups_tbl)
-
- nadmin_frame:SetSize(ScrW() / 2, ScrH() / 2)
- nadmin_frame:SetPos(ScrW() / 4, ScrH() / 4)
- nadmin_frame:MakePopup()
-end
-
-concommand.Add("cl_nadmin", function(ply,cmd,args)
- create_nadmin_panel()
-end)
-concommand.Add("cl_nadmin_new", function(ply,cmd,args)
- nadmin_frame = nil
- create_nadmin_panel()
-end)
+AddCSLuaFile()
+if SERVER then return end
+local nadmin = include("sh_nadmin.lua")
+
+--Functions
+local add_group_to_groupsheet
+local remove_group_from_groupsheet
+
+--Override what print() does, just for this file
+local oldprint = print
+local print = function(...)
+ local args = {...}
+ table.insert(args,1,"[NADMIN]")
+ oldprint(unpack(args))
+end
+
+local usergroup_dropdowns = {}
+local function add_usergroup_to_usergroup_dropdowns(name)
+ for k,v in pairs(usergroup_dropdowns) do
+ if v:IsValid() then
+ v:AddChoice(name)
+ else
+ usergroup_dropdowns[k] = nil
+ end
+ end
+end
+local function delete_usergroup_from_usergroup_dropdowns(group)
+ for _,v in pairs(usergroup_dropdowns) do
+ table.RemoveByValue(v.Choices, name)
+ if v.Menu then
+ v.Menu:Remove()
+ v.Menu = nil
+ end
+ if v:GetText() == group.group.Name then
+ v:SetText(group.group.MinAccess)
+ end
+ end
+end
+
+net.Receive("nadmin_init_privileges", function(len)
+ nadmin.privileges = net.ReadTable()
+end)
+net.Receive("nadmin_init_players", function(len)
+ nadmin.players = net.ReadTable()
+end)
+net.Receive("nadmin_init_groups", function(len)
+ nadmin.groups = net.ReadTable()
+end)
+
+net.Receive("nadmin_update_privilege", function(len)
+ local exists = net.ReadBool()
+ local privilege = net.ReadTable()
+ if exists then
+ nadmin.privileges[privilege.Name] = privilege
+ else
+ nadmin.privileges[privilege.Name] = nil
+ end
+end)
+net.Receive("nadmin_create_group", function(len)
+ local name = net.ReadString()
+ local inherits = net.ReadString()
+ local source = net.ReadString()
+ nadmin.groups[name] = {
+ name = name,
+ group = {
+ Name = name,
+ Inherits = inherits
+ },
+ privileges = {},
+ nadmin = source == "nadmin",
+ src = source
+ }
+ add_group_to_groupsheet(nadmin.groups[name])
+ add_usergroup_to_usergroup_dropdowns(name)
+ CAMI.RegisterUsergroup(nadmin.groups[name].group, "nadmin")
+end)
+net.Receive("nadmin_update_group", function(len)
+ local name = net.ReadString()
+ local privilege = net.ReadString()
+ local exists = net.ReadBool()
+ if exists then
+ nadmin.groups[name].privileges[privilege] = exists
+ else
+ nadmin.groups[name].privileges[privilege] = nil
+ end
+end)
+net.Receive("nadmin_delete_group", function(len)
+ local name = net.ReadString()
+ remove_group_from_groupsheet(nadmin.groups[name])
+ delete_usergroup_from_usergroup_dropdowns(nadmin.groups[name])
+ nadmin.groups[name] = nil
+ CAMI.UnregisterUsergroup(name,"nadmin")
+end)
+net.Receive("nadmin_update_player", function(len)
+ local player = net.ReadEntity()
+ local group = net.ReadString()
+ local sid = player:SteamID64()
+ nadmin.players[sid] = nadmin.players[sid] or {}
+ nadmin.players[sid].group = group
+ nadmin.players[sid].last_name = player:Name()
+ if nadmin.players[sid].combo then
+ nadmin.players[sid].combo:SetValue(group)
+ end
+ if nadmin.players[sid].line then
+ nadmin.players[sid].line:SetColumnText(2,player:Name())
+ end
+ CAMI.SignalSteamIDUserGroupChanged(sid,group,"nadmin")
+end)
+
+local function create_usergroup_combo(parent)
+ local ret = vgui.Create("DComboBox",parent)
+ for groupname, _ in pairs(nadmin.groups) do
+ ret:AddChoice(groupname)
+ end
+ table.insert(usergroup_dropdowns, ret)
+ return ret
+end
+
+local nadmin_frame,users_tbl,groups_tbl = nil,nil,nil
+local users_sheet,groups_sheet = nil,nil
+--ply :: entity
+local function add_user_to_usersheet(steamid,ply)
+ if not nadmin_frame then return end
+ local player_ent = player.GetBySteamID64(steamid)
+ local line = users_tbl:AddLine(steamid, ply.last_name, ply.group)
+ local dropdown = create_usergroup_combo(line)
+ if nadmin.players[steamid] then
+ dropdown:SetValue(nadmin.players[steamid].group)
+ else
+ dropdown:SetValue("user")
+ end
+ dropdown.OnSelect = function(self, index, value)
+ net.Start("nadmin_request_set_user_group")
+ net.WriteEntity(player_ent)
+ net.WriteString(value)
+ net.SendToServer()
+ end
+ line:SetColumnText(3,dropdown)
+ ply.combo = dropdown --Update the combo box when someone else updates the group
+ ply.line = line
+end
+
+--ply :: entity
+local function remove_user_from_usersheet(ply)
+ if not nadmin_frame then return end
+ if not ply.line then return end
+ users_tbl:RemoveLine(ply.line.m_iID)
+end
+
+local privilege_checkboxes = {}
+local function add_privilege_to_groupsheet(privilege)
+ local ordered_privileges = {}
+ for _,privilege in pairs(nadmin.privileges) do
+ table.insert(ordered_privileges,privilege)
+ end
+ table.sort(ordered_privileges, function(a,b) return a.Name > b.Name end)
+ local privilege_num = 0
+ for num,ordered_privilege in pairs(ordered_privileges) do
+ if ordered_privilege == privilege then
+ privilege_num = num
+ break
+ end
+ end
+ local column = groups_tbl:AddColumn(privilege.Name)
+ column.DoClick = function(self)
+ local explain_frame = vgui.Create("DFrame")
+ explain_frame:SetTitle(privilege.Name)
+ local description = vgui.Create("DLabel",explain_frame)
+ description:SetWrap(true)
+ if privilege.Description then
+ description:SetText(privilege.Description)
+ else
+ description:SetText("This privilege does not have a description")
+ end
+ explain_frame:SetSize(ScrW() / 6, ScrH() / 4)
+ explain_frame:SetPos(ScrW() / 4 + 100,ScrH() / 4 + 50)
+ explain_frame:MakePopup()
+ description:Dock(FILL)
+ end
+ column:SetWrap(true)
+ for groupname,group in pairs(nadmin.groups) do
+ local checkbox = vgui.Create("DCheckBox", group.line)
+ privilege_checkboxes[groupname] = checkbox
+ if group.nadmin then
+ checkbox:SetChecked(group.privileges[privilege.Name])
+ checkbox.OnChange = function(self,value)
+ net.Start("nadmin_request_update_group")
+ net.WriteString(groupname)
+ net.WriteString(privilege.Name)
+ net.WriteBool(value)
+ net.SendToServer()
+ end
+ else
+ checkbox:SetDisabled(true)
+ end
+ group.line:SetColumnText(privilege_num + 2,checkbox)
+ end
+end
+
+local function remove_privilege_from_groupsheet(privilege)
+
+end
+
+add_group_to_groupsheet = function(group)
+ if not groups_tbl then return end
+ local line = groups_tbl:AddLine(group.group.Name)
+ local ordered_privileges = {}
+ for _,privilege in pairs(nadmin.privileges) do
+ table.insert(ordered_privileges,privilege)
+ end
+ table.sort(ordered_privileges, function(a,b) return a.Name > b.Name end)
+ local delete_group_button = vgui.Create("DButton",line)
+ delete_group_button:SetText("-")
+ delete_group_button:SetEnabled(group.nadmin)
+ delete_group_button.DoClick = function(self)
+ net.Start("nadmin_request_delete_group")--(group :: string)
+ net.WriteString(group.group.Name)
+ net.SendToServer()
+ end
+ line:SetColumnText(2,delete_group_button)
+ for n,privilege_name in pairs(ordered_privileges) do
+ local privilege_checkbox = vgui.Create("DCheckBox",line)
+ line:SetColumnText(n + 2,privilege_checkbox)
+ if group.nadmin then
+ privilege_checkbox:SetChecked(group.privileges[privilege_name])
+ privilege_checkbox.OnChange = function(self,val)
+ net.Start("nadmin_request_update_group") --(group :: string, privilege :: string, set :: bool)
+ net.WriteString(group.group.Name)
+ net.WriteString(privilege_name.Name)
+ net.WriteBool(val)
+ net.SendToServer()
+ end
+ else
+ privilege_checkbox:SetDisabled(true)
+ end
+ end
+ group.line = line
+ group.line_id = #groups_tbl.Lines
+end
+
+function remove_group_from_groupsheet(group)
+ groups_tbl:RemoveLine(group.line_id)
+end
+
+local function create_new_group_dialog()
+ local dialog = vgui.Create("DFrame")
+ dialog:SetTitle("Create Group")
+
+ local inherits_label = vgui.Create("DLabel",dialog)
+ inherits_label:Dock(TOP)
+ inherits_label:SetText("Inherits from")
+
+ local inherits = create_usergroup_combo(dialog)
+ inherits:Dock(TOP)
+
+ local groupname_label = vgui.Create("DLabel",dialog)
+ groupname_label:Dock(TOP)
+ groupname_label:SetText("Group Name")
+
+ local groupname = vgui.Create("DTextEntry",dialog)
+ groupname:Dock(TOP)
+
+ local createbtn = vgui.Create("DButton",dialog)
+ createbtn:SetText("Create Group")
+ createbtn.DoClick = function(self)
+ net.Start("nadmin_request_create_group")
+ net.WriteString(groupname:GetText())
+ net.WriteString(inherits:GetText())
+ net.SendToServer()
+ dialog:Close()
+ end
+ createbtn:Dock(BOTTOM)
+
+ dialog:SetSize(250,150)
+ dialog:Center()
+ dialog:MakePopup()
+end
+
+local function create_nadmin_panel()
+ if nadmin_frame ~= nil and nadmin_frame:IsValid() then
+ nadmin_frame:SetVisible(true)
+ return
+ end
+
+ nadmin_frame = vgui.Create("DFrame")
+ nadmin_frame:SetTitle("nAdmin")
+ nadmin_frame.OnClose = function(self)
+ self:SetVisible(false)
+ return false
+ end
+ nadmin_frame:SetSizable(true)
+ local prop_sheet = vgui.Create("DPropertySheet",nadmin_frame)
+ prop_sheet:Dock(FILL)
+ users_tbl = vgui.Create("DListView",prop_sheet)
+ users_tbl:AddColumn("SteamID")
+ users_tbl:AddColumn("Name")
+ users_tbl:AddColumn("Group")
+ for steamid,player in pairs(nadmin.players) do
+ add_user_to_usersheet(steamid,player)
+ end
+
+ prop_sheet:AddSheet("Users",users_tbl,nil,true,true,"Sets users to particular groups")
+
+ users_tbl:Dock(FILL)
+
+ local groups_scroller = vgui.Create("DHorizontalScroller",prop_sheet)
+ groups_tbl = vgui.Create("DListView",groups_scroller)
+ groups_scroller:Dock(FILL)
+ local gcol = groups_tbl:AddColumn("Group")
+ local dcol = groups_tbl:AddColumn("Delete")
+ gcol:SetEnabled(false)
+ dcol:SetEnabled(false)
+ local tot_columns = 0
+ local tot_width = 0
+ --Don't do anything if the user clicks the Group or Delete headers
+ for _,v in pairs(groups_tbl.Columns) do
+ v.DoClick = function() end
+ end
+ local add_line = groups_tbl:AddLine("")
+ local add_btn = vgui.Create("DButton",add_line)
+ add_btn:SetText("+")
+ add_btn.DoClick = function(self)
+ create_new_group_dialog()
+ end
+ add_line:SetColumnText(1,add_btn)
+ for groupname,group in pairs(nadmin.groups) do
+ tot_columns = tot_columns + 1
+ add_group_to_groupsheet(group)
+ tot_width = tot_width + string.len(groupname)*30 --10 pixels for each character?
+ end
+
+ for privilegename, privilege in pairs(nadmin.privileges) do
+ add_privilege_to_groupsheet(privilege)
+ end
+ groups_tbl:SetWidth(tot_width)
+ prop_sheet:AddSheet("Groups",groups_scroller,nil,true,true,"Set the privileges for a group")
+ groups_scroller:AddPanel(groups_tbl)
+
+ nadmin_frame:SetSize(ScrW() / 2, ScrH() / 2)
+ nadmin_frame:SetPos(ScrW() / 4, ScrH() / 4)
+ nadmin_frame:MakePopup()
+end
+
+concommand.Add("cl_nadmin", function(ply,cmd,args)
+ create_nadmin_panel()
+end)
+concommand.Add("cl_nadmin_new", function(ply,cmd,args)
+ nadmin_frame = nil
+ create_nadmin_panel()
+end)