로그 추가 메인 수정 중

main
DESKTOP-999R8N3\CJY 2023-03-23 14:12:16 +09:00
parent 92e165a69c
commit 413dbf0c19
29 changed files with 8532 additions and 2261 deletions

BIN
INT_PT002.ncb 100644

Binary file not shown.

View File

@ -6,15 +6,27 @@ EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
Debug|IEC1000_CE6 (ARMV4I) = Debug|IEC1000_CE6 (ARMV4I)
Debug|Mixed Platforms = Debug|Mixed Platforms
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
Release|IEC1000_CE6 (ARMV4I) = Release|IEC1000_CE6 (ARMV4I)
Release|Mixed Platforms = Release|Mixed Platforms
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{37DB9023-1C6E-4094-9777-C626E6885290}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {37DB9023-1C6E-4094-9777-C626E6885290}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Debug|Any CPU.Build.0 = Debug|Any CPU {37DB9023-1C6E-4094-9777-C626E6885290}.Debug|Any CPU.Build.0 = Debug|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {37DB9023-1C6E-4094-9777-C626E6885290}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Debug|IEC1000_CE6 (ARMV4I).ActiveCfg = Debug|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Debug|Mixed Platforms.Deploy.0 = Debug|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Release|Any CPU.ActiveCfg = Release|Any CPU {37DB9023-1C6E-4094-9777-C626E6885290}.Release|Any CPU.ActiveCfg = Release|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Release|Any CPU.Build.0 = Release|Any CPU {37DB9023-1C6E-4094-9777-C626E6885290}.Release|Any CPU.Build.0 = Release|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Release|Any CPU.Deploy.0 = Release|Any CPU {37DB9023-1C6E-4094-9777-C626E6885290}.Release|Any CPU.Deploy.0 = Release|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Release|IEC1000_CE6 (ARMV4I).ActiveCfg = Release|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Release|Mixed Platforms.ActiveCfg = Debug|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Release|Mixed Platforms.Build.0 = Debug|Any CPU
{37DB9023-1C6E-4094-9777-C626E6885290}.Release|Mixed Platforms.Deploy.0 = Debug|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@ -29,6 +29,11 @@
private void InitializeComponent() private void InitializeComponent()
{ {
this.smartGroupBox1 = new SmartX.SmartGroupBox(); this.smartGroupBox1 = new SmartX.SmartGroupBox();
this.buttonBackup = new SmartX.SmartButton();
this.labelCount = new SmartX.SmartLabel();
this.smartListBox1 = new SmartX.SmartListBox();
this.treeViewLogAlarm = new System.Windows.Forms.TreeView();
this.smartGroupBox1.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// smartGroupBox1 // smartGroupBox1
@ -36,6 +41,10 @@
this.smartGroupBox1.BackGround = null; this.smartGroupBox1.BackGround = null;
this.smartGroupBox1.BackGroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); this.smartGroupBox1.BackGroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.smartGroupBox1.BackImage = null; this.smartGroupBox1.BackImage = null;
this.smartGroupBox1.Controls.Add(this.buttonBackup);
this.smartGroupBox1.Controls.Add(this.labelCount);
this.smartGroupBox1.Controls.Add(this.smartListBox1);
this.smartGroupBox1.Controls.Add(this.treeViewLogAlarm);
this.smartGroupBox1.FrameLineColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165))))); this.smartGroupBox1.FrameLineColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.smartGroupBox1.FrameLineColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165))))); this.smartGroupBox1.FrameLineColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.smartGroupBox1.FrameLineThickness = 2; this.smartGroupBox1.FrameLineThickness = 2;
@ -49,6 +58,181 @@
this.smartGroupBox1.Text = "smartGroupBox1"; this.smartGroupBox1.Text = "smartGroupBox1";
this.smartGroupBox1.TextColor = System.Drawing.Color.White; this.smartGroupBox1.TextColor = System.Drawing.Color.White;
// //
// buttonBackup
//
this.buttonBackup.BackGround = this.smartGroupBox1;
this.buttonBackup.BackGroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.buttonBackup.ButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.buttonBackup.ButtonDownColor = System.Drawing.Color.SlateGray;
this.buttonBackup.ButtonImageAutoSize = true;
this.buttonBackup.ButtonStyle = SmartX.SmartButton.ButtonStyles.FlatRound;
this.buttonBackup.ButtonText = "Backup";
this.buttonBackup.ColorKeySamplePosition = new System.Drawing.Point(0, 0);
this.buttonBackup.GroupID = 0;
this.buttonBackup.ImageDisable = null;
this.buttonBackup.ImageDown = null;
this.buttonBackup.ImageUp = null;
this.buttonBackup.Location = new System.Drawing.Point(793, 47);
this.buttonBackup.Mode = SmartX.SmartButton.BUTTONMODE.NORMAL;
this.buttonBackup.Name = "buttonBackup";
this.buttonBackup.NestedClickEventPrevent = false;
this.buttonBackup.OutlinePixel = 2;
this.buttonBackup.OverlapOptimize = true;
this.buttonBackup.RepeatInterval = 200;
this.buttonBackup.RepeatIntervalAccelerate = null;
this.buttonBackup.RoundSize = 10;
this.buttonBackup.SafeInterval = 200;
this.buttonBackup.Size = new System.Drawing.Size(90, 50);
this.buttonBackup.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE;
this.buttonBackup.TabIndex = 84;
this.buttonBackup.Text = null;
this.buttonBackup.TextColor = System.Drawing.Color.White;
this.buttonBackup.TextColorDisable = System.Drawing.Color.Gray;
this.buttonBackup.TextDownColor = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(238)))), ((int)(((byte)(255)))));
this.buttonBackup.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle;
this.buttonBackup.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle;
this.buttonBackup.Visible = false;
//
// labelCount
//
this.labelCount.BackGround = this.smartGroupBox1;
this.labelCount.BackGroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.labelCount.BorderColor = System.Drawing.Color.Black;
this.labelCount.BorderStyle = SmartX.SmartLabel.BorderStyles.None;
this.labelCount.Font = new System.Drawing.Font("새굴림", 20F, System.Drawing.FontStyle.Bold);
this.labelCount.LineSpacing = 0F;
this.labelCount.Location = new System.Drawing.Point(28, 47);
this.labelCount.Name = "labelCount";
this.labelCount.OverlapOptimize = true;
this.labelCount.PasswordChar = '\0';
this.labelCount.Radius = 3;
this.labelCount.RoundRectFillColor = System.Drawing.Color.LightBlue;
this.labelCount.Size = new System.Drawing.Size(290, 50);
this.labelCount.TabIndex = 83;
this.labelCount.Text = "00";
this.labelCount.TextColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(42)))), ((int)(((byte)(82)))));
this.labelCount.TextColorDisable = System.Drawing.Color.Gray;
this.labelCount.TextHAlign = SmartX.SmartLabel.TextHorAlign.Right;
this.labelCount.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle;
this.labelCount.Wordwrap = false;
//
// smartListBox1
//
this.smartListBox1.BackGround = null;
this.smartListBox1.BackGroundColor = System.Drawing.Color.White;
this.smartListBox1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.smartListBox1.BorderStyle = SmartX.SmartListBox.BORDERSTYLES.FixedSingle;
this.smartListBox1.ColumnStyles = null;
this.smartListBox1.DataSource = null;
this.smartListBox1.ItemAddOrder = SmartX.SmartListBox.ITEMADDORDERS.BOTTOMADD;
this.smartListBox1.ItemOffsetGap = 10;
this.smartListBox1.ItemOffsetX = 1;
this.smartListBox1.ItemOffsetY = 0;
this.smartListBox1.ItemTextOffsetY = 1;
this.smartListBox1.Location = new System.Drawing.Point(338, 103);
this.smartListBox1.MouseMoveEventSpace = 3;
this.smartListBox1.MouseMoveSpace = 10;
this.smartListBox1.Name = "smartListBox1";
this.smartListBox1.OverlapOptimize = true;
this.smartListBox1.ScrollBarBackColor = System.Drawing.Color.DarkGray;
this.smartListBox1.ScrollBarButtonColor = System.Drawing.Color.GhostWhite;
this.smartListBox1.ScrollBarButtonHeight = 15;
this.smartListBox1.ScrollBarButtonImage = null;
this.smartListBox1.ScrollBarButtonRound = 0;
this.smartListBox1.ScrollBarStyle = SmartX.SmartListBox.ScrollBarStyles.ScrollBar;
this.smartListBox1.ScrollButtonHeight = 30;
this.smartListBox1.ScrollButtonWidth = 30;
//
//
//
this.smartListBox1.ScrollDownButton.BackGround = null;
this.smartListBox1.ScrollDownButton.BackGroundColor = System.Drawing.Color.LightBlue;
this.smartListBox1.ScrollDownButton.ButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.smartListBox1.ScrollDownButton.ButtonDownColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(76)))), ((int)(((byte)(129)))));
this.smartListBox1.ScrollDownButton.ButtonImageAutoSize = false;
this.smartListBox1.ScrollDownButton.ButtonStyle = SmartX.SmartButton.ButtonStyles.Flat;
this.smartListBox1.ScrollDownButton.ButtonText = "▼";
this.smartListBox1.ScrollDownButton.ColorKeySamplePosition = new System.Drawing.Point(0, 0);
this.smartListBox1.ScrollDownButton.GroupID = 0;
this.smartListBox1.ScrollDownButton.ImageDisable = null;
this.smartListBox1.ScrollDownButton.ImageDown = null;
this.smartListBox1.ScrollDownButton.ImageUp = null;
this.smartListBox1.ScrollDownButton.Location = new System.Drawing.Point(513, 503);
this.smartListBox1.ScrollDownButton.Mode = SmartX.SmartButton.BUTTONMODE.NORMAL;
this.smartListBox1.ScrollDownButton.Name = "SmartListBox_m_butScrollDown";
this.smartListBox1.ScrollDownButton.NestedClickEventPrevent = false;
this.smartListBox1.ScrollDownButton.OutlinePixel = 1;
this.smartListBox1.ScrollDownButton.OverlapOptimize = true;
this.smartListBox1.ScrollDownButton.RepeatInterval = 200;
this.smartListBox1.ScrollDownButton.RepeatIntervalAccelerate = null;
this.smartListBox1.ScrollDownButton.RoundSize = 10;
this.smartListBox1.ScrollDownButton.SafeInterval = 200;
this.smartListBox1.ScrollDownButton.Size = new System.Drawing.Size(30, 30);
this.smartListBox1.ScrollDownButton.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE;
this.smartListBox1.ScrollDownButton.TabIndex = 0;
this.smartListBox1.ScrollDownButton.Text = null;
this.smartListBox1.ScrollDownButton.TextColor = System.Drawing.Color.White;
this.smartListBox1.ScrollDownButton.TextColorDisable = System.Drawing.Color.Gray;
this.smartListBox1.ScrollDownButton.TextDownColor = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(238)))), ((int)(((byte)(255)))));
this.smartListBox1.ScrollDownButton.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle;
this.smartListBox1.ScrollDownButton.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle;
this.smartListBox1.ScrollStep = 1;
//
//
//
this.smartListBox1.ScrollUpButton.BackGround = null;
this.smartListBox1.ScrollUpButton.BackGroundColor = System.Drawing.Color.LightBlue;
this.smartListBox1.ScrollUpButton.ButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.smartListBox1.ScrollUpButton.ButtonDownColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(76)))), ((int)(((byte)(129)))));
this.smartListBox1.ScrollUpButton.ButtonImageAutoSize = false;
this.smartListBox1.ScrollUpButton.ButtonStyle = SmartX.SmartButton.ButtonStyles.Flat;
this.smartListBox1.ScrollUpButton.ButtonText = "▲";
this.smartListBox1.ScrollUpButton.ColorKeySamplePosition = new System.Drawing.Point(0, 0);
this.smartListBox1.ScrollUpButton.GroupID = 0;
this.smartListBox1.ScrollUpButton.ImageDisable = null;
this.smartListBox1.ScrollUpButton.ImageDown = null;
this.smartListBox1.ScrollUpButton.ImageUp = null;
this.smartListBox1.ScrollUpButton.Location = new System.Drawing.Point(513, 2);
this.smartListBox1.ScrollUpButton.Mode = SmartX.SmartButton.BUTTONMODE.NORMAL;
this.smartListBox1.ScrollUpButton.Name = "SmartListBox_m_butScrollUp";
this.smartListBox1.ScrollUpButton.NestedClickEventPrevent = false;
this.smartListBox1.ScrollUpButton.OutlinePixel = 1;
this.smartListBox1.ScrollUpButton.OverlapOptimize = true;
this.smartListBox1.ScrollUpButton.RepeatInterval = 200;
this.smartListBox1.ScrollUpButton.RepeatIntervalAccelerate = null;
this.smartListBox1.ScrollUpButton.RoundSize = 10;
this.smartListBox1.ScrollUpButton.SafeInterval = 200;
this.smartListBox1.ScrollUpButton.Size = new System.Drawing.Size(30, 30);
this.smartListBox1.ScrollUpButton.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE;
this.smartListBox1.ScrollUpButton.TabIndex = 1;
this.smartListBox1.ScrollUpButton.Text = null;
this.smartListBox1.ScrollUpButton.TextColor = System.Drawing.Color.White;
this.smartListBox1.ScrollUpButton.TextColorDisable = System.Drawing.Color.Gray;
this.smartListBox1.ScrollUpButton.TextDownColor = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(238)))), ((int)(((byte)(255)))));
this.smartListBox1.ScrollUpButton.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle;
this.smartListBox1.ScrollUpButton.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle;
this.smartListBox1.SelectColor = System.Drawing.Color.FromArgb(((int)(((byte)(130)))), ((int)(((byte)(156)))), ((int)(((byte)(184)))));
this.smartListBox1.SelectFilled = true;
this.smartListBox1.SelectItemIndex = -1;
this.smartListBox1.SelectTextColor = System.Drawing.Color.White;
this.smartListBox1.SeparationlineColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(125)))), ((int)(((byte)(125)))), ((int)(((byte)(125)))));
this.smartListBox1.SeparationlineColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(201)))), ((int)(((byte)(210)))), ((int)(((byte)(224)))));
this.smartListBox1.SeparationLineStyle = SmartX.SmartListBox.SEPARATIONLINETYPES.FixedSingle;
this.smartListBox1.SeparationlineVisibleBottom = true;
this.smartListBox1.SeparationlineVisibleTop = true;
this.smartListBox1.Size = new System.Drawing.Size(545, 535);
this.smartListBox1.TabIndex = 82;
this.smartListBox1.Text = "smartListBox1";
this.smartListBox1.TextColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(42)))), ((int)(((byte)(82)))));
this.smartListBox1.TextColorDisable = System.Drawing.Color.Gray;
//
// treeViewLogAlarm
//
this.treeViewLogAlarm.Location = new System.Drawing.Point(28, 103);
this.treeViewLogAlarm.Name = "treeViewLogAlarm";
this.treeViewLogAlarm.Size = new System.Drawing.Size(290, 535);
this.treeViewLogAlarm.TabIndex = 81;
//
// ControlMenuLogAlarm // ControlMenuLogAlarm
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
@ -56,6 +240,7 @@
this.Controls.Add(this.smartGroupBox1); this.Controls.Add(this.smartGroupBox1);
this.Name = "ControlMenuLogAlarm"; this.Name = "ControlMenuLogAlarm";
this.Size = new System.Drawing.Size(909, 664); this.Size = new System.Drawing.Size(909, 664);
this.smartGroupBox1.ResumeLayout(false);
this.ResumeLayout(false); this.ResumeLayout(false);
} }
@ -63,5 +248,9 @@
#endregion #endregion
private SmartX.SmartGroupBox smartGroupBox1; private SmartX.SmartGroupBox smartGroupBox1;
private SmartX.SmartButton buttonBackup;
private SmartX.SmartLabel labelCount;
private SmartX.SmartListBox smartListBox1;
private System.Windows.Forms.TreeView treeViewLogAlarm;
} }
} }

View File

