feat: Tooltips and Better Surface Management
This commit is contained in:
parent
c7edd37b03
commit
337b80d4ca
90 changed files with 3651 additions and 977 deletions
|
|
@ -3,12 +3,27 @@
|
|||
|
||||
//! Application API example
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::sync::LazyLock;
|
||||
|
||||
use cosmic::app::{Core, Settings, Task};
|
||||
use cosmic::iced::alignment::{Horizontal, Vertical};
|
||||
use cosmic::iced::widget::column;
|
||||
use cosmic::iced::Length;
|
||||
use cosmic::iced_core::Size;
|
||||
use cosmic::widget::nav_bar;
|
||||
use cosmic::widget::icon::{from_name, Handle};
|
||||
use cosmic::widget::menu::KeyBind;
|
||||
use cosmic::widget::{button, text};
|
||||
use cosmic::widget::{
|
||||
container,
|
||||
menu::menu_button,
|
||||
menu::{self, action::MenuAction},
|
||||
nav_bar, responsive,
|
||||
};
|
||||
use cosmic::{executor, iced, ApplicationExt, Element};
|
||||
|
||||
static MENU_ID: LazyLock<iced::id::Id> = LazyLock::new(|| iced::id::Id::new("menu_id"));
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
pub enum Page {
|
||||
Page1,
|
||||
|
|
@ -28,11 +43,24 @@ impl Page {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||
pub enum Action {
|
||||
Hi,
|
||||
}
|
||||
|
||||
impl MenuAction for Action {
|
||||
type Message = Message;
|
||||
|
||||
fn message(&self) -> Message {
|
||||
Message::Hi
|
||||
}
|
||||
}
|
||||
|
||||
/// Runs application with these settings
|
||||
#[rustfmt::skip]
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
tracing_subscriber::fmt::init();
|
||||
let _ = tracing_log::LogTracer::init();
|
||||
// tracing_subscriber::fmt::init();
|
||||
// let _ = tracing_log::LogTracer::init();
|
||||
|
||||
let input = vec![
|
||||
(Page::Page1, "🖖 Hello from libcosmic.".into()),
|
||||
|
|
@ -56,6 +84,8 @@ pub enum Message {
|
|||
Input2(String),
|
||||
Ignore,
|
||||
ToggleHide,
|
||||
Surface(cosmic::surface::Action),
|
||||
Hi,
|
||||
}
|
||||
|
||||
/// The [`App`] stores application-specific state.
|
||||
|
|
@ -65,6 +95,7 @@ pub struct App {
|
|||
input_1: String,
|
||||
input_2: String,
|
||||
hidden: bool,
|
||||
keybinds: HashMap<KeyBind, Action>,
|
||||
}
|
||||
|
||||
/// Implement [`cosmic::Application`] to integrate with COSMIC.
|
||||
|
|
@ -105,6 +136,7 @@ impl cosmic::Application for App {
|
|||
input_1: String::new(),
|
||||
input_2: String::new(),
|
||||
hidden: true,
|
||||
keybinds: HashMap::new(),
|
||||
};
|
||||
|
||||
let command = app.update_title();
|
||||
|
|
@ -136,6 +168,12 @@ impl cosmic::Application for App {
|
|||
Message::ToggleHide => {
|
||||
self.hidden = !self.hidden;
|
||||
}
|
||||
Message::Surface(_) => {
|
||||
// unimplemented!()
|
||||
}
|
||||
Message::Hi => {
|
||||
dbg!("hi");
|
||||
}
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
|
|
@ -178,6 +216,122 @@ impl cosmic::Application for App {
|
|||
|
||||
Element::from(centered)
|
||||
}
|
||||
|
||||
fn header_start(&self) -> Vec<Element<Self::Message>> {
|
||||
use cosmic::widget::menu::Tree;
|
||||
#[cfg(not(feature = "wayland"))]
|
||||
{
|
||||
vec![cosmic::widget::menu::bar(vec![
|
||||
Tree::with_children(
|
||||
menu::root("hiiiiiiiiiiiiiiiiiii 1"),
|
||||
menu::items(
|
||||
&self.keybinds,
|
||||
vec![menu::Item::Button("hi", None, Action::Hi)],
|
||||
),
|
||||
),
|
||||
Tree::with_children(
|
||||
menu::root("hiiiiiiiiiiiiiiiiii 2"),
|
||||
menu::items(
|
||||
&self.keybinds,
|
||||
vec![menu::Item::Button("hi 2", None, Action::Hi)],
|
||||
),
|
||||
),
|
||||
Tree::with_children(
|
||||
menu::root("hiiiiiiiiiiiiiiiiiiiii 3"),
|
||||
menu::items(
|
||||
&self.keybinds,
|
||||
vec![
|
||||
menu::Item::Button("hi 3", None, Action::Hi),
|
||||
menu::Item::Button("hi 3 #2", None, Action::Hi),
|
||||
],
|
||||
),
|
||||
),
|
||||
Tree::with_children(
|
||||
menu::root("hi 3"),
|
||||
menu::items(
|
||||
&self.keybinds,
|
||||
vec![
|
||||
menu::Item::Button("hi 3", None, Action::Hi),
|
||||
menu::Item::Button("hi 3 #2", None, Action::Hi),
|
||||
menu::Item::Button("hi 3 #3", None, Action::Hi),
|
||||
],
|
||||
),
|
||||
),
|
||||
Tree::with_children(
|
||||
menu::root("hi 4"),
|
||||
menu::items(
|
||||
&self.keybinds,
|
||||
vec![
|
||||
menu::Item::Folder(
|
||||
"hi 41 extra root",
|
||||
vec![menu::Item::Button("hi 3", None, Action::Hi)],
|
||||
),
|
||||
menu::Item::Button("hi 42", None, Action::Hi),
|
||||
menu::Item::Button("hi 43", None, Action::Hi),
|
||||
menu::Item::Button("hi 44", None, Action::Hi),
|
||||
menu::Item::Button("hi 45", None, Action::Hi),
|
||||
menu::Item::Button("hi 46", None, Action::Hi),
|
||||
],
|
||||
),
|
||||
),
|
||||
])
|
||||
.into()]
|
||||
}
|
||||
#[cfg(feature = "wayland")]
|
||||
{
|
||||
vec![cosmic::widget::responsive_menu_bar(
|
||||
self.core(),
|
||||
&self.keybinds,
|
||||
MENU_ID.clone(),
|
||||
Message::Surface,
|
||||
vec![
|
||||
(
|
||||
"hiiiiiiiiiiiiiiiiiii 1".into(),
|
||||
vec![menu::Item::Button("hi 1".into(), None, Action::Hi)],
|
||||
),
|
||||
(
|
||||
"hiiiiiiiiiiiiiiiiiii 2".into(),
|
||||
vec![
|
||||
menu::Item::Button("hi 2".into(), None, Action::Hi),
|
||||
menu::Item::Button("hi 22".into(), None, Action::Hi),
|
||||
],
|
||||
),
|
||||
(
|
||||
"hiiiiiiiiiiiiiiiiiii 3".into(),
|
||||
vec![
|
||||
menu::Item::Button("hi 3".into(), None, Action::Hi),
|
||||
menu::Item::Button("hi 33".into(), None, Action::Hi),
|
||||
menu::Item::Button("hi 333".into(), None, Action::Hi),
|
||||
],
|
||||
),
|
||||
(
|
||||
"hiiiiiiiiiiiiiiiiiii 4".into(),
|
||||
vec![
|
||||
menu::Item::Button("hi 4".into(), None, Action::Hi),
|
||||
menu::Item::Button("hi 44".into(), None, Action::Hi),
|
||||
menu::Item::Button("hi 444".into(), None, Action::Hi),
|
||||
menu::Item::Folder(
|
||||
"nest 4".into(),
|
||||
vec![
|
||||
menu::Item::Button("hi 4".into(), None, Action::Hi),
|
||||
menu::Item::Button("hi 44".into(), None, Action::Hi),
|
||||
menu::Item::Button("hi 444".into(), None, Action::Hi),
|
||||
menu::Item::Folder(
|
||||
"nest 2 4".into(),
|
||||
vec![
|
||||
menu::Item::Button("hi 4".into(), None, Action::Hi),
|
||||
menu::Item::Button("hi 44".into(), None, Action::Hi),
|
||||
menu::Item::Button("hi 444".into(), None, Action::Hi),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
)]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl App
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue