mirror of
				https://github.com/Xetibo/ReSet.git
				synced 2025-10-30 23:55:21 +01:00 
			
		
		
		
	Merge pull request #97 from Xetibo/dashie
refactor: SideBar and PluginSideBar
This commit is contained in:
		
						commit
						fd99d902c2
					
				
					 20 changed files with 131 additions and 88 deletions
				
			
		|  | @ -9,9 +9,9 @@ use adw::glib::Object; | ||||||
| use adw::prelude::{ButtonExt, ComboRowExt, PreferencesRowExt, RangeExt}; | use adw::prelude::{ButtonExt, ComboRowExt, PreferencesRowExt, RangeExt}; | ||||||
| use dbus::blocking::Connection; | use dbus::blocking::Connection; | ||||||
| use dbus::Error; | use dbus::Error; | ||||||
|  | use glib::prelude::Cast; | ||||||
| use glib::subclass::types::ObjectSubclassIsExt; | use glib::subclass::types::ObjectSubclassIsExt; | ||||||
| use glib::{clone, Propagation}; | use glib::{clone, Propagation}; | ||||||
| use glib::prelude::Cast; |  | ||||||
| use gtk::{gio, StringObject}; | use gtk::{gio, StringObject}; | ||||||
| use re_set_lib::audio::audio_structures::OutputStream; | use re_set_lib::audio::audio_structures::OutputStream; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -4,8 +4,8 @@ use std::{ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| use adw::prelude::{ComboRowExt, PreferencesRowExt}; | use adw::prelude::{ComboRowExt, PreferencesRowExt}; | ||||||
| use glib::{subclass::types::ObjectSubclassIsExt, ControlFlow, Propagation}; |  | ||||||
| use glib::prelude::Cast; | use glib::prelude::Cast; | ||||||
|  | use glib::{subclass::types::ObjectSubclassIsExt, ControlFlow, Propagation}; | ||||||
| use gtk::{ | use gtk::{ | ||||||
|     gio, |     gio, | ||||||
|     prelude::{BoxExt, ButtonExt, CheckButtonExt, ListBoxRowExt, RangeExt}, |     prelude::{BoxExt, ButtonExt, CheckButtonExt, ListBoxRowExt, RangeExt}, | ||||||
|  |  | ||||||
|  | @ -9,9 +9,9 @@ use adw::glib::Object; | ||||||
| use adw::prelude::{ButtonExt, ComboRowExt, PreferencesRowExt, RangeExt}; | use adw::prelude::{ButtonExt, ComboRowExt, PreferencesRowExt, RangeExt}; | ||||||
| use dbus::blocking::Connection; | use dbus::blocking::Connection; | ||||||
| use dbus::Error; | use dbus::Error; | ||||||
|  | use glib::prelude::Cast; | ||||||
| use glib::subclass::types::ObjectSubclassIsExt; | use glib::subclass::types::ObjectSubclassIsExt; | ||||||
| use glib::{clone, Propagation}; | use glib::{clone, Propagation}; | ||||||
| use glib::prelude::Cast; |  | ||||||
| use gtk::{gio, StringObject}; | use gtk::{gio, StringObject}; | ||||||
| use re_set_lib::audio::audio_structures::InputStream; | use re_set_lib::audio::audio_structures::InputStream; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -7,8 +7,8 @@ use adw::{ | ||||||
|     prelude::{ComboRowExt, PreferencesRowExt}, |     prelude::{ComboRowExt, PreferencesRowExt}, | ||||||
|     ComboRow, |     ComboRow, | ||||||
| }; | }; | ||||||
| use glib::{subclass::types::ObjectSubclassIsExt, Propagation}; |  | ||||||
| use glib::prelude::Cast; | use glib::prelude::Cast; | ||||||
|  | use glib::{subclass::types::ObjectSubclassIsExt, Propagation}; | ||||||
| use gtk::{ | use gtk::{ | ||||||
|     gio, |     gio, | ||||||
|     prelude::{BoxExt, ButtonExt, CheckButtonExt, ListBoxRowExt, RangeExt}, |     prelude::{BoxExt, ButtonExt, CheckButtonExt, ListBoxRowExt, RangeExt}, | ||||||
|  |  | ||||||
|  | @ -4,9 +4,9 @@ use adw::glib::Object; | ||||||
| use adw::prelude::{ComboRowExt, PreferencesRowExt}; | use adw::prelude::{ComboRowExt, PreferencesRowExt}; | ||||||
| use dbus::blocking::Connection; | use dbus::blocking::Connection; | ||||||
| use dbus::Error; | use dbus::Error; | ||||||
| use glib::subclass::types::ObjectSubclassIsExt; | use glib::clone; | ||||||
| use glib::{clone}; |  | ||||||
| use glib::prelude::Cast; | use glib::prelude::Cast; | ||||||
|  | use glib::subclass::types::ObjectSubclassIsExt; | ||||||
| use gtk::{gio, StringList, StringObject}; | use gtk::{gio, StringList, StringObject}; | ||||||
| 
 | 
 | ||||||
| use components::utils::create_dropdown_label_factory; | use components::utils::create_dropdown_label_factory; | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| use crate::components::base::list_entry_impl; | use crate::components::base::list_entry_impl; | ||||||
| use adw::glib::{Object}; | use adw::glib::Object; | ||||||
| use glib::prelude::IsA; | use glib::prelude::IsA; | ||||||
| use gtk::prelude::ListBoxRowExt; | use gtk::prelude::ListBoxRowExt; | ||||||
| use gtk::Widget; | use gtk::Widget; | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| use crate::components::base::setting_box_impl; | use crate::components::base::setting_box_impl; | ||||||
| use adw::glib::{Object}; | use adw::glib::Object; | ||||||
| use glib::prelude::IsA; | use glib::prelude::IsA; | ||||||
| use gtk::prelude::BoxExt; | use gtk::prelude::BoxExt; | ||||||
| use gtk::Widget; | use gtk::Widget; | ||||||
|  |  | ||||||
|  | @ -8,9 +8,9 @@ use adw::subclass::prelude::ObjectSubclassIsExt; | ||||||
| use dbus::blocking::Connection; | use dbus::blocking::Connection; | ||||||
| use dbus::message::SignalArgs; | use dbus::message::SignalArgs; | ||||||
| use dbus::{Error, Path}; | use dbus::{Error, Path}; | ||||||
| use glib::{clone, ControlFlow}; |  | ||||||
| use glib::prelude::Cast; | use glib::prelude::Cast; | ||||||
| use glib::property::PropertySet; | use glib::property::PropertySet; | ||||||
|  | use glib::{clone, ControlFlow}; | ||||||
| use gtk::glib::Variant; | use gtk::glib::Variant; | ||||||
| use gtk::prelude::{ActionableExt, ButtonExt, ListBoxRowExt, WidgetExt}; | use gtk::prelude::{ActionableExt, ButtonExt, ListBoxRowExt, WidgetExt}; | ||||||
| use gtk::{gio, StringObject}; | use gtk::{gio, StringObject}; | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| pub mod audio; | pub mod audio; | ||||||
| pub mod base; | pub mod base; | ||||||
| pub mod bluetooth; | pub mod bluetooth; | ||||||
|  | mod plugin; | ||||||
| pub mod utils; | pub mod utils; | ||||||
| pub mod wifi; | pub mod wifi; | ||||||
| pub mod window; | pub mod window; | ||||||
| mod plugin; |  | ||||||
|  |  | ||||||
|  | @ -3,21 +3,58 @@ use std::rc::Rc; | ||||||
| use std::sync::Arc; | use std::sync::Arc; | ||||||
| 
 | 
 | ||||||
| use gtk::FlowBox; | use gtk::FlowBox; | ||||||
| use re_set_lib::utils::plugin::SidebarInfo; |  | ||||||
| 
 | 
 | ||||||
| use crate::components::base::utils::{Listeners, Position}; | use crate::components::base::utils::{Listeners, Position}; | ||||||
| 
 | 
 | ||||||
| extern "C" { | // extern "C" {
 | ||||||
|     pub fn startup() -> SidebarInfo; | //     pub fn startup() -> SidebarInfo;
 | ||||||
|     pub fn shutdown(); | //     pub fn shutdown();
 | ||||||
|     pub fn run_test(); | //     pub fn run_test();
 | ||||||
|  | // }
 | ||||||
|  | 
 | ||||||
|  | pub type RegularClickEvent = fn(Arc<Listeners>, FlowBox, Rc<RefCell<Position>>); | ||||||
|  | pub type PluginClickEvent = Rc<dyn Fn(FlowBox, Rc<RefCell<Position>>, Vec<gtk::Box>)>; | ||||||
|  | 
 | ||||||
|  | pub trait TSideBarInfo { | ||||||
|  |     fn name(&self) -> &'static str; | ||||||
|  |     fn icon_name(&self) -> &'static str; | ||||||
|  |     fn parent(&self) -> Option<&'static str>; | ||||||
|  |     fn regular_click_event(&self) -> Option<RegularClickEvent>; | ||||||
|  |     fn plugin_click_event(&self) -> PluginClickEvent; | ||||||
|  |     fn plugin_boxes(&self) -> Option<Vec<gtk::Box>>; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub struct ReSetSidebarInfo { | pub struct ReSetSidebarInfo { | ||||||
|     pub name: &'static str, |     pub name: &'static str, | ||||||
|     pub icon_name: &'static str, |     pub icon_name: &'static str, | ||||||
|     pub parent: Option<&'static str>, |     pub parent: Option<&'static str>, | ||||||
|     pub click_event: fn(Arc<Listeners>, FlowBox, Rc<RefCell<Position>>), |     pub click_event: RegularClickEvent, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl TSideBarInfo for ReSetSidebarInfo { | ||||||
|  |     fn name(&self) -> &'static str { | ||||||
|  |         self.name | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn icon_name(&self) -> &'static str { | ||||||
|  |         self.icon_name | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn parent(&self) -> Option<&'static str> { | ||||||
|  |         self.parent | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn regular_click_event(&self) -> Option<RegularClickEvent> { | ||||||
|  |         Some(self.click_event) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn plugin_click_event(&self) -> PluginClickEvent { | ||||||
|  |         Rc::new(|_, _, _| {}) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn plugin_boxes(&self) -> Option<Vec<gtk::Box>> { | ||||||
|  |         None | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[repr(C)] | #[repr(C)] | ||||||
|  | @ -25,6 +62,32 @@ pub struct PluginSidebarInfo { | ||||||
|     pub name: &'static str, |     pub name: &'static str, | ||||||
|     pub icon_name: &'static str, |     pub icon_name: &'static str, | ||||||
|     pub parent: Option<&'static str>, |     pub parent: Option<&'static str>, | ||||||
|     pub click_event: Rc<dyn Fn(FlowBox, Rc<RefCell<Position>>, Vec<gtk::Box>)>, |     pub click_event: PluginClickEvent, | ||||||
|     pub plugin_boxes: Vec<gtk::Box>, |     pub plugin_boxes: Vec<gtk::Box>, | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | impl TSideBarInfo for PluginSidebarInfo { | ||||||
|  |     fn name(&self) -> &'static str { | ||||||
|  |         self.name | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn icon_name(&self) -> &'static str { | ||||||
|  |         self.icon_name | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn parent(&self) -> Option<&'static str> { | ||||||
|  |         self.parent | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn regular_click_event(&self) -> Option<RegularClickEvent> { | ||||||
|  |         None | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn plugin_click_event(&self) -> PluginClickEvent { | ||||||
|  |         self.click_event.clone() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn plugin_boxes(&self) -> Option<Vec<gtk::Box>> { | ||||||
|  |         Some(self.plugin_boxes.clone()) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| use adw::gdk::pango::EllipsizeMode; | use adw::gdk::pango::EllipsizeMode; | ||||||
| use adw::prelude::ListModelExtManual; | use adw::prelude::ListModelExtManual; | ||||||
| use adw::{ActionRow, ComboRow}; | use adw::{ActionRow, ComboRow}; | ||||||
| use glib::{Object}; |  | ||||||
| use glib::prelude::Cast; | use glib::prelude::Cast; | ||||||
|  | use glib::Object; | ||||||
| use gtk::prelude::{GObjectPropertyExpressionExt, ListBoxRowExt, ListItemExt, WidgetExt}; | use gtk::prelude::{GObjectPropertyExpressionExt, ListBoxRowExt, ListItemExt, WidgetExt}; | ||||||
| use gtk::{Align, SignalListItemFactory, StringObject}; | use gtk::{Align, SignalListItemFactory, StringObject}; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -10,9 +10,9 @@ use adw::glib::Object; | ||||||
| use adw::prelude::{ActionRowExt, ButtonExt, PreferencesGroupExt, PreferencesRowExt}; | use adw::prelude::{ActionRowExt, ButtonExt, PreferencesGroupExt, PreferencesRowExt}; | ||||||
| use dbus::blocking::Connection; | use dbus::blocking::Connection; | ||||||
| use dbus::{Error, Path}; | use dbus::{Error, Path}; | ||||||
| use glib::subclass::types::ObjectSubclassIsExt; | use glib::clone; | ||||||
| use glib::{clone}; |  | ||||||
| use glib::property::PropertySet; | use glib::property::PropertySet; | ||||||
|  | use glib::subclass::types::ObjectSubclassIsExt; | ||||||
| use gtk::prelude::{BoxExt, ListBoxRowExt}; | use gtk::prelude::{BoxExt, ListBoxRowExt}; | ||||||
| use gtk::{gio, Align, Button, Orientation}; | use gtk::{gio, Align, Button, Orientation}; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -14,9 +14,9 @@ use dbus::blocking::Connection; | ||||||
| use dbus::message::SignalArgs; | use dbus::message::SignalArgs; | ||||||
| use dbus::Error; | use dbus::Error; | ||||||
| use dbus::Path; | use dbus::Path; | ||||||
| use glib::{clone, ControlFlow}; |  | ||||||
| use glib::prelude::Cast; | use glib::prelude::Cast; | ||||||
| use glib::property::PropertySet; | use glib::property::PropertySet; | ||||||
|  | use glib::{clone, ControlFlow}; | ||||||
| use gtk::glib::Variant; | use gtk::glib::Variant; | ||||||
| use gtk::prelude::ActionableExt; | use gtk::prelude::ActionableExt; | ||||||
| use gtk::{gio, StringList, StringObject}; | use gtk::{gio, StringList, StringObject}; | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ use std::time::Duration; | ||||||
| 
 | 
 | ||||||
| use crate::components::utils::{BASE, DBUS_PATH, WIRELESS}; | use crate::components::utils::{BASE, DBUS_PATH, WIRELESS}; | ||||||
| use crate::components::wifi::utils::get_connection_settings; | use crate::components::wifi::utils::get_connection_settings; | ||||||
| use adw::glib::{Object}; | use adw::glib::Object; | ||||||
| use adw::prelude::{ActionRowExt, ButtonExt, EditableExt, PopoverExt, PreferencesRowExt}; | use adw::prelude::{ActionRowExt, ButtonExt, EditableExt, PopoverExt, PreferencesRowExt}; | ||||||
| use adw::subclass::prelude::ObjectSubclassIsExt; | use adw::subclass::prelude::ObjectSubclassIsExt; | ||||||
| use dbus::blocking::Connection; | use dbus::blocking::Connection; | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| use std::sync::Arc; | use std::sync::Arc; | ||||||
| 
 | 
 | ||||||
| use adw::prelude::{ComboRowExt, PreferencesGroupExt, PreferencesRowExt}; | use adw::prelude::{ComboRowExt, PreferencesGroupExt, PreferencesRowExt}; | ||||||
| use glib::{subclass::types::ObjectSubclassIsExt}; |  | ||||||
| use glib::property::PropertySet; | use glib::property::PropertySet; | ||||||
|  | use glib::subclass::types::ObjectSubclassIsExt; | ||||||
| use gtk::prelude::WidgetExt; | use gtk::prelude::WidgetExt; | ||||||
| use re_set_lib::{ | use re_set_lib::{ | ||||||
|     network::network_structures::WifiStrength, |     network::network_structures::WifiStrength, | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ use adw::prelude::{ActionRowExt, ComboRowExt, PreferencesGroupExt}; | ||||||
| use adw::subclass::prelude::ObjectSubclassIsExt; | use adw::subclass::prelude::ObjectSubclassIsExt; | ||||||
| use dbus::arg::PropMap; | use dbus::arg::PropMap; | ||||||
| use dbus::{Error, Path}; | use dbus::{Error, Path}; | ||||||
| use glib::{clone}; | use glib::clone; | ||||||
| use glib::property::PropertySet; | use glib::property::PropertySet; | ||||||
| use gtk::prelude::{ActionableExt, ButtonExt, EditableExt, ListBoxRowExt, WidgetExt}; | use gtk::prelude::{ActionableExt, ButtonExt, EditableExt, ListBoxRowExt, WidgetExt}; | ||||||
| use re_set_lib::network::connection::{ | use re_set_lib::network::connection::{ | ||||||
|  |  | ||||||
|  | @ -2,13 +2,16 @@ use std::cell::RefCell; | ||||||
| use std::rc::Rc; | use std::rc::Rc; | ||||||
| use std::sync::Arc; | use std::sync::Arc; | ||||||
| 
 | 
 | ||||||
| use adw::BreakpointCondition; |  | ||||||
| use adw::glib::clone; | use adw::glib::clone; | ||||||
| use adw::subclass::prelude::ObjectSubclassIsExt; | use adw::subclass::prelude::ObjectSubclassIsExt; | ||||||
|  | use adw::BreakpointCondition; | ||||||
| use glib::Object; | use glib::Object; | ||||||
| use gtk::{AccessibleRole, Align, Application, FlowBox, FlowBoxChild, Frame, gio, ListBoxRow, Orientation, StateFlags}; |  | ||||||
| use gtk::{DirectionType, prelude::*}; |  | ||||||
| use gtk::gio::ActionEntry; | use gtk::gio::ActionEntry; | ||||||
|  | use gtk::{ | ||||||
|  |     gio, AccessibleRole, Align, Application, FlowBox, FlowBoxChild, Frame, ListBoxRow, Orientation, | ||||||
|  |     StateFlags, | ||||||
|  | }; | ||||||
|  | use gtk::{prelude::*, DirectionType}; | ||||||
| use re_set_lib::utils::plugin_setup::FRONTEND_PLUGINS; | use re_set_lib::utils::plugin_setup::FRONTEND_PLUGINS; | ||||||
| 
 | 
 | ||||||
| use crate::components::base::setting_box::SettingBox; | use crate::components::base::setting_box::SettingBox; | ||||||
|  | @ -157,17 +160,24 @@ impl ReSetWindow { | ||||||
|                 (plugin.frontend_startup)(); |                 (plugin.frontend_startup)(); | ||||||
| 
 | 
 | ||||||
|                 let event = Rc::new( |                 let event = Rc::new( | ||||||
|                     move |reset_main: FlowBox, position: Rc<RefCell<Position>>, boxes: Vec<gtk::Box>| { |                     move |reset_main: FlowBox, | ||||||
|                         if handle_init(listeners.clone(), position, Position::Custom(String::from(sidebar_info.name))) { |                           position: Rc<RefCell<Position>>, | ||||||
|  |                           boxes: Vec<gtk::Box>| { | ||||||
|  |                         if handle_init( | ||||||
|  |                             listeners.clone(), | ||||||
|  |                             position, | ||||||
|  |                             Position::Custom(String::from(sidebar_info.name)), | ||||||
|  |                         ) { | ||||||
|                             return; |                             return; | ||||||
|                         } |                         } | ||||||
|                         reset_main.remove_all(); |                         reset_main.remove_all(); | ||||||
|                         for plugin_box in &boxes { |                         for plugin_box in &boxes { | ||||||
|                             let frame = wrap_in_flow_box_child(SettingBox::new(&plugin_box.clone())); |                             let frame = | ||||||
|  |                                 wrap_in_flow_box_child(SettingBox::new(&plugin_box.clone())); | ||||||
|                             reset_main.insert(&frame, -1); |                             reset_main.insert(&frame, -1); | ||||||
|                         } |                         } | ||||||
|                         reset_main.set_max_children_per_line(boxes.len() as u32); |                         reset_main.set_max_children_per_line(boxes.len() as u32); | ||||||
|                     } |                     }, | ||||||
|                 ); |                 ); | ||||||
| 
 | 
 | ||||||
|                 plugin_sidebar_list.push(PluginSidebarInfo { |                 plugin_sidebar_list.push(PluginSidebarInfo { | ||||||
|  | @ -208,7 +218,7 @@ impl ReSetWindow { | ||||||
|                 self_imp.reset_sidebar_list.insert(&create_separator(), i); |                 self_imp.reset_sidebar_list.insert(&create_separator(), i); | ||||||
|                 i += 1; |                 i += 1; | ||||||
|             } |             } | ||||||
|             let entry = SidebarEntry::new_plugin(&info); |             let entry = SidebarEntry::new(&info); | ||||||
|             self_imp.reset_sidebar_list.insert(&entry, i); |             self_imp.reset_sidebar_list.insert(&entry, i); | ||||||
|             i += 1; |             i += 1; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | @ -1,13 +1,11 @@ | ||||||
| use std::rc::Rc; |  | ||||||
| 
 | 
 | ||||||
|  | use crate::components::plugin::function::{TSideBarInfo}; | ||||||
| use crate::components::window::sidebar_entry_impl; | use crate::components::window::sidebar_entry_impl; | ||||||
| use crate::components::window::sidebar_entry_impl::{SidebarAction}; | use crate::components::window::sidebar_entry_impl::SidebarAction; | ||||||
| use adw::subclass::prelude::ObjectSubclassIsExt; | use adw::subclass::prelude::ObjectSubclassIsExt; | ||||||
| use glib::Object; | use glib::Object; | ||||||
| use gtk::prelude::*; | use gtk::prelude::*; | ||||||
| use crate::components::plugin::function::{PluginSidebarInfo, ReSetSidebarInfo}; |  | ||||||
| 
 | 
 | ||||||
| use super::handle_sidebar_click::HANDLE_HOME; |  | ||||||
| 
 | 
 | ||||||
| glib::wrapper! { | glib::wrapper! { | ||||||
|     pub struct SidebarEntry(ObjectSubclass<sidebar_entry_impl::SidebarEntry>) |     pub struct SidebarEntry(ObjectSubclass<sidebar_entry_impl::SidebarEntry>) | ||||||
|  | @ -16,16 +14,18 @@ glib::wrapper! { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl SidebarEntry { | impl SidebarEntry { | ||||||
|     // TODO: refactor new and new_plugin
 |     pub fn new<T: TSideBarInfo>(info: &T) -> Self { | ||||||
|     pub fn new(info: &ReSetSidebarInfo) -> Self { |  | ||||||
|         let entry: SidebarEntry = Object::builder().build(); |         let entry: SidebarEntry = Object::builder().build(); | ||||||
|         let entry_imp = entry.imp(); |         let entry_imp = entry.imp(); | ||||||
|         entry_imp.reset_sidebar_label.get().set_text(info.name); |         entry_imp.reset_sidebar_label.get().set_text(info.name()); | ||||||
|         entry_imp |         entry_imp | ||||||
|             .reset_sidebar_image |             .reset_sidebar_image | ||||||
|             .set_from_icon_name(Some(info.icon_name)); |             .set_from_icon_name(Some(info.icon_name())); | ||||||
|  |         if let Some(boxes) = info.plugin_boxes() { | ||||||
|  |             entry_imp.plugin_boxes.borrow_mut().extend(boxes); | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         match &info.parent { |         match &info.parent() { | ||||||
|             None => {} |             None => {} | ||||||
|             Some(parent) => { |             Some(parent) => { | ||||||
|                 let mut name = entry_imp.parent.borrow_mut(); |                 let mut name = entry_imp.parent.borrow_mut(); | ||||||
|  | @ -36,41 +36,11 @@ impl SidebarEntry { | ||||||
| 
 | 
 | ||||||
|         { |         { | ||||||
|             let mut name = entry_imp.name.borrow_mut(); |             let mut name = entry_imp.name.borrow_mut(); | ||||||
|             *name = info.name.to_string(); |             *name = info.name().to_string(); | ||||||
|             let mut action = entry_imp.on_click_event.borrow_mut(); |             let mut action = entry_imp.on_click_event.borrow_mut(); | ||||||
|             *action = SidebarAction { |             *action = SidebarAction { | ||||||
|                 on_click_event: Some(info.click_event), |                 on_click_event: info.regular_click_event(), | ||||||
|                 on_plugin_click_event: Rc::new(|_,_,_|{}), |                 on_plugin_click_event: info.plugin_click_event(), | ||||||
|             }; |  | ||||||
|         } |  | ||||||
|         entry |  | ||||||
|     } |  | ||||||
|     
 |  | ||||||
|     pub fn new_plugin(info: &PluginSidebarInfo) -> Self { |  | ||||||
|         let entry: SidebarEntry = Object::builder().build(); |  | ||||||
|         let entry_imp = entry.imp(); |  | ||||||
|         entry_imp.reset_sidebar_label.get().set_text(info.name); |  | ||||||
|         entry_imp |  | ||||||
|             .reset_sidebar_image |  | ||||||
|             .set_from_icon_name(Some(info.icon_name)); |  | ||||||
|         entry_imp.plugin_boxes.borrow_mut().extend(info.plugin_boxes.clone()); |  | ||||||
|         
 |  | ||||||
|         match &info.parent { |  | ||||||
|             None => {} |  | ||||||
|             Some(parent) => { |  | ||||||
|                 let mut name = entry_imp.parent.borrow_mut(); |  | ||||||
|                 *name = parent.to_string(); |  | ||||||
|                 entry.child().unwrap().set_margin_start(30); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         
 |  | ||||||
|         { |  | ||||||
|             let mut name = entry_imp.name.borrow_mut(); |  | ||||||
|             *name = info.name.to_string(); |  | ||||||
|             let mut action = entry_imp.on_click_event.borrow_mut(); |  | ||||||
|             *action = SidebarAction { |  | ||||||
|                 on_click_event: None, |  | ||||||
|                 on_plugin_click_event: info.click_event.clone(), |  | ||||||
|             }; |             }; | ||||||
|         } |         } | ||||||
|         entry |         entry | ||||||
|  |  | ||||||
|  | @ -1,20 +1,20 @@ | ||||||
| use std::cell::{Cell, RefCell}; | use std::cell::RefCell; | ||||||
| use std::rc::Rc; | use std::rc::Rc; | ||||||
| use std::sync::Arc; |  | ||||||
| 
 | 
 | ||||||
| use glib::subclass::InitializingObject; | use glib::subclass::InitializingObject; | ||||||
| use gtk::{CompositeTemplate, FlowBox, Image, Label, ListBoxRow}; |  | ||||||
| use gtk::subclass::prelude::*; | use gtk::subclass::prelude::*; | ||||||
|  | use gtk::{CompositeTemplate, Image, Label, ListBoxRow}; | ||||||
| 
 | 
 | ||||||
| use crate::components::base::utils::{Listeners, Position}; | use crate::components::plugin::function::{PluginClickEvent, RegularClickEvent}; | ||||||
| use crate::components::window::handle_sidebar_click::HANDLE_HOME; | use crate::components::window::handle_sidebar_click::HANDLE_HOME; | ||||||
| use crate::components::window::sidebar_entry; | use crate::components::window::sidebar_entry; | ||||||
| 
 | 
 | ||||||
| #[derive(Default)] | #[derive(Default)] | ||||||
| pub enum Categories { | pub enum Categories { | ||||||
|     Connectivity, |     // TODO: are these ever used ?
 | ||||||
|     Audio, |     // Connectivity,
 | ||||||
|     Peripherals, |     // Audio,
 | ||||||
|  |     // Peripherals,
 | ||||||
|     #[default] |     #[default] | ||||||
|     Misc, |     Misc, | ||||||
| } | } | ||||||
|  | @ -33,15 +33,15 @@ pub struct SidebarEntry { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub struct SidebarAction { | pub struct SidebarAction { | ||||||
|     pub on_click_event: Option<fn(Arc<Listeners>, FlowBox, Rc<RefCell<Position>>)>, |     pub on_click_event: Option<RegularClickEvent>, | ||||||
|     pub on_plugin_click_event: Rc<dyn Fn(FlowBox, Rc<RefCell<Position>>, Vec<gtk::Box>)>, |     pub on_plugin_click_event: PluginClickEvent, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Default for SidebarAction { | impl Default for SidebarAction { | ||||||
|     fn default() -> Self { |     fn default() -> Self { | ||||||
|         Self { |         Self { | ||||||
|             on_click_event: Some(HANDLE_HOME), |             on_click_event: Some(HANDLE_HOME), | ||||||
|             on_plugin_click_event: Rc::new(|_,_,_|{}), |             on_plugin_click_event: Rc::new(|_, _, _| {}), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 takotori
						takotori