Make RadioInput accept optional selected_index
This commit is contained in:
parent
b29acbd784
commit
88bdf9580f
|
|
@ -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![
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)]
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
],
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
||||
|
|
|
|||
|
|
@ -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] }]))
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -999,7 +999,7 @@ export class RadioInput extends WidgetProps {
|
|||
|
||||
disabled!: boolean;
|
||||
|
||||
selectedIndex!: number;
|
||||
selectedIndex!: number | undefined;
|
||||
}
|
||||
|
||||
export type SeparatorDirection = "Horizontal" | "Vertical";
|
||||
|
|
|
|||
Loading…
Reference in New Issue