static GtkWidget *
create_sys_view (ProcData *procdata)
{
	GtkWidget *vbox, *hbox;
	GtkWidget *cpu_box, *mem_box, *net_box;
	GtkWidget *cpu_graph_box, *mem_graph_box, *net_graph_box;
	GtkWidget *label,*cpu_label, *spacer;
	GtkWidget *table;
	GtkWidget *color_picker;
	GtkWidget *mem_legend_box, *net_legend_box;
	GtkSizeGroup *sizegroup;
	LoadGraph *cpu_graph, *mem_graph, *net_graph;
	gint i;


	vbox = gtk_vbox_new (FALSE, 18);

	gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);

	/* The CPU BOX */

	cpu_box = gtk_vbox_new (FALSE, 6);
	gtk_box_pack_start (GTK_BOX (vbox), cpu_box, TRUE, TRUE, 0);

	label = make_title_label (_("CPU History"));
	gtk_box_pack_start (GTK_BOX (cpu_box), label, FALSE, FALSE, 0);

	cpu_graph_box = gtk_vbox_new (FALSE, 6);
	gtk_box_pack_start (GTK_BOX (cpu_box), cpu_graph_box, TRUE, TRUE, 0);

	cpu_graph = new LoadGraph(LOAD_GRAPH_CPU);
	gtk_box_pack_start (GTK_BOX (cpu_graph_box),
			    load_graph_get_widget(cpu_graph),
			    TRUE,
			    TRUE,
			    0);

	sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);

	hbox = gtk_hbox_new(FALSE, 0);
	spacer = gtk_label_new ("");
	gtk_widget_set_size_request(GTK_WIDGET(spacer), 57, -1);
	gtk_box_pack_start (GTK_BOX (hbox), spacer, 
			    FALSE, FALSE, 0);


	gtk_box_pack_start (GTK_BOX (cpu_graph_box), hbox, 
			    FALSE, FALSE, 0);

	/*cpu_legend_box = gtk_hbox_new(TRUE, 10);
	gtk_box_pack_start (GTK_BOX (hbox), cpu_legend_box, 
			    TRUE, TRUE, 0);*/

	GtkWidget* cpu_table = gtk_table_new(std::min(procdata->config.num_cpus / 4, 1),
					     std::min(procdata->config.num_cpus, 4),
					     TRUE);
	gtk_table_set_row_spacings(GTK_TABLE(cpu_table), 6);
	gtk_table_set_col_spacings(GTK_TABLE(cpu_table), 6);
	gtk_box_pack_start(GTK_BOX(hbox), cpu_table, TRUE, TRUE, 0);

	for (i=0;i<procdata->config.num_cpus; i++) {
		GtkWidget *temp_hbox;
		gchar *text;
		
		temp_hbox = gtk_hbox_new (FALSE, 0);
		gtk_table_attach(GTK_TABLE(cpu_table), temp_hbox,
				 i % 4, i % 4 + 1,
				 i / 4, i / 4 + 1,
				 static_cast<GtkAttachOptions>(GTK_EXPAND | GTK_FILL), 
				 static_cast<GtkAttachOptions>(GTK_EXPAND | GTK_FILL),
				 0, 0);
		//gtk_size_group_add_widget (sizegroup, temp_hbox);
		/*g_signal_connect (G_OBJECT (temp_hbox), "size_request",
					 G_CALLBACK(size_request), &cpu_size);
*/
		color_picker = gsm_color_button_new (&cpu_graph->colors.at(i), GSMCP_TYPE_CPU);
		g_signal_connect (G_OBJECT (color_picker), "color_set",
			    G_CALLBACK (cb_cpu_color_changed), GINT_TO_POINTER (i));
		gtk_box_pack_start (GTK_BOX (temp_hbox), color_picker, FALSE, TRUE, 0);
		gtk_widget_set_size_request(GTK_WIDGET(color_picker), 32, -1);
		if(procdata->config.num_cpus == 1) {
			text = g_strdup (_("CPU"));
		} else {
			text = g_strdup_printf (_("CPU%d"), i+1);
		}
		label = gtk_label_new (text);
		gtk_box_pack_start (GTK_BOX (temp_hbox), label, FALSE, FALSE, 6);
		g_free (text);

		cpu_label = gtk_label_new (NULL);
		gtk_misc_set_alignment (GTK_MISC (cpu_label), 0.0, 0.5);
		gtk_box_pack_start (GTK_BOX (temp_hbox), cpu_label, TRUE, TRUE, 0);
		load_graph_get_labels(cpu_graph)->cpu[i] = cpu_label;
		
	}

	procdata->cpu_graph = cpu_graph;

	mem_box = gtk_vbox_new (FALSE, 6);
	gtk_box_pack_start (GTK_BOX (vbox), mem_box, TRUE, TRUE, 0);

	label = make_title_label (_("Memory and Swap History"));
	gtk_box_pack_start (GTK_BOX (mem_box), label, FALSE, FALSE, 0);

	mem_graph_box = gtk_vbox_new (FALSE, 6);
	gtk_box_pack_start (GTK_BOX (mem_box), mem_graph_box, TRUE, TRUE, 0);


	mem_graph = new LoadGraph(LOAD_GRAPH_MEM);
	gtk_box_pack_start (GTK_BOX (mem_graph_box),
			    load_graph_get_widget(mem_graph),
			    TRUE,
			    TRUE,
			    0);

	hbox = gtk_hbox_new(FALSE, 0);
	spacer = gtk_label_new ("");
	gtk_widget_set_size_request(GTK_WIDGET(spacer), 54, -1);
	gtk_box_pack_start (GTK_BOX (hbox), spacer, 
			    FALSE, FALSE, 0);


	gtk_box_pack_start (GTK_BOX (mem_graph_box), hbox, 
			    FALSE, FALSE, 0);

	mem_legend_box = gtk_hbox_new(TRUE, 10);
	gtk_box_pack_start (GTK_BOX (hbox), mem_legend_box, 
			    TRUE, TRUE, 0);

	table = gtk_table_new (2, 7, FALSE);
	gtk_table_set_row_spacings (GTK_TABLE (table), 6);
	gtk_table_set_col_spacings (GTK_TABLE (table), 6);
	gtk_box_pack_start (GTK_BOX (mem_legend_box), table, 
			    TRUE, TRUE, 0);

	color_picker = load_graph_get_mem_color_picker(mem_graph);
	g_signal_connect (G_OBJECT (color_picker), "color_set",
			    G_CALLBACK (cb_mem_color_changed), procdata);
	gtk_table_attach (GTK_TABLE (table), color_picker, 0, 1, 0, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
	
	label = gtk_label_new (_("Memory"));
	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
	gtk_table_attach (GTK_TABLE (table), label, 1, 7, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
	
	gtk_table_attach (GTK_TABLE (table),
			  load_graph_get_labels(mem_graph)->memory,
			  1,
			  2,
			  1,
			  2,
			  GTK_FILL,
			  GTK_FILL,
			  0,
			  0);

	table = gtk_table_new (2, 7, FALSE);
	gtk_table_set_row_spacings (GTK_TABLE (table), 6);
	gtk_table_set_col_spacings (GTK_TABLE (table), 6);
	gtk_box_pack_start (GTK_BOX (mem_legend_box), table, 
			    TRUE, TRUE, 0);

	color_picker = load_graph_get_swap_color_picker(mem_graph);
	g_signal_connect (G_OBJECT (color_picker), "color_set",
			    G_CALLBACK (cb_swap_color_changed), procdata);
	gtk_table_attach (GTK_TABLE (table), color_picker, 0, 1, 0, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
		  
	label = gtk_label_new (_("Swap"));
	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
	gtk_table_attach (GTK_TABLE (table), label, 1, 7, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
	
	gtk_table_attach (GTK_TABLE (table),
			  load_graph_get_labels(mem_graph)->swap,
			  1,
			  2,
			  1,
			  2,
			  GTK_FILL,
			  GTK_FILL,
			  0,
			  0);

	procdata->mem_graph = mem_graph;

	/* The net box */
	net_box = gtk_vbox_new (FALSE, 6);
	gtk_box_pack_start (GTK_BOX (vbox), net_box, TRUE, TRUE, 0);

	label = make_title_label (_("Network History"));
	gtk_box_pack_start (GTK_BOX (net_box), label, FALSE, FALSE, 0);

	net_graph_box = gtk_vbox_new (FALSE, 6);
	gtk_box_pack_start (GTK_BOX (net_box), net_graph_box, TRUE, TRUE, 0);

	net_graph = new LoadGraph(LOAD_GRAPH_NET);
	gtk_box_pack_start (GTK_BOX (net_graph_box),
			    load_graph_get_widget(net_graph),
			    TRUE,
			    TRUE,
			    0);

	hbox = gtk_hbox_new(FALSE, 0);
	spacer = gtk_label_new ("");
	gtk_widget_set_size_request(GTK_WIDGET(spacer), 54, -1);
	gtk_box_pack_start (GTK_BOX (hbox), spacer, 
			    FALSE, FALSE, 0);


	gtk_box_pack_start (GTK_BOX (net_graph_box), hbox, 
			    FALSE, FALSE, 0);

	net_legend_box = gtk_hbox_new(TRUE, 10);
	gtk_box_pack_start (GTK_BOX (hbox), net_legend_box, 
			    TRUE, TRUE, 0);

	table = gtk_table_new (2, 4, FALSE);
	gtk_table_set_row_spacings (GTK_TABLE (table), 6);
	gtk_table_set_col_spacings (GTK_TABLE (table), 6);
	gtk_box_pack_start (GTK_BOX (net_legend_box), table,
			    TRUE, TRUE, 0);

	color_picker = gsm_color_button_new (
		&net_graph->colors.at(0), GSMCP_TYPE_NETWORK_IN);
	g_signal_connect (G_OBJECT (color_picker), "color_set",
			    G_CALLBACK (cb_net_in_color_changed), procdata);
	gtk_table_attach (GTK_TABLE (table), color_picker, 0, 1, 0, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);

	label = gtk_label_new (_("Receiving"));
	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
	gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0);

	gtk_misc_set_alignment (GTK_MISC (load_graph_get_labels(net_graph)->net_in),
				1.0,
				0.5);
/*
	hbox = gtk_hbox_new (FALSE, 0);
	g_signal_connect (G_OBJECT (hbox), "size_request",
			  G_CALLBACK(size_request), &net_size);
	gtk_box_pack_start (GTK_BOX (hbox),
			    load_graph_get_labels(net_graph)->net_in,
			    TRUE,
			    TRUE,
			    0);
*/
	gtk_widget_set_size_request(GTK_WIDGET(load_graph_get_labels(net_graph)->net_in), 65, -1);
	gtk_table_attach (GTK_TABLE (table), load_graph_get_labels(net_graph)->net_in, 2, 3, 0, 1, 
			  static_cast<GtkAttachOptions>(GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0);

	label = gtk_label_new (_("Total Received"));
	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
	gtk_table_attach (GTK_TABLE (table), label, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0);

	gtk_misc_set_alignment (GTK_MISC (load_graph_get_labels(net_graph)->net_in_total),
				1.0,
				0.5);
	gtk_table_attach (GTK_TABLE (table),
			  load_graph_get_labels(net_graph)->net_in_total,
			  2,
			  3,
			  1,
			  2,
			  GTK_FILL,
			  GTK_FILL,
			  0,
			  0);

	spacer = gtk_label_new ("");
	gtk_widget_set_size_request(GTK_WIDGET(spacer), 38, -1);
	gtk_table_attach (GTK_TABLE (table), spacer, 3, 4, 0, 1, GTK_FILL, GTK_FILL, 0, 0);

	table = gtk_table_new (2, 3, FALSE);
	gtk_table_set_row_spacings (GTK_TABLE (table), 6);
	gtk_table_set_col_spacings (GTK_TABLE (table), 6);
	gtk_box_pack_start (GTK_BOX (net_legend_box), table,
			    TRUE, TRUE, 0);

	color_picker = gsm_color_button_new (
		&net_graph->colors.at(1), GSMCP_TYPE_NETWORK_OUT);
	g_signal_connect (G_OBJECT (color_picker), "color_set",
			    G_CALLBACK (cb_net_out_color_changed), procdata);
	gtk_table_attach (GTK_TABLE (table), color_picker, 0, 1, 0, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);

	label = gtk_label_new (_("Sending"));
	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
	gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0);

	gtk_misc_set_alignment (GTK_MISC (load_graph_get_labels(net_graph)->net_out),
				1.0,
				0.5);
/*
	hbox = gtk_hbox_new (FALSE, 0);
	g_signal_connect (G_OBJECT (load_graph_get_labels(net_graph)->net_out), "size_request",
			  G_CALLBACK(size_request), &net_size);

	gtk_box_pack_start (GTK_BOX (hbox),
			    load_graph_get_labels(net_graph)->net_out,
			    TRUE,
			    TRUE,
			    0);
*/
	gtk_widget_set_size_request(GTK_WIDGET(load_graph_get_labels(net_graph)->net_out), 65, -1);
	gtk_table_attach (GTK_TABLE (table), load_graph_get_labels(net_graph)->net_out, 2, 3, 0, 1, 
			  static_cast<GtkAttachOptions>(GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0);

	label = gtk_label_new (_("Total Sent"));
	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
	gtk_table_attach (GTK_TABLE (table), label, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0);

	gtk_misc_set_alignment (GTK_MISC (load_graph_get_labels(net_graph)->net_out_total),
				1.0,
				0.5);
	gtk_table_attach (GTK_TABLE (table),
			  load_graph_get_labels(net_graph)->net_out_total,
			  2,
			  3,
			  1,
			  2,
			  GTK_FILL,
			  GTK_FILL,
			  0,
			  0);

	spacer = gtk_label_new ("");
	gtk_widget_set_size_request(GTK_WIDGET(spacer), 38, -1);
	gtk_table_attach (GTK_TABLE (table), spacer, 3, 4, 0, 1, GTK_FILL, GTK_FILL, 0, 0);

	procdata->net_graph = net_graph;

	return vbox;
}
示例#2
0
static void
create_sys_view (GsmApplication *app, GtkBuilder * builder)
{
    GtkBox *cpu_graph_box, *mem_graph_box, *net_graph_box;
    GtkLabel *label,*cpu_label;
    GtkGrid *table;
    GsmColorButton *color_picker;
    LoadGraph *cpu_graph, *mem_graph, *net_graph;

    gint i;
    gchar *title_text;
    gchar *label_text;
    gchar *title_template;

    // Translators: color picker title, %s is CPU, Memory, Swap, Receiving, Sending
    title_template = g_strdup(_("Pick a Color for “%s”"));

    /* The CPU BOX */
    
    cpu_graph_box = GTK_BOX (gtk_builder_get_object (builder, "cpu_graph_box"));

    cpu_graph = new LoadGraph(LOAD_GRAPH_CPU);
    gtk_box_pack_start (cpu_graph_box,
                        GTK_WIDGET (load_graph_get_widget(cpu_graph)),
                        TRUE,
                        TRUE,
                        0);

    GtkGrid* cpu_table = GTK_GRID (gtk_builder_get_object (builder, "cpu_table"));
    gint cols = 4;
    for (i=0;i<app->config.num_cpus; i++) {
        GtkBox *temp_hbox;

        temp_hbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0));
        gtk_widget_show (GTK_WIDGET (temp_hbox));
        if (i < cols) {
            gtk_grid_insert_column(cpu_table, i%cols);
        }
        if ((i+1)%cols ==cols) {
            gtk_grid_insert_row(cpu_table, (i+1)/cols);
        }
        gtk_grid_attach(cpu_table, GTK_WIDGET (temp_hbox), i%cols, i/cols, 1, 1);
        color_picker = gsm_color_button_new (&cpu_graph->colors.at(i), GSMCP_TYPE_CPU);
        g_signal_connect (G_OBJECT (color_picker), "color-set",
                          G_CALLBACK (cb_cpu_color_changed), GINT_TO_POINTER (i));
        gtk_box_pack_start (temp_hbox, GTK_WIDGET (color_picker), FALSE, TRUE, 0);
        gtk_widget_set_size_request(GTK_WIDGET(color_picker), 32, -1);
        if(app->config.num_cpus == 1) {
            label_text = g_strdup (_("CPU"));
        } else {
            label_text = g_strdup_printf (_("CPU%d"), i+1);
        }
        title_text = g_strdup_printf(title_template, label_text);
        label = GTK_LABEL (gtk_label_new (label_text));
        gsm_color_button_set_title(color_picker, title_text);
        g_free(title_text);
        gtk_box_pack_start (temp_hbox, GTK_WIDGET (label), FALSE, FALSE, 6);
        gtk_widget_show (GTK_WIDGET (label));
        g_free (label_text);

        cpu_label = GTK_LABEL (gtk_label_new (NULL));

        gtk_widget_set_valign (GTK_WIDGET (cpu_label), GTK_ALIGN_CENTER);
        gtk_widget_set_halign (GTK_WIDGET (cpu_label), GTK_ALIGN_START);
        gtk_box_pack_start (temp_hbox, GTK_WIDGET (cpu_label), FALSE, FALSE, 0);
        gtk_widget_show (GTK_WIDGET (cpu_label));
        load_graph_get_labels(cpu_graph)->cpu[i] = cpu_label;

    }

    app->cpu_graph = cpu_graph;

    /** The memory box */
    
    mem_graph_box = GTK_BOX (gtk_builder_get_object (builder, "mem_graph_box"));

    mem_graph = new LoadGraph(LOAD_GRAPH_MEM);
    gtk_box_pack_start (mem_graph_box,
                        GTK_WIDGET (load_graph_get_widget(mem_graph)),
                        TRUE,
                        TRUE,
                        0);

    table = GTK_GRID (gtk_builder_get_object (builder, "mem_table"));

    color_picker = load_graph_get_mem_color_picker(mem_graph);
    g_signal_connect (G_OBJECT (color_picker), "color-set",
                      G_CALLBACK (cb_mem_color_changed), app);
    title_text = g_strdup_printf(title_template, _("Memory"));
    gsm_color_button_set_title(color_picker, title_text);
    g_free(title_text);

    label = GTK_LABEL (gtk_builder_get_object(builder, "memory_label"));

    gtk_grid_attach_next_to (table, GTK_WIDGET (color_picker), GTK_WIDGET (label), GTK_POS_LEFT, 1, 2);
    gtk_grid_attach_next_to (table, GTK_WIDGET (load_graph_get_labels(mem_graph)->memory), GTK_WIDGET (label), GTK_POS_BOTTOM, 1, 1);

    color_picker = load_graph_get_swap_color_picker(mem_graph);
    g_signal_connect (G_OBJECT (color_picker), "color-set",
                      G_CALLBACK (cb_swap_color_changed), app);
    title_text = g_strdup_printf(title_template, _("Swap"));
    gsm_color_button_set_title(GSM_COLOR_BUTTON(color_picker), title_text);
    g_free(title_text);

    label = GTK_LABEL (gtk_builder_get_object(builder, "swap_label"));

    gtk_grid_attach_next_to (table, GTK_WIDGET (color_picker), GTK_WIDGET (label), GTK_POS_LEFT, 1, 2);
    gtk_grid_attach_next_to (table, GTK_WIDGET (load_graph_get_labels(mem_graph)->swap), GTK_WIDGET (label), GTK_POS_BOTTOM, 1, 1);

    app->mem_graph = mem_graph;

    /* The net box */
    
    net_graph_box = GTK_BOX (gtk_builder_get_object (builder, "net_graph_box"));

    net_graph = new LoadGraph(LOAD_GRAPH_NET);
    gtk_box_pack_start (net_graph_box,
                        GTK_WIDGET (load_graph_get_widget(net_graph)),
                        TRUE,
                        TRUE,
                        0);

    table = GTK_GRID (gtk_builder_get_object (builder, "net_table"));

    color_picker = gsm_color_button_new (
        &net_graph->colors.at(0), GSMCP_TYPE_NETWORK_IN);
    g_signal_connect (G_OBJECT (color_picker), "color-set",
                      G_CALLBACK (cb_net_in_color_changed), app);
    title_text = g_strdup_printf(title_template, _("Receiving"));
    gsm_color_button_set_title(color_picker, title_text);
    g_free(title_text);

    label = GTK_LABEL (gtk_builder_get_object(builder, "receiving_label"));
    gtk_grid_attach_next_to (table, GTK_WIDGET (color_picker), GTK_WIDGET (label), GTK_POS_LEFT, 1, 2);
    gtk_grid_attach_next_to (table, GTK_WIDGET (load_graph_get_labels(net_graph)->net_in), GTK_WIDGET (label), GTK_POS_RIGHT, 1, 1);
    label = GTK_LABEL (gtk_builder_get_object(builder, "total_received_label"));
    gtk_grid_attach_next_to (table, GTK_WIDGET (load_graph_get_labels(net_graph)->net_in_total), GTK_WIDGET (label), GTK_POS_RIGHT, 1, 1);

    color_picker = gsm_color_button_new (
        &net_graph->colors.at(1), GSMCP_TYPE_NETWORK_OUT);
    g_signal_connect (G_OBJECT (color_picker), "color-set",
                      G_CALLBACK (cb_net_out_color_changed), app);
    title_text = g_strdup_printf(title_template, _("Sending"));
    gsm_color_button_set_title(color_picker, title_text);
    g_free(title_text);

    label = GTK_LABEL (gtk_builder_get_object(builder, "sending_label"));
    gtk_grid_attach_next_to (table, GTK_WIDGET (color_picker), GTK_WIDGET (label), GTK_POS_LEFT, 1, 2);
    gtk_grid_attach_next_to (table, GTK_WIDGET (load_graph_get_labels(net_graph)->net_out), GTK_WIDGET (label), GTK_POS_RIGHT, 1, 1);
    label = GTK_LABEL (gtk_builder_get_object(builder, "total_sent_label"));
    gtk_grid_attach_next_to (table, GTK_WIDGET (load_graph_get_labels(net_graph)->net_out_total), GTK_WIDGET (label), GTK_POS_RIGHT, 1, 1);

    app->net_graph = net_graph;
    g_free (title_template);

}