From: Christoph Heiss <c.heiss@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH installer 1/7] tui: fix setting content when using the `DiskSizeEditView` builder
Date: Wed, 4 Oct 2023 16:42:12 +0200 [thread overview]
Message-ID: <20231004144232.327071-2-c.heiss@proxmox.com> (raw)
In-Reply-To: <20231004144232.327071-1-c.heiss@proxmox.com>
Previously, it would throw away all other settings (like `max_value`),
if a construct like
DiskSizeEditView::new().max_value(8.0).content(8.0)
was used, due to simply replacing the inner view.
Instead, modify the inner view.
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
proxmox-tui-installer/src/views/mod.rs | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/proxmox-tui-installer/src/views/mod.rs b/proxmox-tui-installer/src/views/mod.rs
index aa24fa4..76f96a1 100644
--- a/proxmox-tui-installer/src/views/mod.rs
+++ b/proxmox-tui-installer/src/views/mod.rs
@@ -1,4 +1,4 @@
-use std::{net::IpAddr, rc::Rc, str::FromStr};
+use std::{mem, net::IpAddr, rc::Rc, str::FromStr};
use cursive::{
event::{Event, EventResult},
@@ -190,8 +190,21 @@ impl DiskSizeEditView {
}
pub fn content(mut self, content: f64) -> Self {
- if let Some(view) = self.view.get_child_mut(0).and_then(|v| v.downcast_mut()) {
- *view = FloatEditView::new().content(content).full_width();
+ if let Some(view) = self
+ .view
+ .get_child_mut(0)
+ .and_then(|v| v.downcast_mut::<ResizedView<FloatEditView>>())
+ {
+ // We need actual ownership here of the inner `FloatEditView` to call `.content()` on
+ // it. Thus first swap it out with a dummy, modify it and swap it back in.
+ // This procedure ensures other settings (like `max_value`) is preserved on the inner
+ // view.
+
+ let mut inner = FloatEditView::new();
+ mem::swap(view.get_inner_mut(), &mut inner);
+
+ inner = inner.content(content);
+ mem::swap(view.get_inner_mut(), &mut inner);
}
self
--
2.42.0
next prev parent reply other threads:[~2023-10-04 14:43 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-04 14:42 [pve-devel] [PATCH installer 0/7] tui: add min/max constraints for bootdisk parameters Christoph Heiss
2023-10-04 14:42 ` Christoph Heiss [this message]
2023-10-04 14:42 ` [pve-devel] [PATCH installer 2/7] tui: improve `FormView` error handling Christoph Heiss
2023-10-04 14:42 ` [pve-devel] [PATCH installer 3/7] tui: add optional min-value constraint to `NumericEditView` and `DiskSizeEditView` Christoph Heiss
2023-10-04 14:42 ` [pve-devel] [PATCH installer 4/7] tui: add min/max constraints for ZFS bootdisk parameters Christoph Heiss
2023-10-04 14:42 ` [pve-devel] [PATCH installer 5/7] tui: add min/max contraints for LVM " Christoph Heiss
2023-10-04 14:42 ` [pve-devel] [PATCH installer 6/7] tui: add min/max contraints for Btrfs " Christoph Heiss
2023-10-04 14:42 ` [pve-devel] [PATCH installer 7/7] tui: views: add some TUI component tests Christoph Heiss
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231004144232.327071-2-c.heiss@proxmox.com \
--to=c.heiss@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox