/***************************************************************************
* 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);
}