source: trunk/gtk/stats.c @ 11599

Last change on this file since 11599 was 11599, checked in by charles, 11 years ago

(trunk) Join the 21st century and use only 1 space at the end sentences. This commit is nearly as important as the semi-annual ones that remove trailing spaces from the ends of lines of code... :)

  • Property svn:keywords set to Date Rev Author Id
File size: 6.6 KB
Line 
1/*
2 * This file Copyright (C) 2007-2010 Mnemosyne LLC
3 *
4 * This file is licensed by the GPL version 2. Works owned by the
5 * Transmission project are granted a special exemption to clause 2(b)
6 * so that the bulk of its code can remain under the MIT license.
7 * This exemption does not extend to derived works not owned by
8 * the Transmission project.
9 *
10 * $Id: stats.c 11599 2010-12-27 19:18:17Z charles $
11 */
12
13#include <glib/gi18n.h>
14#include <gtk/gtk.h>
15#include "hig.h"
16#include "stats.h"
17#include "tr-core.h"
18#include "tr-prefs.h"
19
20enum
21{
22    TR_RESPONSE_RESET = 1
23};
24
25struct stat_ui
26{
27    GtkWidget *  one_up_lb;
28    GtkWidget *  one_down_lb;
29    GtkWidget *  one_ratio_lb;
30    GtkWidget *  one_time_lb;
31    GtkWidget *  all_up_lb;
32    GtkWidget *  all_down_lb;
33    GtkWidget *  all_ratio_lb;
34    GtkWidget *  all_time_lb;
35    GtkWidget *  all_sessions_lb;
36    TrCore *     core;
37};
38
39static void
40setLabel( GtkWidget *  w,
41          const char * str )
42{
43    gtk_label_set_text( GTK_LABEL( w ), str );
44}
45
46static void
47setLabelFromRatio( GtkWidget * w,
48                   double      d )
49{
50    char buf[128];
51
52    tr_strlratio( buf, d, sizeof( buf ) );
53    setLabel( w, buf );
54}
55
56static gboolean
57updateStats( gpointer gdata )
58{
59    const char *     fmt;
60    char             buf[128];
61
62    struct stat_ui * ui = gdata;
63    tr_session_stats one, all;
64
65    tr_sessionGetStats( tr_core_session( ui->core ), &one );
66    tr_sessionGetCumulativeStats( tr_core_session( ui->core ), &all );
67
68    setLabel( ui->one_up_lb,
69             tr_strlsize( buf, one.uploadedBytes, sizeof( buf ) ) );
70    setLabel( ui->one_down_lb,
71             tr_strlsize( buf, one.downloadedBytes, sizeof( buf ) ) );
72    setLabel( ui->one_time_lb,
73             tr_strltime( buf, one.secondsActive, sizeof( buf ) ) );
74    setLabelFromRatio( ui->one_ratio_lb, one.ratio );
75
76    fmt = gtr_ngettext( "Started %'d time", "Started %'d times",
77                        (int)all.sessionCount );
78    g_snprintf( buf, sizeof( buf ), fmt, (int)all.sessionCount );
79    setLabel( ui->all_sessions_lb, buf );
80    setLabel( ui->all_up_lb,
81             tr_strlsize( buf, all.uploadedBytes, sizeof( buf ) ) );
82    setLabel( ui->all_down_lb,
83             tr_strlsize( buf, all.downloadedBytes, sizeof( buf ) ) );
84    setLabel( ui->all_time_lb,
85             tr_strltime( buf, all.secondsActive, sizeof( buf ) ) );
86    setLabelFromRatio( ui->all_ratio_lb, all.ratio );
87
88    return TRUE;
89}
90
91static void
92dialogDestroyed( gpointer         p,
93                 GObject * dialog UNUSED )
94{
95    g_source_remove( GPOINTER_TO_UINT( p ) );
96}
97
98static void
99dialogResponse( GtkDialog * dialog,
100                gint        response,
101                gpointer    gdata )
102{
103    struct stat_ui * ui = gdata;
104
105    if( response == TR_RESPONSE_RESET )
106    {
107        const char * primary = _( "Reset your statistics?" );
108        const char * secondary = _( "These statistics are for your information only. "
109                                    "Resetting them doesn't affect the statistics logged by your BitTorrent trackers." );
110        const int flags = GTK_DIALOG_DESTROY_WITH_PARENT
111                        | GTK_DIALOG_MODAL;
112        GtkWidget * w = gtk_message_dialog_new( GTK_WINDOW( dialog ),
113                                                flags,
114                                                GTK_MESSAGE_QUESTION,
115                                                GTK_BUTTONS_NONE,
116                                                "%s", primary );
117        gtk_dialog_add_buttons( GTK_DIALOG( w ),
118                                GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
119                                _( "_Reset" ), TR_RESPONSE_RESET,
120                                NULL );
121        gtk_message_dialog_format_secondary_text( GTK_MESSAGE_DIALOG( w ), "%s", secondary );
122        if( gtk_dialog_run( GTK_DIALOG( w ) ) == TR_RESPONSE_RESET )
123        {
124            tr_sessionClearStats( tr_core_session( ui->core ) );
125            updateStats( ui );
126        }
127        gtk_widget_destroy( w );
128    }
129
130    if( response == GTK_RESPONSE_CLOSE )
131    {
132        gtk_widget_destroy( GTK_WIDGET( dialog ) );
133    }
134}
135
136GtkWidget*
137gtr_stats_dialog_new( GtkWindow * parent, TrCore * core )
138{
139    guint            i;
140    int              row = 0;
141    GtkWidget *      d;
142    GtkWidget *      t;
143    GtkWidget *      l;
144    struct stat_ui * ui = g_new0( struct stat_ui, 1 );
145
146    d = gtk_dialog_new_with_buttons( _( "Statistics" ),
147                                     parent,
148                                     GTK_DIALOG_DESTROY_WITH_PARENT,
149                                     _( "_Reset" ), TR_RESPONSE_RESET,
150                                     GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
151                                     NULL );
152    gtk_dialog_set_default_response( GTK_DIALOG( d ),
153                                     GTK_RESPONSE_CLOSE );
154    gtk_dialog_set_alternative_button_order( GTK_DIALOG( d ),
155                                             GTK_RESPONSE_CLOSE,
156                                             TR_RESPONSE_RESET,
157                                             -1 );
158    t = hig_workarea_create( );
159    ui->core = core;
160
161    hig_workarea_add_section_title( t, &row, _( "Current Session" ) );
162    l = ui->one_up_lb = gtk_label_new( NULL );
163    hig_workarea_add_row( t, &row, _( "Uploaded:" ), l, NULL );
164    l = ui->one_down_lb = gtk_label_new( NULL );
165    hig_workarea_add_row( t, &row, _( "Downloaded:" ), l, NULL );
166    l = ui->one_ratio_lb = gtk_label_new( NULL );
167    hig_workarea_add_row( t, &row, _( "Ratio:" ), l, NULL );
168    l = ui->one_time_lb = gtk_label_new( NULL );
169    hig_workarea_add_row( t, &row, _( "Duration:" ), l, NULL );
170    hig_workarea_add_section_divider( t, &row );
171    hig_workarea_add_section_title( t, &row, _( "Total" ) );
172    l = ui->all_sessions_lb = gtk_label_new( _( "Started %'d time" ) );
173    hig_workarea_add_label_w( t, row++, l );
174    l = ui->all_up_lb = gtk_label_new( NULL );
175    hig_workarea_add_row( t, &row, _( "Uploaded:" ), l, NULL );
176    l = ui->all_down_lb = gtk_label_new( NULL );
177    hig_workarea_add_row( t, &row, _( "Downloaded:" ), l, NULL );
178    l = ui->all_ratio_lb = gtk_label_new( NULL );
179    hig_workarea_add_row( t, &row, _( "Ratio:" ), l, NULL );
180    l = ui->all_time_lb = gtk_label_new( NULL );
181    hig_workarea_add_row( t, &row, _( "Duration:" ), l, NULL );
182    hig_workarea_finish( t, &row );
183    gtr_dialog_set_content( GTK_DIALOG( d ), t );
184
185    updateStats( ui );
186    g_object_set_data_full( G_OBJECT( d ), "data", ui, g_free );
187    g_signal_connect( d, "response", G_CALLBACK( dialogResponse ), ui );
188    i = gtr_timeout_add_seconds( SECONDARY_WINDOW_REFRESH_INTERVAL_SECONDS, updateStats, ui );
189    g_object_weak_ref( G_OBJECT( d ), dialogDestroyed, GUINT_TO_POINTER( i ) );
190    return d;
191}
192
Note: See TracBrowser for help on using the repository browser.