add active filters info in overview page

This commit is contained in:
GyulyVGC
2025-08-17 14:39:21 +02:00
parent ee175b6a43
commit f129c3b784
5 changed files with 71 additions and 88 deletions

View File

@@ -51,7 +51,6 @@ pub fn initial_page(sniffer: &Sniffer) -> Container<'_, Message, StyleType> {
let col_checkboxes = Column::new()
.spacing(10)
.push(Space::with_height(66))
.push(get_filters_group(&sniffer.filters, font, language))
.push_maybe(get_export_pcap_group_maybe(
sniffer.capture_source_picklist,
@@ -64,6 +63,7 @@ pub fn initial_page(sniffer: &Sniffer) -> Container<'_, Message, StyleType> {
let right_col = Column::new()
.width(FillPortion(1))
.padding(10)
.push(Space::with_height(76))
.push(col_checkboxes)
.push(vertical_space())
.push(button_start(
@@ -98,7 +98,7 @@ fn button_start<'a>(
.align_x(alignment::Alignment::Center)
.align_y(alignment::Alignment::Center),
)
.padding(15)
.padding(20)
.width(Length::Fill)
.class(ButtonType::Gradient(color_gradient))
.on_press_maybe(if is_capture_source_consistent {

View File

@@ -12,22 +12,24 @@
use crate::gui::styles::container::ContainerType;
use crate::gui::styles::rule::RuleType;
use crate::gui::styles::scrollbar::ScrollbarType;
use crate::gui::styles::style_constants::FONT_SIZE_TITLE;
use crate::gui::styles::style_constants::{FONT_SIZE_FOOTER, FONT_SIZE_TITLE};
use crate::gui::styles::text::TextType;
use crate::gui::styles::types::palette_extension::PaletteExtension;
use crate::gui::types::filters::Filters;
use crate::gui::types::message::Message;
use crate::networking::types::capture_context::CaptureSource;
use crate::networking::types::data_info::DataInfo;
use crate::networking::types::data_info_host::DataInfoHost;
use crate::networking::types::data_representation::DataRepr;
use crate::networking::types::host::Host;
use crate::networking::types::my_link_type::MyLinkType;
use crate::networking::types::service::Service;
use crate::report::get_report_entries::{get_host_entries, get_service_entries};
use crate::report::types::search_parameters::SearchParameters;
use crate::report::types::sort_type::SortType;
use crate::translations::translations::{
active_filters_translation, error_translation, incoming_translation, no_addresses_translation,
outgoing_translation, traffic_rate_translation, waiting_translation,
none_translation, outgoing_translation, traffic_rate_translation, waiting_translation,
};
use crate::translations::translations_2::{
data_representation_translation, dropped_translation, host_translation,
@@ -74,7 +76,6 @@ pub fn overview_page(sniffer: &Sniffer) -> Container<'_, Message, StyleType> {
if tot_packets == 0 {
// no packets observed at all
// TODO: add info about the capture filters (if any) in the method called below
body = body_no_packets(&sniffer.capture_source, font, language, dots);
} else {
// some packets are there!
@@ -112,7 +113,6 @@ pub fn overview_page(sniffer: &Sniffer) -> Container<'_, Message, StyleType> {
Container::new(Column::new().push(tab_and_body.push(body))).height(Length::Fill)
}
// TODO: add info about active filters if any
fn body_no_packets<'a>(
cs: &CaptureSource,
font: Font,
@@ -436,7 +436,7 @@ fn col_info(sniffer: &Sniffer) -> Container<'_, Message, StyleType> {
} = sniffer.configs.settings;
let PaletteExtension { font, .. } = style.get_extension();
let col_device = col_device(language, font, &sniffer.capture_source);
let col_device = col_device(language, font, &sniffer.capture_source, &sniffer.filters);
let col_data_representation =
col_data_representation(language, font, sniffer.traffic_chart.data_repr);
@@ -496,6 +496,7 @@ fn col_device<'a>(
language: Language,
font: Font,
cs: &CaptureSource,
filters: &'a Filters,
) -> Column<'a, Message, StyleType> {
let link_type = cs.get_link_type();
#[cfg(not(target_os = "windows"))]
@@ -503,15 +504,34 @@ fn col_device<'a>(
#[cfg(target_os = "windows")]
let cs_info = cs.get_desc().unwrap_or(cs.get_name());
let filters_desc = if filters.is_some_filter_active() {
filters.bpf()
} else {
none_translation(language)
};
Column::new()
.height(Length::Fill)
.spacing(10)
.push(
Column::new()
.push(
Text::new(format!("{}:", cs.title(language)))
.class(TextType::Subtitle)
.font(font),
)
.push(
Row::new()
.spacing(10)
.push(Text::new(format!(" {}", &cs_info)).font(font))
.push(get_link_type_tooltip(link_type, language, font)),
),
)
.push(TextType::highlighted_subtitle_with_desc(
cs.title(language),
&cs_info,
active_filters_translation(language),
filters_desc,
font,
))
.push(link_type.link_type_col(language, font))
}
fn col_data_representation<'a>(
@@ -731,25 +751,16 @@ fn get_star_button<'a>(is_favorite: bool, host: Host) -> Button<'a, Message, Sty
.on_press(Message::AddOrRemoveFavorite(host, !is_favorite))
}
fn get_active_filters_tooltip(
bpf: &str,
fn get_link_type_tooltip<'a>(
link_type: MyLinkType,
language: Language,
font: Font,
) -> Tooltip<'_, Message, StyleType> {
let mut ret_val = Column::new().push(
Text::new(active_filters_translation(language))
.font(font)
.class(TextType::Subtitle),
);
ret_val = ret_val.push(Row::new().push(Text::new(bpf).font(font)));
) -> Tooltip<'a, Message, StyleType> {
Tooltip::new(
Container::new(
Icon::Funnel
.to_text()
Text::new("i")
.size(FONT_SIZE_FOOTER)
.font(font)
.size(15)
.line_height(LineHeight::Relative(1.0)),
)
.align_x(Alignment::Center)
@@ -757,7 +768,7 @@ fn get_active_filters_tooltip(
.height(20)
.width(20)
.class(ContainerType::BadgeInfo),
ret_val,
Text::new(link_type.full_print_on_one_line(language)).font(font),
Position::FollowCursor,
)
.class(ContainerType::Tooltip)

View File

@@ -64,7 +64,9 @@ fn active(&self, style: &StyleType) -> Style {
radius: match self {
ButtonType::Neutral => 0.0.into(),
ButtonType::TabActive | ButtonType::TabInactive => Radius::new(0).bottom(30),
ButtonType::BorderedRound | ButtonType::BorderedRoundSelected => 12.0.into(),
ButtonType::BorderedRound
| ButtonType::BorderedRoundSelected
| ButtonType::Gradient(_) => 12.0.into(),
ButtonType::Starred | ButtonType::NotStarred => 100.0.into(),
_ => BORDER_BUTTON_RADIUS.into(),
},
@@ -154,7 +156,9 @@ fn hovered(&self, style: &StyleType) -> Style {
radius: match self {
ButtonType::Neutral => 0.0.into(),
ButtonType::TabActive | ButtonType::TabInactive => Radius::new(0).bottom(30),
ButtonType::BorderedRound | ButtonType::BorderedRoundSelected => 12.0.into(),
ButtonType::BorderedRound
| ButtonType::BorderedRoundSelected
| ButtonType::Gradient(_) => 12.0.into(),
ButtonType::Starred | ButtonType::NotStarred => 100.0.into(),
_ => BORDER_BUTTON_RADIUS.into(),
},
@@ -208,7 +212,7 @@ fn disabled(&self, style: &StyleType) -> Style {
_ => Background::Color(ext.buttons_color),
}),
border: Border {
radius: BORDER_BUTTON_RADIUS.into(),
radius: 12.0.into(),
width: BORDER_WIDTH,
color: Color {
a: ext.alpha_chart_badge,

View File

@@ -1,11 +1,7 @@
use iced::Font;
use iced::widget::Column;
use pcap::Linktype;
use crate::gui::styles::text::TextType;
use crate::gui::types::message::Message;
use crate::Language;
use crate::translations::translations_3::link_type_translation;
use crate::{Language, StyleType};
/// Currently supported link types
#[derive(Copy, Clone, Default)]
@@ -57,32 +53,4 @@ pub fn full_print_on_one_line(self, language: Language) -> String {
Self::NotYetAssigned => String::new(),
}
}
pub fn link_type_col<'a>(
self,
language: Language,
font: Font,
) -> Column<'a, Message, StyleType> {
match self {
Self::Null(l)
| Self::Ethernet(l)
| Self::RawIp(l)
| Self::Loop(l)
| Self::IPv4(l)
| Self::IPv6(l)
| Self::Unsupported(l) => {
let link_info = format!(
"{} ({})",
l.get_name().unwrap_or_else(|_| l.0.to_string()),
l.get_description().unwrap_or_else(|_| String::new())
);
TextType::highlighted_subtitle_with_desc(
link_type_translation(language),
&link_info,
font,
)
}
Self::NotYetAssigned => Column::new().height(0),
}
}
}

View File

@@ -60,33 +60,33 @@
// }
// }
pub fn select_filters_translation<'a>(language: Language) -> Text<'a, StyleType> {
Text::new(match language {
Language::EN => "Select filters to be applied on network traffic",
Language::IT => "Seleziona i filtri da applicare al traffico di rete",
Language::FR => "Sélectionnez les filtres à appliquer sur le traffic réseau",
Language::ES => "Seleccionar los filtros que se aplicarán al tráfico de red",
Language::PL => "Wybierz filtry, które mają być zastosowane na ruchu sieciowym",
Language::DE => "Wähle die Filter, die auf den Netzwerkverkehr angewendet werden sollen",
Language::UK => "Виберіть фільтри, які мають бути застосовані до мережевого руху",
Language::ZH => "选择需要监控的目标",
Language::ZH_TW => "選取要套用於網路流量的篩選器",
Language::RO => "Selectați filtre pentru traficul de rețea",
Language::KO => "네트워크 트레픽에 적용할 필터 선택",
Language::TR => "Ağ trafiğine uygulanacak filtreleri seçiniz",
Language::RU => "Выберите фильтры для применения к сетевому трафику",
Language::PT => "Selecione os filtros a serem aplicados no tráfego de rede",
Language::EL => "Επίλεξε τα φίλτρα για εφαρμογή στην κίνηση του δικτύου",
// Language::FA => "صافی ها را جهت اعمال بر آمد و شد شبکه انتخاب کنید",
Language::SV => "Välj filtren som ska appliceras på nätverkstrafiken",
Language::FI => "Valitse suodattimet verkkoliikenteelle",
Language::JA => "トラフィックに適用するフィルターを選択してください",
Language::UZ => "Tarmoq trafigiga qo'llaniladigan filtrlarni tanlang",
Language::VI => "Hãy chọn bộ lọc cho lưu lượng mạng",
Language::ID => "Pilih filter yang ingin dipasang dilalulintas jaringan",
Language::NL => "Selecteer filters om toe te passen op netwerkverkeer",
})
}
// pub fn select_filters_translation<'a>(language: Language) -> Text<'a, StyleType> {
// Text::new(match language {
// Language::EN => "Select filters to be applied on network traffic",
// Language::IT => "Seleziona i filtri da applicare al traffico di rete",
// Language::FR => "Sélectionnez les filtres à appliquer sur le traffic réseau",
// Language::ES => "Seleccionar los filtros que se aplicarán al tráfico de red",
// Language::PL => "Wybierz filtry, które mają być zastosowane na ruchu sieciowym",
// Language::DE => "Wähle die Filter, die auf den Netzwerkverkehr angewendet werden sollen",
// Language::UK => "Виберіть фільтри, які мають бути застосовані до мережевого руху",
// Language::ZH => "选择需要监控的目标",
// Language::ZH_TW => "選取要套用於網路流量的篩選器",
// Language::RO => "Selectați filtre pentru traficul de rețea",
// Language::KO => "네트워크 트레픽에 적용할 필터 선택",
// Language::TR => "Ağ trafiğine uygulanacak filtreleri seçiniz",
// Language::RU => "Выберите фильтры для применения к сетевому трафику",
// Language::PT => "Selecione os filtros a serem aplicados no tráfego de rede",
// Language::EL => "Επίλεξε τα φίλτρα για εφαρμογή στην κίνηση του δικτύου",
// // Language::FA => "صافی ها را جهت اعمال بر آمد و شد شبکه انتخاب کنید",
// Language::SV => "Välj filtren som ska appliceras på nätverkstrafiken",
// Language::FI => "Valitse suodattimet verkkoliikenteelle",
// Language::JA => "トラフィックに適用するフィルターを選択してください",
// Language::UZ => "Tarmoq trafigiga qo'llaniladigan filtrlarni tanlang",
// Language::VI => "Hãy chọn bộ lọc cho lưu lượng mạng",
// Language::ID => "Pilih filter yang ingin dipasang dilalulintas jaringan",
// Language::NL => "Selecteer filters om toe te passen op netwerkverkeer",
// })
// }
pub fn start_translation(language: Language) -> &'static str {
match language {