Files
ATV_STDLabelAttach/Handler/Project/Dialog/Model_Motion_Desc.cs
ChiKyun Kim b037dd53e6 ..
2025-09-23 15:41:16 +09:00

895 lines
25 KiB
C#

#pragma warning disable IDE1006 // 명명 스타일
using AR;
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 static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace Project.Dialog
{
public partial class Model_Motion_Desc : Form
{
public string Value = string.Empty;
short axisIndex = 0;
eAxis axis = eAxis.Z_THETA;//
Color sbBackColor = Color.FromArgb(200, 200, 200);
DataSet1 ds;
public Model_Motion_Desc(DataSet1 ds_)
{
InitializeComponent();
this.ds = ds_;
//this.bs.Filter = string.Empty;
//this.bsPos.Filter = string.Empty;
this.bs.DataSource = ds_;
this.bsPos.DataSource = ds_;
//this.bs.DataMember = string.Empty;
//this.bsPos.DataMember = string.Empty;
if (System.Diagnostics.Debugger.IsAttached == false)
{
// fb = new Dialog.fBlurPanel();
//fb.Show();
}
this.KeyPreview = true;
this.KeyDown += (s1, e1) => { if (e1.KeyCode == Keys.Escape) this.Close(); };
this.StartPosition = FormStartPosition.CenterScreen;
this.FormClosed += __Closed;
var axlist = Enum.GetNames(typeof(eAxis));
var axvalues = Enum.GetValues(typeof(eAxis));
var preValueList = new List<ushort>();
//모터설정값을 보고 해당 모터의 목록을 표시한다.
//사용하지 않는 축은 표시하지 않는다
for (int i = 0; i < SETTING.System.MotaxisCount; i++)
{
var axis = (eAxis)i;
var axisname = (eAxisName)i;
var axTitle = axisname.ToString();// axis.ToString();
if (PUB.system_mot.UseAxis(i) == false) continue;// axTitle = "Disable";
if (axTitle.Equals(i.ToString())) axTitle = "(No Name)";
this.dvMot.Rows.Add(
new string[] {
i.ToString(), axTitle, string.Empty, string.Empty, string.Empty,
string.Empty, string.Empty, string.Empty, string.Empty, string.Empty,
string.Empty
});
}
}
private void __Load(object sender, EventArgs e)
{
this.Show();
////'Application.DoEvents();
//this.ds1.Clear();
//this.ds1.MCModel.Merge(Pub.mdm.dataSet.MCModel);
//this.ds1.MCModel.AcceptChanges();
//this.ds1.MCModel.TableNewRow += Model_TableNewRow;
this.bs.Filter = "isnull(title,'') <> ''";
this.bsPos.Filter = "isnull(title,'') = '' and isnull(motindex,-1) = -1";
this.tmDisplay.Start();
//button7.Enabled = !Pub.mot.HasHomeSetOff;
//dispal current
if (PUB.Result.isSetmModel)
{
arLabel18.Text = PUB.Result.mModel.Title;
//find data
var datas = this.ds1.MCModel.Select("", this.bs.Sort);
for (int i = 0; i < datas.Length; i++)
{
if (datas[i]["Title"].ToString() == PUB.Result.mModel.Title)
{
this.bs.Position = i;
break;
}
}
}
else arLabel18.Text = "--";
if (this.ds1.MCModel.Rows.Count < 1)
{
var newdr = this.ds1.MCModel.NewMCModelRow();
newdr.Title = "Default";
newdr.pidx = -1;
newdr.PosIndex = -1;
newdr.idx = ds1.MCModel.Rows.Count + 1;
this.ds1.MCModel.AddMCModelRow(newdr);
}
PUB.log.RaiseMsg += log_RaiseMsg;
refreshtreen();
}
private void __Closed(object sender, FormClosedEventArgs e)
{
//if (fb != null) fb.Dispose();
this.tmDisplay.Enabled = false;
}
void log_RaiseMsg(DateTime LogTime, string TypeStr, string Message)
{
}
private void tmDisplay_Tick(object sender, EventArgs e)
{
this.Text = "MODEL(MOTION) SETTING";
if (PUB.mot.IsInit == false)
{
//if (groupBox3.Enabled == true) groupBox3.Enabled = false;
}
else
{
//if (groupBox3.Enabled == false) groupBox3.Enabled = true;
//각축별 기본 상태를 표시해준다.
dvMot.SuspendLayout();
for (int r = 0; r < dvMot.RowCount; r++) // 오류수정 2111221
{
var row = this.dvMot.Rows[r];
var axis = short.Parse(row.Cells[0].Value.ToString());
row.Cells[0].Style.BackColor = PUB.mot.IsServOn(axis) ? Color.Lime : Color.Tomato;
row.Cells[2].Value = $"{PUB.mot.GetCmdPos(axis)}";
row.Cells[3].Value = $"{PUB.mot.GetActPos(axis)}";
row.Cells[4].Style.BackColor = PUB.mot.IsOrg(axis) ? Color.SkyBlue : Color.Gray;
row.Cells[5].Style.BackColor = PUB.mot.IsLimitN(axis) ? Color.Red : Color.Gray;
row.Cells[6].Style.BackColor = PUB.mot.IsLimitP(axis) ? Color.Red : Color.Gray;
row.Cells[7].Style.BackColor = PUB.mot.IsInp(axis) ? Color.SkyBlue : Color.Gray;
row.Cells[8].Style.BackColor = PUB.mot.IsServAlarm(axis) ? Color.Red : Color.Gray;
row.Cells[9].Style.BackColor = PUB.mot.IsHomeSet(axis) ? Color.Green : Color.Gray;
}
dvMot.ResumeLayout();
}
// this.tblFG.Invalidate();
}
private void dv_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
}
/// <summary>
/// 상단목록에서 모션을 선택한 경우
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MotAxisSelect(int axisindex)
{
RefreshMotorPosition();
}
private void bs_CurrentChanged_1(object sender, EventArgs e)
{
//BindingData();
}
void RefreshMotorPosition()
{
var drv = this.bs.Current as DataRowView;
if (drv == null) return;
if (dvMot.SelectedCells.Count < 1) return;
var dr = drv.Row as DataSet1.MCModelRow;
//var rowindex = dvMot.SelectedCells[0].RowIndex;
//var row = dvMot.Rows[rowindex];
//var axisIndex = short.Parse(row.Cells[0].Value.ToString());
//var axis = (eAxis)this.axisIndex;
//var axisTitle = row.Cells[1].Value.ToString();
{
//위치정보 표시
bsPos.Filter = string.Format("pidx={0} and motindex = {1}", dr.idx, this.axisIndex);
////(위치정보) 데이터수량이 맞지 않으면 재 생성한다
//string[] list = null;
//Array val = null;
//Type axType = null;
//var axis = (eAxis)axisIndex;
//if (axis == eAxis.X2_FRT || axis == eAxis.X3_RER) axType = typeof(eX2SHTLoc);
//else if (axis == eAxis.X1_TOP) axType = typeof(eX1TOPLoc);
//else if (axis == eAxis.Y1_PIK) axType = typeof(eY1PIKLoc);
//else if (axis == eAxis.Y2_PRECLEAN) axType = typeof(eY2BRSLoc);
//else if (axis == eAxis.Y3_LASER) axType = typeof(eY3LSRLoc);
//else if (axis == eAxis.Y4_VIS) axType = typeof(eY4VISLoc); //전용으로바꿔야함
//else if (axis == eAxis.Z1_PIK) axType = typeof(eZ1PIKLoc);
//else if (axis == eAxis.Z2_PRECLEAN) axType = typeof(eZ2BRSLoc);
//else if (axis == eAxis.Z3_LASER) axType = typeof(eZ3LSRLoc);
//else if (axis == eAxis.Z4_VISION) axType = typeof(eZ4VISLoc);//전용으로바꿔야함
//else if (axis == eAxis.L_REAR || axis == eAxis.L_FRNT) axType = typeof(eLDLoc);
//else if (axis == eAxis.UR_NG || axis == eAxis.UR_OK || axis == eAxis.UF_NG || axis == eAxis.UF_OK) axType = typeof(eUDLoc);
//if (axType == null)
//{
// Util.MsgE("지정한 축에 대한 위치정보가 지정되지 않았습니다");
// return;
//}
//list = Enum.GetNames(axType);
//val = Enum.GetValues(axType);
//var sb = new System.Text.StringBuilder();
//var cntI = 0;
//var cntE = 0;
//var cntD = 0;
////posidx == -1인 데이터는 모두 소거한다
//var dellist = ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex && t.PosIndex == -1).ToList(); //메인목록은 남겨둔다
//cntD += dellist.Count();
//foreach (var item in dellist)
// item.Delete();
//ds1.MCModel.AcceptChanges();
////모든데이터의 체크상태를 off한다.
//var alllist = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex);
//foreach (var item in alllist)
// item.Check = false;
//ds1.MCModel.AcceptChanges();
//for (int i = 0; i < list.Length; i++)
//{
// var arrTitle = list[i];
// var vv = val.GetValue(i);
// var arrIndex = (byte)vv;// ((eAxis)(val.GetValue(i)));
// if (arrIndex < 50) continue; //여기는 예약된 위치값이므로 사용하지 않는다
// var targetem = Enum.Parse(axType, vv.ToString());
// //이 값이 데이터가 없다면 추가하고, 있다면 이름을 검사해서 결과를 안내한다
// var pDr = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.PosIndex == arrIndex && t.MotIndex == axisIndex).FirstOrDefault();
// if (pDr == null)
// {
// //cntI += 1;
// //var newdr = this.ds1.MCModel.NewMCModelRow();
// //if (ds1.MCModel.Rows.Count == 0) newdr.idx = 1;
// //else newdr.idx = ds1.MCModel.Max(t => t.idx) + 1;
// //newdr.pidx = dr.idx;
// //newdr.MotIndex = this.axisIndex;
// //newdr.PosIndex = (short)arrIndex;
// //newdr.PosTitle = arrTitle;
// //newdr.Position = 0.0;
// //newdr.Speed = 50;
// //newdr.SpeedAcc = 100;
// //newdr.Check = true;
// //newdr.Description = targetem.DescriptionAttr();
// //newdr.Category = targetem.CategoryAttr();
// //this.ds1.MCModel.AddMCModelRow(newdr);
// //newdr.EndEdit();
// //sb.AppendLine("항목 추가 : " + arrTitle);
// }
// else
// {
// //이름이 다르다면 추가해준다.
// //if (pDr.PosTitle != arrTitle)
// //{
// // sb.AppendLine("(위치)항목 변경 : " + pDr.PosTitle + " => " + arrTitle);
// // cntE += 1;
// // pDr.PosTitle = arrTitle;
// //}
// ////pDr.Description = targetem.DescriptionAttr();
// ////pDr.Category = targetem.CategoryAttr();
// //pDr.EndEdit();
// pDr.Check = true;
// }
//}
////미사용개체 삭제한다
////var NotUseList = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex && t.Check == false).ToList();
////cntD += NotUseList.Count();
////foreach (var item in NotUseList)
//// item.Delete();
//ds1.MCModel.AcceptChanges();
//if (cntI > 0) sb.AppendLine("추가수량 : " + cntI.ToString());
//if (cntE > 0) sb.AppendLine("변경수량 : " + cntE.ToString());
//if (cntD > 0) sb.AppendLine("삭제수량 : " + cntD.ToString());
////최종 확정
//this.ds1.MCModel.AcceptChanges();
//if (sb.Length > 0)
//{
// Util.MsgI(sb.ToString());
//}
}
}
private void chkJogMoveForce_Click(object sender, EventArgs e)
{
}
private void btAdd_Click(object sender, EventArgs e)
{
var newdr = this.ds1.MCModel.NewMCModelRow();// this.bs.AddNew() as DataRowView;
newdr["Title"] = DateTime.Now.ToShortDateString();
newdr["pidx"] = -1;
newdr.PosIndex = -1;
newdr["idx"] = this.ds1.MCModel.Rows.Count + 1;
this.ds1.MCModel.AddMCModelRow(newdr);
this.bs.Position = this.bs.Count - 1;
//모터축을 자동 선택해줌
//radClick_MotAxisSelect(this.flowLayoutPanel1.Controls[0], null);
}
private void btDel_Click(object sender, EventArgs e)
{
var drv = this.bs.Current as DataRowView;
if (drv == null) return;
var dlg = UTIL.MsgQ("Do you want to delete the currently selected data?");
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
bs.RemoveCurrent();
this.ds1.MCModel.AcceptChanges();
}
private void btSave_Click(object sender, EventArgs e)
{
//button - save
this.dv.Focus();
this.Validate();
this.bs.EndEdit();
this.bsPos.EndEdit();
this.Validate();
this.DialogResult = DialogResult.OK;
}
private void button2_Click(object sender, EventArgs e)
{
//select
this.Invalidate();
this.bs.EndEdit();
var drv = this.bs.Current as DataRowView;
if (drv == null) return;
var dr = drv.Row as DataSet1.MCModelRow;
if (dr.Title == "") return;
this.Value = dr.Title;
DialogResult = System.Windows.Forms.DialogResult.OK;
}
private void button6_Click(object sender, EventArgs e)
{
//적용
this.bs.EndEdit();
this.bsPos.EndEdit();
this.Validate();
var drv = this.bs.Current as DataRowView;
if (drv == null) return;
var dr = drv.Row as DataSet1.MCModelRow;
this.Value = dr.Title;
PUB.Result.mModel.ReadValue(dr.Title, this.ds1.MCModel);
if (PUB.Result.mModel.isSet)
{
PUB.log.AddAT("Motion model selection completed: " + PUB.Result.mModel.Title);
}
else UTIL.MsgE("Apply failed\n\nTarget model name not found");
}
private void button4_Click(object sender, EventArgs e)
{
var drv = this.bs.Current as DataRowView;
if (drv == null) return;
var dr = drv.Row as DataSet1.MCModelRow;
var dlg = UTIL.MsgQ(string.Format("Do you want to copy the following model information?\n\nModel name: {0}", dr.Title));
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
var newdr = this.ds1.MCModel.NewMCModelRow();
UTIL.CopyData(dr, newdr);
newdr.Title += "-copy-";
newdr.idx = this.ds1.MCModel.OrderByDescending(t => t.idx).FirstOrDefault().idx + 1;
newdr.EndEdit();
this.ds1.MCModel.AddMCModelRow(newdr);
if (this.bs.Count > 0) this.bs.Position = this.bs.Count - 1;
}
private void arDatagridView2_CellClick(object sender, DataGridViewCellEventArgs e)
{
//position click
var dv = sender as DataGridView;
var col = this.dvPosition.Columns[e.ColumnIndex];
var colName = col.Name.ToLower();
if (colName == "btgo")
{
if (PUB.mot.HasHomeSetOff)
{
UTIL.MsgE("Motion homing not completed\nPlease run 'Device Initialization' from the main screen");
return;
}
//현재값으로 모터를 이동
//현재위치값으로 설정
var cell = dv.Rows[e.RowIndex].Cells["btpos"];
var value = (double)cell.Value;
var drv = this.bsPos.Current as DataRowView;
var drParent = drv.Row as DataSet1.MCModelRow;
//일반 속도값을 찾는다
//var speedDr = drParent.Speed;// this.ds1.MCModel.Where(t => t.pidx == drParent.idx && t.MotIndex == axisIndex && t.PosIndex == -1 && t.SpdIndex == (int)eAxisSpeed.Normal).FirstOrDefault();
var speed = drParent.Speed;// speedDr.Speed;// (double)this.nudJogVel.Value;
var acc = drParent.SpeedAcc;// speedDr.SpeedAcc;// ; (double)nudAcc.Value;
var relative = false;
//if (ctl.motCommand == arFrame.Control.MotCommandButton.eCommand.RelativeMove)
// relative = true;
var msg = string.Format("모션의 위치를 변경 하시겠습니까\n" +
"축 : {0}\n" +
"현재위치 : {1}\n" +
"대상위치 : {2}\n" +
"이동속도 : {3}(가속도:{4})\n" +
"이동 시 충돌 가능성이 있는지 반드시 확인 하세요", axis, PUB.mot.GetActPos(axisIndex), value, speed, acc);
if (UTIL.MsgQ(msg) != System.Windows.Forms.DialogResult.Yes) return;
var chkJogMoveForce = true;
if (!MOT.Move(axis, value, speed, acc, relative, !chkJogMoveForce, !chkJogMoveForce))
PUB.log.AddE("MOT:MOVE_:" + axis.ToString() + ",Msg=" + PUB.mot.ErrorMessage);
}
else if (colName == "btset")
{
if (PUB.mot.HasHomeSetOff)
{
UTIL.MsgE("Motion homing not completed\nPlease run 'Device Initialization' from the main screen");
return;
}
//현재위치값으로 설정
var cell = dv.Rows[e.RowIndex].Cells["btpos"];
var value = (double)cell.Value;
var nValue = Math.Round(PUB.mot.GetCmdPos(this.axisIndex), 4); //소수점4자리에서 반올림처리한다 210414
var msg1 = string.Format("모션의 설정값을 변경 하시겠습니까\n" +
"축 : {0}\n" +
"변경전 : {1}\n" +
"변경후 : {2}\n" +
"변경 후 '저장'을 눌러야 영구 기록 됩니다", this.axis, value, nValue);
if (UTIL.MsgQ(msg1) != System.Windows.Forms.DialogResult.Yes) return;
cell.Value = nValue;
}
else if (colName == "btpos")
{
//현재값 변경 팝업
var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex];
var value = (double)cell.Value;
value = PUB.ChangeValuePopup(value, "위치 입력");
cell.Value = value;
}
else if (colName == "btspeed")
{
//현재값 변경 팝업
var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex];
var value = (double)cell.Value;
value = PUB.ChangeValuePopup(value, "속도 입력");
cell.Value = value;
}
else if (colName == "btacc")
{
//현재값 변경 팝업
var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex];
var value = (double)cell.Value;
value = PUB.ChangeValuePopup(value, "가속도 입력");
cell.Value = value;
}
else if (colName == "btdcc")
{
//현재값 변경 팝업
var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex];
if (cell.Value.ToString().isEmpty()) cell.Value = "0";
var value = (double)cell.Value;
value = PUB.ChangeValuePopup(value, "감속도 입력");
cell.Value = value;
}
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
var dlg = UTIL.MsgQ("Do you want to batch change the speed of all movement coordinates?");
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
var value = PUB.ChangeValuePopup(100.0, "일괄 속도 변경");
for (int i = 0; i < this.bsPos.Count; i++)
{
this.bsPos.Position = i;
var drv = this.bsPos.Current as DataRowView;
if (drv == null) return;
var dr = drv.Row as DataSet1.MCModelRow;
dr.Speed = value;
dr.EndEdit();
}
}
private void toolStripButton2_Click_2(object sender, EventArgs e)
{
var dlg = UTIL.MsgQ("Do you want to batch change the acceleration/deceleration of all movement coordinates?");
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
var value = PUB.ChangeValuePopup(100.0, "일괄 가(감)속도 변경");
for (int i = 0; i < this.bsPos.Count; i++)
{
this.bsPos.Position = i;
var drv = this.bsPos.Current as DataRowView;
if (drv == null) return;
var dr = drv.Row as DataSet1.MCModelRow;
dr.SpeedAcc = value;
dr.EndEdit();
}
}
private void toolStripButton3_Click_1(object sender, EventArgs e)
{
var dlg = UTIL.MsgQ("Do you want to batch change the deceleration of all movement coordinates?");
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
var value = PUB.ChangeValuePopup(0, "일괄 감속도 변경");
for (int i = 0; i < this.bsPos.Count; i++)
{
this.bsPos.Position = i;
var drv = this.bsPos.Current as DataRowView;
if (drv == null) return;
var dr = drv.Row as DataSet1.MCModelRow;
dr.SpeedDcc = value;
dr.EndEdit();
}
}
private void dvMot_SelectionChanged(object sender, EventArgs e)
{
if (dvMot.SelectedRows.Count < 1)
{
Console.WriteLine("no selecte");
this.axisIndex = -1;
this.axis = (eAxis)axisIndex;
}
else
{
var selrow = dvMot.SelectedRows[0];
this.axisIndex = short.Parse(selrow.Cells["dvc_axis"].Value.ToString());
this.axis = (eAxis)axisIndex;
MotAxisSelect(this.axisIndex);
Console.WriteLine($"select indx {axisIndex}");
}
}
private void toolStripButton5_Click(object sender, EventArgs e)
{
this.Validate();
this.bs.EndEdit();
this.bsPos.EndEdit();
//using (var f = new Dialog.Motion_MoveToGroup(this.ds,arLabel18.Text))
//{
// if (f.ShowDialog() == DialogResult.OK)
// {
// this.bs.EndEdit();
// this.bsPos.EndEdit();
// }
//}
}
void refreshtreen()
{
//모든데이터를 가져와서 트리뷰를 처리한다.
var cat = this.ds.MCModel.GroupBy(t => t.Category).ToList();
var catorders = cat.OrderBy(t => t.Key).ToList();
//var cnt = 0;
this.treeView1.Nodes.Clear();
foreach (var item in catorders)
{
if (item.Key.isEmpty()) continue;
var catenames = item.Key.Split(',');
foreach (var catename in catenames)
{
var grpname = catename.Split('|')[0];
if (catename.Split('|').Length < 2) continue;
var itemname = catename.Split('|')[1];
if (treeView1.Nodes.ContainsKey(grpname) == false)
{
var nd = treeView1.Nodes.Add(grpname, grpname);
nd.Nodes.Add(itemname);
}
else
{
if (itemname.StartsWith("F01"))// == "F01_FSOCKET_BTM")
{
}
var nd = treeView1.Nodes[grpname];
if (nd.Nodes.ContainsKey(itemname) == false)
{
var snd = nd.Nodes.Add(itemname, itemname);
if (itemname.StartsWith("R"))
snd.ForeColor = Color.Blue;
else if (itemname.StartsWith("T"))
snd.ForeColor = Color.Magenta;
}
else
{
var snd = nd.Nodes[itemname];
if (itemname.StartsWith("R"))
snd.ForeColor = Color.Blue;
else if (itemname.StartsWith("T"))
snd.ForeColor = Color.Magenta;
}
}
}
}
treeView1.ExpandAll();
if (treeView1.Nodes.Count > 0)
treeView1.SelectedNode = this.treeView1.Nodes[0];
}
void refreshlist()
{
this.listView1.Clear();
this.listView1.FullRowSelect = true;
this.listView1.View = View.Details;
this.listView1.Columns.Add("item");
this.listView1.Columns[0].Width = (int)(this.listView1.Width - listView1.Width * 0.1f);
this.listView1.GridLines = true;
this.listView1.AllowDrop = true;
var drv = this.bsPos.Current as DataRowView;
if (drv == null) return;
var dr = drv.Row as DataSet1.MCModelRow;
if (dr.Category.isEmpty()) return;
var catelist = dr.Category.Split(',');
List<string> cats = new List<string>();
foreach (var cate in catelist)
{
if (cate.isEmpty()) continue;
if (cats.Contains(cate) == false) cats.Add(cate);
}
foreach (var cate in cats.OrderBy(t=>t))
{
if (this.listView1.Items.ContainsKey(cate) == false)
{
var lv = this.listView1.Items.Add(cate, cate, 0);
}
else
{
//이미 있다.
}
}
}
private void bsPos_CurrentChanged(object sender, EventArgs e)
{
//포지션데이터가 움직이면 처리한다.
refreshlist();
}
private void toolStripButton1_Click_1(object sender, EventArgs e)
{
//트립에서 선택된 아이템을 추가한다.
var tn = this.treeView1.SelectedNode;
if (tn == null) return;
if (tn.Level != 1)
{
if (tn.Nodes.Count < 1)
{
UTIL.MsgE("No sub items found");
return;
}
var dlg = UTIL.MsgQ($"Do you want to add all {tn.Nodes.Count} data items?");
if (dlg != DialogResult.Yes) return;
var ucnt = 0;
foreach (TreeNode node in tn.Nodes)
{
var value = node.Parent.Text + "|" + node.Text;
if (this.listView1.Items.ContainsKey(value) == false)
{
this.listView1.Items.Add(value);
ucnt += 1;
}
}
UTIL.MsgI($"{ucnt} items have been added");
//현재목록을 리스트로 만들고 업데이트한.ㄷ
var drv = this.bsPos.Current as DataRowView;
var dr = drv.Row as DataSet1.MCModelRow;
List<string> items = new List<string>();
foreach (ListViewItem item in listView1.Items)
items.Add(item.SubItems[0].Text);
dr.Category = string.Join(",", items);
dr.EndEdit();
}
else
{
var value = tn.Parent.Text + "|" + tn.Text;
if (this.listView1.Items.ContainsKey(value) == false)
{
this.listView1.Items.Add(value);
//현재목록을 리스트로 만들고 업데이트한.ㄷ
var drv = this.bsPos.Current as DataRowView;
var dr = drv.Row as DataSet1.MCModelRow;
List<string> items = new List<string>();
foreach (ListViewItem item in listView1.Items)
items.Add(item.SubItems[0].Text);
dr.Category = string.Join(",", items);
dr.EndEdit();
}
else UTIL.MsgE("This item already exists.");
}
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
//선택된 항목을 삭제한다.
if (this.listView1.FocusedItem == null) return;
this.listView1.Items.Remove(this.listView1.FocusedItem);
//현재목록을 리스트로 만들고 업데이트한.ㄷ
var drv = this.bsPos.Current as DataRowView;
var dr = drv.Row as DataSet1.MCModelRow;
List<string> items = new List<string>();
foreach (ListViewItem item in listView1.Items)
items.Add(item.SubItems[0].Text);
dr.Category = string.Join(",", items);
dr.EndEdit();
}
private void toolStripButton3_Click(object sender, EventArgs e)
{
refreshlist();
}
private void toolStripButton4_Click(object sender, EventArgs e)
{
//현재선택된 아이템의 데이터를 표시한다.
var tn = this.treeView1.SelectedNode;
if (tn == null) return;
if (tn.Level == 0)
{
bsPos.Filter = $"Category like '%{tn.Text}|%'";
}
else
{
bsPos.Filter = $"Category like '%{tn.Parent.Text}|{tn.Text}%'";
}
}
private void toolStripButton6_Click(object sender, EventArgs e)
{
}
private void toolStripButton7_Click(object sender, EventArgs e)
{
refreshtreen();
}
private void toolStripButton8_Click(object sender, EventArgs e)
{
var tn = treeView1.SelectedNode;
if (tn == null) return;
var old = tn.Text.Trim();
var f = new AR.Dialog.fInput("입력",tn.Text);
if (f.ShowDialog() != DialogResult.OK) return;
if (f.ValueString.isEmpty()) return;
var targetidx = tn.Level;
foreach (DataSet1.MCModelRow dr in this.ds.MCModel.Rows)
{
if (dr.RowState == DataRowState.Deleted || dr.RowState == DataRowState.Detached) continue;
if (dr.Category.isEmpty()) continue;
var cats = dr.Category.Split(',');
List<string> items = new List<string>();
foreach (var cat in cats)
{
if (cat.isEmpty()) continue;
var buffer = cat.Split('|');
if (targetidx == 0)
{
buffer[targetidx] = buffer[targetidx].Replace(old, f.ValueString);
}
else
{
//1번의 경우 변경을 하려면 0번이 일치해야한다.
if (buffer[0] == tn.Parent.Text)
{
buffer[targetidx] = buffer[targetidx].Replace(old, f.ValueString);
}
}
items.Add(string.Join("|", buffer));
}
dr.Category = string.Join(",", items.ToArray());
dr.EndEdit();
}
refreshtreen();
}
private void toolStripButton9_Click(object sender, EventArgs e)
{
dvPosition.AutoResizeColumns();
}
}
}