Skip to content
API Documentation
BastionGuard™
DashboardPage Class Reference

#include <DashboardPage.hpp>

Inheritance diagram for DashboardPage:

Public Member Functions

 DashboardPage ()
 ~DashboardPage () override
void update_from_logs (const std::string &log_path, const Glib::ustring &db_version, bool on_access_enabled)
bool update_from_logs ()

Private Member Functions

void check_updates_async ()
bool on_update_check_timer ()
void set_update_status (const std::string &state)
Gtk::Frame * make_card (const std::string &icon_path, Gtk::Widget &content, const Glib::ustring &title)

Private Attributes

Gtk::Label lbl_title_
Gtk::Grid grid_cards_
Gtk::Frame * card_status_ = nullptr
Gtk::Frame * card_db_version_ = nullptr
Gtk::Frame * card_db_date_ = nullptr
Gtk::Frame * card_logs_ = nullptr
Gtk::Label lbl_status_
Gtk::Label lbl_db_version_
Gtk::Label lbl_db_date_
Gtk::Label lbl_ransomware_status_
Gtk::Label lbl_phishing_status_
Gtk::TextView txt_onaccess_report_
Glib::RefPtr< Gtk::TextBuffer > buf_onaccess_report_
Gtk::Box * footer_box_ = nullptr
Gtk::Label lbl_update_status_
Gtk::Button * btn_theme_light_ = nullptr
Gtk::Button * btn_theme_dark_ = nullptr
sigc::connection update_check_timer_
bool update_check_in_progress_ = false
sigc::connection refresh_timer_
BastionGuard::AliveFlag alive_ = BastionGuard::make_alive_flag()

Detailed Description

Definition at line 27 of file DashboardPage.hpp.

Constructor & Destructor Documentation

◆ DashboardPage()

DashboardPage::DashboardPage ( )

Definition at line 91 of file DashboardPage.cpp.

