/****************************************************************************
 * Copyright (C) 2004 Leonid Zolotarev
 *
 * Licensed under the terms of the BSD license, see file COPYING
 * for details.
 *
 * GTK ACX Tool.
 *
 * Rate widget.
 *
 * $Id: gacxrate.c,v 1.2 2004/09/15 21:05:52 leoz Exp $
 ***************************************************************************/

#include "support.h"
#include "acxlib.h"
#include "gacxrate.h"

/***************************************************************************/

gacx_rate_data* _rate_data = NULL;

/***************************************************************************/

void gacx_rate_data_create ( GtkWidget* main_window )
{
	if ( ! _rate_data ) {
    	_rate_data = g_malloc ( sizeof ( gacx_rate_data ) );
		_rate_data->rd_1   = lookup_widget ( main_window, "eventbox_rate_1"  );
		_rate_data->rd_2   = lookup_widget ( main_window, "eventbox_rate_2"  );
		_rate_data->rd_5   = lookup_widget ( main_window, "eventbox_rate_5"  );
		_rate_data->rd_11  = lookup_widget ( main_window, "eventbox_rate_11" );
		_rate_data->rd_22  = lookup_widget ( main_window, "eventbox_rate_22" );
		_rate_data->rd_f1  = lookup_widget ( main_window, "frame_rate_1"  );
		_rate_data->rd_f2  = lookup_widget ( main_window, "frame_rate_2"  );
		_rate_data->rd_f5  = lookup_widget ( main_window, "frame_rate_5"  );
		_rate_data->rd_f11 = lookup_widget ( main_window, "frame_rate_11" );
		_rate_data->rd_f22 = lookup_widget ( main_window, "frame_rate_22" );
		_rate_data->rd_rates = 0;
	}
}

/***************************************************************************/

void gacx_rate_data_destroy ()
{
	if ( _rate_data ) {
		_rate_data->rd_1   = NULL;
		_rate_data->rd_2   = NULL;
		_rate_data->rd_5   = NULL;
		_rate_data->rd_11  = NULL;
		_rate_data->rd_22  = NULL;
		_rate_data->rd_f1  = NULL;
		_rate_data->rd_f2  = NULL;
		_rate_data->rd_f5  = NULL;
		_rate_data->rd_f11 = NULL;
		_rate_data->rd_f22 = NULL;
		_rate_data->rd_rates = 0;
		g_free ( _rate_data );
		_rate_data = NULL;
	}
}

/***************************************************************************/

void gacx_rate_data_update_current ()
{
	GdkColor color_enable;
	GdkColor color_disable;
	GdkColor color;
	gint rate = 0;
	if ( _rate_data ) {
		color_enable  = _rate_data->rd_color_enable;
		color_disable = _rate_data->rd_color_disable;
		rate = net_wi_get_txrate ();
		if ( rate == 1 ) {
			color = color_enable;
		}
		else {
			color = color_disable;
		}
		gtk_widget_modify_bg ( _rate_data->rd_1, GTK_STATE_NORMAL, &color );
		if ( rate == 2 ) {
			color = color_enable;
		}
		else {
			color = color_disable;
		}
		gtk_widget_modify_bg ( _rate_data->rd_2, GTK_STATE_NORMAL, &color );
		if ( rate > 2 && rate <= 6 ) {
			color = color_enable;
		}
		else {
			color = color_disable;
		}
		gtk_widget_modify_bg ( _rate_data->rd_5, GTK_STATE_NORMAL, &color );
		if ( rate > 6 && rate <= 11 ) {
			color = color_enable;
		}
		else {
			color = color_disable;
		}
		gtk_widget_modify_bg ( _rate_data->rd_11, GTK_STATE_NORMAL, &color );
		if ( rate >= 22 ) {
			color = color_enable;
		}
		else {
			color = color_disable;
		}
		gtk_widget_modify_bg ( _rate_data->rd_22, GTK_STATE_NORMAL, &color );
	}
}

/***************************************************************************/

void gacx_rate_data_update_rates ( gint rates )
{
	GtkStyle* style  = NULL;
	if ( _rate_data ) {
		if ( _rate_data->rd_rates == 0 && _rate_data->rd_1 ) {
			style = gtk_widget_get_style ( _rate_data->rd_1 );
			if ( style ) {
				_rate_data->rd_color_enable  = style->bg [ GTK_STATE_PRELIGHT ];
				_rate_data->rd_color_disable = style->bg [ GTK_STATE_SELECTED ];
			}
		}
		if ( _rate_data->rd_rates != rates ) {
			_rate_data->rd_rates = rates;
			if ( acx_rate_supported ( acx_rate_1, rates ) ) {
				gtk_widget_show ( _rate_data->rd_f1 );
			}
			else {
				gtk_widget_hide ( _rate_data->rd_f1 );
			}
			if ( acx_rate_supported ( acx_rate_2, rates ) ) {
				gtk_widget_show ( _rate_data->rd_f2 );
			}
			else {
				gtk_widget_hide ( _rate_data->rd_f2 );
			}
			if ( acx_rate_supported ( acx_rate_5, rates ) ) {
				gtk_widget_show ( _rate_data->rd_f5 );
			}
			else {
				gtk_widget_hide ( _rate_data->rd_f5 );
			}
			if ( acx_rate_supported ( acx_rate_11, rates ) ) {
				gtk_widget_show ( _rate_data->rd_f11 );
			}
			else {
				gtk_widget_hide ( _rate_data->rd_f11 );
			}
			if ( acx_rate_supported ( acx_rate_22, rates ) ) {
				gtk_widget_show ( _rate_data->rd_f22 );
			}
			else {
				gtk_widget_hide ( _rate_data->rd_f22 );
			}
		}
	}
}

/***************************************************************************/

void gacx_rate_data_update ( gint rates )
{
	gacx_rate_data_update_rates ( rates );
	gacx_rate_data_update_current ();
}

/***************************************************************************/



syntax highlighted by Code2HTML, v. 0.9.1