chore: Rename UI files

This commit is contained in:
Fabio Lenherr 2023-11-14 18:22:10 +01:00
parent ed00b26749
commit 2f1099267a
35 changed files with 679 additions and 176 deletions

View file

@ -6,7 +6,7 @@ description = "A wip universal Linux settings application."
[dependencies] [dependencies]
reset_daemon = "0.1.2" reset_daemon = "0.1.2"
ReSet-Lib = "0.2.6" ReSet-Lib = "0.2.7"
adw = { version = "0.5.3", package = "libadwaita", features = ["v1_4"] } adw = { version = "0.5.3", package = "libadwaita", features = ["v1_4"] }
dbus = "0.9.7" dbus = "0.9.7"
gtk = { version = "0.7.3", package = "gtk4", features = ["v4_12"] } gtk = { version = "0.7.3", package = "gtk4", features = ["v4_12"] }

View file

@ -1,5 +1,7 @@
#![allow(non_snake_case)] #![allow(non_snake_case)]
pub mod inputStreamEntry;
pub mod sourceBox; pub mod sourceBox;
pub mod sourceBoxImpl; pub mod sourceBoxImpl;
pub mod inputStreamEntryImpl; pub mod outputStreamEntry;
pub mod outputStreamEntryImpl;
pub mod sourceEntry;
pub mod sourceEntryImpl;

View file

@ -1,14 +1,15 @@
use crate::components::input::inputStreamEntryImpl;
use adw::glib; use adw::glib;
use adw::glib::Object; use adw::glib::Object;
use super::outputStreamEntryImpl;
glib::wrapper! { glib::wrapper! {
pub struct InputStreamEntry(ObjectSubclass<inputStreamEntryImpl::InputStreamEntry>) pub struct OutputStreamEntry(ObjectSubclass<outputStreamEntryImpl::OutputStreamEntry>)
@extends gtk::Box, gtk::Widget, @extends gtk::Box, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable; @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
} }
impl InputStreamEntry { impl OutputStreamEntry {
pub fn new() -> Self { pub fn new() -> Self {
Object::builder().build() Object::builder().build()
} }

View file

@ -1,17 +1,15 @@
use std::cell::{Cell, RefCell}; use crate::components::input::outputStreamEntry;
use crate::components::output::audioSource;
use gtk::subclass::prelude::*; use gtk::subclass::prelude::*;
use gtk::{glib, Button, CompositeTemplate, DropDown, Label, ProgressBar, Scale}; use gtk::{glib, Button, CompositeTemplate, Label, ProgressBar, Scale, DropDown};
#[allow(non_snake_case)] #[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)] #[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetOutputStreamEntry.ui")] #[template(resource = "/org/Xetibo/ReSet/resetOutputStreamEntry.ui")]
pub struct AudioSourceEntry { pub struct OutputStreamEntry {
#[template_child] #[template_child]
pub resetSourceName: TemplateChild<Label>, pub resetSourceName: TemplateChild<Label>,
#[template_child] #[template_child]
pub resetSelectedSink: TemplateChild<DropDown>, pub resetSelectedSource: TemplateChild<DropDown>,
#[template_child] #[template_child]
pub resetSourceMute: TemplateChild<Button>, pub resetSourceMute: TemplateChild<Button>,
#[template_child] #[template_child]
@ -20,15 +18,12 @@ pub struct AudioSourceEntry {
pub resetVolumePercentage: TemplateChild<Label>, pub resetVolumePercentage: TemplateChild<Label>,
#[template_child] #[template_child]
pub resetVolumeMeter: TemplateChild<ProgressBar>, pub resetVolumeMeter: TemplateChild<ProgressBar>,
pub associatedIndex: Cell<u32>,
pub isMuted: Cell<bool>,
pub volume: RefCell<Vec<u32>>,
} }
#[glib::object_subclass] #[glib::object_subclass]
impl ObjectSubclass for AudioSourceEntry { impl ObjectSubclass for OutputStreamEntry {
const NAME: &'static str = "resetOutputStreamEntry"; const NAME: &'static str = "resetOutputStreamEntry";
type Type = audioSource::AudioSourceEntry; type Type = outputStreamEntry::OutputStreamEntry;
type ParentType = gtk::Box; type ParentType = gtk::Box;
fn class_init(klass: &mut Self::Class) { fn class_init(klass: &mut Self::Class) {
@ -40,8 +35,9 @@ impl ObjectSubclass for AudioSourceEntry {
} }
} }
impl BoxImpl for AudioSourceEntry {} impl BoxImpl for OutputStreamEntry {}
impl ObjectImpl for AudioSourceEntry {} impl ObjectImpl for OutputStreamEntry {}
impl WidgetImpl for OutputStreamEntry {}
impl WidgetImpl for AudioSourceEntry {}

View file

@ -21,6 +21,6 @@ impl SourceBox {
selfImp.resetSourceRow.set_action_name(Some("navigation.push")); selfImp.resetSourceRow.set_action_name(Some("navigation.push"));
selfImp.resetSourceRow.set_action_target_value(Some(&Variant::from("sources"))); selfImp.resetSourceRow.set_action_target_value(Some(&Variant::from("sources")));
selfImp.resetInputStreamButton.set_action_name(Some("navigation.pop")); selfImp.resetOutputStreamButton.set_action_name(Some("navigation.pop"));
} }
} }

View file

@ -1,35 +1,50 @@
use std::cell::RefCell;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use crate::components::base::listEntry::ListEntry; use crate::components::base::listEntry::ListEntry;
use crate::components::input::inputStreamEntry::InputStreamEntry;
use crate::components::input::sourceBox; use crate::components::input::sourceBox;
use gtk::prelude::*;
use gtk::subclass::prelude::*; use gtk::subclass::prelude::*;
use gtk::{glib, CompositeTemplate, DropDown, TemplateChild}; use gtk::{glib, CompositeTemplate, DropDown, TemplateChild};
use gtk::{prelude::*, Button, Label, ProgressBar, Scale};
use ReSet_Lib::audio::audio::{OutputStream, Source}; use ReSet_Lib::audio::audio::{OutputStream, Source};
use super::outputStreamEntry::OutputStreamEntry;
#[allow(non_snake_case)] #[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)] #[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetMicrophone.ui")] #[template(resource = "/org/Xetibo/ReSet/resetAudioInput.ui")]
pub struct SourceBox { pub struct SourceBox {
#[template_child]
pub resetSourceDropdown: TemplateChild<DropDown>,
#[template_child] #[template_child]
pub resetSourceRow: TemplateChild<ListEntry>, pub resetSourceRow: TemplateChild<ListEntry>,
#[template_child] #[template_child]
pub resetInputStreamButton: TemplateChild<ListEntry>, pub resetSourceDropdown: TemplateChild<DropDown>,
pub resetSources: Arc<Mutex<Vec<Source>>>, #[template_child]
pub resetOutputStreams: Arc<Mutex<Vec<OutputStream>>>, pub resetSourceMute: TemplateChild<Button>,
#[template_child]
pub resetVolumeSlider: TemplateChild<Scale>,
#[template_child]
pub resetVolumePercentage: TemplateChild<Label>,
#[template_child]
pub resetVolumeMeter: TemplateChild<ProgressBar>,
#[template_child]
pub resetSources: TemplateChild<gtk::Box>,
#[template_child]
pub resetOutputStreamButton: TemplateChild<ListEntry>,
#[template_child]
pub resetOutputStreams: TemplateChild<gtk::Box>,
pub resetDefaultSource: RefCell<Option<Source>>,
pub resetSourceList: Arc<Mutex<Vec<Source>>>,
pub resetOutputStreamList: Arc<Mutex<Vec<OutputStream>>>,
} }
#[glib::object_subclass] #[glib::object_subclass]
impl ObjectSubclass for SourceBox { impl ObjectSubclass for SourceBox {
const NAME: &'static str = "resetMicrophone"; const NAME: &'static str = "resetAudioInput";
type Type = sourceBox::SourceBox; type Type = sourceBox::SourceBox;
type ParentType = gtk::Box; type ParentType = gtk::Box;
fn class_init(klass: &mut Self::Class) { fn class_init(klass: &mut Self::Class) {
InputStreamEntry::ensure_type(); OutputStreamEntry::ensure_type();
ListEntry::ensure_type(); ListEntry::ensure_type();
klass.bind_template(); klass.bind_template();
} }
@ -55,4 +70,3 @@ impl WidgetImpl for SourceBox {}
impl WindowImpl for SourceBox {} impl WindowImpl for SourceBox {}
impl ApplicationWindowImpl for SourceBox {} impl ApplicationWindowImpl for SourceBox {}

View file

@ -0,0 +1,72 @@
use std::cell::RefCell;
use std::sync::Arc;
use std::time::Duration;
use adw::glib;
use adw::glib::Object;
use adw::prelude::RangeExt;
use dbus::blocking::Connection;
use dbus::Error;
use glib::subclass::types::ObjectSubclassIsExt;
use glib::{clone, Propagation};
use ReSet_Lib::audio::audio::Source;
use super::sourceEntryImpl;
glib::wrapper! {
pub struct SourceEntry(ObjectSubclass<sourceEntryImpl::SourceEntry>)
@extends gtk::Box, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}
impl SourceEntry {
pub fn new(stream: Source) -> Self {
let obj: Self = Object::builder().build();
// TODO use event callback for progress bar -> this is the "im speaking" indicator
// TODO map the slider to volume
// TODO properly use volume fraction
// TODO map mute to callback
// TODO map dropdown
{
let imp = obj.imp();
imp.resetSourceName.set_text(stream.name.clone().as_str());
let volume = stream.volume.first().unwrap_or_else(|| &(0 as u32));
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";
imp.resetVolumePercentage.set_text(&percentage);
imp.resetVolumeSlider.set_value(*volume as f64);
imp.stream.replace(stream);
imp.resetVolumeSlider.connect_change_value(
clone!(@weak imp => @default-return Propagation::Stop, move |_, _, value| {
let fraction = (value / 655.36).round();
println!("{fraction}");
let percentage = (fraction).to_string() + "%";
imp.resetVolumePercentage.set_text(&percentage);
set_inputstream_volume(value, imp.stream.clone());
Propagation::Proceed
}),
);
}
obj
}
}
fn set_inputstream_volume(value: f64, stream: Arc<RefCell<Source>>) -> bool {
let mut stream = stream.borrow_mut().clone();
// let x = stream.volume.iter_mut().map(|_| value as u32);
stream.volume = vec![value as u32; stream.channels as usize];
dbg!(stream.volume.clone());
let conn = Connection::new_session().unwrap();
let proxy = conn.with_proxy(
"org.xetibo.ReSet",
"/org/xetibo/ReSet",
Duration::from_millis(100),
);
let res: Result<(bool,), Error> =
proxy.method_call("org.xetibo.ReSet", "SetSourceVolume", (stream,));
if res.is_err() {
return false;
}
res.unwrap().0
}

View file

@ -0,0 +1,48 @@
use std::cell::RefCell;
use std::sync::Arc;
use gtk::subclass::prelude::*;
use gtk::{glib, Button, CompositeTemplate, DropDown, Label, ProgressBar, Scale, CheckButton};
use ReSet_Lib::audio::audio::Source;
use super::sourceEntry;
#[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetSourceEntry.ui")]
pub struct SourceEntry {
#[template_child]
pub resetSourceName: TemplateChild<Label>,
#[template_child]
pub resetSelectedSource: TemplateChild<CheckButton>,
#[template_child]
pub resetSourceMute: TemplateChild<Button>,
#[template_child]
pub resetVolumeSlider: TemplateChild<Scale>,
#[template_child]
pub resetVolumePercentage: TemplateChild<Label>,
#[template_child]
pub resetVolumeMeter: TemplateChild<ProgressBar>,
pub stream: Arc<RefCell<Source>>,
}
#[glib::object_subclass]
impl ObjectSubclass for SourceEntry {
const NAME: &'static str = "resetSourceEntry";
type Type = sourceEntry::SourceEntry;
type ParentType = gtk::Box;
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
}
fn instance_init(obj: &glib::subclass::InitializingObject<Self>) {
obj.init_template();
}
}
impl BoxImpl for SourceEntry {}
impl ObjectImpl for SourceEntry {}
impl WidgetImpl for SourceEntry {}

View file

@ -15,7 +15,8 @@ use gtk::gio;
use gtk::prelude::ActionableExt; use gtk::prelude::ActionableExt;
use ReSet_Lib::audio::audio::{InputStream, Sink}; use ReSet_Lib::audio::audio::{InputStream, Sink};
use super::audioSource::{self, AudioSourceEntry}; use super::inputStreamEntry::InputStreamEntry;
use super::sinkEntry::SinkEntry;
glib::wrapper! { glib::wrapper! {
pub struct AudioBox(ObjectSubclass<audioBoxImpl::AudioBox>) pub struct AudioBox(ObjectSubclass<audioBoxImpl::AudioBox>)
@ -41,7 +42,7 @@ impl AudioBox {
.set_action_target_value(Some(&Variant::from("outputDevices"))); .set_action_target_value(Some(&Variant::from("outputDevices")));
selfImp selfImp
.resetOutputStreamButton .resetInputStreamButton
.set_action_name(Some("navigation.pop")); .set_action_name(Some("navigation.pop"));
} }
} }
@ -55,16 +56,12 @@ pub fn populate_sinks(output_box: Arc<AudioBox>) {
glib::spawn_future(async move { glib::spawn_future(async move {
glib::idle_add_once(move || { glib::idle_add_once(move || {
let output_box_imp = output_box_ref.imp(); let output_box_imp = output_box_ref.imp();
// TODO handle default mapping // TODO handle default mapping
// output_box_imp.resetVolumePercentage.set_text(); // output_box_imp.resetVolumePercentage.set_text();
// output_box_imp.resetVolumeSlider.let // output_box_imp.resetVolumeSlider.let
for stream in sinks { for stream in sinks {
let entry = ListEntry::new(&AudioSourceEntry::new( // TODO create sink handler -> currently only allows input streams
stream.name, let entry = ListEntry::new(&SinkEntry::new(stream));
stream.volume,
stream.muted,
stream.index,
));
entry.set_activatable(false); entry.set_activatable(false);
output_box_imp.resetSinks.append(&entry); output_box_imp.resetSinks.append(&entry);
} }
@ -87,14 +84,9 @@ pub fn populate_streams(listeners: Arc<Listeners>, output_box: Arc<AudioBox>) {
glib::idle_add_once(move || { glib::idle_add_once(move || {
let output_box_imp = output_box_ref.imp(); let output_box_imp = output_box_ref.imp();
for stream in streams { for stream in streams {
let entry = ListEntry::new(&AudioSourceEntry::new( let entry = ListEntry::new(&InputStreamEntry::new(stream));
stream.name,
stream.volume,
stream.muted,
stream.index,
));
entry.set_activatable(false); entry.set_activatable(false);
output_box_imp.resetOutputStreams.append(&entry); output_box_imp.resetInputStreams.append(&entry);
} }
}); });
}); });

View file

@ -3,20 +3,22 @@ use std::sync::{Arc, Mutex};
use crate::components::base::listEntry::ListEntry; use crate::components::base::listEntry::ListEntry;
use crate::components::output::audioBox; use crate::components::output::audioBox;
use crate::components::output::audioSource::AudioSourceEntry; use crate::components::output::inputStreamEntry::InputStreamEntry;
use gtk::subclass::prelude::*; use gtk::subclass::prelude::*;
use gtk::{glib, Box, Button, CompositeTemplate, DropDown, Label, TemplateChild}; use gtk::{glib, Box, Button, CompositeTemplate, DropDown, Label, TemplateChild};
use gtk::{prelude::*, ProgressBar, Scale}; use gtk::{prelude::*, ProgressBar, Scale};
use ReSet_Lib::audio::audio::{InputStream, Sink}; use ReSet_Lib::audio::audio::{InputStream, Sink};
use super::sinkEntry::SinkEntry;
#[allow(non_snake_case)] #[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)] #[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetAudio.ui")] #[template(resource = "/org/Xetibo/ReSet/resetAudioOutput.ui")]
pub struct AudioBox { pub struct AudioBox {
#[template_child] #[template_child]
pub resetSinksRow: TemplateChild<ListEntry>, pub resetSinksRow: TemplateChild<ListEntry>,
#[template_child] #[template_child]
pub resetOutputDevice: TemplateChild<DropDown>, pub resetInputDevice: TemplateChild<DropDown>,
#[template_child] #[template_child]
pub resetSinkMute: TemplateChild<Button>, pub resetSinkMute: TemplateChild<Button>,
#[template_child] #[template_child]
@ -28,9 +30,9 @@ pub struct AudioBox {
#[template_child] #[template_child]
pub resetSinks: TemplateChild<Box>, pub resetSinks: TemplateChild<Box>,
#[template_child] #[template_child]
pub resetOutputStreamButton: TemplateChild<ListEntry>, pub resetInputStreamButton: TemplateChild<ListEntry>,
#[template_child] #[template_child]
pub resetOutputStreams: TemplateChild<Box>, pub resetInputStreams: TemplateChild<Box>,
pub resetDefaultSink: RefCell<Option<Sink>>, pub resetDefaultSink: RefCell<Option<Sink>>,
pub resetSinkList: Arc<Mutex<Vec<Sink>>>, pub resetSinkList: Arc<Mutex<Vec<Sink>>>,
pub resetInputStreamList: Arc<Mutex<Vec<InputStream>>>, pub resetInputStreamList: Arc<Mutex<Vec<InputStream>>>,
@ -38,12 +40,13 @@ pub struct AudioBox {
#[glib::object_subclass] #[glib::object_subclass]
impl ObjectSubclass for AudioBox { impl ObjectSubclass for AudioBox {
const NAME: &'static str = "resetAudio"; const NAME: &'static str = "resetAudioOutput";
type Type = audioBox::AudioBox; type Type = audioBox::AudioBox;
type ParentType = gtk::Box; type ParentType = gtk::Box;
fn class_init(klass: &mut Self::Class) { fn class_init(klass: &mut Self::Class) {
AudioSourceEntry::ensure_type(); InputStreamEntry::ensure_type();
SinkEntry::ensure_type();
ListEntry::ensure_type(); ListEntry::ensure_type();
klass.bind_template(); klass.bind_template();
} }

View file

@ -1,34 +0,0 @@
use crate::components::output::audioSourceImpl;
use adw::glib;
use adw::glib::Object;
use glib::subclass::types::ObjectSubclassIsExt;
glib::wrapper! {
pub struct AudioSourceEntry(ObjectSubclass<audioSourceImpl::AudioSourceEntry>)
@extends gtk::Box, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}
impl AudioSourceEntry {
pub fn new(name: String, volume: Vec<u32>, muted: bool, index: u32) -> Self {
let obj: Self = Object::builder().build();
// TODO use event callback for progress bar -> this is the "im speaking" indicator
// TODO map the slider to volume
// TODO properly use volume fraction
// TODO map mute to callback
// TODO map dropdown
{
let imp = obj.imp();
imp.associatedIndex.set(index);
imp.isMuted.set(muted);
let mut volume_borrow = imp.volume.borrow_mut();
*volume_borrow = volume;
imp.resetSourceName.set_text(name.as_str());
let fraction = (volume_borrow.first().unwrap_or_else(|| &(0 as u32)) / 100) as f64;
imp.resetVolumeMeter.set_fraction(fraction);
let percentage = (fraction * 100 as f64).to_string();
imp.resetVolumePercentage.set_text(&percentage);
}
obj
}
}

View file

@ -0,0 +1,72 @@
use std::cell::RefCell;
use std::sync::Arc;
use std::time::Duration;
use adw::glib;
use adw::glib::Object;
use adw::prelude::RangeExt;
use dbus::blocking::Connection;
use dbus::Error;
use glib::subclass::types::ObjectSubclassIsExt;
use glib::{clone, Propagation};
use ReSet_Lib::audio::audio::InputStream;
use super::inputStreamEntryImpl;
glib::wrapper! {
pub struct InputStreamEntry(ObjectSubclass<inputStreamEntryImpl::InputStreamEntry>)
@extends gtk::Box, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}
impl InputStreamEntry {
pub fn new(stream: InputStream) -> Self {
let obj: Self = Object::builder().build();
// TODO use event callback for progress bar -> this is the "im speaking" indicator
// TODO map the slider to volume
// TODO properly use volume fraction
// TODO map mute to callback
// TODO map dropdown
{
let imp = obj.imp();
imp.resetSinkName.set_text(stream.name.clone().as_str());
let volume = stream.volume.first().unwrap_or_else(|| &(0 as u32));
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";
imp.resetVolumePercentage.set_text(&percentage);
imp.resetVolumeSlider.set_value(*volume as f64);
imp.stream.replace(stream);
imp.resetVolumeSlider.connect_change_value(
clone!(@weak imp => @default-return Propagation::Stop, move |_, _, value| {
let fraction = (value / 655.36).round();
println!("{fraction}");
let percentage = (fraction).to_string() + "%";
imp.resetVolumePercentage.set_text(&percentage);
set_inputstream_volume(value, imp.stream.clone());
Propagation::Proceed
}),
);
}
obj
}
}
fn set_inputstream_volume(value: f64, stream: Arc<RefCell<InputStream>>) -> bool {
let mut stream = stream.borrow_mut().clone();
// let x = stream.volume.iter_mut().map(|_| value as u32);
stream.volume = vec![value as u32; stream.channels as usize];
dbg!(stream.volume.clone());
let conn = Connection::new_session().unwrap();
let proxy = conn.with_proxy(
"org.xetibo.ReSet",
"/org/xetibo/ReSet",
Duration::from_millis(100),
);
let res: Result<(bool,), Error> =
proxy.method_call("org.xetibo.ReSet", "SetInputStreamVolume", (stream,));
if res.is_err() {
return false;
}
res.unwrap().0
}

View file

@ -1,21 +1,29 @@
use gtk::{Button, CompositeTemplate, glib, Label, ProgressBar, Scale}; use std::cell::RefCell;
use std::sync::Arc;
use gtk::subclass::prelude::*; use gtk::subclass::prelude::*;
use crate::components::input::inputStreamEntry; use gtk::{glib, Button, CompositeTemplate, DropDown, Label, ProgressBar, Scale};
use ReSet_Lib::audio::audio::InputStream;
use super::inputStreamEntry;
#[allow(non_snake_case)] #[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)] #[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetInputStreamEntry.ui")] #[template(resource = "/org/Xetibo/ReSet/resetInputStreamEntry.ui")]
pub struct InputStreamEntry { pub struct InputStreamEntry {
#[template_child] #[template_child]
pub resetSourceName: TemplateChild<Label>, pub resetSinkName: TemplateChild<Label>,
#[template_child] #[template_child]
pub resetSourceMute: TemplateChild<Button>, pub resetSelectedSink: TemplateChild<DropDown>,
#[template_child]
pub resetSinkMute: TemplateChild<Button>,
#[template_child] #[template_child]
pub resetVolumeSlider: TemplateChild<Scale>, pub resetVolumeSlider: TemplateChild<Scale>,
#[template_child] #[template_child]
pub resetVolumePercentage: TemplateChild<Label>, pub resetVolumePercentage: TemplateChild<Label>,
#[template_child] #[template_child]
pub resetVolumeMeter: TemplateChild<ProgressBar>, pub resetVolumeMeter: TemplateChild<ProgressBar>,
pub stream: Arc<RefCell<InputStream>>,
} }
#[glib::object_subclass] #[glib::object_subclass]
@ -37,4 +45,4 @@ impl BoxImpl for InputStreamEntry {}
impl ObjectImpl for InputStreamEntry {} impl ObjectImpl for InputStreamEntry {}
impl WidgetImpl for InputStreamEntry {} impl WidgetImpl for InputStreamEntry {}

View file

@ -1,5 +1,7 @@
#![allow(non_snake_case)] #![allow(non_snake_case)]
pub mod audioSource;
pub mod audioBox; pub mod audioBox;
pub mod audioBoxImpl; pub mod audioBoxImpl;
pub mod audioSourceImpl; pub mod inputStreamEntry;
pub mod inputStreamEntryImpl;
pub mod sinkEntry;
pub mod sinkEntryImpl;

View file

@ -0,0 +1,72 @@
use std::cell::RefCell;
use std::sync::Arc;
use std::time::Duration;
use adw::glib;
use adw::glib::Object;
use adw::prelude::RangeExt;
use dbus::blocking::Connection;
use dbus::Error;
use glib::subclass::types::ObjectSubclassIsExt;
use glib::{clone, Propagation};
use ReSet_Lib::audio::audio::Sink;
use super::sinkEntryImpl;
glib::wrapper! {
pub struct SinkEntry(ObjectSubclass<sinkEntryImpl::SinkEntry>)
@extends gtk::Box, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}
impl SinkEntry {
pub fn new(stream: Sink) -> Self {
let obj: Self = Object::builder().build();
// TODO use event callback for progress bar -> this is the "im speaking" indicator
// TODO map the slider to volume
// TODO properly use volume fraction
// TODO map mute to callback
// TODO map dropdown
{
let imp = obj.imp();
imp.resetSinkName.set_text(stream.name.clone().as_str());
let volume = stream.volume.first().unwrap_or_else(|| &(0 as u32));
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";
imp.resetVolumePercentage.set_text(&percentage);
imp.resetVolumeSlider.set_value(*volume as f64);
imp.stream.replace(stream);
imp.resetVolumeSlider.connect_change_value(
clone!(@weak imp => @default-return Propagation::Stop, move |_, _, value| {
let fraction = (value / 655.36).round();
println!("{fraction}");
let percentage = (fraction).to_string() + "%";
imp.resetVolumePercentage.set_text(&percentage);
set_inputstream_volume(value, imp.stream.clone());
Propagation::Proceed
}),
);
}
obj
}
}
fn set_inputstream_volume(value: f64, stream: Arc<RefCell<Sink>>) -> bool {
let mut stream = stream.borrow_mut().clone();
// let x = stream.volume.iter_mut().map(|_| value as u32);
stream.volume = vec![value as u32; stream.channels as usize];
dbg!(stream.volume.clone());
let conn = Connection::new_session().unwrap();
let proxy = conn.with_proxy(
"org.xetibo.ReSet",
"/org/xetibo/ReSet",
Duration::from_millis(100),
);
let res: Result<(bool,), Error> =
proxy.method_call("org.xetibo.ReSet", "SetSinkVolume", (stream,));
if res.is_err() {
return false;
}
res.unwrap().0
}

View file

@ -0,0 +1,47 @@
use std::cell::RefCell;
use std::sync::Arc;
use crate::components::output::sinkEntry;
use gtk::subclass::prelude::*;
use gtk::{glib, Button, CompositeTemplate, DropDown, Label, ProgressBar, Scale, CheckButton};
use ReSet_Lib::audio::audio::Sink;
#[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetSinkEntry.ui")]
pub struct SinkEntry {
#[template_child]
pub resetSinkName: TemplateChild<Label>,
#[template_child]
pub resetSelectedSink: TemplateChild<CheckButton>,
#[template_child]
pub resetSinkMute: TemplateChild<Button>,
#[template_child]
pub resetVolumeSlider: TemplateChild<Scale>,
#[template_child]
pub resetVolumePercentage: TemplateChild<Label>,
#[template_child]
pub resetVolumeMeter: TemplateChild<ProgressBar>,
pub stream: Arc<RefCell<Sink>>,
}
#[glib::object_subclass]
impl ObjectSubclass for SinkEntry {
const NAME: &'static str = "resetSinkEntry";
type Type = sinkEntry::SinkEntry;
type ParentType = gtk::Box;
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
}
fn instance_init(obj: &glib::subclass::InitializingObject<Self>) {
obj.init_template();
}
}
impl BoxImpl for SinkEntry {}
impl ObjectImpl for SinkEntry {}
impl WidgetImpl for SinkEntry {}

View file

@ -1,9 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.12"/> <requires lib="gtk" version="4.12"/>
<requires lib="libadwaita" version="1.4"/> <requires lib="libadwaita" version="1.4"/>
<template class="resetMicrophone" parent="GtkBox"> <template class="resetAudioInput" parent="GtkBox">
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="valign">start</property> <property name="valign">start</property>
<child> <child>
@ -63,7 +63,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkBox" id="resetDefaultSource"> <object class="GtkBox">
<property name="margin-bottom">10</property> <property name="margin-bottom">10</property>
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="margin-start">5</property> <property name="margin-start">5</property>
@ -122,12 +122,6 @@
<property name="label">Input Streams</property> <property name="label">Input Streams</property>
</object> </object>
</child> </child>
<child>
<object class="resetInputStreamEntry"/>
</child>
<child>
<object class="resetInputStreamEntry"/>
</child>
</object> </object>
</child> </child>
</object> </object>
@ -150,7 +144,7 @@
<property name="show-separators">True</property> <property name="show-separators">True</property>
<property name="valign">start</property> <property name="valign">start</property>
<child> <child>
<object class="resetListBoxRow" id="resetInputStreamButton"> <object class="resetListBoxRow" id="resetOutputStreamButton">
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="height-request">40</property> <property name="height-request">40</property>
@ -175,7 +169,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkBox" id="resetSinks"> <object class="GtkBox" id="resetSources">
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="margin-start">5</property> <property name="margin-start">5</property>
<property name="margin-top">10</property> <property name="margin-top">10</property>
@ -186,12 +180,6 @@
<property name="label">Input Devices</property> <property name="label">Input Devices</property>
</object> </object>
</child> </child>
<child>
<object class="resetInputStreamEntry"/>
</child>
<child>
<object class="resetInputStreamEntry"/>
</child>
</object> </object>
</child> </child>
</object> </object>

View file

@ -1,9 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.12"/> <requires lib="gtk" version="4.12"/>
<requires lib="libadwaita" version="1.4"/> <requires lib="libadwaita" version="1.4"/>
<template class="resetAudio" parent="GtkBox"> <template class="resetAudioOutput" parent="GtkBox">
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="valign">start</property> <property name="valign">start</property>
<child> <child>
@ -43,7 +43,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkDropDown" id="resetOutputDevice"> <object class="GtkDropDown" id="resetInputDevice">
<property name="halign">end</property> <property name="halign">end</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="valign">center</property> <property name="valign">center</property>
@ -113,7 +113,7 @@
<object class="GtkSeparator"/> <object class="GtkSeparator"/>
</child> </child>
<child> <child>
<object class="GtkBox" id="resetOutputStreams"> <object class="GtkBox" id="resetInputStreams">
<property name="margin-top">10</property> <property name="margin-top">10</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
@ -144,7 +144,7 @@
<property name="show-separators">True</property> <property name="show-separators">True</property>
<property name="valign">start</property> <property name="valign">start</property>
<child> <child>
<object class="resetListBoxRow" id="resetOutputStreamButton"> <object class="resetListBoxRow" id="resetInputStreamButton">
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="height-request">40</property> <property name="height-request">40</property>

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.6"/> <requires lib="gtk" version="4.6"/>
<requires lib="libadwaita" version="1.4"/> <requires lib="libadwaita" version="1.4"/>

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.12"/> <requires lib="gtk" version="4.12"/>
<template class="resetBluetoothEntry" parent="GtkBox"> <template class="resetBluetoothEntry" parent="GtkBox">

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.12"/> <requires lib="gtk" version="4.12"/>
<template class="resetInputStreamEntry" parent="GtkBox"> <template class="resetInputStreamEntry" parent="GtkBox">
@ -12,13 +12,13 @@
<object class="GtkBox"> <object class="GtkBox">
<property name="margin-bottom">5</property> <property name="margin-bottom">5</property>
<child> <child>
<object class="GtkLabel" id="resetSourceName"> <object class="GtkLabel" id="resetSinkName">
<property name="label">text</property> <property name="label">text</property>
<property name="margin-start">5</property> <property name="margin-start">5</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkDropDown" id="resetSelectedSource"> <object class="GtkDropDown" id="resetSelectedSink">
<property name="halign">end</property> <property name="halign">end</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="margin-end">5</property> <property name="margin-end">5</property>
@ -31,8 +31,8 @@
<property name="margin-bottom">5</property> <property name="margin-bottom">5</property>
<property name="margin-top">5</property> <property name="margin-top">5</property>
<child> <child>
<object class="GtkButton" id="resetSourceMute"> <object class="GtkButton" id="resetSinkMute">
<property name="icon-name">audio-input-microphone-symbolic</property> <property name="icon-name">audio-volume-high-symbolic</property>
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="valign">center</property> <property name="valign">center</property>
</object> </object>
@ -41,8 +41,9 @@
<object class="GtkScale" id="resetVolumeSlider"> <object class="GtkScale" id="resetVolumeSlider">
<property name="adjustment"> <property name="adjustment">
<object class="GtkAdjustment"> <object class="GtkAdjustment">
<property name="page-increment">5.0</property> <property name="page-increment">655.36</property>
<property name="upper">100.0</property> <property name="step-increment">65536.0</property>
<property name="upper">65536.0</property>
</object> </object>
</property> </property>
<property name="hexpand">True</property> <property name="hexpand">True</property>

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<template class="resetListBoxRow" parent="GtkListBoxRow"> <template class="resetListBoxRow" parent="GtkListBoxRow">

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.12"/> <requires lib="gtk" version="4.12"/>
<requires lib="libadwaita" version="1.4"/> <requires lib="libadwaita" version="1.4"/>

View file

@ -1,23 +1,27 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.12"/> <requires lib="gtk" version="4.12"/>
<template class="resetMicEntry" parent="GtkBox"> <template class="resetOutpuStreamEntry" parent="GtkBox">
<property name="margin-bottom">5</property>
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="margin-start">5</property> <property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="margin-bottom">5</property> <property name="margin-bottom">5</property>
<child> <child>
<object class="GtkImage" id="resetMicIcon"> <object class="GtkLabel" id="resetSourceName">
<property name="icon-name">audio-input-microphone-symbolic</property> <property name="label">text</property>
<property name="margin-end">5</property> <property name="margin-start">5</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkLabel" id="resetMicName"> <object class="GtkDropDown" id="resetSelectedSource">
<property name="label">Input Volume</property> <property name="halign">end</property>
<property name="hexpand">True</property>
<property name="margin-end">5</property>
</object> </object>
</child> </child>
</object> </object>
@ -27,14 +31,14 @@
<property name="margin-bottom">5</property> <property name="margin-bottom">5</property>
<property name="margin-top">5</property> <property name="margin-top">5</property>
<child> <child>
<object class="GtkButton" id="resetMicMute"> <object class="GtkButton" id="resetSourceMute">
<property name="icon-name">audio-input-microphone-symbolic</property> <property name="icon-name">audio-input-microphone-symbolic</property>
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="valign">center</property> <property name="valign">center</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkScale" id="resetMicSlider"> <object class="GtkScale" id="resetVolumeSlider">
<property name="adjustment"> <property name="adjustment">
<object class="GtkAdjustment"> <object class="GtkAdjustment">
<property name="page-increment">5.0</property> <property name="page-increment">5.0</property>
@ -47,7 +51,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkLabel" id="resetMicPercentage"> <object class="GtkLabel" id="resetVolumePercentage">
<property name="label">100%</property> <property name="label">100%</property>
<property name="lines">1</property> <property name="lines">1</property>
<property name="width-request">40</property> <property name="width-request">40</property>
@ -56,7 +60,9 @@
</object> </object>
</child> </child>
<child> <child>
<object class="GtkProgressBar" id="resetMicMeter"/> <object class="GtkProgressBar" id="resetVolumeMeter">
<property name="margin-top">5</property>
</object>
</child> </child>
</template> </template>
</interface> </interface>

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.12"/> <requires lib="gtk" version="4.12"/>
<template class="resetOutputStreamEntry" parent="GtkBox"> <template class="resetOutputStreamEntry" parent="GtkBox">
@ -41,8 +41,9 @@
<object class="GtkScale" id="resetVolumeSlider"> <object class="GtkScale" id="resetVolumeSlider">
<property name="adjustment"> <property name="adjustment">
<object class="GtkAdjustment"> <object class="GtkAdjustment">
<property name="page-increment">5.0</property> <property name="page-increment">655.36</property>
<property name="upper">100.0</property> <property name="step-increment">2.0</property>
<property name="upper">65536.0</property>
</object> </object>
</property> </property>
<property name="hexpand">True</property> <property name="hexpand">True</property>

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.12"/> <requires lib="gtk" version="4.12"/>
<template class="resetPopup" parent="GtkPopover"> <template class="resetPopup" parent="GtkPopover">

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.12"/> <requires lib="gtk" version="4.12"/>
<template class="resetSavedWifiEntry" parent="GtkBox"> <template class="resetSavedWifiEntry" parent="GtkBox">

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<template class="resetSettingBox" parent="GtkBox"> <template class="resetSettingBox" parent="GtkBox">

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<template class="resetSidebarEntry" parent="GtkListBoxRow"> <template class="resetSidebarEntry" parent="GtkListBoxRow">

View file

@ -0,0 +1,69 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.16.0 -->
<interface>
<requires lib="gtk" version="4.12"/>
<object class="GtkBox" id="resetSinkEntry">
<property name="margin-bottom">5</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="margin-bottom">5</property>
<child>
<object class="GtkLabel" id="resetSinkName">
<property name="label">text</property>
<property name="margin-start">5</property>
</object>
</child>
<child>
<object class="GtkCheckButton" id="resetSelectedSink">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="hexpand-set">True</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox">
<property name="margin-bottom">5</property>
<property name="margin-top">5</property>
<child>
<object class="GtkButton" id="resetSinkMute">
<property name="icon-name">audio-volume-high-symbolic</property>
<property name="margin-end">5</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="GtkScale" id="resetVolumeSlider">
<property name="adjustment">
<object class="GtkAdjustment">
<property name="page-increment">655.36</property>
<property name="step-increment">65536.0</property>
<property name="upper">65536.0</property>
</object>
</property>
<property name="hexpand">True</property>
<property name="valign">center</property>
<property name="value-pos">bottom</property>
</object>
</child>
<child>
<object class="GtkLabel" id="resetVolumePercentage">
<property name="label">100%</property>
<property name="lines">1</property>
<property name="width-request">40</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkProgressBar" id="resetVolumeMeter">
<property name="margin-top">5</property>
</object>
</child>
</object>
</interface>

View file

@ -0,0 +1,69 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.16.0 -->
<interface>
<requires lib="gtk" version="4.12"/>
<object class="GtkBox" id="resetSourceEntry">
<property name="margin-bottom">5</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="margin-bottom">5</property>
<child>
<object class="GtkLabel" id="resetSourceName">
<property name="label">text</property>
<property name="margin-start">5</property>
</object>
</child>
<child>
<object class="GtkCheckButton" id="resetSelectedSource">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="hexpand-set">True</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox">
<property name="margin-bottom">5</property>
<property name="margin-top">5</property>
<child>
<object class="GtkButton" id="resetSourceMute">
<property name="icon-name">microphone-sensitivity-high-symbolic</property>
<property name="margin-end">5</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="GtkScale" id="resetVolumeSlider">
<property name="adjustment">
<object class="GtkAdjustment">
<property name="page-increment">655.36</property>
<property name="step-increment">65536.0</property>
<property name="upper">65536.0</property>
</object>
</property>
<property name="hexpand">True</property>
<property name="valign">center</property>
<property name="value-pos">bottom</property>
</object>
</child>
<child>
<object class="GtkLabel" id="resetVolumePercentage">
<property name="label">100%</property>
<property name="lines">1</property>
<property name="width-request">40</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkProgressBar" id="resetVolumeMeter">
<property name="margin-top">5</property>
</object>
</child>
</object>
</interface>

View file

@ -6,16 +6,18 @@
(4,7,None,"resetWiFi.ui",None,None,None,None,None,None,None), (4,7,None,"resetWiFi.ui",None,None,None,None,None,None,None),
(5,2,None,"resetWifiEntry.ui",None,None,None,None,None,None,None), (5,2,None,"resetWifiEntry.ui",None,None,None,None,None,None,None),
(6,1,None,"resetSidebarEntry.ui",None,None,None,None,None,None,None), (6,1,None,"resetSidebarEntry.ui",None,None,None,None,None,None,None),
(7,1,None,"resetOutputStreamEntry.ui",None,None,None,None,None,None,None), (7,1,None,"resetInputStreamEntry.ui",None,None,None,None,None,None,None),
(8,1,None,"resetAudio.ui",None,None,None,None,None,None,None), (8,1,None,"resetAudioOutput.ui",None,None,None,None,None,None,None),
(10,1,None,"resetBluetooth.ui",None,None,None,None,None,None,None), (10,1,None,"resetBluetooth.ui",None,None,None,None,None,None,None),
(11,2,None,"resetBluetoothEntry.ui",None,None,None,None,None,None,None), (11,2,None,"resetBluetoothEntry.ui",None,None,None,None,None,None,None),
(12,11,None,"resetMicrophone.ui",None,None,None,None,None,None,None), (12,11,None,"resetAudioInput.ui",None,None,None,None,None,None,None),
(13,11,None,"resetInputStreamEntry.ui",None,None,None,None,None,None,None), (13,11,None,"resetOutpuStreamEntry.ui",None,None,None,None,None,None,None),
(14,3,None,"resetSettingBox.ui",None,None,None,None,None,None,None), (14,3,None,"resetSettingBox.ui",None,None,None,None,None,None,None),
(15,1,None,"resetListBoxRow.ui",None,None,None,None,None,None,None), (15,1,None,"resetListBoxRow.ui",None,None,None,None,None,None,None),
(16,6,None,"resetPopup.ui",None,None,None,None,None,None,None), (16,6,None,"resetPopup.ui",None,None,None,None,None,None,None),
(17,1,None,"resetSavedWifiEntry.ui",None,None,None,None,None,None,None) (17,1,None,"resetSavedWifiEntry.ui",None,None,None,None,None,None,None),
(18,None,None,"resetSinkEntry.ui",None,None,None,None,None,None,None),
(19,None,None,"resetSourceEntry.ui",None,None,None,None,None,None,None)
</ui> </ui>
<object> <object>
(3,1,"AdwApplicationWindow","resetUI",None,None,None,None,-1," &lt;child&gt;\n &lt;object id=\"resetSidebarBreakpoint\" class=\"AdwBreakpoint\"&gt;\n &lt;/object&gt;\n &lt;/child&gt;"), (3,1,"AdwApplicationWindow","resetUI",None,None,None,None,-1," &lt;child&gt;\n &lt;object id=\"resetSidebarBreakpoint\" class=\"AdwBreakpoint\"&gt;\n &lt;/object&gt;\n &lt;/child&gt;"),
@ -91,17 +93,17 @@
(6,2,"GtkBox",None,1,None,None,None,-1,None), (6,2,"GtkBox",None,1,None,None,None,-1,None),
(6,6,"GtkImage","resetSidebarImage",2,None,None,None,None,None), (6,6,"GtkImage","resetSidebarImage",2,None,None,None,None,None),
(6,7,"GtkLabel","resetSidebarLabel",2,None,None,None,1,None), (6,7,"GtkLabel","resetSidebarLabel",2,None,None,None,1,None),
(7,1,"GtkBox","resetOutputStreamEntry",None,None,None,None,-1,None), (7,1,"GtkBox","resetInputStreamEntry",None,None,None,None,-1,None),
(7,4,"GtkProgressBar","resetVolumeMeter",1,None,None,None,2,None), (7,4,"GtkProgressBar","resetVolumeMeter",1,None,None,None,2,None),
(7,5,"GtkBox",None,1,None,None,None,None,None), (7,5,"GtkBox",None,1,None,None,None,None,None),
(7,6,"GtkLabel","resetSourceName",5,None,None,None,None,None), (7,6,"GtkLabel","resetSinkName",5,None,None,None,None,None),
(7,8,"GtkBox",None,1,None,None,None,1,None), (7,8,"GtkBox",None,1,None,None,None,1,None),
(7,9,"GtkScale","resetVolumeSlider",8,None,None,None,1,None), (7,9,"GtkScale","resetVolumeSlider",8,None,None,None,1,None),
(7,10,"GtkAdjustment",None,9,None,None,None,None,None), (7,10,"GtkAdjustment",None,9,None,None,None,None,None),
(7,11,"GtkButton","resetSourceMute",8,None,None,None,None,None), (7,11,"GtkButton","resetSinkMute",8,None,None,None,None,None),
(7,12,"GtkLabel","resetVolumePercentage",8,None,None,None,2,None), (7,12,"GtkLabel","resetVolumePercentage",8,None,None,None,2,None),
(7,13,"GtkDropDown","resetSelectedSink",5,None,None,None,1,None), (7,13,"GtkDropDown","resetSelectedSink",5,None,None,None,1,None),
(8,1,"GtkBox","resetAudio",None,None,None,None,None,None), (8,1,"GtkBox","resetAudioOutput",None,None,None,None,None,None),
(8,53,"GtkLabel",None,1,None,None,None,None,None), (8,53,"GtkLabel",None,1,None,None,None,None,None),
(8,54,"AdwNavigationView",None,1,None,None,None,1,None), (8,54,"AdwNavigationView",None,1,None,None,None,1,None),
(8,55,"AdwNavigationPage",None,54,None,None,None,None,None), (8,55,"AdwNavigationPage",None,54,None,None,None,None,None),
@ -112,10 +114,10 @@
(8,74,"resetListBoxRow","resetSinksRow",73,None,None,None,None,None), (8,74,"resetListBoxRow","resetSinksRow",73,None,None,None,None,None),
(8,75,"GtkBox",None,74,None,None,None,None,None), (8,75,"GtkBox",None,74,None,None,None,None,None),
(8,76,"GtkLabel",None,75,None,None,None,None,None), (8,76,"GtkLabel",None,75,None,None,None,None,None),
(8,77,"GtkDropDown","resetOutputDevice",75,None,None,None,1,None), (8,77,"GtkDropDown","resetInputDevice",75,None,None,None,1,None),
(8,78,"GtkImage",None,75,None,None,None,2,None), (8,78,"GtkImage",None,75,None,None,None,2,None),
(8,81,"GtkLabel",None,72,None,None,None,1,None), (8,81,"GtkLabel",None,72,None,None,None,1,None),
(8,85,"GtkBox","resetOutputStreams",56,None,None,None,4,None), (8,85,"GtkBox","resetInputStreams",56,None,None,None,4,None),
(8,86,"GtkLabel",None,85,None,None,None,None,None), (8,86,"GtkLabel",None,85,None,None,None,None,None),
(8,89,"GtkBox","resetSinks",72,None,None,None,3,None), (8,89,"GtkBox","resetSinks",72,None,None,None,3,None),
(8,90,"GtkLabel",None,89,None,None,None,None,None), (8,90,"GtkLabel",None,89,None,None,None,None,None),
@ -128,7 +130,7 @@
(8,102,"GtkProgressBar","resetVolumeMeter",93,None,None,None,1,None), (8,102,"GtkProgressBar","resetVolumeMeter",93,None,None,None,1,None),
(8,103,"GtkSeparator",None,56,None,None,None,3,None), (8,103,"GtkSeparator",None,56,None,None,None,3,None),
(8,109,"GtkListBox",None,72,None,None,None,None,None), (8,109,"GtkListBox",None,72,None,None,None,None,None),
(8,110,"resetListBoxRow","resetOutputStreamButton",109,None,None,None,None,None), (8,110,"resetListBoxRow","resetInputStreamButton",109,None,None,None,None,None),
(8,111,"GtkBox",None,110,None,None,None,None,None), (8,111,"GtkBox",None,110,None,None,None,None,None),
(8,112,"GtkLabel",None,111,None,None,None,None,None), (8,112,"GtkLabel",None,111,None,None,None,None,None),
(8,113,"GtkImage",None,111,None,None,None,1,None), (8,113,"GtkImage",None,111,None,None,None,1,None),
@ -170,7 +172,7 @@
(11,3,"GtkImage","resetBluetoothDeviceType",2,None,None,None,None,None), (11,3,"GtkImage","resetBluetoothDeviceType",2,None,None,None,None,None),
(11,4,"GtkLabel","resetBluetoothLabel",2,None,None,None,1,None), (11,4,"GtkLabel","resetBluetoothLabel",2,None,None,None,1,None),
(11,5,"GtkButton","resetBluetoothButton",2,None,None,None,2,None), (11,5,"GtkButton","resetBluetoothButton",2,None,None,None,2,None),
(12,11,"GtkBox","resetMicrophone",None,None,None,None,None,None), (12,11,"GtkBox","resetAudioInput",None,None,None,None,None,None),
(12,12,"GtkLabel",None,11,None,None,None,None,None), (12,12,"GtkLabel",None,11,None,None,None,None,None),
(12,13,"AdwNavigationView",None,11,None,None,None,1,None), (12,13,"AdwNavigationView",None,11,None,None,None,1,None),
(12,14,"AdwNavigationPage",None,13,None,None,None,None,None), (12,14,"AdwNavigationPage",None,13,None,None,None,None,None),
@ -181,7 +183,7 @@
(12,19,"GtkLabel",None,18,None,None,None,None,None), (12,19,"GtkLabel",None,18,None,None,None,None,None),
(12,20,"GtkDropDown","resetSourceDropdown",18,None,None,None,1,None), (12,20,"GtkDropDown","resetSourceDropdown",18,None,None,None,1,None),
(12,21,"GtkImage",None,18,None,None,None,2,None), (12,21,"GtkImage",None,18,None,None,None,2,None),
(12,22,"GtkBox","resetDefaultSource",15,None,None,None,1,None), (12,22,"GtkBox",None,15,None,None,None,1,None),
(12,23,"GtkBox",None,22,None,None,None,None,None), (12,23,"GtkBox",None,22,None,None,None,None,None),
(12,24,"GtkButton","resetSourceMute",23,None,None,None,None,None), (12,24,"GtkButton","resetSourceMute",23,None,None,None,None,None),
(12,25,"GtkScale","resetVolumeSlider",23,None,None,None,1,None), (12,25,"GtkScale","resetVolumeSlider",23,None,None,None,1,None),
@ -192,19 +194,15 @@
(12,30,"GtkBox","resetOutputStreams",15,None,None,None,3,None), (12,30,"GtkBox","resetOutputStreams",15,None,None,None,3,None),
(12,31,"GtkLabel",None,30,None,None,None,None,None), (12,31,"GtkLabel",None,30,None,None,None,None,None),
(12,34,"AdwNavigationPage",None,13,None,None,None,1,None), (12,34,"AdwNavigationPage",None,13,None,None,None,1,None),
(12,40,"resetInputStreamEntry",None,30,None,None,None,1,None),
(12,41,"resetInputStreamEntry",None,30,None,None,None,2,None),
(12,42,"GtkBox",None,34,None,None,None,None,None), (12,42,"GtkBox",None,34,None,None,None,None,None),
(12,43,"GtkListBox",None,42,None,None,None,1,None), (12,43,"GtkListBox",None,42,None,None,None,1,None),
(12,44,"resetListBoxRow","resetInputStreamButton",43,None,None,None,None,None), (12,44,"resetListBoxRow","resetOutputStreamButton",43,None,None,None,None,None),
(12,45,"GtkBox",None,44,None,None,None,None,None), (12,45,"GtkBox",None,44,None,None,None,None,None),
(12,46,"GtkLabel",None,45,None,None,None,None,None), (12,46,"GtkLabel",None,45,None,None,None,None,None),
(12,47,"GtkImage",None,45,None,None,None,1,None), (12,47,"GtkImage",None,45,None,None,None,1,None),
(12,49,"GtkBox","resetSinks",42,None,None,None,2,None), (12,49,"GtkBox","resetSources",42,None,None,None,2,None),
(12,50,"GtkLabel",None,49,None,None,None,None,None), (12,50,"GtkLabel",None,49,None,None,None,None,None),
(12,51,"resetInputStreamEntry",None,49,None,None,None,1,None), (13,11,"GtkBox","resetOutpuStreamEntry",None,None,None,None,None,None),
(12,52,"resetInputStreamEntry",None,49,None,None,None,2,None),
(13,11,"GtkBox","resetInputStreamEntry",None,None,None,None,None,None),
(13,12,"GtkBox",None,11,None,None,None,None,None), (13,12,"GtkBox",None,11,None,None,None,None,None),
(13,13,"GtkLabel","resetSourceName",12,None,None,None,None,None), (13,13,"GtkLabel","resetSourceName",12,None,None,None,None,None),
(13,14,"GtkDropDown","resetSelectedSource",12,None,None,None,1,None), (13,14,"GtkDropDown","resetSelectedSource",12,None,None,None,1,None),
@ -225,7 +223,27 @@
(17,1,"GtkBox","resetSavedWifiEntry",None,None,None,None,-1,None), (17,1,"GtkBox","resetSavedWifiEntry",None,None,None,None,-1,None),
(17,2,"GtkLabel","resetSavedWifiLabel",1,None,None,None,None,None), (17,2,"GtkLabel","resetSavedWifiLabel",1,None,None,None,None,None),
(17,3,"GtkButton","resetEditSavedWifiButton",1,None,None,None,1,None), (17,3,"GtkButton","resetEditSavedWifiButton",1,None,None,None,1,None),
(17,4,"GtkButton","resetDeleteSavedWifiButton",1,None,None,None,2,None) (17,4,"GtkButton","resetDeleteSavedWifiButton",1,None,None,None,2,None),
(18,1,"GtkBox","resetSinkEntry",None,None,None,None,None,None),
(18,2,"GtkBox",None,1,None,None,None,None,None),
(18,3,"GtkLabel","resetSinkName",2,None,None,None,None,None),
(18,5,"GtkBox",None,1,None,None,None,1,None),
(18,6,"GtkButton","resetSinkMute",5,None,None,None,None,None),
(18,7,"GtkScale","resetVolumeSlider",5,None,None,None,1,None),
(18,8,"GtkAdjustment",None,7,None,None,None,None,None),
(18,9,"GtkLabel","resetVolumePercentage",5,None,None,None,2,None),
(18,10,"GtkProgressBar","resetVolumeMeter",1,None,None,None,2,None),
(18,11,"GtkCheckButton","resetSelectedSink",2,None,None,None,1,None),
(19,1,"GtkBox","resetSourceEntry",None,None,None,None,None,None),
(19,2,"GtkBox",None,1,None,None,None,None,None),
(19,3,"GtkLabel","resetSourceName",2,None,None,None,None,None),
(19,4,"GtkCheckButton","resetSelectedSource",2,None,None,None,1,None),
(19,5,"GtkBox",None,1,None,None,None,1,None),
(19,6,"GtkButton","resetSourceMute",5,None,None,None,None,None),
(19,7,"GtkScale","resetVolumeSlider",5,None,None,None,1,None),
(19,8,"GtkAdjustment",None,7,None,None,None,None,None),
(19,9,"GtkLabel","resetVolumePercentage",5,None,None,None,2,None),
(19,10,"GtkProgressBar","resetVolumeMeter",1,None,None,None,2,None)
</object> </object>
<object_property> <object_property>
(3,1,"GtkWidget","height-request","200",None,None,None,None,None,None,None,None,None), (3,1,"GtkWidget","height-request","200",None,None,None,None,None,None,None,None,None),
@ -419,8 +437,9 @@
(7,9,"GtkScale","value-pos","bottom",None,None,None,None,None,None,None,None,None), (7,9,"GtkScale","value-pos","bottom",None,None,None,None,None,None,None,None,None),
(7,9,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), (7,9,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(7,9,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), (7,9,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(7,10,"GtkAdjustment","page-increment","5.0",None,None,None,None,None,None,None,None,None), (7,10,"GtkAdjustment","page-increment","655.36",None,None,None,None,None,None,None,None,None),
(7,10,"GtkAdjustment","upper","100.0",None,None,None,None,None,None,None,None,None), (7,10,"GtkAdjustment","step-increment","65536.0",None,None,None,None,None,None,None,None,None),
(7,10,"GtkAdjustment","upper","65536.0",None,None,None,None,None,None,None,None,None),
(7,11,"GtkButton","icon-name","audio-volume-high-symbolic",None,None,None,None,None,None,None,None,None), (7,11,"GtkButton","icon-name","audio-volume-high-symbolic",None,None,None,None,None,None,None,None,None),
(7,11,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None), (7,11,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(7,11,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), (7,11,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
@ -714,7 +733,61 @@
(17,3,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None), (17,3,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(17,3,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), (17,3,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(17,4,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None), (17,4,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(17,4,"GtkButton","icon-name","user-trash-symbolic",None,None,None,None,None,None,None,None,None) (17,4,"GtkButton","icon-name","user-trash-symbolic",None,None,None,None,None,None,None,None,None),
(18,1,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(18,1,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(18,1,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(18,1,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(18,1,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(18,2,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(18,3,"GtkLabel","label","text",None,None,None,None,None,None,None,None,None),
(18,3,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(18,5,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(18,5,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(18,6,"GtkButton","icon-name","audio-volume-high-symbolic",None,None,None,None,None,None,None,None,None),
(18,6,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(18,6,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(18,7,"GtkRange","adjustment",None,None,None,None,None,8,None,None,None,None),
(18,7,"GtkScale","value-pos","bottom",None,None,None,None,None,None,None,None,None),
(18,7,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(18,7,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(18,8,"GtkAdjustment","page-increment","655.36",None,None,None,None,None,None,None,None,None),
(18,8,"GtkAdjustment","step-increment","65536.0",None,None,None,None,None,None,None,None,None),
(18,8,"GtkAdjustment","upper","65536.0",None,None,None,None,None,None,None,None,None),
(18,9,"GtkLabel","label","100%",None,None,None,None,None,None,None,None,None),
(18,9,"GtkLabel","lines","1",None,None,None,None,None,None,None,None,None),
(18,9,"GtkWidget","width-request","40",None,None,None,None,None,None,None,None,None),
(18,10,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(18,11,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(18,11,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(18,11,"GtkWidget","hexpand-set","True",None,None,None,None,None,None,None,None,None),
(19,1,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(19,1,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(19,1,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(19,1,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(19,1,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(19,2,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(19,3,"GtkLabel","label","text",None,None,None,None,None,None,None,None,None),
(19,3,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(19,4,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(19,4,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(19,4,"GtkWidget","hexpand-set","True",None,None,None,None,None,None,None,None,None),
(19,5,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(19,5,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(19,6,"GtkButton","icon-name","microphone-sensitivity-high-symbolic",None,None,None,None,None,None,None,None,None),
(19,6,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(19,6,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(19,7,"GtkRange","adjustment",None,None,None,None,None,8,None,None,None,None),
(19,7,"GtkScale","value-pos","bottom",None,None,None,None,None,None,None,None,None),
(19,7,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(19,7,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(19,8,"GtkAdjustment","page-increment","655.36",None,None,None,None,None,None,None,None,None),
(19,8,"GtkAdjustment","step-increment","65536.0",None,None,None,None,None,None,None,None,None),
(19,8,"GtkAdjustment","upper","65536.0",None,None,None,None,None,None,None,None,None),
(19,9,"GtkLabel","label","100%",None,None,None,None,None,None,None,None,None),
(19,9,"GtkLabel","lines","1",None,None,None,None,None,None,None,None,None),
(19,9,"GtkWidget","width-request","40",None,None,None,None,None,None,None,None,None),
(19,10,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None)
</object_property> </object_property>
<object_data> <object_data>
(3,42,"GtkWidget",1,1,None,None,None,None,None,None), (3,42,"GtkWidget",1,1,None,None,None,None,None,None),

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.6"/> <requires lib="gtk" version="4.6"/>
<requires lib="libadwaita" version="1.4"/> <requires lib="libadwaita" version="1.4"/>

View file

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.16.0 -->
<interface> <interface>
<requires lib="gtk" version="4.12"/> <requires lib="gtk" version="4.12"/>
<template class="resetWifiEntry" parent="GtkBox"> <template class="resetWifiEntry" parent="GtkBox">

View file

@ -10,10 +10,11 @@
<file compressed="true" preprocess="xml-stripblanks">resetSavedWifiEntry.ui</file> <file compressed="true" preprocess="xml-stripblanks">resetSavedWifiEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetBluetooth.ui</file> <file compressed="true" preprocess="xml-stripblanks">resetBluetooth.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetBluetoothEntry.ui</file> <file compressed="true" preprocess="xml-stripblanks">resetBluetoothEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetAudio.ui</file> <file compressed="true" preprocess="xml-stripblanks">resetAudioOutput.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetOutputStreamEntry.ui</file> <file compressed="true" preprocess="xml-stripblanks">resetOutputStreamEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetMicrophone.ui</file> <file compressed="true" preprocess="xml-stripblanks">resetAudioInput.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetInputStreamEntry.ui</file> <file compressed="true" preprocess="xml-stripblanks">resetInputStreamEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetSinkEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetPopup.ui</file> <file compressed="true" preprocess="xml-stripblanks">resetPopup.ui</file>
</gresource> </gresource>
</gresources> </gresources>