logger: add a popup menu to clear the logs

Add a way to clear the logs.
This commit is contained in:
Stéphane Cerveau 2022-02-18 16:52:07 +01:00
parent aaaa58072c
commit 39554d8d99
3 changed files with 37 additions and 0 deletions

View file

@ -272,6 +272,8 @@ impl GPSApp {
application.add_action(&gio::SimpleAction::new("favorite.remove", None)); application.add_action(&gio::SimpleAction::new("favorite.remove", None));
application.add_action(&gio::SimpleAction::new("logger.clear", None));
application.add_action(&gio::SimpleAction::new("graph.check", None)); application.add_action(&gio::SimpleAction::new("graph.check", None));
application.add_action(&gio::SimpleAction::new("graph.pipeline_details", None)); application.add_action(&gio::SimpleAction::new("graph.pipeline_details", None));

View file

@ -60,6 +60,14 @@
<attribute name="action">app.favorite.remove</attribute> <attribute name="action">app.favorite.remove</attribute>
</item> </item>
</section> </section>
</menu>
<menu id="logger_menu">
<section>
<item>
<attribute name="label" translatable="yes" comments="logger menu entry clear the logs">_Clear</attribute>
<attribute name="action">app.logger.clear</attribute>
</item>
</section>
</menu> </menu>
<menu id="node_menu"> <menu id="node_menu">
<section> <section>

View file

@ -9,6 +9,7 @@
use crate::app::GPSApp; use crate::app::GPSApp;
use crate::ui::treeview; use crate::ui::treeview;
use gtk::prelude::*; use gtk::prelude::*;
use gtk::{gio, glib};
use gtk::{ListStore, TreeView}; use gtk::{ListStore, TreeView};
@ -30,6 +31,32 @@ pub fn setup_logger_list(app: &GPSApp) {
.object("treeview-logger") .object("treeview-logger")
.expect("Couldn't get treeview-logger"); .expect("Couldn't get treeview-logger");
reset_logger_list(&logger_list); reset_logger_list(&logger_list);
let gesture = gtk::GestureClick::new();
gesture.set_button(0);
let app_weak = app.downgrade();
gesture.connect_pressed(
glib::clone!(@weak logger_list => move |gesture, _n_press, x, y| {
let app = upgrade_weak!(app_weak);
if gesture.current_button() == gtk::gdk::BUTTON_SECONDARY {
let pop_menu = app.app_pop_menu_at_position(&logger_list, x, y);
let menu: gio::MenuModel = app
.builder
.object("logger_menu")
.expect("Couldn't get fav_menu model");
pop_menu.set_menu_model(Some(&menu));
app.connect_app_menu_action("logger.clear",
move |_,_| {
reset_logger_list(&logger_list);
}
);
pop_menu.show();
}
}),
);
logger_list.add_controller(&gesture);
} }
pub fn add_to_logger_list(app: &GPSApp, log_entry: &str) { pub fn add_to_logger_list(app: &GPSApp, log_entry: &str) {