mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-01 04:21:42 +00:00
204 lines
6.0 KiB
Plaintext
204 lines
6.0 KiB
Plaintext
/*
|
|
/datum/menu/Example/verb/Example()
|
|
set name = "" //if this starts with @ the verb is not created and name becomes the command to invoke.
|
|
set desc = "" //desc is the text given to this entry in the menu
|
|
//You can not use src in these verbs. It will be the menu at compile time, but the client at runtime.
|
|
*/
|
|
|
|
GLOBAL_LIST_EMPTY(menulist)
|
|
|
|
/world/proc/load_menu()
|
|
for (var/typepath in subtypesof(/datum/menu))
|
|
new typepath()
|
|
|
|
/datum/menu
|
|
var/name
|
|
var/list/children
|
|
var/datum/menu/myparent
|
|
var/list/verblist
|
|
var/checkbox = CHECKBOX_NONE //checkbox type.
|
|
var/default //default checked type.
|
|
//Set to true to append our children to our parent,
|
|
//Rather then add us as a node (used for having more then one checkgroups in the same menu)
|
|
var/abstract = FALSE
|
|
|
|
/datum/menu/New()
|
|
var/ourentry = GLOB.menulist[type]
|
|
children = list()
|
|
verblist = list()
|
|
if (ourentry)
|
|
if (islist(ourentry)) //some of our childern already loaded
|
|
Add_children(ourentry)
|
|
else
|
|
stack_trace("Menu item double load: [type]")
|
|
qdel(src)
|
|
return
|
|
|
|
GLOB.menulist[type] = src
|
|
|
|
Load_verbs(type, typesof("[type]/verb"))
|
|
|
|
var/datum/menu/parent = GLOB.menulist[parent_type]
|
|
if (!parent)
|
|
GLOB.menulist[parent_type] = list(src)
|
|
else if (islist(parent))
|
|
parent += src
|
|
else
|
|
parent.Add_children(list(src))
|
|
|
|
/datum/menu/proc/Set_parent(datum/menu/parent)
|
|
myparent = parent
|
|
if (abstract)
|
|
myparent.Add_children(children)
|
|
var/list/verblistoftypes = list()
|
|
for(var/thing in verblist)
|
|
LAZYADD(verblistoftypes[verblist[thing]], thing)
|
|
|
|
for(var/verbparenttype in verblistoftypes)
|
|
myparent.Load_verbs(verbparenttype, verblistoftypes[verbparenttype])
|
|
|
|
/datum/menu/proc/Add_children(list/kids)
|
|
if (abstract && myparent)
|
|
myparent.Add_children(kids)
|
|
return
|
|
|
|
for(var/thing in kids)
|
|
var/datum/menu/menuitem = thing
|
|
menuitem.Set_parent(src)
|
|
if (!menuitem.abstract)
|
|
children += menuitem
|
|
|
|
/datum/menu/proc/Load_verbs(verb_parent_type, list/verbs)
|
|
if (abstract && myparent)
|
|
myparent.Load_verbs(verb_parent_type, verbs)
|
|
return
|
|
|
|
for (var/verbpath in verbs)
|
|
verblist[verbpath] = verb_parent_type
|
|
|
|
/datum/menu/proc/Generate_list(client/C)
|
|
. = list()
|
|
if (length(children))
|
|
for (var/thing in children)
|
|
var/datum/menu/child = thing
|
|
var/list/childlist = child.Generate_list(C)
|
|
if (childlist)
|
|
var/childname = "[child]"
|
|
if (childname == "[child.type]")
|
|
var/list/tree = splittext(childname, "/")
|
|
childname = tree[tree.len]
|
|
.[child.type] = "parent=[url_encode(type)];name=[url_encode(childname)]"
|
|
. += childlist
|
|
|
|
|
|
|
|
for (var/thing in verblist)
|
|
var/atom/verb/verbpath = thing
|
|
if (!verbpath)
|
|
stack_trace("Bad VERB in [type] verblist: [english_list(verblist)]")
|
|
var/list/entry = list()
|
|
entry["parent"] = "[type]"
|
|
entry["name"] = verbpath.desc
|
|
if (copytext(verbpath.name,1,2) == "@")
|
|
entry["command"] = copytext(verbpath.name,2)
|
|
else
|
|
entry["command"] = replacetext(verbpath.name, " ", "-")
|
|
var/datum/menu/verb_true_parent = GLOB.menulist[verblist[verbpath]]
|
|
var/true_checkbox = verb_true_parent.checkbox
|
|
if (true_checkbox != CHECKBOX_NONE)
|
|
var/checkedverb = verb_true_parent.Get_checked(C)
|
|
if (true_checkbox == CHECKBOX_GROUP)
|
|
if (verbpath == checkedverb)
|
|
entry["is-checked"] = TRUE
|
|
else
|
|
entry["is-checked"] = FALSE
|
|
else if (true_checkbox == CHECKBOX_TOGGLE)
|
|
entry["is-checked"] = checkedverb
|
|
|
|
entry["command"] = ".updatemenuchecked \"[verb_true_parent.type]\" \"[verbpath]\"\n[entry["command"]]"
|
|
entry["can-check"] = TRUE
|
|
entry["group"] = "[verb_true_parent.type]"
|
|
.[verbpath] = list2params(entry)
|
|
|
|
/datum/menu/proc/Get_checked(client/C)
|
|
return C.prefs.menuoptions[type] || default || FALSE
|
|
|
|
/datum/menu/proc/Load_checked(client/C) //Loads the checked menu item into a new client. Used by icon menus to invoke the checked item.
|
|
return
|
|
|
|
/datum/menu/proc/Set_checked(client/C, verbpath)
|
|
if (checkbox == CHECKBOX_GROUP)
|
|
C.prefs.menuoptions[type] = verbpath
|
|
C.prefs.save_preferences()
|
|
else if (checkbox == CHECKBOX_TOGGLE)
|
|
var/checked = Get_checked(C)
|
|
C.prefs.menuoptions[type] = !checked
|
|
C.prefs.save_preferences()
|
|
winset(C, "[verbpath]", "is-checked = [!checked]")
|
|
|
|
/client/verb/updatemenuchecked(menutype as text, verbpath as text)
|
|
set name = ".updatemenuchecked"
|
|
menutype = text2path(menutype)
|
|
verbpath = text2path(verbpath)
|
|
if (!menutype || !verbpath)
|
|
return
|
|
var/datum/menu/M = GLOB.menulist[menutype]
|
|
if (!M)
|
|
return
|
|
if (!(verbpath in typesof("[menutype]/verb")))
|
|
return
|
|
M.Set_checked(src, verbpath)
|
|
|
|
|
|
/datum/menu/Icon/Load_checked(client/C) //So we can be lazy, we invoke the "checked" menu item on menu load.
|
|
var/atom/verb/verbpath = Get_checked(C)
|
|
if (!verbpath || !(verbpath in typesof("[type]/verb")))
|
|
return
|
|
if (copytext(verbpath.name,1,2) == "@")
|
|
winset(C, null, "command = [copytext(verbpath.name,2)]")
|
|
else
|
|
winset(C, null, "command = [replacetext(verbpath.name, " ", "-")]")
|
|
|
|
/datum/menu/Icon/Size
|
|
checkbox = CHECKBOX_GROUP
|
|
default = /datum/menu/Icon/Size/verb/iconstretchtofit
|
|
|
|
/datum/menu/Icon/Size/verb/iconstretchtofit()
|
|
set name = "@.winset \"mapwindow.map.icon-size=0\""
|
|
set desc = "&Auto (stretch-to-fit)"
|
|
|
|
/datum/menu/Icon/Size/verb/icon96()
|
|
set name = "@.winset \"mapwindow.map.icon-size=96\""
|
|
set desc = "&96x96 (3x)"
|
|
|
|
/datum/menu/Icon/Size/verb/icon64()
|
|
set name = "@.winset \"mapwindow.map.icon-size=64\""
|
|
set desc = "&64x64 (2x)"
|
|
|
|
/datum/menu/Icon/Size/verb/icon48()
|
|
set name = "@.winset \"mapwindow.map.icon-size=48\""
|
|
set desc = "&48x48 (1.5x)"
|
|
|
|
/datum/menu/Icon/Size/verb/icon32()
|
|
set name = "@.winset \"mapwindow.map.icon-size=32\""
|
|
set desc = "&32x32 (1x)"
|
|
|
|
|
|
/datum/menu/Icon/Scaling
|
|
checkbox = CHECKBOX_GROUP
|
|
name = "Scaling Mode"
|
|
default = /datum/menu/Icon/Scaling/verb/NN
|
|
|
|
/datum/menu/Icon/Scaling/verb/NN()
|
|
set name = "@.winset \"mapwindow.map.zoom-mode=distort\""
|
|
set desc = "Nearest Neighbor"
|
|
|
|
/datum/menu/Icon/Scaling/verb/PS()
|
|
set name = "@.winset \"mapwindow.map.zoom-mode=normal\""
|
|
set desc = "Point Sampling"
|
|
|
|
/datum/menu/Icon/Scaling/verb/BL()
|
|
set name = "@.winset \"mapwindow.map.zoom-mode=blur\""
|
|
set desc = "Bilinear"
|
|
|