Add audio box

Set size for flowbox children
Rework AudioEntry
Cleanup
This commit is contained in:
takotori 2023-10-28 13:37:04 +02:00
parent 9a6ef65e58
commit 01835f0018
12 changed files with 176 additions and 28 deletions

40
src/audio/audioBox.rs Normal file
View file

@ -0,0 +1,40 @@
use gtk::{Button, CompositeTemplate, DropDown, TemplateChild, glib};
use gtk::subclass::prelude::*;
#[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/xetibo/reset/resetAudio.ui")]
pub struct AudioBox {
#[template_child]
pub resetOutputDevice: TemplateChild<DropDown>,
#[template_child]
pub resetAllOutputDevices: TemplateChild<Button>,
}
#[glib::object_subclass]
impl ObjectSubclass for AudioBox {
const NAME: &'static str = "resetAudio";
type Type = super::AudioBox;
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 AudioBox {}
impl ObjectImpl for AudioBox {}
impl ListBoxRowImpl for AudioBox {}
impl WidgetImpl for AudioBox {}
impl WindowImpl for AudioBox {}
impl ApplicationWindowImpl for AudioBox {}

View file

@ -1,8 +1,6 @@
use gtk::{Button, CompositeTemplate, glib, Image, Label, ProgressBar, Scale};
use gtk::prelude::*;
use gtk::subclass::prelude::*;
#[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/xetibo/reset/resetAudioSourceEntry.ui")]
@ -21,19 +19,21 @@ pub struct AudioSourceEntry {
#[glib::object_subclass]
impl ObjectSubclass for AudioSourceEntry {
const NAME: &'static str = "resetWifiEntry";
const NAME: &'static str = "resetAudioSourceEntry";
type Type = super::AudioSourceEntry;
// type ParentType = gtk::Box;
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 AudioSourceEntry {}
impl ObjectImpl for AudioSourceEntry {}
impl ListBoxRowImpl for AudioSourceEntry {}

View file

@ -1,16 +1,28 @@
#![allow(non_snake_case)]
mod audioSource;
mod audioBox;
use adw::glib::Object;
use gtk::{glib};
glib::wrapper! {
pub struct AudioBox(ObjectSubclass<audioBox::AudioBox>)
@extends gtk::Box, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}
glib::wrapper! {
pub struct AudioSourceEntry(ObjectSubclass<audioSource::AudioSourceEntry>)
@extends gtk::Box, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}
impl AudioBox {
pub fn new() -> Self {
Object::builder().build()
}
}
impl AudioSourceEntry {
pub fn new() -> Self {

View file

@ -1,5 +1,4 @@
mod window;
mod audio;
mod wifi;

View file

@ -0,0 +1,42 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 -->
<interface>
<requires lib="gtk" version="4.12"/>
<template class="resetAudio" parent="GtkBox">
<property name="halign">start</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="orientation">vertical</property>
<property name="valign">start</property>
<property name="width-request">300</property>
<child>
<object class="GtkBox">
<property name="margin-bottom">10</property>
<child>
<object class="GtkLabel">
<property name="label">Output Device</property>
</object>
</child>
<child>
<object class="GtkDropDown" id="resetOutputDevice">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="valign">end</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSeparator"/>
</child>
<child>
<object class="GtkButton" id="resetAllOutputDevices">
<property name="halign">start</property>
<property name="label">All Output Devices</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="valign">start</property>
</object>
</child>
</template>
</interface>

View file

@ -2,17 +2,23 @@
<!-- Created with Cambalache 0.17.0 -->
<interface>
<requires lib="gtk" version="4.12"/>
<template class="resetAudioSource" parent="GtkBox">
<template class="resetAudioSourceEntry" parent="GtkBox">
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="margin-bottom">5</property>
<child>
<object class="GtkImage" id="resetSourceIcon"/>
<object class="GtkImage" id="resetSourceIcon">
<property name="icon-name">audio-volume-high-symbolic</property>
<property name="margin-end">5</property>
</object>
</child>
<child>
<object class="GtkLabel" id="resetSourceName"/>
<object class="GtkLabel" id="resetSourceName">
<property name="label">System Volume</property>
</object>
</child>
</object>
</child>
@ -23,23 +29,34 @@
<child>
<object class="GtkButton" id="resetSourceMute">
<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">0.2</property>
<property name="upper">10.0</property>
<property name="page-increment">5.0</property>
<property name="upper">100.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="resetLevel"/>
<object class="GtkProgressBar" id="resetVolumeMeter"/>
</child>
</template>
</interface>

View file

@ -6,7 +6,8 @@
(4,7,None,"resetWiFi",None,None,None,None,None,None,None),
(5,1,None,"resetWifiEntry",None,None,None,None,None,None,None),
(6,1,None,"resetSidebarEntry",None,None,None,None,None,None,None),
(7,1,None,"resetAudioSourceEntry",None,None,None,None,None,None,None)
(7,1,None,"resetAudioSourceEntry",None,None,None,None,None,None,None),
(8,1,None,"resetAudio",None,None,None,None,None,None,None)
</ui>
<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;"),
@ -48,17 +49,24 @@
(5,5,"GtkButton","resetWifiButton",2,None,None,None,2,None),
(6,1,"GtkListBoxRow","resetSidebarEntry",None,None,None,None,None,None),
(6,2,"GtkBox",None,1,None,None,None,-1,None),
(6,6,"GtkImage","resetSidebarImage",2,None,None,None,1,None),
(6,7,"GtkLabel","resetSidebarLabel",2,None,None,None,2,None),
(6,6,"GtkImage","resetSidebarImage",2,None,None,None,None,None),
(6,7,"GtkLabel","resetSidebarLabel",2,None,None,None,1,None),
(7,1,"GtkBox","resetAudioSourceEntry",None,None,None,None,-1,None),
(7,4,"GtkProgressBar","resetLevel",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,6,"GtkLabel","resetSourceName",5,None,None,None,1,None),
(7,7,"GtkImage","resetSourceIcon",5,None,None,None,None,None),
(7,8,"GtkBox",None,1,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,11,"GtkButton","resetSourceMute",8,None,None,None,None,None)
(7,11,"GtkButton","resetSourceMute",8,None,None,None,None,None),
(7,12,"GtkLabel","resetVolumePercentage",8,None,None,None,2,None),
(8,1,"GtkBox","resetAudio",None,None,None,None,None,None),
(8,13,"GtkButton","resetAllOutputDevices",1,None,None,None,2,None),
(8,14,"GtkBox",None,1,None,None,None,None,None),
(8,15,"GtkLabel",None,14,None,None,None,None,None),
(8,16,"GtkDropDown","resetOutputDevice",14,None,None,None,1,None),
(8,18,"GtkSeparator",None,1,None,None,None,1,None)
</object>
<object_property>
(3,1,"GtkWindow","default-height","500",None,None,None,None,None,None,None,None,None),
@ -133,19 +141,47 @@
(7,1,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(7,1,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(7,1,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(7,5,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(7,6,"GtkLabel","label","System Volume",None,None,None,None,None,None,None,None,None),
(7,7,"GtkImage","icon-name","audio-volume-high-symbolic",None,None,None,None,None,None,None,None,None),
(7,7,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(7,8,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(7,8,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(7,9,"GtkRange","adjustment",None,None,None,None,None,10,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,10,"GtkAdjustment","page-increment","0.2",None,None,None,None,None,None,None,None,None),
(7,10,"GtkAdjustment","upper","10.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,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","upper","100.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,"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,12,"GtkLabel","label","100%",None,None,None,None,None,None,None,None,None),
(7,12,"GtkLabel","lines","1",None,None,None,None,None,None,None,None,None),
(7,12,"GtkWidget","width-request","40",None,None,None,None,None,None,None,None,None),
(8,1,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(8,1,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(8,1,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(8,1,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(8,1,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(8,1,"GtkWidget","width-request","300",None,None,None,None,None,None,None,None,None),
(8,13,"GtkButton","label","All Output Devices",None,None,None,None,None,None,None,None,None),
(8,13,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(8,13,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(8,13,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(8,13,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(8,14,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(8,15,"GtkLabel","label","Output Device",None,None,None,None,None,None,None,None,None),
(8,16,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(8,16,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(8,16,"GtkWidget","valign","end",None,None,None,None,None,None,None,None,None)
</object_property>
<object_data>
(3,23,"GtkWidget",1,1,None,None,None,None,None,None),
(3,23,"GtkWidget",2,2,None,1,None,None,None,None)
</object_data>
<object_data_arg>
(3,23,"GtkWidget",2,2,"name","b")
(3,23,"GtkWidget",2,2,"name","b"),
(7,9,"GtkScale",2,2,"value","50.0")
</object_data_arg>
</cambalache-project>

View file

@ -7,6 +7,7 @@
<property name="halign">start</property>
<property name="orientation">vertical</property>
<property name="valign">start</property>
<property name="width-request">300</property>
<child>
<object class="AdwClampScrollable">
<property name="maximum-size">0</property>

View file

@ -5,6 +5,7 @@
<file compressed="true" preprocess="xml-stripblanks">resetSidebarEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetWiFi.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetWifiEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetAudio.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetAudioSourceEntry.ui</file>
</gresource>
</gresources>

View file

@ -1,7 +1,7 @@
use gtk::FlowBox;
use crate::audio::AudioBox;
use crate::wifi::WifiBox;
pub const HANDLE_CONNECTIVITY_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
let wifibox = WifiBox::new();
resetMain.remove_all();
@ -27,9 +27,9 @@ pub const HANDLE_VPN_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
};
pub const HANDLE_AUDIO_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
let wifibox = WifiBox::new();
let audioBox = AudioBox::new();
resetMain.remove_all();
resetMain.insert(&wifibox, -1);
resetMain.insert(&audioBox, -1);
};
pub const HANDLE_VOLUME_CLICK: fn(FlowBox) = |resetMain: FlowBox| {

View file

@ -45,7 +45,7 @@ impl Window {
}));
selfImp.resetSidebarList.connect_row_activated(clone!(@ weak selfImp as flowbox => move |x, y| {
let mut result = y.downcast_ref::<SidebarEntry>().unwrap();
let result = y.downcast_ref::<SidebarEntry>().unwrap();
let clickEvent = result.imp().onClickEvent.borrow().onClickEvent;
(clickEvent)(flowbox.resetMain.get());
}));
@ -100,7 +100,7 @@ impl Window {
let selfImp = self.imp();
let mut sidebarEntries = selfImp.sidebarEntries.borrow_mut();
let mut connectivityList = vec![SidebarEntry::new("WiFi",
let connectivityList = vec![SidebarEntry::new("WiFi",
"network-wireless-symbolic",
Categories::Connectivity,
true,
@ -122,7 +122,7 @@ impl Window {
false,
HANDLE_CONNECTIVITY_CLICK), connectivityList));
let mut audioList = vec![SidebarEntry::new("Volume",
let audioList = vec![SidebarEntry::new("Volume",
"audio-volume-high-symbolic",
Categories::Audio,
true,

View file

@ -1,4 +1,4 @@
use std::cell::{Cell, RefCell};
use std::cell::RefCell;
use adw::{Breakpoint, OverlaySplitView};
use adw::glib::StaticTypeExt;
use adw::subclass::prelude::AdwApplicationWindowImpl;