Skip to content

Instantly share code, notes, and snippets.

@Fhernd
Created July 17, 2014 01:00
Show Gist options
  • Save Fhernd/1d1eeb8e9d57a15c0def to your computer and use it in GitHub Desktop.
Save Fhernd/1d1eeb8e9d57a15c0def to your computer and use it in GitHub Desktop.
Control para la visualización de la información de los juegos.
// ===++===
//
// OrtizOL
//
// ===--===
/*============================================================
//
// Clase: ControlJuegos.cs
//
// Original en: http://goo.gl/ba8gJ0
//
// Propósito: Panel de visualización de los juegos que
// se venden en la empresa.
//
============================================================*/
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using JuegosCelulares.Modelo;
namespace JuegosCelulares.GUI
{
/// <summary>
/// Control para los controles de compra y venta de juegos.
/// </summary>
public partial class ControlJuegos : UserControl
{
#region Campos (componentes)
/// <summary>
/// Representa el formulario padre de este control.
/// </summary>
private Principal ventanaPrincipal;
#endregion
#region Campos
/// <summary>
/// Valor centinela para determinar cuando disparar el
/// evento de modificación de índice del control ComboBox.
/// </summary>
private bool cbxInicializado;
/// <summary>
/// Cantidad del juego a comprar/vender.
/// </summary>
private int cantidad;
#endregion
#region Propiedades
/// <summary>
/// Obtiene y modifica la cantidad del juego a comprar o vender.
/// </summary>
public int Cantidad
{
get
{
return cantidad;
}
set
{
cantidad = value;
}
}
#endregion
#region Constructores
/// <summary>
/// Crea un nuevo control para la visualizaicón de la información
/// de los juegos.
/// </summary>
/// <param name="principal">Formulario padre.</param>
/// <param name="nombresJuegos">Nombres de los juegos.</param>
public ControlJuegos(Principal principal, ArrayList nombresJuegos)
{
InitializeComponent();
ventanaPrincipal = principal;
cantidad = 0;
foreach (string nombreJuego in nombresJuegos)
{
cbxJuegos.Items.Add(nombreJuego);
}
cbxInicializado = true;
cbxJuegos.SelectedIndex = 0;
}
#endregion
#region Métodos
/// <summary>
/// Actualiza la información del juego.
/// </summary>
/// <param name="juego">Contendedor de la información del juego.</param>
public void CambiarJuego(Juego juego)
{
if (juego != null)
{
if (juego.Nombre.Equals("Car Racer 2"))
{
pbxImagen.Image = Properties.Resources.CarRacer2;
}
else if (juego.Nombre.Equals("Air Attack"))
{
pbxImagen.Image = Properties.Resources.AirAttack;
}
else if (juego.Nombre.Equals("Mini Golf 2"))
{
pbxImagen.Image = Properties.Resources.MiniGolf2;
}
else if (juego.Nombre.Equals("Aztec Warrior"))
{
pbxImagen.Image = Properties.Resources.AztecWarrior;
}
txtNombre.Text = juego.Nombre;
txtCategoria.Text = juego.Categoria.ToString();
txtTamagnioKb.Text = juego.TamanioKB.ToString();
txtPrecio.Text = juego.Precio.ToString("C");
txtDisponibles.Text = juego.CantidadActual.ToString("##.#");
btnVender.Enabled = true;
}
else
{
Image imagenPrevia = null;
txtNombre.Text = (string)cbxJuegos.SelectedItem;
if (txtNombre.Text.Equals("Car Racer 2"))
{
imagenPrevia = Properties.Resources.CarRacer2;
}
else if (txtNombre.Text.Equals("Air Attack"))
{
imagenPrevia = Properties.Resources.AirAttack;
}
else if (txtNombre.Text.Equals("Mini Golf 2"))
{
imagenPrevia = Properties.Resources.MiniGolf2;
}
else if (txtNombre.Text.Equals("Aztec Warrior"))
{
imagenPrevia = Properties.Resources.AztecWarrior;
}
pbxImagen.Image = ConvertirImagenAEscalaDeGrisis(imagenPrevia);
txtCategoria.Text = "No Disponible";
txtTamagnioKb.Text = "No Disponible";
txtPrecio.Text = "No Disponible";
txtDisponibles.Text = "No Disponible";
btnVender.Enabled = false;
}
}
/// <summary>
/// Aplica el efecto de escala de grises a una imagen del juego.
/// </summary>
/// <param name="imagenFuente">Imagen a aplicar el efecto de escala de grises.</param>
/// <returns>Imagen en escala de grises.</returns>
private Bitmap ConvertirImagenAEscalaDeGrisis(Image imagenFuente)
{
Bitmap imagenNueva = new Bitmap(imagenFuente);
int gris;
for (int x = 0; x < imagenNueva.Width; ++x )
{
for (int y = 0; y < imagenNueva.Height; ++y)
{
gris = (Convert.ToInt32(imagenNueva.GetPixel(x, y).R) + imagenNueva.GetPixel(x, y).G + imagenNueva.GetPixel(x, y).B) / 3;
imagenNueva.SetPixel(x, y, Color.FromArgb(gris, gris, gris));
}
}
return imagenNueva;
}
#endregion
#region Eventos
/// <summary>
/// Actualiza la información de los controles de acuerdo al
/// juego seleccionado de la lista.
/// </summary>
/// <param name="sender">Generador del evento.</param>
/// <param name="e">Argumentos del evento.</param>
private void cbxJuegos_SelectedIndexChanged(object sender, EventArgs e)
{
if (!cbxInicializado)
{
switch (cbxJuegos.SelectedIndex)
{
case 0:
pbxImagen.Image = Properties.Resources.CarRacer2;
break;
case 1:
pbxImagen.Image = Properties.Resources.AirAttack;
break;
case 2:
pbxImagen.Image = Properties.Resources.MiniGolf2;
break;
case 3:
pbxImagen.Image = Properties.Resources.AztecWarrior;
break;
}
string nombreJuego = (string)cbxJuegos.SelectedItem;
ventanaPrincipal.CambiarJuegoSeleccionado(nombreJuego);
}
else
{
cbxInicializado = false;
}
}
/// <summary>
/// Activa la operación de compra.
/// </summary>
/// <param name="sender">Generador del evento.</param>
/// <param name="e">Argumentos del evento.</param>
private void btnComprar_Click(object sender, EventArgs e)
{
DialogoCompra dc = new DialogoCompra(this);
if (dc.ShowDialog(this) == DialogResult.OK)
{
ventanaPrincipal.ComprarJuego(txtNombre.Text, cantidad);
}
}
/// <summary>
/// Activa la operación de venta.
/// </summary>
/// <param name="sender">Generador del evento.</param>
/// <param name="e">Argumentos del evento.</param>
private void btnVender_Click(object sender, EventArgs e)
{
DialogoVenta dv = new DialogoVenta(this);
if (dv.ShowDialog(this) == DialogResult.OK)
{
if (!ventanaPrincipal.VenderJuego(txtNombre.Text, cantidad))
{
MessageBox.Show(this, "No se cuenta con inventario para este producto.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
#endregion
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment