mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-07-05 20:51:42 +02:00
feat(bar): network widget - added show_default_interface and use enable to toggle the whole widget
This commit is contained in:
+67
-60
@@ -27,6 +27,8 @@ pub struct NetworkConfig {
|
|||||||
pub show_total_data_transmitted: bool,
|
pub show_total_data_transmitted: bool,
|
||||||
/// Show network activity
|
/// Show network activity
|
||||||
pub show_network_activity: bool,
|
pub show_network_activity: bool,
|
||||||
|
/// Show default interface
|
||||||
|
pub show_default_interface: Option<bool>,
|
||||||
/// Characters to reserve for network activity data
|
/// Characters to reserve for network activity data
|
||||||
pub network_activity_fill_characters: Option<usize>,
|
pub network_activity_fill_characters: Option<usize>,
|
||||||
/// Data refresh interval (default: 10 seconds)
|
/// Data refresh interval (default: 10 seconds)
|
||||||
@@ -41,12 +43,13 @@ impl From<NetworkConfig> for Network {
|
|||||||
|
|
||||||
Self {
|
Self {
|
||||||
enable: value.enable,
|
enable: value.enable,
|
||||||
|
show_total_activity: value.show_total_data_transmitted,
|
||||||
|
show_activity: value.show_network_activity,
|
||||||
|
show_default_interface: value.show_default_interface.unwrap_or(true),
|
||||||
networks_network_activity: Networks::new_with_refreshed_list(),
|
networks_network_activity: Networks::new_with_refreshed_list(),
|
||||||
default_interface: String::new(),
|
default_interface: String::new(),
|
||||||
data_refresh_interval,
|
data_refresh_interval,
|
||||||
label_prefix: value.label_prefix.unwrap_or(LabelPrefix::Icon),
|
label_prefix: value.label_prefix.unwrap_or(LabelPrefix::Icon),
|
||||||
show_total_activity: value.show_total_data_transmitted,
|
|
||||||
show_activity: value.show_network_activity,
|
|
||||||
network_activity_fill_characters: value
|
network_activity_fill_characters: value
|
||||||
.network_activity_fill_characters
|
.network_activity_fill_characters
|
||||||
.unwrap_or_default(),
|
.unwrap_or_default(),
|
||||||
@@ -63,6 +66,7 @@ pub struct Network {
|
|||||||
pub enable: bool,
|
pub enable: bool,
|
||||||
pub show_total_activity: bool,
|
pub show_total_activity: bool,
|
||||||
pub show_activity: bool,
|
pub show_activity: bool,
|
||||||
|
pub show_default_interface: bool,
|
||||||
networks_network_activity: Networks,
|
networks_network_activity: Networks,
|
||||||
data_refresh_interval: u64,
|
data_refresh_interval: u64,
|
||||||
label_prefix: LabelPrefix,
|
label_prefix: LabelPrefix,
|
||||||
@@ -250,69 +254,72 @@ impl Network {
|
|||||||
|
|
||||||
impl BarWidget for Network {
|
impl BarWidget for Network {
|
||||||
fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConfig) {
|
fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConfig) {
|
||||||
if self.show_total_activity || self.show_activity {
|
|
||||||
let (activity, total_activity) = self.network_activity();
|
|
||||||
|
|
||||||
if self.show_total_activity {
|
|
||||||
for reading in total_activity {
|
|
||||||
config.apply_on_widget(true, ui, |ui| {
|
|
||||||
ui.add(self.reading_to_label(ctx, reading));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.show_activity {
|
|
||||||
for reading in activity {
|
|
||||||
config.apply_on_widget(true, ui, |ui| {
|
|
||||||
ui.add(self.reading_to_label(ctx, reading));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.enable {
|
if self.enable {
|
||||||
self.default_interface();
|
if self.show_total_activity || self.show_activity {
|
||||||
|
let (activity, total_activity) = self.network_activity();
|
||||||
|
|
||||||
if !self.default_interface.is_empty() {
|
if self.show_total_activity {
|
||||||
let font_id = ctx
|
for reading in total_activity {
|
||||||
.style()
|
config.apply_on_widget(true, ui, |ui| {
|
||||||
.text_styles
|
ui.add(self.reading_to_label(ctx, reading));
|
||||||
.get(&TextStyle::Body)
|
});
|
||||||
.cloned()
|
}
|
||||||
.unwrap_or_else(FontId::default);
|
|
||||||
|
|
||||||
let mut layout_job = LayoutJob::simple(
|
|
||||||
match self.label_prefix {
|
|
||||||
LabelPrefix::Icon | LabelPrefix::IconAndText => {
|
|
||||||
egui_phosphor::regular::WIFI_HIGH.to_string()
|
|
||||||
}
|
|
||||||
LabelPrefix::None | LabelPrefix::Text => String::new(),
|
|
||||||
},
|
|
||||||
font_id.clone(),
|
|
||||||
ctx.style().visuals.selection.stroke.color,
|
|
||||||
100.0,
|
|
||||||
);
|
|
||||||
|
|
||||||
if let LabelPrefix::Text | LabelPrefix::IconAndText = self.label_prefix {
|
|
||||||
self.default_interface.insert_str(0, "NET: ");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
layout_job.append(
|
if self.show_activity {
|
||||||
&self.default_interface,
|
for reading in activity {
|
||||||
10.0,
|
config.apply_on_widget(true, ui, |ui| {
|
||||||
TextFormat::simple(font_id, ctx.style().visuals.text_color()),
|
ui.add(self.reading_to_label(ctx, reading));
|
||||||
);
|
});
|
||||||
|
|
||||||
config.apply_on_widget(false, ui, |ui| {
|
|
||||||
if SelectableFrame::new(false)
|
|
||||||
.show(ui, |ui| ui.add(Label::new(layout_job).selectable(false)))
|
|
||||||
.clicked()
|
|
||||||
{
|
|
||||||
if let Err(error) = Command::new("cmd.exe").args(["/C", "ncpa"]).spawn() {
|
|
||||||
eprintln!("{}", error)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.show_default_interface {
|
||||||
|
self.default_interface();
|
||||||
|
|
||||||
|
if !self.default_interface.is_empty() {
|
||||||
|
let font_id = ctx
|
||||||
|
.style()
|
||||||
|
.text_styles
|
||||||
|
.get(&TextStyle::Body)
|
||||||
|
.cloned()
|
||||||
|
.unwrap_or_else(FontId::default);
|
||||||
|
|
||||||
|
let mut layout_job = LayoutJob::simple(
|
||||||
|
match self.label_prefix {
|
||||||
|
LabelPrefix::Icon | LabelPrefix::IconAndText => {
|
||||||
|
egui_phosphor::regular::WIFI_HIGH.to_string()
|
||||||
|
}
|
||||||
|
LabelPrefix::None | LabelPrefix::Text => String::new(),
|
||||||
|
},
|
||||||
|
font_id.clone(),
|
||||||
|
ctx.style().visuals.selection.stroke.color,
|
||||||
|
100.0,
|
||||||
|
);
|
||||||
|
|
||||||
|
if let LabelPrefix::Text | LabelPrefix::IconAndText = self.label_prefix {
|
||||||
|
self.default_interface.insert_str(0, "NET: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
layout_job.append(
|
||||||
|
&self.default_interface,
|
||||||
|
10.0,
|
||||||
|
TextFormat::simple(font_id, ctx.style().visuals.text_color()),
|
||||||
|
);
|
||||||
|
|
||||||
|
config.apply_on_widget(false, ui, |ui| {
|
||||||
|
if SelectableFrame::new(false)
|
||||||
|
.show(ui, |ui| ui.add(Label::new(layout_job).selectable(false)))
|
||||||
|
.clicked()
|
||||||
|
{
|
||||||
|
if let Err(error) = Command::new("cmd.exe").args(["/C", "ncpa"]).spawn()
|
||||||
|
{
|
||||||
|
eprintln!("{}", error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user