92: Gtk::Box(Gtk::Orientation::VERTICAL, 16),
93 lbl_title_("<b>Dashboard BastionGuard Endpoint</b>", Gtk::Align::START),
95 lbl_status_(_("Inizializzazione...")),
96 lbl_db_version_(_("Versione firme: sconosciuta")),
97 lbl_db_date_(_("Data aggiornamento: sconosciuta")),
98 lbl_ransomware_status_(_("Anti-Ransomware: stato sconosciuto")),
99 lbl_phishing_status_(_("Anti-Phishing: stato sconosciuto"))
100{
101 set_margin(20);
102 set_hexpand(true);
103 set_halign(Gtk::Align::FILL);
104
105
106 lbl_title_.set_use_markup(true);
107 lbl_title_.set_margin_bottom(12);
108 lbl_title_.get_style_context()->add_class("title");
109 append(lbl_title_);
110
111
112 grid_cards_.set_row_spacing(20);
113 grid_cards_.set_column_spacing(20);
114 grid_cards_.set_column_homogeneous(true);
115 grid_cards_.set_hexpand(true);
116 grid_cards_.set_halign(Gtk::Align::FILL);
117
118
119 auto vbox_status = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 6);
120 vbox_status->append(lbl_status_);
121 vbox_status->append(lbl_ransomware_status_);
122 vbox_status->append(lbl_phishing_status_);
123
124
125 card_status_ = make_card(resource("icons/status.svg"), *vbox_status, _("Stato"));
126 card_db_version_ = make_card(resource("icons/version.svg"), lbl_db_version_, _("Versione Firme"));
127 card_db_date_ = make_card(resource("icons/update-date.svg"), lbl_db_date_, _("Ultimo aggiornamento"));
128
129
130 grid_cards_.attach(*card_status_, 0, 0, 1, 1);
131 grid_cards_.attach(*card_db_version_, 1, 0, 1, 1);
132 grid_cards_.attach(*card_db_date_, 2, 0, 1, 1);
133 append(grid_cards_);
134
135
136 buf_onaccess_report_ = Gtk::TextBuffer::create();
138 txt_onaccess_report_.set_editable(false);
139 txt_onaccess_report_.set_wrap_mode(Gtk::WrapMode::WORD_CHAR);
140 txt_onaccess_report_.set_vexpand(true);
141
142 card_logs_ = make_card(resource("icons/log-dash.svg"), txt_onaccess_report_, _("Ultimi file scansionati"));
143 append(*card_logs_);
144
145 auto spacer = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL);
146 spacer->set_vexpand(false); // <-- IMPORTANTE
147 append(*spacer);
148
149 footer_box_ = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::HORIZONTAL);
150 footer_box_->set_hexpand(true);
151 footer_box_->set_halign(Gtk::Align::FILL);
152 footer_box_->set_margin_top(12);
153 footer_box_->set_spacing(4);
154
155 {
156 auto applyTheme = [this](const std::string& themeId) {
157 std::string cssFile;
158 if (themeId == "dark")
159 cssFile = Glib::build_filename(DATA_DIR, "BastionGuard-dark.css");
160 else
161 cssFile = Glib::build_filename(DATA_DIR, "BastionGuard.css");
162 if (!std::filesystem::exists(cssFile)) {
163 char self_path[1024] = {};
164 ssize_t n = readlink("/proc/self/exe", self_path, sizeof(self_path) - 1);
165 if (n > 0) {
166 std::string exeDir =
167 std::filesystem::path(self_path).parent_path().string();
168 std::string candidate = exeDir + "/" +
169 (themeId == "dark" ? "BastionGuard-dark.css" : "BastionGuard.css");
170 if (std::filesystem::exists(candidate))
171 cssFile = candidate;
172 }
173 }
174
175 if (!std::filesystem::exists(cssFile)) {
176 std::cerr << "[BastionGuard] CSS non trovato: " << cssFile << "\n";
177 return;
178 }
179
180 try {
181 auto provider = Gtk::CssProvider::create();
182 provider->load_from_path(cssFile);
183 Gtk::StyleContext::add_provider_for_display(
184 Gdk::Display::get_default(),
185 provider,
186 GTK_STYLE_PROVIDER_PRIORITY_USER);
187 } catch (const Glib::Error& e) {
188 std::cerr << "[BastionGuard] Errore CSS: " << e.what() << "\n";
189 return;
190 }
191
192 std::string cfgDir = Glib::get_home_dir() + "/.config/BastionGuard";
193 std::filesystem::create_directories(cfgDir);
194 std::ofstream tf(cfgDir + "/theme.conf", std::ios::trunc);
195 tf << themeId;
196
197 btn_theme_light_->get_style_context()->remove_class("theme-btn-active");
198 btn_theme_dark_->get_style_context()->remove_class("theme-btn-active");
199 if (themeId == "dark")
200 btn_theme_dark_->get_style_context()->add_class("theme-btn-active");
201 else
202 btn_theme_light_->get_style_context()->add_class("theme-btn-active");
203 };
204
205 btn_theme_light_ = Gtk::make_managed<Gtk::Button>("☀");
206 btn_theme_light_->set_tooltip_text(_("Tema Chiaro"));
207 btn_theme_light_->get_style_context()->add_class("flat");
208 btn_theme_light_->get_style_context()->add_class("theme-btn");
209 btn_theme_light_->signal_clicked().connect([applyTheme]() { applyTheme("light"); });
210
211 btn_theme_dark_ = Gtk::make_managed<Gtk::Button>("🌙");
212 btn_theme_dark_->set_tooltip_text(_("Tema Scuro"));
213 btn_theme_dark_->get_style_context()->add_class("flat");
214 btn_theme_dark_->get_style_context()->add_class("theme-btn");
215 btn_theme_dark_->signal_clicked().connect([applyTheme]() { applyTheme("dark"); });
216
217 {
218 std::string saved;
219 std::ifstream tf(Glib::get_home_dir() + "/.config/BastionGuard/theme.conf");
220 tf >> saved;
221 if (saved == "dark")
222 btn_theme_dark_->get_style_context()->add_class("theme-btn-active");
223 else
224 btn_theme_light_->get_style_context()->add_class("theme-btn-active");
225 }
226
229 }
230
231 lbl_update_status_.set_text(_("Verifica aggiornamenti..."));
232 lbl_update_status_.set_halign(Gtk::Align::END);
233 lbl_update_status_.set_hexpand(true);
234 lbl_update_status_.set_xalign(1.0f);
235
236 auto ctx = lbl_update_status_.get_style_context();
237 ctx->add_class("update-badge");
238 ctx->add_class("update-checking");
239
241 append(*footer_box_);
242
243
244 refresh_timer_ = Glib::signal_timeout().connect(
245 sigc::mem_fun(*this,
246 static_cast<bool(DashboardPage::*)()>(&DashboardPage::update_from_logs)),
247 5000
248 );
250 update_check_timer_ = Glib::signal_timeout().connect(
251 sigc::mem_fun(*this, &DashboardPage::on_update_check_timer),
252 6 * 60 * 60 * 1000
253 );
254}
#define _(s)
Gtk::Frame * make_card(const std::string &icon_path, Gtk::Widget &content, const Glib::ustring &title)
Gtk::Label lbl_title_
Gtk::Frame * card_db_date_
Gtk::Grid grid_cards_
Gtk::Label lbl_update_status_
Gtk::Frame * card_status_
Gtk::Frame * card_db_version_
sigc::connection update_check_timer_
Gtk::Label lbl_ransomware_status_
Gtk::Button * btn_theme_light_
void check_updates_async()
Gtk::Frame * card_logs_
Gtk::Label lbl_db_version_
Gtk::Box * footer_box_
Gtk::Label lbl_db_date_
Gtk::Label lbl_phishing_status_
Gtk::Button * btn_theme_dark_
Gtk::TextView txt_onaccess_report_
bool on_update_check_timer()
Gtk::Label lbl_status_
sigc::connection refresh_timer_
Glib::RefPtr< Gtk::TextBuffer > buf_onaccess_report_
std::string resource(const std::string &rel)
Definition Resource.hpp:31
#define DATA_DIR
Definition Resource.hpp:28