@ -6,8 +6,10 @@ using System.Drawing;
using System.Data; using System.Data;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using System.IO;
using INT_PT002.Forms; using INT_PT002.Forms;
using INT_PT002.DataStore;
namespace INT_PT002.Controls namespace INT_PT002.Controls
{ {
@ -15,6 +17,9 @@ namespace INT_PT002.Controls
{ {
#region Field #region Field
private FormMenu m_ParentForm; private FormMenu m_ParentForm;
private Define.E_DataType SelecteDataType;
private List<DataBackupYear> ListAlarmFile;
#endregion #endregion
#region Constructor #region Constructor
@ -23,7 +28,9 @@ namespace INT_PT002.Controls
InitializeComponent(); InitializeComponent();
this.ParentForm = parent; this.ParentForm = parent;
this.Initialize(); this.Initialize();
this.DefaultSetting();
} }
#endregion #endregion
@ -40,6 +47,121 @@ namespace INT_PT002.Controls
{ {
this.smartGroupBox1.Text = "Log > Alarm"; this.smartGroupBox1.Text = "Log > Alarm";
} }
private void DefaultSetting()
{
this.SelecteDataType = Define.E_DataType.None;
this.ListAlarmFile = new List<DataBackupYear>();
}
private void UpdateDisplayFile()
{
int fileCount = 0;
//TreeNode node;
List<string> years = new List<string>();
List<string> months = new List<string>();
List<string> days = new List<string>();
this.treeViewLogAlarm.Nodes.Clear();
this.ListAlarmFile.Clear();
DirectoryInfo dir = new DirectoryInfo(this.ParentForm.ParentForm.PathDataInspectionFolder);
List<string> fileNames = new List<string>();
// 폴더 체크
if (dir.Exists == false)
dir.Create();
// year 폴더 가져오기
DirectoryInfo[] yearDirectorys = dir.GetDirectories();
// year 폴더 정렬
years = this.ParentForm.DirectorySort(yearDirectorys);
// Inspection File 리스트 생성
if (years.Count != 0)
{
// Year
foreach (string year in years)
{
DataBackupYear y = new DataBackupYear(year);
DirectoryInfo monthDir = new DirectoryInfo(string.Format("{0}{1}", this.ParentForm.ParentForm.PathDataAlarmFolder, year));
DirectoryInfo[] monthDirectorys = monthDir.GetDirectories();
months = this.ParentForm.DirectorySort(monthDirectorys);
if (months.Count != 0)
{
// Month
foreach (string month in months)
{
DirectoryInfo dayDir = new DirectoryInfo(string.Format("{0}{1}\\{2}", this.ParentForm.ParentForm.PathDataAlarmFolder, year, month));
FileInfo[] dayFiles = dayDir.GetFiles();
days = this.DayInspectionDirectorySort(dayFiles);
DataBackupMonth m = new DataBackupMonth(month);
m.Days = days;
y.Months.Add(m);
}
this.ListAlarmFile.Add(y);
}
else
{
this.ListAlarmFile.Add(y);
}
}
// node 생성
for (int i = 0; i < this.ListAlarmFile.Count; i++)
{
TreeNode node = new TreeNode(this.ListAlarmFile[i].Year);
for (int j = 0; j < this.ListAlarmFile[i].Months.Count; j++)
{
TreeNode nodeMonth = new TreeNode(this.ListAlarmFile[i].Months[j].Month);
for (int k = 0; k < this.ListAlarmFile[i].Months[j].Days.Count; k++)
{
nodeMonth.Nodes.Add(this.ListAlarmFile[i].Months[j].Days[k]);
fileCount++;
}
node.Nodes.Add(nodeMonth);
}
this.treeViewLogAlarm.Nodes.Add(node);
}
}
this.labelCount.Text = fileCount.ToString();
}
private List<string> DayInspectionDirectorySort(FileInfo[] files)
{
List<string> listFile = new List<string>();
Dictionary<string, int> dirNames = new Dictionary<string, int>();
#region File List 품번 순서데로 정렬
foreach (FileInfo file in files)
dirNames.Add(file.Name, int.Parse(file.Name.Substring(10, 1)));
var vrList = dirNames.OrderBy(x => x.Value);
foreach (var v in vrList)
listFile.Add(v.Key);
#endregion
#region File List 날짜 순서데로 정렬
dirNames = new Dictionary<string, int>();
foreach (string f in listFile)
dirNames.Add(f, int.Parse(f.Substring(1, 8)));
listFile.Clear();
vrList = dirNames.OrderBy(x => x.Value);
foreach (var v in vrList)
listFile.Add(v.Key);
#endregion
return listFile;
}
public void DisplayRefresh() public void DisplayRefresh()
{ {

View File

@ -29,6 +29,12 @@
private void InitializeComponent() private void InitializeComponent()
{ {
this.smartGroupBox1 = new SmartX.SmartGroupBox(); this.smartGroupBox1 = new SmartX.SmartGroupBox();
this.buttonBackup = new SmartX.SmartButton();
this.labelCount = new SmartX.SmartLabel();
this.listbox = new SmartX.SmartListBox();
this.treeViewHistory = new System.Windows.Forms.TreeView();
this.smartFile1 = new SmartX.SmartFile();
this.smartGroupBox1.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// smartGroupBox1 // smartGroupBox1
@ -36,6 +42,10 @@
this.smartGroupBox1.BackGround = null; this.smartGroupBox1.BackGround = null;
this.smartGroupBox1.BackGroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); this.smartGroupBox1.BackGroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.smartGroupBox1.BackImage = null; this.smartGroupBox1.BackImage = null;
this.smartGroupBox1.Controls.Add(this.buttonBackup);
this.smartGroupBox1.Controls.Add(this.labelCount);
this.smartGroupBox1.Controls.Add(this.listbox);
this.smartGroupBox1.Controls.Add(this.treeViewHistory);
this.smartGroupBox1.FrameLineColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165))))); this.smartGroupBox1.FrameLineColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.smartGroupBox1.FrameLineColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165))))); this.smartGroupBox1.FrameLineColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.smartGroupBox1.FrameLineThickness = 2; this.smartGroupBox1.FrameLineThickness = 2;
@ -49,6 +59,186 @@
this.smartGroupBox1.Text = "smartGroupBox1"; this.smartGroupBox1.Text = "smartGroupBox1";
this.smartGroupBox1.TextColor = System.Drawing.Color.White; this.smartGroupBox1.TextColor = System.Drawing.Color.White;
// //
// buttonBackup
//
this.buttonBackup.BackGround = this.smartGroupBox1;
this.buttonBackup.BackGroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.buttonBackup.ButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.buttonBackup.ButtonDownColor = System.Drawing.Color.SlateGray;
this.buttonBackup.ButtonImageAutoSize = true;
this.buttonBackup.ButtonStyle = SmartX.SmartButton.ButtonStyles.FlatRound;
this.buttonBackup.ButtonText = "Backup";
this.buttonBackup.ColorKeySamplePosition = new System.Drawing.Point(0, 0);
this.buttonBackup.GroupID = 0;
this.buttonBackup.ImageDisable = null;
this.buttonBackup.ImageDown = null;
this.buttonBackup.ImageUp = null;
this.buttonBackup.Location = new System.Drawing.Point(793, 47);
this.buttonBackup.Mode = SmartX.SmartButton.BUTTONMODE.NORMAL;
this.buttonBackup.Name = "buttonBackup";
this.buttonBackup.NestedClickEventPrevent = false;
this.buttonBackup.OutlinePixel = 2;
this.buttonBackup.OverlapOptimize = true;
this.buttonBackup.RepeatInterval = 200;
this.buttonBackup.RepeatIntervalAccelerate = null;
this.buttonBackup.RoundSize = 10;
this.buttonBackup.SafeInterval = 200;
this.buttonBackup.Size = new System.Drawing.Size(90, 50);
this.buttonBackup.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE;
this.buttonBackup.TabIndex = 80;
this.buttonBackup.Text = null;
this.buttonBackup.TextColor = System.Drawing.Color.White;
this.buttonBackup.TextColorDisable = System.Drawing.Color.Gray;
this.buttonBackup.TextDownColor = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(238)))), ((int)(((byte)(255)))));
this.buttonBackup.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle;
this.buttonBackup.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle;
this.buttonBackup.Visible = false;
//
// labelCount
//
this.labelCount.BackGround = this.smartGroupBox1;
this.labelCount.BackGroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.labelCount.BorderColor = System.Drawing.Color.Black;
this.labelCount.BorderStyle = SmartX.SmartLabel.BorderStyles.None;
this.labelCount.Font = new System.Drawing.Font("새굴림", 20F, System.Drawing.FontStyle.Bold);
this.labelCount.LineSpacing = 0F;
this.labelCount.Location = new System.Drawing.Point(28, 47);
this.labelCount.Name = "labelCount";
this.labelCount.OverlapOptimize = true;
this.labelCount.PasswordChar = '\0';
this.labelCount.Radius = 3;
this.labelCount.RoundRectFillColor = System.Drawing.Color.LightBlue;
this.labelCount.Size = new System.Drawing.Size(290, 50);
this.labelCount.TabIndex = 2;
this.labelCount.Text = "00";
this.labelCount.TextColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(42)))), ((int)(((byte)(82)))));
this.labelCount.TextColorDisable = System.Drawing.Color.Gray;
this.labelCount.TextHAlign = SmartX.SmartLabel.TextHorAlign.Right;
this.labelCount.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle;
this.labelCount.Wordwrap = false;
//
// listbox
//
this.listbox.BackGround = null;
this.listbox.BackGroundColor = System.Drawing.Color.White;
this.listbox.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.listbox.BorderStyle = SmartX.SmartListBox.BORDERSTYLES.FixedSingle;
this.listbox.ColumnStyles = null;
this.listbox.DataSource = null;
this.listbox.ItemAddOrder = SmartX.SmartListBox.ITEMADDORDERS.BOTTOMADD;
this.listbox.ItemOffsetGap = 10;
this.listbox.ItemOffsetX = 1;
this.listbox.ItemOffsetY = 0;
this.listbox.ItemTextOffsetY = 1;
this.listbox.Location = new System.Drawing.Point(338, 103);
this.listbox.MouseMoveEventSpace = 3;
this.listbox.MouseMoveSpace = 10;
this.listbox.Name = "listbox";
this.listbox.OverlapOptimize = true;
this.listbox.ScrollBarBackColor = System.Drawing.Color.DarkGray;
this.listbox.ScrollBarButtonColor = System.Drawing.Color.GhostWhite;
this.listbox.ScrollBarButtonHeight = 15;
this.listbox.ScrollBarButtonImage = null;
this.listbox.ScrollBarButtonRound = 0;
this.listbox.ScrollBarStyle = SmartX.SmartListBox.ScrollBarStyles.ScrollBar;
this.listbox.ScrollButtonHeight = 30;
this.listbox.ScrollButtonWidth = 30;
//
//
//
this.listbox.ScrollDownButton.BackGround = null;
this.listbox.ScrollDownButton.BackGroundColor = System.Drawing.Color.LightBlue;
this.listbox.ScrollDownButton.ButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.listbox.ScrollDownButton.ButtonDownColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(76)))), ((int)(((byte)(129)))));
this.listbox.ScrollDownButton.ButtonImageAutoSize = false;
this.listbox.ScrollDownButton.ButtonStyle = SmartX.SmartButton.ButtonStyles.Flat;
this.listbox.ScrollDownButton.ButtonText = "▼";
this.listbox.ScrollDownButton.ColorKeySamplePosition = new System.Drawing.Point(0, 0);
this.listbox.ScrollDownButton.GroupID = 0;
this.listbox.ScrollDownButton.ImageDisable = null;
this.listbox.ScrollDownButton.ImageDown = null;
this.listbox.ScrollDownButton.ImageUp = null;
this.listbox.ScrollDownButton.Location = new System.Drawing.Point(513, 503);
this.listbox.ScrollDownButton.Mode = SmartX.SmartButton.BUTTONMODE.NORMAL;
this.listbox.ScrollDownButton.Name = "SmartListBox_m_butScrollDown";
this.listbox.ScrollDownButton.NestedClickEventPrevent = false;
this.listbox.ScrollDownButton.OutlinePixel = 1;
this.listbox.ScrollDownButton.OverlapOptimize = true;
this.listbox.ScrollDownButton.RepeatInterval = 200;
this.listbox.ScrollDownButton.RepeatIntervalAccelerate = null;
this.listbox.ScrollDownButton.RoundSize = 10;
this.listbox.ScrollDownButton.SafeInterval = 200;
this.listbox.ScrollDownButton.Size = new System.Drawing.Size(30, 30);
this.listbox.ScrollDownButton.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE;
this.listbox.ScrollDownButton.TabIndex = 0;
this.listbox.ScrollDownButton.Text = null;
this.listbox.ScrollDownButton.TextColor = System.Drawing.Color.White;
this.listbox.ScrollDownButton.TextColorDisable = System.Drawing.Color.Gray;
this.listbox.ScrollDownButton.TextDownColor = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(238)))), ((int)(((byte)(255)))));
this.listbox.ScrollDownButton.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle;
this.listbox.ScrollDownButton.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle;
this.listbox.ScrollStep = 1;
//
//
//
this.listbox.ScrollUpButton.BackGround = null;
this.listbox.ScrollUpButton.BackGroundColor = System.Drawing.Color.LightBlue;
this.listbox.ScrollUpButton.ButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.listbox.ScrollUpButton.ButtonDownColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(76)))), ((int)(((byte)(129)))));
this.listbox.ScrollUpButton.ButtonImageAutoSize = false;
this.listbox.ScrollUpButton.ButtonStyle = SmartX.SmartButton.ButtonStyles.Flat;
this.listbox.ScrollUpButton.ButtonText = "▲";
this.listbox.ScrollUpButton.ColorKeySamplePosition = new System.Drawing.Point(0, 0);
this.listbox.ScrollUpButton.GroupID = 0;
this.listbox.ScrollUpButton.ImageDisable = null;
this.listbox.ScrollUpButton.ImageDown = null;
this.listbox.ScrollUpButton.ImageUp = null;
this.listbox.ScrollUpButton.Location = new System.Drawing.Point(513, 2);
this.listbox.ScrollUpButton.Mode = SmartX.SmartButton.BUTTONMODE.NORMAL;
this.listbox.ScrollUpButton.Name = "SmartListBox_m_butScrollUp";
this.listbox.ScrollUpButton.NestedClickEventPrevent = false;
this.listbox.ScrollUpButton.OutlinePixel = 1;
this.listbox.ScrollUpButton.OverlapOptimize = true;
this.listbox.ScrollUpButton.RepeatInterval = 200;
this.listbox.ScrollUpButton.RepeatIntervalAccelerate = null;
this.listbox.ScrollUpButton.RoundSize = 10;
this.listbox.ScrollUpButton.SafeInterval = 200;
this.listbox.ScrollUpButton.Size = new System.Drawing.Size(30, 30);
this.listbox.ScrollUpButton.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE;
this.listbox.ScrollUpButton.TabIndex = 1;
this.listbox.ScrollUpButton.Text = null;
this.listbox.ScrollUpButton.TextColor = System.Drawing.Color.White;
this.listbox.ScrollUpButton.TextColorDisable = System.Drawing.Color.Gray;
this.listbox.ScrollUpButton.TextDownColor = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(238)))), ((int)(((byte)(255)))));
this.listbox.ScrollUpButton.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle;
this.listbox.ScrollUpButton.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle;
this.listbox.SelectColor = System.Drawing.Color.FromArgb(((int)(((byte)(130)))), ((int)(((byte)(156)))), ((int)(((byte)(184)))));
this.listbox.SelectFilled = true;
this.listbox.SelectItemIndex = -1;
this.listbox.SelectTextColor = System.Drawing.Color.White;
this.listbox.SeparationlineColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(125)))), ((int)(((byte)(125)))), ((int)(((byte)(125)))));
this.listbox.SeparationlineColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(201)))), ((int)(((byte)(210)))), ((int)(((byte)(224)))));
this.listbox.SeparationLineStyle = SmartX.SmartListBox.SEPARATIONLINETYPES.FixedSingle;
this.listbox.SeparationlineVisibleBottom = true;
this.listbox.SeparationlineVisibleTop = true;
this.listbox.Size = new System.Drawing.Size(545, 535);
this.listbox.TabIndex = 1;
this.listbox.Text = "smartListBox1";
this.listbox.TextColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(42)))), ((int)(((byte)(82)))));
this.listbox.TextColorDisable = System.Drawing.Color.Gray;
//
// treeViewHistory
//
this.treeViewHistory.Location = new System.Drawing.Point(28, 103);
this.treeViewHistory.Name = "treeViewHistory";
this.treeViewHistory.Size = new System.Drawing.Size(290, 535);
this.treeViewHistory.TabIndex = 0;
this.treeViewHistory.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewHistory_AfterSelect);
//
// smartFile1
//
this.smartFile1.FilePathName = "";
//
// ControlMenuLogHistory // ControlMenuLogHistory
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
@ -56,6 +246,7 @@
this.Controls.Add(this.smartGroupBox1); this.Controls.Add(this.smartGroupBox1);
this.Name = "ControlMenuLogHistory"; this.Name = "ControlMenuLogHistory";
this.Size = new System.Drawing.Size(909, 664); this.Size = new System.Drawing.Size(909, 664);
this.smartGroupBox1.ResumeLayout(false);
this.ResumeLayout(false); this.ResumeLayout(false);
} }
@ -63,5 +254,10 @@
#endregion #endregion
private SmartX.SmartGroupBox smartGroupBox1; private SmartX.SmartGroupBox smartGroupBox1;
private System.Windows.Forms.TreeView treeViewHistory;
private SmartX.SmartListBox listbox;
private SmartX.SmartLabel labelCount;
private SmartX.SmartButton buttonBackup;
private SmartX.SmartFile smartFile1;
} }
} }

View File

@ -6,8 +6,12 @@ using System.Drawing;
using System.Data; using System.Data;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using System.IO;
using SmartX;
using INT_PT002.Forms; using INT_PT002.Forms;
using INT_PT002.DataStore;
using INT_PT002.DialogForms;
namespace INT_PT002.Controls namespace INT_PT002.Controls
{ {
@ -15,6 +19,9 @@ namespace INT_PT002.Controls
{ {
#region Field #region Field
private FormMenu m_ParentForm; private FormMenu m_ParentForm;
private Define.E_DataType SelecteDataType;
private List<DataBackupYear> ListHistoryFile;
#endregion #endregion
#region Constructor #region Constructor
@ -23,7 +30,9 @@ namespace INT_PT002.Controls
InitializeComponent(); InitializeComponent();
this.ParentForm = parent; this.ParentForm = parent;
this.Initialize(); this.Initialize();
this.DefaultSetting();
} }
#endregion #endregion
@ -40,15 +49,160 @@ namespace INT_PT002.Controls
{ {
this.smartGroupBox1.Text = "Log > History"; this.smartGroupBox1.Text = "Log > History";
} }
private void DefaultSetting()
{
this.SelecteDataType = Define.E_DataType.None;
this.ListHistoryFile = new List<DataBackupYear>();
}
public void LoadFile(string fullFilePath)
{
if (fullFilePath.Contains("_History") == false)
return;
this.smartFile1.FilePathName = fullFilePath;
this.smartFile1.Open();
this.smartFile1.StringType.EncodingType = SmartX.SmartFile.Encodings.ANSI;
try
{
this.smartFile1.StringType.FillBuffer();
long lineNum = this.smartFile1.StringType.GetCount();
for (int i = 1; i < lineNum; i++)
{
this.listbox.AddItem(this.smartFile1.StringType.ReadBuffer(i));
}
}
catch
{
DialogFormMessage myMsg = new DialogFormMessage(16, this.ParentForm.ParentForm.SystemConfig.LANGUAGE);
myMsg.ShowDialog();
this.smartFile1.Close();
}
this.smartFile1.Close();
}
private void UpdateDisplayFile()
{
int fileCount = 0;
//TreeNode node;
List<string> years = new List<string>();
List<string> months = new List<string>();
List<string> days = new List<string>();
this.treeViewHistory.Nodes.Clear();
this.ListHistoryFile.Clear();
DirectoryInfo dir = new DirectoryInfo(this.ParentForm.ParentForm.PathDataHistoryFolder);
List<string> fileNames = new List<string>();
// 폴더 체크
if (dir.Exists == false)
dir.Create();
// year 폴더 가져오기
DirectoryInfo[] yearDirectorys = dir.GetDirectories();
// year 폴더 정렬
years = this.ParentForm.DirectorySort(yearDirectorys);
// Inspection File 리스트 생성
if (years.Count != 0)
{
// Year
foreach (string year in years)
{
DataBackupYear y = new DataBackupYear(year);
DirectoryInfo monthDir = new DirectoryInfo(string.Format("{0}{1}", this.ParentForm.ParentForm.PathDataHistoryFolder, year));
DirectoryInfo[] monthDirectorys = monthDir.GetDirectories();
months = this.ParentForm.DirectorySort(monthDirectorys);
if (months.Count != 0)
{
// Month
foreach (string month in months)
{
DirectoryInfo dayDir = new DirectoryInfo(string.Format("{0}{1}\\{2}", this.ParentForm.ParentForm.PathDataHistoryFolder, year, month));
FileInfo[] dayFiles = dayDir.GetFiles();
days = this.DayHistoryDirectorySort(dayFiles);
DataBackupMonth m = new DataBackupMonth(month);
m.Days = days;
y.Months.Add(m);
}
this.ListHistoryFile.Add(y);
}
else
{
this.ListHistoryFile.Add(y);
}
}
// node 생성
for (int i = 0; i < this.ListHistoryFile.Count; i++)
{
TreeNode node = new TreeNode(this.ListHistoryFile[i].Year);
for (int j = 0; j < this.ListHistoryFile[i].Months.Count; j++)
{
TreeNode nodeMonth = new TreeNode(this.ListHistoryFile[i].Months[j].Month);
for (int k = 0; k < this.ListHistoryFile[i].Months[j].Days.Count; k++)
{
nodeMonth.Nodes.Add(this.ListHistoryFile[i].Months[j].Days[k]);
fileCount++;
}
node.Nodes.Add(nodeMonth);
}
this.treeViewHistory.Nodes.Add(node);
}
}
this.labelCount.Text = fileCount.ToString();
}
private List<string> DayHistoryDirectorySort(FileInfo[] files)
{
List<string> listFile = new List<string>();
Dictionary<string, int> dirNames = new Dictionary<string, int>();
Dictionary<string, int> dirNamesSort = new Dictionary<string, int>();
foreach (FileInfo file in files)
{
if (file.Name.StartsWith("20") == true)
dirNames.Add(file.Name, int.Parse(file.Name.Substring(0, 8)));
}
var vrList = dirNames.Keys.ToList();
vrList.Sort();
foreach (var v in vrList)
dirNamesSort.Add(v, dirNames[v]);
foreach (var v in dirNamesSort)
listFile.Add(v.Key);
return listFile;
}
public void DisplayRefresh() public void DisplayRefresh()
{ {
this.SelecteDataType = Define.E_DataType.None;
this.UpdateDisplayFile();
this.treeViewHistory.ExpandAll();
} }
#endregion #endregion
#region Event Handler #region Event Handler
private void treeViewHistory_AfterSelect(object sender, TreeViewEventArgs e)
{
this.LoadFile(this.ParentForm.ParentForm.PathDataHistoryFolder + this.treeViewHistory.SelectedNode.FullPath);
}
#endregion #endregion
} }
} }

View File

@ -117,6 +117,12 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="smartFile1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>33</value>
</metadata>
<metadata name="$this.FormFactorShadowProperty" xml:space="preserve"> <metadata name="$this.FormFactorShadowProperty" xml:space="preserve">
<value>WEBPAD</value> <value>WEBPAD</value>
</metadata> </metadata>

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,17 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel; using System.ComponentModel;
using System.Drawing; using System.Drawing;
using System.Data; using System.Data;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using System.IO;
using INT_PT002.Forms; using INT_PT002.Forms;
using INT_PT002.DataStore;
using INT_PT002.DialogForms;
namespace INT_PT002.Controls namespace INT_PT002.Controls
{ {
@ -14,6 +19,15 @@ namespace INT_PT002.Controls
{ {
#region Field #region Field
private FormMenu m_ParentForm; private FormMenu m_ParentForm;
private Define.E_DataType SelecteDataType;
private List<DataBackupYear> ListInspectionFile;
private Collection<SmartX.SmartListBox> CollectionListBox;
private Collection<SmartX.SmartLabel> CollectionPassCount;
private Collection<SmartX.SmartLabel> CollectionLeakCount;
private List<int> ListPassCount;
private List<int> ListLeakCount;
#endregion #endregion
#region Constructor #region Constructor
@ -22,7 +36,9 @@ namespace INT_PT002.Controls
InitializeComponent(); InitializeComponent();
this.ParentForm = parent; this.ParentForm = parent;
this.Initialize(); this.Initialize();
this.DefaultSetting();
} }
#endregion #endregion
@ -39,15 +55,314 @@ namespace INT_PT002.Controls
{ {
this.smartGroupBox1.Text = "Log > Inspection"; this.smartGroupBox1.Text = "Log > Inspection";
} }
private void DefaultSetting()
{
this.SelecteDataType = Define.E_DataType.None;
this.ListInspectionFile = new List<DataBackupYear>();
this.CollectionListBox = new Collection<SmartX.SmartListBox>();
this.CollectionListBox.Clear();
this.CollectionListBox.Add(this.listBox1);
this.CollectionListBox.Add(this.listBox2);
this.CollectionListBox.Add(this.listBox3);
this.CollectionListBox.Add(this.listBox4);
this.CollectionListBox.Add(this.listBox5);
this.CollectionListBox.Add(this.listBox6);
this.CollectionListBox.Add(this.listBox7);
this.CollectionListBox.Add(this.listBox8);
this.CollectionListBox.Add(this.listBox9);
this.CollectionListBox.Add(this.listBox10);
this.CollectionPassCount = new Collection<SmartX.SmartLabel>();
this.CollectionPassCount.Clear();
this.CollectionPassCount.Add(this.labelPassCount1);
this.CollectionPassCount.Add(this.labelPassCount2);
this.CollectionPassCount.Add(this.labelPassCount3);
this.CollectionPassCount.Add(this.labelPassCount4);
this.CollectionPassCount.Add(this.labelPassCount5);
this.CollectionPassCount.Add(this.labelPassCount6);
this.CollectionPassCount.Add(this.labelPassCount7);
this.CollectionPassCount.Add(this.labelPassCount8);
this.CollectionPassCount.Add(this.labelPassCount9);
this.CollectionPassCount.Add(this.labelPassCount10);
this.CollectionLeakCount = new Collection<SmartX.SmartLabel>();
this.CollectionLeakCount.Clear();
this.CollectionLeakCount.Add(this.labelLeakCount1);
this.CollectionLeakCount.Add(this.labelLeakCount2);
this.CollectionLeakCount.Add(this.labelLeakCount3);
this.CollectionLeakCount.Add(this.labelLeakCount4);
this.CollectionLeakCount.Add(this.labelLeakCount5);
this.CollectionLeakCount.Add(this.labelLeakCount6);
this.CollectionLeakCount.Add(this.labelLeakCount7);
this.CollectionLeakCount.Add(this.labelLeakCount8);
this.CollectionLeakCount.Add(this.labelLeakCount9);
this.CollectionLeakCount.Add(this.labelLeakCount10);
this.ListPassCount = new List<int>();
for (int i = 0; i < 10; i++)
this.ListPassCount.Add(0);
this.ListLeakCount = new List<int>();
for (int i = 0; i < 10; i++)
this.ListLeakCount.Add(0);
}
public void LoadFile(string fullFilePath)
{
if (fullFilePath.Contains("_Inspection") == false)
return;
this.smartFile1.FilePathName = fullFilePath;
this.smartFile1.Open();
this.smartFile1.StringType.EncodingType = SmartX.SmartFile.Encodings.ANSI;
try
{
for (int i = 0; i < 10; i++)
this.ListPassCount[i] = 0;
for (int i = 0; i < 10; i++)
this.ListLeakCount[i] = 0;
this.smartFile1.StringType.FillBuffer();
long lineNum = this.smartFile1.StringType.GetCount();
for (int i = 1; i < lineNum; i++)
{
this.UpdateListBoxDataDisplay(this.smartFile1.StringType.ReadBuffer(i));
}
for (int i = 0; i < 10; i++)
{
this.CollectionPassCount[i].Text = this.ListPassCount[i].ToString();
this.CollectionLeakCount[i].Text = this.ListLeakCount[i].ToString();
}
}
catch
{
DialogFormMessage myMsg = new DialogFormMessage(16, this.ParentForm.ParentForm.SystemConfig.LANGUAGE);
myMsg.ShowDialog();
this.smartFile1.Close();
}
this.smartFile1.Close();
}
private void UpdateListBoxDataDisplay(string data)
{
if (data.Contains(",") == false)
return;
string[] sb = data.Split(',');
string temp = "";
// Time
this.listBoxTime.AddItem(sb[1]);
// 1~10 판정데이터
for (int i = 0; i < 10; i++)
{
temp = sb[i + 4];
if (temp == "Pass")
this.ListPassCount[i]++;
if(temp == "Leak")
this.ListLeakCount[i]++;
this.CollectionListBox[i].AddItem(sb[i + 4]);
}
}
private void UpdateDisplayFile()
{
int fileCount = 0;
//TreeNode node;
List<string> years = new List<string>();
List<string> months = new List<string>();
List<string> days = new List<string>();
this.treeViewInspection.Nodes.Clear();
this.ListInspectionFile.Clear();
DirectoryInfo dir = new DirectoryInfo(this.ParentForm.ParentForm.PathDataInspectionFolder);
List<string> fileNames = new List<string>();
// 폴더 체크
if (dir.Exists == false)
dir.Create();
// year 폴더 가져오기
DirectoryInfo[] yearDirectorys = dir.GetDirectories();
// year 폴더 정렬
years = this.ParentForm.DirectorySort(yearDirectorys);
// Inspection File 리스트 생성
if (years.Count != 0)
{
// Year
foreach (string year in years)
{
DataBackupYear y = new DataBackupYear(year);
DirectoryInfo monthDir = new DirectoryInfo(string.Format("{0}{1}", this.ParentForm.ParentForm.PathDataInspectionFolder, year));
DirectoryInfo[] monthDirectorys = monthDir.GetDirectories();
months = this.ParentForm.DirectorySort(monthDirectorys);
if (months.Count != 0)
{
// Month
foreach (string month in months)
{
DirectoryInfo dayDir = new DirectoryInfo(string.Format("{0}{1}\\{2}", this.ParentForm.ParentForm.PathDataInspectionFolder, year, month));
FileInfo[] dayFiles = dayDir.GetFiles();
days = this.DayInspectionDirectorySort(dayFiles);
DataBackupMonth m = new DataBackupMonth(month);
m.Days = days;
y.Months.Add(m);
}
this.ListInspectionFile.Add(y);
}
else
{
this.ListInspectionFile.Add(y);
}
}
// node 생성
for (int i = 0; i < this.ListInspectionFile.Count; i++)
{
TreeNode node = new TreeNode(this.ListInspectionFile[i].Year);
for (int j = 0; j < this.ListInspectionFile[i].Months.Count; j++)
{
TreeNode nodeMonth = new TreeNode(this.ListInspectionFile[i].Months[j].Month);
for (int k = 0; k < this.ListInspectionFile[i].Months[j].Days.Count; k++)
{
nodeMonth.Nodes.Add(this.ListInspectionFile[i].Months[j].Days[k]);
fileCount++;
}
node.Nodes.Add(nodeMonth);
}
this.treeViewInspection.Nodes.Add(node);
}
}
//this.labelCount.Text = fileCount.ToString();
}
private List<string> DayInspectionDirectorySort(FileInfo[] files)
{
StringBuilder sb;
List<string> listFile = new List<string>();
Dictionary<string, int> dirNames = new Dictionary<string, int>();
#region File List 품번 순서대로 정렬
foreach (FileInfo file in files)
{
sb = new StringBuilder();
for (int i = 20; i < file.Name.IndexOf("."); i++)
sb.Append(file.Name.Substring(i, 1));
dirNames.Add(file.Name, int.Parse(file.Name.Substring(20, 1)));
}
var vrList = dirNames.OrderBy(x => x.Value);
foreach (var v in vrList)
listFile.Add(v.Key);
#endregion
#region File List 날짜 순서대로 정렬
dirNames = new Dictionary<string, int>();
foreach (string f in listFile)
dirNames.Add(f, int.Parse(f.Substring(0, 8)));
listFile.Clear();
vrList = dirNames.OrderBy(x => x.Value);
foreach (var v in vrList)
listFile.Add(v.Key);
#endregion
return listFile;
}
public void DisplayRefresh() public void DisplayRefresh()
{ {
this.SelecteDataType = Define.E_DataType.None;
this.UpdateDisplayFile();
this.treeViewInspection.ExpandAll();
} }
#endregion #endregion
#region Event Handler #region Event Handler
private void buttonBackup_Click(object sender, EventArgs e)
{
string targetPath = "", sourceFilePath = "", destFilePath = "", dataFolderPath = "";
string[] result;
DirectoryInfo dir;
FileInfo[] files;
List<string> listSelectedFile = new List<string>(); // 백업할 파일 리스트 (yyyy/MM/filename.csv)
dataFolderPath = this.ParentForm.ParentForm.PathDataInspectionFolder;
if (dataFolderPath == "")
return;
#region 백업 할 파일 리스트
listSelectedFile = this.ParentForm.ParentForm.GetSeletedNodeList(this.treeViewInspection);
#endregion
targetPath = "하드 디스크\\";
if (listSelectedFile.Count == 0)
{
DialogFormMessage msg = new DialogFormMessage(4, this.ParentForm.ParentForm.SystemConfig.LANGUAGE);
msg.ShowDialog();
return;
}
SmartX.SmartSplash.Start(SmartX.SmartSplash.BuiltInLoadingImages.LOADING1_SMALL, 200);
#region USB 장착 유무 체크
// USB 장착 유무 체크
dir = new DirectoryInfo(targetPath);
if (dir.Exists == false)
{
// USB메모리가 장착되지 않았습니다
DialogFormMessage msg = new DialogFormMessage(5, this.ParentForm.ParentForm.SystemConfig.LANGUAGE);
msg.ShowDialog();
SmartX.SmartSplash.Finish();
return;
}
#endregion
}
private void buttonRemove_Click(object sender, EventArgs e)
{
}
private void treeViewInspection_AfterSelect(object sender, TreeViewEventArgs e)
{
this.labelPath.Text = e.Node.Text;
this.LoadFile(this.ParentForm.ParentForm.PathDataInspectionFolder + this.treeViewInspection.SelectedNode.FullPath);
}
private void buttonUp_Click(object sender, EventArgs e)
{
this.listBoxTime.ScrollUp();
for (int i = 0; i < 10; i++)
this.CollectionListBox[i].ScrollUp();
}
private void buttonDown_Click(object sender, EventArgs e)
{
this.listBoxTime.ScrollDown();
for (int i = 0; i < 10; i++)
this.CollectionListBox[i].ScrollDown();
}
#endregion #endregion
} }
} }

View File

@ -117,6 +117,12 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="smartFile1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>19, 6</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>37</value>
</metadata>
<metadata name="$this.FormFactorShadowProperty" xml:space="preserve"> <metadata name="$this.FormFactorShadowProperty" xml:space="preserve">
<value>WEBPAD</value> <value>WEBPAD</value>
</metadata> </metadata>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,19 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace INT_PT002.Controls.Log
{
public partial class ControlMenuLogTemporary : UserControl
{
public ControlMenuLogTemporary()
{
InitializeComponent();
}
}
}

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="$this.FormFactorShadowProperty" xml:space="preserve">
<value>WEBPAD</value>
</metadata>
</root>

View File

@ -147,6 +147,10 @@ namespace INT_PT002.Controls
} }
} }
public void UpdateDisplayAlarmView(AlarmList alarm)
{
}
public void DisplayRefresh() public void DisplayRefresh()
{ {
this.ParentForm.ParentForm.CurrentSystemStatus.CurrentDisplay = Define.E_DisplayStore.DisplayEquipmentTest; this.ParentForm.ParentForm.CurrentSystemStatus.CurrentDisplay = Define.E_DisplayStore.DisplayEquipmentTest;

View File

@ -30,6 +30,7 @@
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ControlMenuSystemInformation)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ControlMenuSystemInformation));
this.smartGroupBox1 = new SmartX.SmartGroupBox(); this.smartGroupBox1 = new SmartX.SmartGroupBox();
this.buttonUpdateMainboard = new SmartX.SmartButton();
this.smartKeyboard1 = new SmartX.SmartKeyboard(); this.smartKeyboard1 = new SmartX.SmartKeyboard();
this.smartLabel25 = new SmartX.SmartLabel(); this.smartLabel25 = new SmartX.SmartLabel();
this.labelContact3 = new SmartX.SmartLabel(); this.labelContact3 = new SmartX.SmartLabel();
@ -60,7 +61,6 @@
this.smartLabel1 = new SmartX.SmartLabel(); this.smartLabel1 = new SmartX.SmartLabel();
this.smartSeparatorLine2 = new SmartX.SmartSeparatorLine(); this.smartSeparatorLine2 = new SmartX.SmartSeparatorLine();
this.smartSeparatorLine1 = new SmartX.SmartSeparatorLine(); this.smartSeparatorLine1 = new SmartX.SmartSeparatorLine();
this.buttonUpdateMainboard = new SmartX.SmartButton();
this.smartGroupBox1.SuspendLayout(); this.smartGroupBox1.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
@ -69,8 +69,8 @@
this.smartGroupBox1.BackGround = null; this.smartGroupBox1.BackGround = null;
this.smartGroupBox1.BackGroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); this.smartGroupBox1.BackGroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.smartGroupBox1.BackImage = null; this.smartGroupBox1.BackImage = null;
this.smartGroupBox1.Controls.Add(this.buttonUpdateMainboard);
this.smartGroupBox1.Controls.Add(this.smartKeyboard1); this.smartGroupBox1.Controls.Add(this.smartKeyboard1);
this.smartGroupBox1.Controls.Add(this.buttonUpdateMainboard);
this.smartGroupBox1.Controls.Add(this.smartLabel25); this.smartGroupBox1.Controls.Add(this.smartLabel25);
this.smartGroupBox1.Controls.Add(this.labelContact3); this.smartGroupBox1.Controls.Add(this.labelContact3);
this.smartGroupBox1.Controls.Add(this.smartLabel24); this.smartGroupBox1.Controls.Add(this.smartLabel24);
@ -113,6 +113,40 @@
this.smartGroupBox1.Text = "smartGroupBox1"; this.smartGroupBox1.Text = "smartGroupBox1";
this.smartGroupBox1.TextColor = System.Drawing.Color.White; this.smartGroupBox1.TextColor = System.Drawing.Color.White;
// //
// buttonUpdateMainboard
//
this.buttonUpdateMainboard.BackGround = this.smartGroupBox1;
this.buttonUpdateMainboard.BackGroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(226)))), ((int)(((byte)(226)))), ((int)(((byte)(226)))));
this.buttonUpdateMainboard.ButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.buttonUpdateMainboard.ButtonDownColor = System.Drawing.Color.SlateGray;
this.buttonUpdateMainboard.ButtonImageAutoSize = true;
this.buttonUpdateMainboard.ButtonStyle = SmartX.SmartButton.ButtonStyles.FlatRound;
this.buttonUpdateMainboard.ButtonText = "Update";
this.buttonUpdateMainboard.ColorKeySamplePosition = new System.Drawing.Point(0, 0);
this.buttonUpdateMainboard.GroupID = 0;
this.buttonUpdateMainboard.ImageDisable = null;
this.buttonUpdateMainboard.ImageDown = null;
this.buttonUpdateMainboard.ImageUp = null;
this.buttonUpdateMainboard.Location = new System.Drawing.Point(726, 217);
this.buttonUpdateMainboard.Mode = SmartX.SmartButton.BUTTONMODE.NORMAL;
this.buttonUpdateMainboard.Name = "buttonUpdateMainboard";
this.buttonUpdateMainboard.NestedClickEventPrevent = false;
this.buttonUpdateMainboard.OutlinePixel = 2;
this.buttonUpdateMainboard.OverlapOptimize = true;
this.buttonUpdateMainboard.RepeatInterval = 200;
this.buttonUpdateMainboard.RepeatIntervalAccelerate = null;
this.buttonUpdateMainboard.RoundSize = 10;
this.buttonUpdateMainboard.SafeInterval = 200;
this.buttonUpdateMainboard.Size = new System.Drawing.Size(84, 24);
this.buttonUpdateMainboard.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE;
this.buttonUpdateMainboard.TabIndex = 90;
this.buttonUpdateMainboard.Text = null;
this.buttonUpdateMainboard.TextColor = System.Drawing.Color.White;
this.buttonUpdateMainboard.TextColorDisable = System.Drawing.Color.Gray;
this.buttonUpdateMainboard.TextDownColor = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(238)))), ((int)(((byte)(255)))));
this.buttonUpdateMainboard.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle;
this.buttonUpdateMainboard.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle;
//
// smartKeyboard1 // smartKeyboard1
// //
this.smartKeyboard1.BackGround = null; this.smartKeyboard1.BackGround = null;
@ -818,40 +852,6 @@
this.smartSeparatorLine1.TabIndex = 0; this.smartSeparatorLine1.TabIndex = 0;
this.smartSeparatorLine1.Text = "smartSeparatorLine1"; this.smartSeparatorLine1.Text = "smartSeparatorLine1";
// //
// buttonUpdateMainboard
//
this.buttonUpdateMainboard.BackGround = this.smartGroupBox1;
this.buttonUpdateMainboard.BackGroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(226)))), ((int)(((byte)(226)))), ((int)(((byte)(226)))));
this.buttonUpdateMainboard.ButtonColor = System.Drawing.Color.FromArgb(((int)(((byte)(58)))), ((int)(((byte)(110)))), ((int)(((byte)(165)))));
this.buttonUpdateMainboard.ButtonDownColor = System.Drawing.Color.SlateGray;
this.buttonUpdateMainboard.ButtonImageAutoSize = true;
this.buttonUpdateMainboard.ButtonStyle = SmartX.SmartButton.ButtonStyles.FlatRound;
this.buttonUpdateMainboard.ButtonText = "Update";
this.buttonUpdateMainboard.ColorKeySamplePosition = new System.Drawing.Point(0, 0);
this.buttonUpdateMainboard.GroupID = 0;
this.buttonUpdateMainboard.ImageDisable = null;
this.buttonUpdateMainboard.ImageDown = null;
this.buttonUpdateMainboard.ImageUp = null;
this.buttonUpdateMainboard.Location = new System.Drawing.Point(726, 217);
this.buttonUpdateMainboard.Mode = SmartX.SmartButton.BUTTONMODE.NORMAL;
this.buttonUpdateMainboard.Name = "buttonUpdateMainboard";
this.buttonUpdateMainboard.NestedClickEventPrevent = false;
this.buttonUpdateMainboard.OutlinePixel = 2;
this.buttonUpdateMainboard.OverlapOptimize = true;
this.buttonUpdateMainboard.RepeatInterval = 200;
this.buttonUpdateMainboard.RepeatIntervalAccelerate = null;
this.buttonUpdateMainboard.RoundSize = 10;
this.buttonUpdateMainboard.SafeInterval = 200;
this.buttonUpdateMainboard.Size = new System.Drawing.Size(84, 24);
this.buttonUpdateMainboard.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE;
this.buttonUpdateMainboard.TabIndex = 90;
this.buttonUpdateMainboard.Text = null;
this.buttonUpdateMainboard.TextColor = System.Drawing.Color.White;
this.buttonUpdateMainboard.TextColorDisable = System.Drawing.Color.Gray;
this.buttonUpdateMainboard.TextDownColor = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(238)))), ((int)(((byte)(255)))));
this.buttonUpdateMainboard.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle;
this.buttonUpdateMainboard.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle;
//
// ControlMenuSystemInformation // ControlMenuSystemInformation
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);

View File

@ -163,7 +163,7 @@
this.smartKeyboard.Size = new System.Drawing.Size(16, 11); this.smartKeyboard.Size = new System.Drawing.Size(16, 11);
this.smartKeyboard.SizeRunTime = new System.Drawing.Size(897, 352); this.smartKeyboard.SizeRunTime = new System.Drawing.Size(897, 352);
this.smartKeyboard.TabIndex = 119; this.smartKeyboard.TabIndex = 119;
this.smartKeyboard.TABKeyDisable = false; this.smartKeyboard.TABKeyDisable = true;
this.smartKeyboard.TargetInputObject = null; this.smartKeyboard.TargetInputObject = null;
this.smartKeyboard.Text = "smartKeyboard1"; this.smartKeyboard.Text = "smartKeyboard1";
this.smartKeyboard.TextColor = System.Drawing.Color.Black; this.smartKeyboard.TextColor = System.Drawing.Color.Black;

View File

@ -169,6 +169,30 @@ namespace INT_PT002.Controls
return; return;
} }
if (this.labelAccessRight.Text == "")
{
DialogFormMessage msg = new DialogFormMessage(null, 16, this.ParentForm.ParentForm.SystemConfig.LANGUAGE);
msg.ShowDialog();
return;
}
if (this.labelExpiryDateOfAccount.Text == "000")
{
DialogFormMessage msg = new DialogFormMessage(null, 16, this.ParentForm.ParentForm.SystemConfig.LANGUAGE);
msg.ShowDialog();
return;
}
if (this.labelExpiryDateOfPassword.Text == "00")
{
DialogFormMessage msg = new DialogFormMessage(null, 16, this.ParentForm.ParentForm.SystemConfig.LANGUAGE);
msg.ShowDialog();
return;
}
#endregion #endregion
item.ID = this.textBoxID.Text; item.ID = this.textBoxID.Text;
@ -195,7 +219,7 @@ namespace INT_PT002.Controls
menuId.fMenu[11] = this.checkBoxMenuInformation.Checked; menuId.fMenu[11] = this.checkBoxMenuInformation.Checked;
menuId.fMenu[12] = this.checkBoxMenuStatus.Checked; menuId.fMenu[12] = this.checkBoxMenuStatus.Checked;
for (int i = 13; i < UserManager.USER_MENU_ID_MAX - 13; i++) for (int i = 13; i < UserManager.USER_MENU_ID_MAX - 12; i++)
menuId.fMenu[i] = false; menuId.fMenu[i] = false;
if (this.buttonLevel1.ButtonStatus == SmartX.SmartButton.BUTSTATUS.DOWN) if (this.buttonLevel1.ButtonStatus == SmartX.SmartButton.BUTSTATUS.DOWN)
@ -225,6 +249,21 @@ namespace INT_PT002.Controls
this.ParentForm.ParentForm.SetTrackingHistoryData(Define.E_TrackingOperation.UserEditor, detail); this.ParentForm.ParentForm.SetTrackingHistoryData(Define.E_TrackingOperation.UserEditor, detail);
#endregion #endregion
} }
#region 자동 로그아웃 타임
//this.ParentForm.ParentForm.SystemConfig.AUTOMATIC_LOGOUT = int.Parse(this.labelAutomaticLogoutTime.Text);
//if (this.ParentForm.ParentForm.SystemConfig.AUTOMATIC_LOGOUT == 1)
// this.ParentForm.ParentForm.FlagAutomaticLogoutWarningTime = 30;
//else
// this.ParentForm.ParentForm.FlagAutomaticLogoutWarningTime = 60;
//UserManager.UserManager_AutoLogoutSetTimeout(this.ParentForm.ParentForm.SystemConfig.AUTOMATIC_LOGOUT, this.ParentForm.ParentForm.FlagAutomaticLogoutWarningTime);
#endregion
this.ParentForm.ParentForm.SaveSystemConfigurationFile(this.ParentForm.ParentForm.SystemConfig);
this.buttonSave.Visible = false;
} }
} }
private void CheckBoxCheckedAsLevel(Define.E_UserGroup level) private void CheckBoxCheckedAsLevel(Define.E_UserGroup level)
@ -832,21 +871,6 @@ namespace INT_PT002.Controls
private void buttonSave_Click(object sender, EventArgs e) private void buttonSave_Click(object sender, EventArgs e)
{ {
this.SaveUserDll(); this.SaveUserDll();
#region 자동 로그아웃 타임
this.ParentForm.ParentForm.SystemConfig.AUTOMATIC_LOGOUT = int.Parse(this.labelAutomaticLogoutTime.Text);
if (this.ParentForm.ParentForm.SystemConfig.AUTOMATIC_LOGOUT == 1)
this.ParentForm.ParentForm.FlagAutomaticLogoutWarningTime = 30;
else
this.ParentForm.ParentForm.FlagAutomaticLogoutWarningTime = 60;
UserManager.UserManager_AutoLogoutSetTimeout(this.ParentForm.ParentForm.SystemConfig.AUTOMATIC_LOGOUT, this.ParentForm.ParentForm.FlagAutomaticLogoutWarningTime);
#endregion
this.ParentForm.ParentForm.SaveSystemConfigurationFile(this.ParentForm.ParentForm.SystemConfig);
this.buttonSave.Visible = false;
} }
private void buttonIDEdit_Click(object sender, EventArgs e) private void buttonIDEdit_Click(object sender, EventArgs e)

View File

@ -7,6 +7,8 @@ namespace INT_PT002.DataStore
{ {
public class Define public class Define
{ {
public delegate void EventHandlerAlarmStateChange(Define.E_Trackingalarm alarm, string status);
public enum E_EquipmentStatus public enum E_EquipmentStatus
{ {
Stop = 0, Stop = 0,
@ -118,17 +120,14 @@ namespace INT_PT002.DataStore
FormMainDisplay, FormMainDisplay,
FormMenu, FormMenu,
FormProduct, FormProduct,
FormConfiguration,
FormCommunication,
FormUserEditor, FormUserEditor,
FormUserGroupEditor,
FormIOTest, FormIOTest,
FormMotorSetting,
FormEquipmentLog, FormEquipmentLog,
FormCheckLog, FormCheckLog,
FormAlarmList, FormAlarmList,
FormInformation, FormInformation,
FormEquipmentSetting, FormStatus,
FormTimeSetting,
} }
public enum E_UserGroup public enum E_UserGroup
@ -222,5 +221,13 @@ namespace INT_PT002.DataStore
Parameter, Parameter,
Alarm, Alarm,
} }
public enum E_DataType
{
None,
History,
Inspection,
Other,
}
} }
} }

View File

@ -1010,6 +1010,226 @@ namespace INT_PT002.DataStore
} }
#endregion #endregion
#region AlarmList
public class AlarmList
{
#region Field
private bool m_IsEntrySensorError;
private bool m_IsLoadcellError;
private bool m_IsPressureError;
private bool m_IsServoOff;
private bool m_IsServoAlarm;
private bool m_IsServoTorqueAlarm;
public event Define.EventHandlerAlarmStateChange EventAlarmStateChange;
#endregion
#region Constructor
public AlarmList()
{
this.Initialize();
}
#endregion
#region Property
public bool IsEntrySensorError
{
get { return this.m_IsEntrySensorError; }
set { this.m_IsEntrySensorError = value; }
}
public bool IsLoadcellError
{
get { return this.m_IsLoadcellError; }
set { this.m_IsLoadcellError = value; }
}
public bool IsPressureError
{
get { return this.m_IsPressureError; }
set { this.m_IsPressureError = value; }
}
public bool IsServoOff
{
get { return this.m_IsServoOff; }
set { this.m_IsServoOff = value; }
}
public bool IsServoAlarm
{
get { return this.m_IsServoAlarm; }
set { this.m_IsServoAlarm = value; }
}
public bool IsServoTorqueAlarmTorque
{
get { return this.m_IsServoTorqueAlarm; }
set { this.m_IsServoTorqueAlarm = value; }
}
#endregion
#region Method
private void Initialize()
{
this.IsEntrySensorError = false;
this.IsLoadcellError = false;
this.IsPressureError = false;
this.IsServoOff = false;
this.IsServoAlarm = false;
this.IsServoTorqueAlarmTorque = false;
}
public void SetAlarm(string alarm)
{
string sValue1 = "", sValue2 = "", sValue3 = "", sValue4 = "", sValue5 = "", sValue6 = "", sValue7 = "", sValue8 = "";
if (alarm.Length != 8)
return;
sValue1 = Convert.ToString(Convert.ToInt16(alarm.Substring(0, 1), 16), 2).PadLeft((4 <= 1) ? 1 : 4, '0');
sValue2 = Convert.ToString(Convert.ToInt16(alarm.Substring(1, 1), 16), 2).PadLeft((4 <= 1) ? 1 : 4, '0');
sValue3 = Convert.ToString(Convert.ToInt16(alarm.Substring(2, 1), 16), 2).PadLeft((4 <= 1) ? 1 : 4, '0');
sValue4 = Convert.ToString(Convert.ToInt16(alarm.Substring(3, 1), 16), 2).PadLeft((4 <= 1) ? 1 : 4, '0');
sValue5 = Convert.ToString(Convert.ToInt16(alarm.Substring(4, 1), 16), 2).PadLeft((4 <= 1) ? 1 : 4, '0');
sValue6 = Convert.ToString(Convert.ToInt16(alarm.Substring(5, 1), 16), 2).PadLeft((4 <= 1) ? 1 : 4, '0');
sValue7 = Convert.ToString(Convert.ToInt16(alarm.Substring(6, 1), 16), 2).PadLeft((4 <= 1) ? 1 : 4, '0');
sValue8 = Convert.ToString(Convert.ToInt16(alarm.Substring(7, 1), 16), 2).PadLeft((4 <= 1) ? 1 : 4, '0');
// 알람 12-
if (sValue3[0] == '0')
{ }
else
{ }
// 알람 11-서보알람토크
if (sValue3[1] == '0')
{
if (this.IsServoTorqueAlarmTorque != false)
{
this.IsServoTorqueAlarmTorque = false;
this.EventAlarmStateChange(Define.E_Trackingalarm.a4_ServoTorqueAlarm, "OFF");
}
}
else
{
if (this.IsServoTorqueAlarmTorque != true)
{
this.IsServoTorqueAlarmTorque = true;
this.EventAlarmStateChange(Define.E_Trackingalarm.a4_ServoTorqueAlarm, "ON");
}
}
// 알람 10-서보알람
if (sValue3[2] == '0')
{
if (this.IsServoAlarm != false)
{
this.IsServoAlarm = false;
this.EventAlarmStateChange(Define.E_Trackingalarm.a5_ServoAlarm, "OFF");
}
}
else
{
if (this.IsServoAlarm != true)
{
this.IsServoAlarm = true;
this.EventAlarmStateChange(Define.E_Trackingalarm.a5_ServoAlarm, "ON");
}
}
// 알람 9-서보OFF
if (sValue3[3] == '0')
{
if (this.IsServoOff != false)
{
this.IsServoOff = false;
this.EventAlarmStateChange(Define.E_Trackingalarm.a6_ServoOff, "OFF");
}
}
else
{
if (this.IsServoOff != true)
{
this.IsServoOff = true;
this.EventAlarmStateChange(Define.E_Trackingalarm.a6_ServoOff, "ON");
}
}
// 알람 8-
if (sValue2[0] == '0')
{ }
else
{ }
// 알람 7-
if (sValue2[1] == '0')
{ }
else
{ }
// 알람 6-
if (sValue2[2] == '0')
{ }
else
{ }
// 알람 5-
if (sValue2[3] == '0')
{ }
else
{ }
// 알람 4-
if (sValue1[0] == '0')
{ }
else
{ }
// 알람 3-공압에러
if (sValue1[1] == '0')
{
if (this.IsPressureError != false)
{
this.IsPressureError = false;
this.EventAlarmStateChange(Define.E_Trackingalarm.a1_PressureError, "OFF");
}
}
else
{
if (this.IsPressureError != true)
{
this.IsPressureError = true;
this.EventAlarmStateChange(Define.E_Trackingalarm.a1_PressureError, "ON");
}
}
// 알람 2-셀 에러
if (sValue1[2] == '0')
{
if (this.IsLoadcellError != false)
{
this.IsLoadcellError = false;
this.EventAlarmStateChange(Define.E_Trackingalarm.a2_LoadcellError, "OFF");
}
}
else
{
if (this.IsLoadcellError != true)
{
this.IsLoadcellError = true;
this.EventAlarmStateChange(Define.E_Trackingalarm.a2_LoadcellError, "ON");
}
}
// 알람 1-입력센서 에러
if (sValue1[3] == '0')
{
if (this.IsEntrySensorError != false)
{
this.IsEntrySensorError = false;
this.EventAlarmStateChange(Define.E_Trackingalarm.a3_EntrySensorError, "OFF");
}
}
else
{
if (this.IsEntrySensorError != true)
{
this.IsEntrySensorError = true;
this.EventAlarmStateChange(Define.E_Trackingalarm.a3_EntrySensorError, "ON");
}
}
}
#endregion
}
#endregion
#region HistoryData #region HistoryData
public class HistoryData public class HistoryData
{ {
@ -1081,4 +1301,75 @@ namespace INT_PT002.DataStore
#endregion #endregion
} }
#endregion #endregion
#region DataBackupYear
public class DataBackupYear
{
#region Field
private string m_Year;
public List<DataBackupMonth> Months;
#endregion
#region Constructor
public DataBackupYear(string year)
{
this.Initialize();
this.Year = year;
}
#endregion
#region Property
public string Year
{
get { return this.m_Year; }
private set { this.m_Year = value; }
}
#endregion
#region Method
private void Initialize()
{
this.Year = "";
this.Months = new List<DataBackupMonth>();
}
#endregion
}
#endregion
#region DataBackupMonth
public class DataBackupMonth
{
#region Field
private string m_Month;
public List<string> Days;
#endregion
#region Constructor
public DataBackupMonth(string month)
{
this.Initialize();
this.Month = month;
}
#endregion
#region Property
public string Month
{
get { return this.m_Month; }
private set { this.m_Month = value; }
}
#endregion
#region Method
private void Initialize()
{
this.Month = "";
this.Days = new List<string>();
}
#endregion
}
#endregion
} }

View File

@ -561,7 +561,7 @@ namespace INT_PT002.DialogForms
break; break;
case 16: case 16:
this.smartGroupBox1.Text = "Error 16"; this.smartGroupBox1.Text = "Error 16";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "필수 설정 항목을 설정해 주십시오";
break; break;
case 17: case 17:
this.smartGroupBox1.Text = "Error 17"; this.smartGroupBox1.Text = "Error 17";
@ -584,67 +584,71 @@ namespace INT_PT002.DialogForms
{ {
case 1: case 1:
this.smartGroupBox1.Text = "Error 01"; this.smartGroupBox1.Text = "Error 01";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "ID not found";
break; break;
case 2: case 2:
this.smartGroupBox1.Text = "Error 02"; this.smartGroupBox1.Text = "Error 02";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "ID : ID already exists";
break; break;
case 3: case 3:
this.smartGroupBox1.Text = "Error 03"; this.smartGroupBox1.Text = "Error 03";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "ID : Please enter 6~20 characters";
break; break;
case 4: case 4:
this.smartGroupBox1.Text = "Error 04"; this.smartGroupBox1.Text = "Error 04";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "ID : Please enter 6~20 characters";
break; break;
case 5: case 5:
this.smartGroupBox1.Text = "Error 05"; this.smartGroupBox1.Text = "Error 05";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "ID : Consecutive(123,321,abc,cba...) or";
this.labelMessage2.Text = "identical(111,222,aaa...) characters cannot be used.";
break; break;
case 6: case 6:
this.smartGroupBox1.Text = "Error 06"; this.smartGroupBox1.Text = "Error 06";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "ID : Contains invalid characters";
break; break;
case 7: case 7:
this.smartGroupBox1.Text = "Error 07"; this.smartGroupBox1.Text = "Error 07";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "ID : User account has expired";
break; break;
case 8: case 8:
this.smartGroupBox1.Text = "Error 08"; this.smartGroupBox1.Text = "Error 08";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "PASSWORD : This is the old password";
break; break;
case 9: case 9:
this.smartGroupBox1.Text = "Error 09"; this.smartGroupBox1.Text = "Error 09";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "PASSWORD : Please enter 6~20 characters";
break; break;
case 10: case 10:
this.smartGroupBox1.Text = "Error 10"; this.smartGroupBox1.Text = "Error 10";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "PASSWORD : Please enter 6~20 characters";
break; break;
case 11: case 11:
this.smartGroupBox1.Text = "Error 11"; this.smartGroupBox1.Text = "Error 11";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "PASSWORD : Consecutive(123,321,abc,cba...) or";
this.labelMessage2.Text = "identical(111,222,aaa...) characters cannot be used.";
break; break;
case 12: case 12:
this.smartGroupBox1.Text = "Error 12"; this.smartGroupBox1.Text = "Error 12";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "PASSWORD : Contains invalid characters";
this.labelMessage2.Text = "Special characters allowed : !@#$%^&*+-.";
break; break;
case 13: case 13:
this.smartGroupBox1.Text = "Error 13"; this.smartGroupBox1.Text = "Error 13";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "PASSWORD : Please include at least one English letter,";
this.labelMessage2.Text = "at least one number, and at least one special character";
break; break;
case 14: case 14:
this.smartGroupBox1.Text = "Error 14"; this.smartGroupBox1.Text = "Error 14";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "Check your password";
break; break;
case 15: case 15:
this.smartGroupBox1.Text = "Error 15"; this.smartGroupBox1.Text = "Error 15";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "PASSWORD : Password has expired";
break; break;
case 16: case 16:
this.smartGroupBox1.Text = "Error 16"; this.smartGroupBox1.Text = "Error 16";
this.labelMessage1.Text = ""; this.labelMessage1.Text = "Please set the required setting items";
break; break;
case 17: case 17:
this.smartGroupBox1.Text = "Error 17"; this.smartGroupBox1.Text = "Error 17";

View File

@ -193,7 +193,42 @@ namespace INT_PT002.DialogForms
{ {
} }
} }
public DialogFormYesNo(Define.E_LanguageID language, int ok, string msg)
{
InitializeComponent();
this.smartGroupBox1.Text = "";
this.labelMessage1.Text = "";
this.labelMessage2.Text = "";
switch (language)
{
case Define.E_LanguageID.Korean:
switch (ok)
{
case 31:
this.smartGroupBox1.Text = "파일";
this.labelMessage1.Text = string.Format("{0} 파일이 이미 있습니다. 바꾸시겠습니까?", msg);
break;
default:
break;
}
break;
case Define.E_LanguageID.English:
switch (ok)
{
case 31:
this.smartGroupBox1.Text = "File";
this.labelMessage1.Text = string.Format("{0} already exists. Do you change the file?", msg);
break;
default:
break;
}
break;
default:
break;
}
}
public DialogFormYesNo(Define.E_MessageBoxIcon icon, string code, string message1, string message2) public DialogFormYesNo(Define.E_MessageBoxIcon icon, string code, string message1, string message2)
{ {
InitializeComponent(); InitializeComponent();

View File

@ -33,7 +33,8 @@ namespace INT_PT002.Forms
private string m_PathDataStatisticsFolder; private string m_PathDataStatisticsFolder;
private string m_PathDataFolder; private string m_PathDataFolder;
private string m_PathDataHistoryFolder; private string m_PathDataHistoryFolder;
private string m_PathHeaderFolder; private string m_PathDataInspectionFolder;
private string m_PathDataAlarmFolder;
private static string m_PathBinFolder; private static string m_PathBinFolder;
// UserGroup // UserGroup
@ -60,8 +61,11 @@ namespace INT_PT002.Forms
// 장비 구동 상태 // 장비 구동 상태
private Define.E_EquipmentStatus m_EquipmentStatus; private Define.E_EquipmentStatus m_EquipmentStatus;
// 알람
private AlarmList CurrentAlarmList;
// Form // Form
public FormMainDisplay1 ChildFormMainDisplay; public FormMainDisplay2 ChildFormMainDisplay;
public FormMenu ChildFormMenu; public FormMenu ChildFormMenu;
#endregion #endregion
@ -108,10 +112,15 @@ namespace INT_PT002.Forms
get { return this.m_PathDataHistoryFolder; } get { return this.m_PathDataHistoryFolder; }
private set { this.m_PathDataHistoryFolder = value; } private set { this.m_PathDataHistoryFolder = value; }
} }
public string PathHeaderFolder public string PathDataInspectionFolder
{ {
get { return this.m_PathHeaderFolder; } get { return this.m_PathDataInspectionFolder; }
private set { this.m_PathHeaderFolder = value; } private set { this.m_PathDataInspectionFolder = value; }
}
public string PathDataAlarmFolder
{
get { return this.m_PathDataAlarmFolder; }
private set { this.m_PathDataAlarmFolder = value; }
} }
public static string PathBinFolder public static string PathBinFolder
{ {
@ -169,9 +178,13 @@ namespace INT_PT002.Forms
this.PathDataStatisticsFolder = this.PathLaunchFolder + "DataStatistics\\"; this.PathDataStatisticsFolder = this.PathLaunchFolder + "DataStatistics\\";
this.PathDataFolder = this.PathLaunchFolder + "Data\\"; this.PathDataFolder = this.PathLaunchFolder + "Data\\";
this.PathDataHistoryFolder = this.PathDataFolder + "History\\"; this.PathDataHistoryFolder = this.PathDataFolder + "History\\";
this.PathHeaderFolder = this.PathLaunchFolder + "Header\\"; this.PathDataInspectionFolder = this.PathDataFolder + "Inspection\\";
this.PathDataAlarmFolder = this.PathDataFolder + "Alarm\\";
PathBinFolder = this.PathLaunchFolder + "Bin\\"; PathBinFolder = this.PathLaunchFolder + "Bin\\";
this.CurrentAlarmList = new AlarmList();
this.CurrentAlarmList.EventAlarmStateChange += new Define.EventHandlerAlarmStateChange(this.CurrentAlarmList_Change);
this.CurrentSystemStatus = new SystemStatus(); this.CurrentSystemStatus = new SystemStatus();
this.SystemConfig = new SystemConfiguration(); this.SystemConfig = new SystemConfiguration();
this.CurrentRecipe = new Recipe(); this.CurrentRecipe = new Recipe();
@ -223,7 +236,7 @@ namespace INT_PT002.Forms
} }
private void CreateForm() private void CreateForm()
{ {
this.ChildFormMainDisplay = new FormMainDisplay1(this); this.ChildFormMainDisplay = new FormMainDisplay2(this);
this.ChildFormMenu = new FormMenu(this); this.ChildFormMenu = new FormMenu(this);
this.smartForm1.MainForm = this; this.smartForm1.MainForm = this;
@ -1451,9 +1464,9 @@ namespace INT_PT002.Forms
string.Format("{0}{1}", receiveData.Substring((i * 6) + 60, 1), receiveData.Substring((i * 6) + 61, 5).Trim()); string.Format("{0}{1}", receiveData.Substring((i * 6) + 60, 1), receiveData.Substring((i * 6) + 61, 5).Trim());
} }
#endregion #endregion
if (this.CurrentSystemStatus.CurrentDisplay == Define.E_DisplayStore.DisplayMain) //if (this.CurrentSystemStatus.CurrentDisplay == Define.E_DisplayStore.DisplayMain)
this.ChildFormMainDisplay.UpdateDisplayPresData(this.CurrentLeakData.CollPresData); // this.ChildFormMainDisplay.UpdateDisplayPresData(this.CurrentLeakData.CollPresData);
else if (this.CurrentSystemStatus.CurrentDisplay == Define.E_DisplayStore.DisplayEquipmentTest) if (this.CurrentSystemStatus.CurrentDisplay == Define.E_DisplayStore.DisplayEquipmentTest)
this.ChildFormMenu.UpdateDisplayEquipmentTestPresData(this.CurrentLeakData.CollPresData); this.ChildFormMenu.UpdateDisplayEquipmentTestPresData(this.CurrentLeakData.CollPresData);
break; break;
default: default:
@ -1501,10 +1514,13 @@ namespace INT_PT002.Forms
{ {
case "0": case "0":
#region Value Assign #region Value Assign
//this.CurrentAlarmList.SetAlarm(receiveData.Substring(0, 8)); this.CurrentAlarmList.SetAlarm(receiveData.Substring(0, 8));
#endregion #endregion
//this.ChildFormMainDisplay.UpdateDisplayAlarmView(this.CurrentAlarmList); if (this.SystemConfig.CURRENT_FORM == Define.E_FormStore.FormIOTest)
this.ChildFormMenu.Child_Manual_IoTest.UpdateDisplayAlarmView(this.CurrentAlarmList);
else
this.ChildFormMainDisplay.UpdateDisplayAlarmView(this.CurrentAlarmList);
break; break;
default: default:
break; break;
@ -1514,6 +1530,193 @@ namespace INT_PT002.Forms
} }
#endregion #endregion
#region Backup
public List<string> GetSeletedNodeList(TreeView tree)
{
int yearCNT, monthCNT, dayCNT;
List<string> listSelectedFile = new List<string>();
yearCNT = tree.Nodes.Count;
if (yearCNT != 0)
{
for (int i = 0; i < yearCNT; i++)
{
monthCNT = tree.Nodes[i].Nodes.Count;
if (monthCNT != 0)
{
for (int j = 0; j < monthCNT; j++)
{
dayCNT = tree.Nodes[i].Nodes[j].Nodes.Count;
if (dayCNT != 0)
{
for (int k = 0; k < dayCNT; k++)
{
//if (tree.Nodes[i].Nodes[j].Nodes[k].Checked == true)
//{
//listSelectedFile.Add(tree.Nodes[i].Nodes[j].Nodes[k].Text);
listSelectedFile.Add(string.Format("{0}\\{1}\\{2}", tree.Nodes[i].Text, tree.Nodes[i].Nodes[j].Text, tree.Nodes[i].Nodes[j].Nodes[k].Text));
//}
}
}
}
}
}
}
return listSelectedFile;
}
#endregion
#region Tracking Inspection data
private string GetJudgmentResult(Define.E_JudgmentStatus judg)
{
string value = "";
switch (judg)
{
case Define.E_JudgmentStatus.None:
value = "-";
break;
case Define.E_JudgmentStatus.Pass:
value = "Pass";
break;
case Define.E_JudgmentStatus.Ng:
value = "Leak";
break;
case Define.E_JudgmentStatus.Error:
value = "Empty";
break;
default:
break;
}
return value;
}
private void GetTrackingInspectionFolderPath(ref string folder, ref string fileName)
{
DateTime time = DateTime.Now;
folder = this.PathDataInspectionFolder + string.Format("{0:yyyy}\\", time) + string.Format("{0:M}\\", time);
fileName = string.Format("{0:yyyyMMdd}_Inspection_{1}", time, this.CurrentRecipe.NUMBER);
}
public void TrackingInspectionData(LeakData item)
{
bool fileCheck = false, directoryCheck = false;
string fullFilePath = "", folderPath = "", fileName = "";
StreamWriter sw;
this.GetTrackingInspectionFolderPath(ref folderPath, ref fileName);
fullFilePath = string.Format("{0}{1}", folderPath, fileName);
DirectoryInfo di = new DirectoryInfo(folderPath);
directoryCheck = di.Exists;
// 폴더 체크
if (directoryCheck == false)
di.Create();
FileInfo fileInfo = new FileInfo(fullFilePath);
fileCheck = fileInfo.Exists;
sw = new StreamWriter(fullFilePath, true, Encoding.UTF8);
if (fileCheck == false)
{
this.RemoveInspectionDataFile();
sw.Write("Date");
sw.Write(",");
sw.Write("Time");
sw.Write(",");
sw.Write("Name");
sw.Write(",");
sw.Write("Lot");
sw.Write(",");
sw.Write("1");
sw.Write(",");
sw.Write("2");
sw.Write(",");
sw.Write("3");
sw.Write(",");
sw.Write("4");
sw.Write(",");
sw.Write("5");
sw.Write(",");
sw.Write("6");
sw.Write(",");
sw.Write("7");
sw.Write(",");
sw.Write("8");
sw.Write(",");
sw.Write("9");
sw.Write(",");
sw.Write("10");
sw.WriteLine();
}
sw.Write(string.Format("{0:yyyy-MM-dd}", DateTime.Now));
sw.Write(",");
sw.Write(string.Format("{0:HH:mm:ss}", DateTime.Now));
sw.Write(",");
sw.Write(this.CurrentRecipe.NAME);
sw.Write(",");
sw.Write(this.CurrentRecipe.LOT);
sw.Write(",");
sw.Write(this.GetJudgmentResult(item.CollJudgment[0]));
sw.Write(",");
sw.Write(this.GetJudgmentResult(item.CollJudgment[1]));
sw.Write(",");
sw.Write(this.GetJudgmentResult(item.CollJudgment[2]));
sw.Write(",");
sw.Write(this.GetJudgmentResult(item.CollJudgment[3]));
sw.Write(",");
sw.Write(this.GetJudgmentResult(item.CollJudgment[4]));
sw.Write(",");
sw.Write(this.GetJudgmentResult(item.CollJudgment[5]));
sw.Write(",");
sw.Write(this.GetJudgmentResult(item.CollJudgment[6]));
sw.Write(",");
sw.Write(this.GetJudgmentResult(item.CollJudgment[7]));
sw.Write(",");
sw.Write(this.GetJudgmentResult(item.CollJudgment[8]));
sw.Write(",");
sw.Write(this.GetJudgmentResult(item.CollJudgment[9]));
sw.WriteLine();
sw.Close();
}
private void RemoveInspectionDataFile()
{
bool directoryCheck = false;
try
{
string dday = string.Format("{0:yyyyMMdd}", DateTime.Now.AddDays(-180)) + ".csv";
DirectoryInfo dir = new DirectoryInfo(this.PathDataInspectionFolder);
directoryCheck = dir.Exists;
// 폴더 체크
if (directoryCheck == false)
dir.Create();
FileInfo[] files = dir.GetFiles();
foreach (FileInfo subfile in files)
{
if (subfile.Name.StartsWith("20")) // 날짜 비교하여 10일 지난화일은 삭제함
{
if (subfile.Name.CompareTo(dday) < 0)
{
subfile.Delete();
}
}
}
}
catch
{
}
}
#endregion
#region Tracking History data #region Tracking History data
public void SetTrackingHistoryData(Define.E_TrackingOperation type, string detail) public void SetTrackingHistoryData(Define.E_TrackingOperation type, string detail)
{ {
@ -1529,20 +1732,6 @@ namespace INT_PT002.Forms
this.TrackingHistoryData(data); this.TrackingHistoryData(data);
} }
public void SetTrackingHistoryData(Define.E_Trackingalarm type, string detail)
{
HistoryData data = new HistoryData();
data.Type = "Alarm";
data.Time = DateTime.Now;
data.LoginID = this.SystemConfig.CURRENT_USER.ID;
data.Event = type.ToString();
data.Detail = detail;
data.BeforeData = "";
data.AfterData = "";
this.TrackingHistoryData(data);
}
public void SetTrackingHistoryData(Define.E_TrackingParameter type, string detail, string before, string after) public void SetTrackingHistoryData(Define.E_TrackingParameter type, string detail, string before, string after)
{ {
HistoryData data = new HistoryData(); HistoryData data = new HistoryData();
@ -1566,7 +1755,7 @@ namespace INT_PT002.Forms
DateTime time = DateTime.Now; DateTime time = DateTime.Now;
folderPath = string.Format("{0}{1}\\{2}\\", this.PathDataHistoryFolder, time.Year, time.Month); folderPath = string.Format("{0}{1}\\{2}\\", this.PathDataHistoryFolder, time.Year, time.Month);
fileName = string.Format("H{0:yyyyMMdd}.csv", time); fileName = string.Format("{0:yyyyMMdd}_History.csv", time);
fullFilePath = string.Format("{0}{1}", folderPath, fileName); fullFilePath = string.Format("{0}{1}", folderPath, fileName);
@ -1661,6 +1850,119 @@ namespace INT_PT002.Forms
} }
} }
#endregion #endregion
#region Tracking Alarm data
public void SetTrackingAlarmData(Define.E_Trackingalarm type, string detail)
{
HistoryData data = new HistoryData();
data.Type = "Alarm";
data.Time = DateTime.Now;
data.LoginID = this.SystemConfig.CURRENT_USER.ID;
data.Event = type.ToString();
data.Detail = detail;
data.BeforeData = "";
data.AfterData = "";
this.TrackingAlarmData(data);
}
private void TrackingAlarmData(HistoryData data)
{
bool fileCheck = false, directoryCheck = false;
string fullFilePath = "", folderPath = "", fileName = "";
StreamWriter sw;
DateTime time = DateTime.Now;
folderPath = string.Format("{0}{1}\\{2}\\", this.PathDataAlarmFolder, time.Year, time.Month);
fileName = string.Format("{0:yyyyMMdd}_Alarm.csv", time);
fullFilePath = string.Format("{0}{1}", folderPath, fileName);
DirectoryInfo di = new DirectoryInfo(folderPath);
directoryCheck = di.Exists;
// 폴더 체크
if (directoryCheck == false)
di.Create();
FileInfo fileInfo = new FileInfo(fullFilePath);
fileCheck = fileInfo.Exists;
sw = new StreamWriter(fullFilePath, true, Encoding.UTF8);
try
{
if (fileCheck == false)
{
this.RemoveHistoryDataFile();
sw.Write("Date");
sw.Write(",");
sw.Write("Time");
sw.Write(",");
sw.Write("LoginID");
sw.Write(",");
sw.Write("Event");
sw.Write(",");
sw.Write("Detail");
sw.WriteLine();
}
sw.Write(string.Format("{0:yyyy-MM-dd}", DateTime.Now));
sw.Write(",");
sw.Write(string.Format("{0:HH:mm:ss}", DateTime.Now));
sw.Write(",");
sw.Write(data.LoginID);
sw.Write(",");
sw.Write(data.Event.ToString());
sw.Write(",");
sw.Write(data.Detail);
sw.Write(",");
sw.Write(data.BeforeData);
sw.Write(",");
sw.Write(data.AfterData);
sw.Write(",");
sw.Write(data.Type);
sw.WriteLine();
sw.Close();
}
catch
{
}
}
private void RemoveAlarmDataFile()
{
bool directoryCheck = false;
try
{
string dday = string.Format("{0:yyyyMMdd}", DateTime.Now.AddDays(-180)) + ".csv";
DirectoryInfo dir = new DirectoryInfo(this.PathDataAlarmFolder);
directoryCheck = dir.Exists;
// 폴더 체크
if (directoryCheck == false)
dir.Create();
FileInfo[] files = dir.GetFiles();
foreach (FileInfo subfile in files)
{
if (subfile.Name.StartsWith("20")) // 날짜 비교하여 10일 지난화일은 삭제함
{
if (subfile.Name.CompareTo(dday) < 0)
subfile.Delete();
}
}
}
catch
{
}
}
#endregion
#region UserGroupFile #region UserGroupFile
private void CreateUserGroupFile() private void CreateUserGroupFile()
@ -2314,6 +2616,11 @@ namespace INT_PT002.Forms
this.smartForm1.Show(1); this.smartForm1.Show(1);
} }
private void CurrentAlarmList_Change(Define.E_Trackingalarm alarm, string status)
{
this.SetTrackingAlarmData(alarm, status);
}
private void timer_Tick(object sender, EventArgs e) private void timer_Tick(object sender, EventArgs e)
{ {
this.ChildFormMainDisplay.UpdateDisplayTime(); this.ChildFormMainDisplay.UpdateDisplayTime();

View File

@ -371,17 +371,17 @@ namespace INT_PT002.Forms
label2.Font = new Font("New Gulim", 20, FontStyle.Bold); label2.Font = new Font("New Gulim", 20, FontStyle.Bold);
break; break;
case Define.E_JudgmentStatus.Pass: case Define.E_JudgmentStatus.Pass:
value = "정상"; value = "Pass";
label2.TextColor = this.ColorResultPass; label2.TextColor = this.ColorResultPass;
label2.Font = new Font("New Gulim", 20, FontStyle.Bold); label2.Font = new Font("New Gulim", 20, FontStyle.Bold);
break; break;
case Define.E_JudgmentStatus.Ng: case Define.E_JudgmentStatus.Ng:
value = "리크"; value = "Leak";
label2.TextColor = this.ColorResultNG; label2.TextColor = this.ColorResultNG;
label2.Font = new Font("New Gulim", 20, FontStyle.Bold); label2.Font = new Font("New Gulim", 20, FontStyle.Bold);
break; break;
case Define.E_JudgmentStatus.Error: case Define.E_JudgmentStatus.Error:
value = "제품 없음"; value = "Empty";
label2.TextColor = this.ColorResultNone; label2.TextColor = this.ColorResultNone;
label2.Font = new Font("New Gulim", 20, FontStyle.Bold); label2.Font = new Font("New Gulim", 20, FontStyle.Bold);
break; break;

File diff suppressed because it is too large Load Diff

View File

@ -7,10 +7,13 @@ using System.Data;
using System.Drawing; using System.Drawing;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using System.Threading;
using SmartX; using SmartX;
using INT_PT002.DataStore; using INT_PT002.DataStore;
using INT_PT002.Controls; using INT_PT002.Controls;
using INT_PT002.Part11_UserManager;
using INT_PT002.DialogForms;
namespace INT_PT002.Forms namespace INT_PT002.Forms
{ {
@ -25,6 +28,8 @@ namespace INT_PT002.Forms
private Color ColorResultNG; private Color ColorResultNG;
private Color ColorResultNone; private Color ColorResultNone;
private Collection<SmartX.SmartLabel> CollectionLabelResult;
private FormMain m_ParentForm; private FormMain m_ParentForm;
private ControlMainDisplay ChildControl; private ControlMainDisplay ChildControl;
@ -61,6 +66,19 @@ namespace INT_PT002.Forms
this.ColorResultNG = Color.Red; this.ColorResultNG = Color.Red;
this.ColorResultNone = Color.Black; this.ColorResultNone = Color.Black;
this.CollectionLabelResult = new Collection<SmartLabel>();
this.CollectionLabelResult.Clear();
this.CollectionLabelResult.Add(this.labelResult1);
this.CollectionLabelResult.Add(this.labelResult2);
this.CollectionLabelResult.Add(this.labelResult3);
this.CollectionLabelResult.Add(this.labelResult4);
this.CollectionLabelResult.Add(this.labelResult5);
this.CollectionLabelResult.Add(this.labelResult6);
this.CollectionLabelResult.Add(this.labelResult7);
this.CollectionLabelResult.Add(this.labelResult8);
this.CollectionLabelResult.Add(this.labelResult9);
this.CollectionLabelResult.Add(this.labelResult10);
this.ChildControl = new ControlMainDisplay(this.ParentForm); this.ChildControl = new ControlMainDisplay(this.ParentForm);
this.Controls.Add(this.ChildControl); this.Controls.Add(this.ChildControl);
this.ChildControl.Location = new Point(0, 118); this.ChildControl.Location = new Point(0, 118);
@ -72,7 +90,129 @@ namespace INT_PT002.Forms
} }
private void GetJudgmentResult(Define.E_JudgmentStatus judg, SmartLabel label2) private bool UI_Invoke(ThreadStart invoker)
{
try
{
if (this.InvokeRequired)
{
if (this.IsDisposed)
return true;
this.Invoke(invoker);
}
else
{
invoker();
}
return true;
}
catch (Exception e)
{
return false;
}
}
private void Login()
{
DialogFormLogOn logOn = new DialogFormLogOn(this.ParentForm);
if (logOn.ShowDialog() == DialogResult.OK)
{
this.DisplayRefresh();
this.buttonUser.ButtonDown();
//this.ParentForm.TimerAutomaticLogout(true, this.ParentForm.SystemConfig.AutomaticLogout);
// Part 11
this.ParentForm.SetTrackingHistoryData(Define.E_TrackingOperation.Login, "");
}
else
{
this.buttonUser.ButtonUp();
}
}
public void Logout()
{
this.ParentForm.SystemConfig.CURRENT_USER.Status = Define.E_UserStatus.LogOff;
this.buttonUser.ButtonUp();
this.DisplayRefresh();
// Part 11
this.ParentForm.SetTrackingHistoryData(Define.E_TrackingOperation.Logout, "");
}
public void Part11AutomaticLogoutReset()
{
UserManager.UserManager_AutoLogoutTimeoutReset();
}
public void CallBackUserListLoginTimeoutDataEvent(UserManager.UserMgr_login_timeout_t user)
{
string code = "", message1 = "", message2 = "";
int warningTime = 0;
if (user.remainder_time != 0)
{
switch (this.ParentForm.SystemConfig.LANGUAGE)
{
case Define.E_LanguageID.Korean:
code = "로그인";
message1 = "잠시 후에 로그아웃 됩니다";
message2 = "";
break;
case Define.E_LanguageID.English:
code = "Login";
message1 = "You will be logged out after a while";
message2 = "";
break;
default:
break;
}
warningTime = this.ParentForm.FlagAutomaticLogoutWarningTime - 2;
this.UI_Invoke(delegate
{
DialogFormMessage msg = new DialogFormMessage(Define.E_MessageBoxIcon.Asterisk, code, message1, message2, warningTime);
msg.ShowDialog();
});
}
else
{
switch (this.ParentForm.SystemConfig.LANGUAGE)
{
case Define.E_LanguageID.Korean:
code = "Login";
message1 = "자동 로그아웃 되었습니다";
message2 = "";
break;
case Define.E_LanguageID.English:
code = "Login";
message1 = "automatically logged out";
message2 = "";
break;
default:
break;
}
// User Logout
UserManager.UserManager_UserLogout();
this.UI_Invoke(delegate
{
this.Logout();
});
this.UI_Invoke(delegate
{
DialogFormMessage msg = new DialogFormMessage(Define.E_MessageBoxIcon.Asterisk, code, message1, message2, 0);
msg.ShowDialog();
});
}
}
private void GetJudgmentResult(Define.E_JudgmentStatus judg, SmartLabel label)
{ {
string value = ""; string value = "";
@ -80,30 +220,30 @@ namespace INT_PT002.Forms
{ {
case Define.E_JudgmentStatus.None: case Define.E_JudgmentStatus.None:
value = "-"; value = "-";
label2.TextColor = this.ColorResultNone; label.TextColor = this.ColorResultNone;
label2.Font = new Font("New Gulim", 40, FontStyle.Bold); label.Font = new Font("New Gulim", 40, FontStyle.Bold);
break; break;
case Define.E_JudgmentStatus.Pass: case Define.E_JudgmentStatus.Pass:
value = "정상"; value = "Pass";
label2.TextColor = this.ColorResultPass; label.TextColor = this.ColorResultPass;
label2.Font = new Font("New Gulim", 40, FontStyle.Bold); label.Font = new Font("New Gulim", 40, FontStyle.Bold);
break; break;
case Define.E_JudgmentStatus.Ng: case Define.E_JudgmentStatus.Ng:
value = "리크"; value = "Leak";
label2.TextColor = this.ColorResultNG; label.TextColor = this.ColorResultNG;
label2.Font = new Font("New Gulim", 40, FontStyle.Bold); label.Font = new Font("New Gulim", 40, FontStyle.Bold);
break; break;
case Define.E_JudgmentStatus.Error: case Define.E_JudgmentStatus.Error:
value = "제품 없음"; value = "Empty";
label2.TextColor = this.ColorResultNone; label.TextColor = this.ColorResultNone;
label2.Font = new Font("New Gulim", 20, FontStyle.Bold); label.Font = new Font("New Gulim", 20, FontStyle.Bold);
break; break;
default: default:
break; break;
} }
if (label2.Text != value) if (label.Text != value)
label2.Text = value; label.Text = value;
} }
public void UpdateProcessStatusDisplay(Define.E_ProcessStatus status) public void UpdateProcessStatusDisplay(Define.E_ProcessStatus status)
@ -266,6 +406,10 @@ namespace INT_PT002.Forms
#endregion #endregion
} }
} }
public void UpdateDisplayAlarmView(AlarmList alarm)
{
}
public void UpdateDisplayDiffData(Collection<DiffData> datas) public void UpdateDisplayDiffData(Collection<DiffData> datas)
{ {
@ -281,7 +425,6 @@ namespace INT_PT002.Forms
this.timerOn.Enabled = false; this.timerOn.Enabled = false;
this.timerOff.Enabled = false; this.timerOff.Enabled = false;
this.UpdateDisplayJudgmentData1(datas); this.UpdateDisplayJudgmentData1(datas);
this.UpdateDisplayJudgmentData2(datas); this.UpdateDisplayJudgmentData2(datas);
this.UpdateDisplayJudgmentData3(datas); this.UpdateDisplayJudgmentData3(datas);
@ -293,47 +436,48 @@ namespace INT_PT002.Forms
this.UpdateDisplayJudgmentData9(datas); this.UpdateDisplayJudgmentData9(datas);
this.UpdateDisplayJudgmentData10(datas); this.UpdateDisplayJudgmentData10(datas);
this.ParentForm.TrackingInspectionData(datas);
this.ChildControl.UpdateStartLeakDataDisplay(datas); this.ChildControl.UpdateStartLeakDataDisplay(datas);
} }
private void UpdateDisplayJudgmentData1(LeakData data) private void UpdateDisplayJudgmentData1(LeakData data)
{ {
//this.GetJudgmentResult(data.CollJudgment[0], this.labelResult1); this.GetJudgmentResult(data.CollJudgment[0], this.CollectionLabelResult[0]);
} }
private void UpdateDisplayJudgmentData2(LeakData data) private void UpdateDisplayJudgmentData2(LeakData data)
{ {
//this.GetJudgmentResult(data.CollJudgment[1], this.labelResult2); this.GetJudgmentResult(data.CollJudgment[1], this.CollectionLabelResult[1]);
} }
private void UpdateDisplayJudgmentData3(LeakData data) private void UpdateDisplayJudgmentData3(LeakData data)
{ {
//this.GetJudgmentResult(data.CollJudgment[2], this.labelResult3); this.GetJudgmentResult(data.CollJudgment[2], this.CollectionLabelResult[2]);
} }
private void UpdateDisplayJudgmentData4(LeakData data) private void UpdateDisplayJudgmentData4(LeakData data)
{ {
//this.GetJudgmentResult(data.CollJudgment[3], this.labelResult4); this.GetJudgmentResult(data.CollJudgment[3], this.CollectionLabelResult[3]);
} }
private void UpdateDisplayJudgmentData5(LeakData data) private void UpdateDisplayJudgmentData5(LeakData data)
{ {
//this.GetJudgmentResult(data.CollJudgment[4], this.labelResult5); this.GetJudgmentResult(data.CollJudgment[4], this.CollectionLabelResult[4]);
} }
private void UpdateDisplayJudgmentData6(LeakData data) private void UpdateDisplayJudgmentData6(LeakData data)
{ {
//this.GetJudgmentResult(data.CollJudgment[5], this.labelResult6); this.GetJudgmentResult(data.CollJudgment[5], this.CollectionLabelResult[5]);
} }
private void UpdateDisplayJudgmentData7(LeakData data) private void UpdateDisplayJudgmentData7(LeakData data)
{ {
//this.GetJudgmentResult(data.CollJudgment[6], this.labelResult7); this.GetJudgmentResult(data.CollJudgment[6], this.CollectionLabelResult[6]);
} }
private void UpdateDisplayJudgmentData8(LeakData data) private void UpdateDisplayJudgmentData8(LeakData data)
{ {
//this.GetJudgmentResult(data.CollJudgment[7], this.labelResult8); this.GetJudgmentResult(data.CollJudgment[7], this.CollectionLabelResult[7]);
} }
private void UpdateDisplayJudgmentData9(LeakData data) private void UpdateDisplayJudgmentData9(LeakData data)
{ {
//this.GetJudgmentResult(data.CollJudgment[8], this.labelResult9); this.GetJudgmentResult(data.CollJudgment[8], this.CollectionLabelResult[8]);
} }
private void UpdateDisplayJudgmentData10(LeakData data) private void UpdateDisplayJudgmentData10(LeakData data)
{ {
//this.GetJudgmentResult(data.CollJudgment[9], this.labelResult10); this.GetJudgmentResult(data.CollJudgment[9], this.CollectionLabelResult[9]);
} }
public void UpdateDisplayTime() public void UpdateDisplayTime()
{ {
@ -355,17 +499,14 @@ namespace INT_PT002.Forms
{ {
this.ParentForm.TransferData(CommunicationCommand.Stop, CommunicationID.MainBoard); this.ParentForm.TransferData(CommunicationCommand.Stop, CommunicationID.MainBoard);
} }
private void buttonMenu_Click(object sender, EventArgs e)
{
this.ParentForm.ChildFormMenu.DisplayRefresh();
this.ParentForm.FormChange((int)Define.E_FormStore.FormMenu);
}
private void buttonDisplayGraph_Click(object sender, EventArgs e) private void buttonDisplayGraph_Click(object sender, EventArgs e)
{ {
this.ChildControl.DisplayRefresh(1); this.ChildControl.DisplayRefresh(1);
this.ChildControl.Visible = true; this.ChildControl.Visible = true;
} }
private void buttonCut_Click(object sender, EventArgs e) private void buttonStart_Click(object sender, EventArgs e)
{ {
this.ParentForm.TransferData(CommunicationCommand.CutInpupt, CommunicationID.MainBoard); this.ParentForm.TransferData(CommunicationCommand.CutInpupt, CommunicationID.MainBoard);
@ -380,6 +521,15 @@ namespace INT_PT002.Forms
this.timerOn.Enabled = true; this.timerOn.Enabled = true;
} }
private void buttonUser_Click(object sender, EventArgs e)
{
}
private void buttonMenu_Click(object sender, EventArgs e)
{
this.ParentForm.ChildFormMenu.DisplayRefresh();
this.ParentForm.FormChange((int)Define.E_FormStore.FormMenu);
}
private void smartDraw1_Click(object sender, EventArgs e) private void smartDraw1_Click(object sender, EventArgs e)
{ {
@ -455,7 +605,6 @@ namespace INT_PT002.Forms
this.timerOn.Enabled = true; this.timerOn.Enabled = true;
} }
#endregion
private void buttonExit_Click(object sender, EventArgs e) private void buttonExit_Click(object sender, EventArgs e)
{ {
@ -463,5 +612,8 @@ namespace INT_PT002.Forms
this.ParentForm.Dispose(); this.ParentForm.Dispose();
this.ParentForm.Close(); this.ParentForm.Close();
} }
#endregion
} }
} }

