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."
[dependencies]
ReSet-Lib = "0.1.0"
adw = { version = "0.5.3", package = "libadwaita" }
gtk = { version = "0.7.3", package = "gtk4" }
ReSet-Lib = "*"
adw = { version = "*", package = "libadwaita", features = ["v1_4"]}
gtk = { version = "*", package = "gtk4"}
[build-dependencies]
glib-build-tools = "0.18.0"
glib-build-tools = "*"

View file

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

View file

@ -11,7 +11,7 @@
(3,2,"GtkBox",None,1,None,None,None,-1,None),
(3,3,"AdwHeaderBar",None,2,None,None,None,None,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,8,"AdwNavigationPage",None,6,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,112,"GtkImage",None,111,None,None,None,None,None),
(3,113,"GtkLabel",None,111,None,None,None,1,None),
(3,115,"GtkLabel","test",3,None,None,None,-1,None),
(3,116,"GtkFlowBox","resetMain",8,None,None,None,-1,None),
(3,117,"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,8,"AdwClampScrollable",None,7,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,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","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,"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","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-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),
@ -113,7 +119,7 @@
(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,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,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),
@ -130,11 +136,12 @@
(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,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,116,"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,116,"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,"GtkFlowBox","column-spacing","25",None,None,None,None,None,None,None,None,None),
(3,117,"GtkFlowBox","homogeneous","True",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,117,"GtkFlowBox","selection-mode","none",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,"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),

View file

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

View file

@ -3,13 +3,13 @@ use gtk::prelude::*;
use gtk::subclass::prelude::*;
use crate::wifi::WifiEntry;
#[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/xetibo/reset/resetWiFi.ui")]
pub struct WifiBox {
#[template_child]
pub resetWifiList: TemplateChild<ListBox>,
// pub resetWifiList2: Vec<ListBox>,
}
#[glib::object_subclass]
@ -31,6 +31,16 @@ 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,14 +1,17 @@
use adw::glib::StaticTypeExt;
use adw::glib::{StaticTypeExt};
use adw::NavigationSplitView;
use adw::subclass::prelude::AdwApplicationWindowImpl;
use glib::subclass::InitializingObject;
use gtk::subclass::prelude::*;
use gtk::{glib, CompositeTemplate, SearchEntry, Label, ListBox, FlowBox};
use gtk::{glib, CompositeTemplate, SearchEntry, ListBox, FlowBox, Button};
use crate::wifi::WifiBox;
#[allow(non_snake_case)]
#[derive(CompositeTemplate, Default)]
#[template(resource = "/org/xetibo/reset/resetMainWindow.ui")]
pub struct Window {
#[template_child]
pub resetNavigationSplitView: TemplateChild<NavigationSplitView>,
#[template_child]
pub resetSearchEntry: TemplateChild<SearchEntry>,
#[template_child]
@ -16,7 +19,7 @@ pub struct Window {
#[template_child]
pub resetMain: TemplateChild<FlowBox>,
#[template_child]
pub test: TemplateChild<Label>,
pub resetSideBarToggle: TemplateChild<Button>
}
#[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 {}

View file

@ -23,19 +23,14 @@ impl Window {
self.imp()
.resetSearchEntry
.connect_search_changed(clone!(@ weak self as window => move |_| {
window.setText();
window.filterList();
}));
}
fn setText(&self) {
let buffer = self.imp()
.resetSearchEntry
.text()
.to_string();
self.imp()
.test
.set_text(&buffer);
.resetSideBarToggle
.connect_clicked(clone!(@ weak self as window => move |_| {
window.toggleSidebar();
}));
}
fn filterList(&self) {
@ -57,4 +52,22 @@ impl Window {
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);
}
}
}