add button to toggle sidebar

sidebar can hide itself if not enough space
fix dependencies
This commit is contained in:
tranfelix 2023-10-17 14:59:07 +02:00
parent e7a7f76f2c
commit 62af24da81
7 changed files with 88 additions and 44 deletions

View file

@ -5,9 +5,9 @@ edition = "2021"
description = "A wip universal Linux settings application." description = "A wip universal Linux settings application."
[dependencies] [dependencies]
ReSet-Lib = "0.1.0" ReSet-Lib = "*"
adw = { version = "0.5.3", package = "libadwaita" } adw = { version = "*", package = "libadwaita", features = ["v1_4"]}
gtk = { version = "0.7.3", package = "gtk4" } gtk = { version = "*", package = "gtk4"}
[build-dependencies] [build-dependencies]
glib-build-tools = "0.18.0" glib-build-tools = "*"

View file

@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.17.0 --> <!-- Created with Cambalache 0.17.0 -->
<interface> <interface>
<requires lib="gtk" version="4.8"/> <requires lib="gtk" version="4.12"/>
<requires lib="libadwaita" version="1.4"/> <requires lib="libadwaita" version="1.4"/>
<template class="resetUI" parent="AdwApplicationWindow"> <template class="resetUI" parent="AdwApplicationWindow">
<child> <child>
@ -16,19 +16,17 @@
</object> </object>
</property> </property>
<child> <child>
<object class="GtkLabel" id="test"/> <object class="GtkButton" id="resetSideBarToggle">
<property name="icon-name">sidebar-show-symbolic</property>
</object>
</child> </child>
</object> </object>
</child> </child>
<child> <child>
<object class="AdwNavigationSplitView"> <object class="AdwNavigationSplitView" id="resetNavigationSplitView">
<property name="content"> <property name="content">
<object class="AdwNavigationPage"> <object class="AdwNavigationPage">
<property name="margin-bottom">20</property> <property name="child">
<property name="margin-end">20</property>
<property name="margin-start">20</property>
<property name="margin-top">20</property>
<child>
<object class="GtkFlowBox" id="resetMain"> <object class="GtkFlowBox" id="resetMain">
<property name="column-spacing">25</property> <property name="column-spacing">25</property>
<property name="homogeneous">True</property> <property name="homogeneous">True</property>
@ -36,9 +34,17 @@
<property name="selection-mode">none</property> <property name="selection-mode">none</property>
<property name="valign">start</property> <property name="valign">start</property>
</object> </object>
</child> </property>
<property name="margin-bottom">20</property>
<property name="margin-end">20</property>
<property name="margin-start">20</property>
<property name="margin-top">20</property>
<property name="title">fdas</property>
</object> </object>
</property> </property>
<property name="max-sidebar-width">200.0</property>
<property name="min-sidebar-width">200.0</property>
<property name="show-content">True</property>
<property name="sidebar"> <property name="sidebar">
<object class="AdwNavigationPage"> <object class="AdwNavigationPage">
<property name="child"> <property name="child">
@ -174,7 +180,7 @@
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="margin-bottom">10</property> <property name="margin-bottom">10</property>
<property name="margin-start">35</property> <property name="margin-start">30</property>
<property name="margin-top">10</property> <property name="margin-top">10</property>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
@ -222,6 +228,7 @@
</child> </child>
</object> </object>
</property> </property>
<property name="title">asdf</property>
</object> </object>
</property> </property>
<property name="vexpand">True</property> <property name="vexpand">True</property>

View file