References _, btn_theme_dark_, btn_theme_light_, buf_onaccess_report_, card_db_date_, card_db_version_, card_logs_, card_status_, check_updates_async(), DashboardPage(), DATA_DIR, footer_box_, grid_cards_, lbl_db_date_, lbl_db_version_, lbl_phishing_status_, lbl_ransomware_status_, lbl_status_, lbl_title_, lbl_update_status_, make_card(), on_update_check_timer(), refresh_timer_, resource(), txt_onaccess_report_, update_check_timer_, and update_from_logs().

Referenced by check_updates_async(), and DashboardPage().

◆ ~DashboardPage()

DashboardPage::~DashboardPage ( )
override

Definition at line 83 of file DashboardPage.cpp.

84{
85 if (alive_) alive_->store(false, std::memory_order_release);
86 if (refresh_timer_.connected()) refresh_timer_.disconnect();
87 if (update_check_timer_.connected()) update_check_timer_.disconnect();
88}
BastionGuard::AliveFlag alive_

References alive_, refresh_timer_, and update_check_timer_.

Member Function Documentation

◆ check_updates_async()

void DashboardPage::check_updates_async ( )
private

Definition at line 262 of file DashboardPage.cpp.

263{
265 return;
267
268 const char* url = "https://bastionguard.eu/version.php";
269
270 SoupSession* session = soup_session_new();
271 g_object_set(session, "timeout", 10, NULL);
272
273 SoupMessage* msg = soup_message_new("GET", url);
274
275 // Passiamo via user_data una coppia (this, alive_flag) allocata sullo heap:
276 // se la pagina viene distrutta prima del callback async, alive_flag->load()
277 // è false e il callback fa early-return.
278 struct CheckUpdateCtx {
279 DashboardPage* self;
281 };
282 auto* ctx = new CheckUpdateCtx{this, alive_};
283
284 soup_session_send_and_read_async(
285 session,
286 msg,
287 G_PRIORITY_DEFAULT,
288 nullptr,
289 +[](GObject* source, GAsyncResult* res, gpointer user_data) {
290
291 std::unique_ptr<CheckUpdateCtx> ctx(
292 static_cast<CheckUpdateCtx*>(user_data));
293 DashboardPage* self = ctx->self;
294 auto alive = ctx->alive;
295
296 SoupSession* session = SOUP_SESSION(source);
297
298 GError* error = nullptr;
299 GBytes* bytes = soup_session_send_and_read_finish(session, res, &error);
300
301 if (!alive->load()) {
302 if (bytes) g_bytes_unref(bytes);
303 if (error) g_error_free(error);
304 g_object_unref(session);
305 return;
306 }
307
308 if (error || !bytes) {
309 Glib::signal_idle().connect_once([self, alive]{
310 BastionGuard::if_alive(alive, [self]{
311 self->update_check_in_progress_ = false;
312 self->set_update_status("error");
313 });
314 });
315
316 if (error) g_error_free(error);
317 g_object_unref(session);
318 return;
319 }
320
321 gsize size = 0;
322 const char* data = static_cast<const char*>(g_bytes_get_data(bytes, &size));
323 std::string body(data, size);
324 g_bytes_unref(bytes);
325
326 std::istringstream iss(body);
327 std::string line;
328 std::string remote_version = "0.0";
329 int remote_build = 0;
330
331 try {
332 while (std::getline(iss, line)) {
333 if (!line.empty() && line.back() == '\r')
334 line.pop_back();
335
336 if (line.rfind("version=", 0) == 0) {
337 remote_version = line.substr(8);
338 } else if (line.rfind("build=", 0) == 0) {
339 remote_build = std::stoi(line.substr(6));
340 }
341 }
342 } catch (...) {
343 Glib::signal_idle().connect_once([self, alive]{
344 BastionGuard::if_alive(alive, [self]{
345 self->update_check_in_progress_ = false;
346 self->set_update_status("error");
347 });
348 });
349
350 g_object_unref(session);
351 return;
352 }
353
354 const std::string local_version = Backend::getAppVersion();
355 const int local_build = Backend::getAppBuild();
356
357 bool update_available = false;
358
359 int vcmp = compare_semver(local_version, remote_version);
360 if (vcmp < 0) update_available = true;
361 else if (vcmp == 0 && remote_build > local_build) update_available = true;
362
363 Glib::signal_idle().connect_once([self, alive, update_available, remote_version, remote_build]{
364 BastionGuard::if_alive(alive, [self, update_available, &remote_version, remote_build]{
365 self->update_check_in_progress_ = false;
366
367 self->set_update_status(update_available ? "update" : "ok");
368 self->lbl_update_status_.set_tooltip_text(
369 Glib::ustring::compose(
370 _("Remoto: %1 (%2)"),
371 remote_version,
372 std::to_string(remote_build)
373 )
374 );
375 });
376 });
377
378 g_object_unref(session);
379 },
380 ctx
381 );
382
383 g_object_unref(msg);
384}
static int compare_semver(const std::string &a, const std::string &b)
static int getAppBuild()
Definition Backend.cpp:78
static std::string getAppVersion()
Definition Backend.cpp:70
void set_update_status(const std::string &state)
bool update_check_in_progress_
void if_alive(const AliveFlag &alive, Fn &&fn)
std::shared_ptr< std::atomic< bool > > AliveFlag

References _, alive_, compare_semver(), DashboardPage(), Backend::getAppBuild(), Backend::getAppVersion(), BastionGuard::if_alive(), lbl_update_status_, set_update_status(), and update_check_in_progress_.

Referenced by DashboardPage(), and on_update_check_timer().

◆ make_card()

Gtk::Frame * DashboardPage::make_card ( const std::string & icon_path,
Gtk::Widget & content,
const Glib::ustring & title )
private

Definition at line 452 of file DashboardPage.cpp.

455{
456 auto frame = Gtk::make_managed<Gtk::Frame>();
457 frame->get_style_context()->add_class("card");
458 frame->set_margin_bottom(10);
459 frame->set_hexpand(true);
460 frame->set_halign(Gtk::Align::FILL);
461
462 auto hbox = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::HORIZONTAL, 12);
463 hbox->set_margin(12);
464 hbox->set_hexpand(true);
465 hbox->set_halign(Gtk::Align::FILL);
466
467
468 auto icon_box = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL);
469 icon_box->set_size_request(64, 64);
470 icon_box->set_halign(Gtk::Align::START);
471 icon_box->set_valign(Gtk::Align::START);
472
473 auto pic = Gtk::make_managed<Gtk::Picture>();
474 try {
475 auto pb = Gdk::Pixbuf::create_from_file(icon_path);
476 auto scaled = pb->scale_simple(64, 64, Gdk::InterpType::BILINEAR);
477 auto tex = Gdk::Texture::create_for_pixbuf(scaled);
478 pic->set_paintable(tex);
479 pic->set_content_fit(Gtk::ContentFit::FILL);
480 pic->set_keep_aspect_ratio(true);
481 } catch (...) {
482 std::cerr << _("⚠ Impossibile caricare icona: ") << icon_path << "\n";
483 }
484
485 icon_box->append(*pic);
486 hbox->append(*icon_box);
487
488
489 auto vbox = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 6);
490 vbox->set_hexpand(true);
491 vbox->set_halign(Gtk::Align::FILL);
492
493 auto lbl_title = Gtk::make_managed<Gtk::Label>();
494 lbl_title->set_markup("<b>" + title + "</b>");
495 lbl_title->set_halign(Gtk::Align::START);
496
497 if (auto lbl = dynamic_cast<Gtk::Label*>(&content)) {
498 lbl->set_wrap(true);
499 lbl->set_wrap_mode(Pango::WrapMode::WORD_CHAR);
500 lbl->set_ellipsize(Pango::EllipsizeMode::NONE);
501 lbl->set_xalign(0.0);
502 lbl->set_hexpand(true);
503 lbl->set_halign(Gtk::Align::FILL);
504 }
505
506 vbox->append(*lbl_title);
507 vbox->append(content);
508
509 hbox->append(*vbox);
510 frame->set_child(*hbox);
511
512 return frame;
513}

