feat!(segmented-button): improved interfaces and documentation

BREAKING CHANGE: Various type and function names have changed to reflect
themselves better in documentation. Code has been reorganized into
separate modules with a better placement in libcosmic. Most of the
functions, types, and modules now have documentation and examples.

These changes no longer require the `Model` type to define the
data/component type that it stores. The component functionality is now
optional, and it's also possible to associate many components to an item
with one component per type. This has had a side effect of simplifying a
lot of the type signatures in the implementation.

Before, to insert an item into the model, you had to define a
`SegmentedItem` and a `Component` on insert, and get back an ID for that
item. Which makes it difficult to define an item that contains only an
icon or has no components. And requires an extra insert function to
activate the item on insert.

Now, there is a flexible builder-style API for configuring
newly-inserted items in the model. So the complexity for inserting and
retrieving values from the model has decreased significantly
This commit is contained in:
Michael Aaron Murphy 2023-01-17 18:49:40 +01:00 committed by Michael Murphy
parent 095e4c1acd
commit b3d550cc5e
22 changed files with 1097 additions and 675 deletions

View file

@ -1,31 +1,36 @@
// Copyright 2022 System76 <info@system76.com>
// SPDX-License-Identifier: MPL-2.0
//! Cosmic-themed widget implementations.
mod button;
pub use button::*;
mod header_bar;
pub use header_bar::{header_bar, HeaderBar};
mod icon;
pub use self::icon::{icon, Icon, IconSource};
pub mod icon;
pub use icon::{icon, Icon, IconSource};
pub mod list;
pub use self::list::*;
pub use list::*;
pub mod nav_bar;
pub use nav_bar::nav_bar;
pub mod nav_bar_toggle;
pub use self::nav_bar_toggle::{nav_bar_toggle, NavBarToggle};
pub use nav_bar_toggle::{nav_bar_toggle, NavBarToggle};
mod toggler;
pub use toggler::toggler;
pub mod segmented_button;
pub use segmented_button::{
horizontal_segmented_button, vertical_segmented_button, HorizontalSegmentedButton,
};
pub use segmented_button::horizontal as horizontal_segmented_button;
pub use segmented_button::vertical as vertical_segmented_button;
pub mod segmented_selection;
pub use segmented_selection::horizontal as horizontal_segmented_selection;
pub use segmented_selection::vertical as vertical_segmented_selection;
pub mod settings;
@ -42,5 +47,9 @@ pub mod rectangle_tracker;
pub mod aspect_ratio;
pub mod view_switcher;
pub use view_switcher::horizontal as horiontal_view_switcher;
pub use view_switcher::vertical as vertical_view_switcher;
pub mod warning;
pub use warning::*;