Add get_view for ViewWrapper (needs fix)

This commit is contained in:
Tymoteusz Jankowski 2018-01-25 13:02:07 +01:00
parent 057321abac
commit d0956b40b0
3 changed files with 27 additions and 2 deletions

View File

@ -39,6 +39,9 @@ pub trait ViewWrapper: 'static {
where where
F: FnOnce(&mut Self::V) -> R; F: FnOnce(&mut Self::V) -> R;
/// Gets the reference to the wrapped view.
fn get_view(&self) -> &Self::V;
/// Attempts to retrieve the inner view. /// Attempts to retrieve the inner view.
fn into_inner(self) -> Result<Self::V, Self> fn into_inner(self) -> Result<Self::V, Self>
where where
@ -119,6 +122,10 @@ where
{ {
Some(f(self.deref_mut())) Some(f(self.deref_mut()))
} }
fn get_view(&self) -> &Self::V {
self.deref()
}
} }
// The main point of implementing ViewWrapper is to have View for free. // The main point of implementing ViewWrapper is to have View for free.
@ -196,8 +203,8 @@ macro_rules! wrap_impl {
Some(f(&mut self.$v)) Some(f(&mut self.$v))
} }
fn into_inner(self) -> Result<Self::V, Self> where Self::V: Sized { fn get_view(&self) -> &Self::V {
Ok(self.$v) &self.$v
} }
}; };
} }

View File

@ -263,4 +263,15 @@ mod tests {
assert_eq!(Vec2::new(10, 1), full.required_size(Vec2::new(10, 1))); assert_eq!(Vec2::new(10, 1), full.required_size(Vec2::new(10, 1)));
assert_eq!(Vec2::new(10, 10), full.required_size(Vec2::new(10, 10))); assert_eq!(Vec2::new(10, 10), full.required_size(Vec2::new(10, 10)));
} }
#[test]
//TODO: rm this or use it
fn xxx() {
use views::{BoxView,TextView};
use view::{ViewWrapper};
let parent: BoxView<TextView> = TextView::new("abc").full_screen();
//let child: TextView = parent.view;
let child: &TextView = parent.get_view();
1/0;
}
} }

View File

@ -99,4 +99,11 @@ impl<T: View + 'static> ViewWrapper for IdView<T> {
.and_then(|mut v| v.deref_mut().focus_view(s)), .and_then(|mut v| v.deref_mut().focus_view(s)),
} }
} }
fn get_view(&self) -> &Self::V {
use std::ops::Deref;
let view = self.view.try_borrow().unwrap()
;
view.deref()
}
} }