sysd-manager 2.19.4

Application to empower user to manage their <b>systemd units</b> via Graphical User Interface. Not only are you able to make changes to the enablement and running status of each of the units, but you will also be able to view and modify their unit files and check the journal logs.
use gtk::{glib, prelude::*, subclass::prelude::*};

use crate::{
    systemd::{data::UnitInfo, errors::SystemdErrors},
    widget::InterPanelMessage,
};
use base::enums::UnitDBusLevel;

use super::UnitControlPanel;

mod imp;

glib::wrapper! {
    pub struct SideControlPanel(ObjectSubclass<imp::SideControlPanelImpl>)
    @extends gtk::Box, gtk::Widget,
    @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}

impl SideControlPanel {
    pub fn new(unit_control_panel: &UnitControlPanel) -> Self {
        let obj: SideControlPanel = glib::Object::new();
        obj.imp().init(unit_control_panel);
        obj
    }

    pub fn unlink_child(&self, is_signal: bool) {
        self.imp().unlink_child(is_signal);
    }

    pub fn set_inter_message(&self, action: &InterPanelMessage) {
        self.imp().set_inter_message(action);
    }

    pub fn add_toast_message(&self, message: &str, use_markup: bool) {
        if let Some(parent) = self.imp().control_panel() {
            parent.add_toast_message(message, use_markup);
        }
    }

    pub fn call_method(
        &self,
        method_name: &str,
        need_selected_unit: bool,
        button: &impl IsA<gtk::Widget>,
        systemd_method: impl Fn(Option<(UnitDBusLevel, String)>) -> Result<(), SystemdErrors>
        + std::marker::Send
        + 'static,
        return_handle: impl Fn(&str, Option<&UnitInfo>, Result<(), SystemdErrors>, &UnitControlPanel)
        + 'static,
    ) {
        if let Some(parent) = self.imp().control_panel() {
            parent.call_method(
                method_name,
                need_selected_unit,
                button,
                systemd_method,
                return_handle,
            );
        }
    }

    pub fn more_action_popover_shown(&self) {
        self.imp().more_action_popover_shown();
    }
}