Make RadioInput accept optional selected_index

This commit is contained in:
Keavon Chambers 2023-09-11 15:40:05 -07:00
parent b29acbd784
commit 88bdf9580f
12 changed files with 23 additions and 23 deletions

View File

@ -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![

View File

@ -211,7 +211,7 @@ impl<F: Fn(&MessageDiscriminant) -> Vec<KeysGroup>> MessageHandler<LayoutMessage
Widget::PopoverButton(_) => {}
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);
}

View File

@ -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<u32>,
}
#[derive(Clone, Default, Derivative, Serialize, Deserialize, WidgetBuilder, specta::Type)]

View File

@ -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(),

View File

@ -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(),
]);
}

View File

@ -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(),
],
},

View File

@ -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());

View File

@ -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());

View File

@ -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] }]))

View File

@ -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 {

View File

@ -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;

View File

@ -999,7 +999,7 @@ export class RadioInput extends WidgetProps {
disabled!: boolean;
selectedIndex!: number;
selectedIndex!: number | undefined;
}
export type SeparatorDirection = "Horizontal" | "Vertical";