Add CollapsingHeader::open
to control if it is open or collapsed (#1006)
Closes https://github.com/emilk/egui/issues/978
This commit is contained in:
parent
2684929a5d
commit
369ce95bbd
2 changed files with 21 additions and 1 deletions
|
@ -19,6 +19,7 @@ NOTE: [`epaint`](epaint/CHANGELOG.md), [`eframe`](eframe/CHANGELOG.md), [`egui_w
|
||||||
* When using a custom font you can now specify a font index ([#873](https://github.com/emilk/egui/pull/873)).
|
* When using a custom font you can now specify a font index ([#873](https://github.com/emilk/egui/pull/873)).
|
||||||
* Add vertical sliders with `Slider::new(…).vertical()` ([#875](https://github.com/emilk/egui/pull/875)).
|
* Add vertical sliders with `Slider::new(…).vertical()` ([#875](https://github.com/emilk/egui/pull/875)).
|
||||||
* Add `Button::image_and_text` ([#832](https://github.com/emilk/egui/pull/832)).
|
* Add `Button::image_and_text` ([#832](https://github.com/emilk/egui/pull/832)).
|
||||||
|
* Add `CollapsingHeader::open` to control if it is open or collapsed ([#1006](https://github.com/emilk/egui/pull/1006)).
|
||||||
|
|
||||||
### Changed 🔧
|
### Changed 🔧
|
||||||
* MSRV (Minimum Supported Rust Version) is now `1.56.0`.
|
* MSRV (Minimum Supported Rust Version) is now `1.56.0`.
|
||||||
|
|
|
@ -144,6 +144,7 @@ pub(crate) fn paint_icon(ui: &mut Ui, openness: f32, response: &Response) {
|
||||||
pub struct CollapsingHeader {
|
pub struct CollapsingHeader {
|
||||||
text: WidgetText,
|
text: WidgetText,
|
||||||
default_open: bool,
|
default_open: bool,
|
||||||
|
open: Option<bool>,
|
||||||
id_source: Id,
|
id_source: Id,
|
||||||
enabled: bool,
|
enabled: bool,
|
||||||
selectable: bool,
|
selectable: bool,
|
||||||
|
@ -164,6 +165,7 @@ impl CollapsingHeader {
|
||||||
Self {
|
Self {
|
||||||
text,
|
text,
|
||||||
default_open: false,
|
default_open: false,
|
||||||
|
open: None,
|
||||||
id_source,
|
id_source,
|
||||||
enabled: true,
|
enabled: true,
|
||||||
selectable: false,
|
selectable: false,
|
||||||
|
@ -179,6 +181,16 @@ impl CollapsingHeader {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Calling `.open(Some(true))` will make the collapsing header open this frame (or stay open).
|
||||||
|
///
|
||||||
|
/// Calling `.open(Some(false))` will make the collapsing header close this frame (or stay closed).
|
||||||
|
///
|
||||||
|
/// Calling `.open(None)` has no effect (default).
|
||||||
|
pub fn open(mut self, open: Option<bool>) -> Self {
|
||||||
|
self.open = open;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Explicitly set the source of the `Id` of this widget, instead of using title label.
|
/// Explicitly set the source of the `Id` of this widget, instead of using title label.
|
||||||
/// This is useful if the title label is dynamic or not unique.
|
/// This is useful if the title label is dynamic or not unique.
|
||||||
pub fn id_source(mut self, id_source: impl Hash) -> Self {
|
pub fn id_source(mut self, id_source: impl Hash) -> Self {
|
||||||
|
@ -256,6 +268,7 @@ impl CollapsingHeader {
|
||||||
let Self {
|
let Self {
|
||||||
text,
|
text,
|
||||||
default_open,
|
default_open,
|
||||||
|
open,
|
||||||
id_source,
|
id_source,
|
||||||
enabled: _,
|
enabled: _,
|
||||||
selectable: _,
|
selectable: _,
|
||||||
|
@ -291,10 +304,16 @@ impl CollapsingHeader {
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut state = State::from_memory_with_default_open(ui.ctx(), id, default_open);
|
let mut state = State::from_memory_with_default_open(ui.ctx(), id, default_open);
|
||||||
if header_response.clicked() {
|
if let Some(open) = open {
|
||||||
|
if open != state.open {
|
||||||
state.toggle(ui);
|
state.toggle(ui);
|
||||||
header_response.mark_changed();
|
header_response.mark_changed();
|
||||||
}
|
}
|
||||||
|
} else if header_response.clicked() {
|
||||||
|
state.toggle(ui);
|
||||||
|
header_response.mark_changed();
|
||||||
|
}
|
||||||
|
|
||||||
header_response
|
header_response
|
||||||
.widget_info(|| WidgetInfo::labeled(WidgetType::CollapsingHeader, text.text()));
|
.widget_info(|| WidgetInfo::labeled(WidgetType::CollapsingHeader, text.text()));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue