diff --git a/editor/src/messages/dialog/export_dialog/export_dialog_message_handler.rs b/editor/src/messages/dialog/export_dialog/export_dialog_message_handler.rs index 830bdffb..6fe15467 100644 --- a/editor/src/messages/dialog/export_dialog/export_dialog_message_handler.rs +++ b/editor/src/messages/dialog/export_dialog/export_dialog_message_handler.rs @@ -70,7 +70,7 @@ impl LayoutHolder for ExportDialogMessageHandler { let export_type = vec![ TextLabel::new("File Type").table_align(true).min_width(100).widget_holder(), Separator::new(SeparatorType::Unrelated).widget_holder(), - RadioInput::new(entries).selected_index(self.file_type as u32).widget_holder(), + RadioInput::new(entries).selected_index(Some(self.file_type as u32)).widget_holder(), ]; let resolution = vec![ diff --git a/editor/src/messages/layout/layout_message_handler.rs b/editor/src/messages/layout/layout_message_handler.rs index aefc1a25..93d3823d 100644 --- a/editor/src/messages/layout/layout_message_handler.rs +++ b/editor/src/messages/layout/layout_message_handler.rs @@ -211,7 +211,7 @@ impl Vec> MessageHandler {} Widget::RadioInput(radio_input) => { let update_value = value.as_u64().expect("RadioInput update was not of type: u64"); - radio_input.selected_index = update_value as u32; + radio_input.selected_index = Some(update_value as u32); let callback_message = (radio_input.entries[update_value as usize].on_update.callback)(&()); responses.add(callback_message); } diff --git a/editor/src/messages/layout/utility_types/widgets/input_widgets.rs b/editor/src/messages/layout/utility_types/widgets/input_widgets.rs index 5e4b8ecf..80114af8 100644 --- a/editor/src/messages/layout/utility_types/widgets/input_widgets.rs +++ b/editor/src/messages/layout/utility_types/widgets/input_widgets.rs @@ -340,7 +340,7 @@ pub struct RadioInput { // This uses `u32` instead of `usize` since it will be serialized as a normal JS number (replace this with `usize` after switching to a Rust-based GUI) #[serde(rename = "selectedIndex")] - pub selected_index: u32, + pub selected_index: Option, } #[derive(Clone, Default, Derivative, Serialize, Deserialize, WidgetBuilder, specta::Type)] diff --git a/editor/src/messages/portfolio/document/document_message_handler.rs b/editor/src/messages/portfolio/document/document_message_handler.rs index 38d21345..1e88bbbb 100644 --- a/editor/src/messages/portfolio/document/document_message_handler.rs +++ b/editor/src/messages/portfolio/document/document_message_handler.rs @@ -1675,8 +1675,8 @@ impl DocumentMessageHandler { .on_update(|_| DialogMessage::RequestComingSoonDialog { issue: Some(320) }.into()), ]) .selected_index(match self.view_mode { - ViewMode::Normal => 0, - _ => 1, + ViewMode::Normal => Some(0), + _ => Some(1), }) .widget_holder(), PopoverButton::new("View Mode", "Coming soon").widget_holder(), @@ -1751,7 +1751,7 @@ impl DocumentMessageHandler { .icon(DocumentMode::GuideMode.icon_name()) .on_update(|_| DialogMessage::RequestComingSoonDialog { issue: Some(331) }.into()), ]]) - .selected_index( Some(self.document_mode as u32)) + .selected_index(Some(self.document_mode as u32)) .draw_icon( true) .interactive( false) // TODO: set to true when dialogs are not spawned .widget_holder(), diff --git a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler/node_properties.rs b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler/node_properties.rs index 0bccd805..74cb2ff4 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler/node_properties.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler/node_properties.rs @@ -432,7 +432,7 @@ fn line_cap_widget(document_node: &DocumentNode, node_id: u64, index: usize, nam widgets.extend_from_slice(&[ Separator::new(SeparatorType::Unrelated).widget_holder(), - RadioInput::new(entries).selected_index(line_cap as u32).widget_holder(), + RadioInput::new(entries).selected_index(Some(line_cap as u32)).widget_holder(), ]); } LayoutGroup::Row { widgets } @@ -452,7 +452,7 @@ fn line_join_widget(document_node: &DocumentNode, node_id: u64, index: usize, na widgets.extend_from_slice(&[ Separator::new(SeparatorType::Unrelated).widget_holder(), - RadioInput::new(entries).selected_index(line_join as u32).widget_holder(), + RadioInput::new(entries).selected_index(Some(line_join as u32)).widget_holder(), ]); } LayoutGroup::Row { widgets } @@ -474,8 +474,8 @@ fn fill_type_widget(document_node: &DocumentNode, node_id: u64, index: usize) -> Separator::new(SeparatorType::Unrelated).widget_holder(), RadioInput::new(entries) .selected_index(match fill_type { - FillType::None | FillType::Solid => 0, - FillType::Gradient => 1, + FillType::None | FillType::Solid => Some(0), + FillType::Gradient => Some(1), }) .widget_holder(), ]); @@ -497,7 +497,7 @@ fn gradient_type_widget(document_node: &DocumentNode, node_id: u64, index: usize widgets.extend_from_slice(&[ Separator::new(SeparatorType::Unrelated).widget_holder(), - RadioInput::new(entries).selected_index(gradient_type as u32).widget_holder(), + RadioInput::new(entries).selected_index(Some(gradient_type as u32)).widget_holder(), ]); } LayoutGroup::Row { widgets } @@ -899,7 +899,7 @@ pub fn adjust_channel_mixer_properties(document_node: &DocumentNode, node_id: No RadioEntryData::new(RedGreenBlue::Green.to_string()).on_update(update_value(|_| TaggedValue::RedGreenBlue(RedGreenBlue::Green), node_id, output_channel_index)), RadioEntryData::new(RedGreenBlue::Blue.to_string()).on_update(update_value(|_| TaggedValue::RedGreenBlue(RedGreenBlue::Blue), node_id, output_channel_index)), ]; - output_channel.extend([RadioInput::new(entries).selected_index(choice as u32).widget_holder()]); + output_channel.extend([RadioInput::new(entries).selected_index(Some(choice as u32)).widget_holder()]); }; let is_output_channel = if let &NodeInput::Value { tagged_value: TaggedValue::RedGreenBlue(choice), @@ -1003,7 +1003,7 @@ pub fn adjust_selective_color_properties(document_node: &DocumentNode, node_id: RadioEntryData::new("Relative").on_update(update_value(|_| TaggedValue::RelativeAbsolute(RelativeAbsolute::Relative), node_id, mode_index)), RadioEntryData::new("Absolute").on_update(update_value(|_| TaggedValue::RelativeAbsolute(RelativeAbsolute::Absolute), node_id, mode_index)), ]; - mode.push(RadioInput::new(entries).selected_index(relative_or_absolute as u32).widget_holder()); + mode.push(RadioInput::new(entries).selected_index(Some(relative_or_absolute as u32)).widget_holder()); }; vec![ @@ -1698,7 +1698,7 @@ pub fn imaginate_properties(document_node: &DocumentNode, node_id: NodeId, conte .map(|(paint, name)| RadioEntryData::new(name).on_update(update_value(move |_| TaggedValue::Bool(paint), node_id, inpaint_index))) .collect(), ) - .selected_index(1 - in_paint as u32) + .selected_index(Some(1 - in_paint as u32)) .widget_holder(), ]); } diff --git a/editor/src/messages/portfolio/document/properties_panel/utility_functions.rs b/editor/src/messages/portfolio/document/properties_panel/utility_functions.rs index 86d16bd3..46d4956c 100644 --- a/editor/src/messages/portfolio/document/properties_panel/utility_functions.rs +++ b/editor/src/messages/portfolio/document/properties_panel/utility_functions.rs @@ -472,7 +472,7 @@ fn node_gradient_type(gradient: &Gradient) -> LayoutGroup { .into() }), ]) - .selected_index(selected_index) + .selected_index(Some(selected_index)) .widget_holder(), ], } @@ -777,7 +777,7 @@ fn node_section_stroke(stroke: &Stroke) -> LayoutGroup { .into() }), ]) - .selected_index(stroke.line_cap_index()) + .selected_index(Some(stroke.line_cap_index())) .widget_holder(), ], }, @@ -809,7 +809,7 @@ fn node_section_stroke(stroke: &Stroke) -> LayoutGroup { .into() }), ]) - .selected_index(stroke.line_join_index()) + .selected_index(Some(stroke.line_join_index())) .widget_holder(), ], }, diff --git a/editor/src/messages/tool/common_functionality/color_selector.rs b/editor/src/messages/tool/common_functionality/color_selector.rs index 57665f73..fb686b72 100644 --- a/editor/src/messages/tool/common_functionality/color_selector.rs +++ b/editor/src/messages/tool/common_functionality/color_selector.rs @@ -94,7 +94,7 @@ impl ToolColorOptions { entry }) .collect(); - let radio = RadioInput::new(entries).selected_index(self.color_type.clone() as u32).widget_holder(); + let radio = RadioInput::new(entries).selected_index(Some(self.color_type.clone() as u32)).widget_holder(); widgets.push(radio); widgets.push(Separator::new(SeparatorType::Related).widget_holder()); diff --git a/editor/src/messages/tool/tool_messages/brush_tool.rs b/editor/src/messages/tool/tool_messages/brush_tool.rs index c013f231..ef921274 100644 --- a/editor/src/messages/tool/tool_messages/brush_tool.rs +++ b/editor/src/messages/tool/tool_messages/brush_tool.rs @@ -186,7 +186,7 @@ impl LayoutHolder for BrushTool { .into_iter() .map(|draw_mode| RadioEntryData::new(format!("{draw_mode:?}")).on_update(move |_| BrushToolMessage::UpdateOptions(BrushToolMessageOptionsUpdate::DrawMode(draw_mode)).into())) .collect(); - widgets.push(RadioInput::new(draw_mode_entries).selected_index(self.options.draw_mode as u32).widget_holder()); + widgets.push(RadioInput::new(draw_mode_entries).selected_index(Some(self.options.draw_mode as u32)).widget_holder()); widgets.push(Separator::new(SeparatorType::Section).widget_holder()); diff --git a/editor/src/messages/tool/tool_messages/gradient_tool.rs b/editor/src/messages/tool/tool_messages/gradient_tool.rs index 14134ddb..71d2b68d 100644 --- a/editor/src/messages/tool/tool_messages/gradient_tool.rs +++ b/editor/src/messages/tool/tool_messages/gradient_tool.rs @@ -115,7 +115,7 @@ impl LayoutHolder for GradientTool { .tooltip("Radial Gradient") .on_update(move |_| GradientToolMessage::UpdateOptions(GradientOptionsUpdate::Type(GradientType::Radial)).into()), ]) - .selected_index((self.selected_gradient().unwrap_or(self.options.gradient_type) == GradientType::Radial) as u32) + .selected_index(Some((self.selected_gradient().unwrap_or(self.options.gradient_type) == GradientType::Radial) as u32)) .widget_holder(); Layout::WidgetLayout(WidgetLayout::new(vec![LayoutGroup::Row { widgets: vec![gradient_type] }])) diff --git a/editor/src/messages/tool/tool_messages/polygon_tool.rs b/editor/src/messages/tool/tool_messages/polygon_tool.rs index b3afca51..6a8a74fa 100644 --- a/editor/src/messages/tool/tool_messages/polygon_tool.rs +++ b/editor/src/messages/tool/tool_messages/polygon_tool.rs @@ -110,7 +110,7 @@ fn create_star_option_widget(primitive_shape_type: PrimitiveShapeType) -> Widget RadioEntryData::new("Polygon").on_update(move |_| PolygonToolMessage::UpdateOptions(PolygonOptionsUpdate::PrimitiveShapeType(PrimitiveShapeType::Polygon)).into()), RadioEntryData::new("Star").on_update(move |_| PolygonToolMessage::UpdateOptions(PolygonOptionsUpdate::PrimitiveShapeType(PrimitiveShapeType::Star)).into()), ]; - RadioInput::new(entries).selected_index(primitive_shape_type as u32).widget_holder() + RadioInput::new(entries).selected_index(Some(primitive_shape_type as u32)).widget_holder() } fn create_weight_widget(line_weight: f64) -> WidgetHolder { diff --git a/frontend/src/components/widgets/inputs/RadioInput.svelte b/frontend/src/components/widgets/inputs/RadioInput.svelte index 136a2388..2bc35e73 100644 --- a/frontend/src/components/widgets/inputs/RadioInput.svelte +++ b/frontend/src/components/widgets/inputs/RadioInput.svelte @@ -11,7 +11,7 @@ const dispatch = createEventDispatcher<{ selectedIndex: number }>(); export let entries: RadioEntries; - export let selectedIndex: number; + export let selectedIndex: number | undefined = undefined; export let disabled = false; export let sharpRightCorners = false; diff --git a/frontend/src/wasm-communication/messages.ts b/frontend/src/wasm-communication/messages.ts index ccc62951..11667336 100644 --- a/frontend/src/wasm-communication/messages.ts +++ b/frontend/src/wasm-communication/messages.ts @@ -999,7 +999,7 @@ export class RadioInput extends WidgetProps { disabled!: boolean; - selectedIndex!: number; + selectedIndex!: number | undefined; } export type SeparatorDirection = "Horizontal" | "Vertical";