resource management
This commit is contained in:
+7
-11
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user