References _.

Referenced by DashboardPage().

◆ on_update_check_timer()

bool DashboardPage::on_update_check_timer ( )
private

Definition at line 257 of file DashboardPage.cpp.

257 {
259 return true;
260}

References check_updates_async().

Referenced by DashboardPage().

◆ set_update_status()

void DashboardPage::set_update_status ( const std::string & state)
private

Definition at line 388 of file DashboardPage.cpp.

389{
390 auto ctx = lbl_update_status_.get_style_context();
391
392 ctx->add_class("update-badge");
393
394 ctx->remove_class("update-ok");
395 ctx->remove_class("update-warn");
396 ctx->remove_class("update-unk");
397 ctx->remove_class("update-checking");
398
399 if (state == "ok") {
400 ctx->add_class("update-ok");
401 lbl_update_status_.set_text(_("Aggiornato"));
402 }
403 else if (state == "update") {
404 ctx->add_class("update-warn");
405 lbl_update_status_.set_text(_("Aggiornamento disponibile"));
406 }
407 else if (state == "checking") {
408 ctx->add_class("update-checking");
409 lbl_update_status_.set_text(_("Verifica aggiornamenti..."));
410 }
411 else {
412 ctx->add_class("update-unk");
413 lbl_update_status_.set_text(_("Impossibile verificare"));
414 }
415}

