3d3c21b853
Feature: Modifier form now resizes the buttons so that if there are more modifiers than can fit on the screen, the button size will reduce to a degree Feature: The Final Sanction is also a background worker and reports progress.
116 lines
3.8 KiB
C#
116 lines
3.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using Tanshu.Accounts.Entities;
|
|
using Tanshu.Accounts.Contracts;
|
|
using Tanshu.Accounts.Helpers;
|
|
|
|
namespace Tanshu.Accounts.PointOfSale
|
|
{
|
|
public partial class ModifierForm : Form
|
|
{
|
|
private IList<InventoryModifier> selection;
|
|
private IList<Modifier> modifiersList;
|
|
private IList<CheckBox> list;
|
|
public ModifierForm(IList<Modifier> source, IList<InventoryModifier> selection)
|
|
{
|
|
InitializeComponent();
|
|
this.selection = selection;
|
|
this.modifiersList = source;
|
|
list = new List<CheckBox>();
|
|
}
|
|
|
|
private void button_Click(object sender, EventArgs e)
|
|
{
|
|
CheckBox button = sender as CheckBox;
|
|
if (button == null)
|
|
return;
|
|
if (button.CheckState == CheckState.Checked)
|
|
selection.Add(new InventoryModifier() { Modifier = (Modifier)button.Tag });
|
|
else
|
|
selection.Remove(selection.First(x => x.Modifier.ModifierID == ((Modifier)button.Tag).ModifierID));
|
|
}
|
|
private static Point GetSize(FlowLayoutPanel panel, int count)
|
|
{
|
|
Point min = new Point(20, 50);
|
|
Point max = new Point(75, 75);
|
|
|
|
var marginWidth = panel.Margin.Right + panel.Margin.Left;
|
|
var marginHeight = panel.Margin.Top + panel.Margin.Bottom;
|
|
|
|
var rows = panel.ClientSize.Height / (max.Y + marginHeight);
|
|
var cols = panel.ClientSize.Width / (max.X + marginWidth);
|
|
|
|
var num = rows * cols;
|
|
|
|
if (num >= count)
|
|
return max;
|
|
|
|
var w = max.X;
|
|
var h = max.Y;
|
|
while (w > min.X && h > min.Y)
|
|
{
|
|
h = (panel.ClientSize.Height / (rows + 1)) - marginHeight;
|
|
if (h >= min.Y)
|
|
{
|
|
++rows;
|
|
}
|
|
if (rows * cols >= count)
|
|
break;
|
|
w = (panel.ClientSize.Width / (cols + 1)) - marginWidth;
|
|
if (w >= min.X)
|
|
{
|
|
++cols;
|
|
}
|
|
if (rows * cols >= count)
|
|
break;
|
|
}
|
|
max.X = (panel.ClientSize.Width / cols) - marginWidth;
|
|
max.Y = (panel.ClientSize.Height / rows) - marginHeight;
|
|
|
|
return max;
|
|
}
|
|
private void ModifierForm_Load(object sender, EventArgs e)
|
|
{
|
|
var size = GetSize(flpModifier, modifiersList.Count);
|
|
ButtonClickDelegate bcDelegate = new ButtonClickDelegate(button_Click);
|
|
for (int i = 0; i < modifiersList.Count; i++)
|
|
{
|
|
var control = new CheckBox()
|
|
{
|
|
Name = i.ToString(),
|
|
Text = modifiersList[i].Name,
|
|
Width = size.X,
|
|
Height = size.Y,
|
|
Tag = modifiersList[i],
|
|
Appearance = Appearance.Button,
|
|
Checked = selection.Count(x => x.Modifier.ModifierID == modifiersList[i].ModifierID) > 0
|
|
};
|
|
control.Click += new EventHandler(bcDelegate);
|
|
flpModifier.Controls.Add(control);
|
|
list.Add(control);
|
|
}
|
|
}
|
|
|
|
private void btnClose_Click(object sender, EventArgs e)
|
|
{
|
|
this.Close();
|
|
}
|
|
|
|
private void flpModifier_Resize(object sender, EventArgs e)
|
|
{
|
|
var size = GetSize(flpModifier, modifiersList.Count);
|
|
foreach (var item in list)
|
|
{
|
|
item.Width = size.X;
|
|
item.Height = size.Y;
|
|
}
|
|
}
|
|
}
|
|
}
|