diff --git a/src/gui/pages/initial_page.rs b/src/gui/pages/initial_page.rs index 105b7647..b079c6fe 100644 --- a/src/gui/pages/initial_page.rs +++ b/src/gui/pages/initial_page.rs @@ -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 { diff --git a/src/gui/pages/overview_page.rs b/src/gui/pages/overview_page.rs index 083e2d71..979b6e05 100644 --- a/src/gui/pages/overview_page.rs +++ b/src/gui/pages/overview_page.rs @@ -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) diff --git a/src/gui/styles/button.rs b/src/gui/styles/button.rs index f65e8265..899e19e3 100644 --- a/src/gui/styles/button.rs +++ b/src/gui/styles/button.rs @@ -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, diff --git a/src/networking/types/my_link_type.rs b/src/networking/types/my_link_type.rs index d9d74dd4..4730523b 100644 --- a/src/networking/types/my_link_type.rs +++ b/src/networking/types/my_link_type.rs @@ -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), - } - } } diff --git a/src/translations/translations.rs b/src/translations/translations.rs index c0d9fcd4..f1c92a01 100644 --- a/src/translations/translations.rs +++ b/src/translations/translations.rs @@ -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 {