References _, and lbl_update_status_.

Referenced by check_updates_async().

◆ update_from_logs() [1/2]

bool DashboardPage::update_from_logs ( )

Definition at line 519 of file DashboardPage.cpp.

519 {
521 return true;
522}
static bool isClamonaccActive()
Definition Backend.cpp:467
static std::string getDbVersion()
Definition Backend.cpp:556
void update_from_logs(const std::string &log_path, const Glib::ustring &db_version, bool on_access_enabled)

References Backend::getDbVersion(), Backend::isClamonaccActive(), and update_from_logs().

◆ update_from_logs() [2/2]

void DashboardPage::update_from_logs ( const std::string & log_path,
const Glib::ustring & db_version,
bool on_access_enabled )

Definition at line 525 of file DashboardPage.cpp.

528{
529
530 lbl_status_.set_markup(_("<b>Antivirus engine:</b> <span foreground='green'><b>Attivo</b></span>"));
531
532 if (!db_version.empty() && db_version != _("sconosciuta")) {
533 lbl_db_version_.set_text(db_version);
534 } else {
535 lbl_db_version_.set_text(_("Versione firme: sconosciuta"));
536 }
537
538 auto update_date = Backend::getLastUpdateDate();
539 if (!update_date.empty())
540 lbl_db_date_.set_text(update_date);
541 else
542 lbl_db_date_.set_text(_("Data aggiornamento: sconosciuta"));
543
544
545 auto events = Backend::getOnAccessEvents();
546
547 if (!events.empty()) {
548 std::ostringstream oss;
549
550
551 int count = 0;
552 for (auto it = events.rbegin(); it != events.rend() && count < 2; ++it, ++count) {
553 oss << "• " << *it << "\n";
554 }
555
556 buf_onaccess_report_->set_text(oss.str());
557 } else {
558 buf_onaccess_report_->set_text(_("Nessun file scansionato di recente."));
559 }
560
561 // Stato Anti-Ransomware → servizio utente
562 bool ransom_ok = check_service_active("BastionGuard-ransomware-realtime.service");
563 if (ransom_ok) {
564 lbl_ransomware_status_.set_markup(
565 _("<b>Anti-Ransomware:</b> <span foreground='green'><b>Attivo</b></span>")
566 );
567 } else {
568 lbl_ransomware_status_.set_markup(
569 _("<b>Anti-Ransomware:</b> <span foreground='red'><b>Disattivato</b></span>")
570 );
571 }
572
573
574 bool phish_ok = check_service_active("BastionGuard-phishing-scanner.service");
575 if (phish_ok) {
576 lbl_phishing_status_.set_markup(
577 _("<b>Anti-Phishing:</b> <span foreground='green'><b>Attivo</b></span>")
578 );
579 } else {
580 lbl_phishing_status_.set_markup(
581 _("<b>Anti-Phishing:</b> <span foreground='red'><b>Disattivato</b></span>")
582 );
583 }
584}
static bool check_service_active(const std::string &service_name)
static std::vector< std::string > getOnAccessEvents()
Definition Backend.cpp:620
static std::string getLastUpdateDate()
Definition Backend.cpp:522

References _, buf_onaccess_report_, check_service_active(), Backend::getLastUpdateDate(), Backend::getOnAccessEvents(), lbl_db_date_, lbl_db_version_, lbl_phishing_status_, lbl_ransomware_status_, and lbl_status_.

Referenced by DashboardPage(), MainWindow::MainWindow(), and update_from_logs().

Member Data Documentation

◆ alive_

BastionGuard::AliveFlag DashboardPage::alive_ = BastionGuard::make_alive_flag()
private

Definition at line 74 of file DashboardPage.hpp.

Referenced by check_updates_async(), and ~DashboardPage().

◆ btn_theme_dark_

Gtk::Button* DashboardPage::btn_theme_dark_ = nullptr
private

