mirror of
https://github.com/mikedilger/gossip.git
synced 2024-09-19 11:43:43 +00:00
Put settings in a scroll area
This commit is contained in:
parent
8703bbbf19
commit
cdf402c6b5
@ -3,187 +3,189 @@ use crate::comms::ToOverlordMessage;
|
|||||||
use crate::GLOBALS;
|
use crate::GLOBALS;
|
||||||
use eframe::egui;
|
use eframe::egui;
|
||||||
use egui::widgets::{Button, Slider};
|
use egui::widgets::{Button, Slider};
|
||||||
use egui::{Align, Context, Layout, Ui};
|
use egui::{Align, Context, Layout, ScrollArea, Ui};
|
||||||
|
|
||||||
pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Frame, ui: &mut Ui) {
|
pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Frame, ui: &mut Ui) {
|
||||||
ui.heading("Settings");
|
ui.heading("Settings");
|
||||||
|
|
||||||
ui.add_space(12.0);
|
ScrollArea::vertical().show(ui, |ui| {
|
||||||
ui.separator();
|
ui.add_space(12.0);
|
||||||
ui.add_space(12.0);
|
ui.separator();
|
||||||
|
ui.add_space(12.0);
|
||||||
|
|
||||||
ui.heading("How Many Relays to Query");
|
ui.heading("How Many Relays to Query");
|
||||||
|
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.label("Number of relays to query per person: ").on_hover_text("We will query N relays per person. Many people share the same relays so those will be queried about multiple people. Takes affect on restart. I recommend 2 or 3.");
|
ui.label("Number of relays to query per person: ").on_hover_text("We will query N relays per person. Many people share the same relays so those will be queried about multiple people. Takes affect on restart. I recommend 2 or 3.");
|
||||||
ui.add(Slider::new(&mut app.settings.num_relays_per_person, 1..=6).text("relays"));
|
ui.add(Slider::new(&mut app.settings.num_relays_per_person, 1..=6).text("relays"));
|
||||||
});
|
});
|
||||||
|
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.label("Maximum total number of relays to query: ")
|
ui.label("Maximum total number of relays to query: ")
|
||||||
.on_hover_text(
|
.on_hover_text(
|
||||||
"We will not connect to more than this many relays. Takes affect on restart.",
|
"We will not connect to more than this many relays. Takes affect on restart.",
|
||||||
);
|
);
|
||||||
ui.add(Slider::new(&mut app.settings.max_relays, 1..=50).text("relays"));
|
ui.add(Slider::new(&mut app.settings.max_relays, 1..=50).text("relays"));
|
||||||
});
|
});
|
||||||
|
|
||||||
ui.add_space(12.0);
|
ui.add_space(12.0);
|
||||||
ui.separator();
|
ui.separator();
|
||||||
ui.add_space(12.0);
|
ui.add_space(12.0);
|
||||||
|
|
||||||
ui.heading("How Many Posts to Load");
|
ui.heading("How Many Posts to Load");
|
||||||
|
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.label("Feed Chunk: ").on_hover_text("This is the amount of time backwards from now that we will load events from. You'll eventually be able to load more, one chunk at a time. Mostly takes effect on restart.");
|
ui.label("Feed Chunk: ").on_hover_text("This is the amount of time backwards from now that we will load events from. You'll eventually be able to load more, one chunk at a time. Mostly takes effect on restart.");
|
||||||
ui.add(Slider::new(&mut app.settings.feed_chunk, 600..=86400).text("seconds, "));
|
ui.add(Slider::new(&mut app.settings.feed_chunk, 600..=86400).text("seconds, "));
|
||||||
ui.label(secs_to_string(app.settings.feed_chunk));
|
ui.label(secs_to_string(app.settings.feed_chunk));
|
||||||
});
|
});
|
||||||
|
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.label("Overlap: ").on_hover_text("If we recently loaded events up to time T, but restarted, we will now load events starting from time T minus overlap. Takes effect on restart. I recommend 300 (5 minutes).");
|
ui.label("Overlap: ").on_hover_text("If we recently loaded events up to time T, but restarted, we will now load events starting from time T minus overlap. Takes effect on restart. I recommend 300 (5 minutes).");
|
||||||
ui.add(Slider::new(&mut app.settings.overlap, 0..=3600).text("seconds, "));
|
ui.add(Slider::new(&mut app.settings.overlap, 0..=3600).text("seconds, "));
|
||||||
ui.label(secs_to_string(app.settings.overlap));
|
ui.label(secs_to_string(app.settings.overlap));
|
||||||
});
|
});
|
||||||
|
|
||||||
ui.add_space(12.0);
|
ui.add_space(12.0);
|
||||||
ui.separator();
|
ui.separator();
|
||||||
ui.add_space(12.0);
|
ui.add_space(12.0);
|
||||||
|
|
||||||
ui.heading("Feed");
|
ui.heading("Feed");
|
||||||
|
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.label("Recompute feed every (milliseconds): ")
|
ui.label("Recompute feed every (milliseconds): ")
|
||||||
.on_hover_text(
|
.on_hover_text(
|
||||||
"The UI redraws frequently. We recompute the feed less frequently to conserve CPU. Takes effect when the feed next recomputes. I recommend 3500.",
|
"The UI redraws frequently. We recompute the feed less frequently to conserve CPU. Takes effect when the feed next recomputes. I recommend 3500.",
|
||||||
);
|
);
|
||||||
ui.add(Slider::new(&mut app.settings.feed_recompute_interval_ms, 250..=5000).text("milliseconds"));
|
ui.add(Slider::new(&mut app.settings.feed_recompute_interval_ms, 250..=5000).text("milliseconds"));
|
||||||
});
|
});
|
||||||
|
|
||||||
ui.add_space(12.0);
|
ui.add_space(12.0);
|
||||||
ui.separator();
|
ui.separator();
|
||||||
ui.add_space(12.0);
|
ui.add_space(12.0);
|
||||||
|
|
||||||
ui.heading("What Posts to Include");
|
ui.heading("What Posts to Include");
|
||||||
|
|
||||||
ui.checkbox(
|
|
||||||
&mut app.settings.thread_view_ancestors,
|
|
||||||
"In thread view, view entire ancestoral line of a post, not just it's parent (not yet implemented)",
|
|
||||||
);
|
|
||||||
|
|
||||||
ui.checkbox(
|
|
||||||
&mut app.settings.thread_view_replies,
|
|
||||||
"In thread view, view all replies to a post recursively on down (not yet implemented)",
|
|
||||||
);
|
|
||||||
|
|
||||||
ui.add_space(12.0);
|
|
||||||
ui.separator();
|
|
||||||
ui.add_space(12.0);
|
|
||||||
|
|
||||||
ui.heading("Posting");
|
|
||||||
|
|
||||||
ui.horizontal(|ui| {
|
|
||||||
ui.label("Proof of Work: ")
|
|
||||||
.on_hover_text("The larger the number, the longer it takes.");
|
|
||||||
ui.add(Slider::new(&mut app.settings.pow, 0..=40).text("leading zeroes"));
|
|
||||||
});
|
|
||||||
|
|
||||||
ui.add_space(12.0);
|
|
||||||
|
|
||||||
ui.checkbox(
|
|
||||||
&mut app.settings.set_client_tag,
|
|
||||||
"Add tag [\"client\",\"gossip\"] to posts",
|
|
||||||
)
|
|
||||||
.on_hover_text("Takes effect immediately.");
|
|
||||||
|
|
||||||
ui.add_space(12.0);
|
|
||||||
ui.separator();
|
|
||||||
ui.add_space(12.0);
|
|
||||||
|
|
||||||
ui.heading("Network");
|
|
||||||
|
|
||||||
ui.checkbox(&mut app.settings.offline, "Offline Mode")
|
|
||||||
.on_hover_text("If selected, no network requests will be issued. Takes effect on restart.");
|
|
||||||
|
|
||||||
ui.add_space(12.0);
|
|
||||||
ui.separator();
|
|
||||||
ui.add_space(12.0);
|
|
||||||
|
|
||||||
ui.heading("User Interface");
|
|
||||||
|
|
||||||
ui.horizontal(|ui| {
|
|
||||||
ui.label("Switch to");
|
|
||||||
#[allow(clippy::collapsible_else_if)]
|
|
||||||
if app.settings.light_mode {
|
|
||||||
if ui
|
|
||||||
.add(Button::new("🌙 Dark"))
|
|
||||||
.on_hover_text("Switch to dark mode")
|
|
||||||
.clicked()
|
|
||||||
{
|
|
||||||
ui.ctx().set_visuals(super::style::dark_mode_visuals());
|
|
||||||
app.settings.light_mode = false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ui
|
|
||||||
.add(Button::new("☀ Light"))
|
|
||||||
.on_hover_text("Switch to light mode")
|
|
||||||
.clicked()
|
|
||||||
{
|
|
||||||
ui.ctx().set_visuals(super::style::light_mode_visuals());
|
|
||||||
app.settings.light_mode = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
ui.horizontal(|ui| {
|
|
||||||
ui.label("Override DPI: ")
|
|
||||||
.on_hover_text(
|
|
||||||
"On some systems, DPI is not reported properly. In other cases, people like to zoom in or out. This lets you.",
|
|
||||||
);
|
|
||||||
ui.checkbox(
|
ui.checkbox(
|
||||||
&mut app.override_dpi,
|
&mut app.settings.thread_view_ancestors,
|
||||||
"Override to ");
|
"In thread view, view entire ancestoral line of a post, not just it's parent (not yet implemented)",
|
||||||
ui.add(Slider::new(&mut app.override_dpi_value, 72..=250).text("DPI"));
|
);
|
||||||
|
|
||||||
// set real setting if changed
|
ui.checkbox(
|
||||||
app.settings.override_dpi = if app.override_dpi {
|
&mut app.settings.thread_view_replies,
|
||||||
Some(app.override_dpi_value)
|
"In thread view, view all replies to a post recursively on down (not yet implemented)",
|
||||||
} else {
|
);
|
||||||
None
|
|
||||||
};
|
ui.add_space(12.0);
|
||||||
});
|
ui.separator();
|
||||||
|
ui.add_space(12.0);
|
||||||
|
|
||||||
|
ui.heading("Posting");
|
||||||
|
|
||||||
|
ui.horizontal(|ui| {
|
||||||
|
ui.label("Proof of Work: ")
|
||||||
|
.on_hover_text("The larger the number, the longer it takes.");
|
||||||
|
ui.add(Slider::new(&mut app.settings.pow, 0..=40).text("leading zeroes"));
|
||||||
|
});
|
||||||
|
|
||||||
|
ui.add_space(12.0);
|
||||||
|
|
||||||
|
ui.checkbox(
|
||||||
|
&mut app.settings.set_client_tag,
|
||||||
|
"Add tag [\"client\",\"gossip\"] to posts",
|
||||||
|
)
|
||||||
|
.on_hover_text("Takes effect immediately.");
|
||||||
|
|
||||||
|
ui.add_space(12.0);
|
||||||
|
ui.separator();
|
||||||
|
ui.add_space(12.0);
|
||||||
|
|
||||||
|
ui.heading("Network");
|
||||||
|
|
||||||
|
ui.checkbox(&mut app.settings.offline, "Offline Mode")
|
||||||
|
.on_hover_text("If selected, no network requests will be issued. Takes effect on restart.");
|
||||||
|
|
||||||
|
ui.add_space(12.0);
|
||||||
|
ui.separator();
|
||||||
|
ui.add_space(12.0);
|
||||||
|
|
||||||
|
ui.heading("User Interface");
|
||||||
|
|
||||||
|
ui.horizontal(|ui| {
|
||||||
|
ui.label("Switch to");
|
||||||
|
#[allow(clippy::collapsible_else_if)]
|
||||||
|
if app.settings.light_mode {
|
||||||
|
if ui
|
||||||
|
.add(Button::new("🌙 Dark"))
|
||||||
|
.on_hover_text("Switch to dark mode")
|
||||||
|
.clicked()
|
||||||
|
{
|
||||||
|
ui.ctx().set_visuals(super::style::dark_mode_visuals());
|
||||||
|
app.settings.light_mode = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ui
|
||||||
|
.add(Button::new("☀ Light"))
|
||||||
|
.on_hover_text("Switch to light mode")
|
||||||
|
.clicked()
|
||||||
|
{
|
||||||
|
ui.ctx().set_visuals(super::style::light_mode_visuals());
|
||||||
|
app.settings.light_mode = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
ui.horizontal(|ui| {
|
||||||
|
ui.label("Override DPI: ")
|
||||||
|
.on_hover_text(
|
||||||
|
"On some systems, DPI is not reported properly. In other cases, people like to zoom in or out. This lets you.",
|
||||||
|
);
|
||||||
|
ui.checkbox(
|
||||||
|
&mut app.override_dpi,
|
||||||
|
"Override to ");
|
||||||
|
ui.add(Slider::new(&mut app.override_dpi_value, 72..=250).text("DPI"));
|
||||||
|
|
||||||
|
// set real setting if changed
|
||||||
|
app.settings.override_dpi = if app.override_dpi {
|
||||||
|
Some(app.override_dpi_value)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
ui.add_space(12.0);
|
ui.add_space(12.0);
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.label("Maximum FPS: ")
|
ui.label("Maximum FPS: ")
|
||||||
.on_hover_text(
|
.on_hover_text(
|
||||||
"The UI redraws every frame. By limiting the maximum FPS you can reduce load on your CPU. Takes effect immediately. I recommend 10, maybe even less.",
|
"The UI redraws every frame. By limiting the maximum FPS you can reduce load on your CPU. Takes effect immediately. I recommend 10, maybe even less.",
|
||||||
);
|
);
|
||||||
ui.add(Slider::new(&mut app.settings.max_fps, 2..=60).text("Frames per second"));
|
ui.add(Slider::new(&mut app.settings.max_fps, 2..=60).text("Frames per second"));
|
||||||
});
|
});
|
||||||
|
|
||||||
ui.add_space(12.0);
|
ui.add_space(12.0);
|
||||||
ui.separator();
|
ui.separator();
|
||||||
ui.add_space(12.0);
|
ui.add_space(12.0);
|
||||||
|
|
||||||
if ui.button("Prune Database")
|
if ui.button("Prune Database")
|
||||||
.on_hover_text("This will delete overridden events, events older than a week, and related data while keeping everything important. It make make Gossip somewhat unresponsive until it is complete.")
|
.on_hover_text("This will delete overridden events, events older than a week, and related data while keeping everything important. It make make Gossip somewhat unresponsive until it is complete.")
|
||||||
.clicked() {
|
.clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage::PruneDatabase);
|
let _ = GLOBALS.to_overlord.send(ToOverlordMessage::PruneDatabase);
|
||||||
}
|
}
|
||||||
|
|
||||||
ui.add_space(12.0);
|
ui.add_space(12.0);
|
||||||
ui.separator();
|
ui.separator();
|
||||||
ui.add_space(24.0);
|
ui.add_space(24.0);
|
||||||
|
|
||||||
ui.with_layout(Layout::top_down(Align::Center), |ui| {
|
ui.with_layout(Layout::top_down(Align::Center), |ui| {
|
||||||
if ui.button("SAVE CHANGES").clicked() {
|
if ui.button("SAVE CHANGES").clicked() {
|
||||||
// Copy local settings to global settings
|
// Copy local settings to global settings
|
||||||
*GLOBALS.settings.blocking_write() = app.settings.clone();
|
*GLOBALS.settings.blocking_write() = app.settings.clone();
|
||||||
|
|
||||||
// Tell the overlord to save them
|
// Tell the overlord to save them
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage::SaveSettings);
|
let _ = GLOBALS.to_overlord.send(ToOverlordMessage::SaveSettings);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user