Merge 2 gui builders
This commit is contained in:
parent
2ddc27ee30
commit
4bf0607a11
1 changed files with 44 additions and 6 deletions
|
@ -1,5 +1,5 @@
|
|||
use crate::prelude::*;
|
||||
use anyhow::Result;
|
||||
use anyhow::{bail, Result};
|
||||
|
||||
use assetpath::AssetPath;
|
||||
|
||||
|
@ -29,7 +29,7 @@ impl GuiBuilder {
|
|||
path,
|
||||
)?;
|
||||
|
||||
Self::_new(gui_handler, validator)
|
||||
Ok(Arc::new(Self::_new(gui_handler, validator)?))
|
||||
}
|
||||
|
||||
pub fn from_str(gui_handler: &Arc<GuiHandler>, s: &str) -> Result<Arc<Self>> {
|
||||
|
@ -39,11 +39,49 @@ impl GuiBuilder {
|
|||
s,
|
||||
)?;
|
||||
|
||||
Self::_new(gui_handler, validator)
|
||||
Ok(Arc::new(Self::_new(gui_handler, validator)?))
|
||||
}
|
||||
|
||||
pub fn merge<'a>(
|
||||
gui_handler: &Arc<GuiHandler>,
|
||||
pathes: impl IntoIterator<Item = &'a AssetPath>,
|
||||
) -> Result<Arc<Self>> {
|
||||
let mut me = Self {
|
||||
grids: Default::default(),
|
||||
default_select: Default::default(),
|
||||
|
||||
ids: Default::default(),
|
||||
|
||||
decline_callback: Default::default(),
|
||||
};
|
||||
|
||||
for path in pathes.into_iter() {
|
||||
let validator = Validator::new(
|
||||
#[cfg(feature = "audio")]
|
||||
gui_handler,
|
||||
path,
|
||||
)?;
|
||||
|
||||
let builder = Self::_new(gui_handler, validator)?;
|
||||
|
||||
me.grids.extend(builder.grids);
|
||||
|
||||
if me.default_select.is_some() && builder.default_select.is_some() {
|
||||
bail!("multiple default selects are not supported!");
|
||||
}
|
||||
|
||||
if builder.default_select.is_some() {
|
||||
me.default_select = builder.default_select;
|
||||
}
|
||||
|
||||
me.ids.extend(builder.ids);
|
||||
}
|
||||
|
||||
Ok(Arc::new(me))
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn _new(gui_handler: &Arc<GuiHandler>, validator: Validator) -> Result<Arc<Self>> {
|
||||
fn _new(gui_handler: &Arc<GuiHandler>, validator: Validator) -> Result<Self> {
|
||||
let root = validator.root();
|
||||
|
||||
let mut ids = HashMap::new();
|
||||
|
@ -71,14 +109,14 @@ impl GuiBuilder {
|
|||
|
||||
Self::connect_custom_neighbours(&ids, custom_neighbours)?;
|
||||
|
||||
Ok(Arc::new(GuiBuilder {
|
||||
Ok(GuiBuilder {
|
||||
grids,
|
||||
default_select: opt_default_select,
|
||||
|
||||
ids,
|
||||
|
||||
decline_callback: RwLock::new(None),
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn connect_custom_neighbours(
|
||||
|
|
Loading…
Reference in a new issue