/*************************************************************************** * statswindow.cpp * * Wed Sep 20 00:23:46 2006 * Copyright 2006 User * Email ****************************************************************************/ #include "statswindow.h" statisticsWindow::statisticsWindow() { } statisticsWindow::~statisticsWindow() { } GtkWidget* statisticsWindow::createWindowContent() { GtkWidget *vbox; notebook = gtk_notebook_new(); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), createOverallStats(), NULL); vbox = gtk_vbox_new(FALSE, 10); gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), createButtonbar(), FALSE, TRUE, 0); setWindowSize(400, 350); setWindowTitle(tr("Licq Statistics")); return vbox; } GtkWidget* statisticsWindow::createOverallStats() { GtkWidget *label1, *label2, *label3, *vbox, *hbox, *table, *logoImage; gchar *fstr, *logoImageName; gchar timeBuf[100]; DaemonStatsList::iterator iter; DaemonStatsList statList; guint rowPos; time_t startTime, resetTime; double timeDif, evSent, evReceived; statList = getLicqDaemon()->AllStats(); logoImageName = g_strdup_printf("%sicqnd/statistics.png", SHARE_DIR); logoImage = gtk_image_new_from_file(logoImageName); g_free(logoImageName); label1 = gtk_label_new(tr("Overall statistics since using Licq. The values mean \"Overall (Today)\".")); gtk_label_set_line_wrap(GTK_LABEL(label1), TRUE); gtk_misc_set_alignment(GTK_MISC(label1), 0, 0); gtk_widget_set_size_request(label1, 290, -1); hbox = gtk_hbox_new(FALSE, 10); gtk_box_pack_start(GTK_BOX(hbox), logoImage, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), label1, FALSE, TRUE, 0); // Create the statistics table = gtk_table_new(getLicqDaemon()->AllStats().size() + 4, 2, FALSE); gtk_table_set_col_spacings(GTK_TABLE(table), 5); gtk_table_set_row_spacings(GTK_TABLE(table), 3); fstr = g_strdup_printf("%s:", tr("Up since")); label2 = gtk_label_new(fstr); g_free(fstr); gtk_label_set_use_markup(GTK_LABEL(label2), TRUE); gtk_misc_set_alignment(GTK_MISC(label2), 1, 0); startTime = getLicqDaemon()->StartTime(); strftime(timeBuf, 100, tr("%m/%d/%y %H:%M:%S"), localtime(&startTime)); label3 = gtk_label_new(timeBuf); gtk_misc_set_alignment(GTK_MISC(label3), 0, 0); gtk_table_attach_defaults(GTK_TABLE(table), label2, 0, 1, 0, 1); gtk_table_attach_defaults(GTK_TABLE(table), label3, 1, 2, 0, 1); fstr = g_strdup_printf("%s:", tr("Statistics last reset")); label2 = gtk_label_new(fstr); g_free(fstr); gtk_label_set_use_markup(GTK_LABEL(label2), TRUE); gtk_misc_set_alignment(GTK_MISC(label2), 1, 0); resetTime = getLicqDaemon()->ResetTime(); strftime(timeBuf, 100, tr("%m/%d/%y %H:%M:%S"), localtime(&resetTime)); label3 = gtk_label_new(timeBuf); gtk_misc_set_alignment(GTK_MISC(label3), 0, 0); gtk_table_attach_defaults(GTK_TABLE(table), label2, 0, 1, 1, 2); gtk_table_attach_defaults(GTK_TABLE(table), label3, 1, 2, 1, 2); gtk_table_set_row_spacing(GTK_TABLE(table), 1, 10); evSent = 0; evReceived = 0; rowPos = 2; for (iter = statList.begin(); iter != statList.end(); iter++) { fstr = g_strdup_printf("%s:", iter->Name()); label2 = gtk_label_new(fstr); g_free(fstr); gtk_label_set_use_markup(GTK_LABEL(label2), TRUE); gtk_misc_set_alignment(GTK_MISC(label2), 1, 0); gtk_table_attach_defaults(GTK_TABLE(table), label2, 0, 1, rowPos, rowPos+1); fstr = g_strdup_printf("%lu (%lu)", iter->Total(), iter->Today()); label2 = gtk_label_new(fstr); g_free(fstr); gtk_misc_set_alignment(GTK_MISC(label2), 0, 0); gtk_table_attach_defaults(GTK_TABLE(table), label2, 1, 2, rowPos, rowPos+1); if (rowPos == 2) evSent = iter->Total(); if (rowPos == 3) evReceived = iter->Total(); rowPos++; } gtk_table_set_row_spacing(GTK_TABLE(table), rowPos, 10); timeDif = difftime(startTime, resetTime) / 60 / 60 / 24; if (timeDif == 0) timeDif = 1; fstr = g_strdup_printf("%s:", tr("Average received / day")); label2 = gtk_label_new(fstr); g_free(fstr); gtk_label_set_use_markup(GTK_LABEL(label2), TRUE); gtk_misc_set_alignment(GTK_MISC(label2), 1, 0); fstr = g_strdup_printf("%4.2f", evReceived / timeDif); label3 = gtk_label_new(fstr); g_free(fstr); gtk_misc_set_alignment(GTK_MISC(label3), 0, 0); gtk_table_attach_defaults(GTK_TABLE(table), label2, 0, 1, rowPos+1, rowPos+2); gtk_table_attach_defaults(GTK_TABLE(table), label3, 1, 2, rowPos+1, rowPos+2); fstr = g_strdup_printf("%s:", tr("Average sent / day")); label2 = gtk_label_new(fstr); g_free(fstr); gtk_label_set_use_markup(GTK_LABEL(label2), TRUE); gtk_misc_set_alignment(GTK_MISC(label2), 1, 0); fstr = g_strdup_printf("%4.2f", evSent / timeDif); label3 = gtk_label_new(fstr); g_free(fstr); gtk_misc_set_alignment(GTK_MISC(label3), 0, 0); gtk_table_attach_defaults(GTK_TABLE(table), label2, 0, 1, rowPos+2, rowPos+3); gtk_table_attach_defaults(GTK_TABLE(table), label3, 1, 2, rowPos+2, rowPos+3); vbox = gtk_vbox_new(FALSE, 20); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, TRUE, 0); return vbox; } GtkWidget* statisticsWindow::createButtonbar() { GtkWidget *resetButton, *closeButton, *hbox; resetButton = u_createTextStockImageButton(tr("Reset Statistics"), GTK_STOCK_CLEAR); g_signal_connect_swapped(resetButton, "clicked", G_CALLBACK(this->cb_resetButtonClicked), this); closeButton = gtk_button_new_from_stock(GTK_STOCK_CLOSE); g_signal_connect_swapped(closeButton, "clicked", G_CALLBACK(this->cb_destroyWindow), this); hbox = gtk_hbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(hbox), resetButton, FALSE, TRUE, 0); gtk_box_pack_end(GTK_BOX(hbox), closeButton, FALSE, TRUE, 0); return hbox; } void statisticsWindow::destroyWindowContent() { } void statisticsWindow::cb_resetButtonClicked(statisticsWindow* self) { getLicqDaemon()->ResetStats(); gtk_notebook_remove_page(GTK_NOTEBOOK(self->notebook), 0); gtk_notebook_append_page(GTK_NOTEBOOK(self->notebook), self->createOverallStats(), NULL); gtk_widget_show_all(self->notebook); }