@ -11,7 +11,7 @@
(3,2,"GtkBox",None,1,None,None,None,-1,None), (3,2,"GtkBox",None,1,None,None,None,-1,None),
(3,3,"AdwHeaderBar",None,2,None,None,None,None,None), (3,3,"AdwHeaderBar",None,2,None,None,None,None,None),
(3,5,"AdwWindowTitle",None,3,None,None,None,-1,None), (3,5,"AdwWindowTitle",None,3,None,None,None,-1,None),
(3,6,"AdwNavigationSplitView",None,2,None,None,None,1,None), (3,6,"AdwNavigationSplitView","resetNavigationSplitView",2,None,None,None,1,None),
(3,7,"AdwNavigationPage",None,6,None,None,None,-1,None), (3,7,"AdwNavigationPage",None,6,None,None,None,-1,None),
(3,8,"AdwNavigationPage",None,6,None,None,None,-1,None), (3,8,"AdwNavigationPage",None,6,None,None,None,-1,None),
(3,73,"GtkViewport",None,7,None,None,None,-1,None), (3,73,"GtkViewport",None,7,None,None,None,-1,None),
@ -46,8 +46,8 @@
(3,111,"GtkBox",None,85,None,None,None,None,None), (3,111,"GtkBox",None,85,None,None,None,None,None),
(3,112,"GtkImage",None,111,None,None,None,None,None), (3,112,"GtkImage",None,111,None,None,None,None,None),
(3,113,"GtkLabel",None,111,None,None,None,1,None), (3,113,"GtkLabel",None,111,None,None,None,1,None),
(3,115,"GtkLabel","test",3,None,None,None,-1,None), (3,117,"GtkFlowBox","resetMain",8,None,None,None,-1,None),
(3,116,"GtkFlowBox","resetMain",8,None,None,None,-1,None), (3,118,"GtkButton","resetSideBarToggle",3,None,None,None,-1,None),
(4,7,"GtkBox","resetWifi",None,None,None,None,None,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,None,None),
(4,9,"GtkBox",None,8,None,None,None,None,None), (4,9,"GtkBox",None,8,None,None,None,None,None),
@ -73,9 +73,15 @@
(3,3,"AdwHeaderBar","title-widget",None,None,None,None,None,5,None,None,None,None), (3,3,"AdwHeaderBar","title-widget",None,None,None,None,None,5,None,None,None,None),
(3,5,"AdwWindowTitle","title","ReSet",None,None,None,None,None,None,None,None,None), (3,5,"AdwWindowTitle","title","ReSet",None,None,None,None,None,None,None,None,None),
(3,6,"AdwNavigationSplitView","content",None,None,None,None,None,8,None,None,None,None), (3,6,"AdwNavigationSplitView","content",None,None,None,None,None,8,None,None,None,None),
(3,6,"AdwNavigationSplitView","max-sidebar-width","200.0",None,None,None,None,None,None,None,None,None),
(3,6,"AdwNavigationSplitView","min-sidebar-width","200.0",None,None,None,None,None,None,None,None,None),
(3,6,"AdwNavigationSplitView","show-content","True",None,None,None,None,None,None,None,None,None),
(3,6,"AdwNavigationSplitView","sidebar",None,None,None,None,None,7,None,None,None,None), (3,6,"AdwNavigationSplitView","sidebar",None,None,None,None,None,7,None,None,None,None),
(3,6,"GtkWidget","vexpand","True",None,None,None,None,None,None,None,None,None), (3,6,"GtkWidget","vexpand","True",None,None,None,None,None,None,None,None,None),
(3,7,"AdwNavigationPage","child",None,None,None,None,None,73,None,None,None,None), (3,7,"AdwNavigationPage","child",None,None,None,None,None,73,None,None,None,None),
(3,7,"AdwNavigationPage","title","asdf",None,None,None,None,None,None,None,None,None),
(3,8,"AdwNavigationPage","child",None,None,None,None,None,117,None,None,None,None),
(3,8,"AdwNavigationPage","title","fdas",None,None,None,None,None,None,None,None,None),
(3,8,"GtkWidget","margin-bottom","20",None,None,None,None,None,None,None,None,None), (3,8,"GtkWidget","margin-bottom","20",None,None,None,None,None,None,None,None,None),
(3,8,"GtkWidget","margin-end","20",None,None,None,None,None,None,None,None,None), (3,8,"GtkWidget","margin-end","20",None,None,None,None,None,None,None,None,None),
(3,8,"GtkWidget","margin-start","20",None,None,None,None,None,None,None,None,None), (3,8,"GtkWidget","margin-start","20",None,None,None,None,None,None,None,None,None),
@ -113,7 +119,7 @@
(3,103,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None), (3,103,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
(3,104,"GtkLabel","label","VPN",None,None,None,None,None,None,None,None,None), (3,104,"GtkLabel","label","VPN",None,None,None,None,None,None,None,None,None),
(3,105,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None), (3,105,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(3,105,"GtkWidget","margin-start","35",None,None,None,None,None,None,None,None,None), (3,105,"GtkWidget","margin-start","30",None,None,None,None,None,None,None,None,None),
(3,105,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None), (3,105,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(3,106,"GtkImage","icon-name","audio-volume-high-symbolic",None,None,None,None,None,None,None,None,None), (3,106,"GtkImage","icon-name","audio-volume-high-symbolic",None,None,None,None,None,None,None,None,None),
(3,106,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None), (3,106,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
@ -130,11 +136,12 @@
(3,112,"GtkImage","icon-name","audio-headset-symbolic",None,None,None,None,None,None,None,None,None), (3,112,"GtkImage","icon-name","audio-headset-symbolic",None,None,None,None,None,None,None,None,None),
(3,112,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None), (3,112,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
(3,113,"GtkLabel","label","Audio",None,None,None,None,None,None,None,None,None), (3,113,"GtkLabel","label","Audio",None,None,None,None,None,None,None,None,None),
(3,116,"GtkFlowBox","column-spacing","25",None,None,None,None,None,None,None,None,None), (3,117,"GtkFlowBox","column-spacing","25",None,None,None,None,None,None,None,None,None),
(3,116,"GtkFlowBox","homogeneous","True",None,None,None,None,None,None,None,None,None), (3,117,"GtkFlowBox","homogeneous","True",None,None,None,None,None,None,None,None,None),
(3,116,"GtkFlowBox","row-spacing","25",None,None,None,None,None,None,None,None,None), (3,117,"GtkFlowBox","row-spacing","25",None,None,None,None,None,None,None,None,None),
(3,116,"GtkFlowBox","selection-mode","none",None,None,None,None,None,None,None,None,None), (3,117,"GtkFlowBox","selection-mode","none",None,None,None,None,None,None,None,None,None),
(3,116,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None), (3,117,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(3,118,"GtkButton","icon-name","sidebar-show-symbolic",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,"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","halign","start",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","valign","start",None,None,None,None,None,None,None,None,None),

View file

@ -5,8 +5,6 @@ mod wifiEntry;
use adw::glib::Object; use adw::glib::Object;
use gtk::{glib}; use gtk::{glib};
use gtk::prelude::WidgetExt;
use gtk::subclass::prelude::*;
glib::wrapper! { glib::wrapper! {
pub struct WifiBox(ObjectSubclass<wifiBox::WifiBox>) pub struct WifiBox(ObjectSubclass<wifiBox::WifiBox>)
@ -26,8 +24,4 @@ impl WifiBox {
} }
} }
impl WifiEntry { impl WifiEntry {}
fn onClick(&self) {
self.imp().resetWifiButton.set_tooltip_text(Option::from("asd"));
}
}

View file

@ -3,13 +3,13 @@ use gtk::prelude::*;
use gtk::subclass::prelude::*; use gtk::subclass::prelude::*;
use crate::wifi::WifiEntry; use crate::wifi::WifiEntry;
#[allow(non_snake_case)] #[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)] #[derive(Default, CompositeTemplate)]
#[template(resource = "/org/xetibo/reset/resetWiFi.ui")] #[template(resource = "/org/xetibo/reset/resetWiFi.ui")]
pub struct WifiBox { pub struct WifiBox {
#[template_child] #[template_child]
pub resetWifiList: TemplateChild<ListBox>, pub resetWifiList: TemplateChild<ListBox>,
// pub resetWifiList2: Vec<ListBox>,
} }
#[glib::object_subclass] #[glib::object_subclass]
@ -31,6 +31,16 @@ impl ObjectSubclass for WifiBox {
impl ObjectImpl for WifiBox { impl ObjectImpl for WifiBox {
fn constructed(&self) { fn constructed(&self) {
self.parent_constructed(); self.parent_constructed();
// for i in 0.. {
// let listEntryOption = self.resetWifiList.row_at_index(i);
// match listEntryOption {
// None => break,
// Some(row) => {
//
// }
// }
// }
} }
} }

View file

@ -1,14 +1,17 @@
use adw::glib::StaticTypeExt; use adw::glib::{StaticTypeExt};
use adw::NavigationSplitView;
use adw::subclass::prelude::AdwApplicationWindowImpl; use adw::subclass::prelude::AdwApplicationWindowImpl;
use glib::subclass::InitializingObject; use glib::subclass::InitializingObject;
use gtk::subclass::prelude::*; use gtk::subclass::prelude::*;
use gtk::{glib, CompositeTemplate, SearchEntry, Label, ListBox, FlowBox}; use gtk::{glib, CompositeTemplate, SearchEntry, ListBox, FlowBox, Button};
use crate::wifi::WifiBox; use crate::wifi::WifiBox;
#[allow(non_snake_case)] #[allow(non_snake_case)]
#[derive(CompositeTemplate, Default)] #[derive(CompositeTemplate, Default)]
#[template(resource = "/org/xetibo/reset/resetMainWindow.ui")] #[template(resource = "/org/xetibo/reset/resetMainWindow.ui")]
pub struct Window { pub struct Window {
#[template_child]
pub resetNavigationSplitView: TemplateChild<NavigationSplitView>,
#[template_child] #[template_child]
pub resetSearchEntry: TemplateChild<SearchEntry>, pub resetSearchEntry: TemplateChild<SearchEntry>,
#[template_child] #[template_child]
@ -16,7 +19,7 @@ pub struct Window {
#[template_child] #[template_child]
pub resetMain: TemplateChild<FlowBox>, pub resetMain: TemplateChild<FlowBox>,
#[template_child] #[template_child]
pub test: TemplateChild<Label>, pub resetSideBarToggle: TemplateChild<Button>
} }
#[glib::object_subclass] #[glib::object_subclass]
@ -54,7 +57,17 @@ impl ObjectImpl for Window {
} }
} }
impl WidgetImpl for Window {} impl WidgetImpl for Window {
fn size_allocate(&self, width: i32, height: i32, baseline: i32) {
println!("new width {}, new hight {}", width, height);
self.parent_size_allocate(width, height, baseline);
if width < 550 {
self.obj().hideSidebar(true);
} else {
self.obj().hideSidebar(false);
}
}
}
impl WindowImpl for Window {} impl WindowImpl for Window {}

View file

@ -23,19 +23,14 @@ impl Window {
self.imp() self.imp()
.resetSearchEntry .resetSearchEntry
.connect_search_changed(clone!(@ weak self as window => move |_| { .connect_search_changed(clone!(@ weak self as window => move |_| {
window.setText();
window.filterList(); window.filterList();
})); }));
}
fn setText(&self) {
let buffer = self.imp()
.resetSearchEntry
.text()
.to_string();
self.imp() self.imp()
.test .resetSideBarToggle
.set_text(&buffer); .connect_clicked(clone!(@ weak self as window => move |_| {
window.toggleSidebar();
}));
} }
fn filterList(&self) { fn filterList(&self) {
@ -57,4 +52,22 @@ impl Window {
return false; return false;
}); });
} }
fn hideSidebar(&self, hidden: bool) {
self.imp()
.resetNavigationSplitView
.set_collapsed(hidden);
}
fn toggleSidebar(&self) {
if self.imp().resetNavigationSplitView.shows_content() {
self.imp()
.resetNavigationSplitView
.set_show_content(false);
} else {
self.imp()
.resetNavigationSplitView
.set_show_content(true);
}
}
} }