sprite_16x16_selector_core_widget::sprite_16x16_selector_core_widget
	( QWidget* s_parent, const QPoint& s_position, const QSize& s_size ) 
	: level_element_selector_core_widget_base( s_parent, s_position, 
	s_size, get_level_element_gfx_file_name(), get_slot_inner_width(),
	get_slot_inner_height(), get_slot_outer_width(),
	get_slot_outer_height() )
{
}
level_element_selector_core_widget_base
	::level_element_selector_core_widget_base
	( QWidget* s_parent, const QPoint& s_position, const QSize& s_size ) 
	: sfml_canvas_widget_base( s_parent, s_position, s_size ),
	left_current_level_element_index(0), 
	right_current_level_element_index(0),
	level_element_palette_modified_recently(false)
{
	shared_constructor_code( get_level_element_gfx_file_name(), 
		get_slot_inner_width(), get_slot_inner_height(), 
		get_slot_outer_width(), get_slot_outer_height() );
}
void level_element_selector_core_widget_base::mousePressEvent
	( QMouseEvent* event )
{
	sf::Vector2i event_pos_in_level_element_selection_coords
		( event->x() / get_slot_outer_width(), 
		event->y() / get_slot_outer_height() );
	
	//cout << event_pos_in_level_element_selection_coords.x
	//	<< ", " << event_pos_in_level_element_selection_coords.y << "\n";
	
	if ( event->button() == Qt::LeftButton )
	{
		u32 n_left_current_level_element_index 
			= level_element_selection_coords_to_current_level_element_index
			(event_pos_in_level_element_selection_coords);
		
		//cout << n_left_current_level_element_index << "\n\n";
		
		if ( level_element_index_is_valid
			(n_left_current_level_element_index) )
		{
			set_left_current_level_element_index
				(n_left_current_level_element_index);
		}
	}
	else if ( event->button() == Qt::RightButton )
	{
		u32 n_right_current_level_element_index 
			= level_element_selection_coords_to_current_level_element_index
			(event_pos_in_level_element_selection_coords);
		
		//cout << n_right_current_level_element_index << "\n\n";
		
		if ( level_element_index_is_valid
			(n_right_current_level_element_index) )
		{
			set_right_current_level_element_index
				(n_right_current_level_element_index);
		}
	}
	
}
void level_element_selector_core_widget_base
	::generate_level_element_palette_render_texture()
{
	//cout << "level_element_palette_render_texture:  " 
	//	<< level_element_palette_render_texture.setActive(true) << endl;
	//level_element_palette_render_texture.clear(sf::Color::Green);
	level_element_palette_render_texture.clear(sf::Color::Cyan);
	
	u32 num_level_elements_per_column 
		= get_num_level_elements_per_column(),
		num_level_elements_per_row = get_num_level_elements_per_row();
	
	for ( u32 j=0; j<num_level_elements_per_column; ++j )
	{
		for ( u32 i=0; i<num_level_elements_per_row; ++i )
		{
			//slot_inner_image.setPixel( 0, 0, palette.at
			//	( j * num_colors_per_row + i ) );
			//slot_inner_texture.loadFromImage(slot_inner_image);
			//
			////slot_inner_sprite.setPosition( i * get_slot_outer_width() + 1,
			////	level_element_palette_render_texture.getSize().y 
			////	- ( ( j + 1 ) * get_slot_outer_height() - 1 ) );
			
			selected_level_element_sprite.setTextureRect( sf::IntRect
				( sf::Vector2i( i * get_slot_inner_width(), 
				j * get_slot_inner_height() ), 
				sf::Vector2i( get_slot_inner_width(),
				get_slot_inner_height() ) ) );
			
			selected_level_element_sprite.setPosition
				( i * get_slot_outer_width() + 1,
				j * get_slot_outer_height() + 1 );
			
			//cout << "xpos == " << i * get_slot_outer_width() + 1 << endl;
			//cout << "ypos == " << j * get_slot_outer_height() + 1 << endl;
			
			// Highlight the SELECTED level_elements with a border, drawing
			// the LEFT mouse button selected level_element one on top of
			// the right mouse button selected level_element.
			if ( left_current_level_element_index 
				== j * num_level_elements_per_row + i )
			{
				slot_outer_left_selected_sprite.setPosition
					( selected_level_element_sprite.getPosition().x - 1,
					selected_level_element_sprite.getPosition().y - 1 );
				
				level_element_palette_render_texture.draw
					(slot_outer_left_selected_sprite);
			}
			else if ( right_current_level_element_index 
				== j * num_level_elements_per_row + i )
			{
				slot_outer_right_selected_sprite.setPosition
					( selected_level_element_sprite.getPosition().x - 1,
					selected_level_element_sprite.getPosition().y - 1 );
				
				level_element_palette_render_texture.draw
					(slot_outer_right_selected_sprite);
			}
			else
			{
				slot_outer_usual_sprite.setPosition
					( selected_level_element_sprite.getPosition().x - 1,
					selected_level_element_sprite.getPosition().y - 1 );
				
				level_element_palette_render_texture.draw
					(slot_outer_usual_sprite);
			}
			
			level_element_palette_render_texture.draw
				(selected_level_element_sprite);
		}
	}
	
	level_element_palette_render_texture.display();
	level_element_palette_texture 
		= level_element_palette_render_texture.getTexture();
}