Begin work on main app
This commit is contained in:
parent
4ad01331e0
commit
5127904fc4
2 changed files with 94 additions and 0 deletions
92
applets/cosmic-applet-audio/src/app.rs
Normal file
92
applets/cosmic-applet-audio/src/app.rs
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
use gtk4::{
|
||||||
|
prelude::*, Box as GtkBox, Image, ListBox, Orientation, PositionType, Revealer,
|
||||||
|
RevealerTransitionType, Scale, Separator, Window,
|
||||||
|
};
|
||||||
|
use libcosmic_widgets::LabeledItem;
|
||||||
|
use pulsectl::controllers::types::DeviceInfo;
|
||||||
|
use relm4::{Component, ComponentParts, Sender};
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
pub struct App {
|
||||||
|
default_input: Option<DeviceInfo>,
|
||||||
|
inputs: Vec<DeviceInfo>,
|
||||||
|
default_output: Option<DeviceInfo>,
|
||||||
|
outputs: Vec<DeviceInfo>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Widgets {
|
||||||
|
inputs: ListBox,
|
||||||
|
outputs: ListBox,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum Input {
|
||||||
|
Compute,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum Output {}
|
||||||
|
|
||||||
|
pub enum Command {}
|
||||||
|
|
||||||
|
pub enum CmdOut {}
|
||||||
|
|
||||||
|
impl Component for App {
|
||||||
|
type Command = Command;
|
||||||
|
type CommandOutput = CmdOut;
|
||||||
|
type Input = Input;
|
||||||
|
type Output = Output;
|
||||||
|
type InitParams = ();
|
||||||
|
type Root = Window;
|
||||||
|
type Widgets = Widgets;
|
||||||
|
|
||||||
|
fn init_root() -> Self::Root {
|
||||||
|
Window::default()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn init_parts(
|
||||||
|
_args: Self::InitParams,
|
||||||
|
root: &Self::Root,
|
||||||
|
input: &Sender<Self::Input>,
|
||||||
|
_output: &Sender<Self::Output>,
|
||||||
|
) -> ComponentParts<Self> {
|
||||||
|
view! {
|
||||||
|
GtkBox {
|
||||||
|
set_orientation: Orientation::Vertical,
|
||||||
|
set_spacing: 24,
|
||||||
|
append: output_box = &GtkBox {
|
||||||
|
set_orientation: Orientation::Horizontal,
|
||||||
|
set_spacing: 16,
|
||||||
|
append: output_icon = &Image {
|
||||||
|
set_icon_name: Some("audio-speakers-symbolic"),
|
||||||
|
},
|
||||||
|
append: output_volume = &Scale::with_range(Orientation::Horizontal, 0., 100., 1.) {
|
||||||
|
set_format_value_func: |_, value| {
|
||||||
|
format!("{:.0}%", value)
|
||||||
|
},
|
||||||
|
set_value_pos: PositionType::Right,
|
||||||
|
set_digits: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
append: input_box = &GtkBox {
|
||||||
|
set_orientation: Orientation::Horizontal,
|
||||||
|
set_spacing: 16,
|
||||||
|
append: input_icon = &Image {
|
||||||
|
set_icon_name: Some("audio-input-microphone-symbolic"),
|
||||||
|
},
|
||||||
|
append: input_volume = &Scale::with_range(Orientation::Horizontal, 0., 100., 1.) {
|
||||||
|
set_format_value_func: |_, value| {
|
||||||
|
format!("{:.0}%", value)
|
||||||
|
},
|
||||||
|
set_value_pos: PositionType::Right,
|
||||||
|
set_digits: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
append: _sep = &Separator {
|
||||||
|
set_orientation: Orientation::Horizontal,
|
||||||
|
},
|
||||||
|
append: output_revealer = &Revealer {
|
||||||
|
set_transition_type: RevealerTransitionType::SlideLeft
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,8 @@
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate relm4;
|
extern crate relm4;
|
||||||
|
|
||||||
|
mod app;
|
||||||
|
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use tokio::runtime::Runtime;
|
use tokio::runtime::Runtime;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue