using BarcodeTerminator;
using Io.Github.Kerwinxu.LibShapes.Core;
using Io.Github.Kerwinxu.LibShapes.Core.Print;
using Io.Github.Kerwinxu.LibShapes.Core.Serialize;
using Io.Github.Kerwinxu.LibShapes.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace BarcodeManager
{
public partial class FrmMain2 : Form
{
public FrmMain2()
{
InitializeComponent();
// 画布要自适应大小。
canvas_resize();
// 表格控件要自适应大小
tableLayout_resize();
// 要整行选取
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.ReadOnly = true; // 不修改。
// 初始化打印机
init_printers();
// 加载以前的模板文件路径
load_shapesFileNames();
// 加载到组合框。
combo_models_init();
// 默认选择多行
this.dataGridView1.MultiSelect = true;
}
///
/// 加载过的模型文件路径
///
private List shapesFileNames;
private string file_conf = "shapesFileNames.json";
ISerialize jsonSerialize = new JsonSerialize();
private void load_shapesFileNames()
{
if (System.IO.File.Exists(file_conf))
{
shapesFileNames = jsonSerialize.DeserializeObjectFromFile>(file_conf);
}
else
{
shapesFileNames = new List();
}
}
private void combo_models_init()
{
this.combo_models.Items.Clear();
this.combo_models.Items.AddRange(
shapesFileNames.Select(x => System.IO.Path.GetFileNameWithoutExtension(x)) // 取得文件名
.ToArray()
);
if (this.combo_models.Items.Count > 0)
{
this.combo_models.Text = this.combo_models.Items[0].ToString();
}
}
private void save_shapesFileNames()
{
jsonSerialize.SerializeObjectToFile(shapesFileNames, file_conf);
}
private void init_printers()
{
// 初始化打印机
// 加载打印机的
foreach (var item in PrinterSettings.InstalledPrinters)
{
combo_printers.Items.Add(item);
}
// 这里有一个默认的打印机
var doc = new PrintDocument();
combo_printers.Text = doc.DefaultPageSettings.PrinterSettings.PrinterName;
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start(@"https://xinyiya.taobao.com/");
}
private void canvas_resize()
{
int i = 5;
this.canvas.Location = new Point(i, i);
this.canvas.Width = this.splitContainer3.Panel1.Width - 2 * i;
this.canvas.Height = this.splitContainer3.Panel1.Height - 2 * i;
}
private void tableLayout_resize()
{
int i = 5;
this.tableLayoutPanel1.Location = new Point(i, i);
this.tableLayoutPanel1.Width = this.splitContainer3.Panel2.Width - 2 * i;
this.tableLayoutPanel1.Height = this.splitContainer3.Panel2.Height - 2 * i;
}
private void splitContainer3_Panel2_SizeChanged(object sender, EventArgs e)
{
tableLayout_resize();
}
private void btn_load_excel_Click(object sender, EventArgs e)
{
// todo 导入excel表格
openFileDialog1.Filter = "excel文件|*.xls;*.xlsx";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
var dt = ExcelData.LoadExcel(openFileDialog1.FileName);
dataGridView1.DataSource = dt; // 这个显示数据
// 将原先的变量清空
combo_qty_var_names.Items.Clear();
// 新的变量名称
combo_qty_var_names.Items.AddRange(getColumnNames(dt));
if (dt.Rows.Count > 0) row_selected(0);
}
else
{
// 如果没有导入文件,这里的数据就算
dataGridView1.DataSource = null;
}
}
private string[] getColumnNames(DataTable dt)
{
List columnNameList = new List();
foreach (DataColumn col in dt.Columns)
{
columnNameList.Add(col.ColumnName);//获取到DataColumn列对象的列名
}
return columnNameList.ToArray();
}
private void splitContainer3_Panel1_SizeChanged(object sender, EventArgs e)
{
canvas_resize();
}
///
///
///
///
///
private Dictionary getVars(int index)
{
Dictionary result = new Dictionary(); ;
//
foreach (DataGridViewColumn item in dataGridView1.Columns)
{
var column_name = item.HeaderText;
var value = this.dataGridView1.Rows[index].Cells[column_name].Value.ToString();
result[column_name] = value;
}
return result;
}
///
/// 选择单元格事件
///
///
///
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex > -1)
{
row_selected(e.RowIndex);
}
}
///
/// 行选择更改,
///
///
private void row_selected(int index)
{
var dict = getVars(index); // 取得变量
if (this.canvas != null) canvas.setVars(dict); // 将变量发送给画布
if (!string.IsNullOrEmpty(combo_qty_var_names.Text) && dict.ContainsKey(combo_qty_var_names.Text))
{
btn_print_qty.Text = dict[combo_qty_var_names.Text];
}
else
{
btn_print_qty.Text = string.Empty;
}
}
private void combo_qty_var_names_TextChanged(object sender, EventArgs e)
{
if (this.dataGridView1.DataSource != null && this.dataGridView1.CurrentRow.Index > -1)
{
row_selected(this.dataGridView1.CurrentRow.Index);
}
}
private void FrmMain2_FormClosed(object sender, FormClosedEventArgs e)
{
save_shapesFileNames();
}
private void btn_load_model_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "模板文件|*.json";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
load_shapes_model(openFileDialog1.FileName);
load_shapes_model();
}
}
private void load_shapes_model(string file_path)
{
// 这里要判断一下是否有这个路径了
if (shapesFileNames.Contains(file_path))
{
combo_models.SelectedIndex = shapesFileNames.IndexOf(file_path);
}
else
{
// 添加新的。
shapesFileNames.Insert(0, file_path);
combo_models.Items.Insert(0, System.IO.Path.GetFileNameWithoutExtension(file_path));
combo_models.SelectedIndex = 0;
}
}
///
/// 这个只是从组合框中读取的
///
private void load_shapes_model()
{
if (shapesFileNames.Count > 0)
{
string file_path = shapesFileNames[combo_models.SelectedIndex]; // 看看选择的是哪个
this.canvas.shapes = Shapes.load(file_path);
this.canvas.zoomToScreen();
this.canvas.Refresh();
}
}
private void btn_edit_model_Click(object sender, EventArgs e)
{
// todo 编辑模板
// 首先寻找是哪个模板
string file_path = shapesFileNames.Where(x => x.Contains(combo_models.Text)).FirstOrDefault();
if (file_path != null)
{
FrmBarcodeEdit frmBarcodeEdit = null;
if (this.dataGridView1.DataSource != null)
{
frmBarcodeEdit = new FrmBarcodeEdit(file_path, (DataTable)this.dataGridView1.DataSource);
}
else
{
frmBarcodeEdit = new FrmBarcodeEdit(file_path);
}
// 这里打开
if (frmBarcodeEdit.ShowDialog() == DialogResult.OK)
{
// 这里要更新啊。
load_shapes_model(file_path);
load_shapes_model();
}
}
}
private void btn_new_model_Click(object sender, EventArgs e)
{
FrmBarcodeEdit frmBarcodeEdit = null;
if (this.dataGridView1.DataSource != null)
{
frmBarcodeEdit = new FrmBarcodeEdit((DataTable)this.dataGridView1.DataSource);
}
else
{
frmBarcodeEdit = new FrmBarcodeEdit();
}
frmBarcodeEdit.ShowDialog();
// 这里打开
if ( string.IsNullOrEmpty(frmBarcodeEdit.getModelFileName()))
{
// 这里要更新啊。
load_shapes_model(frmBarcodeEdit.getModelFileName());
load_shapes_model();
}
}
///
/// 重新读取shapes
///
///
private Shapes GetShapes()
{
if (shapesFileNames.Count == 0)
{
return null;
}
// 这里取得是哪个
return Shapes.load(shapesFileNames[combo_models.SelectedIndex]);
}
private void btn_increase_print_Click(object sender, EventArgs e)
{
// 根据损耗打印
// 这里首先判断一下是否有这一个列
if (this.dataGridView1.DataSource == null) return;
try
{
var columns = getColumnNames((DataTable)this.dataGridView1.DataSource);
if (columns.Contains(combo_qty_var_names.Text))
{
// 这里表示有打印数量,要取得所有的选择的表格
var vars = new List>();// 变量的集合
var nums = new List(); // 数量的集合
var ratio = int.Parse(txt_loss_ratio.Text); // 上涨的比例
foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
{
var dict = getVars(item.Index);
vars.Add(dict);
int n = int.Parse(dict[combo_qty_var_names.Text]);
int n2 = n * ratio / 100; // 损耗
if (n2 ==0 && ratio > 0)
{
n2 = 1;
}
nums.Add(n+n2);
}
// 取得模板
var _shapes = GetShapes();
if (_shapes == null) { MessageBox.Show("没有模板文件");return; }
// 发送给打印机
PrintItem printItem = new PrintItem();
printItem.PrinterName = combo_printers.Text;
printItem.Shapes = _shapes;
printItem.Valss = vars;
printItem.PrintCounts = nums;
printItem.isFullPrint = chk_isFull.Checked;
//
PrintManagerImpl printManagerImpl = new PrintManagerImpl();
printManagerImpl.addPrintItem(printItem);
}
else
{
MessageBox.Show("没有打印数量");
}
}
catch (Exception ex)
{
MessageBox.Show("错误:" + ex.Message);
//throw;
}
}
private void btn_all_print_Click(object sender, EventArgs e)
{
// 这里首先判断一下是否有这一个列
if (this.dataGridView1.DataSource == null) return;
try
{
var columns = getColumnNames((DataTable)this.dataGridView1.DataSource);
if (columns.Contains(combo_qty_var_names.Text))
{
// 这里表示有打印数量,要取得所有的选择的表格
var vars = new List>();// 变量的集合
var nums = new List(); // 数量的集合
var ratio = int.Parse(txt_loss_ratio.Text); // 上涨的比例
foreach (DataGridViewRow item in this.dataGridView1.Rows) // 全部跟损耗的区别是这里是权表
{
var dict = getVars(item.Index);
vars.Add(dict);
int n = int.Parse(dict[combo_qty_var_names.Text]);
int n2 = n * ratio / 100; // 损耗
if (n2 == 0 && ratio > 0)
{
n2 = 1;
}
nums.Add(n + n2);
}
// 取得模板
var _shapes = GetShapes();
if (_shapes == null) { MessageBox.Show("没有模板文件"); return; }
// 发送给打印机
PrintItem printItem = new PrintItem();
printItem.PrinterName = combo_printers.Text;
printItem.Shapes = _shapes;
printItem.Valss = vars;
printItem.PrintCounts = nums;
printItem.isFullPrint = chk_isFull.Checked;
//
PrintManagerImpl printManagerImpl = new PrintManagerImpl();
printManagerImpl.addPrintItem(printItem);
}
else
{
MessageBox.Show("没有打印数量");
}
}
catch (Exception ex)
{
MessageBox.Show("错误:" + ex.Message);
//throw;
}
}
private void btn_print_2_Click(object sender, EventArgs e)
{
// 这里首先判断一下是否有这一个列
// 这里判断一下有没有数量
int num = 0;
if(!int.TryParse(txt_qty2.Text, out num))
{
MessageBox.Show("数量不对");
return;
}
if (this.dataGridView1.DataSource == null) return;
try
{
var columns = getColumnNames((DataTable)this.dataGridView1.DataSource);
if (columns.Contains(combo_qty_var_names.Text))
{
// 这里表示有打印数量,要取得所有的选择的表格
var vars = new List>();// 变量的集合
var nums = new List(); // 数量的集合
foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
{
var dict = getVars(item.Index);
vars.Add(dict);
nums.Add(num); // 跟损耗打印的不同是,这里是固定的数量。
}
// 取得模板
var _shapes = GetShapes();
if (_shapes == null) { MessageBox.Show("没有模板文件"); return; }
// 发送给打印机
PrintItem printItem = new PrintItem();
printItem.PrinterName = combo_printers.Text;
printItem.Shapes = _shapes;
printItem.Valss = vars;
printItem.PrintCounts = nums;
printItem.isFullPrint = chk_isFull.Checked;
//
PrintManagerImpl printManagerImpl = new PrintManagerImpl();
printManagerImpl.addPrintItem(printItem);
}
else
{
MessageBox.Show("没有打印数量");
}
}
catch (Exception ex)
{
MessageBox.Show("错误:" + ex.Message);
//throw;
}
}
private void combo_models_SelectedIndexChanged(object sender, EventArgs e)
{
load_shapes_model();
}
}
}