resource management

This commit is contained in:
2025-07-07 10:05:23 -05:00
parent 5fabd1a8ab
commit 3d995671cd
7 changed files with 77 additions and 82 deletions
+7 -11
View File
@@ -1,22 +1,18 @@
use std::sync::{Arc, Mutex};
use std::sync::Arc;
use crate::{component, extensions::Extension, widget::Widget};
use crate::{component, extensions::Extension, widget::Widget, Screen};
pub struct IdExtension(Mutex<Vec<Arc<Widget>>>);
pub struct IdExtension(pub Arc<Screen>);
impl Extension for Arc<IdExtension> {
fn init(&mut self, widgets: &Vec<Arc<Widget>>) {
self.0.lock().unwrap().append(&mut widgets.clone());
}
}
impl Extension for Arc<IdExtension> {}
impl IdExtension {
pub fn new() -> Arc<Self> {
Arc::new(Self(Mutex::new(Vec::new())))
pub fn new(screen: Arc<Screen>) -> Arc<Self> {
Arc::new(IdExtension(screen))
}
pub fn get_element(self: &Arc<IdExtension>, id: usize) -> Option<Arc<Widget>> {
for elem in self.0.lock().unwrap().iter() {
for elem in self.0.widgets.lock().unwrap().iter() {
if let Some(current_id) = elem.get::<Id>() {
if current_id.0 == id {
return Some(elem.clone());