View File

@ -117,96 +117,330 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="smartDraw_ChartChannelPenStyle1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="timerOff.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>264, 17</value>
</metadata>
<metadata name="timerOn.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>351, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="smartForm1.BackImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="smartForm1.BackImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
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 7b77/R+OXxFwfWXm3Fa2fa7tvysV8mM8MVVypsX3yIr5O4GYOdvpFDflHgQAAGhRegBaXDoARA/3u//6
AAAAAECAAAAAAAABAgAAAAAECAAAAAAQIAAAAABAwLw5AwAAAOwmAAAAAECAAAAAAAABAgAAAAAECAAA G81f/f9/u5krcH1l5txWtn2umA/l10H5m6LRwcetsRCJMQbHzMmbcn0BAABalB6AFjMCwCv/9T+CjR+j
AAAQIAAAAABAgAAAAAAAAQIAAAAABAgAAAAAECAAAAAAQMC8eX8OAAAAsJoAAAAAAAECAAAAAAQIAAAA oc/uLRbGm/qxkG/2h7g1P5P9vvd/IDLAv/zr76K90/0/LmXm3Fa2fa6YTjlDhvgxBl/+s4/k95hyMYsi
ABAgAAAAAEDAXJ4BAAAAdhMAAAAAIEAAAAAAgAABAAAAAAIEAAAAAAiYy/efzgEAAAA2EwAAAAAgQAAA Pca8iimUUytuivFcfzvfxvjYPMcBgLdd6QFoMSMAsKAyc24r2wIAT1XpAWghAHCKMnNuK9sCAE9V6QFo
AACAAAEAAAAAAgQAAAAACBAAAAAAIEAAAAAAgAABAAAAAAIEAAAAAAiYt2cAAACA3QQAAAAACJi3V+cA IQBwijJzbivbAgBPVekBaCEAcIoyc24r2wIAT1XpAWghAHCKMnNuK9sCAE9V6QFoIQBwijJzbivbAgBP
AAAAqwkAAAAAECAAAAAAQIAAAAAAAAECAAAAAAQIAAAAABAgAAAAAECAAAAAAAABAgAAAAAECAAAAAAQ VekBaCEAcIoyc24r2wIAT1XpAWghAHCKMnNuK9sCAE9V6QFoIQBwijJzbivbAgBPVekBaCEAcIoyc24r
IAAAAABAgAAAAAAAAQIAAAAABMy7MwAAAMBuAgAAAAAECAAAAAAQIAAAAABAgAAAAAAAAQIAAAAABAgA 2wIAT1XpAWghAHCKMnNuK9sCAE9V6QFoIQBwijJzbivbAgBPVekBaCEAcIoyc24r2wIAT1XpAWghAHCK
AAAAECAAAAAAQIAAAAAAAAHz7vocAAAAYDUBAAAAAAIEAAAAAAgQAAAAACBAAAAAAICAeX8GAAAA2E0A MnNuK9sCAE9V6QFoIQBwijJzbivbAgBPVekBaCEAcIoyc24r2wIAT1XpAWghAHCKMnNuK9sCAE9V6QFo
AAAAgAABAAAAAAIEAAAAAAgQAAAAACBAAAAAAIAAAQAAAAACBAAAAAAIEAAAAAAgQAAAAACAAAEAAAAA IQBwijJzbivbAgBPVekBaCEAcIoyc24r2wIAT1XpAWghAHCKMnNuK9sCAE9V6QFoIQBwijJzbivbAgBP
AgQAAAAACBAAAAAAIEAAAAAAgAABAAAAAALm6gwAAACw21x9OAcAAABYTQAAAACAAAEAAAAAAgQAAAAA VekBaCEAcIoyc24r2wIAT1XpAWghAHCKMnNuK9sCAE9V6QFoIQBwijJzbivbAgBPVekBaCEAcIoyc24r
CBAAAAAAIEAAAAAAgAABAAAAAAIEAAAAAAgQAAAAACBAAAAAAIAAAQAAAAACBAAAAAAIEAAAAAAgYK7P 2wIAT1XpAWghAHCKMnNuK9sCAE9V6QFoIQBwijJzbivbAgBPVekBaCEAcIoyc24r2wIAT1XpAWghAHCK
AAAAALsJAAAAABAgAAAAAEDAXH/4fA4AAACwmQAAAAAAAQIAAAAABAgAAAAAECAAAAAAQMBcfzwHAAAA MnNuK9sCAE9V6QFoIQBwijJzbivbAgBPVekBaCEAcIoyc24r2wIAT1XpAWghAHCKMnNuK9sCAE9V6QFo
WE0AAAAAgAABAAAAAAIEAAAAAAgQAAAAACBAAAAAAIAAAQAAAAAC5sMZAAAAYDcBAAAAAAIEAAAAAAgQ cSwAvOel95Yqwr3KzLnNvAKARZQegBbHAsC7X3ypVBHuinlSZs5t5hUArOBoh8BJjgWAd7zzhVJIuCvm
AAAAACBAAAAAAIAAAQAAAAACBAAAAAAIEAAAAAAgQAAAAACAAAEAAAAAAgQAAAAACBAAAAAAIEAAAAAA SZk5t5lXALCCox0CJzkWAMK7Xnix1BK2YoaUObOHeQUAT9vDOgTOcDgAhEhvPrPBXTEr3kqyN68A4El6
gAABAAAAAALm4xkAAABgt/n46RwAAABgNQEAAAAAAgQAAAAACBAAAAAAIEAAAAAAgAABAAAAAAIEAAAA ix0Cb7uHBAAAAOCREgAAAGAhAgAAACxEAAAAgIUIAAAAsBABAAAAFiIAAADAQgQAAABYiAAAAAALEQAA
AAgQAAAAACBAAAAAAIAAAQAAAAACBAAAAAAIEAAAAAAgQAAAAACAAAEAAAAAAubTGQAAAGA3AQAAAAAC AGAhAgAAACxEAAAAgIUIAAAAsBABAAAAFiIAAADAQh4SAN7xzhfe/eJLL/3JnwIAwG3RN0b3WPpJGh0O
BAAAAAAIEAAAAAAgQAAAAACAAAEAAAAAAgQAAAAACJhPn88BAAAAVhMAAAAAIEAAAAAAgAABAAAAAAIE AO964cVSVAAAuC16yNJV0uVYAIj0VmoJAAB7+D3ARRwLAD75AwDAw0QnWXpLWhwLAO956b2lkAAAsEd0
AAAAAAgQAAAAACBAAAAAAICA+XwGAAAA2E0AAAAAgAABAAAAAAIEAAAAAAgQAAAAACBAAAAAAIAAAQAA kqW3pMWxAFCqCAAA+5XekhYCAAAAk5TekhYCAAAAk5TekhYCAAAAk5TekhanB4Cf/eKXw49+8tP3vf8D
AAACBAAAAAAIEAAAAAAgQAAAAACAAAEAAAAAAgQAAAAACBAAAAAAIEAAAAAAgPU+f/kfOAHKas5MfjcA ZQUAABZRektanB4Afv8f//n1b37rr//mb//u7//hd//2+1/9+rdlBQAAFlF6S1rMCAB/8bm/zOWIAfHj
AAAASUVORK5CYII= y3/2kfzxfe//wFh+5dVPjuUhNiy/MYjVwnYk3F0tRu7uDQCAXqW3pMXUAPD6V9/IAPCzX/zyX/71d7Ec
C/Hjr37921gOsZCtfESF3/3b73Pwu9//YYyU1bK/zx2mr3/zW2XDH/3kpzECAMBFlN6SFjMCQDTif/f3
/xB9fLTm0fHHYHyP5WjWo4//pzf/ORv6EKkgfowMELfGQiSHbPpfefWTd1eL/cRqMRj7ie+xnHuOW2PD
WCE3zMMAAKBd6S1pMSMARHcefXmIDJBv8MdyRIKxwutffSOX8x39aN/jezT6MRLrx5qxHCO5VYiF+DFu
jV4/xMho9KPvjyQQdxSpIEcAALiI0lvSYupHgIYSAMpnhDIA5MgQIyNIhPwNQASDH/3kp9Hxx62ZIiIw
RPcfqSBGfAQIAOBSSm9Ji/4AEO37WI7GPW7KAJBbvfLqJ2Mkvsdq+Sn/EC1+BIDo/vO9/2j6Y53YJEdy
w1gnRvweAADgOkpvSYv+ABCdejT3r3/1jR/95Kexcnb5kQR+9evfxjoxErfm+/qZAbLXjx/zc0ExmL8E
yNXGe//xYyz4GwAAgOsovSUtTg8A+f59GYz2fXzuP3+Mxj2MVBCb5Kf5Y/N8F398tieCQSzEjzEYN8UK
udr4jUHZEACAiyi9JS1ODwAAAJBKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
AQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElK
b0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAA
gElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kLAQAAgElKb0kL
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
</value> </value>
</data> </data>
<data name="pictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="pictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -1820,329 +2054,6 @@
BhgAAAAASUVORK5CYII= BhgAAAAASUVORK5CYII=
</value> </value>
</data> </data>
<data name="smartGroupBox1.BackImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
gg==
</value>
</data>
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<metadata name="smartDraw_ChartChannelPenStyle1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="timerOff.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>264, 17</value>
</metadata>
<metadata name="timerOn.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>351, 17</value>
</metadata>
<metadata name="$this.FormFactorShadowProperty" xml:space="preserve"> <metadata name="$this.FormFactorShadowProperty" xml:space="preserve">
<value>WEBPAD</value> <value>WEBPAD</value>
</metadata> </metadata>

