diff options
Diffstat (limited to 'DTMenu.c4d')
| -rw-r--r-- | DTMenu.c4d/Script.c | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/DTMenu.c4d/Script.c b/DTMenu.c4d/Script.c index 2089a8d..bc92b7d 100644 --- a/DTMenu.c4d/Script.c +++ b/DTMenu.c4d/Script.c @@ -29,8 +29,7 @@ static const Menu_React_SelectionOffset = 5; static const Menu_React_SelectionChange = 6; static const Menu_React_ShowSubMenu = 7; static const Menu_React_OverrideReaction = -1; -static Menu_React_None; // constants with nil is somehow broken? -// static const Menu_React_None = nil; +static const Menu_React_None = nil; static const Menu_React_Max = Menu_React_ShowSubMenu; global func Menu_React_OffsetSelection(int offset) { return [Menu_React_SelectionOffset, offset]; } @@ -548,6 +547,10 @@ func HandleEntries(array factoryEntries, int& i, array& ret, map& retSettings, a { newSettings = factoryResult.Settings; newEntries = factoryResult.Entries; + if (GetType(newSettings.Selection) == C4V_Int) + { + newSettings.Selection = [newSettings.Selection, 0]; + } } else if(GetType(factoryResult) == C4V_Array) { @@ -743,7 +746,7 @@ func AddEntries() text = Format("%s {{MN7I:7}}", text); } - AddMenuItem(text, !noCommand && "MenuItemCommand", iconID, settings.Object, entry.Count, entryIndex, showDesc && entry.Description || nil, entry.Extra, entry.XPar1, entry.XPar2); + AddMenuItem(text, !noCommand && "MenuItemCommand" || nil, iconID, settings.Object, entry.Count, entryIndex, showDesc && entry.Description || nil, entry.Extra, entry.XPar1, entry.XPar2); if(deleteIcon) { @@ -804,7 +807,8 @@ func React(reaction, array entryIndex, int refreshDelayed) func CheckCondition(map entry) { var condition = entry.Condition; - return !condition || (CallA(condition.Callback, [entry.Icon, settings.Object, entry.Args]) || settings.Condition.DisableMode) == Menu_ConditionReact_Show; + var result = !condition || (CallA(condition.Callback, [entry.Icon, settings.Object, entry.Args]) || settings.Condition.DisableMode); + return result == Menu_ConditionReact_Show || result == true; } func MenuItemCommand(id ID, int itemNumber, int action) @@ -866,6 +870,7 @@ func SubMenuItemCallback(int action, object menuObject, args, array allArgs) func DecodeSelection(int& selection) { + selection ??= 0; var column = selection % columnCount; selection /= columnCount; selection -= columnOffsets[column]; @@ -1233,14 +1238,11 @@ global func Menu_Entry(map entry) { entry = { Placeholder = false }; } - else - { - entry = Extend({ - Text = "", - Placeholder = -1, - Extra = 0, - }, entry, true); - } + entry = Extend({ + Text = "", + Placeholder = -1, + Extra = 0, + }, entry, true); if(!entry.Description) { @@ -1505,7 +1507,7 @@ global func Menu_Adaptor(map settings) } settings.Adaptor.BitField.Values = fieldVals; settings.Adaptor.BitField.Layout = layout; - + var valuePos = layout[Menu_Layout__ValuePos] - 1; for(var fieldPart in fieldVals) { @@ -1670,7 +1672,7 @@ func AdaptorFactory(args, int entryIndex, int entryColumn) else if(args.Type == Menu_AdaptorType_ID) { if(!(GetType(val) == C4V_Any || GetType(val) == C4V_C4ID)) { FatalError("Assertion failed: AdaptorFactory: Value of Menu_Adaptor_Variable has wrong type; assertion code: GetType(val) == C4V_Any || GetType(val) == C4V_C4ID"); } - text = Format(entry.Text, val && GetName(0, val) || ""); + text = Format(entry.Text, val && GetName(nil, val) || ""); if(val) { ExtraIcon(text, icon, val); @@ -1971,9 +1973,9 @@ func AdaptorCommand(int action, object obj, args, array allArgs) } if(action == Menu_CallbackType_Special2) { - if(msgBoardMode == 0) + if(msgBoardMode == nil) { - msgBoardMode = Menu_AdaptorType_Integer + 1; + msgBoardMode = Menu_AdaptorType_Integer; msgBoardEntry = args.EntryIndex; CallMessageBoard(this, false, args.MessageBoardText, GetOwner(obj)); } @@ -2012,9 +2014,9 @@ func AdaptorCommand(int action, object obj, args, array allArgs) { if(action & (Menu_CallbackType_Normal | Menu_CallbackType_Special2)) { - if(msgBoardMode == 0) + if(msgBoardMode == nil) { - msgBoardMode = Menu_AdaptorType_String + 1; + msgBoardMode = Menu_AdaptorType_String; msgBoardEntry = args.EntryIndex; CallMessageBoard(this, false, args.MessageBoardText, GetOwner(obj)); } @@ -2032,9 +2034,9 @@ func AdaptorCommand(int action, object obj, args, array allArgs) { if(action & (Menu_CallbackType_Normal | Menu_CallbackType_Special2)) { - if(msgBoardMode == 0) + if(msgBoardMode == nil) { - msgBoardMode = Menu_AdaptorType_ID + 1; + msgBoardMode = Menu_AdaptorType_ID; msgBoardEntry = args.EntryIndex; CallMessageBoard(this, false, args.MessageBoardText, GetOwner(obj)); } @@ -2124,7 +2126,7 @@ func InputCallback(string input, int plr) var callbackArgs = args.Args; var oldVal = ScopedVar(args.Variable); var val = input; - if(msgBoardMode - 1 == Menu_AdaptorType_Integer) + if(msgBoardMode == Menu_AdaptorType_Integer) { var int = ParseInt(input); var limits = AdaptorGetLimits(args.Limits); @@ -2151,7 +2153,7 @@ func InputCallback(string input, int plr) val = oldVal; } } - else if(msgBoardMode - 1 == Menu_AdaptorType_String) + else if(msgBoardMode == Menu_AdaptorType_String) { if(args.NoEmptyString && (!input || input == "")) { @@ -2162,14 +2164,14 @@ func InputCallback(string input, int plr) ScopedVar(args.Variable) = input; } } - else if(msgBoardMode - 1 == Menu_AdaptorType_ID) + else if(msgBoardMode == Menu_AdaptorType_ID) { val = GetIDByName(input); // WARNING: desyncs between clients with different languages if(!val && GetLength(input) == 4) val = C4Id(input); - if(!GetName(0, val)) val = 0; + if(!GetName(nil, val)) val = 0; ScopedVar(args.Variable) = val; } - msgBoardMode = 0; + msgBoardMode = nil; if(val != oldVal) { var reaction = CallCallbacks(args.Callbacks, Menu_CallbackType_ValueChanged, [Menu_CallbackType_ValueChanged, entry.Icon, settings.Object, callbackArgs, 0, 0, val, oldVal]); @@ -2234,7 +2236,7 @@ global func CreateNewMenu(map settings, map inheritSettings, object parentMenu) Flags = MSG_Left | MSG_Bottom, Position = [40, -60] }, - KeepOpen = 0, + KeepOpen = Menu_KeepOpen_Not, } }, { Settings = inheritSettings }, true), { Settings = { |
