| 91 | JSCallback OnHighlight; |
| 92 | |
| 93 | static CustomWidgetDesc FromJSValue(JSContext* ctx, JSValue desc) |
| 94 | { |
| 95 | CustomWidgetDesc result; |
| 96 | result.Type = JSToStdString(ctx, desc, "type"); |
| 97 | result.X = JSToInt(ctx, desc, "x"); |
| 98 | result.Y = JSToInt(ctx, desc, "y"); |
| 99 | result.Width = JSToInt(ctx, desc, "width"); |
| 100 | result.Height = JSToInt(ctx, desc, "height"); |
| 101 | result.IsDisabled = AsOrDefault(ctx, desc, "isDisabled", false); |
| 102 | result.IsVisible = AsOrDefault(ctx, desc, "isVisible", true); |
| 103 | result.Name = AsOrDefault(ctx, desc, "name", ""); |
| 104 | result.Tooltip = AsOrDefault(ctx, desc, "tooltip", ""); |
| 105 | if (result.Type == "button") |
| 106 | { |
| 107 | JSValue jsImage = JS_GetPropertyStr(ctx, desc, "image"); |
| 108 | if (JS_IsString(jsImage) || JS_IsNumber(jsImage)) |
| 109 | { |
| 110 | result.Image = ImageId(ImageFromJSValue(ctx, jsImage)); |
| 111 | result.HasBorder = false; |
| 112 | } |
| 113 | else |
| 114 | { |
| 115 | result.Text = AsOrDefault(ctx, desc, "text", ""); |
| 116 | result.HasBorder = true; |
| 117 | } |
| 118 | JS_FreeValue(ctx, jsImage); |
| 119 | result.IsPressed = AsOrDefault(ctx, desc, "isPressed", false); |
| 120 | result.OnClick = JSToCallback(ctx, desc, "onClick"); |
| 121 | } |
| 122 | else if (result.Type == "checkbox") |
| 123 | { |
| 124 | result.Text = AsOrDefault(ctx, desc, "text", ""); |
| 125 | result.IsChecked = AsOrDefault(ctx, desc, "isChecked", false); |
| 126 | result.OnChange = JSToCallback(ctx, desc, "onChange"); |
| 127 | } |
| 128 | else if (result.Type == "colourpicker") |
| 129 | { |
| 130 | auto colour = AsOrDefault(ctx, desc, "colour", 0); |
| 131 | if (colour < kColourNumTotal) |
| 132 | { |
| 133 | result.Colour = static_cast<Drawing::Colour>(colour); |
| 134 | } |
| 135 | result.OnChange = JSToCallback(ctx, desc, "onChange"); |
| 136 | } |
| 137 | else if (result.Type == "custom") |
| 138 | { |
| 139 | result.OnDraw = JSToCallback(ctx, desc, "onDraw"); |
| 140 | } |
| 141 | else if (result.Type == "dropdown") |
| 142 | { |
| 143 | JSIterateArray(ctx, desc, "items", [&result](JSContext* ctx2, JSValue val) { |
| 144 | result.Items.push_back(JSToStdString(ctx2, val)); |
| 145 | }); |
| 146 | result.SelectedIndex = AsOrDefault(ctx, desc, "selectedIndex", 0); |
| 147 | result.OnChange = JSToCallback(ctx, desc, "onChange"); |
| 148 | } |
| 149 | else if (result.Type == "groupbox") |
| 150 | { |
nothing calls this directly
no test coverage detected