Merge pull request #25 from Xetibo/ina

Add UI and more
This commit is contained in:
Dashie 2023-10-28 15:30:42 +02:00 committed by GitHub
commit 1cb778d97e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 926 additions and 179 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 {}

45
src/audio/audioSource.rs Normal file
View file

@ -0,0 +1,45 @@
use gtk::{Button, CompositeTemplate, glib, Image, Label, ProgressBar, Scale};
use gtk::subclass::prelude::*;
#[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/xetibo/reset/resetAudioSourceEntry.ui")]
pub struct AudioSourceEntry {
#[template_child]
pub resetSourceIcon: TemplateChild<Image>,
#[template_child]
pub resetSourceName: TemplateChild<Label>,
#[template_child]
pub resetSourceMute: TemplateChild<Button>,
#[template_child]
pub resetVolumeSlider: TemplateChild<Scale>,
#[template_child]
pub resetVolumeMeter: TemplateChild<ProgressBar>,
}
#[glib::object_subclass]
impl ObjectSubclass for AudioSourceEntry {
const NAME: &'static str = "resetAudioSourceEntry";
type Type = super::AudioSourceEntry;
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 {}
impl WidgetImpl for AudioSourceEntry {}
impl WindowImpl for AudioSourceEntry {}
impl ApplicationWindowImpl for AudioSourceEntry {}

31
src/audio/mod.rs Normal file
View file

@ -0,0 +1,31 @@
#![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 {
Object::builder().build()
}
}

View file

@ -0,0 +1,46 @@
use gtk::{CompositeTemplate, glib, ListBox, Switch};
use gtk::prelude::*;
use gtk::subclass::prelude::*;
use crate::bluetooth::BluetoothEntry;
#[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/xetibo/reset/resetBluetooth.ui")]
pub struct BluetoothBox {
#[template_child]
pub resetBluetoothSwitch: TemplateChild<Switch>,
#[template_child]
pub resetBluetoothAvailableDevices: TemplateChild<ListBox>,
#[template_child]
pub resetBluetoothConnectedDevices: TemplateChild<ListBox>,
}
#[glib::object_subclass]
impl ObjectSubclass for BluetoothBox {
const NAME: &'static str = "resetBluetooth";
type Type = super::BluetoothBox;
type ParentType = gtk::Box;
fn class_init(klass: &mut Self::Class) {
BluetoothEntry::ensure_type();
klass.bind_template();
}
fn instance_init(obj: &glib::subclass::InitializingObject<Self>) {
obj.init_template();
}
}
impl ObjectImpl for BluetoothBox {
fn constructed(&self) {
self.parent_constructed();
}
}
impl BoxImpl for BluetoothBox {}
impl WidgetImpl for BluetoothBox {}
impl WindowImpl for BluetoothBox {}
impl ApplicationWindowImpl for BluetoothBox {}

View file

@ -0,0 +1,43 @@
use gtk::{Button, CompositeTemplate, glib, Image, Label};
use gtk::subclass::prelude::*;
#[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/xetibo/reset/resetBluetoothEntry.ui")]
pub struct BluetoothEntry {
#[template_child]
pub resetBluetoothDeviceType: TemplateChild<Image>,
#[template_child]
pub resetBluetoothLabel: TemplateChild<Label>,
#[template_child]
pub resetBluetoothButton: TemplateChild<Button>,
}
#[glib::object_subclass]
impl ObjectSubclass for BluetoothEntry {
const NAME: &'static str = "resetBluetoothEntry";
type Type = super::BluetoothEntry;
type ParentType = gtk::ListBoxRow;
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
}
fn instance_init(obj: &glib::subclass::InitializingObject<Self>) {
obj.init_template();
}
}
impl ObjectImpl for BluetoothEntry {
fn constructed(&self) {
self.parent_constructed();
}
}
impl ListBoxRowImpl for BluetoothEntry {}
impl WidgetImpl for BluetoothEntry {}
impl WindowImpl for BluetoothEntry {}
impl ApplicationWindowImpl for BluetoothEntry {}

30
src/bluetooth/mod.rs Normal file
View file

@ -0,0 +1,30 @@
#![allow(non_snake_case)]
mod bluetoothBox;
mod bluetoothEntry;
use adw::glib::Object;
use gtk::{glib};
glib::wrapper! {
pub struct BluetoothBox(ObjectSubclass<bluetoothBox::BluetoothBox>)
@extends gtk::Box, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}
glib::wrapper! {
pub struct BluetoothEntry(ObjectSubclass<bluetoothEntry::BluetoothEntry>)
@extends gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::Actionable, gtk::ConstraintTarget;
}
impl BluetoothBox {
pub fn new() -> Self {
Object::builder().build()
}
}
impl BluetoothEntry {
pub fn new() -> Self {
Object::builder().build()
}
}

View file

@ -1,8 +1,10 @@
mod window;
mod audio;
mod bluetooth;
mod wifi;
mod window;
use gtk::prelude::*;
use gtk::{Application, gio};
use gtk::{gio, Application};
use window::Window;
const APP_ID: &str = "org.Xetibo.ReSet";
@ -11,9 +13,11 @@ fn main() {
gio::resources_register_include!("src.templates.gresource")
.expect("Failed to register resources.");
let app = Application::builder()
.application_id(APP_ID)
.build();
let app = Application::builder().application_id(APP_ID).build();
app.connect_startup(move |_| {
adw::init().unwrap();
});
app.connect_activate(buildUI);
app.run();
@ -23,4 +27,5 @@ fn main() {
fn buildUI(app: &Application) {
let window = Window::new(app);
window.present();
}
}

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

@ -0,0 +1,62 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 -->
<interface>
<requires lib="gtk" version="4.12"/>
<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">
<property name="icon-name">audio-volume-high-symbolic</property>
<property name="margin-end">5</property>
</object>
</child>
<child>
<object class="GtkLabel" id="resetSourceName">
<property name="label">System Volume</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">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">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="resetVolumeMeter"/>
</child>
</template>
</interface>

View file

@ -0,0 +1,109 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 -->
<interface>
<requires lib="gtk" version="4.12"/>
<requires lib="libadwaita" version="1.4"/>
<template class="resetBluetooth" parent="GtkBox">
<property name="halign">start</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">5</property>
<child>
<object class="GtkLabel">
<property name="label">Bluetooth</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="resetBluetoothSwitch">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="valign">end</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwClampScrollable">
<property name="maximum-size">0</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="valign">start</property>
<child>
<object class="GtkLabel">
<property name="halign">start</property>
<property name="justify">right</property>
<property name="label">Available device</property>
</object>
</child>
<child>
<object class="GtkListBox" id="resetBluetoothAvailableDevices">
<property name="valign">start</property>
<child>
<object class="resetBluetoothEntry"/>
</child>
<child>
<object class="resetBluetoothEntry"/>
</child>
<child>
<object class="resetBluetoothEntry"/>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSeparator">
<property name="margin-bottom">5</property>
<property name="margin-top">5</property>
</object>
</child>
<child>
<object class="AdwClampScrollable">
<property name="maximum-size">0</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="valign">start</property>
<child>
<object class="GtkLabel">
<property name="halign">start</property>
<property name="justify">right</property>
<property name="label">Connected devices</property>
</object>
</child>
<child>
<object class="GtkListBox" id="resetBluetoothConnectedDevices">
<property name="valign">start</property>
<child>
<object class="resetBluetoothEntry"/>
</child>
<child>
<object class="resetBluetoothEntry"/>
</child>
<child>
<object class="resetBluetoothEntry"/>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton">
<property name="halign">start</property>
<property name="label">Advanced</property>
<property name="valign">start</property>
</object>
</child>
</template>
</interface>

View file

@ -0,0 +1,33 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 -->
<interface>
<requires lib="gtk" version="4.12"/>
<template class="resetBluetoothEntry" parent="GtkListBoxRow">
<child>
<object class="GtkBox">
<child>
<object class="GtkImage" id="resetBluetoothDeviceType">
<property name="icon-name">input-mouse-symbolic</property>
<property name="margin-end">15</property>
</object>
</child>
<child>
<object class="GtkLabel" id="resetBluetoothLabel">
<property name="ellipsize">end</property>
<property name="hexpand">True</property>
<property name="label">LoremIpsum Wireless Mouse</property>
<property name="margin-end">10</property>
<property name="single-line-mode">True</property>
<property name="width-request">200</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetBluetoothButton">
<property name="icon-name">emblem-system-symbolic</property>
</object>
</child>
</object>
</child>
</template>
</interface>

View file

@ -4,6 +4,11 @@
<requires lib="gtk" version="4.12"/>
<requires lib="libadwaita" version="1.4"/>
<template class="resetUI" parent="AdwApplicationWindow">
<property name="default-height">500</property>
<property name="default-width">800</property>
<child>
<object class="GtkWindowHandle"/>
</child>
<child>
<object class="AdwOverlaySplitView" id="resetOverlaySplitView">
<property name="content">
@ -11,37 +16,47 @@
<property name="margin-start">5</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<object class="GtkWindowHandle">
<child>
<object class="GtkButton" id="resetSideBarToggle">
<property name="icon-name">sidebar-show-symbolic</property>
<property name="visible">False</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetBack">
<property name="icon-name">go-previous-symbolic</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetForward">
<property name="icon-name">go-previous-symbolic-rtl</property>
</object>
</child>
<child>
<object class="GtkBox" id="resetPath"/>
</child>
<child>
<object class="GtkButton" id="resetMenu">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="icon-name">open-menu-symbolic</property>
<property name="valign">center</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetClose">
<property name="icon-name">window-close-symbolic</property>
<object class="GtkBox">
<property name="valign">start</property>
<child>
<object class="GtkButton" id="resetSideBarToggle">
<property name="icon-name">sidebar-show-symbolic</property>
<property name="visible">False</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetBack">
<property name="icon-name">go-previous-symbolic</property>
<property name="valign">start</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetForward">
<property name="icon-name">go-previous-symbolic-rtl</property>
<property name="valign">start</property>
</object>
</child>
<child>
<object class="GtkBox" id="resetPath">
<property name="valign">start</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetMenu">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="icon-name">open-menu-symbolic</property>
<property name="valign">start</property>
</object>
</child>
<child>
<object class="GtkButton" id="resetClose">
<property name="icon-name">window-close-symbolic</property>
<property name="valign">start</property>
</object>
</child>
</object>
</child>
</object>
@ -62,24 +77,35 @@
<property name="margin-top">5</property>
<property name="max-sidebar-width">180.0</property>
<property name="sidebar">
<object class="GtkViewport">
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="width-request">150</property>
<object class="GtkWindowHandle">
<property name="valign">start</property>
<child>
<object class="GtkSearchEntry" id="resetSearchEntry">
<property name="margin-end">5</property>
<property name="placeholder-text">Search</property>
<property name="valign">start</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkViewport">
<child>
<object class="GtkListBox" id="resetSidebarList">
<property name="css-name">resetList</property>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="width-request">150</property>
<style>
<class name="b"/>
</style>
<child>
<object class="GtkListBox" id="resetSidebarList">
<property name="css-name">resetList</property>
<property name="width-request">150</property>
<style>
<class name="b"/>
</style>
</object>
</child>
</object>
</child>
</object>

View file

@ -5,37 +5,48 @@
(3,1,None,"resetMainWindow",None,None,None,None,None,None,None),
(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)
(6,1,None,"resetSidebarEntry",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),
(10,1,None,"resetBluetooth",None,None,None,None,None,None,None),
(11,1,None,"resetBluetoothEntry",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;"),
(3,2,"AdwOverlaySplitView","resetOverlaySplitView",1,None,None,None,None,""),
(3,2,"AdwOverlaySplitView","resetOverlaySplitView",1,None,None,None,2,""),
(3,3,"GtkBox",None,2,None,None,None,None,None),
(3,4,"GtkBox",None,3,None,None,None,None,None),
(3,5,"GtkButton","resetSideBarToggle",4,None,None,None,None,None),
(3,6,"GtkButton",None,4,None,None,None,1,None),
(3,7,"GtkButton",None,4,None,None,None,2,None),
(3,8,"GtkLabel",None,4,None,None,None,3,None),
(3,9,"GtkButton",None,4,None,None,None,4,None),
(3,10,"GtkButton",None,4,None,None,None,5,None),
(3,11,"GtkFlowBox","resetMain",3,None,None,None,1,None),
(3,12,"GtkViewport",None,2,None,None,None,None,None),
(3,13,"GtkBox",None,12,None,None,None,None,None),
(3,14,"GtkSearchEntry","resetSearchEntry",13,None,None,None,None,None),
(3,15,"GtkListBox","resetSidebarList",13,None,None,None,1,None),
(3,17,"GtkWindowHandle",None,1,None,None,None,1,None),
(3,18,"GtkBox",None,2,None,None,None,-1,None),
(3,19,"GtkWindowHandle",None,18,None,None,None,None,None),
(3,20,"GtkSearchEntry","resetSearchEntry",19,None,None,None,None,None),
(3,21,"GtkViewport",None,18,None,None,None,1,None),
(3,22,"GtkBox",None,21,None,None,None,None,None),
(3,23,"GtkListBox","resetSidebarList",22,None,None,None,None,None),
(3,24,"GtkWindowHandle",None,3,None,None,None,None,None),
(3,25,"GtkBox",None,24,None,None,None,None,None),
(3,26,"GtkButton","resetSideBarToggle",25,None,None,None,None,None),
(3,27,"GtkButton","resetBack",25,None,None,None,1,None),
(3,28,"GtkButton","resetForward",25,None,None,None,2,None),
(3,29,"GtkBox","resetPath",25,None,None,None,3,None),
(3,30,"GtkButton","resetMenu",25,None,None,None,4,None),
(3,31,"GtkButton","resetClose",25,None,None,None,5,None),
(3,32,"GtkFlowBox","resetMain",3,None,None,None,1,None),
(4,7,"GtkBox","resetWifi",None,None,None,None,None,None),
(4,8,"AdwClampScrollable",None,7,None,None,None,None,None),
(4,8,"AdwClampScrollable",None,7,None,None,None,1,None),
(4,9,"GtkBox",None,8,None,None,None,None,None),
(4,10,"GtkLabel",None,9,None,None,None,None,None),
(4,11,"GtkListBox","resetWifiList",9,None,None,None,1,None),
(4,42,"GtkButton",None,7,None,None,None,1,None),
(4,42,"GtkButton",None,7,None,None,None,2,None),
(4,44,"resetWifiEntry",None,11,None,None,None,1,None),
(4,45,"resetWifiEntry",None,11,None,None,None,1,None),
(4,45,"resetWifiEntry",None,11,None,None,None,None,None),
(4,46,"resetWifiEntry",None,11,None,None,None,2,None),
(4,47,"resetWifiEntry",None,11,None,None,None,3,None),
(4,48,"resetWifiEntry",None,11,None,None,None,4,None),
(4,49,"resetWifiEntry",None,11,None,None,None,5,None),
(4,50,"resetWifiEntry",None,11,None,None,None,6,None),
(4,51,"GtkBox",None,7,None,None,None,None,None),
(4,52,"GtkLabel",None,51,None,None,None,None,None),
(4,53,"GtkSwitch","resetWiFiSwitch",51,None,None,None,1,None),
(5,1,"GtkListBoxRow","resetWifiEntry",None,None,None,None,None,None),
(5,2,"GtkBox",None,1,None,None,None,None,None),
(5,3,"GtkImage","resetWifiStrength",2,None,None,None,None,None),
@ -43,42 +54,94 @@
(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","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,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),
(10,1,"GtkBox","resetBluetooth",None,None,None,None,None,None),
(10,2,"AdwClampScrollable",None,1,None,None,None,1,None),
(10,3,"GtkBox",None,2,None,None,None,None,None),
(10,4,"GtkLabel",None,3,None,None,None,None,None),
(10,5,"GtkListBox","resetBluetoothAvailableDevices",3,None,None,None,1,None),
(10,14,"AdwClampScrollable",None,1,None,None,None,3,None),
(10,15,"GtkBox",None,14,None,None,None,None,None),
(10,16,"GtkLabel",None,15,None,None,None,None,None),
(10,17,"GtkListBox","resetBluetoothConnectedDevices",15,None,None,None,1,None),
(10,18,"GtkButton",None,1,None,None,None,4,None),
(10,19,"GtkBox",None,1,None,None,None,None,None),
(10,20,"GtkLabel",None,19,None,None,None,None,None),
(10,21,"GtkSwitch","resetBluetoothSwitch",19,None,None,None,1,None),
(10,22,"resetBluetoothEntry",None,5,None,None,None,-1,None),
(10,23,"resetBluetoothEntry",None,5,None,None,None,1,None),
(10,24,"resetBluetoothEntry",None,5,None,None,None,2,None),
(10,25,"resetBluetoothEntry",None,17,None,None,None,None,None),
(10,26,"resetBluetoothEntry",None,17,None,None,None,1,None),
(10,27,"resetBluetoothEntry",None,17,None,None,None,2,None),
(10,28,"GtkSeparator",None,1,None,None,None,2,None),
(11,1,"GtkListBoxRow","resetBluetoothEntry",None,None,None,None,None,None),
(11,2,"GtkBox",None,1,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,5,"GtkButton","resetBluetoothButton",2,None,None,None,2,None)
</object>
<object_property>
(3,1,"GtkWindow","default-height","500",None,None,None,None,None,None,None,None,None),
(3,1,"GtkWindow","default-width","800",None,None,None,None,None,None,None,None,None),
(3,2,"AdwOverlaySplitView","content",None,None,None,None,None,3,None,None,None,None),
(3,2,"AdwOverlaySplitView","max-sidebar-width","180.0",None,None,None,None,None,None,None,None,None),
(3,2,"AdwOverlaySplitView","sidebar",None,None,None,None,None,12,None,None,None,None),
(3,2,"AdwOverlaySplitView","sidebar",None,None,None,None,None,18,None,None,None,None),
(3,2,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(3,2,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(3,2,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(3,3,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(3,3,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(3,5,"GtkButton","icon-name","sidebar-show-symbolic",None,None,None,None,None,None,None,None,None),
(3,5,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None),
(3,6,"GtkButton","icon-name","go-previous-symbolic",None,None,None,None,None,None,None,None,None),
(3,7,"GtkButton","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(3,8,"GtkLabel","label","breadcrum path",None,None,None,None,None,None,None,None,None),
(3,9,"GtkButton","icon-name","open-menu-symbolic",None,None,None,None,None,None,None,None,None),
(3,9,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(3,9,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(3,9,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(3,10,"GtkButton","icon-name","window-close-symbolic",None,None,None,None,None,None,None,None,None),
(3,11,"GtkFlowBox","column-spacing","25",None,None,None,None,None,None,None,None,None),
(3,11,"GtkFlowBox","homogeneous","True",None,None,None,None,None,None,None,None,None),
(3,11,"GtkFlowBox","row-spacing","25",None,None,None,None,None,None,None,None,None),
(3,11,"GtkFlowBox","selection-mode","none",None,None,None,None,None,None,None,None,None),
(3,11,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,13,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(3,13,"GtkWidget","width-request","150",None,None,None,None,None,None,None,None,None),
(3,14,"GtkSearchEntry","placeholder-text","Search",None,None,None,None,None,None,None,None,None),
(3,14,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(3,15,"GtkWidget","css-name","resetList",None,None,None,None,None,None,None,None,None),
(3,15,"GtkWidget","width-request","150",None,None,None,None,None,None,None,None,None),
(3,18,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(3,19,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,20,"GtkSearchEntry","placeholder-text","Search",None,None,None,None,None,None,None,None,None),
(3,20,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(3,20,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,22,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(3,22,"GtkWidget","width-request","150",None,None,None,None,None,None,None,None,None),
(3,23,"GtkWidget","css-name","resetList",None,None,None,None,None,None,None,None,None),
(3,23,"GtkWidget","width-request","150",None,None,None,None,None,None,None,None,None),
(3,25,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,26,"GtkButton","icon-name","sidebar-show-symbolic",None,None,None,None,None,None,None,None,None),
(3,26,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None),
(3,27,"GtkButton","icon-name","go-previous-symbolic",None,None,None,None,None,None,None,None,None),
(3,27,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,28,"GtkButton","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(3,28,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,29,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,30,"GtkButton","icon-name","open-menu-symbolic",None,None,None,None,None,None,None,None,None),
(3,30,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(3,30,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(3,30,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,31,"GtkButton","icon-name","window-close-symbolic",None,None,None,None,None,None,None,None,None),
(3,31,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,32,"GtkFlowBox","column-spacing","25",None,None,None,None,None,None,None,None,None),
(3,32,"GtkFlowBox","homogeneous","True",None,None,None,None,None,None,None,None,None),
(3,32,"GtkFlowBox","row-spacing","25",None,None,None,None,None,None,None,None,None),
(3,32,"GtkFlowBox","selection-mode","none",None,None,None,None,None,None,None,None,None),
(3,32,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(4,7,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(4,7,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(4,7,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(4,7,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(4,7,"GtkWidget","width-request","300",None,None,None,None,None,None,None,None,None),
(4,8,"AdwClampScrollable","maximum-size","0",None,None,None,None,None,None,None,None,None),
(4,8,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(4,9,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
@ -90,6 +153,11 @@
(4,42,"GtkButton","label","Advanced",None,None,None,None,None,None,None,None,None),
(4,42,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(4,42,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(4,51,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(4,52,"GtkLabel","label","WiFi",None,None,None,None,None,None,None,None,None),
(4,53,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(4,53,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(4,53,"GtkWidget","valign","end",None,None,None,None,None,None,None,None,None),
(5,3,"GtkImage","icon-name","network-wireless-symbolic",None,None,None,None,None,None,None,None,None),
(5,3,"GtkWidget","margin-end","15",None,None,None,None,None,None,None,None,None),
(5,4,"GtkLabel","ellipsize","end",None,None,None,None,None,None,None,None,None),
@ -106,13 +174,91 @@
(6,2,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(6,2,"GtkWidget","margin-start","10",None,None,None,None,None,None,None,None,None),
(6,2,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(6,6,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None)
(6,6,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
(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,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-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),
(10,1,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(10,1,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(10,1,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(10,1,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(10,1,"GtkWidget","width-request","300",None,None,None,None,None,None,None,None,None),
(10,2,"AdwClampScrollable","maximum-size","0",None,None,None,None,None,None,None,None,None),
(10,2,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(10,3,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(10,3,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(10,4,"GtkLabel","justify","right",None,None,None,None,None,None,None,None,None),
(10,4,"GtkLabel","label","Available device",None,None,None,None,None,None,None,None,None),
(10,4,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(10,5,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(10,14,"AdwClampScrollable","maximum-size","0",None,None,None,None,None,None,None,None,None),
(10,14,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(10,15,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(10,15,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(10,16,"GtkLabel","justify","right",None,None,None,None,None,None,None,None,None),
(10,16,"GtkLabel","label","Connected devices",None,None,None,None,None,None,None,None,None),
(10,16,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(10,17,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(10,18,"GtkButton","label","Advanced",None,None,None,None,None,None,None,None,None),
(10,18,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(10,18,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(10,19,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(10,20,"GtkLabel","label","Bluetooth",None,None,None,None,None,None,None,None,None),
(10,21,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(10,21,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(10,21,"GtkWidget","valign","end",None,None,None,None,None,None,None,None,None),
(10,28,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(10,28,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(11,3,"GtkImage","icon-name","input-mouse-symbolic",None,None,None,None,None,None,None,None,None),
(11,3,"GtkWidget","margin-end","15",None,None,None,None,None,None,None,None,None),
(11,4,"GtkLabel","ellipsize","end",None,None,None,None,None,None,None,None,None),
(11,4,"GtkLabel","label","LoremIpsum Wireless Mouse",None,None,None,None,None,None,None,None,None),
(11,4,"GtkLabel","single-line-mode","True",None,None,None,None,None,None,None,None,None),
(11,4,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
(11,4,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(11,4,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
(11,4,"GtkWidget","width-request","200",None,None,None,None,None,None,None,None,None),
(11,5,"GtkButton","icon-name","emblem-system-symbolic",None,None,None,None,None,None,None,None,None)
</object_property>
<object_data>
(3,15,"GtkWidget",2,2,None,1,None,None,None,None),
(3,15,"GtkWidget",1,1,None,None,None,None,None,None)
(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,15,"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

@ -5,8 +5,27 @@
<requires lib="libadwaita" version="1.4"/>
<template class="resetWifi" parent="GtkBox">
<property name="halign">start</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">5</property>
<child>
<object class="GtkLabel">
<property name="label">WiFi</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="resetWiFiSwitch">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="valign">end</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwClampScrollable">
<property name="maximum-size">0</property>

View file

@ -1,9 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/xetibo/reset/">
<file compressed="true" preprocess="xml-stripblanks">resetSidebarEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetWifiEntry.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetWiFi.ui</file>
<file compressed="true" preprocess="xml-stripblanks">resetMainWindow.ui</file>
<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">resetBluetooth.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">resetAudioSourceEntry.ui</file>
</gresource>
</gresources>

View file

@ -23,4 +23,8 @@ impl WifiBox {
}
}
impl WifiEntry {}
impl WifiEntry {
pub fn new() -> Self {
Object::builder().build()
}
}

View file

@ -1,6 +1,7 @@
use gtk::{CompositeTemplate, glib, ListBox};
use gtk::prelude::*;
use gtk::subclass::prelude::*;
use crate::wifi::WifiEntry;
#[allow(non_snake_case)]
@ -9,7 +10,6 @@ use crate::wifi::WifiEntry;
pub struct WifiBox {
#[template_child]
pub resetWifiList: TemplateChild<ListBox>,
// pub resetWifiList2: Vec<ListBox>,
}
#[glib::object_subclass]
@ -31,16 +31,6 @@ impl ObjectSubclass for WifiBox {
impl ObjectImpl for WifiBox {
fn constructed(&self) {
self.parent_constructed();
// for i in 0.. {
// let listEntryOption = self.resetWifiList.row_at_index(i);
// match listEntryOption {
// None => break,
// Some(row) => {
//
// }
// }
// }
}
}

View file

@ -1,10 +1,14 @@
use gtk::{Button, CompositeTemplate, glib};
use gtk::{Button, CompositeTemplate, glib, Image, Label};
use gtk::subclass::prelude::*;
#[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/xetibo/reset/resetWifiEntry.ui")]
pub struct WifiEntry {
#[template_child]
pub resetWifiStrength: TemplateChild<Image>,
#[template_child]
pub resetWifiLabel: TemplateChild<Label>,
#[template_child]
pub resetWifiButton: TemplateChild<Button>,
}

View file

@ -1,7 +1,8 @@
use gtk::FlowBox;
use crate::audio::AudioBox;
use crate::bluetooth::BluetoothBox;
use crate::wifi::WifiBox;
pub const HANDLE_CONNECTIVITY_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
let wifibox = WifiBox::new();
resetMain.remove_all();
@ -15,9 +16,9 @@ pub const HANDLE_WIFI_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
};
pub const HANDLE_BLUETOOTH_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
let wifibox = WifiBox::new();
let bluetoothBox = BluetoothBox::new();
resetMain.remove_all();
resetMain.insert(&wifibox, -1);
resetMain.insert(&bluetoothBox, -1);
};
pub const HANDLE_VPN_CLICK: fn(FlowBox) = |resetMain: FlowBox| {
@ -27,15 +28,15 @@ 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| {
let wifibox = WifiBox::new();
let audioBox = AudioBox::new();
resetMain.remove_all();
resetMain.insert(&wifibox, -1);
resetMain.insert(&audioBox, -1);
};
pub const HANDLE_MICROPHONE_CLICK: fn(FlowBox) = |resetMain: FlowBox| {

View file

@ -1,18 +1,21 @@
#![allow(non_snake_case)]
use adw::BreakpointCondition;
use adw::glib::clone;
use adw::subclass::prelude::ObjectSubclassIsExt;
use adw::BreakpointCondition;
use glib::Object;
use gtk::{Application, FlowBox, gio, glib};
use gtk::prelude::*;
use gtk::{gio, glib, Application, FlowBox};
use crate::window::handleSidebarClick::{HANDLE_AUDIO_CLICK, HANDLE_BLUETOOTH_CLICK, HANDLE_CONNECTIVITY_CLICK, HANDLE_MICROPHONE_CLICK, HANDLE_VOLUME_CLICK, HANDLE_VPN_CLICK, HANDLE_WIFI_CLICK};
use crate::window::handleSidebarClick::{
HANDLE_AUDIO_CLICK, HANDLE_BLUETOOTH_CLICK, HANDLE_CONNECTIVITY_CLICK, HANDLE_MICROPHONE_CLICK,
HANDLE_VOLUME_CLICK, HANDLE_VPN_CLICK, HANDLE_WIFI_CLICK,
};
use crate::window::sidebarEntry::{Categories, SidebarAction};
mod window;
mod sidebarEntry;
mod handleSidebarClick;
mod sidebarEntry;
mod window;
glib::wrapper! {
pub struct Window(ObjectSubclass<window::Window>)
@ -36,30 +39,48 @@ impl Window {
fn setupCallback(&self) {
let selfImp = self.imp();
selfImp.resetSearchEntry.connect_search_changed(clone!(@ weak self as window => move |_| {
selfImp
.resetSearchEntry
.connect_search_changed(clone!(@ weak self as window => move |_| {
window.filterList();
}));
selfImp.resetSideBarToggle.connect_clicked(clone!(@ weak self as window => move |_| {
selfImp
.resetSideBarToggle
.connect_clicked(clone!(@ weak self as window => move |_| {
window.toggleSidebar();
}));
selfImp.resetSidebarList.connect_row_activated(clone!(@ weak selfImp as flowbox => move |x, y| {
let mut result = y.downcast_ref::<SidebarEntry>().unwrap();
let clickEvent = result.imp().onClickEvent.borrow().onClickEvent;
(clickEvent)(flowbox.resetMain.get());
}));
selfImp.resetSidebarList.connect_row_activated(
clone!(@ weak selfImp as flowbox => move |_, y| {
let result = y.downcast_ref::<SidebarEntry>().unwrap();
let clickEvent = result.imp().onClickEvent.borrow().onClickEvent;
(clickEvent)(flowbox.resetMain.get());
}),
);
selfImp
.resetClose
.connect_clicked(clone!(@ weak self as window => move |_| {
window.close();
}));
}
fn handleDynamicSidebar(&self) {
let selfImp = self.imp();
selfImp.resetSidebarBreakpoint.set_condition(BreakpointCondition::parse("max-width: 500sp").as_ref().ok());
selfImp.resetSidebarBreakpoint.add_setter(&Object::from(selfImp.resetOverlaySplitView.get()),
"collapsed",
&true.to_value());
selfImp.resetSidebarBreakpoint.add_setter(&Object::from(selfImp.resetSideBarToggle.get()),
"visible",
&true.to_value());
selfImp
.resetSidebarBreakpoint
.set_condition(BreakpointCondition::parse("max-width: 500sp").as_ref().ok());
selfImp.resetSidebarBreakpoint.add_setter(
&Object::from(selfImp.resetOverlaySplitView.get()),
"collapsed",
&true.to_value(),
);
selfImp.resetSidebarBreakpoint.add_setter(
&Object::from(selfImp.resetSideBarToggle.get()),
"visible",
&true.to_value(),
);
}
fn filterList(&self) {
@ -72,13 +93,25 @@ impl Window {
}
continue;
}
if mainEntry.imp().name.borrow().to_lowercase().contains(&text.to_lowercase()) {
if mainEntry
.imp()
.name
.borrow()
.to_lowercase()
.contains(&text.to_lowercase())
{
mainEntry.set_visible(true);
} else {
mainEntry.set_visible(false);
}
for subEntry in subEntries {
if subEntry.imp().name.borrow().to_lowercase().contains(&text.to_lowercase()) {
if subEntry
.imp()
.name
.borrow()
.to_lowercase()
.contains(&text.to_lowercase())
{
subEntry.set_visible(true);
mainEntry.set_visible(true);
} else {
@ -100,45 +133,68 @@ impl Window {
let selfImp = self.imp();
let mut sidebarEntries = selfImp.sidebarEntries.borrow_mut();
let mut connectivityList = vec![SidebarEntry::new("WiFi",
"network-wireless-symbolic",
Categories::Connectivity,
true,
HANDLE_WIFI_CLICK),
SidebarEntry::new("Bluetooth",
"bluetooth-symbolic",
Categories::Connectivity,
true,
HANDLE_BLUETOOTH_CLICK),
SidebarEntry::new("VPN",
"network-vpn-symbolic",
Categories::Connectivity,
true,
HANDLE_VPN_CLICK)];
let connectivityList = vec![
SidebarEntry::new(
"WiFi",
"network-wireless-symbolic",
Categories::Connectivity,
true,
HANDLE_WIFI_CLICK,
),
SidebarEntry::new(
"Bluetooth",
"bluetooth-symbolic",
Categories::Connectivity,
true,
HANDLE_BLUETOOTH_CLICK,
),
SidebarEntry::new(
"VPN",
"network-vpn-symbolic",
Categories::Connectivity,
true,
HANDLE_VPN_CLICK,
),
];
sidebarEntries.push((SidebarEntry::new("Connectivity",
"network-wired-symbolic",
Categories::Connectivity,
false,
HANDLE_CONNECTIVITY_CLICK), connectivityList));
sidebarEntries.push((
SidebarEntry::new(
"Connectivity",
"network-wired-symbolic",
Categories::Connectivity,
false,
HANDLE_CONNECTIVITY_CLICK,
),
connectivityList,
));
let mut audioList = vec![SidebarEntry::new("Volume",
"audio-volume-high-symbolic",
Categories::Audio,
true,
HANDLE_VOLUME_CLICK),
SidebarEntry::new("Microphone",
"audio-input-microphone-symbolic",
Categories::Audio,
true,
HANDLE_MICROPHONE_CLICK)];
sidebarEntries.push((SidebarEntry::new("Audio",
"audio-headset-symbolic",
Categories::Audio,
false,
HANDLE_AUDIO_CLICK), audioList));
let audioList = vec![
SidebarEntry::new(
"Volume",
"audio-volume-high-symbolic",
Categories::Audio,
true,
HANDLE_VOLUME_CLICK,
),
SidebarEntry::new(
"Microphone",
"audio-input-microphone-symbolic",
Categories::Audio,
true,
HANDLE_MICROPHONE_CLICK,
),
];
sidebarEntries.push((
SidebarEntry::new(
"Audio",
"audio-headset-symbolic",
Categories::Audio,
false,
HANDLE_AUDIO_CLICK,
),
audioList,
));
for (mainEntry, subEntries) in sidebarEntries.iter() {
selfImp.resetSidebarList.append(mainEntry);
@ -150,18 +206,28 @@ impl Window {
}
impl SidebarEntry {
pub fn new(entryName: &str, iconName: &str, category: Categories, isSubcategory: bool, clickEvent: fn(FlowBox)) -> Self {
pub fn new(
entryName: &str,
iconName: &str,
category: Categories,
isSubcategory: bool,
clickEvent: fn(FlowBox),
) -> Self {
let entry: SidebarEntry = Object::builder().build();
let entryImp = entry.imp();
entryImp.resetSidebarLabel.get().set_text(entryName);
entryImp.resetSidebarImage.set_from_icon_name(Some(iconName));
entryImp
.resetSidebarImage
.set_from_icon_name(Some(iconName));
entryImp.category.set(category);
entryImp.isSubcategory.set(isSubcategory);
{
let mut name = entryImp.name.borrow_mut();
*name = String::from(entryName);
let mut action = entryImp.onClickEvent.borrow_mut();
*action = SidebarAction { onClickEvent: clickEvent };
*action = SidebarAction {
onClickEvent: clickEvent,
};
}
Self::setMargin(&entry);
entry
@ -173,4 +239,5 @@ impl SidebarEntry {
option.set_margin_start(30);
}
}
}
}

View file

@ -1,10 +1,10 @@
use std::cell::{Cell, RefCell};
use adw::{Breakpoint, OverlaySplitView};
use adw::glib::StaticTypeExt;
use adw::subclass::prelude::AdwApplicationWindowImpl;
use adw::{Breakpoint, OverlaySplitView};
use glib::subclass::InitializingObject;
use gtk::{Button, CompositeTemplate, FlowBox, glib, ListBox, SearchEntry, Box};
use gtk::subclass::prelude::*;
use gtk::{glib, Box, Button, CompositeTemplate, FlowBox, ListBox, SearchEntry};
use std::cell::RefCell;
use crate::wifi::WifiBox;
use crate::window::SidebarEntry;
@ -27,6 +27,8 @@ pub struct Window {
pub resetSideBarToggle: TemplateChild<Button>,
#[template_child]
pub resetPath: TemplateChild<Box>,
#[template_child]
pub resetClose: TemplateChild<Button>,
pub sidebarEntries: RefCell<Vec<(SidebarEntry, Vec<SidebarEntry>)>>,
}
@ -64,5 +66,3 @@ impl WindowImpl for Window {}
impl ApplicationWindowImpl for Window {}
impl AdwApplicationWindowImpl for Window {}