Definition at line 60 of file DashboardPage.hpp.

Referenced by DashboardPage().

◆ btn_theme_light_

Gtk::Button* DashboardPage::btn_theme_light_ = nullptr
private

Definition at line 59 of file DashboardPage.hpp.

Referenced by DashboardPage().

◆ buf_onaccess_report_

Glib::RefPtr<Gtk::TextBuffer> DashboardPage::buf_onaccess_report_
private

Definition at line 56 of file DashboardPage.hpp.

Referenced by DashboardPage(), and update_from_logs().

◆ card_db_date_

Gtk::Frame* DashboardPage::card_db_date_ = nullptr
private

Definition at line 48 of file DashboardPage.hpp.

Referenced by DashboardPage().

◆ card_db_version_

Gtk::Frame* DashboardPage::card_db_version_ = nullptr
private

Definition at line 47 of file DashboardPage.hpp.

Referenced by DashboardPage().

◆ card_logs_

Gtk::Frame* DashboardPage::card_logs_ = nullptr
private

Definition at line 49 of file DashboardPage.hpp.

Referenced by DashboardPage().

◆ card_status_

Gtk::Frame* DashboardPage::card_status_ = nullptr
private

Definition at line 46 of file DashboardPage.hpp.

Referenced by DashboardPage().

◆ footer_box_

Gtk::Box* DashboardPage::footer_box_ = nullptr
private

Definition at line 57 of file DashboardPage.hpp.

Referenced by DashboardPage().

◆ grid_cards_

Gtk::Grid DashboardPage::grid_cards_
private

Definition at line 43 of file DashboardPage.hpp.

Referenced by DashboardPage().

◆ lbl_db_date_

Gtk::Label DashboardPage::lbl_db_date_
private

Definition at line 52 of file DashboardPage.hpp.

Referenced by DashboardPage(), and update_from_logs().

◆ lbl_db_version_

Gtk::Label DashboardPage::lbl_db_version_
private

Definition at line 51 of file DashboardPage.hpp.

Referenced by DashboardPage(), and update_from_logs().

◆ lbl_phishing_status_

Gtk::Label DashboardPage::lbl_phishing_status_
private

Definition at line 54 of file DashboardPage.hpp.

Referenced by DashboardPage(), and update_from_logs().

◆ lbl_ransomware_status_

Gtk::Label DashboardPage::lbl_ransomware_status_
private

Definition at line 53 of file DashboardPage.hpp.

Referenced by DashboardPage(), and update_from_logs().

◆ lbl_status_

Gtk::Label DashboardPage::lbl_status_
private

Definition at line 50 of file DashboardPage.hpp.

Referenced by DashboardPage(), and update_from_logs().

◆ lbl_title_

Gtk::Label DashboardPage::lbl_title_
private

Definition at line 42 of file DashboardPage.hpp.

Referenced by DashboardPage().

◆ lbl_update_status_

Gtk::Label DashboardPage::lbl_update_status_
private

Definition at line 58 of file DashboardPage.hpp.

Referenced by check_updates_async(), DashboardPage(), and set_update_status().

◆ refresh_timer_

sigc::connection DashboardPage::refresh_timer_
private

Definition at line 67 of file DashboardPage.hpp.

Referenced by DashboardPage(), and ~DashboardPage().

◆ txt_onaccess_report_

Gtk::TextView DashboardPage::txt_onaccess_report_
private

Definition at line 55 of file DashboardPage.hpp.

Referenced by DashboardPage().

◆ update_check_in_progress_

bool DashboardPage::update_check_in_progress_ = false
private

Definition at line 65 of file DashboardPage.hpp.

Referenced by check_updates_async().

◆ update_check_timer_

sigc::connection DashboardPage::update_check_timer_
private

Definition at line 61 of file DashboardPage.hpp.

Referenced by DashboardPage(), and ~DashboardPage().


The documentation for this class was generated from the following files: