diff --git a/README.md b/README.md
index 1736e5be..93233793 100644
--- a/README.md
+++ b/README.md
@@ -58,12 +58,13 @@ ## Download
|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
| [64‑bit](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_Windows_64-bit.msi) \| [32‑bit](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_Windows_32-bit.msi) | [Intel](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_macOS_Intel.dmg) \| [Apple silicon](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_macOS_AppleSilicon.dmg) | [amd64](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_LinuxDEB_amd64.deb) \| [arm64](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_LinuxDEB_arm64.deb) \| [i386](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_LinuxDEB_i386.deb) \| [armhf](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_LinuxDEB_armhf.deb) | [x86_64](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_LinuxRPM_x86_64.rpm) \| [aarch64](https://github.com/GyulyVGC/sniffnet/releases/latest/download/Sniffnet_LinuxRPM_aarch64.rpm) |
+Links in the table above will download the latest version of Sniffnet directly from [GitHub releases](https://github.com/GyulyVGC/sniffnet/releases).
+
> [!NOTE]
>
> Remember to also install the [required dependencies](https://github.com/GyulyVGC/sniffnet/wiki/Required-dependencies) for your operating system.
-Links in the table above will download the latest version of Sniffnet directly from [GitHub releases](https://github.com/GyulyVGC/sniffnet/releases).
-Alternative installation methods are reported in the following:
+**Alternative installation methods** are reported in the following:
@@ -185,9 +186,10 @@ ## Features
## User manual
-If you want to learn more, it’s recommended to check out the [Sniffnet Wiki](https://github.com/GyulyVGC/sniffnet/wiki),
-a **comprehensive manual** to help you thoroughly master the application, from basic setup to the most advanced functionalities.
-The wiki includes step-by-step guides, examples of usage, tips, and answers to frequently asked questions.
+Do you want to **learn more**?
+Check out the [**Sniffnet Wiki**](https://github.com/GyulyVGC/sniffnet/wiki), a comprehensive manual to help you
+thoroughly master the application from a basic setup to the most advanced functionalities.
+The wiki includes step-by-step guides, examples of usage, tips, and answers to frequent questions.
diff --git a/resources/fonts/subset/icons.ttf b/resources/fonts/subset/icons.ttf
index dbe3cb95..4a725cfc 100644
Binary files a/resources/fonts/subset/icons.ttf and b/resources/fonts/subset/icons.ttf differ
diff --git a/src/gui/pages/settings_general_page.rs b/src/gui/pages/settings_general_page.rs
index aaaef01e..3aa05b2b 100644
--- a/src/gui/pages/settings_general_page.rs
+++ b/src/gui/pages/settings_general_page.rs
@@ -4,7 +4,7 @@
use iced::widget::text::LineHeight;
use iced::widget::tooltip::Position;
use iced::widget::{
- button, horizontal_space, Column, Container, PickList, Row, Rule, Slider, Space, Text, Tooltip,
+ button, vertical_space, Column, Container, PickList, Row, Rule, Slider, Space, Text, Tooltip,
};
use iced::{Alignment, Font, Length};
@@ -20,10 +20,12 @@
use crate::translations::translations::language_translation;
use crate::translations::translations_2::country_translation;
use crate::translations::translations_3::{
- mmdb_files_translation, params_not_editable_translation, zoom_translation,
+ mmdb_files_translation, need_help_translation, params_not_editable_translation,
+ zoom_translation,
};
use crate::utils::formatted_strings::get_path_termination_string;
use crate::utils::types::file_info::FileInfo;
+use crate::utils::types::icon::Icon;
use crate::utils::types::web_page::WebPage;
use crate::{ConfigSettings, Language, RunningPage, Sniffer, StyleType};
@@ -106,12 +108,12 @@ fn row_language_scale_factor(
) -> Row<'static, Message, StyleType> {
Row::new()
.align_items(Alignment::Start)
- .height(90)
+ .height(100)
.push(language_picklist(language, font))
.push(Rule::vertical(25))
.push(scale_factor_slider(language, font, scale_factor))
.push(Rule::vertical(25))
- .push(horizontal_space())
+ .push(need_help(language, font))
}
fn language_picklist(language: Language, font: Font) -> Container<'static, Message, StyleType> {
@@ -145,7 +147,6 @@ fn language_picklist(language: Language, font: Font) -> Container<'static, Messa
}
let content = Column::new()
- .spacing(5)
.align_items(Alignment::Center)
.push(
Text::new(language_translation(language))
@@ -153,7 +154,9 @@ fn language_picklist(language: Language, font: Font) -> Container<'static, Messa
.size(FONT_SIZE_SUBTITLE)
.font(font),
)
+ .push(vertical_space())
.push(flag_row)
+ .push(Space::with_height(10))
.push(
PickList::new(
&Language::ALL[..],
@@ -162,7 +165,8 @@ fn language_picklist(language: Language, font: Font) -> Container<'static, Messa
)
.padding([2, 7])
.font(font),
- );
+ )
+ .push(vertical_space());
Container::new(content)
.width(Length::Fill)
@@ -179,7 +183,6 @@ fn scale_factor_slider(
let slider_width = 150.0 / scale_factor as f32;
Container::new(
Column::new()
- .spacing(5)
.align_items(Alignment::Center)
.push(
Text::new(zoom_translation(language))
@@ -187,18 +190,59 @@ fn scale_factor_slider(
.size(FONT_SIZE_SUBTITLE)
.font(font),
)
+ .push(vertical_space())
.push(Text::new(format!("x{scale_factor:.2}")).font(font))
+ .push(Space::with_height(5))
.push(
Slider::new(0.5..=1.5, scale_factor, Message::ChangeScaleFactor)
.step(0.05)
.width(slider_width),
- ),
+ )
+ .push(vertical_space()),
)
.width(Length::Fill)
.align_x(Horizontal::Center)
.align_y(Vertical::Center)
}
+fn need_help(language: Language, font: Font) -> Container<'static, Message, StyleType> {
+ let content = Column::new()
+ .align_items(Alignment::Center)
+ .push(
+ Text::new(need_help_translation(language))
+ .style(TextType::Subtitle)
+ .size(FONT_SIZE_SUBTITLE)
+ .font(font),
+ )
+ .push(vertical_space())
+ .push(
+ Tooltip::new(
+ button(
+ Icon::Book
+ .to_text()
+ .vertical_alignment(Vertical::Center)
+ .horizontal_alignment(Horizontal::Center)
+ .size(22)
+ .line_height(LineHeight::Relative(1.0)),
+ )
+ .on_press(Message::OpenWebPage(WebPage::Wiki))
+ .padding(2)
+ .height(40)
+ .width(60),
+ row_open_link_tooltip("Sniffnet Wiki", font),
+ Position::Right,
+ )
+ .gap(5)
+ .style(ContainerType::Tooltip),
+ )
+ .push(vertical_space());
+
+ Container::new(content)
+ .width(Length::Fill)
+ .align_x(Horizontal::Center)
+ .align_y(Vertical::Center)
+}
+
fn mmdb_settings(
is_editable: bool,
language: Language,
diff --git a/src/translations/translations_3.rs b/src/translations/translations_3.rs
index 2d63b0c5..034c10a4 100644
--- a/src/translations/translations_3.rs
+++ b/src/translations/translations_3.rs
@@ -193,3 +193,11 @@ pub fn thumbnail_mode_translation(language: Language) -> &'static str {
_ => "Thumbnail mode",
}
}
+
+pub fn need_help_translation(language: Language) -> &'static str {
+ match language {
+ Language::EN => "Do you need help?",
+ Language::IT => "Hai bisogno di aiuto?",
+ _ => "Do you need help?",
+ }
+}
diff --git a/src/utils/types/icon.rs b/src/utils/types/icon.rs
index da6fe1fa..eb15010d 100644
--- a/src/utils/types/icon.rs
+++ b/src/utils/types/icon.rs
@@ -11,6 +11,7 @@ pub enum Icon {
AudioHigh,
AudioMute,
Bin,
+ Book,
BytesThreshold,
Clock,
Copy,
@@ -87,6 +88,7 @@ pub fn codepoint(&self) -> char {
Icon::OpenLink => 'o',
Icon::ThumbnailOpen => 's',
Icon::ThumbnailClose => 'r',
+ Icon::Book => 'B',
}
}
diff --git a/src/utils/types/web_page.rs b/src/utils/types/web_page.rs
index c98e728a..de3b04ae 100644
--- a/src/utils/types/web_page.rs
+++ b/src/utils/types/web_page.rs
@@ -11,6 +11,8 @@ pub enum WebPage {
Sponsor,
/// Sniffnet issue #60 on GitHub
IssueLanguages,
+ /// Sniffnet Wiki
+ Wiki,
}
impl WebPage {
@@ -21,6 +23,7 @@ pub fn get_url(&self) -> &str {
WebPage::Sponsor => "https://github.com/sponsors/GyulyVGC",
WebPage::WebsiteDownload => "https://www.sniffnet.net/download/",
WebPage::IssueLanguages => "https://github.com/GyulyVGC/sniffnet/issues/60",
+ WebPage::Wiki => "https://github.com/GyulyVGC/sniffnet/wiki",
}
}
}