View File

@ -7,9 +7,12 @@ using System.Data;
using System.Drawing; using System.Drawing;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using System.IO;
using SmartX;
using INT_PT002.Controls; using INT_PT002.Controls;
using INT_PT002.DataStore; using INT_PT002.DataStore;
using INT_PT002.DialogForms;
namespace INT_PT002.Forms namespace INT_PT002.Forms
{ {
@ -39,6 +42,8 @@ namespace INT_PT002.Forms
public Define.E_MenuManualStore SelectedMenuManual; public Define.E_MenuManualStore SelectedMenuManual;
public Define.E_MenuLogStore SelectedMenuLog; public Define.E_MenuLogStore SelectedMenuLog;
public Define.E_MenuSystemStore SelectedMenuSystem; public Define.E_MenuSystemStore SelectedMenuSystem;
private Queue<string> Q_FileList = new Queue<string>();
#endregion #endregion
#region Constructor #region Constructor
@ -103,6 +108,196 @@ namespace INT_PT002.Forms
this.Child_System_Status.Location = new Point(0, 39); this.Child_System_Status.Location = new Point(0, 39);
} }
#region Log
// Backup
private void Backup(Define.E_DataType type, TreeView view)
{
string targetPath = "", sourceFilePath = "", destFilePath = "", dataFolderPath = "";
string[] result;
DirectoryInfo dir;
FileInfo[] files;
List<string> listSelectedFile = new List<string>(); // 백업할 파일 리스트 (yyyy/MM/filename.csv)
this.Q_FileList = new Queue<string>();
switch (type)
{
case Define.E_DataType.None:
break;
case Define.E_DataType.History:
dataFolderPath = this.ParentForm.PathDataHistoryFolder;
break;
case Define.E_DataType.Inspection:
dataFolderPath = this.ParentForm.PathDataInspectionFolder;
break;
default:
break;
}
if (dataFolderPath == "")
return;
#region 백업 할 파일 리스트
listSelectedFile = this.GetSeletedNodeList(view);
#endregion
if (listSelectedFile.Count == 0)
{
DialogFormMessage msg = new DialogFormMessage(4, this.ParentForm.SystemConfig.LANGUAGE);
msg.ShowDialog();
return;
}
SmartX.SmartSplash.Start(SmartSplash.BuiltInLoadingImages.PROCESSING1, 200);
#region USB 장착 유무 체크
// USB 장착 유무 체크
dir = new DirectoryInfo(targetPath);
if (dir.Exists == false)
{
// USB메모리가 장착되지 않았습니다
DialogFormMessage msg = new DialogFormMessage(5, this.ParentForm.SystemConfig.LANGUAGE);
msg.ShowDialog();
SmartX.SmartSplash.Finish();
return;
}
#endregion
try
{
}
catch
{
// 제조사에 문의하세요
DialogFormMessage msg = new DialogFormMessage(6, this.ParentForm.SystemConfig.LANGUAGE);
SmartX.SmartSplash.Finish();
msg.ShowDialog();
return;
}
}
// FileCopy
private void FileCopy(Define.E_DataType type)
{
int count = 0;
string targetPath = "", destTargetPath = "", sourceFilePath = "", destFilePath = "";
string[] result;
DirectoryInfo dir;
FileInfo[] files;
try
{
#region USB 복사
targetPath = "하드 디스크\\";
// USB\SerialNumber\ 루트
destTargetPath = string.Format("{0}{1}\\Data\\{2}\\{3}\\", targetPath, this.ParentForm.SystemConfig.SERIAL_NUMBER, type, DateTime.Now.ToString("yyyyMMdd_HHmmss"));
// USB 폴더 체크 및 생성
dir = new DirectoryInfo(destTargetPath);
if (dir.Exists == false)
dir.Create();
// 파일 복사
dir = new DirectoryInfo(this.ParentForm.PathDataInspectionFolder);
if (dir.Exists == false)
dir.Create();
files = dir.GetFiles();
count = files.Length;
foreach (FileInfo file in files)
{
result = file.FullName.Split('\\');
sourceFilePath = file.FullName;
destFilePath = string.Format("{0}{1}", destTargetPath, result[result.Length - 1]);
// 파일 중복 검사
if (File.Exists(destFilePath) == true)
{
DialogFormYesNo df = new DialogFormYesNo(this.ParentForm.SystemConfig.LANGUAGE, 31, Path.GetFileName(result[result.Length - 1]));
df.BringToFront();
if (df.ShowDialog() == DialogResult.Yes)
{
this.Refresh();
File.Delete(destFilePath); // 존재하는 파일 삭제
File.Copy(sourceFilePath, destFilePath);
}
else
{
count--;
this.Refresh();
}
}
else
{
File.Copy(sourceFilePath, destFilePath);
}
}
// 복사 완료 메시지
DialogFormMessage msg = new DialogFormMessage(count.ToString(), this.ParentForm.SystemConfig.LANGUAGE);
msg.ShowDialog();
#endregion
}
catch
{
// 제조사에 문의하세요
DialogFormMessage msg = new DialogFormMessage(6, this.ParentForm.SystemConfig.LANGUAGE);
msg.ShowDialog();
return;
}
}
public List<string> DirectorySort(DirectoryInfo[] directorys)
{
List<string> listDirectory = new List<string>();
Dictionary<string, int> dirNames = new Dictionary<string, int>();
foreach (DirectoryInfo dir in directorys)
dirNames.Add(dir.Name, int.Parse(dir.Name));
// 순서데로 오름차순 정렬
var vrList = dirNames.OrderBy(x => x.Value);
foreach (var v in vrList)
listDirectory.Add(v.Key);
return listDirectory;
}
private List<string> GetSeletedNodeList(TreeView tree)
{
int yearCNT, monthCNT, dayCNT;
List<string> listSelectedFile = new List<string>();
yearCNT = tree.Nodes.Count;
if (yearCNT != 0)
{
for (int i = 0; i < yearCNT; i++)
{
monthCNT = tree.Nodes[i].Nodes.Count;
if (monthCNT != 0)
{
for (int j = 0; j < monthCNT; j++)
{
dayCNT = tree.Nodes[i].Nodes[j].Nodes.Count;
if (dayCNT != 0)
{
for (int k = 0; k < dayCNT; k++)
{
if (tree.Nodes[i].Nodes[j].Nodes[k].Checked == true)
{
//listSelectedFile.Add(tree.Nodes[i].Nodes[j].Nodes[k].Text);
listSelectedFile.Add(string.Format("{0}\\{1}\\{2}", tree.Nodes[i].Text, tree.Nodes[i].Nodes[j].Text, tree.Nodes[i].Nodes[j].Nodes[k].Text));
}
}
}
}
}
}
}
return listSelectedFile;
}
#endregion
private void SetTopMenu(Define.E_TopMenuStore bottom) private void SetTopMenu(Define.E_TopMenuStore bottom)
{ {
switch (bottom) switch (bottom)

View File

@ -81,6 +81,12 @@
<Compile Include="Controls\Bottom\ControlBottomSetting.Designer.cs"> <Compile Include="Controls\Bottom\ControlBottomSetting.Designer.cs">
<DependentUpon>ControlBottomSetting.cs</DependentUpon> <DependentUpon>ControlBottomSetting.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Controls\Log\ControlMenuLogTemporary.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Controls\Log\ControlMenuLogTemporary.Designer.cs">
<DependentUpon>ControlMenuLogTemporary.cs</DependentUpon>
</Compile>
<Compile Include="Controls\System\ControlMenuSystemInformation.cs"> <Compile Include="Controls\System\ControlMenuSystemInformation.cs">
<SubType>UserControl</SubType> <SubType>UserControl</SubType>
</Compile> </Compile>
@ -242,6 +248,10 @@
<DependentUpon>ControlMainDisplayDotGraph.cs</DependentUpon> <DependentUpon>ControlMainDisplayDotGraph.cs</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Controls\Log\ControlMenuLogTemporary.resx">
<DependentUpon>ControlMenuLogTemporary.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Controls\System\ControlMenuSystemInformation.resx"> <EmbeddedResource Include="Controls\System\ControlMenuSystemInformation.resx">
<DependentUpon>ControlMenuSystemInformation.cs</DependentUpon> <DependentUpon>ControlMenuSystemInformation.cs</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>

View File

@ -4,6 +4,8 @@ using System.Collections.Generic;
using System.Text; using System.Text;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
namespace INT_PT002.Part11_UserManager namespace INT_PT002.Part11_UserManager
{ {
public partial class UserManager public partial class UserManager