Changed the file structure
This commit is contained in:
parent
7743d0d084
commit
420d3c3dfc
22 changed files with 409 additions and 395 deletions
|
|
@ -1,6 +1,6 @@
|
|||
use std::vec;
|
||||
|
||||
use crate::list_box_row;
|
||||
use crate::{list_box_row, widget::ListRow};
|
||||
use apply::Apply;
|
||||
use derive_setters::Setters;
|
||||
use iced::{
|
||||
|
|
@ -20,7 +20,7 @@ pub struct Expander<'a, Message> {
|
|||
icon: Option<String>,
|
||||
expansible: bool,
|
||||
#[setters(skip)]
|
||||
rows: Option<Vec<ExpanderRow<'a>>>,
|
||||
rows: Option<Vec<ListRow<'a>>>,
|
||||
#[setters(strip_option)]
|
||||
on_row_selected: Option<Box<dyn Fn(usize) -> Message + 'a>>,
|
||||
}
|
||||
|
|
@ -36,23 +36,6 @@ pub fn expander<'a, Message>() -> Expander<'a, Message> {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Setters, Default, Debug, Clone)]
|
||||
pub struct ExpanderRow<'a> {
|
||||
pub(crate) title: &'a str,
|
||||
#[setters(strip_option)]
|
||||
pub subtitle: Option<&'a str>,
|
||||
#[setters(strip_option)]
|
||||
pub icon: Option<String>,
|
||||
}
|
||||
|
||||
pub fn expander_row<'a>() -> ExpanderRow<'a> {
|
||||
ExpanderRow {
|
||||
title: "",
|
||||
subtitle: None,
|
||||
icon: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub struct ExpanderState {
|
||||
pub expanded: bool,
|
||||
}
|
||||
|
|
@ -70,13 +53,13 @@ pub enum ExpanderEvent {
|
|||
}
|
||||
|
||||
impl<'a, Message> Expander<'a, Message> {
|
||||
pub fn rows(mut self, rows: Vec<ExpanderRow<'a>>) -> Self {
|
||||
pub fn rows(mut self, rows: Vec<ListRow<'a>>) -> Self {
|
||||
self.rows = Some(rows);
|
||||
self.expansible = true;
|
||||
self
|
||||
}
|
||||
|
||||
pub fn push(&mut self, row: ExpanderRow<'a>) {
|
||||
pub fn push(&mut self, row: ListRow<'a>) {
|
||||
if self.rows.is_none() {
|
||||
self.rows = Some(vec![])
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,84 +0,0 @@
|
|||
use iced::{widget, Background, Color, Theme};
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! list_item {
|
||||
($title:expr, $($x:expr),+ $(,)?) => (
|
||||
$crate::widget::list_row!(
|
||||
$crate::iced::widget::Text::new($title),
|
||||
$crate::iced::widget::horizontal_space(
|
||||
$crate::iced::Length::Fill
|
||||
),
|
||||
$($x),+
|
||||
)
|
||||
);
|
||||
}
|
||||
pub use list_item;
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! list_row {
|
||||
($($x:expr),+ $(,)?) => (
|
||||
$crate::iced::widget::Row::with_children(vec![
|
||||
$($crate::iced::Element::from($x)),+
|
||||
])
|
||||
.align_items(Alignment::Center)
|
||||
.padding([0, 8])
|
||||
.spacing(12)
|
||||
);
|
||||
}
|
||||
pub use list_row;
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! list_section {
|
||||
($title:expr, $($x:expr),+ $(,)?) => (
|
||||
$crate::iced::widget::Column::with_children(vec![
|
||||
$crate::iced::widget::Text::new($title)
|
||||
.font($crate::font::FONT_SEMIBOLD)
|
||||
.into()
|
||||
,
|
||||
$crate::iced::widget::Container::new({
|
||||
let mut children = vec![$($crate::iced::Element::from($x)),+];
|
||||
|
||||
//TODO: more efficient method for adding separators
|
||||
let mut i = 1;
|
||||
while i < children.len() {
|
||||
children.insert(i, $crate::iced::widget::horizontal_rule(12).into());
|
||||
i += 2;
|
||||
}
|
||||
|
||||
$crate::iced::widget::Column::with_children(children)
|
||||
.spacing(12)
|
||||
})
|
||||
.padding([12, 16])
|
||||
.style(theme::Container::Custom(
|
||||
$crate::widget::list_section_style
|
||||
))
|
||||
.into()
|
||||
])
|
||||
.spacing(8)
|
||||
);
|
||||
}
|
||||
pub use list_section;
|
||||
|
||||
pub fn list_section_style(theme: &Theme) -> widget::container::Appearance {
|
||||
let cosmic = &theme.cosmic().primary;
|
||||
widget::container::Appearance {
|
||||
text_color: Some(cosmic.on.into()),
|
||||
background: Some(Background::Color(cosmic.base.into())),
|
||||
border_radius: 8.0,
|
||||
border_width: 0.0,
|
||||
border_color: Color::TRANSPARENT,
|
||||
}
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! list_view {
|
||||
($($x:expr),+ $(,)?) => (
|
||||
$crate::iced::widget::Column::with_children(
|
||||
vec![$($crate::iced::Element::from($x)),+]
|
||||
)
|
||||
.spacing(24)
|
||||
.padding(24)
|
||||
.max_width(600)
|
||||
);
|
||||
}
|
||||
pub use list_view;
|
||||
|
|
@ -7,17 +7,19 @@ use iced_native::layout::{Limits, Node};
|
|||
use iced_native::overlay::from_children;
|
||||
use iced_native::renderer::Style;
|
||||
use iced_native::widget::{column, horizontal_rule, Operation, Tree};
|
||||
use iced_native::{row, Clipboard, Element, Event, Layout, Shell, Widget, renderer, Background, Color};
|
||||
use iced_native::{
|
||||
renderer, row, Background, Clipboard, Color, Element, Event, Layout, Shell, Widget,
|
||||
};
|
||||
use iced_style::container::{Appearance, StyleSheet};
|
||||
use iced_style::theme;
|
||||
use iced_style::theme::Container;
|
||||
|
||||
#[derive(Setters)]
|
||||
pub struct ListBox<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: iced_native::Renderer,
|
||||
Renderer::Theme: StyleSheet + iced_style::rule::StyleSheet,
|
||||
<Renderer as iced_native::Renderer>::Theme: iced_style::rule::StyleSheet
|
||||
where
|
||||
Renderer: iced_native::Renderer,
|
||||
Renderer::Theme: StyleSheet + iced_style::rule::StyleSheet,
|
||||
<Renderer as iced_native::Renderer>::Theme: iced_style::rule::StyleSheet,
|
||||
{
|
||||
spacing: u16,
|
||||
padding: Padding,
|
||||
|
|
@ -32,11 +34,23 @@ pub struct ListBox<'a, Message, Renderer>
|
|||
on_item_selected: Option<Box<dyn Fn(usize) -> Message + 'a>>,
|
||||
}
|
||||
|
||||
pub fn list_box<'a, Message: 'a, Renderer>() -> ListBox<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: iced_native::Renderer + 'a,
|
||||
<<Renderer as iced_native::Renderer>::Theme as StyleSheet>::Style: From<Container>,
|
||||
<Renderer as iced_native::Renderer>::Theme: StyleSheet + iced_style::rule::StyleSheet,
|
||||
<<Renderer as iced_native::Renderer>::Theme as iced_style::rule::StyleSheet>::Style:
|
||||
From<theme::Rule>,
|
||||
{
|
||||
ListBox::new()
|
||||
}
|
||||
|
||||
impl<'a, Message: 'a, Renderer: iced_native::Renderer + 'a> ListBox<'a, Message, Renderer>
|
||||
where
|
||||
Renderer::Theme: StyleSheet + iced_style::rule::StyleSheet,
|
||||
<<Renderer as iced_native::Renderer>::Theme as StyleSheet>::Style: From<Container>,
|
||||
<<Renderer as iced_native::Renderer>::Theme as iced_style::rule::StyleSheet>::Style: From<theme::Rule>
|
||||
<<Renderer as iced_native::Renderer>::Theme as iced_style::rule::StyleSheet>::Style:
|
||||
From<theme::Rule>,
|
||||
{
|
||||
/// The default padding of a [`ListBox`] drawn by this renderer.
|
||||
pub const DEFAULT_PADDING: u16 = 0;
|
||||
|
|
@ -53,24 +67,20 @@ where
|
|||
children: Vec<Element<'a, Message, Renderer>>,
|
||||
show_separators: bool,
|
||||
) -> Self {
|
||||
let end = children.len() - 1;
|
||||
let children_size = children.len();
|
||||
let children: Vec<Element<Message, Renderer>> = children
|
||||
.into_iter()
|
||||
.enumerate()
|
||||
.map(|(index, child)| {
|
||||
let row_items = if show_separators && index != end {
|
||||
let row_items = if show_separators && index != children_size - 1 {
|
||||
vec![
|
||||
row![child]
|
||||
.align_items(Alignment::Center)
|
||||
row![child].align_items(Alignment::Center).into(),
|
||||
horizontal_rule(1)
|
||||
.style(theme::Rule::Custom(separator_style))
|
||||
.into(),
|
||||
horizontal_rule(1).style(theme::Rule::Custom(separator_style)).into(),
|
||||
]
|
||||
} else {
|
||||
vec![
|
||||
row![child]
|
||||
.align_items(Alignment::Center)
|
||||
.into()
|
||||
]
|
||||
vec![row![child].align_items(Alignment::Center).into()]
|
||||
};
|
||||
column(row_items).into()
|
||||
})
|
||||
|
|
@ -101,7 +111,8 @@ impl<'a, Message: 'a, Renderer: iced_native::Renderer + 'a> std::default::Defaul
|
|||
where
|
||||
Renderer::Theme: StyleSheet + iced_style::rule::StyleSheet,
|
||||
<<Renderer as iced_native::Renderer>::Theme as StyleSheet>::Style: From<Container>,
|
||||
<<Renderer as iced_native::Renderer>::Theme as iced_style::rule::StyleSheet>::Style: From<theme::Rule>
|
||||
<<Renderer as iced_native::Renderer>::Theme as iced_style::rule::StyleSheet>::Style:
|
||||
From<theme::Rule>,
|
||||
{
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
|
|
@ -111,7 +122,7 @@ where
|
|||
impl<'a, Message, Renderer> Widget<Message, Renderer> for ListBox<'a, Message, Renderer>
|
||||
where
|
||||
Renderer: iced_native::Renderer,
|
||||
<Renderer as iced_native::Renderer>::Theme: StyleSheet + iced_style::rule::StyleSheet
|
||||
<Renderer as iced_native::Renderer>::Theme: StyleSheet + iced_style::rule::StyleSheet,
|
||||
{
|
||||
fn width(&self) -> Length {
|
||||
self.width
|
||||
|
|
@ -354,7 +365,8 @@ pub fn draw_background<Renderer>(
|
|||
|
||||
impl<'a, Message: 'a, Renderer: iced_native::Renderer + 'a> From<ListBox<'a, Message, Renderer>>
|
||||
for Element<'a, Message, Renderer>
|
||||
where <Renderer as iced_native::Renderer>::Theme: StyleSheet + iced_style::rule::StyleSheet
|
||||
where
|
||||
<Renderer as iced_native::Renderer>::Theme: StyleSheet + iced_style::rule::StyleSheet,
|
||||
{
|
||||
fn from(list_box: ListBox<'a, Message, Renderer>) -> Self {
|
||||
Self::new(list_box)
|
||||
|
|
@ -375,7 +387,7 @@ pub use list_box_item;
|
|||
|
||||
#[macro_export]
|
||||
macro_rules! list_box_heading {
|
||||
($title:expr) => (
|
||||
($title:expr) => {
|
||||
$crate::iced::widget::container(
|
||||
$crate::iced::widget::row![
|
||||
text($title).size(18),
|
||||
|
|
@ -383,106 +395,54 @@ macro_rules! list_box_heading {
|
|||
$crate::iced::widget::horizontal_space(Length::Fill)
|
||||
]
|
||||
.height(Length::Fill)
|
||||
.align_items($crate::iced::alignment::Alignment::Center)
|
||||
.align_items($crate::iced::alignment::Alignment::Center),
|
||||
)
|
||||
.style($crate::iced::theme::Container::Custom($crate::widget::expander_heading_style))
|
||||
.style($crate::iced::theme::Container::Custom(
|
||||
$crate::widget::expander_heading_style,
|
||||
))
|
||||
.max_height(60)
|
||||
.padding(10)
|
||||
);
|
||||
($title:expr, $subtitle:expr) => (
|
||||
};
|
||||
($title:expr, $subtitle:expr) => {
|
||||
$crate::iced::widget::container(
|
||||
$crate::iced::widget::row![
|
||||
column(
|
||||
vec![
|
||||
text($title).size(18).into(),
|
||||
text($subtitle).size(16).into(),
|
||||
]
|
||||
),
|
||||
column(vec![
|
||||
text($title).size(18).into(),
|
||||
text($subtitle).size(16).into(),
|
||||
]),
|
||||
$crate::iced::widget::vertical_space(Length::Fill),
|
||||
$crate::iced::widget::horizontal_space(Length::Fill)
|
||||
]
|
||||
.height(Length::Fill)
|
||||
.align_items($crate::iced::alignment::Alignment::Center)
|
||||
.align_items($crate::iced::alignment::Alignment::Center),
|
||||
)
|
||||
.style($crate::iced::theme::Container::Custom($crate::widget::expander_heading_style))
|
||||
.style($crate::iced::theme::Container::Custom(
|
||||
$crate::widget::expander_heading_style,
|
||||
))
|
||||
.max_height(60)
|
||||
.padding(10)
|
||||
);
|
||||
($title:expr, $subtitle:expr, $icon:expr) => (
|
||||
};
|
||||
($title:expr, $subtitle:expr, $icon:expr) => {
|
||||
$crate::iced::widget::container(
|
||||
$crate::iced::widget::row![
|
||||
container($crate::widget::icon($icon, 20)).padding(10),
|
||||
column(
|
||||
vec![
|
||||
text($title).size(18).into(),
|
||||
text($subtitle).size(16).into(),
|
||||
]
|
||||
),
|
||||
column(vec![
|
||||
text($title).size(18).into(),
|
||||
text($subtitle).size(16).into(),
|
||||
]),
|
||||
$crate::iced::widget::vertical_space(Length::Fill),
|
||||
$crate::iced::widget::horizontal_space(Length::Fill)
|
||||
]
|
||||
.height(Length::Fill)
|
||||
.align_items($crate::iced::alignment::Alignment::Center)
|
||||
.align_items($crate::iced::alignment::Alignment::Center),
|
||||
)
|
||||
.style($crate::iced::theme::Container::Custom($crate::widget::expander_heading_style))
|
||||
.style($crate::iced::theme::Container::Custom(
|
||||
$crate::widget::expander_heading_style,
|
||||
))
|
||||
.max_height(60)
|
||||
.padding(10)
|
||||
);
|
||||
};
|
||||
}
|
||||
pub use list_box_heading;
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! list_box_row {
|
||||
($title:expr) => (
|
||||
$crate::iced::widget::container(
|
||||
$crate::iced::widget::row![
|
||||
text($title).size(18),
|
||||
$crate::iced::widget::vertical_space(Length::Fill),
|
||||
$crate::iced::widget::horizontal_space(Length::Fill)
|
||||
]
|
||||
.height(Length::Fill)
|
||||
.align_items($crate::iced::alignment::Alignment::Center)
|
||||
)
|
||||
.max_height(60)
|
||||
.padding(10)
|
||||
);
|
||||
($title:expr, $subtitle:expr) => (
|
||||
$crate::iced::widget::container(
|
||||
$crate::iced::widget::row![
|
||||
column(
|
||||
vec![
|
||||
text($title).size(18).into(),
|
||||
text($subtitle).size(16).into(),
|
||||
]
|
||||
),
|
||||
$crate::iced::widget::vertical_space(Length::Fill),
|
||||
$crate::iced::widget::horizontal_space(Length::Fill)
|
||||
]
|
||||
.height(Length::Fill)
|
||||
.align_items($crate::iced::alignment::Alignment::Center)
|
||||
)
|
||||
.max_height(60)
|
||||
.padding(10)
|
||||
);
|
||||
($title:expr, $subtitle:expr, $icon:expr) => (
|
||||
$crate::iced::widget::container(
|
||||
$crate::iced::widget::row![
|
||||
container($crate::widget::icon($icon, 20)).padding(10),
|
||||
column(
|
||||
vec![
|
||||
text($title).size(18).into(),
|
||||
text($subtitle).size(16).into(),
|
||||
]
|
||||
),
|
||||
$crate::iced::widget::vertical_space(Length::Fill),
|
||||
$crate::iced::widget::horizontal_space(Length::Fill)
|
||||
]
|
||||
.height(Length::Fill)
|
||||
.align_items($crate::iced::alignment::Alignment::Center)
|
||||
)
|
||||
.max_height(60)
|
||||
.padding(10)
|
||||
);
|
||||
}
|
||||
pub use list_box_row;
|
||||
use crate::widget::separator_style;
|
||||
18
src/widget/list/list_row.rs
Normal file
18
src/widget/list/list_row.rs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
use derive_setters::Setters;
|
||||
|
||||
#[derive(Setters, Default, Debug, Clone)]
|
||||
pub struct ListRow<'a> {
|
||||
pub(crate) title: &'a str,
|
||||
#[setters(strip_option)]
|
||||
pub subtitle: Option<&'a str>,
|
||||
#[setters(strip_option)]
|
||||
pub icon: Option<String>,
|
||||
}
|
||||
|
||||
pub fn list_row<'a>() -> ListRow<'a> {
|
||||
ListRow {
|
||||
title: "",
|
||||
subtitle: None,
|
||||
icon: None,
|
||||
}
|
||||
}
|
||||
145
src/widget/list/macros.rs
Normal file
145
src/widget/list/macros.rs
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
pub use iced::{widget, Background, Color, Theme};
|
||||
|
||||
pub mod list_view {
|
||||
#[macro_export]
|
||||
macro_rules! list_view {
|
||||
($($x:expr),+ $(,)?) => (
|
||||
$crate::iced::widget::Column::with_children(
|
||||
vec![$($crate::iced::Element::from($x)),+]
|
||||
)
|
||||
.spacing(24)
|
||||
.padding(24)
|
||||
.max_width(600)
|
||||
);
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! list_row {
|
||||
($($x:expr),+ $(,)?) => (
|
||||
$crate::iced::widget::Row::with_children(vec![
|
||||
$($crate::iced::Element::from($x)),+
|
||||
])
|
||||
.align_items(Alignment::Center)
|
||||
.padding([0, 8])
|
||||
.spacing(12)
|
||||
);
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! list_section {
|
||||
($title:expr, $($x:expr),+ $(,)?) => (
|
||||
$crate::iced::widget::Column::with_children(vec![
|
||||
$crate::iced::widget::Text::new($title)
|
||||
.font($crate::font::FONT_SEMIBOLD)
|
||||
.into()
|
||||
,
|
||||
$crate::iced::widget::Container::new({
|
||||
let mut children = vec![$($crate::iced::Element::from($x)),+];
|
||||
|
||||
//TODO: more efficient method for adding separators
|
||||
let mut i = 1;
|
||||
while i < children.len() {
|
||||
children.insert(i, $crate::iced::widget::horizontal_rule(12).into());
|
||||
i += 2;
|
||||
}
|
||||
|
||||
$crate::iced::widget::Column::with_children(children)
|
||||
.spacing(12)
|
||||
})
|
||||
.padding([12, 16])
|
||||
.style(theme::Container::Custom(
|
||||
list_section_style
|
||||
))
|
||||
.into()
|
||||
])
|
||||
.spacing(8)
|
||||
);
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! list_item {
|
||||
($title:expr, $($x:expr),+ $(,)?) => (
|
||||
$crate::list_row!(
|
||||
$crate::iced::widget::Text::new($title),
|
||||
$crate::iced::widget::horizontal_space(
|
||||
$crate::iced::Length::Fill
|
||||
),
|
||||
$($x),+
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
pub fn list_section_style(theme: &Theme) -> widget::container::Appearance {
|
||||
let cosmic = &theme.cosmic().primary;
|
||||
widget::container::Appearance {
|
||||
text_color: Some(cosmic.on.into()),
|
||||
background: Some(Background::Color(cosmic.base.into())),
|
||||
border_radius: 8.0,
|
||||
border_width: 0.0,
|
||||
border_color: Color::TRANSPARENT,
|
||||
}
|
||||
}
|
||||
|
||||
use crate::widget::{Background, Color};
|
||||
use iced::widget;
|
||||
use iced_style::Theme;
|
||||
|
||||
pub use list_item;
|
||||
pub use list_row;
|
||||
pub use list_section;
|
||||
pub use list_view;
|
||||
}
|
||||
|
||||
pub mod list_box {
|
||||
#[macro_export]
|
||||
macro_rules! list_box_row {
|
||||
($title:expr) => {
|
||||
$crate::iced::widget::container(
|
||||
$crate::iced::widget::row![
|
||||
text($title).size(18),
|
||||
$crate::iced::widget::vertical_space(Length::Fill),
|
||||
$crate::iced::widget::horizontal_space(Length::Fill)
|
||||
]
|
||||
.height(Length::Fill)
|
||||
.align_items($crate::iced::alignment::Alignment::Center),
|
||||
)
|
||||
.max_height(60)
|
||||
.padding(10)
|
||||
};
|
||||
($title:expr, $subtitle:expr) => {
|
||||
$crate::iced::widget::container(
|
||||
$crate::iced::widget::row![
|
||||
column(vec![
|
||||
text($title).size(18).into(),
|
||||
text($subtitle).size(16).into(),
|
||||
]),
|
||||
$crate::iced::widget::vertical_space(Length::Fill),
|
||||
$crate::iced::widget::horizontal_space(Length::Fill)
|
||||
]
|
||||
.height(Length::Fill)
|
||||
.align_items($crate::iced::alignment::Alignment::Center),
|
||||
)
|
||||
.max_height(60)
|
||||
.padding(10)
|
||||
};
|
||||
($title:expr, $subtitle:expr, $icon:expr) => {
|
||||
$crate::iced::widget::container(
|
||||
$crate::iced::widget::row![
|
||||
container($crate::widget::icon($icon, 20)).padding(10),
|
||||
column(vec![
|
||||
text($title).size(18).into(),
|
||||
text($subtitle).size(16).into(),
|
||||
]),
|
||||
$crate::iced::widget::vertical_space(Length::Fill),
|
||||
$crate::iced::widget::horizontal_space(Length::Fill)
|
||||
]
|
||||
.height(Length::Fill)
|
||||
.align_items($crate::iced::alignment::Alignment::Center),
|
||||
)
|
||||
.max_height(60)
|
||||
.padding(10)
|
||||
};
|
||||
}
|
||||
|
||||
pub use list_box_row;
|
||||
}
|
||||
8
src/widget/list/mod.rs
Normal file
8
src/widget/list/mod.rs
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
pub mod macros;
|
||||
pub use macros::*;
|
||||
|
||||
pub mod list_row;
|
||||
pub use list_row::*;
|
||||
|
||||
pub mod list_box;
|
||||
pub use list_box::*;
|
||||
|
|
@ -7,14 +7,8 @@ pub use header_bar::*;
|
|||
mod icon;
|
||||
pub use self::icon::*;
|
||||
|
||||
mod list;
|
||||
pub use list::*;
|
||||
|
||||
mod nav;
|
||||
pub use nav::*;
|
||||
|
||||
mod navbar;
|
||||
pub use navbar::*;
|
||||
pub mod navigation;
|
||||
pub use navigation::*;
|
||||
|
||||
mod toggler;
|
||||
pub use toggler::*;
|
||||
|
|
@ -25,5 +19,5 @@ pub use scrollable::*;
|
|||
mod expander;
|
||||
pub use expander::*;
|
||||
|
||||
pub mod list_box;
|
||||
pub use list_box::*;
|
||||
pub mod list;
|
||||
pub use list::*;
|
||||
|
|
|
|||
|
|
@ -1,52 +0,0 @@
|
|||
use iced::{widget, Background, Color, Theme};
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! nav_bar {
|
||||
($($x:expr),+ $(,)?) => (
|
||||
$crate::iced::widget::Container::new(
|
||||
$crate::scrollable!(
|
||||
$crate::iced::widget::row![
|
||||
$crate::iced::widget::Column::with_children(
|
||||
vec![$($crate::iced::Element::from($x)),+]
|
||||
)
|
||||
.spacing(12)
|
||||
.padding(12),
|
||||
]
|
||||
)
|
||||
)
|
||||
.max_width(300)
|
||||
.padding(12)
|
||||
.height(Length::Fill)
|
||||
.style(theme::Container::Custom(
|
||||
$crate::widget::nav_bar_style
|
||||
))
|
||||
);
|
||||
}
|
||||
pub use nav_bar;
|
||||
|
||||
pub fn nav_bar_style(theme: &Theme) -> widget::container::Appearance {
|
||||
let cosmic = &theme.cosmic().primary;
|
||||
widget::container::Appearance {
|
||||
text_color: Some(cosmic.on.into()),
|
||||
background: Some(Background::Color(cosmic.base.into())),
|
||||
border_radius: 8.0,
|
||||
border_width: 0.0,
|
||||
border_color: Color::TRANSPARENT,
|
||||
}
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! nav_button {
|
||||
($icon: expr, $title:expr, $condensed:expr) => {{
|
||||
if $condensed {
|
||||
$crate::iced::widget::Button::new($crate::widget::icon($icon, 22)).padding(8)
|
||||
} else {
|
||||
$crate::widget::button!(
|
||||
$crate::widget::icon($icon, 22),
|
||||
$crate::iced::widget::Text::new($title),
|
||||
$crate::iced::widget::horizontal_space($crate::iced::Length::Fill),
|
||||
)
|
||||
}
|
||||
}};
|
||||
}
|
||||
pub use nav_button;
|
||||
31
src/widget/navigation/macros.rs
Normal file
31
src/widget/navigation/macros.rs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
pub mod nav_bar {
|
||||
use iced::{widget, Background, Color, Theme};
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! nav_button {
|
||||
($icon: expr, $title:expr, $condensed:expr) => {{
|
||||
if $condensed {
|
||||
$crate::iced::widget::Button::new($crate::widget::icon($icon, 22)).padding(8)
|
||||
} else {
|
||||
$crate::widget::button!(
|
||||
$crate::widget::icon($icon, 22),
|
||||
$crate::iced::widget::Text::new($title),
|
||||
$crate::iced::widget::horizontal_space($crate::iced::Length::Fill),
|
||||
)
|
||||
}
|
||||
}};
|
||||
}
|
||||
|
||||
pub fn nav_bar_style(theme: &Theme) -> widget::container::Appearance {
|
||||
let cosmic = &theme.cosmic().primary;
|
||||
widget::container::Appearance {
|
||||
text_color: Some(cosmic.on.into()),
|
||||
background: Some(Background::Color(cosmic.base.into())),
|
||||
border_radius: 8.0,
|
||||
border_width: 0.0,
|
||||
border_color: Color::TRANSPARENT,
|
||||
}
|
||||
}
|
||||
|
||||
pub use nav_button;
|
||||
}
|
||||
5
src/widget/navigation/mod.rs
Normal file
5
src/widget/navigation/mod.rs
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
pub mod navbar;
|
||||
pub use navbar::*;
|
||||
|
||||
pub mod macros;
|
||||
pub use macros::*;
|
||||
Loading…
Add table
Add a link
Reference in a new issue