diff --git a/SSG_Automation_Solution.sln b/SSG_Automation_Solution.sln new file mode 100644 index 0000000..6d1963c --- /dev/null +++ b/SSG_Automation_Solution.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.33328.57 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SSG_Automation_Solution", "SSG_Automation_Solution\SSG_Automation_Solution.csproj", "{2D212A21-573E-4C84-9ABA-A559D0878BE9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2D212A21-573E-4C84-9ABA-A559D0878BE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2D212A21-573E-4C84-9ABA-A559D0878BE9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2D212A21-573E-4C84-9ABA-A559D0878BE9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2D212A21-573E-4C84-9ABA-A559D0878BE9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {14326FCE-3599-48EB-9A32-0CE02382E835} + EndGlobalSection +EndGlobal diff --git a/SSG_Automation_Solution/App.config b/SSG_Automation_Solution/App.config new file mode 100644 index 0000000..c857c97 --- /dev/null +++ b/SSG_Automation_Solution/App.config @@ -0,0 +1,51 @@ + + + + +
+ + + + + + + + + Blue Dark + + + + + + + + + + + + + + + True + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSG_Automation_Solution/Data/DBInfo.cs b/SSG_Automation_Solution/Data/DBInfo.cs new file mode 100644 index 0000000..8d01e7a --- /dev/null +++ b/SSG_Automation_Solution/Data/DBInfo.cs @@ -0,0 +1,62 @@ +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SSG_Automation_Solution.Data +{ + public class DBInfo + { + private string _DBIP = "localhost"; + public string DBIP + { + get + { + if (_DBIP == "localhost") + { + LoadOptions(); + } + + return _DBIP; + } + set { _DBIP = value; } + } + + string dafaultOptionListPath = Environment.CurrentDirectory + @"\Data\options.json"; + + #region Singleton + + private static DBInfo uniqueInstance = null; + private static readonly Object mInstanceLocker = new Object(); + + public static DBInfo getInstance() + { + lock (mInstanceLocker) + { + if (uniqueInstance == null) + { + uniqueInstance = new DBInfo(); + } + } + return uniqueInstance; + } + + #endregion + + public void LoadOptions() + { + if (File.Exists(dafaultOptionListPath)) + { + using (StreamReader file = new StreamReader(dafaultOptionListPath)) + { + JObject jobj = JObject.Parse(file.ReadToEnd()); + + if (jobj.ContainsKey("DBIP")) DBIP = jobj["DBIP"].ToString(); + } + } + } + } +} diff --git a/SSG_Automation_Solution/Data/LogWriter.cs b/SSG_Automation_Solution/Data/LogWriter.cs new file mode 100644 index 0000000..f5dadf1 --- /dev/null +++ b/SSG_Automation_Solution/Data/LogWriter.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace SSG_Automation_Solution.Data +{ + public class LogWriter + { + public enum LogType { Error, Display, Normal } + + #region Variables + public string LogFileName { get; set; } + public bool isShowLogNormal { get; set; } = true; + public bool isShowLogDisplay { get; set; } = true; + public bool isShowLogError { get; set; } = true; + + public Color colorLogNormal { get; set; } = Color.FromArgb(195, 195, 195); + public Color colorLogDisplay { get; set; } = Color.FromArgb(160, 50, 50); + public Color colorLogError { get; set; } = Color.FromArgb(230, 0, 0); + + public bool isSaveLogNormal { get; set; } = true; + public bool isSaveLogDisplay { get; set; } = true; + public bool isSaveLogError { get; set; } = true; + + #endregion + + #region Singleton + + private static LogWriter uniqueInstance = null; + private static readonly Object mInstanceLocker = new Object(); + + public static LogWriter getInstance() + { + lock (mInstanceLocker) + { + if (uniqueInstance == null) + { + uniqueInstance = new LogWriter(); + + string m_exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + string folderPath = m_exePath + @"\Logs"; + DirectoryInfo directory = new DirectoryInfo(folderPath); + if (!directory.Exists) directory.Create(); + + DateTime now = DateTime.Now; + foreach (FileInfo file in directory.GetFiles()) + { + TimeSpan timeDiff = now - file.LastWriteTime; + if (timeDiff.TotalHours > 170) file.Delete(); + } + } + } + return uniqueInstance; + } + + #endregion + + + #region Method + public void LogWrite(string logMessage, LogType logType) + { + string m_exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + string folderPath = m_exePath + @"\Logs"; + DirectoryInfo di = new DirectoryInfo(folderPath); + if (!di.Exists) di.Create(); + + + string suffix = ""; + switch (logType) + { + case LogType.Normal: suffix = " normal.txt"; break; + case LogType.Display: suffix = " display.txt"; break; + case LogType.Error: suffix = " error.txt"; break; + } + + + try + { + using (StreamWriter w = File.AppendText(folderPath + @"\" + LogFileName + suffix)) + { + w.WriteLine(DateTime.Now.ToString("yyMMdd HH:mm:ss.fff : ") + logMessage); + } + } + catch (Exception ex) + { + } + } + + #endregion + + } +} diff --git a/SSG_Automation_Solution/Data/Options.cs b/SSG_Automation_Solution/Data/Options.cs new file mode 100644 index 0000000..46f702d --- /dev/null +++ b/SSG_Automation_Solution/Data/Options.cs @@ -0,0 +1,114 @@ +using DevExpress.XtraEditors; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SSG_Automation_Solution.Data +{ + public class Options + { + #region Singleton + + private static Options uniqueInstance = null; + private static readonly Object mInstanceLocker = new Object(); + + public static Options getInstance() + { + lock (mInstanceLocker) + { + if (uniqueInstance == null) + { + uniqueInstance = new Options(); + } + } + return uniqueInstance; + } + + #endregion + + + #region + + public List gridColors = new List(); + + public struct gridColor + { + public string 명칭; + public Color 색상; + + public gridColor(string 명칭, Color 색상) : this() + { + this.명칭 = 명칭; + this.색상 = 색상; + } + } + + string gridColorPath = Environment.CurrentDirectory + @"\Data\gridColor.json"; + + public Color GetGridColor(LabelControl lbl) + { + Color color = gridColors.Find(x => x.명칭 == lbl.Name).색상; + return color; + } + + public void ChangeGridColor(string 명칭, Color 색상) + { + + int index = gridColors.FindIndex(x => x.명칭 == 명칭); + if (index > -1) gridColors.RemoveAt(index); + gridColors.Add(new gridColor(명칭, 색상)); + } + + public void SaveGridColor() + { + try + { + JObject json = new JObject(); + + foreach (gridColor g in gridColors) + { + json.Add(g.명칭, g.색상.ToArgb()); + } + + File.WriteAllText(gridColorPath, json.ToString(), Encoding.UTF8); + } + catch (Exception ex) + { + Console.WriteLine("DatControl Err"); + Console.WriteLine(ex.Message); + } + } + + public void LoadGridCOlor() + { + try + { + if (File.Exists(gridColorPath)) + { + using (StreamReader file = new StreamReader(gridColorPath)) + { + using (JsonTextReader reader = new JsonTextReader(file)) + { + JObject json = (JObject)JToken.ReadFrom(reader); + + foreach (var x in json) + { + ChangeGridColor(x.Key, Color.FromArgb((int)x.Value)); + } + } + } + } + } + catch (Exception ex) { } + } + + + #endregion + } +} diff --git a/SSG_Automation_Solution/Data/SceneGroup.cs b/SSG_Automation_Solution/Data/SceneGroup.cs new file mode 100644 index 0000000..8fdc10d --- /dev/null +++ b/SSG_Automation_Solution/Data/SceneGroup.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SSG_Automation_Solution.Data +{ + public class SceneGroup + { + public string GroupName { get; set; } // 그룹 이름 + public List Scenes { get; set; } = new List(); // 그룹의 SceneVO 리스트 + + // 그룹에 Scene 추가 + public void AddScene(SceneVO scene) + { + if (!Scenes.Contains(scene)) + { + Scenes.Add(scene); + } + } + + // 그룹에서 Scene 제거 + public void RemoveScene(SceneVO scene) + { + Scenes.Remove(scene); + } + } +} diff --git a/SSG_Automation_Solution/Data/SceneVO.cs b/SSG_Automation_Solution/Data/SceneVO.cs new file mode 100644 index 0000000..c70d768 --- /dev/null +++ b/SSG_Automation_Solution/Data/SceneVO.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SSG_Automation_Solution.Data +{ + public class SceneVO + { + private string groupName; + private string sceneName; + private string sceneDate; + private string scenePath; + private string sceneCG; + private string sceneLayer; + + public string GroupName + { + get { return groupName; } + set { groupName = value; } + } + + public string SceneName { + get { return sceneName; } + set { sceneName = value; } + } + + public string SceneDate + { + get { return sceneDate; } + set { sceneDate = value; } + } + + public string ScenePath + { + get { return scenePath; } + set { scenePath = value; } + } + + public string SceneLayer + { + get { return sceneLayer; } + set { sceneLayer = value; } + } + + public BindingList Variables; + } +} diff --git a/SSG_Automation_Solution/Data/Schedule.cs b/SSG_Automation_Solution/Data/Schedule.cs new file mode 100644 index 0000000..ff09a5c --- /dev/null +++ b/SSG_Automation_Solution/Data/Schedule.cs @@ -0,0 +1,243 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace SSG_Automation_Solution.Data +{ + public class Schedule : INotifyPropertyChanged + { + public bool HasDisplayed = false; + public bool HasOuted = false; + public bool IgnoreForbid = false; + public bool IsServiceGoods = false; + + + private Guid idValue = Guid.NewGuid(); + [Display(Order = -1)] + public Guid ID + { + get { return this.idValue; } + } + + string text; + [DisplayName("종류")] + public string scheduleType + { + get { return text; } + set + { + if (text != value) + { + //if (string.IsNullOrEmpty(value)) throw new Exception(); + text = value; + OnPropertyChanged(); + } + } + } + + string scheduleSimulCast; + [DisplayName("동시송출")] + public string scheduleSimulCastName + { + get { return scheduleSimulCast; } + set + { + if (scheduleSimulCast != value) + { + scheduleSimulCast = value; + OnPropertyChanged(); + } + } + } + + string sceneGroup; + [DisplayName("씬그룹")] + public string sceneGroupName + { + get { return sceneGroup; } + set + { + if (sceneGroup != value) + { + //if (string.IsNullOrEmpty(value)) throw new Exception(); + sceneGroup = value; + OnPropertyChanged(); + } + } + } + string scene; + [DisplayName("씬이름")] + public string sceneName + { + get { return scene; } + set + { + if (scene != value) + { + //if (string.IsNullOrEmpty(value)) throw new Exception(); + scene = value; + OnPropertyChanged(); + } + } + } + DateTime? startTime; + //[DataType(DataType.DateTime)] + [DisplayName("시작시간")] + public DateTime? StartTimeDateTime + { + get { return startTime; } + set + { + if (startTime != value) + { + startTime = value; + OnPropertyChanged(); + } + } + } + + private TimeSpan? relativeStartTime; + + [DisplayName("상대시간")] + public TimeSpan? RelativeStartTime + { + get { return relativeStartTime; } + set + { + if (relativeStartTime != value) + { + relativeStartTime = value; + OnPropertyChanged(nameof(RelativeStartTime)); + } + } + } + + public TimeSpan? GetPreviousScheduleStartTime(BindingList allSchedules) + { + if (this.scheduleType != "송출") return null; + + var previousSchedule = allSchedules + .Where(s => s.scheduleType == "스케쥴" && s.StartTimeDateTime <= this.StartTimeDateTime) + .OrderByDescending(s => s.StartTimeDateTime) + .FirstOrDefault(); + + return this.StartTimeDateTime - previousSchedule?.StartTimeDateTime; + } + + TimeSpan? duration; + [DisplayName("길이")] + public TimeSpan? DurationSpan + { + get { return duration; } + set + { + if (duration != value) + { + duration = value; + OnPropertyChanged(); + } + } + } + + TimeSpan? tapeTime; + [DisplayName("테잎길이")] + public TimeSpan? TapeTime + { + get { return tapeTime; } + set + { + if (tapeTime != value) + { + tapeTime = value; + OnPropertyChanged(); + } + } + } + + [DisplayName("종료시간")] + public DateTime? EndTimeDateTime + { + get + { + if (text == "스케쥴") + { + try + { + int multi = 0; + for (int i = 0; i < 10; i++) + { + if (duration.Value.TotalSeconds >= tapeTime.Value.TotalSeconds * i) multi = i; + } + + return startTime + new TimeSpan(0, 0, Convert.ToInt32(tapeTime.Value.TotalSeconds) * multi); + } + catch(Exception ex) + { + return startTime + DurationSpan; + } + + } + else + { + return startTime + DurationSpan; + } + } + } + + Int16? layer; + [DisplayName("레이어")] + public Int16? layerNumber + { + get { return layer; } + set + { + if (layer != value) + { + layer = value; + OnPropertyChanged(); + } + } + } + + + + string done; + [DisplayName("상태")] + public string doneString + { + get { return done; } + set + { + if (done != value) + { + done = value; + OnPropertyChanged(); + } + } + } + + + + public BindingList 변수정보; + + public TimeSpan 스케쥴기준송출시간; + + public event PropertyChangedEventHandler PropertyChanged; + protected void OnPropertyChanged([CallerMemberName] string propertyName = "") + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + + } + + + + } +} diff --git a/SSG_Automation_Solution/Data/SyncMetadata.cs b/SSG_Automation_Solution/Data/SyncMetadata.cs new file mode 100644 index 0000000..9867d32 --- /dev/null +++ b/SSG_Automation_Solution/Data/SyncMetadata.cs @@ -0,0 +1,19 @@ +using System; + +namespace SSG_Automation_Solution.Data +{ + public class FileMetadata + { + public DateTime? LastModified { get; set; } + public string Hash { get; set; } + public DateTime? UploadTime { get; set; } + } + + public class SyncMetadata + { + public FileMetadata SceneList { get; set; } = new FileMetadata(); + public FileMetadata Groups { get; set; } = new FileMetadata(); + public FileMetadata Schedule { get; set; } = new FileMetadata(); + } + +} diff --git a/SSG_Automation_Solution/Data/VariablesVO.cs b/SSG_Automation_Solution/Data/VariablesVO.cs new file mode 100644 index 0000000..08deddc --- /dev/null +++ b/SSG_Automation_Solution/Data/VariablesVO.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SSG_Automation_Solution.Data +{ + public class VariablesVO + { + private string tag; + private string text; + + public string Tag + { + get { return tag; } + set { tag = value; } + } + public string Text + { + get { return text; } + set { text = value; } + } + } +} diff --git a/SSG_Automation_Solution/Design/CustomControl/CustomToggleSwitchPainter.cs b/SSG_Automation_Solution/Design/CustomControl/CustomToggleSwitchPainter.cs new file mode 100644 index 0000000..38d9fc9 --- /dev/null +++ b/SSG_Automation_Solution/Design/CustomControl/CustomToggleSwitchPainter.cs @@ -0,0 +1,34 @@ +using DevExpress.Utils.Drawing; +using DevExpress.XtraEditors.Drawing; +using DevExpress.XtraEditors.ViewInfo; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SSG_Automation_Solution.Design.CustomControl +{ + public class CustomToggleSwitchPainter : ToggleSwitchPainter + { + public CustomToggleSwitchPainter() : base() { } + + protected override void DrawContent(ControlGraphicsInfoArgs info) + { + BaseCheckEditViewInfo vi = info.ViewInfo as BaseCheckEditViewInfo; + vi.CheckInfo.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + ToggleObjectInfoArgs args = (vi.CheckInfo) as ToggleObjectInfoArgs; + int offset = 2; + + int width = args.GlyphRect.Width - args.SwitchRect.Width; + if (args.GlyphRect.X == args.SwitchRect.X) + vi.CheckInfo.CaptionRect = new Rectangle(args.SwitchRect.Right, args.SwitchRect.Y, width, args.SwitchRect.Height); + else + if (args.GlyphRect.Right == args.SwitchRect.Right) + vi.CheckInfo.CaptionRect = new Rectangle(args.GlyphRect.X + offset, args.GlyphRect.Y, width, args.SwitchRect.Height); + + base.DrawContent(info); + } + } +} diff --git a/SSG_Automation_Solution/Design/Forms/LoginForm.Designer.cs b/SSG_Automation_Solution/Design/Forms/LoginForm.Designer.cs new file mode 100644 index 0000000..5f0a2bc --- /dev/null +++ b/SSG_Automation_Solution/Design/Forms/LoginForm.Designer.cs @@ -0,0 +1,207 @@ + +namespace SSG_Automation_Solution.Design.Forms +{ + partial class LoginForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoginForm)); + this.labelControl1 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl2 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl3 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl4 = new DevExpress.XtraEditors.LabelControl(); + this.textEditPassword = new DevExpress.XtraEditors.TextEdit(); + this.textEditUsername = new DevExpress.XtraEditors.TextEdit(); + this.simpleButton1 = new DevExpress.XtraEditors.SimpleButton(); + this.svgImageBox1 = new DevExpress.XtraEditors.SvgImageBox(); + this.checkEdit1 = new DevExpress.XtraEditors.CheckEdit(); + ((System.ComponentModel.ISupportInitialize)(this.textEditPassword.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEditUsername.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.svgImageBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.checkEdit1.Properties)).BeginInit(); + this.SuspendLayout(); + // + // labelControl1 + // + this.labelControl1.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60))))); + this.labelControl1.Appearance.Options.UseBackColor = true; + this.labelControl1.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.labelControl1.Location = new System.Drawing.Point(170, 153); + this.labelControl1.Name = "labelControl1"; + this.labelControl1.Size = new System.Drawing.Size(320, 3); + this.labelControl1.TabIndex = 1; + // + // labelControl2 + // + this.labelControl2.Appearance.Font = new System.Drawing.Font("나눔스퀘어 네오 Bold", 8.999999F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.labelControl2.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60))))); + this.labelControl2.Appearance.Options.UseFont = true; + this.labelControl2.Appearance.Options.UseForeColor = true; + this.labelControl2.Location = new System.Drawing.Point(170, 100); + this.labelControl2.Name = "labelControl2"; + this.labelControl2.Size = new System.Drawing.Size(63, 13); + this.labelControl2.TabIndex = 2; + this.labelControl2.Text = "Username"; + // + // labelControl3 + // + this.labelControl3.Appearance.Font = new System.Drawing.Font("나눔스퀘어 네오 Bold", 8.999999F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.labelControl3.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60))))); + this.labelControl3.Appearance.Options.UseFont = true; + this.labelControl3.Appearance.Options.UseForeColor = true; + this.labelControl3.Location = new System.Drawing.Point(170, 171); + this.labelControl3.Name = "labelControl3"; + this.labelControl3.Size = new System.Drawing.Size(61, 13); + this.labelControl3.TabIndex = 5; + this.labelControl3.Text = "Password"; + // + // labelControl4 + // + this.labelControl4.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60))))); + this.labelControl4.Appearance.Options.UseBackColor = true; + this.labelControl4.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.labelControl4.Location = new System.Drawing.Point(170, 224); + this.labelControl4.Name = "labelControl4"; + this.labelControl4.Size = new System.Drawing.Size(320, 3); + this.labelControl4.TabIndex = 4; + // + // textEditPassword + // + this.textEditPassword.Location = new System.Drawing.Point(170, 190); + this.textEditPassword.Name = "textEditPassword"; + this.textEditPassword.Properties.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(109)))), ((int)(((byte)(156))))); + this.textEditPassword.Properties.Appearance.Font = new System.Drawing.Font("나눔스퀘어 네오 Bold", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.textEditPassword.Properties.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90))))); + this.textEditPassword.Properties.Appearance.Options.UseBackColor = true; + this.textEditPassword.Properties.Appearance.Options.UseFont = true; + this.textEditPassword.Properties.Appearance.Options.UseForeColor = true; + this.textEditPassword.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + this.textEditPassword.Properties.ContextImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("textEditPassword.Properties.ContextImageOptions.Image"))); + this.textEditPassword.Properties.NullText = "password"; + this.textEditPassword.Size = new System.Drawing.Size(320, 34); + this.textEditPassword.TabIndex = 101; + this.textEditPassword.EditValueChanged += new System.EventHandler(this.textEdit1_EditValueChanged); + // + // textEditUsername + // + this.textEditUsername.Location = new System.Drawing.Point(170, 119); + this.textEditUsername.Name = "textEditUsername"; + this.textEditUsername.Properties.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(109)))), ((int)(((byte)(156))))); + this.textEditUsername.Properties.Appearance.Font = new System.Drawing.Font("나눔스퀘어 네오 Bold", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.textEditUsername.Properties.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90))))); + this.textEditUsername.Properties.Appearance.Options.UseBackColor = true; + this.textEditUsername.Properties.Appearance.Options.UseFont = true; + this.textEditUsername.Properties.Appearance.Options.UseForeColor = true; + this.textEditUsername.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + this.textEditUsername.Properties.ContextImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("textEditUsername.Properties.ContextImageOptions.Image"))); + this.textEditUsername.Properties.NullText = "username"; + this.textEditUsername.Size = new System.Drawing.Size(320, 34); + this.textEditUsername.TabIndex = 100; + this.textEditUsername.EditValueChanged += new System.EventHandler(this.textEdit1_EditValueChanged); + // + // simpleButton1 + // + this.simpleButton1.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(77)))), ((int)(((byte)(130)))), ((int)(((byte)(184))))); + this.simpleButton1.Appearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(77)))), ((int)(((byte)(130)))), ((int)(((byte)(184))))); + this.simpleButton1.Appearance.Font = new System.Drawing.Font("나눔스퀘어 네오 Bold", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.simpleButton1.Appearance.ForeColor = System.Drawing.Color.White; + this.simpleButton1.Appearance.Options.UseBackColor = true; + this.simpleButton1.Appearance.Options.UseBorderColor = true; + this.simpleButton1.Appearance.Options.UseFont = true; + this.simpleButton1.Appearance.Options.UseForeColor = true; + this.simpleButton1.Location = new System.Drawing.Point(170, 280); + this.simpleButton1.Name = "simpleButton1"; + this.simpleButton1.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.simpleButton1.Size = new System.Drawing.Size(320, 55); + this.simpleButton1.TabIndex = 103; + this.simpleButton1.Text = "LOGIN"; + this.simpleButton1.Click += new System.EventHandler(this.simpleButton1_Click); + // + // svgImageBox1 + // + this.svgImageBox1.Location = new System.Drawing.Point(615, 3); + this.svgImageBox1.Name = "svgImageBox1"; + this.svgImageBox1.Size = new System.Drawing.Size(27, 26); + this.svgImageBox1.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("svgImageBox1.SvgImage"))); + this.svgImageBox1.TabIndex = 103; + this.svgImageBox1.Text = "svgImageBox1"; + this.svgImageBox1.Click += new System.EventHandler(this.svgImageBox1_Click); + // + // checkEdit1 + // + this.checkEdit1.Location = new System.Drawing.Point(170, 233); + this.checkEdit1.Name = "checkEdit1"; + this.checkEdit1.Properties.Appearance.Font = new System.Drawing.Font("나눔스퀘어 네오 Bold", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.checkEdit1.Properties.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60))))); + this.checkEdit1.Properties.Appearance.Options.UseFont = true; + this.checkEdit1.Properties.Appearance.Options.UseForeColor = true; + this.checkEdit1.Properties.Caption = "Remember me"; + this.checkEdit1.Properties.CheckBoxOptions.SvgColorChecked = System.Drawing.Color.FromArgb(((int)(((byte)(77)))), ((int)(((byte)(130)))), ((int)(((byte)(184))))); + this.checkEdit1.Size = new System.Drawing.Size(122, 20); + this.checkEdit1.TabIndex = 10; + // + // LoginForm + // + this.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(109)))), ((int)(((byte)(156))))); + this.Appearance.Options.UseBackColor = true; + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(644, 372); + this.Controls.Add(this.checkEdit1); + this.Controls.Add(this.svgImageBox1); + this.Controls.Add(this.simpleButton1); + this.Controls.Add(this.textEditUsername); + this.Controls.Add(this.labelControl3); + this.Controls.Add(this.labelControl4); + this.Controls.Add(this.textEditPassword); + this.Controls.Add(this.labelControl2); + this.Controls.Add(this.labelControl1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "LoginForm"; + this.Text = "Login"; + this.Shown += new System.EventHandler(this.LoginForm_Shown); + ((System.ComponentModel.ISupportInitialize)(this.textEditPassword.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEditUsername.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.svgImageBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.checkEdit1.Properties)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private DevExpress.XtraEditors.LabelControl labelControl1; + private DevExpress.XtraEditors.LabelControl labelControl2; + private DevExpress.XtraEditors.LabelControl labelControl3; + private DevExpress.XtraEditors.LabelControl labelControl4; + private DevExpress.XtraEditors.TextEdit textEditPassword; + private DevExpress.XtraEditors.TextEdit textEditUsername; + private DevExpress.XtraEditors.SimpleButton simpleButton1; + private DevExpress.XtraEditors.SvgImageBox svgImageBox1; + private DevExpress.XtraEditors.CheckEdit checkEdit1; + } +} \ No newline at end of file diff --git a/SSG_Automation_Solution/Design/Forms/LoginForm.cs b/SSG_Automation_Solution/Design/Forms/LoginForm.cs new file mode 100644 index 0000000..b03f9f4 --- /dev/null +++ b/SSG_Automation_Solution/Design/Forms/LoginForm.cs @@ -0,0 +1,169 @@ +using DevExpress.XtraEditors; +using Microsoft.Win32; +using Newtonsoft.Json; +using SSG_Automation_Solution.Data; +using System; +using System.Drawing; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SSG_Automation_Solution.Design.Forms +{ + public partial class LoginForm : DevExpress.XtraEditors.XtraForm + { + public int LoginResult { get; private set; } // 로그인 상태를 나타내는 반환값 + private readonly string _restServerUrl = "http://"+ DBInfo.getInstance().DBIP + ":60031/api/auth/login"; // REST 서버 주소 + public string Username { get; private set; } + + string subKey = @"SOFTWARE\CI"; + + + public LoginForm() + { + InitializeComponent(); + + LoginResult = 0; // 기본값: 로그인 실패 + + // 비밀번호 입력 필드에서 Enter 키 처리 + textEditPassword.KeyDown += TextEditPassword_KeyDown; + + + } + + private void LoadReg() + { + RegistryKey key = Registry.CurrentUser.CreateSubKey(subKey); + if (key.GetValue("checked") != null) checkEdit1.Checked = Convert.ToBoolean(key.GetValue("checked").ToString()); + if (key.GetValue("id") != null) textEditUsername.Text = key.GetValue("id").ToString(); + if (key.GetValue("pw") != null) textEditPassword.Text = key.GetValue("pw").ToString(); + key.Close(); + + //if (textEditPassword.Text.Trim() != "") simpleButton1_Click(null, null); + } + + private void SaveReg() + { + RegistryKey key = Registry.CurrentUser.CreateSubKey(subKey); + key.SetValue("checked", checkEdit1.Checked); + key.SetValue("id", textEditUsername.Text); + + if (checkEdit1.Checked) key.SetValue("pw", textEditPassword.Text); + else key.SetValue("pw", ""); + key.Close(); + } + + + private void textEdit1_EditValueChanged(object sender, EventArgs e) + { + TextEdit textEdit = (TextEdit)sender; + textEdit.ForeColor = Color.White; + + if (textEdit == textEditPassword) + { + textEditPassword.Properties.PasswordChar = '*'; + textEditPassword.Properties.UseSystemPasswordChar = true; + } + } + + // 비밀번호 입력 필드에서 Enter 키 감지 + private void TextEditPassword_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) // Enter 키 확인 + { + simpleButton1_Click(sender, e); // 로그인 버튼 클릭 이벤트 호출 + e.Handled = true; // 기본 Enter 동작 방지 + e.SuppressKeyPress = true; // 시스템 Ding 소리 방지 + } + } + + private async void simpleButton1_Click(object sender, EventArgs e) + { + // 예제: 유저 정보 확인 로직 + string username = textEditUsername.Text; // TextEdit에 유저 ID 입력 + string password = textEditPassword.Text; // TextEdit에 비밀번호 입력 + Username = username; + + if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) + { + MessageBox.Show("유저이름이나 비밀번호에 값이 없습니다.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // REST 서버로 로그인 요청 보내기 + var loginResponse = await VerifyLoginWithServer(username, password); + + SaveReg(); + + if (loginResponse == 1) // 관리자 + { + LoginResult = 1; + this.DialogResult = DialogResult.OK; + this.Close(); + } + else if (loginResponse == 2) // 일반 사용자 + { + LoginResult = 2; + this.DialogResult = DialogResult.OK; + this.Close(); + } + else // 로그인 실패 + { + LoginResult = 0; + MessageBox.Show("유효하지 않은 사용자 또는 비밀번호 입니다.", "Login Failed", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private async Task VerifyLoginWithServer(string username, string password) + { + try + { + if (username == "admin" && password == "admin") return 1; + + using (HttpClient client = new HttpClient()) + { + // 요청 데이터 생성 + var payload = new + { + Username = username, + Password = password + }; + + string jsonPayload = JsonConvert.SerializeObject(payload); + StringContent content = new StringContent(jsonPayload, Encoding.UTF8, "application/json"); + + // POST 요청 전송 + HttpResponseMessage response = await client.PostAsync(_restServerUrl, content); + + if (response.IsSuccessStatusCode) + { + // 응답 데이터를 JSON으로 파싱 + var result = await response.Content.ReadAsStringAsync(); + dynamic jsonResponse = JsonConvert.DeserializeObject(result); + + return 2; + } + } + } + catch (Exception ex) + { + MessageBox.Show($"서버와의 통신 에러: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + return 0; // 로그인 실패 + } + + private void svgImageBox1_Click(object sender, EventArgs e) + { + LoginResult = 0; // 로그인 실패로 설정 + this.DialogResult = DialogResult.Cancel; // 취소 버튼 처리 + Application.Exit(); // 실패 시 프로그램 종료 + } + + private void LoginForm_Shown(object sender, EventArgs e) + { + LoadReg(); + } + } +} diff --git a/SSG_Automation_Solution/Design/Forms/LoginForm.resx b/SSG_Automation_Solution/Design/Forms/LoginForm.resx new file mode 100644 index 0000000..bdde742 --- /dev/null +++ b/SSG_Automation_Solution/Design/Forms/LoginForm.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAmdEVYdFRpdGxlAFF1ZXN0aW9uO0hlbHA7RG9jdW1l + bnRhdGlvbjtXaGF0ben5RgAAAWVJREFUWEfF19GNwjAQBFBKoARKuBKuAUuUQAnXAZIboIQrgV//UQIl + UMKVkNNIGymaWWfXEZf7eBIaVl7jOIk5TNN0+E8S7E2CvUkQKbWdS23XUtu91PYw+Izsk+sjEnhKbUdr + 8FNqmwKvkYlI4MGATqPIhcfxSODZOAGs1pHHYhJ4OhN42vXHkvN3sy8ei0ngWUwAzS78y0ptN6c53Hks + JoHHJvDNjanGW4kH1zEJPGuNFzW4HH8zgYzOLXrlOibBFthsTnP44FomwSjblNwYwg0IEoxYaY5bNNw3 + IEHWO5qDBBm4tk5jWL1VPRJkWCNpznUZEmQ4t9yLa7IkyHB+/Y1rsiTIcFYgfOD0SJBhL5/5NAT7rsA7 + STDC3pLp45dHggxrvNwH+HzmugwJInZA5U04T2LoIQQSRDrHs9nw5ZAgUmo7OY1nJ66PSJDReRFtehZI + kGUvJPxZgfDg0SPB3iTY2y9xLWth57sNgAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAydEVYdFRpdGxlAEN1c3RvbWVyO0VtcGxveWVlO1Bl + cnNvbjtDb250YWN0O1VzZXI7Q2xpZW50fhE26AAAAaRJREFUWEfFlqFLBFEQxg+0GAzCiVXRYtBuVQQF + Jwj+MWIQmSvCddFiFwzGAS1aFUHEIIhwh0ZRMSgorAy8lXP2e2/XfXtr+JX35pvvd7sbrpEkSeM/yRwQ + SxFWiOWAWB6I5dPxSCyHxLIK5jPECOwQS5LDPshVIrAEynysgXy0gD52W+TjCOSjBW5BkY87kI8WeANF + Pl5APlrAloT4APkogXlQkodm7J7SArugIA/N2D2lBbZBQR6asXtKC0wSyxMo8aGzmrF7Sgsom6DIxzrI + RwvMgCIfOmvz0QLKMSiznIBcZQKzxPIOSlP0TmdsrjIBZZlYnkH5q7uz8xliBZRRYtlwr+SMWLaIZQzM + QWIEBsCZZRCc/aKswByxXBLLFLhL0a//ys3aux/+IjBOLEwsNz3v+pRYhsDsMLFc9MxppkUsE3a2iMAI + sey5/3v2Y1POiWXBPW5lkViuwZyiO3SX7iwkME0s92AR4sthzxG6U3cHBZrE0gHhqtDdzZBAG4Sqph0S + 6OevT+mEBOxwXwgJdO1wH+h6Beomc1A3mYO6yRzUzTcKdExBDdX0MAAAAABJRU5ErkJggg== + + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD6AQAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkNsZWFySGVhZGVyQW5kRm9vdGVyIiBzdHlsZT0iZW5hYmxlLWJhY2tn + cm91bmQ6bmV3IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuUmVke2ZpbGw6 + I0QxMUMxQzt9Cjwvc3R5bGU+DQogIDxwYXRoIGQ9Ik0yNyw0SDVDNC41LDQsNCw0LjUsNCw1djIyYzAs + MC41LDAuNSwxLDEsMWgyMmMwLjUsMCwxLTAuNSwxLTFWNUMyOCw0LjUsMjcuNSw0LDI3LDR6IE0yMiwy + MGwtMiwybC00LTRsLTQsNCAgbC0yLTJsNC00bC00LTRsMi0ybDQsNGw0LTRsMiwybC00LDRMMjIsMjB6 + IiBjbGFzcz0iUmVkIiAvPg0KPC9zdmc+Cw== + + + \ No newline at end of file diff --git a/SSG_Automation_Solution/Design/Forms/MainForm.Designer.cs b/SSG_Automation_Solution/Design/Forms/MainForm.Designer.cs new file mode 100644 index 0000000..6bbcc7d --- /dev/null +++ b/SSG_Automation_Solution/Design/Forms/MainForm.Designer.cs @@ -0,0 +1,3796 @@ + +using DevExpress.XtraEditors; +using DevExpress.XtraTab; + +namespace SSG_Automation_Solution.Design.Forms +{ + partial class MainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + DevExpress.XtraEditors.TileItemElement tileItemElement1 = new DevExpress.XtraEditors.TileItemElement(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + DevExpress.XtraEditors.TileItemElement tileItemElement2 = new DevExpress.XtraEditors.TileItemElement(); + DevExpress.XtraEditors.TileItemElement tileItemElement3 = new DevExpress.XtraEditors.TileItemElement(); + DevExpress.XtraEditors.TileItemElement tileItemElement4 = new DevExpress.XtraEditors.TileItemElement(); + this.tileBar = new DevExpress.XtraBars.Navigation.TileBar(); + this.tileBarGroupTables = new DevExpress.XtraBars.Navigation.TileBarGroup(); + this.tileBarItem2 = new DevExpress.XtraBars.Navigation.TileBarItem(); + this.customersTileBarItem = new DevExpress.XtraBars.Navigation.TileBarItem(); + this.tileBarItem1 = new DevExpress.XtraBars.Navigation.TileBarItem(); + this.tileBarItem3 = new DevExpress.XtraBars.Navigation.TileBarItem(); + this.navigationFrame = new DevExpress.XtraBars.Navigation.NavigationFrame(); + this.employeesNavigationPage = new DevExpress.XtraBars.Navigation.NavigationPage(); + this.groupControl3 = new DevExpress.XtraEditors.GroupControl(); + this.panel1 = new System.Windows.Forms.Panel(); + this.simpleButton5 = new DevExpress.XtraEditors.SimpleButton(); + this.chk모든상품적용 = new DevExpress.XtraEditors.CheckEdit(); + this.toolbarFormManager1 = new DevExpress.XtraBars.ToolbarForm.ToolbarFormManager(this.components); + this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); + this.chk송출금지무시 = new DevExpress.XtraEditors.CheckEdit(); + this.labelControl5 = new DevExpress.XtraEditors.LabelControl(); + this.lblGroupAliasName = new DevExpress.XtraEditors.LabelControl(); + this.pictureEdit1 = new DevExpress.XtraEditors.PictureEdit(); + this.labelControl28 = new DevExpress.XtraEditors.LabelControl(); + this.timeSpanRepeat = new DevExpress.XtraEditors.TimeSpanEdit(); + this.labelControl25 = new DevExpress.XtraEditors.LabelControl(); + this.simpleButton1 = new DevExpress.XtraEditors.SimpleButton(); + this.labelControl17 = new DevExpress.XtraEditors.LabelControl(); + this.cmbSceneGroup = new DevExpress.XtraEditors.ComboBoxEdit(); + this.chkUseTapeTime = new DevExpress.XtraEditors.CheckEdit(); + this.simpleButton2 = new DevExpress.XtraEditors.SimpleButton(); + this.simpleButton9 = new DevExpress.XtraEditors.SimpleButton(); + this.textEdit3 = new DevExpress.XtraEditors.TextEdit(); + this.labelControl31 = new DevExpress.XtraEditors.LabelControl(); + this.timeSpanEdit1 = new DevExpress.XtraEditors.TimeSpanEdit(); + this.labelControl30 = new DevExpress.XtraEditors.LabelControl(); + this.timeEdit1 = new DevExpress.XtraEditors.TimeEdit(); + this.simpleButton7 = new DevExpress.XtraEditors.SimpleButton(); + this.textEdit1 = new DevExpress.XtraEditors.TextEdit(); + this.labelControl2 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl35 = new DevExpress.XtraEditors.LabelControl(); + this.textEdit2 = new DevExpress.XtraEditors.TextEdit(); + this.labelControl1 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl46 = new DevExpress.XtraEditors.LabelControl(); + this.timeSpanEdit5 = new DevExpress.XtraEditors.TimeSpanEdit(); + this.listBoxControl5 = new DevExpress.XtraEditors.ListBoxControl(); + this.labelControl47 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl27 = new DevExpress.XtraEditors.LabelControl(); + this.textEdit8 = new DevExpress.XtraEditors.TextEdit(); + this.labelControl9 = new DevExpress.XtraEditors.LabelControl(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.labelControl37 = new DevExpress.XtraEditors.LabelControl(); + this.cmbSceneSchedule = new DevExpress.XtraEditors.ComboBoxEdit(); + this.labelControl3 = new DevExpress.XtraEditors.LabelControl(); + this.simpleButton3 = new DevExpress.XtraEditors.SimpleButton(); + this.cmbScheduleSelectedLayer = new DevExpress.XtraEditors.ComboBoxEdit(); + this.simpleButton8 = new DevExpress.XtraEditors.SimpleButton(); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.defaultToolTipController1 = new DevExpress.Utils.DefaultToolTipController(this.components); + this.customersNavigationPage = new DevExpress.XtraBars.Navigation.NavigationPage(); + this.xtraTabControl1 = new DevExpress.XtraTab.XtraTabControl(); + this.xtraTabPage1 = new DevExpress.XtraTab.XtraTabPage(); + this.groupControl1 = new DevExpress.XtraEditors.GroupControl(); + this.btnSceneRemoveAll = new DevExpress.XtraEditors.SimpleButton(); + this.txtThumbnailFrame = new DevExpress.XtraEditors.TextEdit(); + this.labelControl15 = new DevExpress.XtraEditors.LabelControl(); + this.btnThumbnailSceneListRefresh = new DevExpress.XtraEditors.SimpleButton(); + this.simpleButton4 = new DevExpress.XtraEditors.SimpleButton(); + this.txtGroupAliasName = new DevExpress.XtraEditors.TextEdit(); + this.labelControl36 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl16 = new DevExpress.XtraEditors.LabelControl(); + this.comboBoxEdit1 = new DevExpress.XtraEditors.ComboBoxEdit(); + this.labelControl24 = new DevExpress.XtraEditors.LabelControl(); + this.cmbSceneListGroup = new DevExpress.XtraEditors.ComboBoxEdit(); + this.labelControl29 = new DevExpress.XtraEditors.LabelControl(); + this.btnVariableListDel = new DevExpress.XtraEditors.SimpleButton(); + this.btnVariableListAdd = new DevExpress.XtraEditors.SimpleButton(); + this.txtVariableListText = new DevExpress.XtraEditors.TextEdit(); + this.labelControl44 = new DevExpress.XtraEditors.LabelControl(); + this.txtVariableListTag = new DevExpress.XtraEditors.TextEdit(); + this.labelControl43 = new DevExpress.XtraEditors.LabelControl(); + this.listBoxControl2 = new DevExpress.XtraEditors.ListBoxControl(); + this.labelControl42 = new DevExpress.XtraEditors.LabelControl(); + this.btnSceneAdd = new DevExpress.XtraEditors.SimpleButton(); + this.labelControl41 = new DevExpress.XtraEditors.LabelControl(); + this.txtSceneListTime = new DevExpress.XtraEditors.TextEdit(); + this.labelControl10 = new DevExpress.XtraEditors.LabelControl(); + this.txtSceneListPath = new DevExpress.XtraEditors.TextEdit(); + this.labelControl4 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl12 = new DevExpress.XtraEditors.LabelControl(); + this.btnSceneRemove = new DevExpress.XtraEditors.SimpleButton(); + this.txtSceneListName = new DevExpress.XtraEditors.TextEdit(); + this.btnSceneLoad = new DevExpress.XtraEditors.SimpleButton(); + this.labelControl14 = new DevExpress.XtraEditors.LabelControl(); + this.pictureBoxThumbnailSceneList = new System.Windows.Forms.PictureBox(); + this.listBoxControl1 = new DevExpress.XtraEditors.ListBoxControl(); + this.cmbSceneListLayer = new DevExpress.XtraEditors.ComboBoxEdit(); + this.customersLabelControl = new DevExpress.XtraEditors.LabelControl(); + this.navigationPage2 = new DevExpress.XtraBars.Navigation.NavigationPage(); + this.groupControl2 = new DevExpress.XtraEditors.GroupControl(); + this.txtLog = new System.Windows.Forms.RichTextBox(); + this.groupControl13 = new DevExpress.XtraEditors.GroupControl(); + this.lbl송출무시금지글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lbl송출무시금지배경색 = new DevExpress.XtraEditors.LabelControl(); + this.label15 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.comboBoxEdit2 = new DevExpress.XtraEditors.ComboBoxEdit(); + this.lbl선택라인상태글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lbl선택라인상태배경색 = new DevExpress.XtraEditors.LabelControl(); + this.label13 = new System.Windows.Forms.Label(); + this.lbl선택라인종류글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lbl선택라인종류배경색 = new DevExpress.XtraEditors.LabelControl(); + this.label12 = new System.Windows.Forms.Label(); + this.lbl종류송출글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lbl종류송출배경색 = new DevExpress.XtraEditors.LabelControl(); + this.label10 = new System.Windows.Forms.Label(); + this.lbl종류스케쥴글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lbl종류스케쥴배경색 = new DevExpress.XtraEditors.LabelControl(); + this.label11 = new System.Windows.Forms.Label(); + this.lblNEXT송출글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lblNEXT송출배경색 = new DevExpress.XtraEditors.LabelControl(); + this.label9 = new System.Windows.Forms.Label(); + this.lbl완료상태글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lbl완료상태배경색 = new DevExpress.XtraEditors.LabelControl(); + this.label8 = new System.Windows.Forms.Label(); + this.lbl완료송출글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lbl완료송출배경색 = new DevExpress.XtraEditors.LabelControl(); + this.label7 = new System.Windows.Forms.Label(); + this.lblNEXT상태글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lblNEXT상태배경색 = new DevExpress.XtraEditors.LabelControl(); + this.lblNEXT스케쥴글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lblNEXT스케쥴배경색 = new DevExpress.XtraEditors.LabelControl(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.lbl선택라인글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lbl선택라인배경색 = new DevExpress.XtraEditors.LabelControl(); + this.lblOnAir상태글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lblOnAir상태배경색 = new DevExpress.XtraEditors.LabelControl(); + this.lblOnAir송출글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lblOnAir송출배경색 = new DevExpress.XtraEditors.LabelControl(); + this.lblOnAir스케쥴글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lblOnAir스케쥴배경색 = new DevExpress.XtraEditors.LabelControl(); + this.lbl완료스케쥴글자색 = new DevExpress.XtraEditors.LabelControl(); + this.lbl완료스케쥴배경색 = new DevExpress.XtraEditors.LabelControl(); + this.label4 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.labelControl92 = new DevExpress.XtraEditors.LabelControl(); + this.label69 = new System.Windows.Forms.Label(); + this.label73 = new System.Windows.Forms.Label(); + this.label61 = new System.Windows.Forms.Label(); + this.groupControl6 = new DevExpress.XtraEditors.GroupControl(); + this.labelControl45 = new DevExpress.XtraEditors.LabelControl(); + this.btnTimeGap1mm = new DevExpress.XtraEditors.SimpleButton(); + this.btnTimeGap1m = new DevExpress.XtraEditors.SimpleButton(); + this.txtTimeGap = new DevExpress.XtraEditors.TextEdit(); + this.labelControl40 = new DevExpress.XtraEditors.LabelControl(); + this.btnTimeGap1sm = new DevExpress.XtraEditors.SimpleButton(); + this.btnTimeGap1nm = new DevExpress.XtraEditors.SimpleButton(); + this.btnTimeGap1s = new DevExpress.XtraEditors.SimpleButton(); + this.btnTimeGap1n = new DevExpress.XtraEditors.SimpleButton(); + this.labelControl39 = new DevExpress.XtraEditors.LabelControl(); + this.groupBoxAdminOnly = new System.Windows.Forms.GroupBox(); + this.toggleSwitchChannel = new DevExpress.XtraEditors.ToggleSwitch(); + this.lblSwitchChannel = new DevExpress.XtraEditors.LabelControl(); + this.labelControl23 = new DevExpress.XtraEditors.LabelControl(); + this.lblAutoSync = new DevExpress.XtraEditors.LabelControl(); + this.toggleSwitchAutoSync = new DevExpress.XtraEditors.ToggleSwitch(); + this.lbl수정모드 = new DevExpress.XtraEditors.LabelControl(); + this.lblDoneDisplayInvisible = new DevExpress.XtraEditors.LabelControl(); + this.toggleSwitch수정모드 = new DevExpress.XtraEditors.ToggleSwitch(); + this.toggleSwitchDone송출보지않기 = new DevExpress.XtraEditors.ToggleSwitch(); + this.timeSpanEditForbidEnd = new DevExpress.XtraEditors.TimeSpanEdit(); + this.labelControl11 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl13 = new DevExpress.XtraEditors.LabelControl(); + this.timeSpanEditForbidStart = new DevExpress.XtraEditors.TimeSpanEdit(); + this.labelControl8 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl6 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl7 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl34 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl33 = new DevExpress.XtraEditors.LabelControl(); + this.txtDissolveTime = new DevExpress.XtraEditors.TextEdit(); + this.labelControl22 = new DevExpress.XtraEditors.LabelControl(); + this.btnSettingTornado = new DevExpress.XtraEditors.SimpleButton(); + this.labelControl26 = new DevExpress.XtraEditors.LabelControl(); + this.txtDBIP = new DevExpress.XtraEditors.TextEdit(); + this.fluentDesignFormContainer1 = new DevExpress.XtraBars.FluentDesignSystem.FluentDesignFormContainer(); + this.navigationPage1 = new DevExpress.XtraBars.Navigation.NavigationPage(); + this.groupControl5 = new DevExpress.XtraEditors.GroupControl(); + this.labelControl21 = new DevExpress.XtraEditors.LabelControl(); + this.btnUserRemove = new DevExpress.XtraEditors.SimpleButton(); + this.listBoxControlUsers = new DevExpress.XtraEditors.ListBoxControl(); + this.btnUserAdd = new DevExpress.XtraEditors.SimpleButton(); + this.txtPassWord2 = new DevExpress.XtraEditors.TextEdit(); + this.txtPassWord1 = new DevExpress.XtraEditors.TextEdit(); + this.labelControl20 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl19 = new DevExpress.XtraEditors.LabelControl(); + this.txtUserID = new DevExpress.XtraEditors.TextEdit(); + this.labelControl18 = new DevExpress.XtraEditors.LabelControl(); + this.gridControlSchedule = new DevExpress.XtraGrid.GridControl(); + this.gridViewSchedule = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.employeesLabelControl = new DevExpress.XtraEditors.LabelControl(); + this.gaugeControl1 = new DevExpress.XtraGauges.Win.GaugeControl(); + this.digitalGauge1 = new DevExpress.XtraGauges.Win.Gauges.Digital.DigitalGauge(); + this.digitalBackgroundLayerComponent1 = new DevExpress.XtraGauges.Win.Gauges.Digital.DigitalBackgroundLayerComponent(); + this.timerClock = new System.Windows.Forms.Timer(this.components); + this.toolbarFormControl1 = new DevExpress.XtraBars.ToolbarForm.ToolbarFormControl(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.lblIsAutoDisplaying = new DevExpress.XtraEditors.LabelControl(); + this.toggleSwitch1 = new DevExpress.XtraEditors.ToggleSwitch(); + this.btnScheduleCopy = new DevExpress.XtraEditors.SimpleButton(); + this.timeEdit2 = new DevExpress.XtraEditors.DateEdit(); + this.btnSyncData = new DevExpress.XtraEditors.SimpleButton(); + this.timerSync = new System.Windows.Forms.Timer(this.components); + this.picTornado = new DevExpress.XtraEditors.PictureEdit(); + this.lblConnectionTornado2 = new DevExpress.XtraEditors.LabelControl(); + this.lblisCable = new DevExpress.XtraEditors.LabelControl(); + this.btnDBSave = new DevExpress.XtraEditors.SimpleButton(); + this.btnDBLoad = new DevExpress.XtraEditors.SimpleButton(); + this.labelControl32 = new DevExpress.XtraEditors.LabelControl(); + this.comboBoxEdit3 = new DevExpress.XtraEditors.ComboBoxEdit(); + this.labelControl38 = new DevExpress.XtraEditors.LabelControl(); + this.btnDBCrossLoad = new DevExpress.XtraEditors.SimpleButton(); + ((System.ComponentModel.ISupportInitialize)(this.navigationFrame)).BeginInit(); + this.navigationFrame.SuspendLayout(); + this.employeesNavigationPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl3)).BeginInit(); + this.groupControl3.SuspendLayout(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.chk모든상품적용.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.toolbarFormManager1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.chk송출금지무시.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureEdit1.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeSpanRepeat.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cmbSceneGroup.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.chkUseTapeTime.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit3.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeSpanEdit1.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeEdit1.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit1.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit2.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeSpanEdit5.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.listBoxControl5)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit8.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cmbSceneSchedule.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cmbScheduleSelectedLayer.Properties)).BeginInit(); + this.customersNavigationPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.xtraTabControl1)).BeginInit(); + this.xtraTabControl1.SuspendLayout(); + this.xtraTabPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).BeginInit(); + this.groupControl1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.txtThumbnailFrame.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtGroupAliasName.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit1.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cmbSceneListGroup.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtVariableListText.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtVariableListTag.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.listBoxControl2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtSceneListTime.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtSceneListPath.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtSceneListName.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxThumbnailSceneList)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.listBoxControl1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cmbSceneListLayer.Properties)).BeginInit(); + this.navigationPage2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl2)).BeginInit(); + this.groupControl2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl13)).BeginInit(); + this.groupControl13.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit2.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl6)).BeginInit(); + this.groupControl6.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.txtTimeGap.Properties)).BeginInit(); + this.groupBoxAdminOnly.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.toggleSwitchChannel.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.toggleSwitchAutoSync.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.toggleSwitch수정모드.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.toggleSwitchDone송출보지않기.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeSpanEditForbidEnd.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeSpanEditForbidStart.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtDissolveTime.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtDBIP.Properties)).BeginInit(); + this.navigationPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl5)).BeginInit(); + this.groupControl5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.listBoxControlUsers)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtPassWord2.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtPassWord1.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtUserID.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.gridControlSchedule)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.gridViewSchedule)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.digitalGauge1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.digitalBackgroundLayerComponent1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.toolbarFormControl1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.toggleSwitch1.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeEdit2.Properties.CalendarTimeProperties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeEdit2.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.picTornado.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit3.Properties)).BeginInit(); + this.SuspendLayout(); + // + // tileBar + // + this.tileBar.AllowGlyphSkinning = true; + this.tileBar.AllowSelectedItem = true; + this.tileBar.AppearanceGroupText.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140))))); + this.tileBar.AppearanceGroupText.Options.UseForeColor = true; + this.tileBar.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(89)))), ((int)(((byte)(120))))); + this.tileBar.Dock = System.Windows.Forms.DockStyle.Top; + this.tileBar.DropDownButtonWidth = 30; + this.tileBar.DropDownOptions.BeakColor = System.Drawing.Color.Empty; + this.tileBar.Groups.Add(this.tileBarGroupTables); + this.tileBar.IndentBetweenGroups = 10; + this.tileBar.IndentBetweenItems = 10; + this.tileBar.ItemPadding = new System.Windows.Forms.Padding(8, 6, 12, 6); + this.tileBar.Location = new System.Drawing.Point(0, 31); + this.tileBar.Margin = new System.Windows.Forms.Padding(5); + this.tileBar.MaxId = 10; + this.tileBar.MaximumSize = new System.Drawing.Size(0, 100); + this.tileBar.MinimumSize = new System.Drawing.Size(117, 100); + this.tileBar.Name = "tileBar"; + this.tileBar.Padding = new System.Windows.Forms.Padding(5); + this.tileBar.ScrollMode = DevExpress.XtraEditors.TileControlScrollMode.None; + this.tileBar.SelectionBorderWidth = 2; + this.tileBar.SelectionColorMode = DevExpress.XtraBars.Navigation.SelectionColorMode.UseItemBackColor; + this.tileBar.ShowGroupText = false; + this.tileBar.Size = new System.Drawing.Size(1918, 100); + this.tileBar.TabIndex = 1; + this.tileBar.Text = "tileBar"; + this.tileBar.WideTileWidth = 150; + this.tileBar.SelectedItemChanged += new DevExpress.XtraEditors.TileItemClickEventHandler(this.tileBar_SelectedItemChanged); + // + // tileBarGroupTables + // + this.tileBarGroupTables.Items.Add(this.tileBarItem2); + this.tileBarGroupTables.Items.Add(this.customersTileBarItem); + this.tileBarGroupTables.Items.Add(this.tileBarItem1); + this.tileBarGroupTables.Items.Add(this.tileBarItem3); + this.tileBarGroupTables.Name = "tileBarGroupTables"; + this.tileBarGroupTables.Text = "TABLES"; + // + // tileBarItem2 + // + this.tileBarItem2.AppearanceItem.Normal.Font = new System.Drawing.Font("맑은 고딕", 9.75F); + this.tileBarItem2.AppearanceItem.Normal.Options.UseFont = true; + this.tileBarItem2.DropDownOptions.BeakColor = System.Drawing.Color.Empty; + tileItemElement1.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("resource.SvgImage"))); + tileItemElement1.Text = "스케쥴 변경"; + this.tileBarItem2.Elements.Add(tileItemElement1); + this.tileBarItem2.Id = 5; + this.tileBarItem2.ItemSize = DevExpress.XtraBars.Navigation.TileBarItemSize.Wide; + this.tileBarItem2.Name = "tileBarItem2"; + // + // customersTileBarItem + // + this.customersTileBarItem.AppearanceItem.Normal.Font = new System.Drawing.Font("맑은 고딕", 9.75F); + this.customersTileBarItem.AppearanceItem.Normal.Options.UseFont = true; + this.customersTileBarItem.DropDownOptions.BeakColor = System.Drawing.Color.Empty; + tileItemElement2.ImageOptions.ImageUri.Uri = "Cube;Size32x32;GrayScaled"; + tileItemElement2.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("resource.SvgImage1"))); + tileItemElement2.Text = "디자인 편성"; + this.customersTileBarItem.Elements.Add(tileItemElement2); + this.customersTileBarItem.Id = 1; + this.customersTileBarItem.ItemSize = DevExpress.XtraBars.Navigation.TileBarItemSize.Wide; + this.customersTileBarItem.Name = "customersTileBarItem"; + // + // tileBarItem1 + // + this.tileBarItem1.AppearanceItem.Normal.Font = new System.Drawing.Font("맑은 고딕", 9.75F); + this.tileBarItem1.AppearanceItem.Normal.Options.UseFont = true; + this.tileBarItem1.DropDownOptions.BeakColor = System.Drawing.Color.Empty; + tileItemElement3.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("resource.SvgImage2"))); + tileItemElement3.Text = "옵션"; + this.tileBarItem1.Elements.Add(tileItemElement3); + this.tileBarItem1.Id = 2; + this.tileBarItem1.ItemSize = DevExpress.XtraBars.Navigation.TileBarItemSize.Wide; + this.tileBarItem1.Name = "tileBarItem1"; + // + // tileBarItem3 + // + this.tileBarItem3.DropDownOptions.BeakColor = System.Drawing.Color.Empty; + tileItemElement4.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("resource.SvgImage3"))); + tileItemElement4.Text = "계정관리"; + this.tileBarItem3.Elements.Add(tileItemElement4); + this.tileBarItem3.Id = 9; + this.tileBarItem3.ItemSize = DevExpress.XtraBars.Navigation.TileBarItemSize.Wide; + this.tileBarItem3.Name = "tileBarItem3"; + // + // navigationFrame + // + this.defaultToolTipController1.SetAllowHtmlText(this.navigationFrame, DevExpress.Utils.DefaultBoolean.Default); + this.navigationFrame.AllowTransitionAnimation = DevExpress.Utils.DefaultBoolean.False; + this.navigationFrame.Controls.Add(this.employeesNavigationPage); + this.navigationFrame.Controls.Add(this.customersNavigationPage); + this.navigationFrame.Controls.Add(this.navigationPage2); + this.navigationFrame.Controls.Add(this.navigationPage1); + this.navigationFrame.Dock = System.Windows.Forms.DockStyle.Fill; + this.navigationFrame.Location = new System.Drawing.Point(0, 131); + this.navigationFrame.Margin = new System.Windows.Forms.Padding(5); + this.navigationFrame.Name = "navigationFrame"; + this.navigationFrame.Pages.AddRange(new DevExpress.XtraBars.Navigation.NavigationPageBase[] { + this.employeesNavigationPage, + this.customersNavigationPage, + this.navigationPage2, + this.navigationPage1}); + this.navigationFrame.SelectedPage = this.employeesNavigationPage; + this.navigationFrame.Size = new System.Drawing.Size(1918, 917); + this.navigationFrame.TabIndex = 0; + this.navigationFrame.Text = "navigationFrame"; + // + // employeesNavigationPage + // + this.defaultToolTipController1.SetAllowHtmlText(this.employeesNavigationPage, DevExpress.Utils.DefaultBoolean.Default); + this.employeesNavigationPage.Controls.Add(this.groupControl3); + this.employeesNavigationPage.Controls.Add(this.gridControlSchedule); + this.employeesNavigationPage.Controls.Add(this.employeesLabelControl); + this.employeesNavigationPage.Name = "employeesNavigationPage"; + this.employeesNavigationPage.Size = new System.Drawing.Size(1918, 917); + // + // groupControl3 + // + this.groupControl3.AppearanceCaption.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.groupControl3.AppearanceCaption.Options.UseFont = true; + this.groupControl3.Controls.Add(this.panel1); + this.groupControl3.Controls.Add(this.richTextBox1); + this.groupControl3.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupControl3.Location = new System.Drawing.Point(1383, 0); + this.groupControl3.Name = "groupControl3"; + this.groupControl3.Size = new System.Drawing.Size(535, 917); + this.groupControl3.TabIndex = 566; + this.groupControl3.Text = "groupControl3"; + this.groupControl3.ToolTipController = this.defaultToolTipController1.DefaultController; + // + // panel1 + // + this.defaultToolTipController1.SetAllowHtmlText(this.panel1, DevExpress.Utils.DefaultBoolean.Default); + this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.panel1.Controls.Add(this.simpleButton5); + this.panel1.Controls.Add(this.chk모든상품적용); + this.panel1.Controls.Add(this.chk송출금지무시); + this.panel1.Controls.Add(this.labelControl5); + this.panel1.Controls.Add(this.lblGroupAliasName); + this.panel1.Controls.Add(this.pictureEdit1); + this.panel1.Controls.Add(this.labelControl28); + this.panel1.Controls.Add(this.timeSpanRepeat); + this.panel1.Controls.Add(this.labelControl25); + this.panel1.Controls.Add(this.simpleButton1); + this.panel1.Controls.Add(this.labelControl17); + this.panel1.Controls.Add(this.cmbSceneGroup); + this.panel1.Controls.Add(this.chkUseTapeTime); + this.panel1.Controls.Add(this.simpleButton2); + this.panel1.Controls.Add(this.simpleButton9); + this.panel1.Controls.Add(this.textEdit3); + this.panel1.Controls.Add(this.labelControl31); + this.panel1.Controls.Add(this.timeSpanEdit1); + this.panel1.Controls.Add(this.labelControl30); + this.panel1.Controls.Add(this.timeEdit1); + this.panel1.Controls.Add(this.simpleButton7); + this.panel1.Controls.Add(this.textEdit1); + this.panel1.Controls.Add(this.labelControl2); + this.panel1.Controls.Add(this.labelControl35); + this.panel1.Controls.Add(this.textEdit2); + this.panel1.Controls.Add(this.labelControl1); + this.panel1.Controls.Add(this.labelControl46); + this.panel1.Controls.Add(this.timeSpanEdit5); + this.panel1.Controls.Add(this.listBoxControl5); + this.panel1.Controls.Add(this.labelControl47); + this.panel1.Controls.Add(this.labelControl27); + this.panel1.Controls.Add(this.textEdit8); + this.panel1.Controls.Add(this.labelControl9); + this.panel1.Controls.Add(this.pictureBox1); + this.panel1.Controls.Add(this.labelControl37); + this.panel1.Controls.Add(this.cmbSceneSchedule); + this.panel1.Controls.Add(this.labelControl3); + this.panel1.Controls.Add(this.simpleButton3); + this.panel1.Controls.Add(this.cmbScheduleSelectedLayer); + this.panel1.Controls.Add(this.simpleButton8); + this.panel1.Location = new System.Drawing.Point(7, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(521, 876); + this.panel1.TabIndex = 565; + // + // simpleButton5 + // + this.simpleButton5.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.simpleButton5.Appearance.Options.UseFont = true; + this.simpleButton5.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("simpleButton5.ImageOptions.SvgImage"))); + this.simpleButton5.Location = new System.Drawing.Point(8, 207); + this.simpleButton5.Name = "simpleButton5"; + this.simpleButton5.Size = new System.Drawing.Size(135, 50); + this.simpleButton5.TabIndex = 1102; + this.simpleButton5.Text = "즉시 송출"; + this.simpleButton5.Click += new System.EventHandler(this.simpleButton5_Click); + // + // chk모든상품적용 + // + this.chk모든상품적용.Location = new System.Drawing.Point(38, 61); + this.chk모든상품적용.MenuManager = this.toolbarFormManager1; + this.chk모든상품적용.Name = "chk모든상품적용"; + this.chk모든상품적용.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.chk모든상품적용.Properties.Appearance.ForeColor = System.Drawing.Color.Red; + this.chk모든상품적용.Properties.Appearance.Options.UseFont = true; + this.chk모든상품적용.Properties.Appearance.Options.UseForeColor = true; + this.chk모든상품적용.Properties.Caption = "모든 상품 적용"; + this.chk모든상품적용.Size = new System.Drawing.Size(205, 29); + this.chk모든상품적용.TabIndex = 1101; + this.chk모든상품적용.CheckedChanged += new System.EventHandler(this.chkUseTapeTime_CheckedChanged); + // + // toolbarFormManager1 + // + this.toolbarFormManager1.DockControls.Add(this.barDockControlTop); + this.toolbarFormManager1.DockControls.Add(this.barDockControlBottom); + this.toolbarFormManager1.DockControls.Add(this.barDockControlLeft); + this.toolbarFormManager1.DockControls.Add(this.barDockControlRight); + this.toolbarFormManager1.Form = this; + this.toolbarFormManager1.MaxItemId = 1; + // + // barDockControlTop + // + this.barDockControlTop.CausesValidation = false; + this.barDockControlTop.Dock = System.Windows.Forms.DockStyle.Top; + this.barDockControlTop.Location = new System.Drawing.Point(0, 31); + this.barDockControlTop.Manager = this.toolbarFormManager1; + this.barDockControlTop.Size = new System.Drawing.Size(1918, 0); + // + // barDockControlBottom + // + this.barDockControlBottom.CausesValidation = false; + this.barDockControlBottom.Dock = System.Windows.Forms.DockStyle.Bottom; + this.barDockControlBottom.Location = new System.Drawing.Point(0, 1048); + this.barDockControlBottom.Manager = this.toolbarFormManager1; + this.barDockControlBottom.Size = new System.Drawing.Size(1918, 0); + // + // barDockControlLeft + // + this.barDockControlLeft.CausesValidation = false; + this.barDockControlLeft.Dock = System.Windows.Forms.DockStyle.Left; + this.barDockControlLeft.Location = new System.Drawing.Point(0, 31); + this.barDockControlLeft.Manager = this.toolbarFormManager1; + this.barDockControlLeft.Size = new System.Drawing.Size(0, 1017); + // + // barDockControlRight + // + this.barDockControlRight.CausesValidation = false; + this.barDockControlRight.Dock = System.Windows.Forms.DockStyle.Right; + this.barDockControlRight.Location = new System.Drawing.Point(1918, 31); + this.barDockControlRight.Manager = this.toolbarFormManager1; + this.barDockControlRight.Size = new System.Drawing.Size(0, 1017); + // + // chk송출금지무시 + // + this.chk송출금지무시.Location = new System.Drawing.Point(38, 96); + this.chk송출금지무시.MenuManager = this.toolbarFormManager1; + this.chk송출금지무시.Name = "chk송출금지무시"; + this.chk송출금지무시.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.chk송출금지무시.Properties.Appearance.ForeColor = System.Drawing.Color.Red; + this.chk송출금지무시.Properties.Appearance.Options.UseFont = true; + this.chk송출금지무시.Properties.Appearance.Options.UseForeColor = true; + this.chk송출금지무시.Properties.Caption = "송출 금지 시간 무시"; + this.chk송출금지무시.Size = new System.Drawing.Size(205, 29); + this.chk송출금지무시.TabIndex = 1100; + this.chk송출금지무시.CheckedChanged += new System.EventHandler(this.chkUseTapeTime_CheckedChanged); + // + // labelControl5 + // + this.labelControl5.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl5.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl5.Appearance.Options.UseFont = true; + this.labelControl5.Appearance.Options.UseForeColor = true; + this.labelControl5.Location = new System.Drawing.Point(50, 266); + this.labelControl5.Name = "labelControl5"; + this.labelControl5.Size = new System.Drawing.Size(102, 25); + this.labelControl5.TabIndex = 1099; + this.labelControl5.Text = "Group 별칭"; + // + // lblGroupAliasName + // + this.lblGroupAliasName.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.lblGroupAliasName.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.lblGroupAliasName.Appearance.Options.UseFont = true; + this.lblGroupAliasName.Appearance.Options.UseForeColor = true; + this.lblGroupAliasName.Location = new System.Drawing.Point(176, 266); + this.lblGroupAliasName.Name = "lblGroupAliasName"; + this.lblGroupAliasName.Size = new System.Drawing.Size(121, 25); + this.lblGroupAliasName.TabIndex = 1098; + this.lblGroupAliasName.Text = "Group명 별칭"; + // + // pictureEdit1 + // + this.pictureEdit1.Cursor = System.Windows.Forms.Cursors.Default; + this.pictureEdit1.EditValue = ((object)(resources.GetObject("pictureEdit1.EditValue"))); + this.pictureEdit1.Location = new System.Drawing.Point(10, 338); + this.pictureEdit1.Name = "pictureEdit1"; + this.pictureEdit1.Properties.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.pictureEdit1.Properties.Appearance.Options.UseBackColor = true; + this.pictureEdit1.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + this.pictureEdit1.Properties.ShowCameraMenuItem = DevExpress.XtraEditors.Controls.CameraMenuItemVisibility.Auto; + this.pictureEdit1.Properties.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Stretch; + this.pictureEdit1.Size = new System.Drawing.Size(37, 29); + this.pictureEdit1.TabIndex = 1097; + this.pictureEdit1.ToolTip = "리스트 Refresh"; + this.pictureEdit1.Click += new System.EventHandler(this.pictureEdit1_Click); + // + // labelControl28 + // + this.labelControl28.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl28.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl28.Appearance.Options.UseFont = true; + this.labelControl28.Appearance.Options.UseForeColor = true; + this.labelControl28.Location = new System.Drawing.Point(459, 61); + this.labelControl28.Name = "labelControl28"; + this.labelControl28.Size = new System.Drawing.Size(38, 25); + this.labelControl28.TabIndex = 1091; + this.labelControl28.Text = "주기"; + // + // timeSpanRepeat + // + this.timeSpanRepeat.EditValue = System.TimeSpan.Parse("00:00:00"); + this.timeSpanRepeat.Location = new System.Drawing.Point(354, 58); + this.timeSpanRepeat.MenuManager = this.toolbarFormManager1; + this.timeSpanRepeat.Name = "timeSpanRepeat"; + this.timeSpanRepeat.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.timeSpanRepeat.Properties.Appearance.Options.UseFont = true; + this.timeSpanRepeat.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.timeSpanRepeat.Size = new System.Drawing.Size(99, 32); + this.timeSpanRepeat.TabIndex = 1090; + this.timeSpanRepeat.EditValueChanged += new System.EventHandler(this.timeSpanRepeat_EditValueChanged); + // + // labelControl25 + // + this.labelControl25.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl25.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl25.Appearance.Options.UseFont = true; + this.labelControl25.Appearance.Options.UseForeColor = true; + this.labelControl25.Location = new System.Drawing.Point(272, 61); + this.labelControl25.Name = "labelControl25"; + this.labelControl25.Size = new System.Drawing.Size(76, 25); + this.labelControl25.TabIndex = 1089; + this.labelControl25.Text = "반복추가"; + // + // simpleButton1 + // + this.simpleButton1.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.simpleButton1.Appearance.Options.UseFont = true; + this.simpleButton1.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("simpleButton1.ImageOptions.SvgImage"))); + this.simpleButton1.Location = new System.Drawing.Point(340, 801); + this.simpleButton1.Name = "simpleButton1"; + this.simpleButton1.Size = new System.Drawing.Size(158, 63); + this.simpleButton1.TabIndex = 1088; + this.simpleButton1.Text = "그룹 삭제"; + this.simpleButton1.Click += new System.EventHandler(this.simpleButton9_Click); + // + // labelControl17 + // + this.labelControl17.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl17.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl17.Appearance.Options.UseFont = true; + this.labelControl17.Appearance.Options.UseForeColor = true; + this.labelControl17.Location = new System.Drawing.Point(50, 300); + this.labelControl17.Name = "labelControl17"; + this.labelControl17.Size = new System.Drawing.Size(102, 25); + this.labelControl17.TabIndex = 1084; + this.labelControl17.Text = "Group 변경"; + // + // cmbSceneGroup + // + this.cmbSceneGroup.Location = new System.Drawing.Point(162, 297); + this.cmbSceneGroup.MenuManager = this.toolbarFormManager1; + this.cmbSceneGroup.Name = "cmbSceneGroup"; + this.cmbSceneGroup.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.cmbSceneGroup.Properties.Appearance.Options.UseFont = true; + this.cmbSceneGroup.Properties.AppearanceDropDown.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.cmbSceneGroup.Properties.AppearanceDropDown.Options.UseFont = true; + this.cmbSceneGroup.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.cmbSceneGroup.Properties.Items.AddRange(new object[] { + "Group1", + "Group2", + "Group3", + "Group4", + "Group5", + "Group6", + "Group7", + "Group8", + "Group9", + "Group10", + "Group11", + "Group12", + "Group13", + "Group14", + "Group15"}); + this.cmbSceneGroup.Size = new System.Drawing.Size(336, 32); + this.cmbSceneGroup.TabIndex = 1085; + this.cmbSceneGroup.SelectedIndexChanged += new System.EventHandler(this.cmbSceneGroup_SelectedIndexChanged); + // + // chkUseTapeTime + // + this.chkUseTapeTime.Location = new System.Drawing.Point(311, 96); + this.chkUseTapeTime.MenuManager = this.toolbarFormManager1; + this.chkUseTapeTime.Name = "chkUseTapeTime"; + this.chkUseTapeTime.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.chkUseTapeTime.Properties.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.chkUseTapeTime.Properties.Appearance.Options.UseFont = true; + this.chkUseTapeTime.Properties.Appearance.Options.UseForeColor = true; + this.chkUseTapeTime.Properties.Caption = "테잎시간으로 반복"; + this.chkUseTapeTime.Size = new System.Drawing.Size(186, 29); + this.chkUseTapeTime.TabIndex = 1083; + this.chkUseTapeTime.CheckedChanged += new System.EventHandler(this.chkUseTapeTime_CheckedChanged); + // + // simpleButton2 + // + this.simpleButton2.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.simpleButton2.Appearance.Options.UseFont = true; + this.simpleButton2.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("simpleButton2.ImageOptions.SvgImage"))); + this.simpleButton2.Location = new System.Drawing.Point(149, 207); + this.simpleButton2.Name = "simpleButton2"; + this.simpleButton2.Size = new System.Drawing.Size(135, 50); + this.simpleButton2.TabIndex = 1079; + this.simpleButton2.Text = "송출 Clear"; + this.simpleButton2.Click += new System.EventHandler(this.simpleButton2_Click); + // + // simpleButton9 + // + this.simpleButton9.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.simpleButton9.Appearance.Options.UseFont = true; + this.simpleButton9.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("simpleButton9.ImageOptions.SvgImage"))); + this.simpleButton9.Location = new System.Drawing.Point(176, 801); + this.simpleButton9.Name = "simpleButton9"; + this.simpleButton9.Size = new System.Drawing.Size(158, 63); + this.simpleButton9.TabIndex = 1078; + this.simpleButton9.Text = "송출 삭제"; + this.simpleButton9.Click += new System.EventHandler(this.simpleButton9_Click); + // + // textEdit3 + // + this.textEdit3.Enabled = false; + this.textEdit3.Location = new System.Drawing.Point(108, 8); + this.textEdit3.MenuManager = this.toolbarFormManager1; + this.textEdit3.Name = "textEdit3"; + this.textEdit3.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.textEdit3.Properties.Appearance.Options.UseFont = true; + this.textEdit3.Size = new System.Drawing.Size(390, 32); + this.textEdit3.TabIndex = 1077; + // + // labelControl31 + // + this.labelControl31.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl31.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl31.Appearance.Options.UseFont = true; + this.labelControl31.Appearance.Options.UseForeColor = true; + this.labelControl31.Location = new System.Drawing.Point(38, 11); + this.labelControl31.Name = "labelControl31"; + this.labelControl31.Size = new System.Drawing.Size(57, 25); + this.labelControl31.TabIndex = 1076; + this.labelControl31.Text = "스케쥴"; + // + // timeSpanEdit1 + // + this.timeSpanEdit1.EditValue = System.TimeSpan.Parse("00:00:00"); + this.timeSpanEdit1.Location = new System.Drawing.Point(367, 131); + this.timeSpanEdit1.MenuManager = this.toolbarFormManager1; + this.timeSpanEdit1.Name = "timeSpanEdit1"; + this.timeSpanEdit1.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.timeSpanEdit1.Properties.Appearance.Options.UseFont = true; + this.timeSpanEdit1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.timeSpanEdit1.Size = new System.Drawing.Size(130, 32); + this.timeSpanEdit1.TabIndex = 1075; + this.timeSpanEdit1.EditValueChanged += new System.EventHandler(this.timeSpanEdit1_EditValueChanged); + this.timeSpanEdit1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.timeSpanEdit1_KeyPress); + // + // labelControl30 + // + this.labelControl30.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl30.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl30.Appearance.Options.UseFont = true; + this.labelControl30.Appearance.Options.UseForeColor = true; + this.labelControl30.Location = new System.Drawing.Point(259, 134); + this.labelControl30.Name = "labelControl30"; + this.labelControl30.Size = new System.Drawing.Size(102, 25); + this.labelControl30.TabIndex = 1074; + this.labelControl30.Text = "스케쥴 기준"; + // + // timeEdit1 + // + this.timeEdit1.EditValue = new System.DateTime(2024, 12, 13, 0, 0, 0, 0); + this.timeEdit1.Location = new System.Drawing.Point(367, 169); + this.timeEdit1.MenuManager = this.toolbarFormManager1; + this.timeEdit1.Name = "timeEdit1"; + this.timeEdit1.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.timeEdit1.Properties.Appearance.Options.UseFont = true; + this.timeEdit1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.timeEdit1.Properties.MaskSettings.Set("mask", "HH:mm:ss"); + this.timeEdit1.Properties.UseMaskAsDisplayFormat = true; + this.timeEdit1.Size = new System.Drawing.Size(130, 32); + this.timeEdit1.TabIndex = 567; + this.timeEdit1.EditValueChanged += new System.EventHandler(this.timeEdit1_EditValueChanged); + this.timeEdit1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.timeEdit1_KeyPress); + // + // simpleButton7 + // + this.simpleButton7.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.simpleButton7.Appearance.Options.UseFont = true; + this.simpleButton7.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("simpleButton7.ImageOptions.SvgImage"))); + this.simpleButton7.Location = new System.Drawing.Point(12, 801); + this.simpleButton7.Name = "simpleButton7"; + this.simpleButton7.Size = new System.Drawing.Size(158, 63); + this.simpleButton7.TabIndex = 1072; + this.simpleButton7.Text = "송출 수정"; + this.simpleButton7.Click += new System.EventHandler(this.simpleButton7_Click); + // + // textEdit1 + // + this.textEdit1.Location = new System.Drawing.Point(149, 759); + this.textEdit1.MenuManager = this.toolbarFormManager1; + this.textEdit1.Name = "textEdit1"; + this.textEdit1.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.textEdit1.Properties.Appearance.Options.UseFont = true; + this.textEdit1.Size = new System.Drawing.Size(349, 32); + this.textEdit1.TabIndex = 1049; + this.textEdit1.EditValueChanged += new System.EventHandler(this.textEdit1_EditValueChanged); + // + // labelControl2 + // + this.labelControl2.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl2.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl2.Appearance.Options.UseFont = true; + this.labelControl2.Appearance.Options.UseForeColor = true; + this.labelControl2.Location = new System.Drawing.Point(79, 762); + this.labelControl2.Name = "labelControl2"; + this.labelControl2.Size = new System.Drawing.Size(57, 25); + this.labelControl2.TabIndex = 1048; + this.labelControl2.Text = "텍스트"; + // + // labelControl35 + // + this.labelControl35.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl35.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl35.Appearance.Options.UseFont = true; + this.labelControl35.Appearance.Options.UseForeColor = true; + this.labelControl35.Location = new System.Drawing.Point(323, 210); + this.labelControl35.Name = "labelControl35"; + this.labelControl35.Size = new System.Drawing.Size(38, 25); + this.labelControl35.TabIndex = 369; + this.labelControl35.Text = "길이"; + // + // textEdit2 + // + this.textEdit2.Enabled = false; + this.textEdit2.Location = new System.Drawing.Point(149, 721); + this.textEdit2.MenuManager = this.toolbarFormManager1; + this.textEdit2.Name = "textEdit2"; + this.textEdit2.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.textEdit2.Properties.Appearance.Options.UseFont = true; + this.textEdit2.Size = new System.Drawing.Size(349, 32); + this.textEdit2.TabIndex = 1047; + // + // labelControl1 + // + this.labelControl1.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl1.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl1.Appearance.Options.UseFont = true; + this.labelControl1.Appearance.Options.UseForeColor = true; + this.labelControl1.Location = new System.Drawing.Point(55, 338); + this.labelControl1.Name = "labelControl1"; + this.labelControl1.Size = new System.Drawing.Size(97, 25); + this.labelControl1.TabIndex = 358; + this.labelControl1.Text = "Scene 변경"; + // + // labelControl46 + // + this.labelControl46.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl46.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl46.Appearance.Options.UseFont = true; + this.labelControl46.Appearance.Options.UseForeColor = true; + this.labelControl46.Location = new System.Drawing.Point(79, 724); + this.labelControl46.Name = "labelControl46"; + this.labelControl46.Size = new System.Drawing.Size(57, 25); + this.labelControl46.TabIndex = 1046; + this.labelControl46.Text = "변수명"; + // + // timeSpanEdit5 + // + this.timeSpanEdit5.EditValue = System.TimeSpan.Parse("00:00:00"); + this.timeSpanEdit5.Location = new System.Drawing.Point(367, 208); + this.timeSpanEdit5.MenuManager = this.toolbarFormManager1; + this.timeSpanEdit5.Name = "timeSpanEdit5"; + this.timeSpanEdit5.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.timeSpanEdit5.Properties.Appearance.Options.UseFont = true; + this.timeSpanEdit5.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.timeSpanEdit5.Size = new System.Drawing.Size(130, 32); + this.timeSpanEdit5.TabIndex = 368; + // + // listBoxControl5 + // + this.listBoxControl5.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.listBoxControl5.Appearance.Options.UseFont = true; + this.listBoxControl5.Location = new System.Drawing.Point(149, 629); + this.listBoxControl5.Name = "listBoxControl5"; + this.listBoxControl5.Size = new System.Drawing.Size(349, 86); + this.listBoxControl5.TabIndex = 1045; + this.listBoxControl5.SelectedIndexChanged += new System.EventHandler(this.listBoxControl5_SelectedIndexChanged); + // + // labelControl47 + // + this.labelControl47.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl47.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl47.Appearance.Options.UseFont = true; + this.labelControl47.Appearance.Options.UseForeColor = true; + this.labelControl47.Location = new System.Drawing.Point(15, 629); + this.labelControl47.Name = "labelControl47"; + this.labelControl47.Size = new System.Drawing.Size(121, 25); + this.labelControl47.TabIndex = 1044; + this.labelControl47.Text = "변수명 리스트"; + // + // labelControl27 + // + this.labelControl27.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl27.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl27.Appearance.Options.UseFont = true; + this.labelControl27.Appearance.Options.UseForeColor = true; + this.labelControl27.Location = new System.Drawing.Point(10, 134); + this.labelControl27.Name = "labelControl27"; + this.labelControl27.Size = new System.Drawing.Size(76, 25); + this.labelControl27.TabIndex = 367; + this.labelControl27.Text = "남은시간"; + // + // textEdit8 + // + this.textEdit8.Location = new System.Drawing.Point(113, 131); + this.textEdit8.MenuManager = this.toolbarFormManager1; + this.textEdit8.Name = "textEdit8"; + this.textEdit8.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.textEdit8.Properties.Appearance.Options.UseFont = true; + this.textEdit8.Size = new System.Drawing.Size(130, 32); + this.textEdit8.TabIndex = 1039; + // + // labelControl9 + // + this.labelControl9.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl9.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl9.Appearance.Options.UseFont = true; + this.labelControl9.Appearance.Options.UseForeColor = true; + this.labelControl9.Location = new System.Drawing.Point(95, 373); + this.labelControl9.Name = "labelControl9"; + this.labelControl9.Size = new System.Drawing.Size(57, 25); + this.labelControl9.TabIndex = 1038; + this.labelControl9.Text = "썸네일"; + // + // pictureBox1 + // + this.defaultToolTipController1.SetAllowHtmlText(this.pictureBox1, DevExpress.Utils.DefaultBoolean.Default); + this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox1.Image = global::SSG_Automation_Solution.Properties.Resources.no_image_icon_23494; + this.pictureBox1.Location = new System.Drawing.Point(162, 373); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(336, 250); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox1.TabIndex = 1037; + this.pictureBox1.TabStop = false; + // + // labelControl37 + // + this.labelControl37.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl37.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl37.Appearance.Options.UseFont = true; + this.labelControl37.Appearance.Options.UseForeColor = true; + this.labelControl37.Location = new System.Drawing.Point(10, 172); + this.labelControl37.Name = "labelControl37"; + this.labelControl37.Size = new System.Drawing.Size(95, 25); + this.labelControl37.TabIndex = 373; + this.labelControl37.Text = "송출레이어"; + // + // cmbSceneSchedule + // + this.cmbSceneSchedule.Location = new System.Drawing.Point(162, 335); + this.cmbSceneSchedule.MenuManager = this.toolbarFormManager1; + this.cmbSceneSchedule.Name = "cmbSceneSchedule"; + this.cmbSceneSchedule.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.cmbSceneSchedule.Properties.Appearance.Options.UseFont = true; + this.cmbSceneSchedule.Properties.AppearanceDropDown.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.cmbSceneSchedule.Properties.AppearanceDropDown.Options.UseFont = true; + this.cmbSceneSchedule.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.cmbSceneSchedule.Size = new System.Drawing.Size(336, 32); + this.cmbSceneSchedule.TabIndex = 377; + this.cmbSceneSchedule.SelectedIndexChanged += new System.EventHandler(this.cmbSceneSchedule_SelectedIndexChanged); + // + // labelControl3 + // + this.labelControl3.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl3.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl3.Appearance.Options.UseFont = true; + this.labelControl3.Appearance.Options.UseForeColor = true; + this.labelControl3.Location = new System.Drawing.Point(278, 172); + this.labelControl3.Name = "labelControl3"; + this.labelControl3.Size = new System.Drawing.Size(83, 25); + this.labelControl3.TabIndex = 365; + this.labelControl3.Text = "송출 시작"; + // + // simpleButton3 + // + this.simpleButton3.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.simpleButton3.Appearance.Options.UseFont = true; + this.simpleButton3.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("simpleButton3.ImageOptions.SvgImage"))); + this.simpleButton3.Location = new System.Drawing.Point(149, 801); + this.simpleButton3.Name = "simpleButton3"; + this.simpleButton3.Size = new System.Drawing.Size(349, 63); + this.simpleButton3.TabIndex = 1050; + this.simpleButton3.Text = "송출 추가"; + this.simpleButton3.Click += new System.EventHandler(this.simpleButton3_Click); + // + // cmbScheduleSelectedLayer + // + this.cmbScheduleSelectedLayer.EditValue = "0"; + this.cmbScheduleSelectedLayer.Location = new System.Drawing.Point(113, 169); + this.cmbScheduleSelectedLayer.MenuManager = this.toolbarFormManager1; + this.cmbScheduleSelectedLayer.Name = "cmbScheduleSelectedLayer"; + this.cmbScheduleSelectedLayer.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.cmbScheduleSelectedLayer.Properties.Appearance.Options.UseFont = true; + this.cmbScheduleSelectedLayer.Properties.AppearanceDropDown.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.cmbScheduleSelectedLayer.Properties.AppearanceDropDown.Options.UseFont = true; + this.cmbScheduleSelectedLayer.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.cmbScheduleSelectedLayer.Properties.Items.AddRange(new object[] { + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15"}); + this.cmbScheduleSelectedLayer.Size = new System.Drawing.Size(130, 32); + this.cmbScheduleSelectedLayer.TabIndex = 372; + // + // simpleButton8 + // + this.simpleButton8.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.simpleButton8.Appearance.Options.UseFont = true; + this.simpleButton8.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("simpleButton8.ImageOptions.SvgImage"))); + this.simpleButton8.Location = new System.Drawing.Point(15, 629); + this.simpleButton8.Name = "simpleButton8"; + this.simpleButton8.Size = new System.Drawing.Size(92, 71); + this.simpleButton8.TabIndex = 1073; + this.simpleButton8.Text = "변수\r\n수정"; + this.simpleButton8.Visible = false; + this.simpleButton8.Click += new System.EventHandler(this.simpleButton8_Click); + // + // richTextBox1 + // + this.defaultToolTipController1.SetAllowHtmlText(this.richTextBox1, DevExpress.Utils.DefaultBoolean.Default); + this.richTextBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(35)))), ((int)(((byte)(35)))), ((int)(((byte)(35))))); + this.richTextBox1.Font = new System.Drawing.Font("맑은 고딕", 11F, System.Drawing.FontStyle.Bold); + this.richTextBox1.ForeColor = System.Drawing.SystemColors.Window; + this.richTextBox1.Location = new System.Drawing.Point(14, 56); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(498, 736); + this.richTextBox1.TabIndex = 566; + this.richTextBox1.Text = ""; + // + // customersNavigationPage + // + this.defaultToolTipController1.SetAllowHtmlText(this.customersNavigationPage, DevExpress.Utils.DefaultBoolean.Default); + this.customersNavigationPage.Controls.Add(this.xtraTabControl1); + this.customersNavigationPage.Controls.Add(this.customersLabelControl); + this.customersNavigationPage.Name = "customersNavigationPage"; + this.customersNavigationPage.Size = new System.Drawing.Size(1918, 917); + // + // xtraTabControl1 + // + this.xtraTabControl1.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.xtraTabControl1.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.xtraTabControl1.Appearance.Options.UseBackColor = true; + this.xtraTabControl1.Appearance.Options.UseFont = true; + this.xtraTabControl1.AppearancePage.Header.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.xtraTabControl1.AppearancePage.Header.ForeColor = System.Drawing.Color.DarkGray; + this.xtraTabControl1.AppearancePage.Header.Options.UseFont = true; + this.xtraTabControl1.AppearancePage.Header.Options.UseForeColor = true; + this.xtraTabControl1.AppearancePage.HeaderActive.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.xtraTabControl1.AppearancePage.HeaderActive.ForeColor = System.Drawing.Color.WhiteSmoke; + this.xtraTabControl1.AppearancePage.HeaderActive.Options.UseFont = true; + this.xtraTabControl1.AppearancePage.HeaderActive.Options.UseForeColor = true; + this.xtraTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.xtraTabControl1.Location = new System.Drawing.Point(0, 0); + this.xtraTabControl1.Name = "xtraTabControl1"; + this.xtraTabControl1.SelectedTabPage = this.xtraTabPage1; + this.xtraTabControl1.Size = new System.Drawing.Size(1918, 917); + this.xtraTabControl1.TabIndex = 873; + this.xtraTabControl1.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] { + this.xtraTabPage1}); + // + // xtraTabPage1 + // + this.xtraTabPage1.Controls.Add(this.groupControl1); + this.xtraTabPage1.Name = "xtraTabPage1"; + this.xtraTabPage1.Size = new System.Drawing.Size(1916, 884); + this.xtraTabPage1.Text = "디자인 추가"; + // + // groupControl1 + // + this.groupControl1.AppearanceCaption.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.groupControl1.AppearanceCaption.Options.UseFont = true; + this.groupControl1.Controls.Add(this.btnSceneRemoveAll); + this.groupControl1.Controls.Add(this.txtThumbnailFrame); + this.groupControl1.Controls.Add(this.labelControl15); + this.groupControl1.Controls.Add(this.btnThumbnailSceneListRefresh); + this.groupControl1.Controls.Add(this.simpleButton4); + this.groupControl1.Controls.Add(this.txtGroupAliasName); + this.groupControl1.Controls.Add(this.labelControl36); + this.groupControl1.Controls.Add(this.labelControl16); + this.groupControl1.Controls.Add(this.comboBoxEdit1); + this.groupControl1.Controls.Add(this.labelControl24); + this.groupControl1.Controls.Add(this.cmbSceneListGroup); + this.groupControl1.Controls.Add(this.labelControl29); + this.groupControl1.Controls.Add(this.btnVariableListDel); + this.groupControl1.Controls.Add(this.btnVariableListAdd); + this.groupControl1.Controls.Add(this.txtVariableListText); + this.groupControl1.Controls.Add(this.labelControl44); + this.groupControl1.Controls.Add(this.txtVariableListTag); + this.groupControl1.Controls.Add(this.labelControl43); + this.groupControl1.Controls.Add(this.listBoxControl2); + this.groupControl1.Controls.Add(this.labelControl42); + this.groupControl1.Controls.Add(this.btnSceneAdd); + this.groupControl1.Controls.Add(this.labelControl41); + this.groupControl1.Controls.Add(this.txtSceneListTime); + this.groupControl1.Controls.Add(this.labelControl10); + this.groupControl1.Controls.Add(this.txtSceneListPath); + this.groupControl1.Controls.Add(this.labelControl4); + this.groupControl1.Controls.Add(this.labelControl12); + this.groupControl1.Controls.Add(this.btnSceneRemove); + this.groupControl1.Controls.Add(this.txtSceneListName); + this.groupControl1.Controls.Add(this.btnSceneLoad); + this.groupControl1.Controls.Add(this.labelControl14); + this.groupControl1.Controls.Add(this.pictureBoxThumbnailSceneList); + this.groupControl1.Controls.Add(this.listBoxControl1); + this.groupControl1.Controls.Add(this.cmbSceneListLayer); + this.groupControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupControl1.Location = new System.Drawing.Point(0, 0); + this.groupControl1.Margin = new System.Windows.Forms.Padding(2); + this.groupControl1.Name = "groupControl1"; + this.groupControl1.Size = new System.Drawing.Size(1916, 884); + this.groupControl1.TabIndex = 872; + this.groupControl1.Text = "디자인 추가"; + this.groupControl1.ToolTipController = this.defaultToolTipController1.DefaultController; + // + // btnSceneRemoveAll + // + this.btnSceneRemoveAll.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnSceneRemoveAll.Appearance.Options.UseFont = true; + this.btnSceneRemoveAll.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnSceneRemoveAll.ImageOptions.SvgImage"))); + this.btnSceneRemoveAll.Location = new System.Drawing.Point(307, 718); + this.btnSceneRemoveAll.Name = "btnSceneRemoveAll"; + this.btnSceneRemoveAll.Size = new System.Drawing.Size(238, 118); + this.btnSceneRemoveAll.TabIndex = 1116; + this.btnSceneRemoveAll.Text = "Remove All"; + this.btnSceneRemoveAll.Click += new System.EventHandler(this.btnSceneRemove_Click); + // + // txtThumbnailFrame + // + this.txtThumbnailFrame.EditValue = "60"; + this.txtThumbnailFrame.Location = new System.Drawing.Point(1035, 122); + this.txtThumbnailFrame.MenuManager = this.toolbarFormManager1; + this.txtThumbnailFrame.Name = "txtThumbnailFrame"; + this.txtThumbnailFrame.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.txtThumbnailFrame.Properties.Appearance.Options.UseFont = true; + this.txtThumbnailFrame.Size = new System.Drawing.Size(107, 32); + this.txtThumbnailFrame.TabIndex = 1115; + // + // labelControl15 + // + this.labelControl15.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl15.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl15.Appearance.Options.UseFont = true; + this.labelControl15.Appearance.Options.UseForeColor = true; + this.labelControl15.Location = new System.Drawing.Point(927, 125); + this.labelControl15.Name = "labelControl15"; + this.labelControl15.Size = new System.Drawing.Size(102, 25); + this.labelControl15.TabIndex = 1114; + this.labelControl15.Text = "저장 프레임"; + // + // btnThumbnailSceneListRefresh + // + this.btnThumbnailSceneListRefresh.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnThumbnailSceneListRefresh.Appearance.Options.UseFont = true; + this.btnThumbnailSceneListRefresh.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnThumbnailSceneListRefresh.ImageOptions.SvgImage"))); + this.btnThumbnailSceneListRefresh.Location = new System.Drawing.Point(955, 165); + this.btnThumbnailSceneListRefresh.Name = "btnThumbnailSceneListRefresh"; + this.btnThumbnailSceneListRefresh.Size = new System.Drawing.Size(187, 46); + this.btnThumbnailSceneListRefresh.TabIndex = 1113; + this.btnThumbnailSceneListRefresh.Text = "무응답 정상화"; + this.btnThumbnailSceneListRefresh.Click += new System.EventHandler(this.btnThumbnailSceneListRefresh_Click); + // + // simpleButton4 + // + this.simpleButton4.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.simpleButton4.Appearance.Options.UseFont = true; + this.simpleButton4.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("simpleButton4.ImageOptions.SvgImage"))); + this.simpleButton4.Location = new System.Drawing.Point(756, 30); + this.simpleButton4.Name = "simpleButton4"; + this.simpleButton4.Size = new System.Drawing.Size(120, 46); + this.simpleButton4.TabIndex = 1112; + this.simpleButton4.Text = "별칭 변경"; + this.simpleButton4.Click += new System.EventHandler(this.simpleButton4_Click); + // + // txtGroupAliasName + // + this.txtGroupAliasName.Location = new System.Drawing.Point(497, 37); + this.txtGroupAliasName.MenuManager = this.toolbarFormManager1; + this.txtGroupAliasName.Name = "txtGroupAliasName"; + this.txtGroupAliasName.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.txtGroupAliasName.Properties.Appearance.Options.UseFont = true; + this.txtGroupAliasName.Size = new System.Drawing.Size(243, 32); + this.txtGroupAliasName.TabIndex = 1111; + // + // labelControl36 + // + this.labelControl36.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl36.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.labelControl36.Appearance.Options.UseFont = true; + this.labelControl36.Appearance.Options.UseForeColor = true; + this.labelControl36.Location = new System.Drawing.Point(370, 40); + this.labelControl36.Name = "labelControl36"; + this.labelControl36.Size = new System.Drawing.Size(121, 25); + this.labelControl36.TabIndex = 1110; + this.labelControl36.Text = "Group명 별칭"; + // + // labelControl16 + // + this.labelControl16.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl16.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl16.Appearance.Options.UseFont = true; + this.labelControl16.Appearance.Options.UseForeColor = true; + this.labelControl16.Location = new System.Drawing.Point(1176, 307); + this.labelControl16.Name = "labelControl16"; + this.labelControl16.Size = new System.Drawing.Size(64, 25); + this.labelControl16.TabIndex = 1109; + this.labelControl16.Text = "송출CG"; + this.labelControl16.Visible = false; + // + // comboBoxEdit1 + // + this.comboBoxEdit1.EditValue = "CG1"; + this.comboBoxEdit1.Location = new System.Drawing.Point(1279, 300); + this.comboBoxEdit1.MenuManager = this.toolbarFormManager1; + this.comboBoxEdit1.Name = "comboBoxEdit1"; + this.comboBoxEdit1.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.comboBoxEdit1.Properties.Appearance.Options.UseFont = true; + this.comboBoxEdit1.Properties.AppearanceDropDown.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.comboBoxEdit1.Properties.AppearanceDropDown.Options.UseFont = true; + this.comboBoxEdit1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.comboBoxEdit1.Properties.Items.AddRange(new object[] { + "CG1", + "CG2", + "CG3", + "CG4", + "CG5"}); + this.comboBoxEdit1.Size = new System.Drawing.Size(130, 32); + this.comboBoxEdit1.TabIndex = 1108; + this.comboBoxEdit1.Visible = false; + // + // labelControl24 + // + this.labelControl24.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl24.Appearance.ForeColor = System.Drawing.Color.White; + this.labelControl24.Appearance.Options.UseFont = true; + this.labelControl24.Appearance.Options.UseForeColor = true; + this.labelControl24.Location = new System.Drawing.Point(41, 40); + this.labelControl24.Name = "labelControl24"; + this.labelControl24.Size = new System.Drawing.Size(161, 25); + this.labelControl24.TabIndex = 1056; + this.labelControl24.Text = "Scene Group 선택"; + // + // cmbSceneListGroup + // + this.cmbSceneListGroup.EditValue = "Group1"; + this.cmbSceneListGroup.Location = new System.Drawing.Point(208, 37); + this.cmbSceneListGroup.MenuManager = this.toolbarFormManager1; + this.cmbSceneListGroup.Name = "cmbSceneListGroup"; + this.cmbSceneListGroup.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.cmbSceneListGroup.Properties.Appearance.Options.UseFont = true; + this.cmbSceneListGroup.Properties.AppearanceDropDown.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.cmbSceneListGroup.Properties.AppearanceDropDown.Options.UseFont = true; + this.cmbSceneListGroup.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.cmbSceneListGroup.Properties.Items.AddRange(new object[] { + "Group1", + "Group2", + "Group3", + "Group4", + "Group5", + "Group6", + "Group7", + "Group8", + "Group9", + "Group10", + "Group11", + "Group12", + "Group13", + "Group14", + "Group15"}); + this.cmbSceneListGroup.Size = new System.Drawing.Size(130, 32); + this.cmbSceneListGroup.TabIndex = 1055; + this.cmbSceneListGroup.SelectedIndexChanged += new System.EventHandler(this.cmbSceneListGroup_SelectedIndexChanged); + // + // labelControl29 + // + this.labelControl29.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl29.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl29.Appearance.Options.UseFont = true; + this.labelControl29.Appearance.Options.UseForeColor = true; + this.labelControl29.Location = new System.Drawing.Point(1176, 341); + this.labelControl29.Name = "labelControl29"; + this.labelControl29.Size = new System.Drawing.Size(95, 25); + this.labelControl29.TabIndex = 1054; + this.labelControl29.Text = "송출레이어"; + this.labelControl29.Visible = false; + // + // btnVariableListDel + // + this.btnVariableListDel.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnVariableListDel.Appearance.Options.UseFont = true; + this.btnVariableListDel.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnVariableListDel.ImageOptions.SvgImage"))); + this.btnVariableListDel.Location = new System.Drawing.Point(1740, 642); + this.btnVariableListDel.Name = "btnVariableListDel"; + this.btnVariableListDel.Size = new System.Drawing.Size(117, 55); + this.btnVariableListDel.TabIndex = 1045; + this.btnVariableListDel.Text = "변수삭제"; + this.btnVariableListDel.Click += new System.EventHandler(this.btnVariableListDel_Click); + // + // btnVariableListAdd + // + this.btnVariableListAdd.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnVariableListAdd.Appearance.Options.UseFont = true; + this.btnVariableListAdd.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnVariableListAdd.ImageOptions.SvgImage"))); + this.btnVariableListAdd.Location = new System.Drawing.Point(1603, 642); + this.btnVariableListAdd.Name = "btnVariableListAdd"; + this.btnVariableListAdd.Size = new System.Drawing.Size(117, 55); + this.btnVariableListAdd.TabIndex = 1044; + this.btnVariableListAdd.Text = "변수추가"; + this.btnVariableListAdd.Click += new System.EventHandler(this.btnVariableListAdd_Click); + // + // txtVariableListText + // + this.txtVariableListText.Location = new System.Drawing.Point(1673, 596); + this.txtVariableListText.MenuManager = this.toolbarFormManager1; + this.txtVariableListText.Name = "txtVariableListText"; + this.txtVariableListText.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.txtVariableListText.Properties.Appearance.Options.UseFont = true; + this.txtVariableListText.Size = new System.Drawing.Size(184, 32); + this.txtVariableListText.TabIndex = 1043; + // + // labelControl44 + // + this.labelControl44.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl44.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl44.Appearance.Options.UseFont = true; + this.labelControl44.Appearance.Options.UseForeColor = true; + this.labelControl44.Location = new System.Drawing.Point(1603, 599); + this.labelControl44.Name = "labelControl44"; + this.labelControl44.Size = new System.Drawing.Size(57, 25); + this.labelControl44.TabIndex = 1042; + this.labelControl44.Text = "텍스트"; + // + // txtVariableListTag + // + this.txtVariableListTag.Location = new System.Drawing.Point(1673, 545); + this.txtVariableListTag.MenuManager = this.toolbarFormManager1; + this.txtVariableListTag.Name = "txtVariableListTag"; + this.txtVariableListTag.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.txtVariableListTag.Properties.Appearance.Options.UseFont = true; + this.txtVariableListTag.Size = new System.Drawing.Size(184, 32); + this.txtVariableListTag.TabIndex = 1041; + // + // labelControl43 + // + this.labelControl43.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl43.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl43.Appearance.Options.UseFont = true; + this.labelControl43.Appearance.Options.UseForeColor = true; + this.labelControl43.Location = new System.Drawing.Point(1603, 548); + this.labelControl43.Name = "labelControl43"; + this.labelControl43.Size = new System.Drawing.Size(57, 25); + this.labelControl43.TabIndex = 1040; + this.labelControl43.Text = "변수명"; + // + // listBoxControl2 + // + this.listBoxControl2.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.listBoxControl2.Appearance.Options.UseFont = true; + this.listBoxControl2.Location = new System.Drawing.Point(1603, 301); + this.listBoxControl2.Name = "listBoxControl2"; + this.listBoxControl2.Size = new System.Drawing.Size(254, 235); + this.listBoxControl2.TabIndex = 1039; + this.listBoxControl2.SelectedIndexChanged += new System.EventHandler(this.listBoxControl2_SelectedIndexChanged); + // + // labelControl42 + // + this.labelControl42.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl42.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl42.Appearance.Options.UseFont = true; + this.labelControl42.Appearance.Options.UseForeColor = true; + this.labelControl42.Location = new System.Drawing.Point(1603, 270); + this.labelControl42.Name = "labelControl42"; + this.labelControl42.Size = new System.Drawing.Size(121, 25); + this.labelControl42.TabIndex = 1038; + this.labelControl42.Text = "변수명 리스트"; + // + // btnSceneAdd + // + this.btnSceneAdd.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnSceneAdd.Appearance.Options.UseFont = true; + this.btnSceneAdd.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnSceneAdd.ImageOptions.SvgImage"))); + this.btnSceneAdd.Location = new System.Drawing.Point(1183, 579); + this.btnSceneAdd.Name = "btnSceneAdd"; + this.btnSceneAdd.Size = new System.Drawing.Size(238, 118); + this.btnSceneAdd.TabIndex = 1037; + this.btnSceneAdd.Text = "Scene Add"; + this.btnSceneAdd.Click += new System.EventHandler(this.btnSceneAdd_Click); + // + // labelControl41 + // + this.labelControl41.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl41.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl41.Appearance.Options.UseFont = true; + this.labelControl41.Appearance.Options.UseForeColor = true; + this.labelControl41.Location = new System.Drawing.Point(502, 186); + this.labelControl41.Name = "labelControl41"; + this.labelControl41.Size = new System.Drawing.Size(57, 25); + this.labelControl41.TabIndex = 1036; + this.labelControl41.Text = "썸네일"; + // + // txtSceneListTime + // + this.txtSceneListTime.Enabled = false; + this.txtSceneListTime.Location = new System.Drawing.Point(1239, 212); + this.txtSceneListTime.MenuManager = this.toolbarFormManager1; + this.txtSceneListTime.Name = "txtSceneListTime"; + this.txtSceneListTime.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 11F, System.Drawing.FontStyle.Bold); + this.txtSceneListTime.Properties.Appearance.Options.UseFont = true; + this.txtSceneListTime.Size = new System.Drawing.Size(317, 26); + this.txtSceneListTime.TabIndex = 1034; + // + // labelControl10 + // + this.labelControl10.Appearance.Font = new System.Drawing.Font("맑은 고딕", 11F, System.Drawing.FontStyle.Bold); + this.labelControl10.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl10.Appearance.Options.UseFont = true; + this.labelControl10.Appearance.Options.UseForeColor = true; + this.labelControl10.Location = new System.Drawing.Point(1173, 215); + this.labelControl10.Name = "labelControl10"; + this.labelControl10.Size = new System.Drawing.Size(60, 20); + this.labelControl10.TabIndex = 1033; + this.labelControl10.Text = "로드시점"; + // + // txtSceneListPath + // + this.txtSceneListPath.Enabled = false; + this.txtSceneListPath.Location = new System.Drawing.Point(1239, 177); + this.txtSceneListPath.MenuManager = this.toolbarFormManager1; + this.txtSceneListPath.Name = "txtSceneListPath"; + this.txtSceneListPath.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 11F, System.Drawing.FontStyle.Bold); + this.txtSceneListPath.Properties.Appearance.Options.UseFont = true; + this.txtSceneListPath.Size = new System.Drawing.Size(618, 26); + this.txtSceneListPath.TabIndex = 1032; + // + // labelControl4 + // + this.labelControl4.Appearance.Font = new System.Drawing.Font("맑은 고딕", 11F, System.Drawing.FontStyle.Bold); + this.labelControl4.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl4.Appearance.Options.UseFont = true; + this.labelControl4.Appearance.Options.UseForeColor = true; + this.labelControl4.Location = new System.Drawing.Point(1183, 180); + this.labelControl4.Name = "labelControl4"; + this.labelControl4.Size = new System.Drawing.Size(50, 20); + this.labelControl4.TabIndex = 1031; + this.labelControl4.Text = "씬 경로"; + // + // labelControl12 + // + this.labelControl12.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl12.Appearance.ForeColor = System.Drawing.Color.White; + this.labelControl12.Appearance.Options.UseFont = true; + this.labelControl12.Appearance.Options.UseForeColor = true; + this.labelControl12.Location = new System.Drawing.Point(41, 79); + this.labelControl12.Name = "labelControl12"; + this.labelControl12.Size = new System.Drawing.Size(116, 25); + this.labelControl12.TabIndex = 1014; + this.labelControl12.Text = "Scene 리스트"; + // + // btnSceneRemove + // + this.btnSceneRemove.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnSceneRemove.Appearance.Options.UseFont = true; + this.btnSceneRemove.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnSceneRemove.ImageOptions.SvgImage"))); + this.btnSceneRemove.Location = new System.Drawing.Point(41, 718); + this.btnSceneRemove.Name = "btnSceneRemove"; + this.btnSceneRemove.Size = new System.Drawing.Size(238, 118); + this.btnSceneRemove.TabIndex = 1008; + this.btnSceneRemove.Text = "Remove Selected"; + this.btnSceneRemove.Click += new System.EventHandler(this.btnSceneRemove_Click); + // + // txtSceneListName + // + this.txtSceneListName.Location = new System.Drawing.Point(1239, 122); + this.txtSceneListName.MenuManager = this.toolbarFormManager1; + this.txtSceneListName.Name = "txtSceneListName"; + this.txtSceneListName.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.txtSceneListName.Properties.Appearance.Options.UseFont = true; + this.txtSceneListName.Size = new System.Drawing.Size(618, 32); + this.txtSceneListName.TabIndex = 1007; + // + // btnSceneLoad + // + this.btnSceneLoad.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnSceneLoad.Appearance.Options.UseFont = true; + this.btnSceneLoad.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnSceneLoad.ImageOptions.SvgImage"))); + this.btnSceneLoad.Location = new System.Drawing.Point(502, 110); + this.btnSceneLoad.Name = "btnSceneLoad"; + this.btnSceneLoad.Size = new System.Drawing.Size(238, 55); + this.btnSceneLoad.TabIndex = 1004; + this.btnSceneLoad.Text = "T2S Load and Add"; + this.btnSceneLoad.Click += new System.EventHandler(this.btnSceneLoad_Click); + // + // labelControl14 + // + this.labelControl14.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl14.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl14.Appearance.Options.UseFont = true; + this.labelControl14.Appearance.Options.UseForeColor = true; + this.labelControl14.Location = new System.Drawing.Point(1169, 125); + this.labelControl14.Name = "labelControl14"; + this.labelControl14.Size = new System.Drawing.Size(64, 25); + this.labelControl14.TabIndex = 676; + this.labelControl14.Text = "씬 이름"; + // + // pictureBoxThumbnailSceneList + // + this.defaultToolTipController1.SetAllowHtmlText(this.pictureBoxThumbnailSceneList, DevExpress.Utils.DefaultBoolean.Default); + this.pictureBoxThumbnailSceneList.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBoxThumbnailSceneList.Image = global::SSG_Automation_Solution.Properties.Resources.no_image_icon_23494; + this.pictureBoxThumbnailSceneList.Location = new System.Drawing.Point(502, 217); + this.pictureBoxThumbnailSceneList.Name = "pictureBoxThumbnailSceneList"; + this.pictureBoxThumbnailSceneList.Size = new System.Drawing.Size(640, 480); + this.pictureBoxThumbnailSceneList.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBoxThumbnailSceneList.TabIndex = 1035; + this.pictureBoxThumbnailSceneList.TabStop = false; + // + // listBoxControl1 + // + this.listBoxControl1.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.listBoxControl1.Appearance.Options.UseFont = true; + this.listBoxControl1.Location = new System.Drawing.Point(41, 110); + this.listBoxControl1.Name = "listBoxControl1"; + this.listBoxControl1.Size = new System.Drawing.Size(450, 587); + this.listBoxControl1.TabIndex = 1047; + this.listBoxControl1.SelectedIndexChanged += new System.EventHandler(this.listBoxControl1_SelectedIndexChanged); + // + // cmbSceneListLayer + // + this.cmbSceneListLayer.EditValue = "0"; + this.cmbSceneListLayer.Location = new System.Drawing.Point(1279, 338); + this.cmbSceneListLayer.MenuManager = this.toolbarFormManager1; + this.cmbSceneListLayer.Name = "cmbSceneListLayer"; + this.cmbSceneListLayer.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.cmbSceneListLayer.Properties.Appearance.Options.UseFont = true; + this.cmbSceneListLayer.Properties.AppearanceDropDown.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.cmbSceneListLayer.Properties.AppearanceDropDown.Options.UseFont = true; + this.cmbSceneListLayer.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.cmbSceneListLayer.Properties.Items.AddRange(new object[] { + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15"}); + this.cmbSceneListLayer.Size = new System.Drawing.Size(130, 32); + this.cmbSceneListLayer.TabIndex = 1053; + this.cmbSceneListLayer.Visible = false; + // + // customersLabelControl + // + this.customersLabelControl.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70))))); + this.customersLabelControl.Appearance.Font = new System.Drawing.Font("Tahoma", 25.25F); + this.customersLabelControl.Appearance.ForeColor = System.Drawing.Color.Gray; + this.customersLabelControl.Appearance.Options.UseBackColor = true; + this.customersLabelControl.Appearance.Options.UseFont = true; + this.customersLabelControl.Appearance.Options.UseForeColor = true; + this.customersLabelControl.Appearance.Options.UseTextOptions = true; + this.customersLabelControl.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.customersLabelControl.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.customersLabelControl.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.customersLabelControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.customersLabelControl.Location = new System.Drawing.Point(0, 0); + this.customersLabelControl.Name = "customersLabelControl"; + this.customersLabelControl.Size = new System.Drawing.Size(1918, 917); + this.customersLabelControl.TabIndex = 2; + this.customersLabelControl.Text = "Customers"; + // + // navigationPage2 + // + this.defaultToolTipController1.SetAllowHtmlText(this.navigationPage2, DevExpress.Utils.DefaultBoolean.Default); + this.navigationPage2.Controls.Add(this.groupControl2); + this.navigationPage2.Controls.Add(this.groupControl13); + this.navigationPage2.Controls.Add(this.groupControl6); + this.navigationPage2.Name = "navigationPage2"; + this.navigationPage2.Size = new System.Drawing.Size(1918, 917); + // + // groupControl2 + // + this.groupControl2.AppearanceCaption.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.groupControl2.AppearanceCaption.Options.UseFont = true; + this.groupControl2.Controls.Add(this.txtLog); + this.groupControl2.Dock = System.Windows.Forms.DockStyle.Top; + this.groupControl2.Location = new System.Drawing.Point(0, 610); + this.groupControl2.Margin = new System.Windows.Forms.Padding(2); + this.groupControl2.Name = "groupControl2"; + this.groupControl2.Size = new System.Drawing.Size(1918, 314); + this.groupControl2.TabIndex = 3055; + this.groupControl2.Text = "Log"; + this.groupControl2.ToolTipController = this.defaultToolTipController1.DefaultController; + // + // txtLog + // + this.defaultToolTipController1.SetAllowHtmlText(this.txtLog, DevExpress.Utils.DefaultBoolean.Default); + this.txtLog.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(35)))), ((int)(((byte)(35)))), ((int)(((byte)(35))))); + this.txtLog.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtLog.Location = new System.Drawing.Point(2, 23); + this.txtLog.Name = "txtLog"; + this.txtLog.Size = new System.Drawing.Size(1914, 289); + this.txtLog.TabIndex = 1; + this.txtLog.Text = ""; + // + // groupControl13 + // + this.groupControl13.AppearanceCaption.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.groupControl13.AppearanceCaption.Options.UseFont = true; + this.groupControl13.Controls.Add(this.lbl송출무시금지글자색); + this.groupControl13.Controls.Add(this.lbl송출무시금지배경색); + this.groupControl13.Controls.Add(this.label15); + this.groupControl13.Controls.Add(this.label14); + this.groupControl13.Controls.Add(this.comboBoxEdit2); + this.groupControl13.Controls.Add(this.lbl선택라인상태글자색); + this.groupControl13.Controls.Add(this.lbl선택라인상태배경색); + this.groupControl13.Controls.Add(this.label13); + this.groupControl13.Controls.Add(this.lbl선택라인종류글자색); + this.groupControl13.Controls.Add(this.lbl선택라인종류배경색); + this.groupControl13.Controls.Add(this.label12); + this.groupControl13.Controls.Add(this.lbl종류송출글자색); + this.groupControl13.Controls.Add(this.lbl종류송출배경색); + this.groupControl13.Controls.Add(this.label10); + this.groupControl13.Controls.Add(this.lbl종류스케쥴글자색); + this.groupControl13.Controls.Add(this.lbl종류스케쥴배경색); + this.groupControl13.Controls.Add(this.label11); + this.groupControl13.Controls.Add(this.lblNEXT송출글자색); + this.groupControl13.Controls.Add(this.lblNEXT송출배경색); + this.groupControl13.Controls.Add(this.label9); + this.groupControl13.Controls.Add(this.lbl완료상태글자색); + this.groupControl13.Controls.Add(this.lbl완료상태배경색); + this.groupControl13.Controls.Add(this.label8); + this.groupControl13.Controls.Add(this.lbl완료송출글자색); + this.groupControl13.Controls.Add(this.lbl완료송출배경색); + this.groupControl13.Controls.Add(this.label7); + this.groupControl13.Controls.Add(this.lblNEXT상태글자색); + this.groupControl13.Controls.Add(this.lblNEXT상태배경색); + this.groupControl13.Controls.Add(this.lblNEXT스케쥴글자색); + this.groupControl13.Controls.Add(this.lblNEXT스케쥴배경색); + this.groupControl13.Controls.Add(this.label5); + this.groupControl13.Controls.Add(this.label6); + this.groupControl13.Controls.Add(this.lbl선택라인글자색); + this.groupControl13.Controls.Add(this.lbl선택라인배경색); + this.groupControl13.Controls.Add(this.lblOnAir상태글자색); + this.groupControl13.Controls.Add(this.lblOnAir상태배경색); + this.groupControl13.Controls.Add(this.lblOnAir송출글자색); + this.groupControl13.Controls.Add(this.lblOnAir송출배경색); + this.groupControl13.Controls.Add(this.lblOnAir스케쥴글자색); + this.groupControl13.Controls.Add(this.lblOnAir스케쥴배경색); + this.groupControl13.Controls.Add(this.lbl완료스케쥴글자색); + this.groupControl13.Controls.Add(this.lbl완료스케쥴배경색); + this.groupControl13.Controls.Add(this.label4); + this.groupControl13.Controls.Add(this.label2); + this.groupControl13.Controls.Add(this.label1); + this.groupControl13.Controls.Add(this.label3); + this.groupControl13.Controls.Add(this.labelControl92); + this.groupControl13.Controls.Add(this.label69); + this.groupControl13.Controls.Add(this.label73); + this.groupControl13.Controls.Add(this.label61); + this.groupControl13.Dock = System.Windows.Forms.DockStyle.Top; + this.groupControl13.Location = new System.Drawing.Point(0, 316); + this.groupControl13.Margin = new System.Windows.Forms.Padding(2); + this.groupControl13.Name = "groupControl13"; + this.groupControl13.Size = new System.Drawing.Size(1918, 294); + this.groupControl13.TabIndex = 3054; + this.groupControl13.Text = "스케쥴 설정"; + this.groupControl13.ToolTipController = this.defaultToolTipController1.DefaultController; + // + // lbl송출무시금지글자색 + // + this.lbl송출무시금지글자색.Appearance.BackColor = System.Drawing.Color.White; + this.lbl송출무시금지글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl송출무시금지글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl송출무시금지글자색.Appearance.Options.UseBackColor = true; + this.lbl송출무시금지글자색.Appearance.Options.UseFont = true; + this.lbl송출무시금지글자색.Appearance.Options.UseForeColor = true; + this.lbl송출무시금지글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl송출무시금지글자색.Location = new System.Drawing.Point(296, 191); + this.lbl송출무시금지글자색.Margin = new System.Windows.Forms.Padding(2); + this.lbl송출무시금지글자색.Name = "lbl송출무시금지글자색"; + this.lbl송출무시금지글자색.Size = new System.Drawing.Size(84, 25); + this.lbl송출무시금지글자색.TabIndex = 3097; + // + // lbl송출무시금지배경색 + // + this.lbl송출무시금지배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.lbl송출무시금지배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl송출무시금지배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl송출무시금지배경색.Appearance.Options.UseBackColor = true; + this.lbl송출무시금지배경색.Appearance.Options.UseFont = true; + this.lbl송출무시금지배경색.Appearance.Options.UseForeColor = true; + this.lbl송출무시금지배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl송출무시금지배경색.Location = new System.Drawing.Point(296, 138); + this.lbl송출무시금지배경색.Margin = new System.Windows.Forms.Padding(2); + this.lbl송출무시금지배경색.Name = "lbl송출무시금지배경색"; + this.lbl송출무시금지배경색.Size = new System.Drawing.Size(84, 25); + this.lbl송출무시금지배경색.TabIndex = 3096; + // + // label15 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label15, DevExpress.Utils.DefaultBoolean.Default); + this.label15.AutoSize = true; + this.label15.BackColor = System.Drawing.Color.Transparent; + this.label15.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label15.Location = new System.Drawing.Point(285, 97); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(104, 20); + this.label15.TabIndex = 3095; + this.label15.Text = "송출 금지무시"; + // + // label14 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label14, DevExpress.Utils.DefaultBoolean.Default); + this.label14.AutoSize = true; + this.label14.BackColor = System.Drawing.Color.Transparent; + this.label14.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label14.Location = new System.Drawing.Point(175, 225); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(84, 20); + this.label14.TabIndex = 3094; + this.label14.Text = "레이어번호"; + // + // comboBoxEdit2 + // + this.comboBoxEdit2.Location = new System.Drawing.Point(175, 248); + this.comboBoxEdit2.MenuManager = this.toolbarFormManager1; + this.comboBoxEdit2.Name = "comboBoxEdit2"; + this.comboBoxEdit2.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.comboBoxEdit2.Properties.Appearance.Options.UseFont = true; + this.comboBoxEdit2.Properties.AppearanceDropDown.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.comboBoxEdit2.Properties.AppearanceDropDown.Options.UseFont = true; + this.comboBoxEdit2.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.comboBoxEdit2.Properties.Items.AddRange(new object[] { + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15"}); + this.comboBoxEdit2.Size = new System.Drawing.Size(84, 32); + this.comboBoxEdit2.TabIndex = 3093; + this.comboBoxEdit2.SelectedIndexChanged += new System.EventHandler(this.comboBoxEdit2_SelectedIndexChanged); + // + // lbl선택라인상태글자색 + // + this.lbl선택라인상태글자색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lbl선택라인상태글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl선택라인상태글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl선택라인상태글자색.Appearance.Options.UseBackColor = true; + this.lbl선택라인상태글자색.Appearance.Options.UseFont = true; + this.lbl선택라인상태글자색.Appearance.Options.UseForeColor = true; + this.lbl선택라인상태글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl선택라인상태글자색.Location = new System.Drawing.Point(1700, 191); + this.lbl선택라인상태글자색.Margin = new System.Windows.Forms.Padding(2); + this.lbl선택라인상태글자색.Name = "lbl선택라인상태글자색"; + this.lbl선택라인상태글자색.Size = new System.Drawing.Size(84, 25); + this.lbl선택라인상태글자색.TabIndex = 3092; + this.lbl선택라인상태글자색.Visible = false; + // + // lbl선택라인상태배경색 + // + this.lbl선택라인상태배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lbl선택라인상태배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl선택라인상태배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl선택라인상태배경색.Appearance.Options.UseBackColor = true; + this.lbl선택라인상태배경색.Appearance.Options.UseFont = true; + this.lbl선택라인상태배경색.Appearance.Options.UseForeColor = true; + this.lbl선택라인상태배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl선택라인상태배경색.Location = new System.Drawing.Point(1700, 138); + this.lbl선택라인상태배경색.Margin = new System.Windows.Forms.Padding(2); + this.lbl선택라인상태배경색.Name = "lbl선택라인상태배경색"; + this.lbl선택라인상태배경색.Size = new System.Drawing.Size(84, 25); + this.lbl선택라인상태배경색.TabIndex = 3091; + this.lbl선택라인상태배경색.Visible = false; + // + // label13 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label13, DevExpress.Utils.DefaultBoolean.Default); + this.label13.AutoSize = true; + this.label13.BackColor = System.Drawing.Color.Transparent; + this.label13.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label13.Location = new System.Drawing.Point(1704, 97); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(74, 20); + this.label13.TabIndex = 3090; + this.label13.Text = "선택 상태"; + this.label13.Visible = false; + // + // lbl선택라인종류글자색 + // + this.lbl선택라인종류글자색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lbl선택라인종류글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl선택라인종류글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl선택라인종류글자색.Appearance.Options.UseBackColor = true; + this.lbl선택라인종류글자색.Appearance.Options.UseFont = true; + this.lbl선택라인종류글자색.Appearance.Options.UseForeColor = true; + this.lbl선택라인종류글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl선택라인종류글자색.Location = new System.Drawing.Point(1491, 191); + this.lbl선택라인종류글자색.Margin = new System.Windows.Forms.Padding(2); + this.lbl선택라인종류글자색.Name = "lbl선택라인종류글자색"; + this.lbl선택라인종류글자색.Size = new System.Drawing.Size(84, 25); + this.lbl선택라인종류글자색.TabIndex = 3089; + this.lbl선택라인종류글자색.Visible = false; + // + // lbl선택라인종류배경색 + // + this.lbl선택라인종류배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lbl선택라인종류배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl선택라인종류배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl선택라인종류배경색.Appearance.Options.UseBackColor = true; + this.lbl선택라인종류배경색.Appearance.Options.UseFont = true; + this.lbl선택라인종류배경색.Appearance.Options.UseForeColor = true; + this.lbl선택라인종류배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl선택라인종류배경색.Location = new System.Drawing.Point(1491, 138); + this.lbl선택라인종류배경색.Margin = new System.Windows.Forms.Padding(2); + this.lbl선택라인종류배경색.Name = "lbl선택라인종류배경색"; + this.lbl선택라인종류배경색.Size = new System.Drawing.Size(84, 25); + this.lbl선택라인종류배경색.TabIndex = 3088; + this.lbl선택라인종류배경색.Visible = false; + // + // label12 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label12, DevExpress.Utils.DefaultBoolean.Default); + this.label12.AutoSize = true; + this.label12.BackColor = System.Drawing.Color.Transparent; + this.label12.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label12.Location = new System.Drawing.Point(1495, 97); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(74, 20); + this.label12.TabIndex = 3087; + this.label12.Text = "선택 종류"; + this.label12.Visible = false; + // + // lbl종류송출글자색 + // + this.lbl종류송출글자색.Appearance.BackColor = System.Drawing.Color.White; + this.lbl종류송출글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl종류송출글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl종류송출글자색.Appearance.Options.UseBackColor = true; + this.lbl종류송출글자색.Appearance.Options.UseFont = true; + this.lbl종류송출글자색.Appearance.Options.UseForeColor = true; + this.lbl종류송출글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl종류송출글자색.Location = new System.Drawing.Point(519, 191); + this.lbl종류송출글자색.Margin = new System.Windows.Forms.Padding(2); + this.lbl종류송출글자색.Name = "lbl종류송출글자색"; + this.lbl종류송출글자색.Size = new System.Drawing.Size(84, 25); + this.lbl종류송출글자색.TabIndex = 3086; + // + // lbl종류송출배경색 + // + this.lbl종류송출배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.lbl종류송출배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl종류송출배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl종류송출배경색.Appearance.Options.UseBackColor = true; + this.lbl종류송출배경색.Appearance.Options.UseFont = true; + this.lbl종류송출배경색.Appearance.Options.UseForeColor = true; + this.lbl종류송출배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl종류송출배경색.Location = new System.Drawing.Point(519, 138); + this.lbl종류송출배경색.Margin = new System.Windows.Forms.Padding(2); + this.lbl종류송출배경색.Name = "lbl종류송출배경색"; + this.lbl종류송출배경색.Size = new System.Drawing.Size(84, 25); + this.lbl종류송출배경색.TabIndex = 3085; + // + // label10 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label10, DevExpress.Utils.DefaultBoolean.Default); + this.label10.AutoSize = true; + this.label10.BackColor = System.Drawing.Color.Transparent; + this.label10.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label10.Location = new System.Drawing.Point(529, 97); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(69, 20); + this.label10.TabIndex = 3084; + this.label10.Text = "종류송출"; + // + // lbl종류스케쥴글자색 + // + this.lbl종류스케쥴글자색.Appearance.BackColor = System.Drawing.Color.White; + this.lbl종류스케쥴글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl종류스케쥴글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl종류스케쥴글자색.Appearance.Options.UseBackColor = true; + this.lbl종류스케쥴글자색.Appearance.Options.UseFont = true; + this.lbl종류스케쥴글자색.Appearance.Options.UseForeColor = true; + this.lbl종류스케쥴글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl종류스케쥴글자색.Location = new System.Drawing.Point(413, 191); + this.lbl종류스케쥴글자색.Margin = new System.Windows.Forms.Padding(2); + this.lbl종류스케쥴글자색.Name = "lbl종류스케쥴글자색"; + this.lbl종류스케쥴글자색.Size = new System.Drawing.Size(84, 25); + this.lbl종류스케쥴글자색.TabIndex = 3083; + // + // lbl종류스케쥴배경색 + // + this.lbl종류스케쥴배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.lbl종류스케쥴배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl종류스케쥴배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl종류스케쥴배경색.Appearance.Options.UseBackColor = true; + this.lbl종류스케쥴배경색.Appearance.Options.UseFont = true; + this.lbl종류스케쥴배경색.Appearance.Options.UseForeColor = true; + this.lbl종류스케쥴배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl종류스케쥴배경색.Location = new System.Drawing.Point(413, 138); + this.lbl종류스케쥴배경색.Margin = new System.Windows.Forms.Padding(2); + this.lbl종류스케쥴배경색.Name = "lbl종류스케쥴배경색"; + this.lbl종류스케쥴배경색.Size = new System.Drawing.Size(84, 25); + this.lbl종류스케쥴배경색.TabIndex = 3082; + // + // label11 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label11, DevExpress.Utils.DefaultBoolean.Default); + this.label11.AutoSize = true; + this.label11.BackColor = System.Drawing.Color.Transparent; + this.label11.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label11.Location = new System.Drawing.Point(413, 97); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(84, 20); + this.label11.TabIndex = 3081; + this.label11.Text = "종류스케쥴"; + // + // lblNEXT송출글자색 + // + this.lblNEXT송출글자색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lblNEXT송출글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblNEXT송출글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblNEXT송출글자색.Appearance.Options.UseBackColor = true; + this.lblNEXT송출글자색.Appearance.Options.UseFont = true; + this.lblNEXT송출글자색.Appearance.Options.UseForeColor = true; + this.lblNEXT송출글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblNEXT송출글자색.Location = new System.Drawing.Point(177, 191); + this.lblNEXT송출글자색.Margin = new System.Windows.Forms.Padding(2); + this.lblNEXT송출글자색.Name = "lblNEXT송출글자색"; + this.lblNEXT송출글자색.Size = new System.Drawing.Size(84, 25); + this.lblNEXT송출글자색.TabIndex = 3080; + // + // lblNEXT송출배경색 + // + this.lblNEXT송출배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lblNEXT송출배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblNEXT송출배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblNEXT송출배경색.Appearance.Options.UseBackColor = true; + this.lblNEXT송출배경색.Appearance.Options.UseFont = true; + this.lblNEXT송출배경색.Appearance.Options.UseForeColor = true; + this.lblNEXT송출배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblNEXT송출배경색.Location = new System.Drawing.Point(177, 138); + this.lblNEXT송출배경색.Margin = new System.Windows.Forms.Padding(2); + this.lblNEXT송출배경색.Name = "lblNEXT송출배경색"; + this.lblNEXT송출배경색.Size = new System.Drawing.Size(84, 25); + this.lblNEXT송출배경색.TabIndex = 3079; + // + // label9 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label9, DevExpress.Utils.DefaultBoolean.Default); + this.label9.AutoSize = true; + this.label9.BackColor = System.Drawing.Color.Transparent; + this.label9.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label9.Location = new System.Drawing.Point(175, 97); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(89, 20); + this.label9.TabIndex = 3078; + this.label9.Text = "송출 라인색"; + // + // lbl완료상태글자색 + // + this.lbl완료상태글자색.Appearance.BackColor = System.Drawing.Color.White; + this.lbl완료상태글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl완료상태글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl완료상태글자색.Appearance.Options.UseBackColor = true; + this.lbl완료상태글자색.Appearance.Options.UseFont = true; + this.lbl완료상태글자색.Appearance.Options.UseForeColor = true; + this.lbl완료상태글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl완료상태글자색.Location = new System.Drawing.Point(790, 191); + this.lbl완료상태글자색.Margin = new System.Windows.Forms.Padding(2); + this.lbl완료상태글자색.Name = "lbl완료상태글자색"; + this.lbl완료상태글자색.Size = new System.Drawing.Size(84, 25); + this.lbl완료상태글자색.TabIndex = 3077; + // + // lbl완료상태배경색 + // + this.lbl완료상태배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.lbl완료상태배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl완료상태배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl완료상태배경색.Appearance.Options.UseBackColor = true; + this.lbl완료상태배경색.Appearance.Options.UseFont = true; + this.lbl완료상태배경색.Appearance.Options.UseForeColor = true; + this.lbl완료상태배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl완료상태배경색.Location = new System.Drawing.Point(790, 138); + this.lbl완료상태배경색.Margin = new System.Windows.Forms.Padding(2); + this.lbl완료상태배경색.Name = "lbl완료상태배경색"; + this.lbl완료상태배경색.Size = new System.Drawing.Size(84, 25); + this.lbl완료상태배경색.TabIndex = 3076; + // + // label8 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label8, DevExpress.Utils.DefaultBoolean.Default); + this.label8.AutoSize = true; + this.label8.BackColor = System.Drawing.Color.Transparent; + this.label8.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label8.Location = new System.Drawing.Point(800, 97); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(69, 20); + this.label8.TabIndex = 3075; + this.label8.Text = "완료상태"; + // + // lbl완료송출글자색 + // + this.lbl완료송출글자색.Appearance.BackColor = System.Drawing.Color.White; + this.lbl완료송출글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl완료송출글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl완료송출글자색.Appearance.Options.UseBackColor = true; + this.lbl완료송출글자색.Appearance.Options.UseFont = true; + this.lbl완료송출글자색.Appearance.Options.UseForeColor = true; + this.lbl완료송출글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl완료송출글자색.Location = new System.Drawing.Point(1827, 194); + this.lbl완료송출글자색.Margin = new System.Windows.Forms.Padding(2); + this.lbl완료송출글자색.Name = "lbl완료송출글자색"; + this.lbl완료송출글자색.Size = new System.Drawing.Size(84, 25); + this.lbl완료송출글자색.TabIndex = 3074; + this.lbl완료송출글자색.Visible = false; + // + // lbl완료송출배경색 + // + this.lbl완료송출배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.lbl완료송출배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl완료송출배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl완료송출배경색.Appearance.Options.UseBackColor = true; + this.lbl완료송출배경색.Appearance.Options.UseFont = true; + this.lbl완료송출배경색.Appearance.Options.UseForeColor = true; + this.lbl완료송출배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl완료송출배경색.Location = new System.Drawing.Point(1827, 160); + this.lbl완료송출배경색.Margin = new System.Windows.Forms.Padding(2); + this.lbl완료송출배경색.Name = "lbl완료송출배경색"; + this.lbl완료송출배경색.Size = new System.Drawing.Size(84, 25); + this.lbl완료송출배경색.TabIndex = 3073; + this.lbl완료송출배경색.Visible = false; + // + // label7 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label7, DevExpress.Utils.DefaultBoolean.Default); + this.label7.AutoSize = true; + this.label7.BackColor = System.Drawing.Color.Transparent; + this.label7.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label7.Location = new System.Drawing.Point(1837, 138); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(69, 20); + this.label7.TabIndex = 3072; + this.label7.Text = "완료송출"; + this.label7.Visible = false; + // + // lblNEXT상태글자색 + // + this.lblNEXT상태글자색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lblNEXT상태글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblNEXT상태글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblNEXT상태글자색.Appearance.Options.UseBackColor = true; + this.lblNEXT상태글자색.Appearance.Options.UseFont = true; + this.lblNEXT상태글자색.Appearance.Options.UseForeColor = true; + this.lblNEXT상태글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblNEXT상태글자색.Location = new System.Drawing.Point(1336, 191); + this.lblNEXT상태글자색.Margin = new System.Windows.Forms.Padding(2); + this.lblNEXT상태글자색.Name = "lblNEXT상태글자색"; + this.lblNEXT상태글자색.Size = new System.Drawing.Size(84, 25); + this.lblNEXT상태글자색.TabIndex = 3071; + // + // lblNEXT상태배경색 + // + this.lblNEXT상태배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lblNEXT상태배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblNEXT상태배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblNEXT상태배경색.Appearance.Options.UseBackColor = true; + this.lblNEXT상태배경색.Appearance.Options.UseFont = true; + this.lblNEXT상태배경색.Appearance.Options.UseForeColor = true; + this.lblNEXT상태배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblNEXT상태배경색.Location = new System.Drawing.Point(1336, 138); + this.lblNEXT상태배경색.Margin = new System.Windows.Forms.Padding(2); + this.lblNEXT상태배경색.Name = "lblNEXT상태배경색"; + this.lblNEXT상태배경색.Size = new System.Drawing.Size(84, 25); + this.lblNEXT상태배경색.TabIndex = 3070; + // + // lblNEXT스케쥴글자색 + // + this.lblNEXT스케쥴글자색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lblNEXT스케쥴글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblNEXT스케쥴글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblNEXT스케쥴글자색.Appearance.Options.UseBackColor = true; + this.lblNEXT스케쥴글자색.Appearance.Options.UseFont = true; + this.lblNEXT스케쥴글자색.Appearance.Options.UseForeColor = true; + this.lblNEXT스케쥴글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblNEXT스케쥴글자색.Location = new System.Drawing.Point(1230, 192); + this.lblNEXT스케쥴글자색.Margin = new System.Windows.Forms.Padding(2); + this.lblNEXT스케쥴글자색.Name = "lblNEXT스케쥴글자색"; + this.lblNEXT스케쥴글자색.Size = new System.Drawing.Size(84, 25); + this.lblNEXT스케쥴글자색.TabIndex = 3069; + // + // lblNEXT스케쥴배경색 + // + this.lblNEXT스케쥴배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lblNEXT스케쥴배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblNEXT스케쥴배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblNEXT스케쥴배경색.Appearance.Options.UseBackColor = true; + this.lblNEXT스케쥴배경색.Appearance.Options.UseFont = true; + this.lblNEXT스케쥴배경색.Appearance.Options.UseForeColor = true; + this.lblNEXT스케쥴배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblNEXT스케쥴배경색.Location = new System.Drawing.Point(1230, 139); + this.lblNEXT스케쥴배경색.Margin = new System.Windows.Forms.Padding(2); + this.lblNEXT스케쥴배경색.Name = "lblNEXT스케쥴배경색"; + this.lblNEXT스케쥴배경색.Size = new System.Drawing.Size(84, 25); + this.lblNEXT스케쥴배경색.TabIndex = 3068; + // + // label5 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label5, DevExpress.Utils.DefaultBoolean.Default); + this.label5.AutoSize = true; + this.label5.BackColor = System.Drawing.Color.Transparent; + this.label5.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label5.Location = new System.Drawing.Point(1334, 97); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(83, 20); + this.label5.TabIndex = 3067; + this.label5.Text = "NEXT 상태"; + // + // label6 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label6, DevExpress.Utils.DefaultBoolean.Default); + this.label6.AutoSize = true; + this.label6.BackColor = System.Drawing.Color.Transparent; + this.label6.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label6.Location = new System.Drawing.Point(1226, 97); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(98, 20); + this.label6.TabIndex = 3066; + this.label6.Text = "NEXT 스케쥴"; + // + // lbl선택라인글자색 + // + this.lbl선택라인글자색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lbl선택라인글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl선택라인글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl선택라인글자색.Appearance.Options.UseBackColor = true; + this.lbl선택라인글자색.Appearance.Options.UseFont = true; + this.lbl선택라인글자색.Appearance.Options.UseForeColor = true; + this.lbl선택라인글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl선택라인글자색.Location = new System.Drawing.Point(1595, 191); + this.lbl선택라인글자색.Margin = new System.Windows.Forms.Padding(2); + this.lbl선택라인글자색.Name = "lbl선택라인글자색"; + this.lbl선택라인글자색.Size = new System.Drawing.Size(84, 25); + this.lbl선택라인글자색.TabIndex = 3065; + // + // lbl선택라인배경색 + // + this.lbl선택라인배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lbl선택라인배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl선택라인배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl선택라인배경색.Appearance.Options.UseBackColor = true; + this.lbl선택라인배경색.Appearance.Options.UseFont = true; + this.lbl선택라인배경색.Appearance.Options.UseForeColor = true; + this.lbl선택라인배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl선택라인배경색.Location = new System.Drawing.Point(1595, 138); + this.lbl선택라인배경색.Margin = new System.Windows.Forms.Padding(2); + this.lbl선택라인배경색.Name = "lbl선택라인배경색"; + this.lbl선택라인배경색.Size = new System.Drawing.Size(84, 25); + this.lbl선택라인배경색.TabIndex = 3064; + // + // lblOnAir상태글자색 + // + this.lblOnAir상태글자색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lblOnAir상태글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblOnAir상태글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblOnAir상태글자색.Appearance.Options.UseBackColor = true; + this.lblOnAir상태글자색.Appearance.Options.UseFont = true; + this.lblOnAir상태글자색.Appearance.Options.UseForeColor = true; + this.lblOnAir상태글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblOnAir상태글자색.Location = new System.Drawing.Point(1074, 191); + this.lblOnAir상태글자색.Margin = new System.Windows.Forms.Padding(2); + this.lblOnAir상태글자색.Name = "lblOnAir상태글자색"; + this.lblOnAir상태글자색.Size = new System.Drawing.Size(84, 25); + this.lblOnAir상태글자색.TabIndex = 3063; + // + // lblOnAir상태배경색 + // + this.lblOnAir상태배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lblOnAir상태배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblOnAir상태배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblOnAir상태배경색.Appearance.Options.UseBackColor = true; + this.lblOnAir상태배경색.Appearance.Options.UseFont = true; + this.lblOnAir상태배경색.Appearance.Options.UseForeColor = true; + this.lblOnAir상태배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblOnAir상태배경색.Location = new System.Drawing.Point(1074, 138); + this.lblOnAir상태배경색.Margin = new System.Windows.Forms.Padding(2); + this.lblOnAir상태배경색.Name = "lblOnAir상태배경색"; + this.lblOnAir상태배경색.Size = new System.Drawing.Size(84, 25); + this.lblOnAir상태배경색.TabIndex = 3062; + // + // lblOnAir송출글자색 + // + this.lblOnAir송출글자색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lblOnAir송출글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblOnAir송출글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblOnAir송출글자색.Appearance.Options.UseBackColor = true; + this.lblOnAir송출글자색.Appearance.Options.UseFont = true; + this.lblOnAir송출글자색.Appearance.Options.UseForeColor = true; + this.lblOnAir송출글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblOnAir송출글자색.Location = new System.Drawing.Point(1827, 111); + this.lblOnAir송출글자색.Margin = new System.Windows.Forms.Padding(2); + this.lblOnAir송출글자색.Name = "lblOnAir송출글자색"; + this.lblOnAir송출글자색.Size = new System.Drawing.Size(84, 25); + this.lblOnAir송출글자색.TabIndex = 3061; + this.lblOnAir송출글자색.Visible = false; + // + // lblOnAir송출배경색 + // + this.lblOnAir송출배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lblOnAir송출배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblOnAir송출배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblOnAir송출배경색.Appearance.Options.UseBackColor = true; + this.lblOnAir송출배경색.Appearance.Options.UseFont = true; + this.lblOnAir송출배경색.Appearance.Options.UseForeColor = true; + this.lblOnAir송출배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblOnAir송출배경색.Location = new System.Drawing.Point(1827, 77); + this.lblOnAir송출배경색.Margin = new System.Windows.Forms.Padding(2); + this.lblOnAir송출배경색.Name = "lblOnAir송출배경색"; + this.lblOnAir송출배경색.Size = new System.Drawing.Size(84, 25); + this.lblOnAir송출배경색.TabIndex = 3060; + this.lblOnAir송출배경색.Visible = false; + // + // lblOnAir스케쥴글자색 + // + this.lblOnAir스케쥴글자색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lblOnAir스케쥴글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblOnAir스케쥴글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblOnAir스케쥴글자색.Appearance.Options.UseBackColor = true; + this.lblOnAir스케쥴글자색.Appearance.Options.UseFont = true; + this.lblOnAir스케쥴글자색.Appearance.Options.UseForeColor = true; + this.lblOnAir스케쥴글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblOnAir스케쥴글자색.Location = new System.Drawing.Point(956, 191); + this.lblOnAir스케쥴글자색.Margin = new System.Windows.Forms.Padding(2); + this.lblOnAir스케쥴글자색.Name = "lblOnAir스케쥴글자색"; + this.lblOnAir스케쥴글자색.Size = new System.Drawing.Size(84, 25); + this.lblOnAir스케쥴글자색.TabIndex = 3059; + // + // lblOnAir스케쥴배경색 + // + this.lblOnAir스케쥴배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(170)))), ((int)(((byte)(243))))); + this.lblOnAir스케쥴배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblOnAir스케쥴배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblOnAir스케쥴배경색.Appearance.Options.UseBackColor = true; + this.lblOnAir스케쥴배경색.Appearance.Options.UseFont = true; + this.lblOnAir스케쥴배경색.Appearance.Options.UseForeColor = true; + this.lblOnAir스케쥴배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblOnAir스케쥴배경색.Location = new System.Drawing.Point(956, 138); + this.lblOnAir스케쥴배경색.Margin = new System.Windows.Forms.Padding(2); + this.lblOnAir스케쥴배경색.Name = "lblOnAir스케쥴배경색"; + this.lblOnAir스케쥴배경색.Size = new System.Drawing.Size(84, 25); + this.lblOnAir스케쥴배경색.TabIndex = 3058; + // + // lbl완료스케쥴글자색 + // + this.lbl완료스케쥴글자색.Appearance.BackColor = System.Drawing.Color.White; + this.lbl완료스케쥴글자색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl완료스케쥴글자색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl완료스케쥴글자색.Appearance.Options.UseBackColor = true; + this.lbl완료스케쥴글자색.Appearance.Options.UseFont = true; + this.lbl완료스케쥴글자색.Appearance.Options.UseForeColor = true; + this.lbl완료스케쥴글자색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl완료스케쥴글자색.Location = new System.Drawing.Point(683, 191); + this.lbl완료스케쥴글자색.Margin = new System.Windows.Forms.Padding(2); + this.lbl완료스케쥴글자색.Name = "lbl완료스케쥴글자색"; + this.lbl완료스케쥴글자색.Size = new System.Drawing.Size(84, 25); + this.lbl완료스케쥴글자색.TabIndex = 3057; + // + // lbl완료스케쥴배경색 + // + this.lbl완료스케쥴배경색.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.lbl완료스케쥴배경색.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl완료스케쥴배경색.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lbl완료스케쥴배경색.Appearance.Options.UseBackColor = true; + this.lbl완료스케쥴배경색.Appearance.Options.UseFont = true; + this.lbl완료스케쥴배경색.Appearance.Options.UseForeColor = true; + this.lbl완료스케쥴배경색.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lbl완료스케쥴배경색.Location = new System.Drawing.Point(683, 138); + this.lbl완료스케쥴배경색.Margin = new System.Windows.Forms.Padding(2); + this.lbl완료스케쥴배경색.Name = "lbl완료스케쥴배경색"; + this.lbl완료스케쥴배경색.Size = new System.Drawing.Size(84, 25); + this.lbl완료스케쥴배경색.TabIndex = 3056; + // + // label4 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label4, DevExpress.Utils.DefaultBoolean.Default); + this.label4.AutoSize = true; + this.label4.BackColor = System.Drawing.Color.Transparent; + this.label4.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label4.Location = new System.Drawing.Point(1599, 97); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(74, 20); + this.label4.TabIndex = 3054; + this.label4.Text = "선택 라인"; + // + // label2 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label2, DevExpress.Utils.DefaultBoolean.Default); + this.label2.AutoSize = true; + this.label2.BackColor = System.Drawing.Color.Transparent; + this.label2.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label2.Location = new System.Drawing.Point(54, 194); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(54, 20); + this.label2.TabIndex = 3053; + this.label2.Text = "글자색"; + // + // label1 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label1, DevExpress.Utils.DefaultBoolean.Default); + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.Transparent; + this.label1.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label1.Location = new System.Drawing.Point(54, 143); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(54, 20); + this.label1.TabIndex = 3052; + this.label1.Text = "배경색"; + // + // label3 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label3, DevExpress.Utils.DefaultBoolean.Default); + this.label3.AutoSize = true; + this.label3.BackColor = System.Drawing.Color.Transparent; + this.label3.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label3.Location = new System.Drawing.Point(1072, 97); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(86, 20); + this.label3.TabIndex = 3049; + this.label3.Text = "OnAir 상태"; + // + // labelControl92 + // + this.labelControl92.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.labelControl92.Appearance.Options.UseFont = true; + this.labelControl92.Location = new System.Drawing.Point(49, 54); + this.labelControl92.Name = "labelControl92"; + this.labelControl92.Size = new System.Drawing.Size(64, 21); + this.labelControl92.TabIndex = 3047; + this.labelControl92.Text = "색상설정"; + // + // label69 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label69, DevExpress.Utils.DefaultBoolean.Default); + this.label69.AutoSize = true; + this.label69.BackColor = System.Drawing.Color.Transparent; + this.label69.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label69.Location = new System.Drawing.Point(1823, 55); + this.label69.Name = "label69"; + this.label69.Size = new System.Drawing.Size(86, 20); + this.label69.TabIndex = 591; + this.label69.Text = "OnAir 송출"; + this.label69.Visible = false; + // + // label73 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label73, DevExpress.Utils.DefaultBoolean.Default); + this.label73.AutoSize = true; + this.label73.BackColor = System.Drawing.Color.Transparent; + this.label73.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label73.Location = new System.Drawing.Point(683, 97); + this.label73.Name = "label73"; + this.label73.Size = new System.Drawing.Size(84, 20); + this.label73.TabIndex = 585; + this.label73.Text = "완료스케쥴"; + // + // label61 + // + this.defaultToolTipController1.SetAllowHtmlText(this.label61, DevExpress.Utils.DefaultBoolean.Default); + this.label61.AutoSize = true; + this.label61.BackColor = System.Drawing.Color.Transparent; + this.label61.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.label61.Location = new System.Drawing.Point(949, 97); + this.label61.Name = "label61"; + this.label61.Size = new System.Drawing.Size(101, 20); + this.label61.TabIndex = 587; + this.label61.Text = "OnAir 스케쥴"; + // + // groupControl6 + // + this.groupControl6.AppearanceCaption.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.groupControl6.AppearanceCaption.Options.UseFont = true; + this.groupControl6.Controls.Add(this.labelControl45); + this.groupControl6.Controls.Add(this.btnTimeGap1mm); + this.groupControl6.Controls.Add(this.btnTimeGap1m); + this.groupControl6.Controls.Add(this.txtTimeGap); + this.groupControl6.Controls.Add(this.labelControl40); + this.groupControl6.Controls.Add(this.btnTimeGap1sm); + this.groupControl6.Controls.Add(this.btnTimeGap1nm); + this.groupControl6.Controls.Add(this.btnTimeGap1s); + this.groupControl6.Controls.Add(this.btnTimeGap1n); + this.groupControl6.Controls.Add(this.labelControl39); + this.groupControl6.Controls.Add(this.groupBoxAdminOnly); + this.groupControl6.Controls.Add(this.labelControl23); + this.groupControl6.Controls.Add(this.lblAutoSync); + this.groupControl6.Controls.Add(this.toggleSwitchAutoSync); + this.groupControl6.Controls.Add(this.lbl수정모드); + this.groupControl6.Controls.Add(this.lblDoneDisplayInvisible); + this.groupControl6.Controls.Add(this.toggleSwitch수정모드); + this.groupControl6.Controls.Add(this.toggleSwitchDone송출보지않기); + this.groupControl6.Controls.Add(this.timeSpanEditForbidEnd); + this.groupControl6.Controls.Add(this.labelControl11); + this.groupControl6.Controls.Add(this.labelControl13); + this.groupControl6.Controls.Add(this.timeSpanEditForbidStart); + this.groupControl6.Controls.Add(this.labelControl8); + this.groupControl6.Controls.Add(this.labelControl6); + this.groupControl6.Controls.Add(this.labelControl7); + this.groupControl6.Controls.Add(this.labelControl34); + this.groupControl6.Controls.Add(this.labelControl33); + this.groupControl6.Controls.Add(this.txtDissolveTime); + this.groupControl6.Controls.Add(this.labelControl22); + this.groupControl6.Controls.Add(this.btnSettingTornado); + this.groupControl6.Controls.Add(this.labelControl26); + this.groupControl6.Controls.Add(this.txtDBIP); + this.groupControl6.Dock = System.Windows.Forms.DockStyle.Top; + this.groupControl6.Location = new System.Drawing.Point(0, 0); + this.groupControl6.Margin = new System.Windows.Forms.Padding(2); + this.groupControl6.Name = "groupControl6"; + this.groupControl6.Size = new System.Drawing.Size(1918, 316); + this.groupControl6.TabIndex = 3053; + this.groupControl6.Text = "Options"; + this.groupControl6.ToolTipController = this.defaultToolTipController1.DefaultController; + // + // labelControl45 + // + this.labelControl45.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.labelControl45.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl45.Appearance.Options.UseFont = true; + this.labelControl45.Appearance.Options.UseForeColor = true; + this.labelControl45.Location = new System.Drawing.Point(696, 196); + this.labelControl45.Name = "labelControl45"; + this.labelControl45.Size = new System.Drawing.Size(190, 21); + this.labelControl45.TabIndex = 1124; + this.labelControl45.Text = "(상단의 현재 시각을 변경)"; + // + // btnTimeGap1mm + // + this.btnTimeGap1mm.Appearance.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold); + this.btnTimeGap1mm.Appearance.Options.UseFont = true; + this.btnTimeGap1mm.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnTimeGap1mm.ImageOptions.SvgImage"))); + this.btnTimeGap1mm.Location = new System.Drawing.Point(880, 264); + this.btnTimeGap1mm.Name = "btnTimeGap1mm"; + this.btnTimeGap1mm.Size = new System.Drawing.Size(90, 33); + this.btnTimeGap1mm.TabIndex = 1123; + this.btnTimeGap1mm.Text = "1분"; + this.btnTimeGap1mm.Click += new System.EventHandler(this.btnTimeGap1n_Click); + // + // btnTimeGap1m + // + this.btnTimeGap1m.Appearance.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold); + this.btnTimeGap1m.Appearance.Options.UseFont = true; + this.btnTimeGap1m.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnTimeGap1m.ImageOptions.SvgImage"))); + this.btnTimeGap1m.Location = new System.Drawing.Point(880, 223); + this.btnTimeGap1m.Name = "btnTimeGap1m"; + this.btnTimeGap1m.Size = new System.Drawing.Size(90, 33); + this.btnTimeGap1m.TabIndex = 1122; + this.btnTimeGap1m.Text = "1분"; + this.btnTimeGap1m.Click += new System.EventHandler(this.btnTimeGap1n_Click); + // + // txtTimeGap + // + this.txtTimeGap.EditValue = "0"; + this.txtTimeGap.Location = new System.Drawing.Point(554, 223); + this.txtTimeGap.MenuManager = this.toolbarFormManager1; + this.txtTimeGap.Name = "txtTimeGap"; + this.txtTimeGap.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 22F, System.Drawing.FontStyle.Bold); + this.txtTimeGap.Properties.Appearance.Options.UseFont = true; + this.txtTimeGap.Properties.Appearance.Options.UseTextOptions = true; + this.txtTimeGap.Properties.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.txtTimeGap.Size = new System.Drawing.Size(76, 46); + this.txtTimeGap.TabIndex = 1120; + // + // labelControl40 + // + this.labelControl40.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.labelControl40.Appearance.Options.UseFont = true; + this.labelControl40.Location = new System.Drawing.Point(644, 239); + this.labelControl40.Name = "labelControl40"; + this.labelControl40.Size = new System.Drawing.Size(16, 21); + this.labelControl40.TabIndex = 1119; + this.labelControl40.Text = "초"; + // + // btnTimeGap1sm + // + this.btnTimeGap1sm.Appearance.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold); + this.btnTimeGap1sm.Appearance.Options.UseFont = true; + this.btnTimeGap1sm.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnTimeGap1sm.ImageOptions.SvgImage"))); + this.btnTimeGap1sm.Location = new System.Drawing.Point(784, 264); + this.btnTimeGap1sm.Name = "btnTimeGap1sm"; + this.btnTimeGap1sm.Size = new System.Drawing.Size(90, 33); + this.btnTimeGap1sm.TabIndex = 1117; + this.btnTimeGap1sm.Text = "1초"; + this.btnTimeGap1sm.Click += new System.EventHandler(this.btnTimeGap1n_Click); + // + // btnTimeGap1nm + // + this.btnTimeGap1nm.Appearance.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold); + this.btnTimeGap1nm.Appearance.Options.UseFont = true; + this.btnTimeGap1nm.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnTimeGap1nm.ImageOptions.SvgImage"))); + this.btnTimeGap1nm.Location = new System.Drawing.Point(688, 264); + this.btnTimeGap1nm.Name = "btnTimeGap1nm"; + this.btnTimeGap1nm.Size = new System.Drawing.Size(90, 33); + this.btnTimeGap1nm.TabIndex = 1116; + this.btnTimeGap1nm.Text = "0.1초"; + this.btnTimeGap1nm.Click += new System.EventHandler(this.btnTimeGap1n_Click); + // + // btnTimeGap1s + // + this.btnTimeGap1s.Appearance.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold); + this.btnTimeGap1s.Appearance.Options.UseFont = true; + this.btnTimeGap1s.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnTimeGap1s.ImageOptions.SvgImage"))); + this.btnTimeGap1s.Location = new System.Drawing.Point(784, 223); + this.btnTimeGap1s.Name = "btnTimeGap1s"; + this.btnTimeGap1s.Size = new System.Drawing.Size(90, 33); + this.btnTimeGap1s.TabIndex = 1115; + this.btnTimeGap1s.Text = "1초"; + this.btnTimeGap1s.Click += new System.EventHandler(this.btnTimeGap1n_Click); + // + // btnTimeGap1n + // + this.btnTimeGap1n.Appearance.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold); + this.btnTimeGap1n.Appearance.Options.UseFont = true; + this.btnTimeGap1n.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnTimeGap1n.ImageOptions.SvgImage"))); + this.btnTimeGap1n.Location = new System.Drawing.Point(688, 223); + this.btnTimeGap1n.Name = "btnTimeGap1n"; + this.btnTimeGap1n.Size = new System.Drawing.Size(90, 33); + this.btnTimeGap1n.TabIndex = 1114; + this.btnTimeGap1n.Text = "0.1초"; + this.btnTimeGap1n.Click += new System.EventHandler(this.btnTimeGap1n_Click); + // + // labelControl39 + // + this.labelControl39.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl39.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl39.Appearance.Options.UseFont = true; + this.labelControl39.Appearance.Options.UseForeColor = true; + this.labelControl39.Location = new System.Drawing.Point(538, 193); + this.labelControl39.Name = "labelControl39"; + this.labelControl39.Size = new System.Drawing.Size(151, 25); + this.labelControl39.TabIndex = 1113; + this.labelControl39.Text = "TimeGap Setting"; + // + // groupBoxAdminOnly + // + this.defaultToolTipController1.SetAllowHtmlText(this.groupBoxAdminOnly, DevExpress.Utils.DefaultBoolean.Default); + this.groupBoxAdminOnly.Controls.Add(this.toggleSwitchChannel); + this.groupBoxAdminOnly.Controls.Add(this.lblSwitchChannel); + this.groupBoxAdminOnly.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold); + this.groupBoxAdminOnly.ForeColor = System.Drawing.Color.IndianRed; + this.groupBoxAdminOnly.Location = new System.Drawing.Point(1170, 45); + this.groupBoxAdminOnly.Name = "groupBoxAdminOnly"; + this.groupBoxAdminOnly.Size = new System.Drawing.Size(246, 237); + this.groupBoxAdminOnly.TabIndex = 1109; + this.groupBoxAdminOnly.TabStop = false; + this.groupBoxAdminOnly.Text = "Admin Only"; + this.groupBoxAdminOnly.Visible = false; + // + // toggleSwitchChannel + // + this.toggleSwitchChannel.Location = new System.Drawing.Point(67, 113); + this.toggleSwitchChannel.MenuManager = this.toolbarFormManager1; + this.toggleSwitchChannel.Name = "toggleSwitchChannel"; + this.toggleSwitchChannel.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 15F); + this.toggleSwitchChannel.Properties.Appearance.ForeColor = System.Drawing.Color.White; + this.toggleSwitchChannel.Properties.Appearance.Options.UseFont = true; + this.toggleSwitchChannel.Properties.Appearance.Options.UseForeColor = true; + this.toggleSwitchChannel.Properties.GlyphAlignment = DevExpress.Utils.HorzAlignment.Default; + this.toggleSwitchChannel.Properties.OffText = ""; + this.toggleSwitchChannel.Properties.OnText = ""; + this.toggleSwitchChannel.Properties.ShowText = false; + this.toggleSwitchChannel.Size = new System.Drawing.Size(99, 31); + this.toggleSwitchChannel.TabIndex = 14; + this.toggleSwitchChannel.Toggled += new System.EventHandler(this.toggleSwitchChannel_Toggled); + // + // lblSwitchChannel + // + this.lblSwitchChannel.Appearance.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblSwitchChannel.Appearance.ForeColor = System.Drawing.Color.Snow; + this.lblSwitchChannel.Appearance.Options.UseFont = true; + this.lblSwitchChannel.Appearance.Options.UseForeColor = true; + this.lblSwitchChannel.Location = new System.Drawing.Point(93, 79); + this.lblSwitchChannel.Name = "lblSwitchChannel"; + this.lblSwitchChannel.Size = new System.Drawing.Size(44, 28); + this.lblSwitchChannel.TabIndex = 15; + this.lblSwitchChannel.Text = "IPTV"; + // + // labelControl23 + // + this.labelControl23.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.labelControl23.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.labelControl23.Appearance.ForeColor = System.Drawing.Color.Snow; + this.labelControl23.Appearance.Options.UseBackColor = true; + this.labelControl23.Appearance.Options.UseFont = true; + this.labelControl23.Appearance.Options.UseForeColor = true; + this.labelControl23.Location = new System.Drawing.Point(152, 190); + this.labelControl23.Name = "labelControl23"; + this.labelControl23.Size = new System.Drawing.Size(75, 21); + this.labelControl23.TabIndex = 1082; + this.labelControl23.Text = "(1분 주기)"; + this.labelControl23.Visible = false; + // + // lblAutoSync + // + this.lblAutoSync.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.lblAutoSync.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.lblAutoSync.Appearance.ForeColor = System.Drawing.Color.Snow; + this.lblAutoSync.Appearance.Options.UseBackColor = true; + this.lblAutoSync.Appearance.Options.UseFont = true; + this.lblAutoSync.Appearance.Options.UseForeColor = true; + this.lblAutoSync.Location = new System.Drawing.Point(111, 163); + this.lblAutoSync.Name = "lblAutoSync"; + this.lblAutoSync.Size = new System.Drawing.Size(116, 21); + this.lblAutoSync.TabIndex = 1081; + this.lblAutoSync.Text = "자동 동기화 Off"; + this.lblAutoSync.Visible = false; + // + // toggleSwitchAutoSync + // + this.toggleSwitchAutoSync.Location = new System.Drawing.Point(244, 158); + this.toggleSwitchAutoSync.MenuManager = this.toolbarFormManager1; + this.toggleSwitchAutoSync.Name = "toggleSwitchAutoSync"; + this.toggleSwitchAutoSync.Properties.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.toggleSwitchAutoSync.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 15F); + this.toggleSwitchAutoSync.Properties.Appearance.ForeColor = System.Drawing.Color.White; + this.toggleSwitchAutoSync.Properties.Appearance.Options.UseBackColor = true; + this.toggleSwitchAutoSync.Properties.Appearance.Options.UseFont = true; + this.toggleSwitchAutoSync.Properties.Appearance.Options.UseForeColor = true; + this.toggleSwitchAutoSync.Properties.GlyphAlignment = DevExpress.Utils.HorzAlignment.Default; + this.toggleSwitchAutoSync.Properties.OffText = ""; + this.toggleSwitchAutoSync.Properties.OnText = ""; + this.toggleSwitchAutoSync.Properties.ShowText = false; + this.toggleSwitchAutoSync.Size = new System.Drawing.Size(99, 31); + this.toggleSwitchAutoSync.TabIndex = 1080; + this.toggleSwitchAutoSync.Visible = false; + this.toggleSwitchAutoSync.Toggled += new System.EventHandler(this.toggleSwitchAutoSync_Toggled); + // + // lbl수정모드 + // + this.lbl수정모드.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(89)))), ((int)(((byte)(120))))); + this.lbl수정모드.Appearance.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbl수정모드.Appearance.ForeColor = System.Drawing.Color.Snow; + this.lbl수정모드.Appearance.Options.UseBackColor = true; + this.lbl수정모드.Appearance.Options.UseFont = true; + this.lbl수정모드.Appearance.Options.UseForeColor = true; + this.lbl수정모드.Location = new System.Drawing.Point(1777, 59); + this.lbl수정모드.Name = "lbl수정모드"; + this.lbl수정모드.Size = new System.Drawing.Size(117, 28); + this.lbl수정모드.TabIndex = 1101; + this.lbl수정모드.Text = "수정모드 Off"; + this.lbl수정모드.Visible = false; + // + // lblDoneDisplayInvisible + // + this.lblDoneDisplayInvisible.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.lblDoneDisplayInvisible.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.lblDoneDisplayInvisible.Appearance.Options.UseFont = true; + this.lblDoneDisplayInvisible.Appearance.Options.UseForeColor = true; + this.lblDoneDisplayInvisible.Location = new System.Drawing.Point(979, 55); + this.lblDoneDisplayInvisible.Name = "lblDoneDisplayInvisible"; + this.lblDoneDisplayInvisible.Size = new System.Drawing.Size(121, 25); + this.lblDoneDisplayInvisible.TabIndex = 1090; + this.lblDoneDisplayInvisible.Text = "송출완료 보임"; + // + // toggleSwitch수정모드 + // + this.toggleSwitch수정모드.Location = new System.Drawing.Point(1793, 94); + this.toggleSwitch수정모드.MenuManager = this.toolbarFormManager1; + this.toggleSwitch수정모드.Name = "toggleSwitch수정모드"; + this.toggleSwitch수정모드.Properties.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(89)))), ((int)(((byte)(120))))); + this.toggleSwitch수정모드.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 15F); + this.toggleSwitch수정모드.Properties.Appearance.ForeColor = System.Drawing.Color.White; + this.toggleSwitch수정모드.Properties.Appearance.Options.UseBackColor = true; + this.toggleSwitch수정모드.Properties.Appearance.Options.UseFont = true; + this.toggleSwitch수정모드.Properties.Appearance.Options.UseForeColor = true; + this.toggleSwitch수정모드.Properties.GlyphAlignment = DevExpress.Utils.HorzAlignment.Default; + this.toggleSwitch수정모드.Properties.OffText = ""; + this.toggleSwitch수정모드.Properties.OnText = ""; + this.toggleSwitch수정모드.Properties.ShowText = false; + this.toggleSwitch수정모드.Size = new System.Drawing.Size(99, 31); + this.toggleSwitch수정모드.TabIndex = 1100; + this.toggleSwitch수정모드.Visible = false; + this.toggleSwitch수정모드.Toggled += new System.EventHandler(this.toggleSwitch수정모드_Toggled); + // + // toggleSwitchDone송출보지않기 + // + this.toggleSwitchDone송출보지않기.Location = new System.Drawing.Point(995, 90); + this.toggleSwitchDone송출보지않기.MenuManager = this.toolbarFormManager1; + this.toggleSwitchDone송출보지않기.Name = "toggleSwitchDone송출보지않기"; + this.toggleSwitchDone송출보지않기.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 15F); + this.toggleSwitchDone송출보지않기.Properties.Appearance.ForeColor = System.Drawing.Color.White; + this.toggleSwitchDone송출보지않기.Properties.Appearance.Options.UseFont = true; + this.toggleSwitchDone송출보지않기.Properties.Appearance.Options.UseForeColor = true; + this.toggleSwitchDone송출보지않기.Properties.GlyphAlignment = DevExpress.Utils.HorzAlignment.Default; + this.toggleSwitchDone송출보지않기.Properties.OffText = ""; + this.toggleSwitchDone송출보지않기.Properties.OnText = ""; + this.toggleSwitchDone송출보지않기.Properties.ShowText = false; + this.toggleSwitchDone송출보지않기.Size = new System.Drawing.Size(99, 31); + this.toggleSwitchDone송출보지않기.TabIndex = 1089; + this.toggleSwitchDone송출보지않기.Toggled += new System.EventHandler(this.toggleSwitchDone송출보지않기_Toggled); + // + // timeSpanEditForbidEnd + // + this.timeSpanEditForbidEnd.EditValue = System.TimeSpan.Parse("00:03:00"); + this.timeSpanEditForbidEnd.Location = new System.Drawing.Point(631, 130); + this.timeSpanEditForbidEnd.MenuManager = this.toolbarFormManager1; + this.timeSpanEditForbidEnd.Name = "timeSpanEditForbidEnd"; + this.timeSpanEditForbidEnd.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.timeSpanEditForbidEnd.Properties.Appearance.Options.UseFont = true; + this.timeSpanEditForbidEnd.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.timeSpanEditForbidEnd.Size = new System.Drawing.Size(130, 32); + this.timeSpanEditForbidEnd.TabIndex = 1079; + // + // labelControl11 + // + this.labelControl11.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.labelControl11.Appearance.Options.UseFont = true; + this.labelControl11.Location = new System.Drawing.Point(537, 136); + this.labelControl11.Name = "labelControl11"; + this.labelControl11.Size = new System.Drawing.Size(86, 21); + this.labelControl11.TabIndex = 1078; + this.labelControl11.Text = "테이프 종료"; + // + // labelControl13 + // + this.labelControl13.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.labelControl13.Appearance.Options.UseFont = true; + this.labelControl13.Location = new System.Drawing.Point(767, 136); + this.labelControl13.Name = "labelControl13"; + this.labelControl13.Size = new System.Drawing.Size(54, 21); + this.labelControl13.TabIndex = 1077; + this.labelControl13.Text = "전 금지"; + // + // timeSpanEditForbidStart + // + this.timeSpanEditForbidStart.EditValue = System.TimeSpan.Parse("00:03:00"); + this.timeSpanEditForbidStart.Location = new System.Drawing.Point(631, 92); + this.timeSpanEditForbidStart.MenuManager = this.toolbarFormManager1; + this.timeSpanEditForbidStart.Name = "timeSpanEditForbidStart"; + this.timeSpanEditForbidStart.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.timeSpanEditForbidStart.Properties.Appearance.Options.UseFont = true; + this.timeSpanEditForbidStart.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.timeSpanEditForbidStart.Size = new System.Drawing.Size(130, 32); + this.timeSpanEditForbidStart.TabIndex = 1076; + // + // labelControl8 + // + this.labelControl8.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.labelControl8.Appearance.Options.UseFont = true; + this.labelControl8.Location = new System.Drawing.Point(537, 98); + this.labelControl8.Name = "labelControl8"; + this.labelControl8.Size = new System.Drawing.Size(92, 21); + this.labelControl8.TabIndex = 681; + this.labelControl8.Text = "테이프 시작 "; + // + // labelControl6 + // + this.labelControl6.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl6.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl6.Appearance.Options.UseFont = true; + this.labelControl6.Appearance.Options.UseForeColor = true; + this.labelControl6.Location = new System.Drawing.Point(533, 55); + this.labelControl6.Name = "labelControl6"; + this.labelControl6.Size = new System.Drawing.Size(173, 25); + this.labelControl6.TabIndex = 680; + this.labelControl6.Text = "방송 금지 시각 설정"; + // + // labelControl7 + // + this.labelControl7.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.labelControl7.Appearance.Options.UseFont = true; + this.labelControl7.Location = new System.Drawing.Point(767, 98); + this.labelControl7.Name = "labelControl7"; + this.labelControl7.Size = new System.Drawing.Size(70, 21); + this.labelControl7.TabIndex = 678; + this.labelControl7.Text = "동안 금지"; + // + // labelControl34 + // + this.labelControl34.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl34.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl34.Appearance.Options.UseFont = true; + this.labelControl34.Appearance.Options.UseForeColor = true; + this.labelControl34.Location = new System.Drawing.Point(995, 235); + this.labelControl34.Name = "labelControl34"; + this.labelControl34.Size = new System.Drawing.Size(74, 25); + this.labelControl34.TabIndex = 677; + this.labelControl34.Text = "Dissolve"; + this.labelControl34.Visible = false; + // + // labelControl33 + // + this.labelControl33.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl33.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl33.Appearance.Options.UseFont = true; + this.labelControl33.Appearance.Options.UseForeColor = true; + this.labelControl33.Location = new System.Drawing.Point(105, 57); + this.labelControl33.Name = "labelControl33"; + this.labelControl33.Size = new System.Drawing.Size(103, 25); + this.labelControl33.TabIndex = 676; + this.labelControl33.Text = "Connection"; + // + // txtDissolveTime + // + this.txtDissolveTime.EditValue = "5"; + this.txtDissolveTime.Location = new System.Drawing.Point(1056, 266); + this.txtDissolveTime.Name = "txtDissolveTime"; + this.txtDissolveTime.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.txtDissolveTime.Properties.Appearance.Options.UseFont = true; + this.txtDissolveTime.Properties.Appearance.Options.UseTextOptions = true; + this.txtDissolveTime.Properties.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.txtDissolveTime.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager)); + this.txtDissolveTime.Properties.MaskSettings.Set("mask", "d"); + this.txtDissolveTime.Properties.MaskSettings.Set("valueAfterDelete", DevExpress.Data.Mask.NumericMaskManager.ValueAfterDelete.ZeroThenNull); + this.txtDissolveTime.Properties.UseMaskAsDisplayFormat = true; + this.txtDissolveTime.Size = new System.Drawing.Size(46, 28); + this.txtDissolveTime.TabIndex = 666; + this.txtDissolveTime.Visible = false; + // + // labelControl22 + // + this.labelControl22.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.labelControl22.Appearance.Options.UseFont = true; + this.labelControl22.Location = new System.Drawing.Point(1108, 269); + this.labelControl22.Name = "labelControl22"; + this.labelControl22.Size = new System.Drawing.Size(54, 21); + this.labelControl22.TabIndex = 665; + this.labelControl22.Text = "Frames"; + this.labelControl22.Visible = false; + // + // btnSettingTornado + // + this.btnSettingTornado.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnSettingTornado.Appearance.Options.UseFont = true; + this.btnSettingTornado.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnSettingTornado.ImageOptions.SvgImage"))); + this.btnSettingTornado.Location = new System.Drawing.Point(1473, 114); + this.btnSettingTornado.Name = "btnSettingTornado"; + this.btnSettingTornado.Size = new System.Drawing.Size(203, 96); + this.btnSettingTornado.TabIndex = 656; + this.btnSettingTornado.Text = "Save and Adjust"; + this.btnSettingTornado.Click += new System.EventHandler(this.btnSettingTornado_Click); + // + // labelControl26 + // + this.labelControl26.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.labelControl26.Appearance.Options.UseFont = true; + this.labelControl26.Location = new System.Drawing.Point(111, 100); + this.labelControl26.Name = "labelControl26"; + this.labelControl26.Size = new System.Drawing.Size(43, 21); + this.labelControl26.TabIndex = 658; + this.labelControl26.Text = "DB IP"; + // + // txtDBIP + // + this.txtDBIP.EditValue = "127.0.0.1"; + this.txtDBIP.Location = new System.Drawing.Point(179, 97); + this.txtDBIP.Name = "txtDBIP"; + this.txtDBIP.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.txtDBIP.Properties.Appearance.Options.UseFont = true; + this.txtDBIP.Properties.Appearance.Options.UseTextOptions = true; + this.txtDBIP.Properties.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.txtDBIP.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.RegExpMaskManager)); + this.txtDBIP.Properties.MaskSettings.Set("MaskManagerSignature", "isOptimistic=False"); + this.txtDBIP.Properties.MaskSettings.Set("mask", "(([01]?[0-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))\\.(([01]?[0-9]?[0-9])|(2[0-4][0-9])|(" + + "25[0-5]))\\.(([01]?[0-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))\\.(([01]?[0-9]?[0-9])|(2[" + + "0-4][0-9])|(25[0-5]))"); + this.txtDBIP.Properties.UseMaskAsDisplayFormat = true; + this.txtDBIP.Size = new System.Drawing.Size(156, 28); + this.txtDBIP.TabIndex = 654; + // + // fluentDesignFormContainer1 + // + this.defaultToolTipController1.SetAllowHtmlText(this.fluentDesignFormContainer1, DevExpress.Utils.DefaultBoolean.Default); + this.fluentDesignFormContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.fluentDesignFormContainer1.Location = new System.Drawing.Point(0, 131); + this.fluentDesignFormContainer1.Name = "fluentDesignFormContainer1"; + this.fluentDesignFormContainer1.Size = new System.Drawing.Size(1918, 917); + this.fluentDesignFormContainer1.TabIndex = 4; + // + // navigationPage1 + // + this.defaultToolTipController1.SetAllowHtmlText(this.navigationPage1, DevExpress.Utils.DefaultBoolean.Default); + this.navigationPage1.Controls.Add(this.groupControl5); + this.navigationPage1.Name = "navigationPage1"; + this.navigationPage1.Size = new System.Drawing.Size(1918, 917); + // + // groupControl5 + // + this.groupControl5.AppearanceCaption.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.groupControl5.AppearanceCaption.Options.UseFont = true; + this.groupControl5.Controls.Add(this.labelControl21); + this.groupControl5.Controls.Add(this.btnUserRemove); + this.groupControl5.Controls.Add(this.listBoxControlUsers); + this.groupControl5.Controls.Add(this.btnUserAdd); + this.groupControl5.Controls.Add(this.txtPassWord2); + this.groupControl5.Controls.Add(this.txtPassWord1); + this.groupControl5.Controls.Add(this.labelControl20); + this.groupControl5.Controls.Add(this.labelControl19); + this.groupControl5.Controls.Add(this.txtUserID); + this.groupControl5.Controls.Add(this.labelControl18); + this.groupControl5.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupControl5.Location = new System.Drawing.Point(0, 0); + this.groupControl5.Margin = new System.Windows.Forms.Padding(2); + this.groupControl5.Name = "groupControl5"; + this.groupControl5.Size = new System.Drawing.Size(1918, 917); + this.groupControl5.TabIndex = 873; + this.groupControl5.Text = "계정 관리"; + this.groupControl5.ToolTipController = this.defaultToolTipController1.DefaultController; + // + // labelControl21 + // + this.labelControl21.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl21.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl21.Appearance.Options.UseFont = true; + this.labelControl21.Appearance.Options.UseForeColor = true; + this.labelControl21.Location = new System.Drawing.Point(848, 44); + this.labelControl21.Name = "labelControl21"; + this.labelControl21.Size = new System.Drawing.Size(121, 25); + this.labelControl21.TabIndex = 1052; + this.labelControl21.Text = "등록된 아이디"; + // + // btnUserRemove + // + this.btnUserRemove.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnUserRemove.Appearance.Options.UseFont = true; + this.btnUserRemove.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnUserRemove.ImageOptions.SvgImage"))); + this.btnUserRemove.Location = new System.Drawing.Point(1345, 255); + this.btnUserRemove.Name = "btnUserRemove"; + this.btnUserRemove.Size = new System.Drawing.Size(238, 118); + this.btnUserRemove.TabIndex = 1051; + this.btnUserRemove.Text = "Select User Remove"; + this.btnUserRemove.Click += new System.EventHandler(this.btnUserRemove_Click); + // + // listBoxControlUsers + // + this.listBoxControlUsers.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.listBoxControlUsers.Appearance.Options.UseFont = true; + this.listBoxControlUsers.Location = new System.Drawing.Point(848, 84); + this.listBoxControlUsers.Name = "listBoxControlUsers"; + this.listBoxControlUsers.Size = new System.Drawing.Size(450, 803); + this.listBoxControlUsers.TabIndex = 1050; + // + // btnUserAdd + // + this.btnUserAdd.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnUserAdd.Appearance.Options.UseFont = true; + this.btnUserAdd.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnUserAdd.ImageOptions.SvgImage"))); + this.btnUserAdd.Location = new System.Drawing.Point(240, 255); + this.btnUserAdd.Name = "btnUserAdd"; + this.btnUserAdd.Size = new System.Drawing.Size(238, 118); + this.btnUserAdd.TabIndex = 1049; + this.btnUserAdd.Text = "User Add"; + this.btnUserAdd.Click += new System.EventHandler(this.btnUserAdd_Click); + // + // txtPassWord2 + // + this.txtPassWord2.Location = new System.Drawing.Point(167, 190); + this.txtPassWord2.MenuManager = this.toolbarFormManager1; + this.txtPassWord2.Name = "txtPassWord2"; + this.txtPassWord2.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.txtPassWord2.Properties.Appearance.Options.UseFont = true; + this.txtPassWord2.Properties.UseSystemPasswordChar = true; + this.txtPassWord2.Size = new System.Drawing.Size(311, 32); + this.txtPassWord2.TabIndex = 1048; + // + // txtPassWord1 + // + this.txtPassWord1.Location = new System.Drawing.Point(167, 139); + this.txtPassWord1.MenuManager = this.toolbarFormManager1; + this.txtPassWord1.Name = "txtPassWord1"; + this.txtPassWord1.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.txtPassWord1.Properties.Appearance.Options.UseFont = true; + this.txtPassWord1.Properties.UseSystemPasswordChar = true; + this.txtPassWord1.Size = new System.Drawing.Size(311, 32); + this.txtPassWord1.TabIndex = 1047; + // + // labelControl20 + // + this.labelControl20.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl20.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl20.Appearance.Options.UseFont = true; + this.labelControl20.Appearance.Options.UseForeColor = true; + this.labelControl20.Location = new System.Drawing.Point(97, 193); + this.labelControl20.Name = "labelControl20"; + this.labelControl20.Size = new System.Drawing.Size(38, 25); + this.labelControl20.TabIndex = 1046; + this.labelControl20.Text = "확인"; + // + // labelControl19 + // + this.labelControl19.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl19.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl19.Appearance.Options.UseFont = true; + this.labelControl19.Appearance.Options.UseForeColor = true; + this.labelControl19.Location = new System.Drawing.Point(97, 142); + this.labelControl19.Name = "labelControl19"; + this.labelControl19.Size = new System.Drawing.Size(38, 25); + this.labelControl19.TabIndex = 1044; + this.labelControl19.Text = "비번"; + // + // txtUserID + // + this.txtUserID.Location = new System.Drawing.Point(167, 90); + this.txtUserID.MenuManager = this.toolbarFormManager1; + this.txtUserID.Name = "txtUserID"; + this.txtUserID.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.txtUserID.Properties.Appearance.Options.UseFont = true; + this.txtUserID.Size = new System.Drawing.Size(311, 32); + this.txtUserID.TabIndex = 1043; + // + // labelControl18 + // + this.labelControl18.Appearance.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.labelControl18.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120))))); + this.labelControl18.Appearance.Options.UseFont = true; + this.labelControl18.Appearance.Options.UseForeColor = true; + this.labelControl18.Location = new System.Drawing.Point(97, 93); + this.labelControl18.Name = "labelControl18"; + this.labelControl18.Size = new System.Drawing.Size(57, 25); + this.labelControl18.TabIndex = 1042; + this.labelControl18.Text = "아이디"; + // + // gridControlSchedule + // + this.gridControlSchedule.Dock = System.Windows.Forms.DockStyle.Left; + this.gridControlSchedule.Font = new System.Drawing.Font("맑은 고딕", 9.75F); + this.gridControlSchedule.Location = new System.Drawing.Point(0, 0); + this.gridControlSchedule.MainView = this.gridViewSchedule; + this.gridControlSchedule.MenuManager = this.toolbarFormManager1; + this.gridControlSchedule.Name = "gridControlSchedule"; + this.gridControlSchedule.Size = new System.Drawing.Size(1383, 917); + this.gridControlSchedule.TabIndex = 3; + this.gridControlSchedule.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { + this.gridViewSchedule}); + this.gridControlSchedule.KeyDown += new System.Windows.Forms.KeyEventHandler(this.gridControlSchedule_KeyDown); + // + // gridViewSchedule + // + this.gridViewSchedule.GridControl = this.gridControlSchedule; + this.gridViewSchedule.Name = "gridViewSchedule"; + this.gridViewSchedule.OptionsBehavior.Editable = false; + this.gridViewSchedule.OptionsMenu.EnableColumnMenu = false; + this.gridViewSchedule.OptionsMenu.EnableFooterMenu = false; + this.gridViewSchedule.OptionsMenu.EnableGroupPanelMenu = false; + this.gridViewSchedule.OptionsMenu.ShowAutoFilterRowItem = false; + this.gridViewSchedule.OptionsMenu.ShowGroupSortSummaryItems = false; + this.gridViewSchedule.OptionsMenu.ShowSplitItem = false; + this.gridViewSchedule.OptionsSelection.EnableAppearanceFocusedCell = false; + this.gridViewSchedule.OptionsSelection.MultiSelect = true; + this.gridViewSchedule.OptionsView.ShowGroupPanel = false; + this.gridViewSchedule.VertScrollVisibility = DevExpress.XtraGrid.Views.Base.ScrollVisibility.Never; + this.gridViewSchedule.SelectionChanged += new DevExpress.Data.SelectionChangedEventHandler(this.gridViewSchedule_SelectionChanged); + // + // employeesLabelControl + // + this.employeesLabelControl.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(70)))), ((int)(((byte)(70))))); + this.employeesLabelControl.Appearance.Font = new System.Drawing.Font("Tahoma", 25.25F); + this.employeesLabelControl.Appearance.ForeColor = System.Drawing.Color.Gray; + this.employeesLabelControl.Appearance.Options.UseBackColor = true; + this.employeesLabelControl.Appearance.Options.UseFont = true; + this.employeesLabelControl.Appearance.Options.UseForeColor = true; + this.employeesLabelControl.Appearance.Options.UseTextOptions = true; + this.employeesLabelControl.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + this.employeesLabelControl.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + this.employeesLabelControl.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.employeesLabelControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.employeesLabelControl.Location = new System.Drawing.Point(0, 0); + this.employeesLabelControl.Name = "employeesLabelControl"; + this.employeesLabelControl.Size = new System.Drawing.Size(1918, 917); + this.employeesLabelControl.TabIndex = 2; + this.employeesLabelControl.Text = "Schedule"; + // + // gaugeControl1 + // + this.gaugeControl1.AutoLayout = false; + this.gaugeControl1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(89)))), ((int)(((byte)(120))))); + this.gaugeControl1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + this.gaugeControl1.Gauges.AddRange(new DevExpress.XtraGauges.Base.IGauge[] { + this.digitalGauge1}); + this.gaugeControl1.Location = new System.Drawing.Point(1045, 39); + this.gaugeControl1.Name = "gaugeControl1"; + this.gaugeControl1.Size = new System.Drawing.Size(262, 86); + this.gaugeControl1.TabIndex = 3; + this.gaugeControl1.ToolTipController = this.defaultToolTipController1.DefaultController; + // + // digitalGauge1 + // + this.digitalGauge1.AppearanceOff.ContentBrush = new DevExpress.XtraGauges.Core.Drawing.SolidBrushObject("Color:#0FFF5000"); + this.digitalGauge1.AppearanceOn.ContentBrush = new DevExpress.XtraGauges.Core.Drawing.SolidBrushObject("Color:#FF5000"); + this.digitalGauge1.BackgroundLayers.AddRange(new DevExpress.XtraGauges.Win.Gauges.Digital.DigitalBackgroundLayerComponent[] { + this.digitalBackgroundLayerComponent1}); + this.digitalGauge1.Bounds = new System.Drawing.Rectangle(8, 2, 238, 78); + this.digitalGauge1.DigitCount = 5; + this.digitalGauge1.Name = "digitalGauge1"; + this.digitalGauge1.Text = "00,000"; + // + // digitalBackgroundLayerComponent1 + // + this.digitalBackgroundLayerComponent1.BottomRight = new DevExpress.XtraGauges.Core.Base.PointF2D(259.8125F, 99.9625F); + this.digitalBackgroundLayerComponent1.Name = "digitalBackgroundLayerComponent13"; + this.digitalBackgroundLayerComponent1.ShapeType = DevExpress.XtraGauges.Core.Model.DigitalBackgroundShapeSetType.Style3; + this.digitalBackgroundLayerComponent1.TopLeft = new DevExpress.XtraGauges.Core.Base.PointF2D(20F, 0F); + this.digitalBackgroundLayerComponent1.ZOrder = 1000; + // + // timerClock + // + this.timerClock.Enabled = true; + this.timerClock.Interval = 500; + this.timerClock.Tick += new System.EventHandler(this.timerClock_Tick); + // + // toolbarFormControl1 + // + this.toolbarFormControl1.Location = new System.Drawing.Point(0, 0); + this.toolbarFormControl1.Manager = this.toolbarFormManager1; + this.toolbarFormControl1.Name = "toolbarFormControl1"; + this.toolbarFormControl1.Size = new System.Drawing.Size(1918, 31); + this.toolbarFormControl1.TabIndex = 5; + this.toolbarFormControl1.TabStop = false; + this.toolbarFormControl1.ToolbarForm = this; + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + this.openFileDialog1.Filter = "T2S파일|*.t2s"; + this.openFileDialog1.Multiselect = true; + // + // lblIsAutoDisplaying + // + this.lblIsAutoDisplaying.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(89)))), ((int)(((byte)(120))))); + this.lblIsAutoDisplaying.Appearance.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblIsAutoDisplaying.Appearance.ForeColor = System.Drawing.Color.Snow; + this.lblIsAutoDisplaying.Appearance.Options.UseBackColor = true; + this.lblIsAutoDisplaying.Appearance.Options.UseFont = true; + this.lblIsAutoDisplaying.Appearance.Options.UseForeColor = true; + this.lblIsAutoDisplaying.Location = new System.Drawing.Point(1313, 52); + this.lblIsAutoDisplaying.Name = "lblIsAutoDisplaying"; + this.lblIsAutoDisplaying.Size = new System.Drawing.Size(127, 28); + this.lblIsAutoDisplaying.TabIndex = 566; + this.lblIsAutoDisplaying.Text = "자동송출 꺼짐"; + // + // toggleSwitch1 + // + this.toggleSwitch1.Location = new System.Drawing.Point(1332, 86); + this.toggleSwitch1.MenuManager = this.toolbarFormManager1; + this.toggleSwitch1.Name = "toggleSwitch1"; + this.toggleSwitch1.Properties.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(89)))), ((int)(((byte)(120))))); + this.toggleSwitch1.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 15F); + this.toggleSwitch1.Properties.Appearance.ForeColor = System.Drawing.Color.White; + this.toggleSwitch1.Properties.Appearance.Options.UseBackColor = true; + this.toggleSwitch1.Properties.Appearance.Options.UseFont = true; + this.toggleSwitch1.Properties.Appearance.Options.UseForeColor = true; + this.toggleSwitch1.Properties.GlyphAlignment = DevExpress.Utils.HorzAlignment.Default; + this.toggleSwitch1.Properties.OffText = ""; + this.toggleSwitch1.Properties.OnText = ""; + this.toggleSwitch1.Properties.ShowText = false; + this.toggleSwitch1.Size = new System.Drawing.Size(99, 31); + this.toggleSwitch1.TabIndex = 565; + this.toggleSwitch1.Toggled += new System.EventHandler(this.toggleSwitch1_Toggled); + // + // btnScheduleCopy + // + this.btnScheduleCopy.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnScheduleCopy.Appearance.Options.UseFont = true; + this.btnScheduleCopy.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnScheduleCopy.ImageOptions.SvgImage"))); + this.btnScheduleCopy.Location = new System.Drawing.Point(761, 79); + this.btnScheduleCopy.Name = "btnScheduleCopy"; + this.btnScheduleCopy.Size = new System.Drawing.Size(259, 44); + this.btnScheduleCopy.TabIndex = 1079; + this.btnScheduleCopy.Text = "CABLE 스케쥴 복사해오기"; + this.btnScheduleCopy.Visible = false; + this.btnScheduleCopy.Click += new System.EventHandler(this.btnScheduleCopy_Click); + // + // timeEdit2 + // + this.timeEdit2.EditValue = new System.DateTime(2025, 1, 1, 0, 0, 0, 0); + this.timeEdit2.Location = new System.Drawing.Point(761, 59); + this.timeEdit2.MenuManager = this.toolbarFormManager1; + this.timeEdit2.Name = "timeEdit2"; + this.timeEdit2.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold); + this.timeEdit2.Properties.Appearance.Options.UseFont = true; + this.timeEdit2.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.timeEdit2.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.timeEdit2.Properties.CalendarTimeProperties.DisplayFormat.FormatString = "yyyy년 M월 d일 dddd"; + this.timeEdit2.Properties.DisplayFormat.FormatString = "yyyy년 M월 d일 dddd"; + this.timeEdit2.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; + this.timeEdit2.Size = new System.Drawing.Size(259, 34); + this.timeEdit2.TabIndex = 1084; + this.timeEdit2.EditValueChanged += new System.EventHandler(this.timeEdit2_EditValueChanged); + // + // btnSyncData + // + this.btnSyncData.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnSyncData.Appearance.Options.UseFont = true; + this.btnSyncData.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnSyncData.ImageOptions.SvgImage"))); + this.btnSyncData.Location = new System.Drawing.Point(1769, 44); + this.btnSyncData.Name = "btnSyncData"; + this.btnSyncData.Size = new System.Drawing.Size(119, 36); + this.btnSyncData.TabIndex = 1095; + this.btnSyncData.Text = "DB 수동 동기화"; + this.btnSyncData.Visible = false; + this.btnSyncData.Click += new System.EventHandler(this.btnSyncData_Click); + // + // timerSync + // + this.timerSync.Enabled = true; + this.timerSync.Interval = 60000; + this.timerSync.Tick += new System.EventHandler(this.timerSync_Tick); + // + // picTornado + // + this.picTornado.Cursor = System.Windows.Forms.Cursors.Default; + this.picTornado.EditValue = ((object)(resources.GetObject("picTornado.EditValue"))); + this.picTornado.Location = new System.Drawing.Point(1757, 42); + this.picTornado.Name = "picTornado"; + this.picTornado.Properties.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(89)))), ((int)(((byte)(120))))); + this.picTornado.Properties.Appearance.Options.UseBackColor = true; + this.picTornado.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + this.picTornado.Properties.ShowCameraMenuItem = DevExpress.XtraEditors.Controls.CameraMenuItemVisibility.Auto; + this.picTornado.Properties.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Stretch; + this.picTornado.Size = new System.Drawing.Size(39, 35); + this.picTornado.TabIndex = 1092; + // + // lblConnectionTornado2 + // + this.lblConnectionTornado2.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.lblConnectionTornado2.Appearance.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lblConnectionTornado2.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.lblConnectionTornado2.Appearance.Options.UseBackColor = true; + this.lblConnectionTornado2.Appearance.Options.UseFont = true; + this.lblConnectionTornado2.Appearance.Options.UseForeColor = true; + this.lblConnectionTornado2.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; + this.lblConnectionTornado2.Location = new System.Drawing.Point(1801, 47); + this.lblConnectionTornado2.Margin = new System.Windows.Forms.Padding(2); + this.lblConnectionTornado2.Name = "lblConnectionTornado2"; + this.lblConnectionTornado2.Size = new System.Drawing.Size(106, 24); + this.lblConnectionTornado2.TabIndex = 1112; + // + // lblisCable + // + this.lblisCable.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(89)))), ((int)(((byte)(120))))); + this.lblisCable.Appearance.Font = new System.Drawing.Font("맑은 고딕", 18F, System.Drawing.FontStyle.Bold); + this.lblisCable.Appearance.ForeColor = System.Drawing.Color.Snow; + this.lblisCable.Appearance.Options.UseBackColor = true; + this.lblisCable.Appearance.Options.UseFont = true; + this.lblisCable.Appearance.Options.UseForeColor = true; + this.lblisCable.Location = new System.Drawing.Point(666, 62); + this.lblisCable.Name = "lblisCable"; + this.lblisCable.Size = new System.Drawing.Size(53, 32); + this.lblisCable.TabIndex = 1117; + this.lblisCable.Text = "IPTV"; + // + // btnDBSave + // + this.btnDBSave.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnDBSave.Appearance.Options.UseFont = true; + this.btnDBSave.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnDBSave.ImageOptions.SvgImage"))); + this.btnDBSave.Location = new System.Drawing.Point(1578, 38); + this.btnDBSave.Name = "btnDBSave"; + this.btnDBSave.Size = new System.Drawing.Size(160, 40); + this.btnDBSave.TabIndex = 1122; + this.btnDBSave.Text = "DB 저장"; + this.btnDBSave.Click += new System.EventHandler(this.btnDBSave_Click); + // + // btnDBLoad + // + this.btnDBLoad.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnDBLoad.Appearance.Options.UseFont = true; + this.btnDBLoad.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnDBLoad.ImageOptions.SvgImage"))); + this.btnDBLoad.Location = new System.Drawing.Point(1578, 83); + this.btnDBLoad.Name = "btnDBLoad"; + this.btnDBLoad.Size = new System.Drawing.Size(160, 40); + this.btnDBLoad.TabIndex = 1123; + this.btnDBLoad.Text = "DB 로드"; + this.btnDBLoad.Click += new System.EventHandler(this.btnDBLoad_Click); + // + // labelControl32 + // + this.labelControl32.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(89)))), ((int)(((byte)(120))))); + this.labelControl32.Appearance.Font = new System.Drawing.Font("맑은 고딕", 13F, System.Drawing.FontStyle.Bold); + this.labelControl32.Appearance.ForeColor = System.Drawing.Color.Snow; + this.labelControl32.Appearance.Options.UseBackColor = true; + this.labelControl32.Appearance.Options.UseFont = true; + this.labelControl32.Appearance.Options.UseForeColor = true; + this.labelControl32.Location = new System.Drawing.Point(1468, 89); + this.labelControl32.Name = "labelControl32"; + this.labelControl32.Size = new System.Drawing.Size(45, 23); + this.labelControl32.TabIndex = 1124; + this.labelControl32.Text = "Index"; + // + // comboBoxEdit3 + // + this.comboBoxEdit3.EditValue = "1"; + this.comboBoxEdit3.Location = new System.Drawing.Point(1519, 86); + this.comboBoxEdit3.MenuManager = this.toolbarFormManager1; + this.comboBoxEdit3.Name = "comboBoxEdit3"; + this.comboBoxEdit3.Properties.Appearance.Font = new System.Drawing.Font("맑은 고딕", 13F, System.Drawing.FontStyle.Bold); + this.comboBoxEdit3.Properties.Appearance.Options.UseFont = true; + this.comboBoxEdit3.Properties.AppearanceDropDown.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold); + this.comboBoxEdit3.Properties.AppearanceDropDown.Options.UseFont = true; + this.comboBoxEdit3.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.comboBoxEdit3.Properties.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5"}); + this.comboBoxEdit3.Size = new System.Drawing.Size(41, 30); + this.comboBoxEdit3.TabIndex = 1125; + // + // labelControl38 + // + this.labelControl38.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(78)))), ((int)(((byte)(89)))), ((int)(((byte)(120))))); + this.labelControl38.Appearance.Font = new System.Drawing.Font("맑은 고딕", 13F, System.Drawing.FontStyle.Bold); + this.labelControl38.Appearance.ForeColor = System.Drawing.Color.Snow; + this.labelControl38.Appearance.Options.UseBackColor = true; + this.labelControl38.Appearance.Options.UseFont = true; + this.labelControl38.Appearance.Options.UseForeColor = true; + this.labelControl38.Location = new System.Drawing.Point(1485, 52); + this.labelControl38.Name = "labelControl38"; + this.labelControl38.Size = new System.Drawing.Size(66, 25); + this.labelControl38.TabIndex = 1131; + this.labelControl38.Text = "DB 선택"; + // + // btnDBCrossLoad + // + this.btnDBCrossLoad.Appearance.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Bold); + this.btnDBCrossLoad.Appearance.Options.UseFont = true; + this.btnDBCrossLoad.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("btnDBCrossLoad.ImageOptions.SvgImage"))); + this.btnDBCrossLoad.Location = new System.Drawing.Point(1744, 83); + this.btnDBCrossLoad.Name = "btnDBCrossLoad"; + this.btnDBCrossLoad.Size = new System.Drawing.Size(167, 40); + this.btnDBCrossLoad.TabIndex = 1136; + this.btnDBCrossLoad.Text = "DB 크로스 로드"; + this.btnDBCrossLoad.Click += new System.EventHandler(this.btnDBCrossLoad_Click); + // + // MainForm + // + this.defaultToolTipController1.SetAllowHtmlText(this, DevExpress.Utils.DefaultBoolean.Default); + this.Appearance.BackColor = System.Drawing.Color.White; + this.Appearance.Options.UseBackColor = true; + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1918, 1048); + this.Controls.Add(this.btnDBCrossLoad); + this.Controls.Add(this.labelControl38); + this.Controls.Add(this.comboBoxEdit3); + this.Controls.Add(this.labelControl32); + this.Controls.Add(this.btnDBLoad); + this.Controls.Add(this.btnDBSave); + this.Controls.Add(this.lblisCable); + this.Controls.Add(this.lblConnectionTornado2); + this.Controls.Add(this.picTornado); + this.Controls.Add(this.btnSyncData); + this.Controls.Add(this.timeEdit2); + this.Controls.Add(this.btnScheduleCopy); + this.Controls.Add(this.lblIsAutoDisplaying); + this.Controls.Add(this.toggleSwitch1); + this.Controls.Add(this.gaugeControl1); + this.Controls.Add(this.navigationFrame); + this.Controls.Add(this.fluentDesignFormContainer1); + this.Controls.Add(this.tileBar); + this.Controls.Add(this.barDockControlLeft); + this.Controls.Add(this.barDockControlRight); + this.Controls.Add(this.barDockControlBottom); + this.Controls.Add(this.barDockControlTop); + this.Controls.Add(this.toolbarFormControl1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.IconOptions.Image = ((System.Drawing.Image)(resources.GetObject("MainForm.IconOptions.Image"))); + this.MaximizeBox = false; + this.Name = "MainForm"; + this.Text = "Shinsegae Live Shopping Automation Solution [26.02.19]"; + this.ToolbarFormControl = this.toolbarFormControl1; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); + this.Shown += new System.EventHandler(this.MainForm_ShownAsync); + ((System.ComponentModel.ISupportInitialize)(this.navigationFrame)).EndInit(); + this.navigationFrame.ResumeLayout(false); + this.employeesNavigationPage.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.groupControl3)).EndInit(); + this.groupControl3.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.chk모든상품적용.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.toolbarFormManager1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.chk송출금지무시.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureEdit1.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeSpanRepeat.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cmbSceneGroup.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.chkUseTapeTime.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit3.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeSpanEdit1.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeEdit1.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit1.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit2.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeSpanEdit5.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.listBoxControl5)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.textEdit8.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cmbSceneSchedule.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cmbScheduleSelectedLayer.Properties)).EndInit(); + this.customersNavigationPage.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.xtraTabControl1)).EndInit(); + this.xtraTabControl1.ResumeLayout(false); + this.xtraTabPage1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).EndInit(); + this.groupControl1.ResumeLayout(false); + this.groupControl1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.txtThumbnailFrame.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtGroupAliasName.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit1.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cmbSceneListGroup.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtVariableListText.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtVariableListTag.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.listBoxControl2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtSceneListTime.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtSceneListPath.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtSceneListName.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxThumbnailSceneList)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.listBoxControl1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cmbSceneListLayer.Properties)).EndInit(); + this.navigationPage2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.groupControl2)).EndInit(); + this.groupControl2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.groupControl13)).EndInit(); + this.groupControl13.ResumeLayout(false); + this.groupControl13.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit2.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl6)).EndInit(); + this.groupControl6.ResumeLayout(false); + this.groupControl6.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.txtTimeGap.Properties)).EndInit(); + this.groupBoxAdminOnly.ResumeLayout(false); + this.groupBoxAdminOnly.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.toggleSwitchChannel.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.toggleSwitchAutoSync.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.toggleSwitch수정모드.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.toggleSwitchDone송출보지않기.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeSpanEditForbidEnd.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeSpanEditForbidStart.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtDissolveTime.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtDBIP.Properties)).EndInit(); + this.navigationPage1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.groupControl5)).EndInit(); + this.groupControl5.ResumeLayout(false); + this.groupControl5.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.listBoxControlUsers)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtPassWord2.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtPassWord1.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtUserID.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.gridControlSchedule)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.gridViewSchedule)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.digitalGauge1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.digitalBackgroundLayerComponent1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.toolbarFormControl1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.toggleSwitch1.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeEdit2.Properties.CalendarTimeProperties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.timeEdit2.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.picTornado.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit3.Properties)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private DevExpress.XtraBars.Navigation.TileBar tileBar; + private DevExpress.XtraBars.Navigation.NavigationFrame navigationFrame; + private DevExpress.XtraBars.Navigation.TileBarGroup tileBarGroupTables; + private DevExpress.XtraBars.Navigation.TileBarItem customersTileBarItem; + private DevExpress.XtraBars.Navigation.NavigationPage employeesNavigationPage; + private DevExpress.XtraBars.Navigation.NavigationPage customersNavigationPage; + private DevExpress.XtraEditors.LabelControl employeesLabelControl; + private DevExpress.XtraEditors.LabelControl customersLabelControl; + private DevExpress.XtraGauges.Win.GaugeControl gaugeControl1; + private System.Windows.Forms.Timer timerClock; + private DevExpress.XtraBars.FluentDesignSystem.FluentDesignFormContainer fluentDesignFormContainer1; + private DevExpress.XtraBars.ToolbarForm.ToolbarFormControl toolbarFormControl1; + private DevExpress.XtraBars.ToolbarForm.ToolbarFormManager toolbarFormManager1; + private DevExpress.XtraBars.BarDockControl barDockControlTop; + private DevExpress.XtraBars.BarDockControl barDockControlBottom; + private DevExpress.XtraBars.BarDockControl barDockControlLeft; + private DevExpress.XtraBars.BarDockControl barDockControlRight; + private DevExpress.XtraGrid.GridControl gridControlSchedule; + private DevExpress.XtraBars.Navigation.TileBarItem tileBarItem1; + private DevExpress.XtraBars.Navigation.TileBarItem tileBarItem2; + private DevExpress.XtraGrid.Views.Grid.GridView gridViewSchedule; + public DevExpress.XtraEditors.LabelControl labelControl1; + public DevExpress.XtraEditors.LabelControl labelControl3; + private DevExpress.XtraEditors.ToggleSwitch toggleSwitchChannel; + private DevExpress.XtraEditors.LabelControl lblSwitchChannel; + private DevExpress.XtraEditors.GroupControl groupControl1; + public DevExpress.XtraEditors.SimpleButton btnSceneLoad; + public DevExpress.XtraEditors.LabelControl labelControl14; + public DevExpress.XtraEditors.LabelControl labelControl12; + public DevExpress.XtraEditors.SimpleButton btnSceneRemove; + private DevExpress.XtraEditors.TextEdit txtSceneListName; + public DevExpress.XtraEditors.LabelControl labelControl27; + public DevExpress.XtraEditors.LabelControl labelControl35; + private DevExpress.XtraEditors.TimeSpanEdit timeSpanEdit5; + public DevExpress.XtraEditors.LabelControl labelControl37; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private DevExpress.XtraEditors.TextEdit txtSceneListPath; + public DevExpress.XtraEditors.LabelControl labelControl4; + private DevExpress.XtraEditors.TextEdit txtSceneListTime; + public DevExpress.XtraEditors.LabelControl labelControl10; + public DevExpress.XtraEditors.LabelControl labelControl41; + private System.Windows.Forms.PictureBox pictureBoxThumbnailSceneList; + private DevExpress.XtraEditors.TextEdit txtVariableListText; + public DevExpress.XtraEditors.LabelControl labelControl44; + private DevExpress.XtraEditors.TextEdit txtVariableListTag; + public DevExpress.XtraEditors.LabelControl labelControl43; + private DevExpress.XtraEditors.ListBoxControl listBoxControl2; + public DevExpress.XtraEditors.LabelControl labelControl42; + public DevExpress.XtraEditors.SimpleButton btnSceneAdd; + public DevExpress.XtraEditors.SimpleButton btnVariableListDel; + public DevExpress.XtraEditors.SimpleButton btnVariableListAdd; + private DevExpress.XtraEditors.ListBoxControl listBoxControl1; + public SimpleButton simpleButton3; + private TextEdit textEdit1; + public LabelControl labelControl2; + private TextEdit textEdit2; + public LabelControl labelControl46; + private ListBoxControl listBoxControl5; + public LabelControl labelControl47; + private TextEdit textEdit8; + public LabelControl labelControl9; + private System.Windows.Forms.PictureBox pictureBox1; + private ComboBoxEdit cmbSceneSchedule; + public SimpleButton simpleButton8; + public SimpleButton simpleButton7; + private System.Windows.Forms.Panel panel1; + private GroupControl groupControl3; + public LabelControl labelControl29; + private TimeEdit timeEdit1; + private TimeSpanEdit timeSpanEdit1; + public LabelControl labelControl30; + private TextEdit textEdit3; + public LabelControl labelControl31; + private LabelControl lblIsAutoDisplaying; + private ToggleSwitch toggleSwitch1; + public SimpleButton simpleButton9; + public SimpleButton simpleButton2; + public SimpleButton btnScheduleCopy; + private DevExpress.XtraGauges.Win.Gauges.Digital.DigitalGauge digitalGauge1; + private DevExpress.XtraGauges.Win.Gauges.Digital.DigitalBackgroundLayerComponent digitalBackgroundLayerComponent1; + private ComboBoxEdit cmbSceneListLayer; + private ComboBoxEdit cmbScheduleSelectedLayer; + private DevExpress.XtraBars.Navigation.NavigationPage navigationPage2; + private GroupControl groupControl2; + private System.Windows.Forms.RichTextBox txtLog; + private GroupControl groupControl13; + public LabelControl lbl선택라인상태글자색; + public LabelControl lbl선택라인상태배경색; + private System.Windows.Forms.Label label13; + public LabelControl lbl선택라인종류글자색; + public LabelControl lbl선택라인종류배경색; + private System.Windows.Forms.Label label12; + public LabelControl lbl종류송출글자색; + public LabelControl lbl종류송출배경색; + private System.Windows.Forms.Label label10; + public LabelControl lbl종류스케쥴글자색; + public LabelControl lbl종류스케쥴배경색; + private System.Windows.Forms.Label label11; + public LabelControl lblNEXT송출글자색; + public LabelControl lblNEXT송출배경색; + private System.Windows.Forms.Label label9; + public LabelControl lbl완료상태글자색; + public LabelControl lbl완료상태배경색; + private System.Windows.Forms.Label label8; + public LabelControl lbl완료송출글자색; + public LabelControl lbl완료송출배경색; + private System.Windows.Forms.Label label7; + public LabelControl lblNEXT상태글자색; + public LabelControl lblNEXT상태배경색; + public LabelControl lblNEXT스케쥴글자색; + public LabelControl lblNEXT스케쥴배경색; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + public LabelControl lbl선택라인글자색; + public LabelControl lbl선택라인배경색; + public LabelControl lblOnAir상태글자색; + public LabelControl lblOnAir상태배경색; + public LabelControl lblOnAir송출글자색; + public LabelControl lblOnAir송출배경색; + public LabelControl lblOnAir스케쥴글자색; + public LabelControl lblOnAir스케쥴배경색; + public LabelControl lbl완료스케쥴글자색; + public LabelControl lbl완료스케쥴배경색; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label3; + private LabelControl labelControl92; + private System.Windows.Forms.Label label69; + private System.Windows.Forms.Label label73; + private System.Windows.Forms.Label label61; + private GroupControl groupControl6; + private LabelControl labelControl34; + public LabelControl labelControl33; + public TextEdit txtDissolveTime; + private LabelControl labelControl22; + public SimpleButton btnSettingTornado; + private LabelControl labelControl26; + public TextEdit txtDBIP; + private DateEdit timeEdit2; + private System.Windows.Forms.RichTextBox richTextBox1; + private XtraTabControl xtraTabControl1; + private XtraTabPage xtraTabPage1; + private DevExpress.Utils.DefaultToolTipController defaultToolTipController1; + private LabelControl lblDoneDisplayInvisible; + private ToggleSwitch toggleSwitchDone송출보지않기; + private CheckEdit chkUseTapeTime; + private TimeSpanEdit timeSpanEditForbidEnd; + private LabelControl labelControl11; + private LabelControl labelControl13; + private TimeSpanEdit timeSpanEditForbidStart; + private LabelControl labelControl8; + private LabelControl labelControl6; + private LabelControl labelControl7; + public LabelControl labelControl17; + private ComboBoxEdit cmbSceneGroup; + private DevExpress.XtraBars.Navigation.TileBarItem tileBarItem3; + private DevExpress.XtraBars.Navigation.NavigationPage navigationPage1; + private GroupControl groupControl5; + public SimpleButton btnUserRemove; + private ListBoxControl listBoxControlUsers; + public SimpleButton btnUserAdd; + private TextEdit txtPassWord2; + private TextEdit txtPassWord1; + public LabelControl labelControl20; + public LabelControl labelControl19; + private TextEdit txtUserID; + public LabelControl labelControl18; + public LabelControl labelControl21; + public SimpleButton btnSyncData; + private LabelControl lbl수정모드; + private ToggleSwitch toggleSwitch수정모드; + private LabelControl lblAutoSync; + private ToggleSwitch toggleSwitchAutoSync; + private LabelControl labelControl23; + private System.Windows.Forms.Timer timerSync; + public LabelControl labelControl24; + private ComboBoxEdit cmbSceneListGroup; + public LabelControl labelControl16; + private ComboBoxEdit comboBoxEdit1; + public SimpleButton simpleButton1; + public LabelControl labelControl28; + private TimeSpanEdit timeSpanRepeat; + public LabelControl labelControl25; + public LabelControl lblConnectionTornado2; + public PictureEdit picTornado; + public PictureEdit pictureEdit1; + private LabelControl lblisCable; + private System.Windows.Forms.GroupBox groupBoxAdminOnly; + public LabelControl lblGroupAliasName; + private TextEdit txtGroupAliasName; + public LabelControl labelControl36; + public SimpleButton simpleButton4; + public LabelControl labelControl5; + private CheckEdit chk송출금지무시; + public SimpleButton btnThumbnailSceneListRefresh; + private System.Windows.Forms.Label label14; + private ComboBoxEdit comboBoxEdit2; + private TextEdit txtThumbnailFrame; + public LabelControl labelControl15; + public SimpleButton btnSceneRemoveAll; + public SimpleButton btnDBSave; + private ComboBoxEdit comboBoxEdit3; + private LabelControl labelControl32; + public SimpleButton btnDBLoad; + private LabelControl labelControl38; + public LabelControl lbl송출무시금지글자색; + public LabelControl lbl송출무시금지배경색; + private System.Windows.Forms.Label label15; + public SimpleButton btnDBCrossLoad; + private CheckEdit chk모든상품적용; + public SimpleButton simpleButton5; + public SimpleButton btnTimeGap1sm; + public SimpleButton btnTimeGap1nm; + public SimpleButton btnTimeGap1s; + public SimpleButton btnTimeGap1n; + private LabelControl labelControl39; + private LabelControl labelControl40; + private TextEdit txtTimeGap; + public SimpleButton btnTimeGap1mm; + public SimpleButton btnTimeGap1m; + private LabelControl labelControl45; + } +} \ No newline at end of file diff --git a/SSG_Automation_Solution/Design/Forms/MainForm.cs b/SSG_Automation_Solution/Design/Forms/MainForm.cs new file mode 100644 index 0000000..ac4398e --- /dev/null +++ b/SSG_Automation_Solution/Design/Forms/MainForm.cs @@ -0,0 +1,3507 @@ +using DevExpress.Utils; +using DevExpress.XtraEditors; +using DevExpress.XtraEditors.ColorPick.Picker; +using DevExpress.XtraEditors.Repository; +using Microsoft.Win32; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using SSG_Automation_Solution.Data; +using SSG_Automation_Solution.Design.CustomControl; +using SSG_Automation_Solution.Tornado; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using static SSG_Automation_Solution.Data.LogWriter; +using static SSG_Automation_Solution.Data.Options; + +namespace SSG_Automation_Solution.Design.Forms +{ + public partial class MainForm : DevExpress.XtraBars.ToolbarForm.ToolbarForm + { + + #region Variables + + Options GetOptions = Options.getInstance(); + private SyncManager syncManager; + + + + private bool _isCable; + public bool isCable + { + get => _isCable; + set + { + _isCable = value; + lblSwitchChannel.Text = _isCable ? "CABLE" : "IPTV"; + lblisCable.Text = _isCable ? "CABLE" : "IPTV"; + btnScheduleCopy.Text = (!_isCable ? "CABLE" : "IPTV") + " 스케쥴 복사해오기"; + } + } + + private bool _isAutoDisplaying; + public bool isAutoDisplaying + { + get => _isAutoDisplaying; + set + { + _isAutoDisplaying = value; + lblIsAutoDisplaying.Text = _isAutoDisplaying ? "자동송출 켜짐" : "자동송출 꺼짐"; + lblIsAutoDisplaying.ForeColor = _isAutoDisplaying ? Color.OrangeRed : Color.Snow; + } + } + + private bool _isModifying = true; + public bool isModifying + { + get => _isModifying; + set + { + _isModifying = value; + + if (lbl수정모드.InvokeRequired) + { + lbl수정모드.Invoke(new Action(() => UpdateLabel())); + } + else + { + UpdateLabel(); + } + } + } + private void UpdateLabel() + { + lbl수정모드.Text = _isModifying ? "수정모드 ON" : "수정모드 OFF"; + lbl수정모드.ForeColor = _isModifying ? Color.OrangeRed : Color.Snow; + } + + private bool _isDoneDisplayInvisible; + public bool isDoneDisplayInvisible + { + get => _isDoneDisplayInvisible; + set + { + _isDoneDisplayInvisible = value; + lblDoneDisplayInvisible.Text = _isDoneDisplayInvisible ? "송출완료 숨김" : "송출완료 보임"; + } + } + + private bool _isAutoSync; + public bool isAutoSync + { + get => _isAutoSync; + set + { + _isAutoSync = value; + lblAutoSync.Text = _isAutoSync ? "자동 동기화 On" : "자동 동기화 Off"; + lblAutoSync.ForeColor = _isAutoSync ? Color.OrangeRed : Color.Snow; + } + } + + string dafaultOptionListPath = Environment.CurrentDirectory + @"\Data\options.json"; + string dafaultGroupPath = Environment.CurrentDirectory + @"\Data\groups.json"; + + public void SaveDafaultOptions() + { + if (!isLoading) + { + JObject jobj = new JObject( + new JProperty("isCable", isCable), + new JProperty("isAutoDisplaying", isAutoDisplaying), + new JProperty("isDoneDisplayInvisible", isDoneDisplayInvisible), + new JProperty("isAutoSync", isAutoSync), + new JProperty("forbidStart", forbidStart), + new JProperty("forbidEnd", forbidEnd), + new JProperty("DBIP", DBIP) + ); + + try + { + File.WriteAllText(dafaultOptionListPath, jobj.ToString(), Encoding.UTF8); + Log($"[SaveDafaultOptions] 기본 옵션 저장 성공: {dafaultOptionListPath}", LogType.Normal); + } + catch (Exception ex) + { + Log($"[SaveDafaultOptions] 옵션 저장 실패: {ex.Message}", LogType.Error); + } + } + } + + bool isLoading = true; + public void LoadDafaultOptions() + { + if (File.Exists(dafaultOptionListPath)) + { + using (StreamReader file = new StreamReader(dafaultOptionListPath)) + { + JObject jobj = JObject.Parse(file.ReadToEnd()); + + + if (jobj.ContainsKey("isCable")) toggleSwitchChannel.IsOn = (bool)jobj["isCable"]; + if (jobj.ContainsKey("isAutoSync")) toggleSwitchAutoSync.IsOn = (bool)jobj["isAutoSync"]; + if (jobj.ContainsKey("isAutoDisplaying")) toggleSwitch1.IsOn = (bool)jobj["isAutoDisplaying"]; + if (jobj.ContainsKey("isDoneDisplayInvisible")) toggleSwitchDone송출보지않기.IsOn = (bool)jobj["isDoneDisplayInvisible"]; + if (jobj.ContainsKey("forbidStart")) + { + timeSpanEditForbidStart.EditValue = (TimeSpan)jobj["forbidStart"]; + forbidStart = (TimeSpan)timeSpanEditForbidStart.EditValue; + } + if (jobj.ContainsKey("forbidEnd")) + { + timeSpanEditForbidEnd.EditValue = (TimeSpan)jobj["forbidEnd"]; + forbidEnd = (TimeSpan)timeSpanEditForbidEnd.EditValue; + } + if (jobj.ContainsKey("DBIP")) + { + DBIP = jobj["DBIP"].ToString(); + txtDBIP.Text = DBIP; + } + + isLoading = false; + } + } + + Log($"기본 옵션을 {dafaultOptionListPath}에서 불러왔습니다.", LogType.Normal); + } + + #endregion + + bool isAdmin = false; + string UserName = ""; + string subKey = @"SOFTWARE\CI"; + + LabelControl[] labelControlsFore = new LabelControl[16]; + LabelControl[] labelControlsBack = new LabelControl[16]; + + public MainForm(int LoginResult, string _UserName) + { + InitializeComponent(); + + if (LoginResult == 1) isAdmin = true; + UserName = _UserName; + + LW = LogWriter.getInstance(); + LW.LogFileName = String.Format("{0}", DateTime.Now.ToString("yyMMdd hhmmss")); + + timeSpanEdit1.Properties.Mask.EditMask = "hh:mm:ss"; + timeSpanEdit1.Properties.Mask.UseMaskAsDisplayFormat = true; + + //ShowLoginForm(); + for (int i = 0; i < 16; i++) + { + labelControlsFore[i] = new LabelControl(); + labelControlsBack[i] = new LabelControl(); + + labelControlsBack[i].BackColor = Color.FromArgb(80, 80, 80); + labelControlsFore[i].BackColor = Color.White; + + labelControlsFore[i].Name = "lblLayerForeColor" + i; + labelControlsBack[i].Name = "lblLayerBackColor" + i; + labelControlsFore[i].Visible = false; + labelControlsBack[i].Visible = false; + groupControl13.Controls.Add(labelControlsFore[i]); + groupControl13.Controls.Add(labelControlsBack[i]); + } + + + GetOptions.LoadGridCOlor(); + + + foreach (gridColor g in GetOptions.gridColors) + { + if (this.Controls.Find(g.명칭, true).Count() > 0) + this.Controls.Find(g.명칭, true)[0].BackColor = g.색상; + } + + foreach (Control c in groupControl13.Controls) + { + if (c is LabelControl) c.Click += lbl색상_Click; + } + + + //ListControl 초기화 + for (int i = 0; i < 15; i++) + { + SceneLists.Add(new BindingList()); + } + + listBoxControl1.DisplayMember = "SceneName"; + listBoxControl1.ValueMember = "SceneDate"; + listBoxControl1.DataSource = SceneLists[0]; + + listBoxControl2.DisplayMember = "Tag"; + listBoxControl2.ValueMember = "Tag"; + listBoxControl2.DataSource = nowSelectedSceneVariables; + + listBoxControl5.DisplayMember = "Tag"; + listBoxControl5.ValueMember = "Tag"; + listBoxControl5.DataSource = nowScheduleVariables; + + syncManager = new SyncManager(UserName); + } + + + private async void MainForm_ShownAsync(object sender, EventArgs e) + { + //Schedule GridControl + gridInit(); + + //Custom Toggle Switch Painter + InitializeSceneGroupComboBox(); + + TM = TornadoManager.getInstance(); + TM.setMainFrom(this); + TornadoAliveCheckThread = new System.Threading.Thread(new System.Threading.ThreadStart(CheckWorkerTornado)); + TornadoAliveCheckThread.Start(); + AliveControlTornado = lblConnectionTornado2; + + timeEdit2.EditValue = DateTime.Now.Add(timeGap); + + toggleSwitchChannel.IsOn = !toggleSwitchChannel.IsOn; + + LoadDafaultOptions(); + + sceneListLoad(); + + timeEdit2.EditValue = DateTime.Now.Add(timeGap); + + LoadSchedule(); + + //LoadSceneGroups(); + + if (isAdmin) InitlistBoxControlUsers(); + tileBarItem3.Visible = isAdmin; + //customersTileBarItem.Visible = isAdmin; + + /* + // ✅ 서버와 자동 동기화 실행 + string date = DateTime.Now.ToString("yyyyMMdd"); + bool isCable = this.isCable; // 현재 채널 상태 반영 + await syncManager.SyncDataAsync(date, isCable); + */ + + comboBoxEdit2.SelectedIndex = 0; + + + + RegistryKey key = Registry.CurrentUser.CreateSubKey(subKey); + if (key.GetValue("timeGap") != null) + { + txtTimeGap.Text = key.GetValue("timeGap").ToString(); + setTimeGap(0); + } + key.Close(); + + + } + + private void CheckWorkerTornado() + { + while (true) + { + try + { + isReqeustHeartbeat = true; + TM.AliveCheck(); + System.Threading.Thread.Sleep(CheckTimeTornado); + + + Color color = !isReqeustHeartbeat ? AliveColor : DeadColor; + + + if (this.InvokeRequired) + { + this.Invoke((MethodInvoker)(() => AliveControlTornado.BackColor = color)); + + } + else + { + AliveControlTornado.BackColor = color; + + } + + if (isReqeustHeartbeat) TM.Connection(); + } + catch (Exception ex) + { + Log(ex.Message, LogWriter.LogType.Error); + } + + } + } + + + + private void InitializeSceneGroupComboBox() + { + /* + // cmbSceneGroup 초기화 + cmbSceneGroup.Properties.Items.Clear(); + //cmbSceneGroup.Properties.Items.Add("전체Scene"); // 기본 선택 항목 + cmbSceneGroup.SelectedIndex = 0; + + // SceneGroups 추가 + foreach (var group in SceneGroups) + { + cmbSceneGroup.Properties.Items.Add(group.GroupName); + } + */ + + // 초기 데이터 설정 + UpdateSceneScheduleComboBox(); + } + + + bool isFormClosing = false; + private void MainForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (MessageBox.Show("신세계라이브쇼핑 자동화 솔루션을 종료하시겠습니까?", "종료", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + try + { + isFormClosing = true; + TornadoAliveCheckThread.Abort(); + Dispose(true); + Application.Exit(); + } + catch (Exception ex) + { + + } + Dispose(true); + Application.Exit(); + } + else + { + e.Cancel = true; + } + } + + + #region Tornado Manager + + private Color AliveColor = Color.FromArgb(0, 192, 0); + private Color DeadColor = Color.FromArgb(192, 0, 0); + + private Thread TornadoAliveCheckThread = null; + public int CheckTimeTornado = 5000; + public LabelControl AliveControlTornado; + public bool isReqeustHeartbeat = false; + + public TornadoManager TM = TornadoManager.getInstance(); + + List waitThumbnailPath = new List(); + internal void OnLogMessage(string logMessage) + { + Console.WriteLine("토네이도 메시지 : " + logMessage); + + if (logMessage.Contains("[SUCCESS] HEART_BEAT")) + { + isReqeustHeartbeat = false; + } + else if (waitThumbnailPath.Count > 0) + { + if (logMessage.Contains("[SUCCESS] DOWNLOAD_THUMBNAIL")) + { + // SceneName:20250226195730_1 + string[] splitStrs = logMessage.Split(' '); + string fileName = ""; + foreach (string s in splitStrs) if (s.Contains("SceneName:")) fileName = s.Replace("SceneName:", ""); + + if (fileName != "") + { + int targetIndex = -1; + + for (int i = 0; i < waitThumbnailPath.Count; i++) + { + if (waitThumbnailPath[i].Contains(fileName)) targetIndex = i; + } + + if (targetIndex != -1) + { + + string target = waitThumbnailPath[targetIndex]; + waitThumbnailPath.RemoveAt(targetIndex); + + if (waitThumbnailPath.Count == 0) pictureBoxThumbnailSceneList.Image = Image.FromFile(target); + } + + } + } + } + } + #endregion + + + + + #region Options + + private void lbl색상_Click(object sender, EventArgs e) + { + LabelControl target = (LabelControl)sender; + + ColorPickEdit colorPickEdit1 = new ColorPickEdit(); + FrmColorPicker frm = new FrmColorPicker(colorPickEdit1.Properties); + frm.StartPosition = FormStartPosition.CenterScreen; + frm.SelectedColor = target.BackColor; + frm.TopMost = true; + if (frm.ShowDialog(colorPickEdit1.FindForm()) == System.Windows.Forms.DialogResult.OK) + { + target.BackColor = frm.SelectedColor; + + if (target.Name.Equals(lblNEXT송출배경색.Name)) + { + int index = comboBoxEdit2.SelectedIndex; + labelControlsBack[index].BackColor = target.BackColor; + target = labelControlsBack[index]; + } + else if (target.Name.Equals(lblNEXT송출글자색.Name)) + { + int index = comboBoxEdit2.SelectedIndex; + labelControlsFore[index].BackColor = target.BackColor; + target = labelControlsFore[index]; + } + + GetOptions.ChangeGridColor(target.Name, target.BackColor); + GetOptions.SaveGridColor(); + } + } + + #endregion + + #region Schedule + + bool isFirst = true; + + TimeSpan timeGap = new TimeSpan(0); + string DBIP = "10.10.50.205"; + TimeSpan forbidStart = new TimeSpan(0, 3, 0); + TimeSpan forbidEnd = new TimeSpan(0, 3, 0); + private void LoadSchedule() + { + if (InvokeRequired) + { + Invoke(new Action(LoadSchedule)); + return; + } + + try + { + if (isLoading) return; + + string port = "60021"; + string mcode = isCable ? "TV01" : "TV05"; + + string date1 = ((DateTime)timeEdit2.EditValue).ToString("yyyyMMdd") + "000000"; + string date2 = ((DateTime)timeEdit2.EditValue).ToString("yyyyMMdd") + "235959"; + string urlAddOn = "&confirmYn=0" + "&livetalkYn=0"; + + string requestURL = "http://" + DBIP + ":" + port + "/방송용/새데이터조회/방송편성?보낸사람=web&mediaCode=" + mcode + "&broadStartFromDate=" + date1 + "&broadStartToDate=" + date2 + urlAddOn; + + //반대편 정보 Cable, IPTV 정보를 읽어와서 이원편성인지 확인하는 과정 + string mcodeReverse = !isCable ? "TV01" : "TV05"; + string requestURLReverse = "http://" + DBIP + ":" + port + "/방송용/새데이터조회/방송편성?보낸사람=web&mediaCode=" + mcodeReverse + "&broadStartFromDate=" + date1 + "&broadStartToDate=" + date2 + urlAddOn; + + WebRequest requestReverse = WebRequest.Create(requestURLReverse); + requestReverse.Method = "GET"; + requestReverse.ContentType = "application/json; charset=UTF-8;"; + //request.ContentType = "charset=UTF-8"; + + BindingList schedulesReverse = new BindingList(); + + using (WebResponse responseReverse = requestReverse.GetResponse()) + using (Stream streamReverse = responseReverse.GetResponseStream()) + using (StreamReader readerReverse = new StreamReader(streamReverse)) + { + string data = readerReverse.ReadToEnd(); + JObject obj = JObject.Parse(data); + + JArray jArray = (JArray)obj["scheduleChart"]; + + if (jArray != null) + { + foreach (JObject j in jArray) + { + DateTime startTime = Convert.ToDateTime(j["startTime"].ToString()); + DateTime endTime = Convert.ToDateTime(j["endTime"].ToString()); + int duration = Convert.ToInt32(j["duration"].ToString()); + int tapeTime = Convert.ToInt32(j["tapeTime"].ToString()); + TimeSpan tapeTimeSpan = new TimeSpan(0, 0, tapeTime); + TimeSpan durationSpan = new TimeSpan(0, 0, duration); + string sceneName = j["programName"].ToString(); + string doneString = ""; + bool isServiceGoods = j["lgroupName"].ToString().Equals("무형서비스"); + + + Schedule bufSchedule = new Schedule() { scheduleType = "스케쥴", StartTimeDateTime = startTime, TapeTime = tapeTimeSpan, DurationSpan = durationSpan, sceneName = sceneName, doneString = doneString, IsServiceGoods = isServiceGoods }; + + schedulesReverse.Add(bufSchedule); + } + } + } + + //반대편 정보 입력 완료 + + + WebRequest request = WebRequest.Create(requestURL); + request.Method = "GET"; + request.ContentType = "application/json; charset=UTF-8;"; + //request.ContentType = "charset=UTF-8"; + + schedules = new BindingList(); + + using (WebResponse response = request.GetResponse()) + using (Stream stream = response.GetResponseStream()) + using (StreamReader reader = new StreamReader(stream)) + { + string data = reader.ReadToEnd(); + JObject obj = JObject.Parse(data); + + JArray jArray = (JArray)obj["scheduleChart"]; + + //if (isFirst) + { + isFirst = false; + /* + var v = obj["조회시간"]; + var s = Convert.ToDateTime(v.ToString()); + timeGap = s - DateTime.Now; + syncManager.setTimeGap(timeGap); + Console.WriteLine(timeGap); + */ + } + if (jArray != null) + { + foreach (JObject j in jArray) + { + DateTime startTime = Convert.ToDateTime(j["startTime"].ToString()); + DateTime endTime = Convert.ToDateTime(j["endTime"].ToString()); + int duration = Convert.ToInt32(j["duration"].ToString()); + int tapeTime = Convert.ToInt32(j["tapeTime"].ToString()); + TimeSpan tapeTimeSpan = new TimeSpan(0, 0, tapeTime); + TimeSpan durationSpan = new TimeSpan(0, 0, duration); + string sceneName = j["programName"].ToString(); + string doneString = ""; + bool isServiceGoods = j["lgroupName"].ToString().Equals("무형서비스"); + + + + Schedule bufSchedule = new Schedule() { scheduleType = "스케쥴", StartTimeDateTime = startTime, TapeTime = tapeTimeSpan, DurationSpan = durationSpan, sceneName = sceneName, doneString = doneString, IsServiceGoods = isServiceGoods }; + + foreach (Schedule s in schedulesReverse) + { + if (bufSchedule.StartTimeDateTime == s.StartTimeDateTime) + { + if (bufSchedule.sceneName == s.sceneName) + { + bufSchedule.scheduleSimulCastName = "동시편성"; + } + } + } + + schedules.Add(bufSchedule); + } + } + } + + //기존정보가 있는지, 확인하는 과정 + BindingList loadedSchedule = loadScheduleData(); + bool isExistDiffer = false; + Schedule differSchedule = null; + + if (loadedSchedule.Count > 0) + { + + foreach (var v in schedules) + { + bool isExistSchedule = false; + foreach (var v2 in loadedSchedule) + { + if (v2.sceneName.Equals(v.sceneName) && v2.StartTimeDateTime.Equals(v.StartTimeDateTime) && v2.TapeTime.Equals(v.TapeTime)) isExistSchedule = true; + } + + if (!isExistSchedule) + { + isExistDiffer = true; + differSchedule = v; + } + } + + //다른 정보가 있음.. 임시로 놓고 나중에 대응할 것 + //if (isExistDiffer) + { + loadedSchedule[0].doneString = ""; + foreach (var v in loadedSchedule) if (v.scheduleType == "송출") + { + if (isExistDiffer) + { + if (differSchedule.StartTimeDateTime < v.StartTimeDateTime && differSchedule.EndTimeDateTime > v.StartTimeDateTime) continue; + } + schedules.Add(v); + } + } + /* + else + { + loadedSchedule[0].doneString = ""; + schedules.Clear(); + foreach (var v in loadedSchedule) schedules.Add(v); + } + */ + } + + foreach (var schedule in schedules) + { + schedule.RelativeStartTime = schedule.GetPreviousScheduleStartTime(schedules); + } + + + gridControlSchedule.DataSource = schedules; + + gridViewSchedule.BestFitColumns(); + + DoneTime(); + + Log($"스케줄 파일을 {GetSchedulePath()}에서 성공적으로 로드했습니다.", LogType.Normal); + + if (isExistDiffer) + { + MessageBox.Show(differSchedule.StartTimeDateTime.ToString() + " 시작 스케줄이 변경되어, 송출을 삭제하였습니다."); + } + } + catch (Exception ex) + { + Log($"스케줄 로드 중 오류 발생: {ex.Message}", LogType.Error); + } + + } + + private void btnScheduleCopy_Click(object sender, EventArgs e) + { + if (!isModifying) + { + MessageBox.Show("수정 모드에서만 사용할 수 있습니다."); + return; + } + + BindingList loadedSchedule = loadScheduleData(true); + if (loadedSchedule.Count > 0) + { + List forCopy = new List(); + foreach (var v in schedules) + { + if (v.scheduleType == "스케쥴") + { + foreach (var v2 in loadedSchedule) + { + if (v2.scheduleType == "스케쥴") + { + if (v2.sceneName.Equals(v.sceneName) && v2.StartTimeDateTime.Equals(v.StartTimeDateTime)) + { + //해당 시각 내에 있는 같은 값들을 반환하여 집어넣어야 함 + foreach (var v3 in loadedSchedule) + { + if (v3.scheduleType == "송출") + { + if (v2.StartTimeDateTime <= v3.StartTimeDateTime && v2.EndTimeDateTime >= v3.StartTimeDateTime) + { + //같은 값이 있는지 확인 후 넣어야함 + if (!schedules.Any(x => x.StartTimeDateTime == v3.StartTimeDateTime && x.sceneName == v3.sceneName && x.DurationSpan == v3.DurationSpan)) + { + forCopy.Add(v3); + } + } + } + } + } + } + } + } + } + + foreach (var v in forCopy) + { + + schedules.Add(v); + } + + if (forCopy.Count > 0) schedules[0].doneString = ""; + } + } + + + private void DoneTime(bool isAddOrDelete = false) + { + if (schedules == null) return; + + + int[] selecteds = gridViewSchedule.GetSelectedRows(); + bool isChanged = false; + + foreach (Schedule s in schedules) + { + if (s.StartTimeDateTime > DateTime.Now.Add(timeGap)) + { + if (s.doneString != "NEXT") + { + s.doneString = "NEXT"; + isChanged = true; + } + } + else if (s.StartTimeDateTime + s.DurationSpan > DateTime.Now.Add(timeGap)) + { + if (s.doneString != "ON AIR") + { + s.doneString = "ON AIR"; + isChanged = true; + } + } + else + { + if (s.doneString != "DONE") + { + s.doneString = "DONE"; + isChanged = true; + } + } + } + + try + { + TimeSpan _timeGap = DateTime.Now.Add(timeGap) - (DateTime)timeEdit1.EditValue; + + if (_timeGap < new TimeSpan(0, 0, 0)) + { + textEdit8.Text = _timeGap.ToString(@"hh\:mm\:ss"); + } + else + { + if (_timeGap < (TimeSpan)timeSpanEdit5.EditValue) + { + textEdit8.Text = "On Air"; + } + else + { + textEdit8.Text = "DONE"; + } + } + } + catch (Exception ex) + { + Log($"DoneTime Error : {ex.Message}", LogType.Error); + } + + if (isChanged) + { + gridControlSchedule.DataSource = schedules.OrderBy(x => x.StartTimeDateTime).ToList(); + + gridViewSchedule.ClearSelection(); + foreach (var v in selecteds) gridViewSchedule.SelectRow(v); + + if (selecteds.Length > 0) + { + gridViewSchedule.MakeRowVisible(selecteds[0]); + } + + saveScheduleData(); + + } + + //schedules = schedules.OrderBy(x => x.StartTimeDateTime).ToList(); + //gridControlSchedule.DataSource = schedules; + //gridViewSchedule.SelectRow(selecteds + } + + private void ApplyRowFilter() + { + gridViewSchedule.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never; + + + // isDoneDisplayInvisible이 false인 경우에만 필터를 적용 + if (!isDoneDisplayInvisible) + { + gridViewSchedule.ActiveFilterString = string.Empty; + } + else + { + gridViewSchedule.ActiveFilterString = "NOT ([scheduleType] = '송출' AND [doneString] = 'DONE')"; + } + } + + + + private string GetSchedulePath(bool isReverse = false) + { + string date = ((DateTime)timeEdit2.EditValue).ToString("yyyyMMdd"); + string path = Environment.CurrentDirectory + @"\Data\scheduleData\" + isCable + "_" + date + ".json"; + if (isReverse) path = Environment.CurrentDirectory + @"\Data\scheduleData\" + !isCable + "_" + date + ".json"; + return path; + } + + private void saveScheduleData() + { + string json = JsonConvert.SerializeObject(schedules); + File.WriteAllText(GetSchedulePath(), json.ToString(), Encoding.UTF8); + + DateTime serverTime = DateTime.Now.Add(timeGap); + // 서버 시간을 기준으로 파일 수정 시간 설정 + File.SetLastWriteTimeUtc(GetSchedulePath(), serverTime); + } + + private BindingList loadScheduleData(bool isReverse = false) + { + BindingList bufschedules = new BindingList(); + + if (File.Exists(GetSchedulePath())) + { + using (StreamReader file = new StreamReader(GetSchedulePath(isReverse))) + { + BindingList buf = JsonConvert.DeserializeObject>(file.ReadToEnd()); + + foreach (var v in buf) + { + bufschedules.Add(v); + } + } + } + + return bufschedules; + } + + BindingList schedules; + private void gridInit() + { + Font font = gridControlSchedule.Font; + foreach (AppearanceObject ap in gridViewSchedule.Appearance) + { + ap.Font = font; + } + + if (gridViewSchedule.FormatConditions.Count > 0) + { + for (int i = 0; i < gridViewSchedule.FormatConditions.Count; i++) + { + gridViewSchedule.FormatConditions[i].Appearance.Font = new Font(font.FontFamily, font.Size, gridViewSchedule.FormatConditions[i].Appearance.Font.Style); + } + } + + gridViewSchedule.OptionsCustomization.AllowSort = false; + gridViewSchedule.OptionsCustomization.AllowFilter = false; + + schedules = new BindingList() { }; + + + gridControlSchedule.DataSource = schedules; + + ((RepositoryItemDateEdit)gridViewSchedule.Columns["StartTimeDateTime"].RealColumnEdit).EditMask = "HH:mm:ss"; + ((RepositoryItemDateEdit)gridViewSchedule.Columns["StartTimeDateTime"].RealColumnEdit).UseMaskAsDisplayFormat = true; + + ((RepositoryItemDateEdit)gridViewSchedule.Columns["EndTimeDateTime"].RealColumnEdit).EditMask = "HH:mm:ss"; + ((RepositoryItemDateEdit)gridViewSchedule.Columns["EndTimeDateTime"].RealColumnEdit).UseMaskAsDisplayFormat = true; + + ((RepositoryItemTimeSpanEdit)gridViewSchedule.Columns["RelativeStartTime"].RealColumnEdit).EditMask = "HH:mm:ss"; + //((RepositoryItemTimeSpanEdit)gridViewSchedule.Columns["RelativeStartTime"].RealColumnEdit).UseMaskAsDisplayFormat = true; + + /* + imageComboBoxEdit1.DataBindings.Add(new Binding("EditValue", schedules, "sceneName")); + imageComboBoxEdit1.Properties.ValidateOnEnterKey = true; + + txtScheduleType.DataBindings.Add(new Binding("EditValue", schedules, "scheduleType")); + txtScheduleType.Properties.ValidateOnEnterKey = true; + + + timeSpanEdit1.DataBindings.Add(new Binding("EditValue", schedules, "DurationSpan")); + timeSpanEdit1.Properties.ValidateOnEnterKey = true; + */ + + gridViewSchedule.RowStyle += (sender, e) => + { + if (e.RowHandle < 0) return; + DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView; + + var done = ((Schedule)gridViewSchedule.GetRow(e.RowHandle)).doneString; + var r = ((Schedule)gridViewSchedule.GetRow(e.RowHandle)).scheduleType; + + if (r != "스케쥴") + { + var layer = ((Schedule)gridViewSchedule.GetRow(e.RowHandle)).layerNumber; + //e.Appearance.ForeColor = Color.White; + //e.Appearance.BackColor = Color.FromArgb(80, 130, 201); + + if (((Schedule)gridViewSchedule.GetRow(e.RowHandle)).IgnoreForbid) + { + e.Appearance.ForeColor = GetOptions.GetGridColor(lbl송출무시금지글자색); + e.Appearance.BackColor = GetOptions.GetGridColor(lbl송출무시금지배경색); + } + else if (layer != null) + { + //e.Appearance.ForeColor = GetOptions.GetGridColor(lblNEXT송출글자색); + //e.Appearance.BackColor = GetOptions.GetGridColor(lblNEXT송출배경색); + e.Appearance.ForeColor = GetOptions.GetGridColor(labelControlsFore[(int)layer]); + e.Appearance.BackColor = GetOptions.GetGridColor(labelControlsBack[(int)layer]); + + } + } + else + { + if (done == "DONE") + { + e.Appearance.ForeColor = GetOptions.GetGridColor(lbl완료스케쥴글자색); + e.Appearance.BackColor = GetOptions.GetGridColor(lbl완료스케쥴배경색); + } + else + { + if (done == "ON AIR") + { + e.Appearance.ForeColor = GetOptions.GetGridColor(lblOnAir스케쥴글자색); + e.Appearance.BackColor = GetOptions.GetGridColor(lblOnAir스케쥴배경색); + } + else + { + e.Appearance.ForeColor = GetOptions.GetGridColor(lblNEXT스케쥴글자색); + e.Appearance.BackColor = GetOptions.GetGridColor(lblNEXT스케쥴배경색); + } + + } + } + + }; + + gridViewSchedule.RowCellStyle += (sender, e) => + { + if (e.RowHandle < 0) return; + DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView; + + + //Selected Row Style + int[] selectedRows = gridViewSchedule.GetSelectedRows(); + if (selectedRows.Contains(e.RowHandle)) + { + e.Appearance.ForeColor = GetOptions.GetGridColor(lbl선택라인글자색); + e.Appearance.BackColor = GetOptions.GetGridColor(lbl선택라인배경색); + /* + if (e.CellValue != null) + { + if (e.Column.FieldName == "scheduleType") + { + e.Appearance.ForeColor = GetOptions.GetGridColor(lbl선택라인종류글자색); + e.Appearance.BackColor = GetOptions.GetGridColor(lbl선택라인종류배경색); + } + else if (e.Column.FieldName == "doneString") + { + e.Appearance.ForeColor = GetOptions.GetGridColor(lbl선택라인상태글자색); + e.Appearance.BackColor = GetOptions.GetGridColor(lbl선택라인상태배경색); + } + } + */ + } + + if (e.CellValue != null && e.Column.FieldName == "doneString") + { + if (e.CellValue.ToString() == "DONE") + { + //e.Appearance.ForeColor = Color.White; + //e.Appearance.BackColor = Color.FromArgb(120, 120, 120); + e.Appearance.ForeColor = GetOptions.GetGridColor(lbl완료상태글자색); + e.Appearance.BackColor = GetOptions.GetGridColor(lbl완료상태배경색); + } + else if (e.CellValue.ToString() == "ON AIR") + { + //e.Appearance.ForeColor = Color.AliceBlue; + //e.Appearance.BackColor = Color.Red; + e.Appearance.ForeColor = GetOptions.GetGridColor(lblOnAir상태글자색); + e.Appearance.BackColor = GetOptions.GetGridColor(lblOnAir상태배경색); + } + else if (e.CellValue.ToString() == "NEXT") + { + //e.Appearance.ForeColor = Color.AliceBlue; + //e.Appearance.BackColor = Color.Red; + e.Appearance.ForeColor = GetOptions.GetGridColor(lblNEXT상태글자색); + e.Appearance.BackColor = GetOptions.GetGridColor(lblNEXT상태배경색); + } + } + + if (e.CellValue != null && e.Column.FieldName == "scheduleType") + { + if (e.CellValue.ToString() == "스케쥴") + { + e.Appearance.ForeColor = GetOptions.GetGridColor(lbl종류스케쥴글자색); + e.Appearance.BackColor = GetOptions.GetGridColor(lbl종류스케쥴배경색); + } + else if (e.CellValue.ToString() == "송출") + { + e.Appearance.ForeColor = GetOptions.GetGridColor(lbl종류송출글자색); + e.Appearance.BackColor = GetOptions.GetGridColor(lbl종류송출배경색); + } + } + + + + + }; + } + + private void gridViewSchedule_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e) + { + int[] rows = gridViewSchedule.GetSelectedRows(); + if (rows.Count() == 1) + { + + var s = (Schedule)gridViewSchedule.GetRow(rows[0]); + var v = s.scheduleType; + panel1.Visible = true; + simpleButton3.Visible = v == "스케쥴"; + //chkUseTapeTime.Visible = v == "스케쥴"; + simpleButton7.Visible = v != "스케쥴"; + simpleButton9.Visible = v != "스케쥴"; + simpleButton1.Visible = v != "스케쥴"; + + + if (v == "스케쥴") + { + groupControl3.Text = "스케쥴 선택 : 송출 추가"; + } + else + { + groupControl3.Text = "송출 선택 : 송출 수정"; + //chkUseTapeTime.Checked = false; + } + + SelectInformation(s); + } + else if (rows.Count() > 1) + { + panel1.Visible = false; + groupControl3.Text = "다중선택 : 다수 복사 기능"; + + // 선택된 행들의 인덱스 배열을 얻기 + int[] selectedRows = gridViewSchedule.GetSelectedRows(); + richTextBox1.Clear(); // 기존 텍스트 초기화 + + // 선택된 행들의 데이터 추출 + foreach (int rowIndex in selectedRows) + { + if (gridViewSchedule.GetRow(rowIndex) is Schedule schedule) + { + // 스케줄 타입에 따라 색상 지정 + Color typeColor = schedule.scheduleType == "스케쥴" ? Color.Gray : Color.White; + Color relativeTimeColor = Color.DarkOrange; + + + // 스케줄 타입 + AppendColoredText(richTextBox1, $"{schedule.scheduleType}\n", typeColor); + // 씬 이름 + richTextBox1.AppendText($" {schedule.sceneName}\n"); + if (schedule.scheduleType != "스케쥴") + { + AppendColoredText(richTextBox1, " 레이어 : ", Color.White); + AppendColoredText(richTextBox1, $"{schedule.layerNumber}\n", relativeTimeColor); + + AppendColoredText(richTextBox1, " 상대시간 : ", Color.White); + AppendColoredText(richTextBox1, $"{schedule.RelativeStartTime}\n", relativeTimeColor); + + AppendColoredText(richTextBox1, " 길이 : ", Color.White); + AppendColoredText(richTextBox1, $"{schedule.DurationSpan}\n", relativeTimeColor); + } + } + } + + if (richTextBox1.TextLength == 0) + { + richTextBox1.Text = "No rows selected."; + } + } + } + private void AppendColoredText(RichTextBox richTextBox, string text, Color color) + { + int start = richTextBox.TextLength; + richTextBox.AppendText(text); + richTextBox.SelectionStart = start; + richTextBox.SelectionLength = text.Length; + richTextBox.SelectionColor = color; + richTextBox.SelectionLength = 0; // 선택 해제 + } + + + + BindingList nowScheduleVariables = new BindingList(); + + + private void SelectInformation(Schedule s) + { + if (s.scheduleType == "스케쥴") + { + /* + cmbSceneSchedule.Properties.Items.Clear(); + //foreach (var v in WholeScenes) cmbSceneSchedule.Properties.Items.Add(v.SceneName); + cmbSceneSchedule.SelectedIndex = -1; + cmbSceneSchedule.Text = ""; + pictureBox1.Image = null; + */ + timeEdit1.EditValue = s.StartTimeDateTime.Value.AddSeconds(((TimeSpan)timeSpanEdit1.EditValue).TotalSeconds); + //timeEdit1.EditValue = s.StartTimeDateTime.Value.AddMinutes(5); + //timeSpanEdit5.EditValue = new TimeSpan(0, 0, 30); + } + else //송출 + { + + if (s.sceneGroupName == null) return; + + cmbSceneSchedule.Properties.Items.Clear(); + cmbSceneGroup.SelectedIndex = Convert.ToInt32(s.sceneGroupName.Replace("Group", "")) - 1; + cmbSceneGroup_SelectedIndexChanged(null, null); + cmbSceneSchedule.SelectedIndexChanged -= cmbSceneSchedule_SelectedIndexChanged; + cmbSceneSchedule.SelectedIndex = GetWholeSceneIndex(cmbSceneGroup.SelectedIndex, s.sceneName); + cmbSceneSchedule.SelectedIndexChanged += cmbSceneSchedule_SelectedIndexChanged; + + + chk송출금지무시.Checked = s.IgnoreForbid; + chkUseTapeTime_CheckedChanged(chk송출금지무시, null); + + + timeEdit1.EditValue = s.StartTimeDateTime; + timeSpanEdit5.EditValue = s.DurationSpan; + + + cmbScheduleSelectedLayer.Text = s.layerNumber.ToString(); + + int index = GetWholeSceneIndex(cmbSceneGroup.SelectedIndex, s.sceneName); //GetWholeSceneIndex(cmbSceneSchedule.Text); + if (index == -1) + { + try + { + //MessageBox.Show("존재하지 않는 Scene 입니다. 송출 값을 삭제합니다.."); + //송출 삭제 + //schedules.Remove(s); + //schedules[0].doneString = ""; + return; + } + catch (Exception ex) + { + Log($"미존재 Scene Error : {ex.Message}", LogType.Error); + } + } + SceneVO selected = SceneLists[cmbSceneGroup.SelectedIndex][index]; + string imgPath = Environment.CurrentDirectory + @"\Thumbnail\" + selected.SceneDate + ".png"; + try + { + if (File.Exists(imgPath)) + { + pictureBox1.Image = Image.FromFile(imgPath); + } + else + { + Log($"썸네일 이미지가 존재하지 않습니다: {imgPath}", LogType.Error); + pictureBox1.Image = Properties.Resources.no_image_icon_23494; + } + } + catch (Exception ex) + { + Log($"썸네일 이미지 로드 중 오류 발생: {ex.Message}", LogType.Error); + pictureBox1.Image = Properties.Resources.no_image_icon_23494; + } + + nowScheduleVariables.Clear(); + foreach (var v in s.변수정보) + { + var buf = new VariablesVO(); + buf.Tag = v.Tag; + buf.Text = v.Text; + nowScheduleVariables.Add(buf); + } + nowModifyingSchedule = s; + } + } + + private bool IsOverlapping(Schedule newSchedule) + { + foreach (var schedule in schedules) + { + if (schedule.scheduleType == "송출" && schedule.layerNumber == newSchedule.layerNumber) + { + DateTime existingStart = (DateTime)schedule.StartTimeDateTime; + DateTime existingEnd = (DateTime)(schedule.StartTimeDateTime + schedule.DurationSpan); + + DateTime newStart = (DateTime)newSchedule.StartTimeDateTime; + DateTime newEnd = (DateTime)(newSchedule.StartTimeDateTime + newSchedule.DurationSpan); + + // 시간이 겹치는지 확인 + if (newStart < existingEnd && newEnd > existingStart) + { + return true; // 겹침 + } + } + } + return false; // 겹치지 않음 + } + + + private void cmbSceneSchedule_SelectedIndexChanged(object sender, EventArgs e) + { + if (cmbSceneSchedule.SelectedIndex > -1) + { + int index = GetWholeSceneIndex(cmbSceneGroup.SelectedIndex, cmbSceneSchedule.Text); + + SceneVO selected = SceneLists[cmbSceneGroup.SelectedIndex][index]; + + + cmbScheduleSelectedLayer.Text = selected.SceneLayer; + + nowScheduleVariables.Clear(); + foreach (var v in selected.Variables) + { + var buf = new VariablesVO(); + buf.Tag = v.Tag; + buf.Text = v.Text; + nowScheduleVariables.Add(buf); + } + + string imgPath = Environment.CurrentDirectory + @"\Thumbnail\" + selected.SceneDate + ".png"; + try + { + if (File.Exists(imgPath)) + { + pictureBox1.Image = Image.FromFile(imgPath); + } + else + { + Log($"썸네일 이미지가 존재하지 않습니다: {imgPath}", LogType.Error); + pictureBox1.Image = Properties.Resources.no_image_icon_23494; + } + } + catch (Exception ex) + { + Log($"썸네일 이미지 로드 중 오류 발생: {ex.Message}", LogType.Error); + pictureBox1.Image = Properties.Resources.no_image_icon_23494; + } + + + } + } + + Schedule nowModifyingSchedule = null; + private void listBoxControl5_SelectedIndexChanged(object sender, EventArgs e) + { + if (listBoxControl5.SelectedItems.Count > 0) + { + VariablesVO selected = nowScheduleVariables[listBoxControl5.SelectedIndex]; + textEdit2.Text = selected.Tag; + textEdit1.Text = selected.Text; + } + else + { + textEdit2.Text = ""; + textEdit1.Text = ""; + } + } + + private void simpleButton3_Click(object sender, EventArgs e) + { + if (!isModifying) + { + MessageBox.Show("수정 모드에서만 사용할 수 있습니다."); + return; + } + + if (cmbSceneSchedule.Text == "") return; + + if ((TimeSpan)timeSpanEdit5.EditValue < new TimeSpan(0, 0, 1)) + { + MessageBox.Show("길이를 설정해주세요.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + if (sender == null && chk모든상품적용.Checked) + { + MessageBox.Show("모든 상품 적용은 '송출 추가'만 가능합니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + + BindingList variablesVOs = new BindingList(); + foreach (var v in nowScheduleVariables) + { + var buf = new VariablesVO(); + buf.Tag = v.Tag; + buf.Text = v.Text; + variablesVOs.Add(buf); + } + + + //기존방식 - 모든상품 추가가 아닌 경우 + if (!chk모든상품적용.Checked) + { + + int[] selectedRows = gridViewSchedule.GetSelectedRows(); + + // 새로 추가: timeSpanRepeat 컨트롤 값이 0보다 큰지 확인 + TimeSpan repeatInterval = (TimeSpan)timeSpanRepeat.EditValue; + if (repeatInterval > TimeSpan.Zero) + { + string errMsg = ""; + + + // 반복 모드: 반드시 단일 스케쥴이 선택되어 있어야 함 + if (selectedRows.Length != 1) + { + MessageBox.Show("스케쥴 1개 선택시에만 Repeat 기능을 사용할 수 있습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + var baseSchedule = (Schedule)gridViewSchedule.GetRow(selectedRows[0]); + if (baseSchedule.scheduleType != "스케쥴") + { + MessageBox.Show("Repeat 기능은 '스케쥴' 유형에서만 사용할 수 있습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + // 기준 스케쥴의 시작 시간과 끝 시간 + DateTime baseStart = baseSchedule.StartTimeDateTime.Value; + DateTime baseEnd = (DateTime)(baseStart + baseSchedule.DurationSpan); + + // 사용자 지정 시작 시간 (timeEdit1)에서부터 반복 시작 + DateTime currentTime = (DateTime)timeEdit1.EditValue; + + // 반복 루프: currentTime이 기준 스케쥴 종료 전까지 반복 + while (currentTime < baseEnd) + { + var newSchedule = new Schedule() + { + scheduleType = "송출", + StartTimeDateTime = currentTime, + DurationSpan = (TimeSpan)timeSpanEdit5.EditValue, + sceneGroupName = cmbSceneGroup.Text, + sceneName = cmbSceneSchedule.Text, + layerNumber = (short)Convert.ToInt32(cmbScheduleSelectedLayer.Text), + doneString = "", + 변수정보 = variablesVOs + }; + + // 금지 시간 검사 + bool isAllowed = false; + foreach (var schedule in schedules.Where(s => s.scheduleType == "스케쥴")) + { + if (IsWithinPlayableTime(newSchedule, schedule, forbidStart, forbidEnd)) + { + isAllowed = true; + break; + } + } + + if (chk송출금지무시.Checked) + { + newSchedule.IgnoreForbid = true; + isAllowed = true; + } + + if (!isAllowed) + { + errMsg += "스케쥴의 금지 시간에 포함되어 추가할 수 없습니다. " + currentTime + Environment.NewLine; + currentTime = currentTime.Add(repeatInterval); + continue; + } + else if (IsOverlapping(newSchedule)) + { + errMsg += $"Layer {newSchedule.layerNumber}에 겹치는 시간이 존재합니다. " + currentTime + Environment.NewLine; + currentTime = currentTime.Add(repeatInterval); + continue; + } + else + { + schedules.Add(newSchedule); + newSchedule.RelativeStartTime = newSchedule.GetPreviousScheduleStartTime(schedules); + } + + // 다음 반복 + currentTime = currentTime.Add(repeatInterval); + } + + if (errMsg != "") MessageBox.Show(errMsg, "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + else if (chkUseTapeTime.Checked) + { + string errMsg = ""; + + if (selectedRows.Length != 1) + { + MessageBox.Show("스케쥴 1개 선택시에만 TapeTime 기능을 사용할 수 있습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + var selectedSchedule = (Schedule)gridViewSchedule.GetRow(selectedRows[0]); + + if (selectedSchedule.scheduleType != "스케쥴") + { + MessageBox.Show("TapeTime 기능은 '스케쥴' 유형에서만 사용할 수 있습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + // TapeTime 기준으로 송출 추가 + TimeSpan tapeTime = (TimeSpan)selectedSchedule.TapeTime; + TimeSpan addedTime = (TimeSpan)timeSpanEdit1.EditValue; + DateTime startTime = selectedSchedule.StartTimeDateTime.Value; + DateTime endTime = (DateTime)(startTime + selectedSchedule.DurationSpan); + DateTime newEndTime = startTime; + for (int i = 0; i < 10; i++) + { + newEndTime += tapeTime; + + if (endTime < newEndTime) + { + endTime = newEndTime - tapeTime; + break; + } + } + + for (DateTime current = startTime + addedTime; current < endTime; current += tapeTime) + { + var newSchedule = new Schedule() + { + scheduleType = "송출", + StartTimeDateTime = current, + DurationSpan = (TimeSpan)timeSpanEdit5.EditValue, + sceneGroupName = cmbSceneGroup.Text, + sceneName = cmbSceneSchedule.Text, + layerNumber = (short)Convert.ToInt32(cmbScheduleSelectedLayer.Text), + doneString = "", + 변수정보 = variablesVOs + }; + + // 금지 시간 검사: 한 번이라도 통과하면 허용 + bool isAllowed = false; + foreach (var schedule in schedules.Where(s => s.scheduleType == "스케쥴")) + { + if (IsWithinPlayableTime(newSchedule, schedule, forbidStart, forbidEnd)) + { + isAllowed = true; + break; // 통과 가능한 구간이 발견되면 더 이상 검사하지 않음 + } + } + + if (chk송출금지무시.Checked) + { + newSchedule.IgnoreForbid = true; + isAllowed = true; + } + + if (!isAllowed) + { + errMsg += "스케쥴의 금지 시간에 포함되어 추가할 수 없습니다. " + current + Environment.NewLine; + continue; + } + else if (IsOverlapping(newSchedule)) // 겹치는지 확인 + { + errMsg += $"Layer {newSchedule.layerNumber}에 겹치는 시간이 존재합니다." + current + Environment.NewLine; + continue; // 겹치는 경우 추가하지 않음 + } + + schedules.Add(newSchedule); + newSchedule.RelativeStartTime = newSchedule.GetPreviousScheduleStartTime(schedules); + } + + if (errMsg != "") + { + MessageBox.Show(errMsg, "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + else + { + // 기존 로직 + var newSchedule = new Schedule() + { + scheduleType = "송출", + StartTimeDateTime = (DateTime)timeEdit1.EditValue, // + new TimeSpan(0, 0, Convert.ToInt32(timeSpanEdit1.TimeSpan.TotalSeconds)), + DurationSpan = (TimeSpan)timeSpanEdit5.EditValue, + sceneGroupName = cmbSceneGroup.Text, + sceneName = cmbSceneSchedule.Text, + layerNumber = (short)Convert.ToInt32(cmbScheduleSelectedLayer.Text), + doneString = "", + 변수정보 = variablesVOs + }; + + // 금지 시간 검사: 한 번이라도 통과하면 허용 + bool isAllowed = false; + foreach (var schedule in schedules.Where(s => s.scheduleType == "스케쥴")) + { + if (IsWithinPlayableTime(newSchedule, schedule, forbidStart, forbidEnd)) + { + isAllowed = true; + break; // 통과 가능한 구간이 발견되면 더 이상 검사하지 않음 + } + } + + if (chk송출금지무시.Checked) + { + newSchedule.IgnoreForbid = true; + isAllowed = true; + } + + modifyErrorChecker = false; + if (!isAllowed) + { + MessageBox.Show("스케쥴의 금지 시간에 포함되어 추가할 수 없습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + else if (IsOverlapping(newSchedule)) // 겹치는지 확인 + { + MessageBox.Show($"Layer {newSchedule.layerNumber}에 겹치는 시간이 존재합니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + else + { + modifyErrorChecker = true; + schedules.Add(newSchedule); + newSchedule.RelativeStartTime = newSchedule.GetPreviousScheduleStartTime(schedules); + } + } + + + // 기존에 선택되었던 행을 다시 선택 + gridViewSchedule.ClearSelection(); + foreach (var rowIndex in selectedRows) + { + gridViewSchedule.SelectRow(rowIndex); + } + + // 필요한 경우 스크롤을 선택된 행으로 이동 + if (selectedRows.Length > 0) + { + int visibleIndex = gridViewSchedule.GetVisibleIndex(selectedRows[0]); + gridViewSchedule.TopRowIndex = visibleIndex; + //gridViewSchedule.MakeRowVisible(selectedRows[0]); + } + } + else + //추가된 방식 - 모든상품에 추가 + //timeSpanEdit1 + { + int[] realSelectedRows = gridViewSchedule.GetSelectedRows(); + + for (int ii = 0; ii < gridViewSchedule.DataRowCount; ii++) + { + int[] selectedRows = new int[] { ii }; + + var target = (Schedule)gridViewSchedule.GetRow(ii); + if (target.scheduleType != "스케쥴") continue; + if (target.IsServiceGoods) continue; + + TimeSpan repeatInterval = (TimeSpan)timeSpanRepeat.EditValue; + if (repeatInterval > TimeSpan.Zero) + { + string errMsg = ""; + + var baseSchedule = target; + + // 기준 스케쥴의 시작 시간과 끝 시간 + DateTime baseStart = baseSchedule.StartTimeDateTime.Value; + DateTime baseEnd = (DateTime)(baseStart + baseSchedule.DurationSpan); + + // 사용자 지정 시작 시간 (timeEdit1)에서부터 반복 시작 + DateTime currentTime = (DateTime)(baseStart.Add((TimeSpan)timeSpanEdit1.EditValue)); + + // 반복 루프: currentTime이 기준 스케쥴 종료 전까지 반복 + while (currentTime < baseEnd) + { + var newSchedule = new Schedule() + { + scheduleType = "송출", + StartTimeDateTime = currentTime, + DurationSpan = (TimeSpan)timeSpanEdit5.EditValue, + sceneGroupName = cmbSceneGroup.Text, + sceneName = cmbSceneSchedule.Text, + layerNumber = (short)Convert.ToInt32(cmbScheduleSelectedLayer.Text), + doneString = "", + 변수정보 = variablesVOs + }; + + // 금지 시간 검사 + bool isAllowed = false; + foreach (var schedule in schedules.Where(s => s.scheduleType == "스케쥴")) + { + if (IsWithinPlayableTime(newSchedule, schedule, forbidStart, forbidEnd)) + { + isAllowed = true; + break; + } + } + + if (chk송출금지무시.Checked) + { + newSchedule.IgnoreForbid = true; + isAllowed = true; + } + + if (!isAllowed) + { + errMsg += "스케쥴의 금지 시간에 포함되어 추가할 수 없습니다. " + currentTime + Environment.NewLine; + currentTime = currentTime.Add(repeatInterval); + continue; + } + else if (IsOverlapping(newSchedule)) + { + errMsg += $"Layer {newSchedule.layerNumber}에 겹치는 시간이 존재합니다. " + currentTime + Environment.NewLine; + currentTime = currentTime.Add(repeatInterval); + continue; + } + else + { + schedules.Add(newSchedule); + newSchedule.RelativeStartTime = newSchedule.GetPreviousScheduleStartTime(schedules); + } + + // 다음 반복 + currentTime = currentTime.Add(repeatInterval); + } + + //if (errMsg != "") MessageBox.Show(errMsg, "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + else if (chkUseTapeTime.Checked) + { + string errMsg = ""; + + if (selectedRows.Length != 1) + { + MessageBox.Show("스케쥴 1개 선택시에만 TapeTime 기능을 사용할 수 있습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + var selectedSchedule = (Schedule)gridViewSchedule.GetRow(selectedRows[0]); + + if (selectedSchedule.scheduleType != "스케쥴") + { + MessageBox.Show("TapeTime 기능은 '스케쥴' 유형에서만 사용할 수 있습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + // TapeTime 기준으로 송출 추가 + TimeSpan tapeTime = (TimeSpan)selectedSchedule.TapeTime; + TimeSpan addedTime = (TimeSpan)timeSpanEdit1.EditValue; + DateTime startTime = selectedSchedule.StartTimeDateTime.Value; + DateTime endTime = (DateTime)(startTime + selectedSchedule.DurationSpan); + DateTime newEndTime = startTime; + for (int i = 0; i < 10; i++) + { + newEndTime += tapeTime; + + if (endTime < newEndTime) + { + endTime = newEndTime - tapeTime; + break; + } + } + + for (DateTime current = startTime + addedTime; current < endTime; current += tapeTime) + { + var newSchedule = new Schedule() + { + scheduleType = "송출", + StartTimeDateTime = current, + DurationSpan = (TimeSpan)timeSpanEdit5.EditValue, + sceneGroupName = cmbSceneGroup.Text, + sceneName = cmbSceneSchedule.Text, + layerNumber = (short)Convert.ToInt32(cmbScheduleSelectedLayer.Text), + doneString = "", + 변수정보 = variablesVOs + }; + + // 금지 시간 검사: 한 번이라도 통과하면 허용 + bool isAllowed = false; + foreach (var schedule in schedules.Where(s => s.scheduleType == "스케쥴")) + { + if (IsWithinPlayableTime(newSchedule, schedule, forbidStart, forbidEnd)) + { + isAllowed = true; + break; // 통과 가능한 구간이 발견되면 더 이상 검사하지 않음 + } + } + + if (chk송출금지무시.Checked) + { + newSchedule.IgnoreForbid = true; + isAllowed = true; + } + + if (!isAllowed) + { + errMsg += "스케쥴의 금지 시간에 포함되어 추가할 수 없습니다. " + current + Environment.NewLine; + continue; + } + else if (IsOverlapping(newSchedule)) // 겹치는지 확인 + { + errMsg += $"Layer {newSchedule.layerNumber}에 겹치는 시간이 존재합니다." + current + Environment.NewLine; + continue; // 겹치는 경우 추가하지 않음 + } + + schedules.Add(newSchedule); + newSchedule.RelativeStartTime = newSchedule.GetPreviousScheduleStartTime(schedules); + } + + if (errMsg != "") + { + MessageBox.Show(errMsg, "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + else + { + // 기존 로직 + + var newSchedule = new Schedule() + { + scheduleType = "송출", + StartTimeDateTime = (DateTime)(target.StartTimeDateTime.Value.Add((TimeSpan)timeSpanEdit1.EditValue)), // + new TimeSpan(0, 0, Convert.ToInt32(timeSpanEdit1.TimeSpan.TotalSeconds)), + DurationSpan = (TimeSpan)timeSpanEdit5.EditValue, + sceneGroupName = cmbSceneGroup.Text, + sceneName = cmbSceneSchedule.Text, + layerNumber = (short)Convert.ToInt32(cmbScheduleSelectedLayer.Text), + doneString = "", + 변수정보 = variablesVOs + }; + + if (target.StartTimeDateTime < newSchedule.StartTimeDateTime && target.EndTimeDateTime > newSchedule.StartTimeDateTime) ; + else continue; + + // 금지 시간 검사: 한 번이라도 통과하면 허용 + bool isAllowed = false; + foreach (var schedule in schedules.Where(s => s.scheduleType == "스케쥴")) + { + if (IsWithinPlayableTime(newSchedule, schedule, forbidStart, forbidEnd)) + { + isAllowed = true; + break; // 통과 가능한 구간이 발견되면 더 이상 검사하지 않음 + } + } + + if (chk송출금지무시.Checked) + { + newSchedule.IgnoreForbid = true; + isAllowed = true; + } + + modifyErrorChecker = false; + if (!isAllowed) + { + MessageBox.Show("스케쥴의 금지 시간에 포함되어 추가할 수 없습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + else if (IsOverlapping(newSchedule)) // 겹치는지 확인 + { + MessageBox.Show($"Layer {newSchedule.layerNumber}에 겹치는 시간이 존재합니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + else + { + modifyErrorChecker = true; + schedules.Add(newSchedule); + newSchedule.RelativeStartTime = newSchedule.GetPreviousScheduleStartTime(schedules); + } + } + } + + + + + + // 기존에 선택되었던 행을 다시 선택 + gridViewSchedule.ClearSelection(); + foreach (var rowIndex in realSelectedRows) + { + gridViewSchedule.SelectRow(rowIndex); + } + + // 필요한 경우 스크롤을 선택된 행으로 이동 + if (realSelectedRows.Length > 0) + { + int visibleIndex = gridViewSchedule.GetVisibleIndex(realSelectedRows[0]); + gridViewSchedule.TopRowIndex = visibleIndex; + //gridViewSchedule.MakeRowVisible(selectedRows[0]); + } + } + } + + private bool IsWithinPlayableTime(Schedule newSchedule, Schedule existingSchedule, TimeSpan forbidStart, TimeSpan forbidEnd) + { + DateTime current = existingSchedule.StartTimeDateTime.Value; + DateTime scheduleEndTime = existingSchedule.EndTimeDateTime.Value; + + // 새 스케줄의 시작 및 종료 시간 + DateTime newStartTime = newSchedule.StartTimeDateTime.Value; + DateTime newEndTime = newStartTime + newSchedule.DurationSpan.Value; + + while (current < scheduleEndTime) + { + // 송출 가능 시작 시간과 종료 시간 계산 + DateTime playableStartTime = current + forbidStart; + DateTime playableEndTime = current + existingSchedule.TapeTime.Value - forbidEnd; + + // 송출 가능 시간에 포함되는지 확인 + if (newStartTime >= playableStartTime && newEndTime <= playableEndTime) + { + return true; // 송출 가능 시간에 포함 + } + + current += existingSchedule.TapeTime.Value; // 다음 테이프 시간으로 이동 + } + + return false; // 모든 구간에서 송출 가능 시간을 만족하지 않음 + } + + bool modifyErrorChecker = false; + private void simpleButton7_Click(object sender, EventArgs e) + { + if (!isModifying) + { + MessageBox.Show("수정 모드에서만 사용할 수 있습니다."); + return; + } + + + //송출수정 + modifyErrorChecker = true; + schedules.Remove(nowModifyingSchedule); + simpleButton3_Click(null, null); + + if (modifyErrorChecker == false) + { + schedules.Add(nowModifyingSchedule); + } + modifyErrorChecker = false; + + } + + private void simpleButton9_Click(object sender, EventArgs e) + { + if (!isModifying) + { + MessageBox.Show("수정 모드에서만 사용할 수 있습니다."); + return; + } + + + if (sender == simpleButton9) + { + //송출 삭제 + schedules.Remove(nowModifyingSchedule); + schedules[0].doneString = ""; + } + else + { + //그룹 송출 삭제 + int[] selectedRows = gridViewSchedule.GetSelectedRows(); + + if (selectedRows.Length != 1) + { + MessageBox.Show("스케쥴 1개 선택시에만 그룹송출 삭제 기능을 사용할 수 있습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + //가장 가까운 시간의 스케쥴의 시간 대비 시간을 변경해야함 + int index = -1; + for (int i = 0; i < schedules.Count; i++) + if (schedules[i].scheduleType.Equals("스케쥴")) + if ((DateTime)timeEdit1.EditValue - schedules[i].StartTimeDateTime > new TimeSpan(0)) index = i; + + if (index != -1) + { + var selectedSchedule = schedules[index]; + + // TapeTime 기준으로 송출 추가 + TimeSpan tapeTime = (TimeSpan)selectedSchedule.TapeTime; + TimeSpan addedTime = (TimeSpan)nowModifyingSchedule.RelativeStartTime; + DateTime startTime = selectedSchedule.StartTimeDateTime.Value; + DateTime endTime = (DateTime)(startTime + selectedSchedule.DurationSpan); + + string groupName = nowModifyingSchedule.sceneGroupName; + string sceneName = nowModifyingSchedule.sceneName; + + for (DateTime current = startTime + addedTime; current < endTime; current += tapeTime) + { + int targetIndex = -1; + for (int i = 0; i < schedules.Count; i++) + { + var target = schedules[i]; + if (target.scheduleType.Equals("송출") && target.StartTimeDateTime.Equals(current) && target.sceneGroupName.Equals(groupName) && target.sceneName.Equals(sceneName)) + { + targetIndex = i; + } + } + + if (targetIndex != -1) schedules.RemoveAt(targetIndex); + } + } + + schedules[0].doneString = ""; + } + + + } + + private void simpleButton8_Click(object sender, EventArgs e) + { + if (!isModifying) + { + MessageBox.Show("수정 모드에서만 사용할 수 있습니다."); + return; + } + + if (listBoxControl5.SelectedIndex > -1) + { + VariablesVO selected = nowScheduleVariables[listBoxControl5.SelectedIndex]; + selected.Text = textEdit1.Text; + } + } + + + private void timeEdit1_EditValueChanged(object sender, EventArgs e) + { + //가장 가까운 시간의 스케쥴의 시간 대비 시간을 변경해야함 + int index = -1; + for (int i = 0; i < schedules.Count; i++) + if (schedules[i].scheduleType.Equals("스케쥴")) + if ((DateTime)timeEdit1.EditValue - schedules[i].StartTimeDateTime >= new TimeSpan(0)) index = i; + + if (index != -1) + { + timeSpanEdit1.EditValueChanged -= timeSpanEdit1_EditValueChanged; + timeSpanEdit1.EditValue = (DateTime)timeEdit1.EditValue - schedules[index].StartTimeDateTime; + timeSpanEdit1.EditValueChanged += timeSpanEdit1_EditValueChanged; + textEdit3.Text = schedules[index].sceneName; + } + + } + private void timeSpanEdit1_EditValueChanged(object sender, EventArgs e) + { + try + { + Schedule s = null; + foreach (var v in schedules) if (v.sceneName.Equals(textEdit3.Text)) s = v; + + if (s != null) + { + DateTime t = s.StartTimeDateTime.Value.Add((TimeSpan)timeSpanEdit1.EditValue); + timeEdit1.EditValue = t; + } + } + catch (Exception ex) + { + MessageBox.Show($"Error: {ex.Message}"); + } + } + + private void timeSpanEdit1_KeyPress(object sender, KeyPressEventArgs e) + { + + } + + private void timeEdit1_KeyPress(object sender, KeyPressEventArgs e) + { + } + + + + #endregion + + #region TitleBar + + private void tileBar_SelectedItemChanged(object sender, TileItemEventArgs e) + { + navigationFrame.SelectedPageIndex = tileBarGroupTables.Items.IndexOf(e.Item); + } + + #endregion + + #region Clock + int lockTimerCounter = 0; + private void timerClock_Tick(object sender, EventArgs e) + { + if (lockTimerCounter == 0) + { + //임시 - timeGap 부분을 직접 적용하는 방식으로 변경 적용해볼 예정 + //25.11.20 요청사항 + // 실제 시간에서 다음과 같은 사항이 있는 경우 적용할 수 있도록 한다. + txtTimeGap.Text = "0"; + if (CheckInTime("02:38", "06:29")) setTimeGap(0); + else if (CheckInTime("06:30", "09:31")) setTimeGap(-0.5); + else if (CheckInTime("09:32", "15:33")) setTimeGap(-1); + else if (CheckInTime("15:34", "18:34")) setTimeGap(-1.5); + else if (CheckInTime("18:35", "23:59")) setTimeGap(-2); + else if (CheckInTime("00:00", "00:36")) setTimeGap(-2); + else if (CheckInTime("00:37", "02:37")) setTimeGap(-2.5); + + + lockTimerCounter++; + UpdateTime(); + DoneTime(); + if (isAutoDisplaying) SceneCheck(); + lockTimerCounter--; + + UpdateTimeEditIfNecessary(); + } + } + private void UpdateTimeEditIfNecessary() + { + if (schedules == null || schedules.Count == 0) + return; + + + + // 종료 시간 중 가장 늦은 시간을 찾기 + DateTime latestEndTime = (DateTime)schedules.Max(s => s.StartTimeDateTime + s.DurationSpan); + + // 현재 시간 가져오기 (서버 시간과의 차이를 고려해야 할 경우 timeGap을 사용) + DateTime currentTime = DateTime.Now.Add(timeGap); + + // timeEdit2 컨트롤에서 설정된 날짜 가져오기 + DateTime timeEdit2Date = ((DateTime)timeEdit2.EditValue).Date; + + // 현재 시간과 가장 늦은 종료 시간이 같은 날짜에 있고, + // timeEdit2의 날짜+1와 가장 늦은 종료 시간의 날짜가 같으며, + // 현재 시간이 가장 늦은 종료 시간 이후 1초 이상 지났는지 확인 + // 현재 시간이 가장 늦은 종료 시간 이후 10초 미만 지났는지 확인 + if (latestEndTime.Date == currentTime.Date && + latestEndTime.Date == timeEdit2Date.AddDays(1) && + currentTime - latestEndTime >= TimeSpan.FromSeconds(1)) + { + if (currentTime - latestEndTime <= TimeSpan.FromSeconds(10)) + { + // timeEdit2의 값을 다음 날짜로 설정 + timeEdit2.EditValue = timeEdit2Date.AddDays(1); + } + } + } + + List displaySchedule = new List(); + int countOfSceneCheck = 0; + + void SceneCheck() + { + DateTime today = DateTime.Now.Add(timeGap); + DateTime yesterday = today.AddDays(-1); + DateTime tomorrow = today.AddDays(1); + + countOfSceneCheck--; + + if (countOfSceneCheck < 0) + { + // 1. displaySchedule을 초기화 + displaySchedule.Clear(); + + // 2. 오늘과 내일의 스케줄 파일을 로드하여 "송출" 스케줄만 displaySchedule에 추가 + LoadSchedulesForDisplay(today); + LoadSchedulesForDisplay(yesterday); + LoadSchedulesForDisplay(tomorrow); + + countOfSceneCheck = 10; + } + + + // 3. 현재 시각을 기준으로 송출 처리 + ProcessDisplaySchedule(); + } + + /// + /// 특정 날짜의 스케줄 파일을 로드하여 "송출" 타입만 displaySchedule에 추가 + /// + void LoadSchedulesForDisplay(DateTime date) + { + string scheduleFilePath = Path.Combine("Data", "scheduleData", $"{isCable}_{date:yyyyMMdd}.json"); + + if (File.Exists(scheduleFilePath)) + { + try + { + string jsonContent = File.ReadAllText(scheduleFilePath); + List dailySchedules = JsonConvert.DeserializeObject>(jsonContent); + + if (dailySchedules != null) + { + foreach (var s in dailySchedules) + { + if (s.scheduleType.Equals("송출")) + { + displaySchedule.Add(s); + } + } + } + } + catch (Exception ex) + { + //Log($"스케줄 파일 로드 오류: {scheduleFilePath} - {ex.Message}", LogType.Error); + } + } + else + { + //Log($"스케줄 파일 없음: {scheduleFilePath}", LogType.Error); + } + } + + static bool CheckInTime(string start, string end) + { + // 현재 시각의 시, 분만 사용 (초는 버림) + DateTime now = DateTime.Now; + var nowHm = new TimeSpan(now.Hour, now.Minute, 0); + + // "HH:mm" → TimeSpan + var startTs = TimeSpan.ParseExact(start, "hh\\:mm", CultureInfo.InvariantCulture); + var endTs = TimeSpan.ParseExact(end, "hh\\:mm", CultureInfo.InvariantCulture); + + // 단순 구간: 같은 날 안에서만 (예: 02:38 ~ 06:29) + return nowHm >= startTs && nowHm <= endTs; + } + + /// + /// displaySchedule 리스트를 기반으로 현재 시각 기준으로 송출을 수행 + /// + void ProcessDisplaySchedule() + { + DateTime now = DateTime.Now.Add(timeGap); // 현재 시각 (시간 차이 적용) + + /* 임시 - timeGap 부분을 직접 적용하는 방식으로 변경 적용해볼 예정 + //25.11.20 요청사항 + // 실제 시간에서 다음과 같은 사항이 있는 경우 적용할 수 있도록 한다. + if (CheckInTime("02:38", "06:29")) now.AddSeconds(0); + else if (CheckInTime("06:30", "09:31")) now.AddSeconds(-0.5); + else if (CheckInTime("09:32", "15:33")) now.AddSeconds(-1); + else if (CheckInTime("15:34", "18:34")) now.AddSeconds(-1.5); + else if (CheckInTime("18:35", "23:59")) now.AddSeconds(-2); + else if (CheckInTime("00:00", "00:36")) now.AddSeconds(-2); + else if (CheckInTime("00:37", "02:37")) now.AddSeconds(-2.5); + */ + + foreach (var s in displaySchedule) + { + { + TimeSpan tempTime = (TimeSpan)(s.StartTimeDateTime - now); + + if (tempTime + s.DurationSpan > new TimeSpan(0)) + { + if (tempTime + s.DurationSpan < new TimeSpan(6000000)) + { + TM.Out(s.layerNumber); + Log(s.layerNumber + " 송출 아웃", LogType.Display); + } + } + if (tempTime > new TimeSpan(0)) + { + if (tempTime < new TimeSpan(6000000) && !s.HasDisplayed) + { + try + { + int groupIndex = Convert.ToInt32(s.sceneGroupName.Replace("Group", "")) - 1; + SceneVO scene = SceneLists[groupIndex][GetWholeSceneIndex(groupIndex, s.sceneName)]; + TM.Display(scene, s.layerNumber, s.변수정보); + Log(s.sceneName + " 송출", LogType.Display); + s.HasDisplayed = true; + } + catch (Exception ex) + { + + } + } + } + } + } + } + + /* + void SceneCheck() + { + //이전코드 + if (schedules != null) + { + foreach (var s in schedules) + { + if (s.scheduleType.Equals("송출")) + { + TimeSpan tempTime = (TimeSpan)(s.StartTimeDateTime - DateTime.Now.Add(timeGap)); + //Console.WriteLine(tempTime.ToString()); + + if (tempTime + s.DurationSpan > new TimeSpan(0)) + { + if (tempTime + s.DurationSpan < new TimeSpan(6000000)) + { + TM.Out(s.layerNumber); + Log(s.layerNumber + " 송출 아웃", LogType.Display); + } + } + if (tempTime > new TimeSpan(0)) + { + if (tempTime < new TimeSpan(6000000)) + { + SceneVO scene = WholeScenes[GetWholeSceneIndex(s.sceneName)]; + TM.Display(scene, s.layerNumber, s.변수정보); + Log(s.sceneName + " 송출", LogType.Display); + } + } + + } + } + } + } + */ + + int GetStringLength(string str) + { + int counter = 0; + int pos = 0; + while (pos < str.Length) + { + if (str[pos] != ':') + counter++; + pos++; + } + return counter; + } + void UpdateTime() + { + string time = DateTime.Now.Add(timeGap).ToString("HH:mm:ss"); + if (GetStringLength(time) > digitalGauge1.DigitCount) + digitalGauge1.DigitCount = GetStringLength(time); + digitalGauge1.Text = time; + } + + + #endregion + + private void toggleSwitchChannel_Toggled(object sender, EventArgs e) + { + isCable = toggleSwitchChannel.IsOn; + SaveDafaultOptions(); + LoadSchedule(); + } + + private void toggleSwitch1_Toggled(object sender, EventArgs e) + { + isAutoDisplaying = toggleSwitch1.IsOn; + SaveDafaultOptions(); + //SaveSetting(); + } + + private void toggleSwitchDone송출보지않기_Toggled(object sender, EventArgs e) + { + isDoneDisplayInvisible = toggleSwitchDone송출보지않기.IsOn; + SaveDafaultOptions(); + ApplyRowFilter(); + } + + private void timeEdit2_EditValueChanged(object sender, EventArgs e) + { + LoadSchedule(); + } + + + #region Scene List + + //BindingList WholeScenes = new BindingList(); + List> SceneLists = new List>(); + BindingList nowSelectedSceneVariables = new BindingList(); + + private void btnSceneLoad_Click(object sender, EventArgs e) + { + if (!isModifying) + { + MessageBox.Show("수정 모드에서만 사용할 수 있습니다."); + return; + } + + int saveFrame = 60; + try + { + saveFrame = Convert.ToInt32(txtThumbnailFrame.Text); + } + catch (Exception ex) { } + + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + // 선택한 모든 파일 경로 가져오기 + string[] paths = openFileDialog1.FileNames; + int fileIndex = 1; // 파일 번호를 위한 인덱스 + + // 각 파일에 대해 처리 + foreach (string path in paths) + { + string fileName = Path.GetFileNameWithoutExtension(path); + + // 고유한 previewName 생성: 시간 + GUID + 인덱스 + string previewName = $"{DateTime.Now.Add(timeGap):yyyyMMddHHmmss}_{fileIndex}"; + string savePath = Path.Combine(Environment.CurrentDirectory, @"Thumbnail\", previewName + ".png"); + + // 파일 로드 처리 + TM.FileLoad(path, previewName, savePath, saveFrame); + + // UI 업데이트 (여러 파일일 경우 마지막 파일 기준) + txtSceneListName.Text = fileName; + txtSceneListPath.Text = path; + txtSceneListTime.Text = previewName; + + // 썸네일 처리 + waitThumbnailPath.Add(savePath); + + // 현재 선택된 씬 변수 초기화 + nowSelectedSceneVariables.Clear(); + + btnSceneAdd_Click(null, null); + + // 처리 완료 로그 출력 + Log($"Loaded: {fileName} (Saved Thumbnail: {savePath})", LogType.Normal); + fileIndex++; + } + + Log($"{paths.Length} file(s) loaded successfully.", LogType.Normal); + + /* + string path = openFileDialog1.FileName; + string fileName = Path.GetFileNameWithoutExtension(path); + string previewName = DateTime.Now.Add(timeGap).ToString("yyyyMMddhhmmss"); + string savePath = Environment.CurrentDirectory + @"\Thumbnail\" + previewName + ".png"; + TM.FileLoad(path, previewName, savePath); + + txtSceneListName.Text = fileName; + txtSceneListPath.Text = path; + txtSceneListTime.Text = previewName; + + isWaitThumbnail = true; + waitThumbnailPath = savePath; + + nowSelectedSceneVariables.Clear(); + */ + } + + } + + private void listBoxControl1_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + if (!listBoxControl1.Focused) return; + + if (listBoxControl1.SelectedItems.Count > 0) + { + SceneVO selected = SceneLists[cmbSceneListGroup.SelectedIndex][listBoxControl1.SelectedIndex]; + txtSceneListName.Text = selected.SceneName; + txtSceneListPath.Text = selected.ScenePath; + txtSceneListTime.Text = selected.SceneDate; + //cmbSceneListCG.SelectedItem = selected.SceneCG; + cmbSceneListLayer.Text = selected.SceneLayer; + + if (waitThumbnailPath.Count == 0) + { + string imgPath = Environment.CurrentDirectory + @"\Thumbnail\" + selected.SceneDate + ".png"; + + try + { + if (File.Exists(imgPath)) + { + pictureBoxThumbnailSceneList.Image = Image.FromFile(imgPath); + } + else + { + Log($"썸네일 이미지가 존재하지 않습니다: {imgPath}", LogType.Error); + pictureBoxThumbnailSceneList.Image = Properties.Resources.no_image_icon_23494; + } + } + catch (Exception ex) + { + Log($"썸네일 이미지 로드 중 오류 발생: {ex.Message}", LogType.Error); + pictureBoxThumbnailSceneList.Image = Properties.Resources.no_image_icon_23494; + } + } + + nowSelectedSceneVariables.Clear(); + foreach (var v in selected.Variables) nowSelectedSceneVariables.Add(v); + } + else + { + pictureBoxThumbnailSceneList.Image = null; + + txtSceneListName.Text = ""; + txtSceneListPath.Text = ""; + txtSceneListTime.Text = ""; + + } + } + catch (Exception ex) + { + Log(ex.Message, LogType.Error); + } + } + + private int GetWholeSceneIndex(int groupIndex, string SceneName) + { + int index = -1; + for (int i = 0; i < SceneLists[groupIndex].Count; i++) + if (SceneLists[groupIndex][i].SceneName == SceneName) index = i; + + return index; + } + + private bool checkExistScene(string SceneName, bool forRemove = false) + { + if (forRemove) + { + int index = -1; + for (int i = 0; i < SceneLists[cmbSceneListGroup.SelectedIndex].Count; i++) + if (SceneLists[cmbSceneListGroup.SelectedIndex][i].SceneName == SceneName) index = i; + + if (index > -1) SceneLists[cmbSceneListGroup.SelectedIndex].RemoveAt(index); + + return true; + } + + foreach (var v in SceneLists[cmbSceneListGroup.SelectedIndex]) if (v.SceneName == SceneName) return true; + return false; + } + + + + private void btnSceneAdd_Click(object sender, EventArgs e) + { + if (!isModifying) + { + MessageBox.Show("수정 모드에서만 사용할 수 있습니다."); + return; + } + + SceneVO sceneVO = new SceneVO(); + sceneVO.SceneName = txtSceneListName.Text; + sceneVO.SceneDate = txtSceneListTime.Text; + sceneVO.ScenePath = txtSceneListPath.Text; + //sceneVO.SceneCG = cmbSceneListCG.Text; + sceneVO.SceneLayer = cmbSceneListLayer.Text; + + BindingList variables = new BindingList(); + foreach (var v in (BindingList)listBoxControl2.DataSource) variables.Add(v); + + sceneVO.Variables = variables; + + + if (checkExistScene(sceneVO.SceneName)) + { + if (MessageBox.Show("같은 이름의 Scene 이 존재합니다. 변경하여 저장합니까?", "YesOrNo", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + checkExistScene(sceneVO.SceneName, true); + Log($"'{sceneVO.SceneName}' 씬이 기존 데이터를 덮어씌웁니다.", LogType.Normal); + } + else + { + Log($"씬 추가 취소: '{sceneVO.SceneName}' 씬이 이미 존재합니다.", LogType.Normal); + return; + } + } + + //WholeScenes.Add(sceneVO); + SceneLists[cmbSceneListGroup.SelectedIndex].Add(sceneVO); + + Log($"씬 추가: 이름='{sceneVO.SceneName}', 경로='{sceneVO.ScenePath}', 레이어='{sceneVO.SceneLayer}'", LogType.Normal); + + listBoxControl1.SelectedIndex = SceneLists[cmbSceneListGroup.SelectedIndex].Count - 1; + + SceneListSave(cmbSceneListGroup.SelectedIndex); + + sceneVO.GroupName = GroupAliasName; + cmbSceneSchedule.Properties.Items.Add(sceneVO.SceneName); + } + + private void btnSceneRemove_Click(object sender, EventArgs e) + { + if (!isModifying) + { + MessageBox.Show("수정 모드에서만 사용할 수 있습니다."); + return; + } + + if (sender == btnSceneRemoveAll) + { + if (MessageBox.Show("현재 그룹의 모든 씬을 삭제합니까?", "그룹 전체 삭제", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + SceneLists[cmbSceneListGroup.SelectedIndex].Clear(); + + Log($"씬 삭제: 그룹", LogType.Normal); + SceneListSave(cmbSceneListGroup.SelectedIndex); + } + } + else + { + if (listBoxControl1.SelectedItems.Count > 0) + { + + var removedScene = SceneLists[cmbSceneListGroup.SelectedIndex][listBoxControl1.SelectedIndex]; + + + //스케쥴을 확인하고 없는 경우에만 지워야 한다. 임시 + bool canRemove = true; + foreach (var s in displaySchedule) + { + if (s.scheduleType == "송출") + { + if (s.sceneGroupName == cmbSceneListGroup.Text) + { + if (s.sceneName == removedScene.SceneName) + { + if (s.StartTimeDateTime > DateTime.Now) + { + canRemove = false; + break; + } + } + } + } + } + + if (canRemove == false) + { + MessageBox.Show("송출 예정인 Scene 이므로 확인 후 삭제 해 주세요."); + return; + } + + + SceneLists[cmbSceneListGroup.SelectedIndex].RemoveAt(listBoxControl1.SelectedIndex); + /* + var removedScene = WholeScenes[listBoxControl1.SelectedIndex]; + WholeScenes.RemoveAt(listBoxControl1.SelectedIndex); + */ + + Log($"씬 삭제: 이름='{removedScene.SceneName}', 경로='{removedScene.ScenePath}'", LogType.Normal); + SceneListSave(cmbSceneListGroup.SelectedIndex); + } + else + { + Log("씬 삭제 실패: 선택된 씬이 없습니다.", LogType.Error); + } + } + } + + private void listBoxControl2_SelectedIndexChanged(object sender, EventArgs e) + { + if (listBoxControl2.SelectedItems.Count > 0) + { + VariablesVO selected = nowSelectedSceneVariables[listBoxControl2.SelectedIndex]; + txtVariableListTag.Text = selected.Tag; + txtVariableListText.Text = selected.Text; + } + else + { + txtVariableListTag.Text = ""; + txtVariableListText.Text = ""; + } + } + + private void btnVariableListAdd_Click(object sender, EventArgs e) + { + if (!isModifying) + { + MessageBox.Show("수정 모드에서만 사용할 수 있습니다."); + return; + } + + VariablesVO variablesVO = new VariablesVO(); + variablesVO.Tag = txtVariableListTag.Text; + variablesVO.Text = txtVariableListText.Text; + nowSelectedSceneVariables.Add(variablesVO); + + if (checkExistScene(txtSceneListName.Text)) SceneLists[cmbSceneListGroup.SelectedIndex][listBoxControl1.SelectedIndex].Variables.Add(variablesVO); + + SceneListSave(cmbSceneListGroup.SelectedIndex); + } + + private void btnVariableListDel_Click(object sender, EventArgs e) + { + if (!isModifying) + { + MessageBox.Show("수정 모드에서만 사용할 수 있습니다."); + return; + } + + if (listBoxControl2.SelectedItems.Count > 0) + { + nowSelectedSceneVariables.RemoveAt(listBoxControl2.SelectedIndex); + } + SceneListSave(cmbSceneListGroup.SelectedIndex); + } + + string getSceneListPath(int index) + { + return sceneListPath.Replace("sceneList.json", "sceneList" + index + ".json"); + } + string sceneListPath = Environment.CurrentDirectory + @"\Data\sceneList.json"; + private void SceneListSave(int index) + { + string json = JsonConvert.SerializeObject(SceneLists[index]); + File.WriteAllText(getSceneListPath(index), json.ToString(), Encoding.UTF8); + DateTime serverTime = DateTime.Now.Add(timeGap); + // 서버 시간을 기준으로 파일 수정 시간 설정 + File.SetLastWriteTimeUtc(getSceneListPath(index), serverTime); + } + + private void sceneListLoad() + { + if (InvokeRequired) + { + Invoke(new Action(sceneListLoad)); + return; + } + + //if (File.Exists(sceneListPath)) + { + //WholeScenes.Clear(); + + for (int i = 0; i < 15; i++) + { + if (File.Exists(getSceneListPath(i))) + { + SceneLists[i].Clear(); + using (StreamReader file = new StreamReader(getSceneListPath(i))) + { + BindingList buf = JsonConvert.DeserializeObject>(file.ReadToEnd()); + + foreach (var v in buf) + { + SceneLists[i].Add(v); + } + } + } + } + /* + using (StreamReader file = new StreamReader(sceneListPath)) + { + BindingList buf = JsonConvert.DeserializeObject>(file.ReadToEnd()); + + foreach (var v in buf) + { + WholeScenes.Add(v); + } + } + */ + } + + //자신의 값이 변경될떄를 대비 + GroupAliasName = ""; + if (SceneLists[cmbSceneListGroup.SelectedIndex].Count > 0) + { + GroupAliasName = SceneLists[cmbSceneListGroup.SelectedIndex][0].GroupName; + } + txtGroupAliasName.Text = GroupAliasName; + } + + + + + + #endregion + + + + #region Log + + public LogWriter LW = LogWriter.getInstance(); + bool isFirstLog = true; + int countLines = 0; + + public void Log(string logMessage, LogType logType) + { + Color txtcolor; + + if (logType == LogType.Normal) txtcolor = LW.colorLogNormal; + else if (logType == LogType.Display) txtcolor = LW.colorLogDisplay; + else txtcolor = LW.colorLogError; //LogType.Error + + + if ((logType == LogType.Normal && LW.isShowLogNormal) || + (logType == LogType.Display && LW.isShowLogDisplay) || + (logType == LogType.Error && LW.isShowLogError)) + { + if (isFirstLog) + { + isFirstLog = false; + return; + } + + if (isFormClosing) return; + + Invoke((Action)(() => + { + countLines++; + if (countLines > 50) + { + txtLog.Clear(); + countLines = 0; + } + + + txtLog.SelectionStart = this.txtLog.TextLength; + txtLog.SelectionColor = Color.Green; + txtLog.SelectionStart = this.txtLog.TextLength; + txtLog.SelectionColor = txtcolor; + txtLog.AppendText(Environment.NewLine + DateTime.Now.ToString("[HH:mm:ss.fff] ") + logMessage); + txtLog.SelectionStart = this.txtLog.TextLength; + txtLog.SelectionColor = SystemColors.WindowText; + + txtLog.SelectionStart = txtLog.Text.Length; + txtLog.ScrollToCaret(); + + } + )); + } + + if ((logType == LogType.Normal && LW.isSaveLogNormal) || + (logType == LogType.Display && LW.isSaveLogDisplay) || + (logType == LogType.Error && LW.isSaveLogError)) + { + LW.LogWrite(logMessage, logType); + } + + } + + #endregion + + + private void textEdit1_EditValueChanged(object sender, EventArgs e) + { + simpleButton8_Click(null, null); + } + + + List forCopySchedules = new List(); + + private void gridControlSchedule_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Delete) + { + if (!isModifying) + { + MessageBox.Show("수정 모드에서만 사용할 수 있습니다."); + return; + } + + int[] rows = gridViewSchedule.GetSelectedRows(); + if (rows.Count() > 0) + { + if (MessageBox.Show("선택한 송출을 삭제합니까?" + Environment.NewLine + "참고) 스케쥴은 삭제할 수 없습니다.", "스케쥴 삭제", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + var deleteSchedules = new List(); + var rowcount = 0; + + for (int i = 0; i < rows.Count(); i++) + { + var s = (Schedule)gridViewSchedule.GetRow(rows[i]); + var v = s.scheduleType; + if (v != "스케쥴") + { + deleteSchedules.Add(s); + rowcount++; + } + } + + for (int i = 0; i < rowcount; i++) + schedules.Remove(deleteSchedules[i]); + schedules[0].doneString = ""; + } + } + } + else if (e.Control) + { + if (!isModifying) + { + MessageBox.Show("수정 모드에서만 사용할 수 있습니다."); + return; + } + + if (e.KeyCode == Keys.C) + { + int[] rows = gridViewSchedule.GetSelectedRows(); + if (rows.Count() > 0) + { + forCopySchedules = new List(); + + for (int i = 0; i < rows.Count(); i++) + { + var s = (Schedule)gridViewSchedule.GetRow(rows[i]); + var v = s.scheduleType; + if (v != "스케쥴") + { + // 가장 가까운 시간의 스케줄과의 시간 차이 계산 + TimeSpan timeSpan = new TimeSpan(0); + for (int j = 0; j < schedules.Count; j++) + if (schedules[j].scheduleType.Equals("스케쥴")) + if (s.StartTimeDateTime - schedules[j].StartTimeDateTime > new TimeSpan(0)) + timeSpan = (DateTime)s.StartTimeDateTime - (DateTime)schedules[j].StartTimeDateTime; + s.스케쥴기준송출시간 = timeSpan; + forCopySchedules.Add(s); + } + } + } + } + else if (e.KeyCode == Keys.V) + { + int[] rows = gridViewSchedule.GetSelectedRows(); + if (rows.Count() == 1) + { + var s = (Schedule)gridViewSchedule.GetRow(rows[0]); + var v = s.scheduleType; + if (v == "스케쥴") + { + string errMsg = ""; + + // 기준 스케쥴의 시작과 종료 시각 계산 + DateTime baseStart = s.StartTimeDateTime.Value; + DateTime baseEnd = baseStart.Add((TimeSpan)s.DurationSpan); + + foreach (var target in forCopySchedules) + { + // 새 송출 스케쥴의 시작과 종료 시각 계산 + DateTime newStart = baseStart.Add(target.스케쥴기준송출시간); + DateTime newEnd = newStart.Add((TimeSpan)target.DurationSpan); + + + var newSchedule = new Schedule() + { + scheduleType = "송출", + StartTimeDateTime = s.StartTimeDateTime.Value.Add(target.스케쥴기준송출시간), + DurationSpan = target.DurationSpan, + sceneGroupName = cmbSceneGroup.Text, + sceneName = target.sceneName, + //cgNumber = target.cgNumber, + layerNumber = target.layerNumber, + doneString = "", + 변수정보 = target.변수정보 + }; + + // 새 스케쥴의 종료 시각이 기준 스케쥴의 범위 내에 있는지 확인 + if (newEnd > baseEnd || newEnd < baseStart) + { + errMsg += "기준 스케쥴 범위를 벗어납니다. " + newSchedule.StartTimeDateTime + Environment.NewLine; + continue; + } + + // 겹치는지 확인 + if (IsOverlapping(newSchedule)) + { + errMsg += $"Layer {newSchedule.layerNumber}에 겹치는 시간이 존재합니다. " + newSchedule.StartTimeDateTime + Environment.NewLine; + continue; // 겹치는 경우 추가하지 않음 + } + + schedules.Add(newSchedule); + newSchedule.RelativeStartTime = newSchedule.GetPreviousScheduleStartTime(schedules); + } + + if (errMsg != "") MessageBox.Show(errMsg, "오류", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + else + { + MessageBox.Show("스케쥴 1개 선택시에만 붙여넣기가 가능합니다."); + } + } + else + { + MessageBox.Show("스케쥴 1개 선택시에만 붙여넣기가 가능합니다."); + } + } + } + } + + private void simpleButton2_Click(object sender, EventArgs e) + { + + try + { + TM.Out((short)Convert.ToInt32(cmbScheduleSelectedLayer.Text)); + } + catch (Exception ex) + { + Log(ex.Message, LogType.Error); + } + + } + + private void btnSettingTornado_Click(object sender, EventArgs e) + { + DBIP = txtDBIP.Text; + forbidStart = (TimeSpan)timeSpanEditForbidStart.EditValue; + forbidEnd = (TimeSpan)timeSpanEditForbidEnd.EditValue; + SaveDafaultOptions(); + } + + + private void cmbSceneGroup_SelectedIndexChanged(object sender, EventArgs e) + { + if (cmbSceneGroup.SelectedItem != null) + { + string selectedGroup = cmbSceneGroup.SelectedItem.ToString(); + Log($"그룹 변경: '{selectedGroup}' 그룹이 선택되었습니다.", LogType.Normal); + UpdateSceneScheduleComboBox(); + } + } + + // cmbSceneSchedule 업데이트 로직 + private void UpdateSceneScheduleComboBox() + { + cmbSceneSchedule.Properties.Items.Clear(); + cmbSceneSchedule.Text = ""; + pictureBox1.Image = Properties.Resources.no_image_icon_23494; + + if (cmbSceneGroup.SelectedItem != null) + { + var targetScenes = SceneLists[cmbSceneGroup.SelectedIndex]; + cmbSceneSchedule.Properties.Items.Clear(); + foreach (var scene in targetScenes) + { + cmbSceneSchedule.Properties.Items.Add(scene.SceneName); + } + + if (cmbSceneSchedule.Properties.Items.Count > 0) + { + cmbSceneSchedule.SelectedIndex = 0; // 첫 번째 항목 기본 선택 + + lblGroupAliasName.Text = targetScenes[0].GroupName; + + Log($"cmbSceneSchedule 업데이트: '{cmbSceneSchedule.Properties.Items[0]}'이 기본 선택되었습니다.", LogType.Normal); + } + + } + } + + #region User Session + public class UserItem + { + public int Id { get; set; } + public string Username { get; set; } + + public override string ToString() + { + return Username; // ListBoxControl에 표시할 값 + } + } + + private async void InitlistBoxControlUsers() + { + try + { + groupBoxAdminOnly.Visible = true; + + using (HttpClient client = new HttpClient()) + { + string apiUrl = "http://" + DBInfo.getInstance().DBIP + ":60031/api/auth/users"; // REST 서버의 유저 목록 엔드포인트 + HttpResponseMessage response = await client.GetAsync(apiUrl); + + if (response.IsSuccessStatusCode) + { + string responseBody = await response.Content.ReadAsStringAsync(); + var users = JsonConvert.DeserializeObject>(responseBody); + + listBoxControlUsers.Items.Clear(); // 기존 항목 초기화 + + foreach (var user in users) + { + var userItem = new UserItem + { + Id = (int)user.Id, + Username = (string)user.Username + }; + + listBoxControlUsers.Items.Add(userItem); + } + + Log("사용자 목록을 성공적으로 불러왔습니다.", LogType.Normal); + } + else + { + string errorMessage = "사용자 목록을 불러오는 데 실패했습니다."; + Log(errorMessage, LogType.Error); + MessageBox.Show(errorMessage, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + catch (Exception ex) + { + string errorMessage = $"사용자 목록을 불러오는 중 오류 발생: {ex.Message}"; + Log(errorMessage, LogType.Error); + MessageBox.Show(errorMessage, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private async void btnUserAdd_Click(object sender, EventArgs e) + { + string username = txtUserID.Text; + string password = txtPassWord1.Text; + string passwordConfirm = txtPassWord2.Text; + + if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) + { + string errorMessage = "유저 이름과 비밀번호는 반드시 입력해야 합니다."; + Log(errorMessage, LogType.Error); + MessageBox.Show(errorMessage, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + if (password != passwordConfirm) + { + string errorMessage = "비밀번호와 비밀번호 확인이 일치하지 않습니다."; + Log(errorMessage, LogType.Error); + MessageBox.Show(errorMessage, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + try + { + using (HttpClient client = new HttpClient()) + { + string apiUrl = "http://" + DBInfo.getInstance().DBIP + ":60031/api/auth/register"; // 유저 추가 엔드포인트 + var payload = new + { + Username = username, + Password = password + }; + + string jsonPayload = JsonConvert.SerializeObject(payload); + StringContent content = new StringContent(jsonPayload, Encoding.UTF8, "application/json"); + + HttpResponseMessage response = await client.PostAsync(apiUrl, content); + + if (response.IsSuccessStatusCode) + { + string responseBody = await response.Content.ReadAsStringAsync(); + var createdUser = JsonConvert.DeserializeObject(responseBody); + + var userItem = new UserItem + { + Id = createdUser.Id, + Username = createdUser.Username + }; + + listBoxControlUsers.Items.Add(userItem); + + Log($"사용자 '{username}' 추가 성공.", LogType.Normal); + } + else + { + string errorResponse = await response.Content.ReadAsStringAsync(); + string errorMessage = $"사용자 추가 실패: {errorResponse}"; + Log(errorMessage, LogType.Error); + MessageBox.Show(errorMessage, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + catch (Exception ex) + { + string errorMessage = $"사용자 추가 중 오류 발생: {ex.Message}"; + Log(errorMessage, LogType.Error); + MessageBox.Show(errorMessage, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private async void btnUserRemove_Click(object sender, EventArgs e) + { + if (listBoxControlUsers.SelectedItem == null) + { + MessageBox.Show("삭제할 사용자를 선택해주세요.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + Log("사용자 삭제 시도 실패: 선택된 사용자가 없습니다.", LogType.Error); + return; + } + + // 선택된 UserItem에서 id 값 추출 + var selectedUser = (UserItem)listBoxControlUsers.SelectedItem; + int userId = selectedUser.Id; + + // 삭제 확인 메시지 박스 표시 + var confirmResult = MessageBox.Show( + $"정말로 사용자 '{selectedUser.Username}'을(를) 삭제하시겠습니까?", + "사용자 삭제 확인", + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning + ); + + if (confirmResult != DialogResult.Yes) + { + Log($"사용자 삭제 취소됨: '{selectedUser.Username}'", LogType.Normal); + return; + } + + try + { + Log($"사용자 삭제 시도: ID={userId}, Username='{selectedUser.Username}'", LogType.Normal); + + using (HttpClient client = new HttpClient()) + { + string apiUrl = "http://" + DBInfo.getInstance().DBIP + $":60031/api/auth/users/{userId}"; // id를 기반으로 삭제 + HttpResponseMessage response = await client.DeleteAsync(apiUrl); + + if (response.IsSuccessStatusCode) + { + listBoxControlUsers.Items.Remove(selectedUser); // UI에서 제거 + MessageBox.Show($"사용자 '{selectedUser.Username}'이(가) 성공적으로 삭제되었습니다.", "삭제 완료", MessageBoxButtons.OK, MessageBoxIcon.Information); + Log($"사용자 삭제 성공: ID={userId}, Username='{selectedUser.Username}'", LogType.Normal); + } + else + { + string errorResponse = await response.Content.ReadAsStringAsync(); + MessageBox.Show($"사용자 삭제 실패: {errorResponse}", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + Log($"사용자 삭제 실패: ID={userId}, Username='{selectedUser.Username}', 오류 메시지: {errorResponse}", LogType.Error); + } + } + } + catch (Exception ex) + { + MessageBox.Show($"사용자 삭제 중 오류 발생: {ex.Message}", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + Log($"사용자 삭제 중 예외 발생: ID={userId}, Username='{selectedUser.Username}', 예외 메시지: {ex.Message}", LogType.Error); + } + } + + #endregion + + + #region Server Sync + + private async void btnSyncData_Click(object sender, EventArgs e) + { + return; + // 백그라운드 스레드에서 실행 (UI 멈춤 방지) + _ = Task.Run(async () => + { + try + { + string date = timeEdit2.DateTime.ToString("yyyyMMdd"); + bool isCable = this.isCable; + + /* 사용하지 않음 + // 1) Groups.json + if (0 != await syncManager.SyncFileAsync(localFilePath: Path.Combine("Data", "Groups.json"), fileNameOnServer: "Groups.json")) + { + LoadSceneGroups(); + } + */ + + // 2) scenelist.json + bool isSceneListChanged = false; + for (int i = 0; i < 15; i++) + { + string localFile = Path.Combine("Data", "sceneList" + i + ".json"); + string serverFile = "sceneList" + i + ".json"; + // 각 파일에 대해 동기화 시도 (SyncFileAsync 메서드가 이를 지원하는지 확인) + try + { + if (0 != await syncManager.SyncFileAsync(localFile, serverFile)) + { + isSceneListChanged = true; + } + } + catch (Exception ex) + { + Log($"sceneList {i} 동기화 실패: {ex.Message}", LogType.Error); + } + } + if (isSceneListChanged) sceneListLoad(); + /* + if (0 != await syncManager.SyncFileAsync(localFilePath: Path.Combine("Data", "scenelist.json"), fileNameOnServer: "scenelist.json")) + { + sceneListLoad(); + } + */ + + /* + // 3) scheduleData/{isCable}_{date}.json + // 예: False_20250130.json + string localScheduleFile = Path.Combine("Data", "scheduleData", $"{isCable}_{date}.json"); + string serverScheduleFile = $"scheduleData/{isCable}_{date}.json"; + // ↑ 서버 측 API에서 fileName=...로 받을 문자열 + if (0 != await syncManager.SyncFileAsync(localScheduleFile, serverScheduleFile)) + { + LoadSchedule(); + } + */ + // timeEdit2의 날짜를 기준으로 어제, 오늘, 내일을 계산 + DateTime today = ((DateTime)timeEdit2.EditValue).Date; + DateTime yesterday = today.AddDays(-1); + DateTime tomorrow = today.AddDays(1); + var dateList = new List() { yesterday, today, tomorrow }; + + // 2가지 isCable 값에 대해 각각 동기화 진행 (총 6회) + foreach (bool cable in new bool[] { true, false }) + { + foreach (DateTime d in dateList) + { + // 동기화할 파일 경로 생성 + string localScheduleFile = Path.Combine("Data", "scheduleData", $"{cable}_{d:yyyyMMdd}.json"); + string serverScheduleFile = $"scheduleData/{cable}_{d:yyyyMMdd}.json"; + + // SyncFileAsync가 0이 아닌 값을 반환하면 (즉, 파일에 변화가 있을 경우) + if (0 != await syncManager.SyncFileAsync(localScheduleFile, serverScheduleFile)) + { + // 만약 현재 동기화된 파일이 UI에 표시되어야 하는 경우(오늘 날짜이면서 현재의 isCable와 일치) + if (d == today && cable == this.isCable) + { + // UI 갱신은 UI 스레드에서 호출 + this.Invoke(new Action(() => { LoadSchedule(); })); + } + } + } + } + + // 4) 썸네일 동기화 + await syncManager.SyncThumbnailsAsync(); + + // 동기화 완료 후 필요한 후처리 (예: 메시지, 로그) + this.Invoke((Action)(() => + { + Log($"동기화 완료", LogType.Normal); + //MessageBox.Show("동기화가 완료되었습니다.", "Sync", MessageBoxButtons.OK, MessageBoxIcon.Information); + })); + } + catch (Exception ex) + { + // 에러 로그 + Log($"동기화 중 예외 발생: {ex.Message}", LogType.Error); + Console.WriteLine($"동기화 중 예외 발생: {ex.Message}"); + } + }); + } + + #endregion + + private async void toggleSwitch수정모드_Toggled(object sender, EventArgs e) + { + _ = Task.Run(async () => + { + bool isServerModifying = await syncManager.GetIsModifyingAsync(); + + if (toggleSwitch수정모드.IsOn) + { + if (isServerModifying) + { + MessageBox.Show("작업중인 사용자가 있습니다. 잠시 후 다시 시도해 주세요.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + isModifying = false; + toggleSwitch수정모드.IsOn = false; + } + else + { + isModifying = toggleSwitch수정모드.IsOn; + await syncManager.SetIsModifyingAsync(true); + } + } + else + { + isModifying = toggleSwitch수정모드.IsOn; + await syncManager.SetIsModifyingAsync(false); + } + }); + + } + + private void toggleSwitchAutoSync_Toggled(object sender, EventArgs e) + { + isAutoSync = toggleSwitchAutoSync.IsOn; + SaveDafaultOptions(); + } + + private void timerSync_Tick(object sender, EventArgs e) + { + return; + if (isAutoSync) btnSyncData_Click(null, null); + } + + + string GroupAliasName = ""; + + private void cmbSceneListGroup_SelectedIndexChanged(object sender, EventArgs e) + { + listBoxControl1.DataSource = SceneLists[cmbSceneListGroup.SelectedIndex]; + + listBoxControl1.Focus(); + listBoxControl1_SelectedIndexChanged(null, null); + + GroupAliasName = ""; + if (SceneLists[cmbSceneListGroup.SelectedIndex].Count > 0) + { + GroupAliasName = SceneLists[cmbSceneListGroup.SelectedIndex][0].GroupName; + } + + txtGroupAliasName.Text = GroupAliasName; + } + + private void chkUseTapeTime_CheckedChanged(object sender, EventArgs e) + { + var target = (CheckEdit)sender; + target.ForeColor = target.Checked ? Color.Red : Color.FromArgb(180, 180, 180); + } + + private void timeSpanRepeat_EditValueChanged(object sender, EventArgs e) + { + TimeSpan repeatInterval = (TimeSpan)timeSpanRepeat.EditValue; + timeSpanRepeat.ForeColor = (repeatInterval > TimeSpan.Zero) ? Color.Red : Color.FromArgb(240, 240, 240); + } + + private void pictureEdit1_Click(object sender, EventArgs e) + { + UpdateSceneScheduleComboBox(); + } + + + private void simpleButton4_Click(object sender, EventArgs e) + { + GroupAliasName = txtGroupAliasName.Text; + + foreach (var v in SceneLists[cmbSceneListGroup.SelectedIndex]) + { + v.GroupName = GroupAliasName; + } + + SceneListSave(cmbSceneListGroup.SelectedIndex); + } + + private void btnThumbnailSceneListRefresh_Click(object sender, EventArgs e) + { + waitThumbnailPath.Clear(); + + listBoxControl1.Focus(); + listBoxControl1_SelectedIndexChanged(null, null); + } + + private void comboBoxEdit2_SelectedIndexChanged(object sender, EventArgs e) + { + int index = comboBoxEdit2.SelectedIndex; + lblNEXT송출배경색.BackColor = labelControlsBack[index].BackColor; + lblNEXT송출글자색.BackColor = labelControlsFore[index].BackColor; + } + + + private async void btnDBSave_Click(object sender, EventArgs e) + { + try + { + // 업로드할 파일 경로 (예: 애플리케이션 폴더 내 "yourfile.db") + DateTime today = ((DateTime)timeEdit2.EditValue).Date; + string filePath = Path.Combine("Data", "scheduleData", $"{isCable}_{today:yyyyMMdd}.json"); + if (!File.Exists(filePath)) + { + MessageBox.Show("업로드할 DB 파일이 존재하지 않습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // 예시로 폴더 번호를 1번으로 지정 (필요에 따라 변경) + int folderId = Convert.ToInt32(comboBoxEdit3.Text); + + // SyncManager의 단순 파일 업로드 메서드 호출 + if (1 != await syncManager.UploadSimpleFileAsync(filePath, folderId)) + { + MessageBox.Show("스케줄 저장 완료", "저장", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("스케줄 저장 실패..", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + catch (Exception ex) + { + MessageBox.Show("파일 업로드 실패: " + ex.Message, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + // DB 불러오기(다운로드) 버튼 클릭 이벤트 핸들러 + private async void btnDBLoad_Click(object sender, EventArgs e) + { + try + { + DateTime today = ((DateTime)timeEdit2.EditValue).Date; + string fileName = $"{isCable}_{today:yyyyMMdd}.json"; + string destinationPath = Path.Combine("Data", "scheduleData", fileName); + int folderId = Convert.ToInt32(comboBoxEdit3.Text); + + + if (1 != await syncManager.DownloadSimpleFileAsync(fileName, folderId, destinationPath)) + { + LoadSchedule(); + MessageBox.Show("스케줄 로드 완료", "로드", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("스케줄 로드 실패: DB에 저장된 파일이 없습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + catch (Exception ex) + { + MessageBox.Show("파일 다운로드 실패: " + ex.Message, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private async void btnDBCrossLoad_Click(object sender, EventArgs e) + { + try + { + DateTime today = ((DateTime)timeEdit2.EditValue).Date; + string fileName = $"{!isCable}_{today:yyyyMMdd}.json"; + string destinationPath = Path.Combine("Data", "scheduleData", fileName); + int folderId = Convert.ToInt32(comboBoxEdit3.Text); + + + if (1 != await syncManager.DownloadSimpleFileAsync(fileName, folderId, destinationPath)) + { + LoadSchedule(); + btnScheduleCopy_Click(null, null); + MessageBox.Show("크로스 스케줄 로드 완료", "로드", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("스케줄 로드 실패: DB에 저장된 파일이 없습니다.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + + } + catch (Exception ex) + { + MessageBox.Show("파일 다운로드 실패: " + ex.Message, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void simpleButton5_Click(object sender, EventArgs e) + { + try + { + int groupIndex = Convert.ToInt32(cmbSceneGroup.Text.Replace("Group", "")) - 1; + SceneVO scene = SceneLists[groupIndex][GetWholeSceneIndex(groupIndex, cmbSceneSchedule.Text)]; + TM.Display(scene, Convert.ToInt16(cmbScheduleSelectedLayer.Text), scene.Variables); + Log(cmbSceneSchedule.Text + " 송출", LogType.Display); + } + catch (Exception ex) + { + Log(ex.Message, LogType.Error); + } + } + + private void btnTimeGap1n_Click(object sender, EventArgs e) + { + + if (sender == btnTimeGap1n) setTimeGap(0.1); + else if (sender == btnTimeGap1s) setTimeGap(1); + else if (sender == btnTimeGap1m) setTimeGap(60); + else if (sender == btnTimeGap1nm) setTimeGap(-0.1); + else if (sender == btnTimeGap1sm) setTimeGap(-1); + else if (sender == btnTimeGap1mm) setTimeGap(-60); + } + + private void setTimeGap(double addTime) + { + try + { + double nowTimeGap = Convert.ToDouble(txtTimeGap.Text); + nowTimeGap += addTime; + txtTimeGap.Text = nowTimeGap.ToString(); + + timeGap = TimeSpan.FromSeconds(nowTimeGap); + + RegistryKey key = Registry.CurrentUser.CreateSubKey(subKey); + key.SetValue("timeGap", txtTimeGap.Text.ToString()); + key.Close(); + } + catch(Exception ex) + { + MessageBox.Show(ex.Message); + } + } + } +} \ No newline at end of file diff --git a/SSG_Automation_Solution/Design/Forms/MainForm.resx b/SSG_Automation_Solution/Design/Forms/MainForm.resx new file mode 100644 index 0000000..eac1ea6 --- /dev/null +++ b/SSG_Automation_Solution/Design/Forms/MainForm.resx @@ -0,0 +1,1055 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAKBgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5SZWR7ZmlsbDojRDExQzFDO30KCS5C + bGFja3tmaWxsOiM3MjcyNzI7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD + MjM7fQoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9Cgkuc3Qwe29w + YWNpdHk6MC41O30KCS5zdDF7b3BhY2l0eTowLjc1O30KCS5zdDJ7b3BhY2l0eTowLjI1O30KPC9zdHls + ZT4NCiAgPGcgaWQ9IlRpbWVTY2FsZXMiPg0KICAgIDxnIGNsYXNzPSJzdDAiPg0KICAgICAgPHBhdGgg + ZD0iTTIwLDE0LjhWMTRoLTR2NGgwQzE3LDE2LjYsMTguNCwxNS41LDIwLDE0Ljh6IiBjbGFzcz0iQmxh + Y2siIC8+DQogICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjQiIGhlaWdodD0iNCIgcng9IjAi + IHJ5PSIwIiBjbGFzcz0iQmxhY2siIC8+DQogICAgICA8cmVjdCB4PSIxMCIgeT0iOCIgd2lkdGg9IjQi + IGhlaWdodD0iNCIgcng9IjAiIHJ5PSIwIiBjbGFzcz0iQmxhY2siIC8+DQogICAgICA8cmVjdCB4PSIy + MiIgeT0iOCIgd2lkdGg9IjQiIGhlaWdodD0iNCIgcng9IjAiIHJ5PSIwIiBjbGFzcz0iQmxhY2siIC8+ + DQogICAgICA8cmVjdCB4PSI0IiB5PSI4IiB3aWR0aD0iNCIgaGVpZ2h0PSI0IiByeD0iMCIgcnk9IjAi + IGNsYXNzPSJCbGFjayIgLz4NCiAgICAgIDxyZWN0IHg9IjEwIiB5PSIyMCIgd2lkdGg9IjQiIGhlaWdo + dD0iNCIgcng9IjAiIHJ5PSIwIiBjbGFzcz0iQmxhY2siIC8+DQogICAgICA8cmVjdCB4PSI0IiB5PSIy + MCIgd2lkdGg9IjQiIGhlaWdodD0iNCIgcng9IjAiIHJ5PSIwIiBjbGFzcz0iQmxhY2siIC8+DQogICAg + ICA8cmVjdCB4PSI0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iNCIgcng9IjAiIHJ5PSIwIiBjbGFz + cz0iQmxhY2siIC8+DQogICAgPC9nPg0KICAgIDxwYXRoIGQ9Ik0xNCwxOGgtNHYtNGg0VjE4eiBNMzIs + MjRjMCw0LjQtMy42LDgtOCw4cy04LTMuNi04LThzMy42LTgsOC04UzMyLDE5LjYsMzIsMjR6IE0zMCwy + NGMwLTMuMy0yLjctNi02LTYgICBzLTYsMi43LTYsNnMyLjcsNiw2LDZTMzAsMjcuMywzMCwyNHoiIGNs + YXNzPSJSZWQiIC8+DQogICAgPHBhdGggZD0iTTE0LjgsMjhIMWMtMC42LDAtMS0wLjQtMS0xVjNjMC0w + LjYsMC40LTEsMS0xaDI4YzAuNiwwLDEsMC40LDEsMXYxM2MtMC42LTAuNS0xLjMtMC45LTItMS4yVjZI + MnYyMGgxMi4yICAgQzE0LjMsMjYuNywxNC42LDI3LjQsMTQuOCwyOHogTTI4LDI0djJoLTRoLTJ2LTJ2 + LTRoMnY0SDI4eiIgY2xhc3M9IkJsYWNrIiAvPg0KICA8L2c+DQo8L3N2Zz4L + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADRAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IlBpY3R1cmUiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJ + LkdyZWVue2ZpbGw6IzAzOUMyMzt9CgkuWWVsbG93e2ZpbGw6I0ZGQjExNTt9Cgkuc3Qwe29wYWNpdHk6 + MC41O30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTI5LDRIM0MyLjUsNCwyLDQuNSwyLDV2MjJjMCwwLjUs + MC41LDEsMSwxaDI2YzAuNSwwLDEtMC41LDEtMVY1QzMwLDQuNSwyOS41LDQsMjksNHogTTI4LDI2SDRW + NmgyNFYyNnoiIGNsYXNzPSJCbGFjayIgLz4NCiAgPGNpcmNsZSBjeD0iMjEiIGN5PSIxMSIgcj0iMyIg + Y2xhc3M9IlllbGxvdyIgLz4NCiAgPHBvbHlnb24gcG9pbnRzPSIyMCwyNCAxMCwxNCA2LDE4IDYsMjQg + IiBjbGFzcz0iR3JlZW4iIC8+DQogIDxnIGNsYXNzPSJzdDAiPg0KICAgIDxwb2x5Z29uIHBvaW50cz0i + MjIsMjQgMTgsMjAgMjAsMTggMjYsMjQgICIgY2xhc3M9IkdyZWVuIiAvPg0KICA8L2c+DQo8L3N2Zz4L + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADzBQAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5SZWR7ZmlsbDojRDExQzFDO30KCS5C + bGFja3tmaWxsOiM3MjcyNzI7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD + MjM7fQoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9Cgkuc3Qwe29w + YWNpdHk6MC41O30KCS5zdDF7b3BhY2l0eTowLjc1O30KCS5zdDJ7b3BhY2l0eTowLjI1O30KPC9zdHls + ZT4NCiAgPGcgaWQ9IlZpZXdTZXR0aW5nc18xXyI+DQogICAgPHBhdGggZD0iTTMyLDlWN2wtMi41LTAu + NkMyOS40LDYsMjkuMiw1LjYsMjksNS4ybDEuNS0yLjFsLTEuNi0xLjZMMjYuOCwzYy0wLjQtMC4yLTAu + OC0wLjQtMS4yLTAuNUwyNSwwaC0yICAgbC0wLjYsMi41QzIyLDIuNiwyMS42LDIuOCwyMS4yLDNsLTIt + MS41bC0xLjcsMS43bDEuNSwyYy0wLjIsMC40LTAuNCwwLjgtMC41LDEuMkwxNiw3djJsMi41LDAuNmMw + LjEsMC40LDAuMywwLjgsMC41LDEuMiAgIGwtMS41LDIuMWwxLjYsMS42bDIuMS0xLjVjMC40LDAuMiww + LjgsMC40LDEuMiwwLjVMMjMsMTZoMmwwLjYtMi41YzAuNC0wLjEsMC44LTAuMywxLjItMC41bDIuMSwx + LjVsMS42LTEuNkwyOSwxMC44ICAgYzAuMi0wLjQsMC40LTAuOCwwLjUtMS4yTDMyLDl6IE0yNCwxMGMt + MS4xLDAtMi0wLjktMi0yYzAtMS4xLDAuOS0yLDItMnMyLDAuOSwyLDJDMjYsOS4xLDI1LjEsMTAsMjQs + MTB6IE0xOCwyMSAgIGMwLTAuMywwLTAuNi0wLjEtMC44bDIuMS0xLjhsLTAuOC0xLjlsLTIuNywwLjJj + LTAuMy0wLjQtMC43LTAuOC0xLjItMS4ybDAuMi0yLjdMMTMuNiwxMmwtMS44LDIuMUMxMS42LDE0LDEx + LjMsMTQsMTEsMTQgICBzLTAuNiwwLTAuOCwwLjFMOC40LDEybC0xLjksMC44bDAuMiwyLjdjLTAuNCww + LjMtMC44LDAuNy0xLjIsMS4ybC0yLjctMC4yTDIsMTguNGwyLjEsMS44QzQsMjAuNCw0LDIwLjcsNCwy + MXMwLDAuNiwwLjEsMC44ICAgTDIsMjMuNmwwLjgsMS45bDIuNy0wLjJjMC4zLDAuNCwwLjcsMC44LDEu + MiwxLjJsLTAuMiwyLjdMOC40LDMwbDEuOC0yLjFjMC4zLDAsMC41LDAuMSwwLjgsMC4xczAuNiwwLDAu + OC0wLjFsMS44LDIuMWwxLjktMC44ICAgbC0wLjItMi43YzAuNC0wLjMsMC44LTAuNywxLjItMS4ybDIu + NywwLjJsMC44LTEuOWwtMi4xLTEuOEMxOCwyMS42LDE4LDIxLjMsMTgsMjF6IE0xMSwyNGMtMS43LDAt + My0xLjMtMy0zczEuMy0zLDMtM3MzLDEuMywzLDMgICBTMTIuNywyNCwxMSwyNHoiIGNsYXNzPSJCbGFj + ayIgLz4NCiAgPC9nPg0KPC9zdmc+Cw== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAPBwAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbHVle2ZpbGw6IzExNzdENzt9Cgku + WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9CgkuR3JlZW57ZmlsbDojMDM5 + QzIzO30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9Cgkuc3Qwe29w + YWNpdHk6MC41O30KCS5zdDF7b3BhY2l0eTowLjc1O30KCS5zdDJ7ZGlzcGxheTpub25lO30KCS5zdDN7 + ZGlzcGxheTppbmxpbmU7ZmlsbDojRkZCMTE1O30KCS5zdDR7ZGlzcGxheTppbmxpbmU7fQoJLnN0NXtk + aXNwbGF5OmlubGluZTtvcGFjaXR5OjAuNzU7fQoJLnN0NntkaXNwbGF5OmlubGluZTtvcGFjaXR5OjAu + NTt9Cgkuc3Q3e2Rpc3BsYXk6aW5saW5lO2ZpbGw6IzAzOUMyMzt9Cgkuc3Q4e2Rpc3BsYXk6aW5saW5l + O2ZpbGw6I0QxMUMxQzt9Cgkuc3Q5e2Rpc3BsYXk6aW5saW5lO2ZpbGw6IzExNzdENzt9Cgkuc3QxMHtk + aXNwbGF5OmlubGluZTtmaWxsOiNGRkZGRkY7fQo8L3N0eWxlPg0KICA8ZyBpZD0iRGVwYXJ0bWVudCI+ + DQogICAgPGcgY2xhc3M9InN0MSI+DQogICAgICA8cGF0aCBkPSJNMTYuMyw5LjdDMTYuMiw5LjMsMTUu + OSw5LDE2LDguNmMwLjEtMC4yLDAuMy0wLjIsMC40LTAuMkMxNS41LDUuMywxNiwyLDIwLDJjNC4zLDAs + NC42LDIuNSw0LjYsMi41ICAgIHMyLjQtMC4yLDAuOSwzLjljMC4xLTAuMSwwLjMtMC4xLDAuNCwwLjJj + MC4xLDAuNC0wLjEsMC43LTAuMiwxLjJjLTAuMiwwLjQsMC4xLDEuNC0wLjcsMS4zdjAuMWMtMC40LDEu + OS0xLjcsNC4xLTMuOSw0LjEgICAgYy0yLjIsMC0zLjQtMi4yLTMuOS00LjFjMC0wLjEsMC0wLjIsMC0w + LjJDMTYuMywxMS4yLDE2LjUsMTAuMiwxNi4zLDkuN3ogTTI0LDE2Yy0wLjYsMS0xLjYsMi43LTMsMi43 + UzE4LjYsMTcsMTgsMTYgICAgYy0wLjEsMC4yLTAuMywwLjMtMC40LDAuNGMwLDAsMCwwLDAsMGwwLDAu + MWwwLDBjLTAuMSwxLTAuNSwxLjctMC45LDJjLTAuMywwLjgtMC42LDEuNS0xLjEsMi4ybDAsMGMwLjMs + MC4zLDAuOSwwLjUsMS42LDAuOCAgICBjMS4xLDAuNCwyLjgsMC45LDMuOCwyLjRoOXYtMi4zQzMwLDE2 + LjcsMjUuNywxOC4zLDI0LDE2eiIgY2xhc3M9IkJsYWNrIiAvPg0KICAgIDwvZz4NCiAgICA8cGF0aCBk + PSJNNi4zLDE1LjdDNi4yLDE1LjMsNS45LDE1LDYsMTQuNmMwLjEtMC4yLDAuMy0wLjIsMC40LTAuMkM1 + LjUsMTEuMyw2LDgsMTAsOGM0LjMsMCw0LjYsMi41LDQuNiwyLjUgICBzMi40LTAuMiwwLjksMy45YzAu + MS0wLjEsMC4zLTAuMSwwLjQsMC4yYzAuMSwwLjQtMC4xLDAuNy0wLjIsMS4yYy0wLjIsMC40LDAuMSwx + LjQtMC43LDEuM3YwLjFjLTAuNCwxLjktMS43LDQuMS0zLjksNC4xICAgYy0yLjIsMC0zLjQtMi4yLTMu + OS00LjFjMC0wLjEsMC0wLjIsMC0wLjJDNi4zLDE3LjIsNi41LDE2LjIsNi4zLDE1Ljd6IE0xNCwyMmMt + MC42LDEtMS42LDIuNy0zLDIuN1M4LjYsMjMsOCwyMiAgIGMtMS43LDIuMy02LDAuNy02LDUuN1YzMGgx + OHYtMi4zQzIwLDIyLjcsMTUuNywyNC4zLDE0LDIyeiIgY2xhc3M9IkJsYWNrIiAvPg0KICA8L2c+DQo8 + L3N2Zz4L + + + + 595, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABBAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJ + LlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5SZWR7ZmlsbDojRDEx + QzFDO30KCS5XaGl0ZXtmaWxsOiNGRkZGRkY7fQoJLkdyZWVue2ZpbGw6IzAzOUMyMzt9Cgkuc3Qwe2Zp + bGw6IzcyNzI3Mjt9Cgkuc3Qxe29wYWNpdHk6MC41O30KCS5zdDJ7b3BhY2l0eTowLjc1O30KPC9zdHls + ZT4NCiAgPGcgaWQ9IlBhZ2VOZXh0Ij4NCiAgICA8cG9seWdvbiBwb2ludHM9IjgsNCA4LDI4IDI4LDE2 + ICAiIGNsYXNzPSJCbHVlIiAvPg0KICA8L2c+DQo8L3N2Zz4L + + + + 128, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACUAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9Ik9wZW4iIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMy + IDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5ZZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5z + dDB7b3BhY2l0eTowLjc1O30KPC9zdHlsZT4NCiAgPGcgY2xhc3M9InN0MCI+DQogICAgPHBhdGggZD0i + TTIuMiwyNS4ybDUuNS0xMmMwLjMtMC43LDEtMS4yLDEuOC0xLjJIMjZWOWMwLTAuNi0wLjQtMS0xLTFI + MTJWNWMwLTAuNi0wLjQtMS0xLTFIM0MyLjQsNCwyLDQuNCwyLDV2MjAgICBjMCwwLjIsMCwwLjMsMC4x + LDAuNEMyLjEsMjUuMywyLjIsMjUuMywyLjIsMjUuMnoiIGNsYXNzPSJZZWxsb3ciIC8+DQogIDwvZz4N + CiAgPHBhdGggZD0iTTMxLjMsMTRIOS42TDQsMjZoMjEuOGMwLjUsMCwxLjEtMC4zLDEuMy0wLjdMMzIs + MTQuN0MzMi4xLDE0LjMsMzEuOCwxNCwzMS4zLDE0eiIgY2xhc3M9IlllbGxvdyIgLz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACUAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9Ik9wZW4iIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMy + IDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5ZZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5z + dDB7b3BhY2l0eTowLjc1O30KPC9zdHlsZT4NCiAgPGcgY2xhc3M9InN0MCI+DQogICAgPHBhdGggZD0i + TTIuMiwyNS4ybDUuNS0xMmMwLjMtMC43LDEtMS4yLDEuOC0xLjJIMjZWOWMwLTAuNi0wLjQtMS0xLTFI + MTJWNWMwLTAuNi0wLjQtMS0xLTFIM0MyLjQsNCwyLDQuNCwyLDV2MjAgICBjMCwwLjIsMCwwLjMsMC4x + LDAuNEMyLjEsMjUuMywyLjIsMjUuMywyLjIsMjUuMnoiIGNsYXNzPSJZZWxsb3ciIC8+DQogIDwvZz4N + CiAgPHBhdGggZD0iTTMxLjMsMTRIOS42TDQsMjZoMjEuOGMwLjUsMCwxLjEtMC4zLDEuMy0wLjdMMzIs + MTQuN0MzMi4xLDE0LjMsMzEuOCwxNCwzMS4zLDE0eiIgY2xhc3M9IlllbGxvdyIgLz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADCAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MzczNzQ7fQoJ + LlllbGxvd3tmaWxsOiNGQ0IwMUI7fQoJLkdyZWVue2ZpbGw6IzEyOUM0OTt9CgkuQmx1ZXtmaWxsOiMz + ODdDQjc7fQoJLlJlZHtmaWxsOiNEMDIxMjc7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9Cgkuc3Qwe29w + YWNpdHk6MC41O30KCS5zdDF7b3BhY2l0eTowLjc1O30KCS5zdDJ7b3BhY2l0eTowLjI1O30KCS5zdDN7 + ZGlzcGxheTpub25lO2ZpbGw6IzczNzM3NDt9Cjwvc3R5bGU+DQogIDxwYXRoIGQ9Ik0yNyw0aC0zdjEw + SDhWNEg1QzQuNCw0LDQsNC40LDQsNXYyMmMwLDAuNiwwLjQsMSwxLDFoMjJjMC42LDAsMS0wLjQsMS0x + VjVDMjgsNC40LDI3LjYsNCwyNyw0eiBNMjQsMjRIOHYtNiAgaDE2VjI0eiBNMTAsNHY4aDEwVjRIMTB6 + IE0xNCwxMGgtMlY2aDJWMTB6IiBjbGFzcz0iQmxhY2siIC8+DQo8L3N2Zz4L + + + + + + iVBORw0KGgoAAAANSUhEUgAAACsAAAAyCAYAAADFhCKTAAAABGdBTUEAALGPC/xhBQAAC/lJREFUaEPt + WQlwFFUabhDIJJkck5np169nwuFGgbgga8plAS1RtnARUMGNurisWByu4EVIgIREA0hC5IjcECAkgUAS + LkMiR8IRQBC5gyiy64FrdJWCmcxMvyiS7rf1v+6Z6WnCqbXF1vpVTWWmjzfffP/3H6/Dcf/r6OLgrF3v + DLurS0dTR6eTCzeev62QkMCF5U0M6/yvrbiG7HNedu/EJ0c/GdnDeN1th4MFtrlkt4OSGtw8oGe403j+ + tkLfRM5MdorNZDumZ4qsxcbztxvakh3iT2SrQEkVaurbl2tjvOC2wbCBnIVsFxRSjSip5Onf+oXdbbwm + vV+U9dgY68tnx/LFp1+0z1wzKOaZZ7qE3Z3Ice3815QMNHd9/l7zPRzHtQq9++fjjnFDoqzwZnh/M0/e + QwrZwlOyiaen5lsKdNfBF7fluIDarUffH977uxRU50oTFVeaeOnzsah2Qu+I++Hk3mExqd9PwGeze0X1 + 1q3x83GmnE/V3t5BqpCPvMtTsoGnpAxRT4n9E08hf9y3AjX6lgmXvAvxj+45uOHwJHtut/acBW56PD5C + /Mc4tEkjTb8dLxx7xBnu+HqCcND9hkhPpNiW/2IqL02NGpz1gukheF+SETUCVCUViJK1iJISgUqreEVa + jWSpHMnSBl6W1vOytI6XfcvRpb2vWnPhR8K9Q+8y3XkhBR8Hwq5J4uWvXheyG6eKiicX00+z7WXG771V + tJa2onOvDVVD+NYL4b0vruZPkNWomVTwMviXqb1ZtQfZqCkPP6gcUamM/7JnJw5pa7WqGmIZ585wyO43 + Rdo4A1PP25h65oo0b6j54dCvvQm8nGzqNFZrAOlPh/chlbx8dJ61dOOUqCEF48KHkI32zxmp9ShAjKzT + FC9FlKwRKFktMPVJEfIN72Nq71971H2R3RunY+KZialnjki98zG9MJ8/AOcGD+YibsUWbTe+bX7mXGks + eIrbkhX7OqlAMiNVpiO2BvlJkU/n2koqXokeOOB37RKTe7XrtjMz5s+fzbZV+5YJsneJcKFjR87kX/yP + iab2nln4B+87mPoWCVRajuT+3TkebNNQKxTeCuE2ZAv/Q/G48CHwYdC94Y6aLMsMXzH/gVSEzpAi/qOG + BbbqxSPMyUlqNWgRj/82Ev1zGl95NttWoj9eNiIm2bsAU98ygUqFiH6z1LYZjn9Taq96fy0Cv98czpXY + tpEKpJx4O+6d5x8J+83vHZy1T3yEuGFQ2F3aJa16Obm4zYMi+50ZaU3/dCy/9Ow4fln9KOuUigHmh7oj + LtK/VtGw6OcevYeLC67OtfYtQd9LKxCVigVmn9UTI56sy4mdSo7Gy+NHRHbTXXt9PNqLi5PK+YukGFHf + UoE2zsZNpyfwq17qxlmqno591ZWGz/nLkitVpK6JWHFPwYr7Day4s7DiShcvn0tBVUO7chjWe64nF61f + /2BW3FRpleZxsNcGXm6qtB0iO7HsO+k8o7/2hgAdqO89YQl9EyMFeF/3l9gUV5rYxAiqL8WTK8i+ZUiB + cLKkAj+vVyuEVMbLjbniT/tfsb5qXDtraFQfdj3kACQrVBRoPFsFhdR3UNJfMSca77khDEjg7K4Jwhkd + SerOFJu9+VjxLcLUmy80VY60pGcNjbg/+6moLtnDInvMHmUe+tHSuEJSjXy+VYK8+++2ufo1xz1m6sCq + ByQulD0ohdDStwmUnGyvnNqClumvvyH8tXtYZ1eaKIUSxbJnFtRJrLgn4YvdYtSudRW0Pbo0bpa3UGie + Pcj0gP8gI6uGX63XQBSGpRpMyfF4hdTHf3VTleG5hHCnIezUNVmUG3PUou6ahJX9w2Mzjfe1hD3zrLnf + 56BD/s9Tkk0PBMMPRBElOzAltZiSY/Eyqe/wo27muC7aXEjFDQGSkxhR6s4WFehAjTOwDMcPjeT1g81V + kZTEtfUWiF/6Px/Is8xkRCH87yFKtmuq7nJQcrw9+FZOTOTMoatcBUdGxs1xTQySdKU7qHuKqLB2+Ram + 7iyVrCtN/OnZ+AjReH9LODcPQdEHtCYb+Qtq+AXVp0B0p6iSre/AyPZMCK0gLaJHRy7WNUlsDpJ0UHcm + I6v29umYQpnS2eNicmdTJ+M6Riwbo7bejwticthMYQw/EK1zgAWAcHNSEhfRo2ugrreM02Ns01wZfpIi + dWeJFMY6V4aowN/GaXAsoCxlEcgQm3ePtM15siMXa1zPj15OLvz0AktBoEyx8OuIwl7vsFMle6qD553M + qM73dWubZFxHj1auDPFbPUl3tkgbp7JCrx6byj4HyWrHG6eL1DMTy+fzhI8Opdtz6ybHJO/LiBhY94bl + pe9W2KpJGboUkv368APRPQ6FnGwPqtKLhx1HG/Y6Ku9NbAe7i5YxogcX685Sww0kGbFpzKcK+JfZAcjP + 0GzAjmnX5WIKJc2bj6l3kUB9BTD3agMPlCloFhD+qhbCD2SPOGRyklmAklPxh8G7PXpcPVLcrIfDe6pK + BkhSVqpyNbJgDX+SZWDZPUVTXjejBoaUlbquBuNkSPYbiB5wyOR4PA2QVV8SJKORYwAFQ2JG60kytWD+ + zMPMm27wMksypiR4WNHCr86o8zD1LREoDClEG1ICXaql8APZ/Q6ZHI2HZgDdK0D24hHnTiO/EBx73fqW + pmSAJFNstkjd6VhmZLUkYz8kD8uB8AdnVDX8wSFFJWoMPygKRD90UnIkHpoBJSeC6ma/HPOIkV8ITqTY + 8xv9JKGlzhbV11wRlJZZKfMnmdbJPHOw4snHsndhcEYNhl/zqT/7A0RFWdrvVMgBJyWH9GSdjKxU377h + mhYAnEi15DACs0Q1rHNF6oGEmYfZNsQ1WVRYQvl9Cj9K26L4FguytJyXpSKkkFKkkHKkkI28og0pCtmG + FLJDkMkuUZHqRCrtc1JG9gMnJYdDlV30ZlRgjrgqlg+LGeOZoyaKniRTbRFTUk0qLckCZMECizGVoAIE + lZXZ5nITrz538CsLXt3joMRIVvPtvnX2HCOvFpHzRHRPVnr8JBdAGWKqsSEcwtw4FV9mvvUn1mwgK6rX + GW0AyWWsAv66us9ByftOKgHZD1WyH1ej+cDjwQc5e3W+ZaCRXwgGJHDR3vma/6BW6kgy1SB5ViIFmkIg + ydi4KKrqL9VKFlQC2FQGKoE9OAf4k2uvg0r7nZQcBLLOH9bMsgwDn66aGTea7BVJUhIXY+R3Bdzz0Tk9 + SVbcYb+0EjHVINPBl55cHBgXA/VVK1tSkUbWOLNuQ8Hpqk6kZL+z6bMqtGBIfzNfkmMdLh1zfkv2i82f + laqbyOviSKYljSkJKq5QlQqSFFTVoCutEUB92ZMn6JNMva9I61xs2+KvCFrpYmTBt/jQv2vEcul9xxny + geMy822dKJPtuPnxfpH+ByTXRkICFy2tQJevTlJ7oAGeZM8ReMW7AMuBOhuaZKF7rKslGXSwGqzAuQ8L + Y8cbOV0TR6ZbFrLCDgR1SoaQhBCDJ6GVgnoVPGwcgxtIuM/YasEK/lYLZOscCqkVZX/9/aTYVm7kcl3A + UxSpWPBen6TqySZIIiAE4YZk2mSXSRkvk3XwNIdX6+27dnjOq5Btgszq7Q5VSWaLWkxPl9jhyfqN77v0 + mP6suS8r7leQhGdd2oM4I0lQD8INrRVUhLCDT+EFlQBUhRcQ1EiSWkFakmp+1vj9N431qTHpLSkZSlIL + 8Y2QDCqpSDXC+d3zLBP1z8J+NvZMt8xUldS8F0LSriMpMJJN7/GlnxRaN5FtqL5pu/AF2S58TWqEL5pq + hWP1Rba1hZNiXhz5mKnDLYf8eihNM79ENvGyFm5yvtxaQ7bwSlBJQa+kfLIwbjr8P027/Vqkrj2s3Cpe + fKJdomcz/xUouXeOZeawfqY7P15pXU+2oktXhFv1ZNOFanvFysnmp4YPNHd9oX94/Ig/mTqOGhiRVJQZ + M7Kh0pY1PjncYfyeXxJ37Mi1jCXVyLMiNRraIwf/Mi1Iixp0vhJVkxp8kdRiWU0c3YC9y6GQXY5maafY + cHqNPX+Q7iHzfwNtFr9mTl6becWA3Cq5L2cG1RenRP9hXkrswwtTo3oN72/qNDiJPd3+Fb/i/wb/Adi0 + JmDzUwkcAAAAAElFTkSuQmCC + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABgAwAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9Ik1hbmFnZV9RdWVyaWVzIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6 + bmV3IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuR3JlZW57ZmlsbDojMDM5 + QzIzO30KCS5ZZWxsb3d7ZmlsbDojRkZCMTE1O30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTE4LjcsMTZo + LTAuMmwtMi4yLTIuOWMyLjItMC43LDMuNy0xLjgsMy43LTMuMXYydjJDMjAsMTQuNywxOS41LDE1LjQs + MTguNywxNnogTTEwLDEyYzUuNSwwLDEwLTEuOCwxMC00VjQgIGMwLTIuMi00LjUtNC0xMC00UzAsMS44 + LDAsNHY0QzAsMTAuMiw0LjUsMTIsMTAsMTJ6IE0xMCwxOGMwLjcsMCwxLjQsMCwyLjEtMC4xbDMuNC00 + LjZDMTMuOSwxMy44LDEyLDE0LDEwLDE0Yy01LjUsMC0xMC0xLjgtMTAtNCAgdjRDMCwxNi4yLDQuNSwx + OCwxMCwxOHogTTEwLjUsMjBjLTAuMiwwLTAuMywwLTAuNSwwYy01LjUsMC0xMC0xLjgtMTAtNHY0YzAs + MS45LDMuMiwzLjQsNy42LDMuOUwxMC41LDIweiIgY2xhc3M9IlllbGxvdyIgLz4NCiAgPHBhdGggZD0i + TTMyLDE4bC02LDhsLTYtOGg0YzAtNC40LTEuOC04LTQtOGM0LjQsMCw4LDMuNiw4LDhIMzJ6IE0xOCwy + NGg0bC02LThsLTYsOGg0YzAsNC40LDMuNiw4LDgsOCAgQzE5LjgsMzIsMTgsMjguNCwxOCwyNHoiIGNs + YXNzPSJHcmVlbiIgLz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAwAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkNvcHkiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMy + IDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQo8L3N0 + eWxlPg0KICA8cGF0aCBkPSJNMjEsMEg5QzguNCwwLDgsMC40LDgsMXY1SDNDMi40LDYsMiw2LjQsMiw3 + djIyYzAsMC42LDAuNCwxLDEsMWgxOGMwLjYsMCwxLTAuNCwxLTF2LTVoNWMwLjYsMCwxLTAuNCwxLTFW + NyAgTDIxLDB6IE0yMCwyOEg0VjhoNGgyaDR2NWMwLDAuNiwwLjQsMSwxLDFoNXY0djR2MlYyOHogTTI2 + LDEydjEwaC00di05bC03LTdoLTVWMmg0aDZ2NHYxYzAsMC42LDAuNCwxLDEsMWg1VjEyeiIgY2xhc3M9 + IkJsYWNrIiAvPg0KPC9zdmc+Cw== + + + + + iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAB7HSURBVHhe7d1/fM71/sfxs+u6du2H2c/LNsZ+Nek4 + 2WTIhF1+Rnw1GyU/8jMVKkSNUoiQSAfHFIc4ZkWdqFuxU+qEms76gZOMLTI/DhNjszHbPt/bmhUvqf36 + fD7Xtetxv73+MXa9X+/3dbs9X27Xj8/nT38CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAWgwGQ2BgYGRkpNVq7du379ChQ8ePHz9hwoSn + n356xvUmTpw4YcKEESNG9O/fv0ePHu3atQsLC3Nzc5OPCACwNQ0bNuzatetDDz20YMGCt99+Oz09/eTJ + kyUlJUrN5OXlZWRkpKamvvbaa9OmTbv//vujoqJcXV3l8gAAzYSGhj7wwAOLFi366KOPTp8+LZNbTSUl + JYcOHdq8efNzzz3Xu3fvwMBA2RwAoHY1bdp03LhxmzZtOnHihExlXWVnZ2/YsOHRRx9t0aKFwWCQfQMA + qsHFxaVXr14rVqw4fPiwzF2bdObMmZSUlJEjRzZu3FhuBgDwh8xmc1xcXHJy8vnz52XE2o+9e/fOmjWr + VatWcnsAgBu1bt16yZIlZ86ckWlqz44ePbpw4cLo6Gi5WwCAi4vLsGHD0tPTZXbWLQcOHHj++edDQkLk + /gHAAVkslhkzZuTk5MiwrLtKS0tTU1MHDBhgNpvlcQCAI2jYsOGCBQvy8/NlQDqM06dPv/DCC40aNZJH + AwB1lZeX15w5cwoKCmQiOqSioqLk5OTWrVvLYwKAusRkMj3xxBN17D3e2pKamtqlSxd5ZABQB3To0GHf + vn0y9nC9tLS0nj17yrMDADvl7e29evVqGXW4uZ07d1qtVnmOAGBf7rnnnuPHj8uEQyX861//ioyMlAcK + ALbPzc1txYoVMtVQFaWlpStXruSScwDsSbNmzXjFv7bk5+c/9dRTzs7O8pQBwNYMGDAgLy9PxhhqZv/+ + /Z07d5ZnDQA2wsnJ6bnnnpPRhdoTFxcnDx0AdGc2mzds2CATC7Vq+PDh8twBQF8eHh7bt2+XcYXaxgAA + YFssFsvu3btlVkEFDAAANsTHx4cP/GiGAQDAVnh5efF/fy0xAADYBDc3t88//1xGFNTEAACgP4PBsGnT + JplPUBkDAID+Xn75ZRlOUB8DAIDOHnzwQZlM0AQDAICeoqKiCgsLZTJBEwwAALrx9PTMysqSsQStMAAA + 6OaNN96QmQQNMQAA6CMhIUEGErTFAACgA4vFwv3cdccAAKCDNWvWyDSyVcXFxRkZGdu2bVuzZs3cuXPH + jx8/YMCAuLi4rl27Wq3WVq1atWzZsl27dlartWvXrgkJCSNHjpw0adK8efPWrVv38ccfZ2RkXLlyRT6o + bWAAANBap06dZBTZkuLi4rS0tJdeemnw4MEtW7Y0m81yA1VkMpkiIiJ69+49ZcqUlJSUQ4cOlZaWylX1 + wAAAoCmDwbB3714ZRTYgKytrwYIFPXv29PDwkE3Xtvr16/fs2XPOnDk7d+4sKiqSrWiFAQBAU8OHD5c5 + pKsjR47MmzcvOjpaNqoVd3f3vn37vvbaa8ePH5fNqYwBAEA7bm5u2dnZMod08sknn/Tr189oNMoudeLk + 5BQdHf3yyy9rNgkYAAC0M2HCBBlCevjnP//ZokUL2ZzNMBgMVqt11apVFy9elK3XKgYAAI2YzWbd//v/ + 2WefxcTEyM5slaen52OPPfbf//5XbqOWMAAAaGT06NEygTR06tSpQYMGyZ7shNVq/eCDD+SWaowBAEAj + +/fvlwmklXfffbdBgwayIXsTGRm5fv364uJiub3qYgAA0ILVapXxo4krV65MnDhRdmPPIiIi1q9fXyvf + JGAAANDCW2+9JeNHfefPn+/evbtspU6Iiop6//335YariAEAQHW+vr7aXw4hJycnKipKtlK3dOzYcc+e + PXLnlcYAAKC6hx9+WGaPys6cOWPLH/SsRUajcdy4cefOnZNHUAkMAACq+/TTT2X2qKmwsNCOPutZKywW + y6pVq+RB/BEGAAB1BQYG1so7lpVnvx/3rKEuXbocPnxYHsfNMQAAqEvji/+sWLFCduBIPDw8li1bJg/l + JhgAANS1adMmGTyqOXz4sAbX8rR9sbGxlfnSNQMAgIqMRuP58+dl8Kimd+/esgNH5evr+84778gDuh4D + AICKWrVqJVNHNampqXJ5hzd27NhLly7Jk6rAAACgoscff1ymjmrat28vl8ef/tSiRYuDBw/Kw/oZAwCA + ijT7AvCXX34p10YFb2/vDz/8UB4ZAwCAqrKysmTqqOPhhx+Wa+MaRqPxxRdfFIfGAACgFg8PD22+AVBS + UuLr6yuXxw369+9fUFDwy7kxAACoJSYm5rqcVs2uXbvk2riJ1q1bnzp1qvzcGAAA1DJy5EgZ1eqYO3eu + XBs3Fx4enpGRwQAAoKJZs2bJqFbHgAED5Nr4XX5+frt27WIAAFDLP/7xDxnV6nCQC3/WLjc3t2bNmsmf + AkCt2LFjh4xqdVgsFrk2AEBHBw4ckFGtDrkwAEBfOTk5MqrVIRcGAOhLmy8BMAAAwLZ4e3vLnFaNq6ur + XB4AoBctB0BQUJBcHgCgl6CgIJnTqmnVqpVcHgCgl9DQUJnTqomPj5fLAwD0ouUASExMlMsDAPRisVhk + TqsmJSVFLg8A0IuWbwJnZ2fL5QEAejEajTKn1RQRESE7AADoJT8/X+a0ap588km5PABAL9nZ2TKnVfOf + //xHLg8A0Mvu3btlTqupZcuWsgMAgC7eeecdGdJqWrNmjewAAKCLV199VYa0moqLi0NDQ2UTAADtjR8/ + Xoa0yjZs2CCbAABor1u3bjKh1depUyfZBwBAY4GBgTKe1Xfo0CGuDg0A+jtx4oRMaPUlJSXJPgAAGnvv + vfdkPGti4MCBshUAgJYSExNlNmuioKAgOjpadgMA0Ey7du1kNmvlxIkT4eHhsiEAgDZMJlNubq7MZq1k + ZmY2btxY9gQA0MbGjRtlMGuIGQAAuhk6dKhMZW1lZmaGhYXJtgAAavPy8rp8+bJMZW0dP348KipKdgYA + UNvmzZtlJGvuwoULvXr1kp0BAFQVFxcn81gPJSUlEyZMkM0BANRjMplOnjwp81gn69atc3Nzky0CAFQy + a9YsmcT62bdv32233SZbBACowd/f/9KlSzKJ9ZOfn//ggw/KLgEAakhKSpIxrLc333zT19dXNgoAqF3B + wcFFRUUyg/V2/Pjxbt26yV4BALVr+fLlMoBtw+LFi7mLAACoKCAgIC8vT6avbTh06FBsbKzsGABQW6ZN + myaj15YkJSV5enrKpgEANefi4pKRkSFz15ZkZ2f36dNH9g0AqLmuXbvK0LU9KSkpDRs2lK0DAGro9ddf + l4lrey5cuPD4448bjUbZPQCg2urXr3/48GGZuDbpm2++ufPOO+UGAADVFhMTU1xcLOPWJpWWliYlJfn4 + +Mg9AACqR69bxldPTk7OmDFjDAaD3AYAoKqcnJxs4VYBVfL111+3b99e7gQAUFWenp4HDhyQKWvz1q1b + 16hRI7kZAECVhIeH5+TkyIi1eXl5eU8//bTZbJb7AQBUXkxMTGFhoYxYe5CZmRkXFyf3AwCovPj4+JKS + EpmvdmL79u2RkZFySwCASho5cqRMVvtRUlKyYsUKf39/uSsAQGVMnjxZJqtdOX/+/JQpU3hjAACqw76+ + HPCbsrKyEhIS5MYAAH+oDswARVF27tzZtm1buTcAwO8bM2aM/b4nfK3k5OTQ0FC5PQDA7+jfv78N3kO4 + GgoLC+fNm+fl5SV3CAC4mdjY2LNnz8pAtU85OTljx441mUxykwCA39S0aVMbv4NYlRw4cIDbjQFAZfn4 + +KSmpsootWcff/xxy5Yt5T4BADcyGo2zZ8+WOWrPSktLV69eHRQUJLcKALjRvffee+7cORml9qygoGDm + zJkeHh5yqwAAISQk5PPPP5c5audOnjw5atQobjUDAH/AZDLNmTOntLRU5qid+/bbbzt16iR3CwAQOnXq + ZC+3la+SlJSUJk2ayN0CAK7l6em5atUqmaD2r6CgYPr06S4uLnLDAIBr9enT5/jx4zJE7d/333/PK0IA + 8Ae8vb3//ve/ywStE1auXOnj4yM3DAC4Vo8ePX788UeZoPbv1KlT/fr1k7sFAFzLw8Nj0aJFdeMyosLa + tWu9vb3lhgEA14qOjv7qq69kgtq/7Ozs7t27y90CAK5lNBonTZqUl5cnQ9T+/fWvf+UDQgDwB4KCglJS + UmSC2r/09PSwsDC5WwCA0KVLl/3798sQtXPnzp3jnWEA+GNmszkxMfHixYsyR+3c4sWLnZ2d5W4BAEKT + Jk02btwoQ9TO/fvf//b395dbBQDcqHv37gcPHpQ5as9+/PFHbi8DAJXi4uIybdq0uvSKUF5e3j333CP3 + CQD4TUFBQcnJyTJK7VZJSckjjzwiNwkAuJm77rrr66+/lmlqt2bOnCl3CAC4GYPBMGbMmNOnT8s0tU/L + ly93cnKSmwQA3Iy3t/fixYuLi4tloNqhdevWGY1GuUMAwO9o3rx5amqqDFQ7tH79emYAAFRZXFxcVlaW + zFR7wwwAgOpwcXGZOnVqfn6+jFW78sYbb/B+AABUR6NGjdasWVNaWiqT1X688sorclcAgEpq27bt559/ + LpPVfkybNk1uCQBQSU5OTg888MCxY8dkuNqJQYMGyS0BACrP3d19xowZBQUFMl9tXlFRUceOHeV+AABV + EhwcvGHDBhmxNi8nJyckJERuBgBQVe3bt09PT5cpa9u++eYbd3d3uRMAQFUZDIbhw4efPHlSBq0NS05O + ltsAAFRP/fr1586de/nyZZm1tmrSpElyDwCAamvatOnWrVtl1tqk4uLiDh06yA0AAGoiPj7+xx9/lIlr + e44ePerr6yu7BwDUhLu7+5w5c2z/FaG33npLtg4AqLnmzZunpaXJ0LUx9913n+wbAFBzRqNxwoQJhYWF + MndtxpkzZywWi+wbAFArbrvttq+++kpGr81YtWqV7BgAUFucnZ1nz55dUlIi09c23HXXXbJjAEAt6tq1 + 6//+9z+ZvjZg9+7d3DMAANQVGBj40UcfyQC2AQMHDpS9AgBql9FoXLBggQxgvWVmZppMJtkrAKDWDRo0 + yNauKT18+HDZJQBADa1btz516pSMYf0cOHCAdwIAQCNhYWEZGRkyifXTp08f2SIAQCV+fn67du2SSayT + 7du3y/4AAOpxd3ffvn27DGOdNGvWTPYHAFCP7cyAhQsXyuYAAKpydXVNTU2Veay506dPG41G2RwAQFX1 + 6tXbvXu3jGTN9ejRQ3YGAFBbgwYNvv/+exnJ2uLycACgj+DgYH2/H3DmzBleBQIAfcTGxl65ckUGs4a4 + PigA6Gbs2LEylTU0Z84c2RAAQDNr166VwayVtLQ02Q0AQDP169fPysqS2ayJ4uJiDw8P2RAAQDMdO3Ys + LS2V8ayJbt26yW4AAFpasmSJzGZNJCYmylYAAFry8vLS5VOhGzdulK0AADQ2evRoGc/qy8rKkn0AADRm + Mpm0/3pwSUmJi4uLbAUAoLFBgwbJhFZfZGSk7AMAoDGTyfTDDz/IhFZZfHy87AMAoL3JkyfLhFbZE088 + IZsAAGjPz8+vqKhIhrSaFixYIJsAAOhi8+bNMqTVlJKSIjsAAOhiyJAhMqTVtG3bNtkBAEAXFoulpKRE + 5rRqdu/eLTsAAOjlm2++kTmtmoMHD8rlAQB6+dvf/iZzWjVHjhyRywMA9PLQQw/JnFbN6dOn5fIAUHmu + rq7yR6iBDh06yJxWTW5urlweACpv48aNTk5O8qeoruDgYJnTqmEAAKgRRVHmz58vf4rqMpvNMqdV89NP + P8nlAaDyyqNkzJgx8i9QXZrdI4w3gQHUSHmUFBcX33333fLvUC25ubkyqtXBAABQI7+kyYULF1q3bi3/ + GlV35cqV63JaNXv37pVrA0DlXRsoOTk5t956q/wXqAqTyXTtkarq448/lssDQOWJTDl69Gjjxo3lP0Kl + NWzYUBypergtMIAakaGiKJmZmcyAamvTpo08UNWsWLFCLg8AlSdD5Wf79+9v0KCB/KeohKFDh8rTVM20 + adPk8gBQeTJUKuzbt48ZUA3z58+XR6maIUOGyOUBoPJkqFwjIyOD14KqaseOHfIcVdOhQwe5PABUngyV + 62VlZUVERMjfwU3Uq1fv0qVL8hBVExgYKDsAgMqToXKDY8eONW/eXP4afktcXJw8PtVwHQgANSVz5bfk + 5uZarVb5m7hBcnKyPDvVfPrpp3J5AKgSmSs3UVRUNGjQIPnLuIaPj09hYaE8ONUsXbpUdgAAVSJz5XdN + nTqVa0ffzJQpU+R5qYmPAAGoKZkrf+TNN9+sV6+efBSH5+bmduzYMXlYagoPD5dNAECVyFyphL1795I+ + wsSJE+UxqenUqVOyAwCoKhktlXP27FkuH/0Lf3//c+fOyTNSU0pKimwCAKpKRkullZaWzp8/39nZWT6i + 41m3bp08HZWNGDFCNgEAVSWjpYrS09Md/Jti8fHx8lDU16hRI9kHAFSVjJaqy8/PHzZsmHxcxxAeHq7x + iz+Konz11VeyDwCoBpku1fXuu+8GBQXJR6/TPD099+zZIw9CfYmJibIVAKgGmS41kJubO3r0aAf5ooDZ + bN62bZs8Ak3ccsstshsAqAaZLjW2a9eu22+/XS5Tt5jN5i1btsidayI9PV12AwDVIwOmNhQXFy9btszX + 11cuVie4u7t/8MEHcs9aGTt2rGwIAKpHBkztOXv27KRJk1xdXeWS9iwwMDAtLU1uVSsXL1709PSUPQFA + 9ciMqW1Hjx4dMWKEyWSSC9uhmJiY7OxsuUMNrVmzRvYEANUmM0YdmZmZo0ePNpvNcnk7YTQaExMTr1y5 + IjemrcjISNkZAFSbzBg1HTt2bMqUKd7e3rIJ2/aXv/zliy++kJvRXGpqquwMAGpCxoz68vLyli5d2qJF + C9mK7bFYLAsXLtT9P/7lunXrJvsDgJqQMaOhHTt2jBo1yjbf1axXr96zzz6bm5srm9bJjh07ZIsAUEMy + aTRXWFi4YcOGhIQENzc32ZwegoKCZs+enZOTIxvVVadOnWSjAFBDMmn0c/HixbfffnvEiBG6XOnMaDR2 + 7949OTm5qKhIdqa3Dz/8ULYLADUnw8Y27N27d/HixQkJCQEBAbLjWmU2m2NjY5ctW3b69GnZhG24cuVK + 8+bNZd8AUHMyb2xPVlbWxo0bp06d2qtXr7CwMIPBIPdQRR4eHu3bt588efLWrVsLCgrkejZm0aJFcgMA + UCtk3ti8S5cu7du377333lu+fPkzzzwzatSoe++9NzY2NjIyMvRn/v7+3t7eAQEBoaGht99+e9u2bfv1 + 6/fYY4/Nnz//7bffPnToUGlpqXxQW3Xy5EnbfJMcQF0gIwe2JC4uTj5hAFBbZOTAZqxfv14+WwBQi2Tq + wDYcO3bMz89PPlsAUItk8MAGFBcXd+jQQT5VAFC7ZPbABnDTRwBakNkDvW3evNlBbqsJQGcyfqCrPXv2 + eHh4yCcJANQgEwj6OXXqVEhIiHyGAEAlxcXFMoegh/Pnz0dFRcmnBwDUc+eddx48eFCmEbRVUFDAx34A + 6MDd3X3p0qUyk6CVgoKCLl26yGcFADTTo0ePo0ePynCCykh/ADbBw8Pj1VdfLSkpkSkFdeTm5sbExMin + AQD00rZt2z179sisQm07cuTIn//8Z3n6AKAvk8k0ceLE8+fPy9BCLUlPTw8MDJTnDgA2wt/ff+XKlXZ0 + 9Xx7sWbNGhu5ATIA/J42bdp89tlnMsNQLUVFRY888og8YgCwZX369Nm7d6/MM1TF999/f8cdd8iTBQDb + ZzAYhg4dmpmZKYMNlbBkyRJe9gFg30wm0/Dhww8dOiQTDjeRkZHRuXNneY4AYKcMBsPAgQO/++47mXa4 + xuXLl2fNmuXq6iqPDwDsnZOT0913371t2zaZfFCUTZs2hYeHyyMDgDqmefPmr7/++sWLF2UKOqQvvviC + K7sBcCyenp5jx4799ttvZSI6jLS0tJ49e8pzAQDHER0dvXz58p9++kkGZB1VWlr6/vvvd+vWTR4EADgm + Z2fnPn36bNiwIT8/X0ZmXXHhwoWlS5c2a9ZMbh4AUH6R0YSEhLVr1549e1YmqN365JNPhg4d6u7uLncL + ALiR0Wi0Wq2LFi2y3y8Vp6WlPfnkk8HBwXJvAIBKCggIGDx48OrVq3/44QeZsjYmLy9v8+bNjz76KLkP + ALUsICAgPj7+pZde2rlzZ15engxgPVy4cGHr1q3Tp0+PjY01m82yYwBArTMYDBEREQkJCbNmzXr33Xe/ + ++67y5cvy3hWwZkzZz755JNXXnll2LBhLVq0MBqNsjMAgMYMBkOTJk06d+48atSoZ599NikpacuWLV9+ + +eWRI0dyc3NlkP+uixcvnjhx4ssvv9yyZUtSUtL06dMHDx7cpk0bHx8fuSoAwPZ5eXmFhIQ0a9as5c/a + tm1rtVpjY2PL/9iyZcvw8HA/Pz+TySR/EwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEB1WEwe + 1vrNrq9bb1JNrZ43VsR15RVh9brlhgq3el9bYdeVT+j1FXK1fEOsvsHXVxOr3y/V+NeyNLZagiqq0dVq + UF4NKyrQ6n9tBZRVQHn5V1SDsgosL8uv1dCvonzLqlF5+VSUtzXol/K6Wo09K6p+WTUpL4+KqmcNLi/3 + qxXibg1xqyjXsgp1tYa6/Fph5opyLqtwZ2u4qaKM1lvKy3C1IpzKK8Iin24A+FU/7zuUVq//XK8p0eW1 + oqxar1BaJ/1cy5U2y5U2f1PaLFPaLlPaLi2rO5f8XH9V2r1aVjGLlZhXyqr9IqX9QuWuhcpdLysdFigd + XlI6vqR0nK90mvdzzVViX1Ri5yjW2WXV+QWl8yyly0ylywyl6wyl6/NKt+eUbtOV7s8q3Z9RekxT7p5a + Vj0TlZ5PK72eUnpNUe6ZrPR+Uuk9SekzUekzQfm/J5T/e1zp+7jS9zHl3nFK3Dgl7lGl36NKv0eU+DFK + whgl4SGl/2hlwChlwAjlvhHKfcOU+4cpAx9UBg5RHhiiDBpUVoMHKkPuV4bcpwwdoAztrzyYoAyLV4b1 + U4bHKSPuVUb0VUb2UUb1Vkbfo4zupTzUUxlztzKmh/Jwt7J6pIvyaGdlrFUZF6uM66SM76g8dpfyWHvl + 8RjliXbKE3cqE9ooE9sok6KVSa2UJ+9QJkeV1ZQWylO3K0//RUn8s5J4mzK1mTLtVuWZpsoztyjPhivT + w5TpocpzwcrzTZQZjZWZQcrMRsqsQOWFAGW2vzLHoszxU170VeZ6K/O8lPmeyvz6ykv1lAXuygI35WUX + ZaGLsshZecWovGJ4Nd5JPt8A8AsGAAMAgINiADAAADgoBgADAICDYgAwAAA4KAYAAwCAg2IAMAAAOCgG + AAMAgINiADAAADgoBgADAICDYgAwAAA4KAYAAwCAg2IAMAAAOCgGAAMAgINiADAAADgoBgADAICDYgAw + AAA4KAYAAwCAg2IAMAAAOCgGAAMAgINiADAAADgoBgADAICDYgAwAAA4KAYAAwCAg2IAMAAAOCgGAAMA + gINiADAAADgoBgADAICDYgAwAAA4KAYAAwCAg2IAMAAAOCgGAAMAgINiADAAADgoBgADAICDYgAwAAA4 + KAYAAwCAg2IAMAAAOCgGAAMAgINiADAAADgoBgADAICDYgAwAAA4KAYAAwCAg2IAMAAAOCiLycNav9n1 + detNqqnV88aKuK68Iqxet9xQ4VbvayvsuvIJvb5CrpZviNU3+PpqYvX7pRr/WpbGVktQRTW6Wg3Kq2FF + BVr9r62AsgooL/+KalBWgeVl+bUa+lWUb1k1Ki+fivK2Bv1SXlersWdF1S+rJuXlUVH1rMHl5X61Qtyt + IW4V5VpWoa7WUJdfK8xcUc5lFe5sDTdVlNF6S3kZrlaEU3lFWOTTDQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIf/B1YIlQq3O94uAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAADV0RVh0VGl0 + bGUAQXJyb3c7UmVjdXJyZW5jZTtSZWZyZXNoO1VwZGF0ZTtSZWxvYWQ7RXhjaGFuZ2WGtF1IAAAII0lE + QVRYR5VXa1CU1xn+vCSmMSpJ0x/90WmbTkynSfOnnUk7TZppf9hMndZLRCBQuS9IqHJRggrIRUAuCshV + V1FAiAEViXIRFKWIY5CLoFaR+yIou8uy912Whafznv0OWdalY87MM99ydvc8z/O+73nfRRB++Fr2f/CD + FgDHrSUXJ1guCMIKESsdQHv0PuGlxCwSkFd6W8graRNyCWduCTmnW2mbE68I2ZPjkpJX75peeP3r9KLm + rrSCa7LDhdeRmtckS8lr6krMqT8Xk1693Sso6U1REBMSnVpjf84icYsEEKllHgv4njj77bTCa9lHpS3G + qroedD4cx9ikFiqdGZZ5QKU1Q/Zcg/ZeGcqrO5CUc9UYk1aT4+oT9xM7ISxiWdLmBPE1E7FIQHZxqyP5 + yqScWo/0omZV3c1HmNbPYGYeMM/Nw2QlzMEwa4NRhNk6jymtCVVXuhF16KImdN8ZT0EQVhF2xVYkZZ38 + Dx3+ilMBR6QtnJwUr0w+1pCYX9aGp3ItIyZCImGkFoIVesKMDToR9Jo+NzIxjcSsOoTuO3s4JLo0pf7G + Q2SeuEEEJIg4FgvION5MD5vzrLqkU5XfMdfkihEz0jkbqRNinXkWWrMVWvMsNCYbnk/pkFHUhNrmBzDN + zIJqRhCE15wK4DmPzbi0Pae4BWqDmZEbZq0Lbqe0ZnZYWsFVRByshG/YaUTGVyKzqBF1Nx9CqTVBY7JA + bZqFXGPChEoPpdoInckCudqI5NwmYvzRUgKWe+9M/umhY42qsUmNjVx0Sg5vdQ5hV8w57AiVNnjuzA9z + 9cv487vvf+zi6pf+qVdIQbjv7lNXI+IrcbtrGNNGC8aUeowp9JApdBiT6zAq1yEhu4EYX3cmgNy/ciCt + JrO+5REjJ8c8vBcb7sE3rFjhEXTMQwwhFRK/+/R8lZx9EZztGRBZqrzU1IuJKQNkRDypw4hci5FJLeKO + 1HIB9L1FApb/bZPEJTGr3kRVTIVGxJTPlvYBCvXghs0R74hE/BrZgxzRe2v8w0/m1TT2sJAT6chzLYZF + 7D98mRhXOwpghRdxsGJHWfVd5p6ICZTHiPgq6+feKZ+IrlkjmZmbFzh47VAE/MKkqTWNvdCbLCwCw881 + GHpmw+BzDaKSq5cU8OrexPOVd7pHYLRYF6qYCstn98kqMewr7IntyEnUKr/wU8mcfHxKj0EiZVBjYEKN + /nE1IhLOOxXADohIqHo8OqGGzmyF2mhhSC9shEdwzjbePBixlTDHwN377ylNlERXQPJVBSRR5QiMOovA + vWUIIOwpg39kKcPu2Eqnt4BFQBJVpgncW4oA+nBECfzCz7BrtmFL5M943jmxgwA6jATSweTuDRFrBEFY + J8JFfNI+1coLAoiAOhQdQF/koL9pn1c8n3is+MyLRfCeTyBBlDYuggYUgV7TLWARXXQLxE16k760VgQX + wl2RIHK6UJAmi1UwzswKRrMNvKg9/ON+lZBVj4NH6xB3pA5xmbWIzajFgbTLep4GRwGvZRy/gfSiZqQV + XsfhgutIzb+GlLwm1sEOHWukSYfE7AbEpNWkiFFZxokNZgsDPyt4b5H7ifI26IwzUOtteDw0Ca8vpX2i + mRX2Aihsq1Pyr8FsnYNpVoTFBroZhPN13fDcmZ8uOmB1wYn1JkbO3FP0wuIqvm2+3Y9xpR73R6Zwf1iJ + b+q74R6UV81vgqOANeROPzOLiWkDJlQGjE8ZMM6eelCPcJfkZorqWQ45sR05nfO6d2i2b1zmZTxT6dn1 + 6x1WondIieT8BvzTK2WnsxQwAZQjmmpPpwwi9Kynl1xsx/aAHKkgCD+2d28HXkOrP9ng/f6/Y87Jb3UM + MRNEfm9IidsPxuG9u9i0/oO/0K2im7CoCOnAtdGpNUwAkcoUeowS5DqcvdQBr1Dp1D++SPQTK5lE0CFE + yuYA7XtIMnxDosunqq/2QKEx4rFMhe5BBboHFMg+fRNbfY8W8vwTqb0AlrfIxAvQmiyMdIRBi0Gxjze1 + 9SE4uhxuktzaje7xXn/8q+d6QRDe+uhT9/e2+aR4+YZJayPiq9DaPsDmwJOnakbcNaBA450BMqD+4Pcb + 3xWvNUXtBQHrdsVVQmO0YHhSi76xafQ9VeH+sK2AHo2pMDShxoWGe0jKrkX4wUoERJYgPO4bpOVfRU1T + L54pdaxu/kvO++XoGpDjVu8Ygr4qw9/d4gPt27AzAS4h+yowbbDgxLnb2HvoAjr7njHyniEFegYplwo8 + kqkgk2vxTGVgYVZqTJicNrDZ/3hMxVx39ssZWnvGEJ5QhU3/Ss8WU7fwe9CZgHXUv89Wt2PzjrRjW3wy + Cr/cX46bd4fRM6S05VLMJw8tOezqV6BLJOzsn0TnEzk6nkyiru0JJFFl2LQjo0DsgrwFOxVAYXnDN/wM + FcoRsdrf2uiWEOgZItUePXkddx6Mo5sIBzjZ9+hgpDbim92jSC1shHvwccNnrrFB4hzgP0SXuQUdXyB1 + 7ISrPIILDotVSl8gxat/97H7b7b6ZpV7hUpNsRnfoqT6Lura+tF6T8YIW7pGcaW1D8UXvsP+9Bp4hpyw + bPbO/PrDj7b+VmzjC84nVAZhKQG8ifCfWjxUtEdDZe07v/7Tzz9zjfXf6ptV4xqQ+8BNUqhwCzqO7YGF + im3+uQ+2+GRd2fD5gcBfrP/DL+2uKmvXNudFgpukSNguKXIqgIvgcNwnIRQVGlY0pCinlKa3xSefdPbT + c2FqOpy3sBwFLLUcOx6JIQKKFof9P6dLGXlhvawA+2V/+FJ46UUC/gd8BItwSzOolwAAAABJRU5ErkJg + gg== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADbAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IlJlbW92ZV9TaGVldF9Db2x1bW5zIiBzdHlsZT0iZW5hYmxlLWJhY2tn + cm91bmQ6bmV3IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuQmxhY2t7Zmls + bDojNzI3MjcyO30KCS5CbHVle2ZpbGw6IzExNzdENzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qw + e29wYWNpdHk6MC41O30KPC9zdHlsZT4NCiAgPGcgY2xhc3M9InN0MCI+DQogICAgPHBhdGggZD0iTTIw + LDRoOHY2aC04VjR6IE04LDEwVjRIMHY2SDh6IE04LDE4di02SDB2Nkg4eiBNMjgsMTh2LTZoLTh2Nkgy + OHogTTgsMjZ2LTZIMHY2SDh6IiBpZD0iVGFibGVfN18iIGNsYXNzPSJCbGFjayIgLz4NCiAgPC9nPg0K + ICA8cmVjdCB4PSIxMCIgeT0iNCIgd2lkdGg9IjgiIGhlaWdodD0iMjIiIHJ4PSIwIiByeT0iMCIgY2xh + c3M9IkJsdWUiIC8+DQogIDxwb2x5Z29uIHBvaW50cz0iMzIsMjIgMzAsMjAgMjYsMjQgMjIsMjAgMjAs + MjIgMjQsMjYgMjAsMzAgMjIsMzIgMjYsMjggMzAsMzIgMzIsMzAgMjgsMjYgIiBjbGFzcz0iUmVkIiAv + Pg0KPC9zdmc+Cw== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD6AQAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkNsZWFySGVhZGVyQW5kRm9vdGVyIiBzdHlsZT0iZW5hYmxlLWJhY2tn + cm91bmQ6bmV3IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuUmVke2ZpbGw6 + I0QxMUMxQzt9Cjwvc3R5bGU+DQogIDxwYXRoIGQ9Ik0yNyw0SDVDNC41LDQsNCw0LjUsNCw1djIyYzAs + MC41LDAuNSwxLDEsMWgyMmMwLjUsMCwxLTAuNSwxLTFWNUMyOCw0LjUsMjcuNSw0LDI3LDR6IE0yMiwy + MGwtMiwybC00LTRsLTQsNCAgbC0yLTJsNC00bC00LTRsMi0ybDQsNGw0LTRsMiwybC00LDRMMjIsMjB6 + IiBjbGFzcz0iUmVkIiAvPg0KPC9zdmc+Cw== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADYAwAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJ + LlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMw + MzlDMjM7fQoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9Cgkuc3Qwe29w + YWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNpdHk6MC41O30KCS5zdDJ7b3BhY2l0eTowLjI1O30KPC9zdHls + ZT4NCiAgPGcgaWQ9IkFkZEdyb3VwSGVhZGVyIj4NCiAgICA8cmVjdCB4PSI2IiB5PSI4IiB3aWR0aD0i + MTQiIGhlaWdodD0iNiIgcng9IjAiIHJ5PSIwIiBjbGFzcz0iQmx1ZSIgLz4NCiAgICA8ZyBjbGFzcz0i + c3QwIj4NCiAgICAgIDxwYXRoIGQ9Ik0yMCwxOEg2di0yaDE0VjE4eiBNMjAsMjBINnYyaDE0VjIweiBN + MjAsMjRINnYyaDE0VjI0eiIgY2xhc3M9IkJsYWNrIiAvPg0KICAgIDwvZz4NCiAgICA8cGF0aCBkPSJN + MjIsMjhINFY2aDE2aDJoMC4ybDEuNi0xLjZDMjMuNiw0LjIsMjMuMyw0LDIzLDRIM0MyLjUsNCwyLDQu + NSwyLDV2MjRjMCwwLjUsMC41LDEsMSwxaDIwYzAuNSwwLDEtMC41LDEtMSAgIHYtOS4ybC0yLTJWMjh6 + IiBjbGFzcz0iQmxhY2siIC8+DQogICAgPHBvbHlnb24gcG9pbnRzPSIzMCw3IDI3LDEwIDI0LDcgMjIs + OSAyNSwxMiAyMiwxNSAyNCwxNyAyNywxNCAzMCwxNyAzMiwxNSAyOSwxMiAzMiw5ICAiIGNsYXNzPSJS + ZWQiIC8+DQogIDwvZz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAIAwAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9Ik1vZGlmeVRhYmxlU3R5bGUiIHN0eWxlPSJlbmFibGUtYmFja2dyb3Vu + ZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbHVle2ZpbGw6IzEx + NzdENzt9CgkuQmxhY2t7ZmlsbDojNzI3MjcyO30KCS5zdDB7b3BhY2l0eTowLjU7fQo8L3N0eWxlPg0K + ICA8ZyBjbGFzcz0ic3QwIj4NCiAgICA8cGF0aCBkPSJNMjgsMTBoLThWNGg4VjEweiBNMjYuMywxNC45 + YzAuNS0wLjUsMS4xLTAuNywxLjctMC44di0yaC04djZoMy4yTDI2LjMsMTQuOXogTTAsMjZoOHYtNkgw + VjI2eiBNMTgsMjMuMlYyMCAgIGgtOHY2aDUuMkwxOCwyMy4yeiIgY2xhc3M9IkJsYWNrIiAvPg0KICA8 + L2c+DQogIDxwYXRoIGQ9Ik0wLDRoOHY2SDBWNHogTTAsMThoOHYtNkgwVjE4eiBNMTAsMTBoOFY0aC04 + VjEweiBNMTAsMThoOHYtNmgtOFYxOHogTTI5LDIzbC04LDhsLTQtNGw4LThMMjksMjN6IE0zMCwyMiAg + bDEuNy0xLjdjMC40LTAuNCwwLjQtMSwwLTEuM2wtMi43LTIuN2MtMC40LTAuNC0xLTAuNC0xLjMsMEwy + NiwxOEwzMCwyMnogTTE2LDI4djRoNEwxNiwyOHoiIGNsYXNzPSJCbHVlIiAvPg0KPC9zdmc+Cw== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADrAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJ + LlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5SZWR7ZmlsbDojRDEx + QzFDO30KCS5XaGl0ZXtmaWxsOiNGRkZGRkY7fQoJLkdyZWVue2ZpbGw6IzAzOUMyMzt9Cgkuc3Qwe2Zp + bGw6IzcyNzI3Mjt9Cgkuc3Qxe29wYWNpdHk6MC41O30KCS5zdDJ7b3BhY2l0eTowLjc1O30KPC9zdHls + ZT4NCiAgPGcgaWQ9IkFkZEZpbGUiPg0KICAgIDxwYXRoIGQ9Ik0xNiwyNkg2VjRoMTh2MTRoMlYzYzAt + MC41LTAuNS0xLTEtMUg1QzQuNSwyLDQsMi41LDQsM3YyNGMwLDAuNSwwLjUsMSwxLDFoMTFWMjZ6IiBj + bGFzcz0iQmxhY2siIC8+DQogICAgPHBvbHlnb24gcG9pbnRzPSIzMCwyNCAyNiwyNCAyNiwyMCAyMiwy + MCAyMiwyNCAxOCwyNCAxOCwyOCAyMiwyOCAyMiwzMiAyNiwzMiAyNiwyOCAzMCwyOCAgIiBjbGFzcz0i + R3JlZW4iIC8+DQogIDwvZz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD4BAAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJ + LkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlDMjM7fQoJLlllbGxvd3tmaWxsOiNG + RkIxMTU7fQoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9Cgkuc3Qwe29w + YWNpdHk6MC41O30KCS5zdDF7b3BhY2l0eTowLjc1O30KPC9zdHlsZT4NCiAgPGcgaWQ9IlRleHRBbm5v + dGF0aW9uIj4NCiAgICA8cGF0aCBkPSJNMjksMkgxQzAuNSwyLDAsMi41LDAsM3YyMGMwLDAuNSwwLjUs + MSwxLDFoN3Y4bDgtOGgxM2MwLjUsMCwxLTAuNSwxLTFWM0MzMCwyLjUsMjkuNSwyLDI5LDJ6IE0yOCwy + MkgxNS4yICAgTDEwLDI3LjJWMjJIMlY0aDI2VjIyeiIgY2xhc3M9IkJsYWNrIiAvPg0KICAgIDxwYXRo + IGQ9Ik04LjksMTUuOGgzLjJsMC42LDIuM0gxNUwxMS44LDhIOS40TDYuMSwxOGgyLjJMOC45LDE1Ljh6 + IE0xMC40LDEwLjdjMC4xLTAuMywwLjEtMC42LDAuMS0wLjloMC4xICAgYzAsMC4zLDAuMSwwLjYsMC4x + LDAuOWwxLDMuM0g5LjRMMTAuNCwxMC43eiBNMjIuOSwxNy4yQzIzLjcsMTYuNiwyNCwxNiwyNCwxNWMw + LTAuNi0wLjItMS4yLTAuNy0xLjZjLTAuNS0wLjQtMS4xLTAuNy0xLjgtMC44ICAgYzAuNi0wLjIsMS4x + LTAuNSwxLjUtMC45YzAuNC0wLjQsMC42LTAuOSwwLjYtMS40YzAtMC43LTAuMy0xLjMtMC45LTEuN0My + Mi4xLDguMiwyMS4xLDgsMTkuOSw4SDE2djkuOVYxOGg0ICAgQzIxLjIsMTgsMjIuMywxNy44LDIyLjks + MTcuMnogTTE4LjQsOS43aDAuOWMxLjEsMCwxLjcsMC40LDEuNywxLjFjMCwwLjQtMC4xLDAuNy0wLjQs + MC45QzIwLjQsMTEuOSwyMCwxMiwxOS41LDEyaC0xLjFWOS43eiAgICBNMTguNCwxNi4ydi0yLjZoMS4z + YzAuNSwwLDAuOSwwLjEsMS4zLDAuM2MwLjMsMC4yLDAuNSwwLjYsMC41LDAuOWMwLDAuNC0wLjEsMC43 + LTAuNSwxYy0wLjMsMC4yLTAuOCwwLjQtMS4zLDAuNEgxOC40eiIgY2xhc3M9IkJsdWUiIC8+DQogIDwv + Zz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAhAwAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5ZZWxsb3d7ZmlsbDojRkZCMTE1O30K + CS5SZWR7ZmlsbDojRDExQzFDO30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkJsdWV7ZmlsbDojMTE3 + N0Q3O30KCS5XaGl0ZXtmaWxsOiNGRkZGRkY7fQoJLkdyZWVue2ZpbGw6IzAzOUMyMzt9Cgkuc3Qwe29w + YWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNpdHk6MC41O30KCS5zdDJ7b3BhY2l0eTowLjI1O30KCS5zdDN7 + ZmlsbDojRkZCMTE1O30KPC9zdHlsZT4NCiAgPGcgLz4NCiAgPGcgaWQ9IlJlbW92ZURhdGFJdGVtcyI+ + DQogICAgPHBhdGggZD0iTTE4LjEsMjMuMWwtNC40LDQuNGMtMC43LDAuNy0xLjksMC43LTIuNiwwbC02 + LjYtNi42Yy0wLjctMC43LTAuNy0xLjksMC0yLjZsNC40LTQuNEwxOC4xLDIzLjF6IiBjbGFzcz0iQmx1 + ZSIgLz4NCiAgICA8cGF0aCBkPSJNMjcuNSwxMy43bC04LDhsLTkuMi05LjJsOC04YzAuNy0wLjcsMS45 + LTAuNywyLjYsMGw2LjYsNi42QzI4LjIsMTEuOCwyOC4yLDEzLDI3LjUsMTMuN3oiIGNsYXNzPSJSZWQi + IC8+DQogIDwvZz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADmAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJ + LlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5SZWR7ZmlsbDojRDEx + QzFDO30KCS5XaGl0ZXtmaWxsOiNGRkZGRkY7fQoJLkdyZWVue2ZpbGw6IzAzOUMyMzt9Cgkuc3Qwe2Zp + bGw6IzcyNzI3Mjt9Cgkuc3Qxe29wYWNpdHk6MC41O30KCS5zdDJ7b3BhY2l0eTowLjc1O30KPC9zdHls + ZT4NCiAgPGcgaWQ9IlBheW1lbnRSZWZ1bmQiPg0KICAgIDxwYXRoIGQ9Ik0xNiw0Yy0zLjMsMC02LjMs + MS4zLTguNSwzLjVMNCw0djEwaDAuMmg0LjFIMTRsLTMuNi0zLjZDMTEuOCw4LjksMTMuOCw4LDE2LDhj + NC40LDAsOCwzLjYsOCw4cy0zLjYsOC04LDggICBjLTMuNywwLTYuOC0yLjYtNy43LTZINC4yYzEsNS43 + LDUuOSwxMCwxMS44LDEwYzYuNiwwLDEyLTUuNCwxMi0xMlMyMi42LDQsMTYsNHoiIGNsYXNzPSJCbHVl + IiAvPg0KICA8L2c+DQo8L3N2Zz4L + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADQAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxpbmVfQ29sb3IiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcg + MCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MjcyNzI7 + fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5zdDB7ZmlsbDpub25lO30KCS5zdDF7b3BhY2l0eTowLjI1 + O30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTE3LDExTDcsMjFsLTQtNEwxMyw3TDE3LDExeiBNMTgsMTBs + MS43LTEuN2MwLjQtMC40LDAuNC0xLDAtMS4zTDE3LDQuM2MtMC40LTAuNC0xLTAuNC0xLjMsMEwxNCw2 + TDE4LDEweiAgIE0yLDE4djRoNEwyLDE4eiIgY2xhc3M9IkJsdWUiIC8+DQogIDxyZWN0IHg9IjAiIHk9 + IjI0IiB3aWR0aD0iMzIiIGhlaWdodD0iOCIgcng9IjAiIHJ5PSIwIiBpZD0iSW5kaWNhdG9yIiBjbGFz + cz0ic3QwIiAvPg0KICA8ZyBjbGFzcz0ic3QxIj4NCiAgICA8cGF0aCBkPSJNMCwyMy45VjMyaDMydi04 + LjFIMHogTTMwLDMwSDJ2LTRoMjhWMzB6IiBjbGFzcz0iQmxhY2siIC8+DQogIDwvZz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA+AwAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MzczNzQ7fQoJ + LlllbGxvd3tmaWxsOiNGQ0IwMUI7fQoJLkdyZWVue2ZpbGw6IzEyOUM0OTt9CgkuQmx1ZXtmaWxsOiMz + ODdDQjc7fQoJLlJlZHtmaWxsOiNEMDIxMjc7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9Cgkuc3Qwe29w + YWNpdHk6MC41O30KCS5zdDF7b3BhY2l0eTowLjc1O30KCS5zdDJ7b3BhY2l0eTowLjI1O30KCS5zdDN7 + ZGlzcGxheTpub25lO2ZpbGw6IzczNzM3NDt9Cjwvc3R5bGU+DQogIDxwYXRoIGQ9Ik0xOC44LDE2bDgu + OS04LjljMC40LTAuNCwwLjQtMSwwLTEuNGwtMS40LTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxNiwx + My4yTDcuMSw0LjNjLTAuNC0wLjQtMS0wLjQtMS40LDAgIEw0LjMsNS43Yy0wLjQsMC40LTAuNCwxLDAs + MS40bDguOSw4LjlsLTguOSw4LjljLTAuNCwwLjQtMC40LDEsMCwxLjRsMS40LDEuNGMwLjQsMC40LDEs + MC40LDEuNCwwbDguOS04LjlsOC45LDguOSAgYzAuNCwwLjQsMSwwLjQsMS40LDBsMS40LTEuNGMwLjQt + MC40LDAuNC0xLDAtMS40TDE4LjgsMTZ6IiBjbGFzcz0iUmVkIiAvPg0KPC9zdmc+Cw== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACnAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbHVle2ZpbGw6IzExNzdENzt9Cgku + WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmxhY2t7ZmlsbDojNzI3MjcyO30KCS5HcmVlbntmaWxsOiMw + MzlDMjM7fQoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLnN0MHtvcGFjaXR5OjAuNzU7fQoJLnN0MXtvcGFj + aXR5OjAuNTt9Cjwvc3R5bGU+DQogIDxnIGlkPSJBZGQiPg0KICAgIDxwYXRoIGQ9Ik0yNywxNGgtOVY1 + YzAtMC41LTAuNS0xLTEtMWgtMmMtMC41LDAtMSwwLjUtMSwxdjlINWMtMC41LDAtMSwwLjUtMSwxdjJj + MCwwLjUsMC41LDEsMSwxaDl2OSAgIGMwLDAuNSwwLjUsMSwxLDFoMmMwLjUsMCwxLTAuNSwxLTF2LTlo + OWMwLjUsMCwxLTAuNSwxLTF2LTJDMjgsMTQuNSwyNy41LDE0LDI3LDE0eiIgY2xhc3M9IkdyZWVuIiAv + Pg0KICA8L2c+DQo8L3N2Zz4L + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADrAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJ + LlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5SZWR7ZmlsbDojRDEx + QzFDO30KCS5XaGl0ZXtmaWxsOiNGRkZGRkY7fQoJLkdyZWVue2ZpbGw6IzAzOUMyMzt9Cgkuc3Qwe2Zp + bGw6IzcyNzI3Mjt9Cgkuc3Qxe29wYWNpdHk6MC41O30KCS5zdDJ7b3BhY2l0eTowLjc1O30KPC9zdHls + ZT4NCiAgPGcgaWQ9IkFkZEZpbGUiPg0KICAgIDxwYXRoIGQ9Ik0xNiwyNkg2VjRoMTh2MTRoMlYzYzAt + MC41LTAuNS0xLTEtMUg1QzQuNSwyLDQsMi41LDQsM3YyNGMwLDAuNSwwLjUsMSwxLDFoMTFWMjZ6IiBj + bGFzcz0iQmxhY2siIC8+DQogICAgPHBvbHlnb24gcG9pbnRzPSIzMCwyNCAyNiwyNCAyNiwyMCAyMiwy + MCAyMiwyNCAxOCwyNCAxOCwyOCAyMiwyOCAyMiwzMiAyNiwzMiAyNiwyOCAzMCwyOCAgIiBjbGFzcz0i + R3JlZW4iIC8+DQogIDwvZz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADxAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJ + LlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMw + MzlDMjM7fQoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9Cgkuc3Qwe29w + YWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNpdHk6MC41O30KCS5zdDJ7b3BhY2l0eTowLjI1O30KPC9zdHls + ZT4NCiAgPGcgaWQ9IkRlbGV0ZUxpc3QiPg0KICAgIDxwYXRoIGQ9Ik02LDI2VjRoMTh2MTMuMmwyLTJW + M2MwLTAuNi0wLjQtMS0xLTFINUM0LjQsMiw0LDIuNCw0LDN2MjRjMCwwLjYsMC40LDEsMSwxaDguMmwy + LTJINnoiIGNsYXNzPSJCbGFjayIgLz4NCiAgICA8cG9seWdvbiBwb2ludHM9IjI4LDIwIDI2LDE4IDIy + LDIyIDE4LDE4IDE2LDIwIDIwLDI0IDE2LDI4IDE4LDMwIDIyLDI2IDI2LDMwIDI4LDI4IDI0LDI0ICAi + IGNsYXNzPSJSZWQiIC8+DQogIDwvZz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACUAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9Ik9wZW4iIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMy + IDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5ZZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5z + dDB7b3BhY2l0eTowLjc1O30KPC9zdHlsZT4NCiAgPGcgY2xhc3M9InN0MCI+DQogICAgPHBhdGggZD0i + TTIuMiwyNS4ybDUuNS0xMmMwLjMtMC43LDEtMS4yLDEuOC0xLjJIMjZWOWMwLTAuNi0wLjQtMS0xLTFI + MTJWNWMwLTAuNi0wLjQtMS0xLTFIM0MyLjQsNCwyLDQuNCwyLDV2MjAgICBjMCwwLjIsMCwwLjMsMC4x + LDAuNEMyLjEsMjUuMywyLjIsMjUuMywyLjIsMjUuMnoiIGNsYXNzPSJZZWxsb3ciIC8+DQogIDwvZz4N + CiAgPHBhdGggZD0iTTMxLjMsMTRIOS42TDQsMjZoMjEuOGMwLjUsMCwxLjEtMC4zLDEuMy0wLjdMMzIs + MTQuN0MzMi4xLDE0LjMsMzEuOCwxNCwzMS4zLDE0eiIgY2xhc3M9IlllbGxvdyIgLz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAqAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbHVle2ZpbGw6IzExNzdENzt9Cgku + WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmxhY2t7ZmlsbDojNzI3MjcyO30KCS5HcmVlbntmaWxsOiMw + MzlDMjM7fQoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLnN0MHtvcGFjaXR5OjAuNzU7fQoJLnN0MXtvcGFj + aXR5OjAuNTt9Cjwvc3R5bGU+DQogIDxnIGlkPSJBcnJvdzNEb3duIj4NCiAgICA8cG9seWdvbiBwb2lu + dHM9IjI5LDExIDI2LDggMTYsMTggNiw4IDMsMTEgMTYsMjQgICIgY2xhc3M9IlllbGxvdyIgLz4NCiAg + PC9nPg0KPC9zdmc+Cw== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAApAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbHVle2ZpbGw6IzExNzdENzt9Cgku + WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmxhY2t7ZmlsbDojNzI3MjcyO30KCS5HcmVlbntmaWxsOiMw + MzlDMjM7fQoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLnN0MHtvcGFjaXR5OjAuNzU7fQoJLnN0MXtvcGFj + aXR5OjAuNTt9Cjwvc3R5bGU+DQogIDxnIGlkPSJBcnJvdzNVcCI+DQogICAgPHBvbHlnb24gcG9pbnRz + PSIxNiw4IDMsMjEgNiwyNCAxNiwxNCAyNiwyNCAyOSwyMSAgIiBjbGFzcz0iWWVsbG93IiAvPg0KICA8 + L2c+DQo8L3N2Zz4L + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACJAQAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbHVle2ZpbGw6IzExNzdENzt9Cjwv + c3R5bGU+DQogIDxwb2x5Z29uIHBvaW50cz0iMTIsMiAyMCwyIDIwLDE4IDI4LDE4IDE2LDMwIDQsMTgg + MTIsMTggIiBjbGFzcz0iQmx1ZSIgLz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABAAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbHVle2ZpbGw6IzExNzdENzt9Cgku + WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmxhY2t7ZmlsbDojNzI3MjcyO30KCS5HcmVlbntmaWxsOiMw + MzlDMjM7fQoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLnN0MHtvcGFjaXR5OjAuNzU7fQoJLnN0MXtvcGFj + aXR5OjAuNTt9Cjwvc3R5bGU+DQogIDxnIGlkPSJBcnJvdzFEb3duIj4NCiAgICA8cGF0aCBkPSJNMTQs + NHYxNGgtMC43SDZsMTAsMTBsMTAtMTBoLTcuM0gxOFY0SDE0eiIgaWQ9Ikdyb3VwX1NlbGVjdGlvbl8y + XyIgY2xhc3M9IkJsdWUiIC8+DQogIDwvZz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACKAQAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbHVle2ZpbGw6IzExNzdENzt9Cjwv + c3R5bGU+DQogIDxwb2x5Z29uIHBvaW50cz0iMjAsMzAgMTIsMzAgMTIsMTQgNCwxNCAxNiwyIDI4LDE0 + IDIwLDE0ICIgY2xhc3M9IkJsdWUiIC8+DQo8L3N2Zz4L + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA/AgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbHVle2ZpbGw6IzExNzdENzt9Cgku + WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmxhY2t7ZmlsbDojNzI3MjcyO30KCS5HcmVlbntmaWxsOiMw + MzlDMjM7fQoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLnN0MHtvcGFjaXR5OjAuNzU7fQoJLnN0MXtvcGFj + aXR5OjAuNTt9Cjwvc3R5bGU+DQogIDxnIGlkPSJBcnJvdzFVcCI+DQogICAgPHBhdGggZD0iTTE0LDI4 + VjE0aC0wLjdINkwxNiw0bDEwLDEwaC03LjNIMTh2MTRIMTR6IiBpZD0iR3JvdXBfU2VsZWN0aW9uXzNf + IiBjbGFzcz0iQmx1ZSIgLz4NCiAgPC9nPg0KPC9zdmc+Cw== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADCAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAw + IDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5CbGFja3tmaWxsOiM3MzczNzQ7fQoJ + LlllbGxvd3tmaWxsOiNGQ0IwMUI7fQoJLkdyZWVue2ZpbGw6IzEyOUM0OTt9CgkuQmx1ZXtmaWxsOiMz + ODdDQjc7fQoJLlJlZHtmaWxsOiNEMDIxMjc7fQoJLldoaXRle2ZpbGw6I0ZGRkZGRjt9Cgkuc3Qwe29w + YWNpdHk6MC41O30KCS5zdDF7b3BhY2l0eTowLjc1O30KCS5zdDJ7b3BhY2l0eTowLjI1O30KCS5zdDN7 + ZGlzcGxheTpub25lO2ZpbGw6IzczNzM3NDt9Cjwvc3R5bGU+DQogIDxwYXRoIGQ9Ik0yNyw0aC0zdjEw + SDhWNEg1QzQuNCw0LDQsNC40LDQsNXYyMmMwLDAuNiwwLjQsMSwxLDFoMjJjMC42LDAsMS0wLjQsMS0x + VjVDMjgsNC40LDI3LjYsNCwyNyw0eiBNMjQsMjRIOHYtNiAgaDE2VjI0eiBNMTAsNHY4aDEwVjRIMTB6 + IE0xNCwxMGgtMlY2aDJWMTB6IiBjbGFzcz0iQmxhY2siIC8+DQo8L3N2Zz4L + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADqAgAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IlJlbW92ZV9DZWxscyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5l + dyAwIDAgMzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3 + Mjt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLnN0MHtvcGFjaXR5 + OjAuNTt9Cjwvc3R5bGU+DQogIDxnIGNsYXNzPSJzdDAiPg0KICAgIDxwYXRoIGQ9Ik0yMCw0aDh2Nmgt + OFY0eiBNMjAsMThoOHYtNmgtOFYxOHogTTEwLDR2Nmg4VjRIMTB6IE04LDEwVjRIMHY2SDh6IE04LDE4 + di02SDB2Nkg4eiBNMTAsMjB2Nmg4di02SDEweiAgICBNOCwyNnYtNkgwdjZIOHoiIGNsYXNzPSJCbGFj + ayIgLz4NCiAgPC9nPg0KICA8cmVjdCB4PSIxMCIgeT0iMTIiIHdpZHRoPSI4IiBoZWlnaHQ9IjYiIHJ4 + PSIwIiByeT0iMCIgY2xhc3M9IkJsdWUiIC8+DQogIDxwb2x5Z29uIHBvaW50cz0iMzIsMjIgMzAsMjAg + MjYsMjQgMjIsMjAgMjAsMjIgMjQsMjYgMjAsMzAgMjIsMzIgMjYsMjggMzAsMzIgMzIsMzAgMjgsMjYg + IiBjbGFzcz0iUmVkIiAvPg0KPC9zdmc+Cw== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjIwLjIsIFZlcnNpb249MjAuMi4x + MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E + ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAhBAAAAu+7 + vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 + IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn + LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw + YWNlPSJwcmVzZXJ2ZSIgaWQ9IkFsbG93X1VzZXJzX3RvX0VkaXRfUmFuZ2VzIiBzdHlsZT0iZW5hYmxl + LWJhY2tncm91bmQ6bmV3IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuQmxh + Y2t7ZmlsbDojNzI3MjcyO30KCS5CbHVle2ZpbGw6IzExNzdENzt9Cgkuc3Qwe29wYWNpdHk6MC41O30K + PC9zdHlsZT4NCiAgPHBhdGggZD0iTTE4LDR2NmgtOFY0SDE4eiBNOCwxMFY0SDB2Nkg4eiBNOCwxOHYt + NkgwdjZIOHogTTE4LDE4di02aC04djZIMTh6IiBjbGFzcz0iQmx1ZSIgLz4NCiAgPGcgY2xhc3M9InN0 + MCI+DQogICAgPHBhdGggZD0iTTIwLDRoOHY2aC04VjR6IE04LDI2di02SDB2Nkg4eiBNMTgsMjIuOVYy + MGgtOHY2aDQuNUMxNS4zLDI0LjEsMTYuOCwyMy40LDE4LDIyLjl6IiBjbGFzcz0iQmxhY2siIC8+DQog + IDwvZz4NCiAgPHBhdGggZD0iTTIwLjMsMTguNGMtMC4yLTAuMy0wLjMtMC42LTAuMy0xYzAtMC4yLDAu + Mi0wLjIsMC4zLTAuMmMtMC43LTIuNSwwLTUsMi45LTUuMmMzLTAuMiwzLjcsMiwzLjcsMiAgczEuNi0w + LjEsMC43LDMuMmMwLjEsMCwwLjMtMC4xLDAuNCwwLjJjMC4xLDAuNCwwLDAuNi0wLjIsMWMtMC4yLDAu + MywwLjEsMS4xLTAuNiwxLjFjMCwwLDAsMC4xLDAsMC4xQzI2LjgsMjEuMiwyNS44LDIzLDI0LDIzICBj + LTEuOCwwLTIuOC0xLjctMy4yLTMuNGMwLDAsMC0wLjEsMC0wLjFDMjAuMiwxOS42LDIwLjQsMTguOCwy + MC4zLDE4LjR6IE0yNi43LDIzLjJjLTAuNSwxLTEuNCwyLjgtMi43LDIuOGMtMS4zLDAtMi4xLTEuOC0y + LjYtMi45ICBDMTkuOSwyNS42LDE2LDIzLjgsMTYsMjl2MWgxNnYtMUMzMiwyMy45LDI4LjIsMjUuNSwy + Ni43LDIzLjJ6IiBjbGFzcz0iQmxhY2siIC8+DQo8L3N2Zz4L + + + + 17, 17 + + + 453, 17 + + + 789, 17 + + \ No newline at end of file diff --git a/SSG_Automation_Solution/Program.cs b/SSG_Automation_Solution/Program.cs new file mode 100644 index 0000000..d1921ba --- /dev/null +++ b/SSG_Automation_Solution/Program.cs @@ -0,0 +1,35 @@ +using System; +using System.Windows.Forms; + +namespace SSG_Automation_Solution.Design.Forms +{ + static class Program + { + /// + /// 해당 애플리케이션의 주 진입점입니다. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + // 로그인 폼을 생성 + using (LoginForm loginForm = new LoginForm()) + { + // 로그인 폼의 위치를 화면 중앙으로 설정 + loginForm.StartPosition = FormStartPosition.CenterScreen; + + // 로그인 폼 표시 + var loginResult = loginForm.ShowDialog(); + + if (loginResult == DialogResult.OK && loginForm.LoginResult > 0) + { + // 로그인 성공: MainForm 실행 + Application.Run(new MainForm(loginForm.LoginResult, loginForm.Username)); + // 7/9 + } + } + } + } +} diff --git a/SSG_Automation_Solution/Properties/AssemblyInfo.cs b/SSG_Automation_Solution/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..692772a --- /dev/null +++ b/SSG_Automation_Solution/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 +// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 +// 이러한 특성 값을 변경하세요. +[assembly: AssemblyTitle("SSG_Automation_Solution")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SSG_Automation_Solution")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 +// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 +// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. +[assembly: ComVisible(false)] + +// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. +[assembly: Guid("2d212a21-573e-4c84-9aba-a559d0878be9")] + +// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다. +// +// 주 버전 +// 부 버전 +// 빌드 번호 +// 수정 버전 +// +// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를 +// 기본값으로 할 수 있습니다. +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SSG_Automation_Solution/Properties/Resources.Designer.cs b/SSG_Automation_Solution/Properties/Resources.Designer.cs new file mode 100644 index 0000000..3a8c3a0 --- /dev/null +++ b/SSG_Automation_Solution/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// 이 코드는 도구를 사용하여 생성되었습니다. +// 런타임 버전:4.0.30319.42000 +// +// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +// 이러한 변경 내용이 손실됩니다. +// +//------------------------------------------------------------------------------ + +namespace SSG_Automation_Solution.Properties { + using System; + + + /// + /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다. + /// + // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder + // 클래스에서 자동으로 생성되었습니다. + // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을 + // 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SSG_Automation_Solution.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을 + /// 재정의합니다. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다. + /// + internal static System.Drawing.Bitmap no_image_icon_23494 { + get { + object obj = ResourceManager.GetObject("no-image-icon-23494", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/SSG_Automation_Solution/Properties/Resources.resx b/SSG_Automation_Solution/Properties/Resources.resx new file mode 100644 index 0000000..7aba6cb --- /dev/null +++ b/SSG_Automation_Solution/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\no-image-icon-23494.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/SSG_Automation_Solution/Properties/Settings.Designer.cs b/SSG_Automation_Solution/Properties/Settings.Designer.cs new file mode 100644 index 0000000..0af0bf9 --- /dev/null +++ b/SSG_Automation_Solution/Properties/Settings.Designer.cs @@ -0,0 +1,29 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +namespace SSG_Automation_Solution.Properties +{ + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/SSG_Automation_Solution/Properties/Settings.settings b/SSG_Automation_Solution/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/SSG_Automation_Solution/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SSG_Automation_Solution/Properties/licenses.licx b/SSG_Automation_Solution/Properties/licenses.licx new file mode 100644 index 0000000..e7edcb1 --- /dev/null +++ b/SSG_Automation_Solution/Properties/licenses.licx @@ -0,0 +1,11 @@ +DevExpress.XtraEditors.ImageComboBoxEdit, DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraRichEdit.RichEditControl, DevExpress.XtraRichEdit.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.DateEdit, DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.Docking2010.DocumentManager, DevExpress.XtraBars.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraGauges.Win.GaugeControl, DevExpress.XtraGauges.v20.2.Win, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v20.2, Version=20.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/SSG_Automation_Solution/Resources/no-image-icon-23494.png b/SSG_Automation_Solution/Resources/no-image-icon-23494.png new file mode 100644 index 0000000..b6ffa81 Binary files /dev/null and b/SSG_Automation_Solution/Resources/no-image-icon-23494.png differ diff --git a/SSG_Automation_Solution/SSG_Automation_Solution.csproj b/SSG_Automation_Solution/SSG_Automation_Solution.csproj new file mode 100644 index 0000000..caf9511 --- /dev/null +++ b/SSG_Automation_Solution/SSG_Automation_Solution.csproj @@ -0,0 +1,184 @@ + + + + + Debug + AnyCPU + {2D212A21-573E-4C84-9ABA-A559D0878BE9} + WinExe + SSG_Automation_Solution + SSG_Automation_Solution + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + ssg.ico + + + + ..\packages\DevExpress.Data.Desktop.20.2.10\lib\net452\DevExpress.Data.Desktop.v20.2.dll + + + ..\packages\DevExpress.Data.20.2.10\lib\net452\DevExpress.Data.v20.2.dll + + + + ..\packages\DevExpress.Office.Core.20.2.10\lib\net452\DevExpress.Office.v20.2.Core.dll + + + ..\packages\DevExpress.Pdf.Core.20.2.10\lib\net452\DevExpress.Pdf.v20.2.Core.dll + + + ..\packages\DevExpress.Pdf.Drawing.20.2.10\lib\net452\DevExpress.Pdf.v20.2.Drawing.dll + + + ..\packages\DevExpress.Printing.Core.20.2.10\lib\net452\DevExpress.Printing.v20.2.Core.dll + + + ..\packages\DevExpress.RichEdit.Core.20.2.10\lib\net452\DevExpress.RichEdit.v20.2.Core.dll + + + ..\packages\DevExpress.Sparkline.Core.20.2.10\lib\net452\DevExpress.Sparkline.v20.2.Core.dll + + + ..\packages\DevExpress.Utils.20.2.10\lib\net452\DevExpress.Utils.v20.2.dll + + + ..\packages\DevExpress.Win.Navigation.20.2.10\lib\net452\DevExpress.XtraBars.v20.2.dll + + + ..\packages\DevExpress.Win.Navigation.20.2.10\lib\net452\DevExpress.XtraEditors.v20.2.dll + + + ..\packages\DevExpress.Gauges.Core.20.2.10\lib\net452\DevExpress.XtraGauges.v20.2.Core.dll + + + ..\packages\DevExpress.Win.Gauges.20.2.10\lib\net452\DevExpress.XtraGauges.v20.2.Presets.dll + + + ..\packages\DevExpress.Win.Gauges.20.2.10\lib\net452\DevExpress.XtraGauges.v20.2.Win.dll + + + + ..\packages\DevExpress.Win.Navigation.20.2.10\lib\net452\DevExpress.XtraLayout.v20.2.dll + + + ..\packages\DevExpress.Win.Printing.20.2.10\lib\net452\DevExpress.XtraPrinting.v20.2.dll + + + + + + + ..\packages\DevExpress.Win.TreeList.20.2.10\lib\net452\DevExpress.XtraTreeList.v20.2.dll + + + ..\..\..\..\..\..\K3DAsyncEngine\Bin\x64\C#\Interop.K3DAsyncEngineLib.dll + True + + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + Form + + + LoginForm.cs + + + Form + + + MainForm.cs + + + + + + + + + LoginForm.cs + + + MainForm.cs + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSG_Automation_Solution/SSG_Automation_Solution.zip b/SSG_Automation_Solution/SSG_Automation_Solution.zip new file mode 100644 index 0000000..912cb90 Binary files /dev/null and b/SSG_Automation_Solution/SSG_Automation_Solution.zip differ diff --git a/SSG_Automation_Solution/SyncManager.cs b/SSG_Automation_Solution/SyncManager.cs new file mode 100644 index 0000000..bd29ac3 --- /dev/null +++ b/SSG_Automation_Solution/SyncManager.cs @@ -0,0 +1,510 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; +using SSG_Automation_Solution.Data; + +public class FileInfoResponse +{ + public bool Exists { get; set; } + public long FileSize { get; set; } + public DateTime? LastModified { get; set; } + public string FileHash { get; set; } // 파일의 SHA-256 해시 값 +} + +public class SyncManager +{ + private static readonly string ApiBaseUrl = "http://" + DBInfo.getInstance().DBIP + ":60031/api/sync"; + private static readonly string LocalPath = Environment.CurrentDirectory + @"\Data"; + private string UserId { get; set; } + TimeSpan timeGap = new TimeSpan(0); + + public void setTimeGap(TimeSpan span) + { + timeGap = span; + } + + public SyncManager(string userId) + { + UserId = userId; + } + + public async Task GetIsModifyingAsync() + { + using (HttpClient client = new HttpClient()) + { + try + { + HttpResponseMessage response = await client.GetAsync($"{ApiBaseUrl}/modifying-status?userId={UserId}"); + if (response.IsSuccessStatusCode) + { + var result = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); + return result.isModifying; + } + } + catch (Exception ex) + { + Console.WriteLine($"서버 상태 조회 실패: {ex.Message}"); + } + return false; // 기본값 반환 + } + } + + public async Task SetIsModifyingAsync(bool status) + { + using (HttpClient client = new HttpClient()) + { + try + { + string jsonContent = JsonConvert.SerializeObject(status); + var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); + + HttpResponseMessage response = await client.PostAsync($"{ApiBaseUrl}/set-modifying?userId={UserId}", content); + + if (response.IsSuccessStatusCode) + { + Console.WriteLine($"서버 isModifying 상태 변경: {status}"); + } + else + { + Console.WriteLine($"서버 상태 변경 실패: {response.ReasonPhrase}"); + } + } + catch (Exception ex) + { + Console.WriteLine($"서버 상태 변경 요청 중 오류 발생: {ex.Message}"); + } + } + } + + /// + /// 단일 파일 동기화 (Groups.json, scenelist.json, 또는 scheduleData/*.json) + /// + /// 로컬 파일 경로 (예: Data\\Groups.json) + /// 서버에서 사용할 파일 이름 (예: Groups.json, scheduleData\\False_20250130.json) + public async Task SyncFileAsync(string localFilePath, string fileNameOnServer) + { + bool isScheduleFile = fileNameOnServer.StartsWith("scheduleData"); + bool localExists = File.Exists(localFilePath); + bool localHasSongChul = true; + + if (isScheduleFile && localExists) + { + string localContent = File.ReadAllText(localFilePath); + if (!localContent.Contains("\"scheduleType\":\"송출\"")) + { + localHasSongChul = false; + } + } + + var serverInfo = await GetServerFileInfo(fileNameOnServer); + bool serverExists = (serverInfo != null); + + if (isScheduleFile) + { + if (!localHasSongChul) localExists = false; + if (!serverExists && !localExists) + { + return 0; + } + } + else + { + if (!serverExists && !localExists) + { + return 0; + } + } + + if (serverExists && localExists) + { + var localInfo = new FileInfo(localFilePath); + long localSize = localInfo.Length; + DateTime localTime = localInfo.LastWriteTimeUtc; + string localHash = ComputeLocalFileHash(localFilePath); + + long serverSize = serverInfo.FileSize; + DateTime serverTime = serverInfo.LastModified ?? DateTime.MinValue; + string serverHash = serverInfo.FileHash; + + if (localInfo.FullName.Contains("sceneList0")) + { + Console.WriteLine($"Local: size={localSize}, time={localTime}, hash={localHash}"); + Console.WriteLine($"Server: size={serverSize}, time={serverTime}, hash={serverHash}"); + } + + if (localHash == serverHash) + { + return 0; + } + + if (localTime > serverTime) + { + await UploadRawJsonFile(localFilePath, fileNameOnServer); + return 0; + } + else + { + await DownloadRawJsonFile(localFilePath, fileNameOnServer); + if (fileNameOnServer.Contains("Groups.json")) return 1; + else if (fileNameOnServer.Contains("scenelist.json")) return 2; + else return 3; + } + } + else if (serverExists && !localExists) + { + await DownloadRawJsonFile(localFilePath, fileNameOnServer); + if (fileNameOnServer.Contains("Groups.json")) return 1; + else if (fileNameOnServer.Contains("scenelist.json")) return 2; + else return 3; + } + else if (!serverExists && localExists) + { + await UploadRawJsonFile(localFilePath, fileNameOnServer); + return 0; + } + return 0; + } + + /// + /// 서버 파일 정보 조회: fileName => { Exists, FileSize, LastModified, FileHash } + /// + private async Task GetServerFileInfo(string fileName) + { + using (HttpClient client = new HttpClient()) + { + string url = $"{ApiBaseUrl}/fileinfo?fileName={fileName}&userId={UserId}"; + HttpResponseMessage response = await client.GetAsync(url); + if (!response.IsSuccessStatusCode) + { + return null; + } + + string json = await response.Content.ReadAsStringAsync(); + if (string.IsNullOrWhiteSpace(json)) + { + return null; + } + + return JsonConvert.DeserializeObject(json); + } + } + + private string ComputeLocalFileHash(string filePath) + { + if (!File.Exists(filePath)) + return null; + + using (var sha256 = SHA256.Create()) + using (var stream = File.OpenRead(filePath)) + { + byte[] hashBytes = sha256.ComputeHash(stream); + return BitConverter.ToString(hashBytes).Replace("-", "").ToLower(); + } + } + + private async Task GetServerFileHash(HttpClient client, string serverFilePath, string userId) + { + try + { + string requestUrl = $"{ApiBaseUrl}/file-hash?file={serverFilePath}&userId={userId}"; + HttpResponseMessage response = await client.GetAsync(requestUrl); + + if (response.IsSuccessStatusCode) + { + var result = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); + return result.Hash; + } + else + { + Console.WriteLine($"⚠ 서버 해시 요청 실패: {serverFilePath} - {response.ReasonPhrase}"); + return null; + } + } + catch (Exception ex) + { + Console.WriteLine($"⚠ 서버 해시 조회 중 예외 발생: {ex.Message}"); + return null; + } + } + + /// + /// 로컬 -> 서버 (Raw JSON) 업로드 + /// + private async Task UploadRawJsonFile(string localFilePath, string fileNameOnServer) + { + using (HttpClient client = new HttpClient()) + { + if (!File.Exists(localFilePath)) + { + Console.WriteLine($"❌ 업로드할 파일이 존재하지 않음: {localFilePath}"); + return; + } + + // 1️⃣ 서버에서 해당 파일의 해시값 가져오기 + string serverHash = await GetServerFileHash(client, fileNameOnServer, UserId); + string localHash = ComputeLocalFileHash(localFilePath); + + if (serverHash != null && serverHash == localHash) + { + Console.WriteLine($"✅ 파일이 동일하므로 업로드 생략: {localFilePath}"); + return; + } + + using (var form = new MultipartFormDataContent()) + { + byte[] fileBytes = File.ReadAllBytes(localFilePath); + var fileContent = new ByteArrayContent(fileBytes); + fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream"); + + form.Add(fileContent, "file", Path.GetFileName(localFilePath)); + + string requestUrl = $"{ApiBaseUrl}/upload-file?file={fileNameOnServer}&userId={UserId}"; + HttpResponseMessage response = await client.PostAsync(requestUrl, form); + + if (response.IsSuccessStatusCode) + { + Console.WriteLine($"✅ 업로드 성공: {localFilePath} => {fileNameOnServer}"); + } + else + { + string errorMessage = await response.Content.ReadAsStringAsync(); + Console.WriteLine($"❌ 업로드 실패: {localFilePath} - {response.ReasonPhrase}"); + Console.WriteLine(errorMessage); + } + } + } + } + + /// + /// 서버 -> 로컬 (Raw JSON) 다운로드 + /// + private async Task DownloadRawJsonFile(string localPath, string fileNameOnServer) + { + using (HttpClient client = new HttpClient()) + { + // 1️⃣ 서버에서 해당 파일의 해시값 가져오기 + string serverHash = await GetServerFileHash(client, fileNameOnServer, UserId); + string localHash = ComputeLocalFileHash(localPath); + + if (serverHash != null && serverHash == localHash) + { + Console.WriteLine($"✅ 파일이 동일하므로 다운로드 생략: {fileNameOnServer}"); + return; + } + + string requestUrl = $"{ApiBaseUrl}/download-file?file={fileNameOnServer}&userId={UserId}"; + HttpResponseMessage response = await client.GetAsync(requestUrl); + + if (response.IsSuccessStatusCode) + { + byte[] fileData = await response.Content.ReadAsByteArrayAsync(); + File.WriteAllBytes(localPath, fileData); + + Console.WriteLine($"✅ 다운로드 성공: {fileNameOnServer} => {localPath}"); + } + else + { + Console.WriteLine($"❌ 다운로드 실패: {fileNameOnServer} - {response.ReasonPhrase}"); + } + } + } + + //──────────────────────────────────────────────────────────── + // 아래부터 신규 추가: 단순 파일 업로드/다운로드 API (1~5 폴더) + //──────────────────────────────────────────────────────────── + + /// + /// 로컬 파일을 서버의 지정된 폴더(1~5)에 업로드합니다. + /// API 엔드포인트: POST {ApiBaseUrl}/upload-simple-file/{folderId}?userId={UserId} + /// + public async Task UploadSimpleFileAsync(string localFilePath, int folderId) + { + if (!File.Exists(localFilePath)) + { + Console.WriteLine($"업로드할 파일이 존재하지 않습니다: {localFilePath}"); + return 1; + } + + using (HttpClient client = new HttpClient()) + { + using (var form = new MultipartFormDataContent()) + { + byte[] fileBytes = File.ReadAllBytes(localFilePath); + var fileContent = new ByteArrayContent(fileBytes); + fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream"); + form.Add(fileContent, "file", Path.GetFileName(localFilePath)); + + string requestUrl = $"{ApiBaseUrl}/upload-simple-file/{folderId}?userId={UserId}"; + HttpResponseMessage response = await client.PostAsync(requestUrl, form); + + if (response.IsSuccessStatusCode) + { + Console.WriteLine($"✅ 단순 파일 업로드 성공: {localFilePath} => 폴더 {folderId}"); + + return 0; + } + else + { + string errorMsg = await response.Content.ReadAsStringAsync(); + Console.WriteLine($"❌ 단순 파일 업로드 실패: {localFilePath} - {response.ReasonPhrase}\n{errorMsg}"); + return 1; + } + } + } + } + + /// + /// 서버의 지정된 폴더(1~5)에서 파일을 다운로드합니다. + /// API 엔드포인트: GET {ApiBaseUrl}/download-simple-file/{folderId}/{fileName}?userId={UserId} + /// 다운로드한 파일은 localFilePath에 저장됩니다. + /// + public async Task DownloadSimpleFileAsync(string fileName, int folderId, string localFilePath) + { + using (HttpClient client = new HttpClient()) + { + string requestUrl = $"{ApiBaseUrl}/download-simple-file/{folderId}/{fileName}?userId={UserId}"; + HttpResponseMessage response = await client.GetAsync(requestUrl); + if (response.IsSuccessStatusCode) + { + byte[] fileData = await response.Content.ReadAsByteArrayAsync(); + File.WriteAllBytes(localFilePath, fileData); + Console.WriteLine($"✅ 단순 파일 다운로드 성공: {fileName} (폴더 {folderId}) => {localFilePath}"); + + return 0; + } + else + { + Console.WriteLine($"❌ 단순 파일 다운로드 실패: {fileName} (폴더 {folderId}) - {response.ReasonPhrase}"); + return 1; + } + } + } + //──────────────────────────────────────────────────────────── + // 기존 Thumbnail 및 기타 동기화 관련 메서드들은 그대로 유지 + //──────────────────────────────────────────────────────────── + + #region Thumbnail Upload and DownLoad + + private static readonly string ThumbnailFolder = Path.Combine(Environment.CurrentDirectory, "Thumbnail"); + + public async Task UploadThumbnailAsync(string filePath) + { + using (HttpClient client = new HttpClient()) + { + if (!File.Exists(filePath)) + { + Console.WriteLine($"업로드할 썸네일이 존재하지 않습니다: {filePath}"); + return; + } + + string fileName = Path.GetFileName(filePath); + string requestUrl = $"{ApiBaseUrl}/upload-thumbnail?userId={UserId}"; + + using (var form = new MultipartFormDataContent()) + { + var fileContent = new ByteArrayContent(File.ReadAllBytes(filePath)); + fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/png"); + form.Add(fileContent, "file", fileName); + + HttpResponseMessage response = await client.PostAsync(requestUrl, form); + if (response.IsSuccessStatusCode) + { + Console.WriteLine($"썸네일 업로드 성공: {fileName}"); + } + else + { + Console.WriteLine($"썸네일 업로드 실패: {fileName} - {response.ReasonPhrase}"); + } + } + } + } + + public async Task SyncThumbnailsAsync() + { + if (!Directory.Exists(ThumbnailFolder)) + { + Directory.CreateDirectory(ThumbnailFolder); + } + + string[] localThumbnails = Directory.GetFiles(ThumbnailFolder, "*.png") + .Select(Path.GetFileName) + .ToArray(); + + List serverThumbnails = await GetServerThumbnailsAsync(); + + foreach (var localFile in localThumbnails) + { + if (!serverThumbnails.Contains(localFile)) + { + Console.WriteLine($"서버에 없는 썸네일 발견. 업로드 시도: {localFile}"); + await UploadThumbnailAsync(Path.Combine(ThumbnailFolder, localFile)); + } + } + + foreach (var serverFile in serverThumbnails) + { + if (!localThumbnails.Contains(serverFile)) + { + Console.WriteLine($"클라이언트에 없는 썸네일 발견. 다운로드 시도: {serverFile}"); + await DownloadThumbnailAsync(serverFile); + } + } + } + + private string ComputeFileHash(string filePath) + { + using (var sha256 = SHA256.Create()) + using (var stream = File.OpenRead(filePath)) + { + byte[] hashBytes = sha256.ComputeHash(stream); + return BitConverter.ToString(hashBytes).Replace("-", "").ToLower(); + } + } + + public async Task> GetServerThumbnailsAsync() + { + using (HttpClient client = new HttpClient()) + { + string requestUrl = $"{ApiBaseUrl}/list-thumbnails?userId={UserId}"; + HttpResponseMessage response = await client.GetAsync(requestUrl); + + if (!response.IsSuccessStatusCode) + { + Console.WriteLine("서버의 썸네일 목록을 가져오는 데 실패했습니다."); + return new List(); + } + + string jsonResponse = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject>(jsonResponse); + } + } + + public async Task DownloadThumbnailAsync(string fileName) + { + using (HttpClient client = new HttpClient()) + { + string requestUrl = $"{ApiBaseUrl}/download-thumbnail?fileName={fileName}&userId={UserId}"; + HttpResponseMessage response = await client.GetAsync(requestUrl); + + if (response.IsSuccessStatusCode) + { + byte[] imageData = await response.Content.ReadAsByteArrayAsync(); + string localFilePath = Path.Combine(ThumbnailFolder, fileName); + File.WriteAllBytes(localFilePath, imageData); + Console.WriteLine($"썸네일 다운로드 성공: {localFilePath}"); + } + else + { + Console.WriteLine($"썸네일 다운로드 실패: {fileName} - {response.ReasonPhrase}"); + } + } + } + + #endregion +} diff --git a/SSG_Automation_Solution/Tornado/K3DEventHandler.cs b/SSG_Automation_Solution/Tornado/K3DEventHandler.cs new file mode 100644 index 0000000..a5946ec --- /dev/null +++ b/SSG_Automation_Solution/Tornado/K3DEventHandler.cs @@ -0,0 +1,24 @@ +using SSG_Automation_Solution.Design.Forms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SSG_Automation_Solution.Tornado +{ + public class K3DEventHandler : K3DEventHandlerBase + { + public MainForm mainForm; + + public K3DEventHandler(MainForm _mainForm) + { + mainForm = _mainForm; + } + + public override void OnLogMessage(string LogMessage) + { + mainForm.OnLogMessage(LogMessage); + } + } +} diff --git a/SSG_Automation_Solution/Tornado/K3DEventHandlerBase.cs b/SSG_Automation_Solution/Tornado/K3DEventHandlerBase.cs new file mode 100644 index 0000000..685d688 --- /dev/null +++ b/SSG_Automation_Solution/Tornado/K3DEventHandlerBase.cs @@ -0,0 +1,663 @@ +using K3DAsyncEngineLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SSG_Automation_Solution.Tornado +{ + public class K3DEventHandlerBase : KAEventHandler + { + virtual public void OnAddPause(int bSuccess, string SceneName, int AnimationType, int FrameNo, int Delay, int bAuto) { } + + virtual public void OnAddPauseByName(int bSuccess, string SceneName, string AnimationName, int FrameNo, int Delay, int bAuto) { } + + virtual public void OnAddText(int bSuccess, string ObjectName, string Text, int StyleNo) { } + + virtual public void OnBeginTransaction(int iSuccess) { } + + virtual public void OnDeletePause(int bSuccess, string SceneName, int AnimationType, int FrameNo, int bAll) { } + + virtual public void OnDeletePauseByName(int bSuccess, string SceneName, string AnimationName, int FrameNo, int bAll) { } + + virtual public void OnEditText(int bSuccess, string ObjectName, string Text, int BeginPos, int EndPos, int StyleNo) { } + + virtual public void OnEndTransaction(int iSuccess) { } + + virtual public void OnHeartBeat(int bSuccess) { } + + virtual public void OnHello() { } + + virtual public void OnClose(int ErrorCode) { } + + virtual public void OnLoadProject(int bSuccess, KAScene pScene, int TotalCount) { } + + virtual public void OnCloseProject(int bSuccess, string AliasName) { } + + virtual public void OnSelectProject(int bSuccess, string AliasName) { } + + virtual public void OnLoadScene(int bSuccess, string SceneName) { } + + virtual public void OnLoadSceneForce(int bSuccess, string SceneName) { } + + virtual public void OnLogMessage(string LogMessage) { } + + virtual public void OnMessageNo(uint MessageNo) { } + + virtual public void OnPause(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnPlay(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnPlayOut(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnQueryAnimationCount(int bSuccess, string SceneName, int AnimationCount) { } + + virtual public void OnQueryAnimationNames(int bSuccess, string SceneName, int Index, int TotalCount, string pAnimationName) { } + + virtual public void OnQueryChartDataTable(int bSuccess, string ObjectName, int Index, int TotalCount, ref sKChartDataTable Param) { } + + virtual public void OnQueryChartObjects(int bSuccess, string SceneName, int Index, int TotalCount, ref sKChart Param) { } + + virtual public void OnQueryClassType(int bSuccess, string ObjectName, int ClassType) { } + + virtual public void OnQueryIsOnAir(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnQueryLightNames(int bSuccess, string SceneName, int Index, int TotalCount, string pLightName) { } + + virtual public void OnQueryObjectAttribute(int bSuccess, string ObjectName, ref sKObjectAttribute pKObjectAttribute) { } + + virtual public void OnQuerySceneEffectType(int bSuccess, string SceneName, int bInEffect, eKSceneEffectType EffectType, int Duration) { } + + virtual public void OnQuerySize(int bSuccess, string ObjectName, float Width, float Height, float Depth) { } + + virtual public void OnQueryVariables(int bSuccess, string SceneName, int Index, int TotalCount, ref sKVariable Param) { } + + virtual public void OnReloadScene(int bSuccess, string FileName, string SceneName) { } + + virtual public void OnReplaceWithAFile(int bSuccess, string ObjectName, string ReplaceFileName) { } + + virtual public void OnResume(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnRollbackTransaction(int iSuccess) { } + + virtual public void OnSaveImageFile(int bSuccess, string SceneName, int Width, int Height, int Frame, string ImagePathName) { } + + virtual public void OnDownloadThumbnail(int bSuccess, string SceneName, int Width, int Height, int Frame, string ImagePathName) { } + + virtual public void OnSaveScene(int bSuccess, string SceneName, string K3SFileName, int UseCollect) { } + + virtual public void OnScenePaused(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnScenePlayed(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnSceneAnimationPlayed(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnScenePrepare(int bSuccess, string SceneName, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnScenePrepareEx(int bSuccess, string SceneName, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnSetBackground(int bSuccess, string SceneName, ref sKBackground Param) { } + + virtual public void OnSetBackgroundPauseAtZeroFrameAsStandBy(int bSuccess, string SceneName, int bPause) { } + + virtual public void OnSetBackgroundFill(int bSuccess, string SceneName, int R, int G, int B, int A) { } + + virtual public void OnSetBackgroundTexture(int bSuccess, string SceneName, string TextureFileName) { } + + virtual public void OnSetBackgroundVideo(int bSuccess, string SceneName, string VideoFileName, int LoopCount, int LoopInfinite) { } + + virtual public void OnSetBackgroundLiveIn(int bSuccess, string SceneName, int InputChannel) { } + + virtual public void OnUseBackground(int bSuccess, string SceneName, int Use) { } + + virtual public void OnSetChangeOut(int bSuccess, string SceneName) { } + + virtual public void OnSetChartCellData(int bSuccess, string ObjectName, float Value) { } + + virtual public void OnSetChartCSVFile(int bSuccess, string ObjectName, string FilePath) { } + + virtual public void OnSetCircleAngleKey(int bSuccess, string ObjectName, int KeyIndex, float Start, float End) { } + + virtual public void OnSetCountDown(int bSuccess, string ObjectName, float Second) { } + + virtual public void OnSetCounterNumberKey(int bSuccess, string ObjectName, int KeyIndex, double Number) { } + + virtual public void OnSetCropKey(int bSuccess, string ObjectName, int KeyIndex, float Left, float Top, float Right, float Bottom) { } + + virtual public void OnSetCylinderAngleKey(int bSuccess, string ObjectName, int KeyIndex, float Start, float End) { } + + virtual public void OnSetEdgeAttribute(int bSuccess, string ObjectName, ref sKEdgeAttribute Param) { } + + virtual public void OnSetFaceAttribute(int bSuccess, string ObjectName, ref sKFaceAttribute Param) { } + + virtual public void OnSetFont(int bSuccess, string ObjectName, ref sKFont Param) { } + + virtual public void OnSetLightAttribute(int bSuccess, string SceneName, string LightName, ref sKLightAttribute Param) { } + + virtual public void OnSetLightColor(int bSuccess, string SceneName, string LightName, ref sKLightColor Param) { } + + virtual public void OnSetMaterial(int bSuccess, string ObjectName, ref sKMaterial pKMaterial) { } + + virtual public void OnSetMaterialKey(int bSuccess, string ObjectName, int KeyIndex, ref sKMaterial pKMaterial) { } + + virtual public void OnSetLensFlaresKey(int bSuccess, string ObjectName, int KeyIndex, float X, float Y, float Z) { } + + virtual public void OnSetObjectAttribute(int bSuccess, string ObjectName, ref sKObjectAttribute pKObjectAttribute) { } + + virtual public void OnSetPosition(int bSuccess, string ObjectName, float X, float Y, float Z) { } + + virtual public void OnSetPositionKey(int bSuccess, string ObjectName, int KeyIndex, float X, float Y, float Z) { } + + virtual public void OnSetRotation(int bSuccess, string ObjectName, float X, float Y, float Z) { } + + virtual public void OnSetRotationKey(int bSuccess, string ObjectName, int KeyIndex, float X, float Y, float Z) { } + + virtual public void OnSetScale(int bSuccess, string ObjectName, float X, float Y, float Z) { } + + virtual public void OnSetScaleKey(int bSuccess, string ObjectName, int KeyIndex, float X, float Y, float Z) { } + + virtual public void OnSetEffectType(int bSuccess, string SceneName, int bInEffect, eKSceneEffectType EffectType, int Duration) { } + + virtual public void OnSetShadowAttribute(int bSuccess, string ObjectName, ref sKShadowAttribute Param) { } + + virtual public void OnSetSize(int bSuccess, string ObjectName, float Width, float Height, float Depth) { } + + virtual public void OnSetSphereAngleKey(int bSuccess, string ObjectName, int KeyIndex, float Start, float End) { } + + virtual public void OnSetStyleColor(int bSuccess, string ObjectName, ref sKStyleColor Param) { } + + virtual public void OnSetFaceColor(int bSuccess, string ObjectName, int R, int G, int B, int A) { } + + virtual public void OnSetEdgeColor(int bSuccess, string ObjectName, int R, int G, int B, int A) { } + + virtual public void OnSetShadowColor(int bSuccess, string ObjectName, int R, int G, int B, int A) { } + + virtual public void OnSetFaceTextColor(int bSuccess, string ObjectName, int BeginPos, int Count, int R, int G, int B, int A) { } + + virtual public void OnSetEdgeTextColor(int bSuccess, string ObjectName, int BeginPos, int Count, int R, int G, int B, int A) { } + + virtual public void OnSetShadowTextColor(int bSuccess, string ObjectName, int BeginPos, int Count, int R, int G, int B, int A) { } + + virtual public void OnSetTextStyle(int bSuccess, string ObjectName, int Begin, int Count, int StyleNo) { } + + virtual public void OnSetValue(int bSuccess, string ObjectName, string Value) { } + + virtual public void OnSetTextTexture(int bSuccess, string ObjectName, string FileName) { } + + virtual public void OnSetStyleTexture(int bSuccess, string ObjectName, string FileName) { } + + virtual public void OnSetDiffuseTexture(int bSuccess, string ObjectName, string FileName) { } + + virtual public void OnSetSpecularTexture(int bSuccess, string ObjectName, string FileName) { } + + virtual public void OnSetTransparencyTexture(int bSuccess, string ObjectName, string FileName) { } + + virtual public void OnSetNormalTexture(int bSuccess, string ObjectName, string FileName) { } + + virtual public void OnSetReflectionTexture(int bSuccess, string ObjectName, string FileName) { } + + virtual public void OnSetRefractionTexture(int bSuccess, string ObjectName, string FileName) { } + + virtual public void OnSetVisible(int bSuccess, string ObjectName, int bShow) { } + + virtual public void OnStop(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnStopAll(int iSuccess) { } + + virtual public void OnStoreTextStyle(int bSuccess, string ObjectName, string Text, int StyleCount) { } + + virtual public void OnTrigger(int bSuccess, int OutputChannelIndex, int LayerNo, int AnimationType) { } + + virtual public void OnTriggerByName(int bSuccess, int OutputChannelIndex, int LayerNo, string AnimationName) { } + + virtual public void OnTriggerObject(int bSuccess, string ObjectName, int OutputChannelIndex, int LayerNo, int AnimationType, int bWithChildren) { } + + virtual public void OnTriggerObjectByName(int bSuccess, string ObjectName, int OutputChannelIndex, int LayerNo, string AnimationName, int bWithChildren) { } + + virtual public void OnUnloadAll(int bSuccess) { } + + virtual public void OnUnloadScene(int bSuccess, string SceneName) { } + + virtual public void OnUpdateTextures(int bSuccess, string SceneName) { } + + virtual public void OnAddPathPoint(int bSuccess, string ObjectName, int Count) { } + + virtual public void OnClearPathPoints(int bSuccess, string ObjectName) { } + + virtual public void OnAddPathShapePoint(int bSuccess, string ObjectName, int Count) { } + + virtual public void OnClearPathShapePoints(int bSuccess, string ObjectName) { } + + virtual public void OnQueryScrollRemainingDistance(int bSuccess, string ObjectName, int ScrollRemainingDistance) { } + + virtual public void OnQueryScrollChildRemainingDistance(int bSuccess, string ObjectName, string ChildName, int ScrollRemainingDistance) { } + + virtual public void OnAddScrollObject(int bSuccess, string ObjectName, string ChildName) { } + + virtual public void OnSetVariableName(int bSuccess, string ObjectName, string VariableName) { } + + virtual public void OnAdjustScrollSpeed(int bSuccess, string ObjectName, float SpeedDelta) { } + + virtual public void OnSetScrollSpeed(int bSuccess, string ObjectName, float Speed) { } + + virtual public void OnSetDiffuse(int bSuccess, string ObjectName, int R, int G, int B) { } + + virtual public void OnSetAmbient(int bSuccess, string ObjectName, int R, int G, int B) { } + + virtual public void OnSetSpecular(int bSuccess, string ObjectName, int R, int G, int B) { } + + virtual public void OnSetEmissive(int bSuccess, string ObjectName, int R, int G, int B) { } + + virtual public void OnSetOpacity(int bSuccess, string ObjectName, int Opacity) { } + + virtual public void OnSetDiffuseKey(int bSuccess, string ObjectName, int KeyIndex, int R, int G, int B) { } + + virtual public void OnSetAmbientKey(int bSuccess, string ObjectName, int KeyIndex, int R, int G, int B) { } + + virtual public void OnSetSpecularKey(int bSuccess, string ObjectName, int KeyIndex, int R, int G, int B) { } + + virtual public void OnSetEmissiveKey(int bSuccess, string ObjectName, int KeyIndex, int R, int G, int B) { } + + virtual public void OnSetOpacityKey(int bSuccess, string ObjectName, int KeyIndex, int Opacity) { } + + virtual public void OnSetLoftPositionKey(int bSuccess, string ObjectName, int KeyIndex, float Start, float End) { } + + virtual public void OnModifyPathPoint(int bSuccess, string ObjectName, int Index, float X, float Y, float Z) { } + + virtual public void OnSetVideoFrame(int bSuccess, string ObjectName, int StartFrame, int StopFrame) { } + + virtual public void OnSetVideoRepeatInfo(int bSuccess, string ObjectName, int StartFrame, int StopFrame, int LoopCount, int bInfinite, int bPlayAsOut) { } + + virtual public void OnSetTextStyleLibrary(int bSuccess, string ObjectName, string Text, int StyleID) { } + + virtual public void OnAddTextStyleLibrary(int bSuccess, string ObjectName, string Text, int StyleID) { } + + virtual public void OnInitScrollObject(int bSuccess, string ObjectName) { } + + virtual public void OnSetCounterInfo(int bSuccess, string ObjectName, string Format, int UpdatePeriod, int bAddPlusSign) { } + + virtual public void OnSetCounterNumber(int bSuccess, string ObjectName, double Number) { } + + virtual public void OnSetCounterRange(int bSuccess, string ObjectName, double StartTime, double EndTime) { } + + virtual public void OnSetCounterRemainingTime(int bSuccess, string ObjectName, double BaseTime) { } + + virtual public void OnSetCounterElapsedTime(int bSuccess, string ObjectName, double BaseTime) { } + + virtual public void OnSaveObjectImage(int bSuccess, string ObjectName, string FileName) { } + + virtual public void OnSendMosMessage(int bSuccess, string MosMessage) { } + + virtual public void OnReceiveFile(int bSuccess, string ExistingFileName, string NewFileName) { } + + virtual public void OnAddObject(int bSuccess) { } + + virtual public void OnAddCloneObject(int bSuccess, string SceneName, string NewVariable) { } + + virtual public void OnSavePreviewImage(int bSuccess, string ImagePathName, int Width, int Height) { } + + virtual public void OnNewProject(int bSuccess, string AliasName) { } + + virtual public void OnQueryPickedObjects(int bSuccess, string SceneName, int index, int TotalCount, ref sKVariable Param) { } + + virtual public void OnSetSceneDuration(int bSuccess, string SceneName, int AnimationType, int Duration) { } + + virtual public void OnSetBackgroundChangeType(int bSuccess, string SceneName, eKBackgroundChangeType ChangeType) { } + + virtual public void OnSetBackgroundPauseType(int bSuccess, string SceneName, eKBackgroundPauseType PauseType) { } + + virtual public void OnDragObject(int bSuccess, string ObjectName, int X, int Y, int FrameCount) { } + + virtual public void OnMoveCamera(int bSuccess, string ObjectName, int X, int Y, int Z, int FrameCount) { } + + virtual public void OnResetDrag(int bSuccess, string ObjectName, int FrameCount) { } + + virtual public void OnCreateStory(int bSuccess) { } + + virtual public void OnInsertStory(int bSuccess) { } + + virtual public void OnMoveStory(int bSuccess) { } + + virtual public void OnSwapStory(int bSuccess) { } + + virtual public void OnDeleteStory(int bSuccess) { } + + virtual public void OnCreateItem(int bSuccess) { } + + virtual public void OnPrepareItem(int bSuccess) { } + + virtual public void OnSceneSaved(int bSuccess, string FileName) { } + + virtual public void OnResumeBackground(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnSetSceneScrollSpeed(int bSuccess, string SceneName, float Speed) { } + + virtual public void OnCreateWithAFile(int bSuccess, string SceneName, string FileName, string VariableName) { } + + virtual public void OnSetSceneAudioFile(int bSuccess, string SceneName, int AnimatiionType, string AudioFileName) { } + + virtual public void OnSetScrollSpeedByScenePlayer(int bSuccess, int OutputChannelIndex, int LayerNo, float Speed) { } + + virtual public void OnAdjustScrollSpeedByScenePlayer(int bSuccess, int OutputChannelIndex, int LayerNo, float SpeedDelta) { } + + virtual public void OnEnableSceneAudio(int bSuccess, string SceneName, int AnimatiionType, int bEnable) { } + + virtual public void OnInsertItem(int bSuccess) { } + + virtual public void OnDeleteItem(int bSuccess) { } + + virtual public void OnMoveItem(int bSuccess) { } + + virtual public void OnSwapItem(int bSuccess) { } + + virtual public void OnUpdateItems(int bSuccess) { } + + virtual public void OnSetPositionOfPathAnimation(int bSuccess, string ObjectName, float Position) { } + + virtual public void OnSetPositionKeyOfPathAnimation(int bSuccess, string ObjectName, int KeyIndex, float Position) { } + + virtual public void OnUpdateThumbnail(int bSuccess, string SceneName) { } + + virtual public void OnSetStyleItemTexture(int bSuccess, string ObjectName, eKStyleType ItemType, int ItemIndex, string FileName) { } + + virtual public void OnSetKeyFrame(int bSuccess, eKObjectAttribute AttributeType, string ObjectName, int KeyIndex, int Frame, eKKeyFrameType KeyFrameType) { } + + virtual public void OnSetKeyInterpolation(int bSuccess, eKObjectAttribute AttributeType, string ObjectName, int KeyIndex, eKKeyInterpolationType InInterpolation, eKKeyInterpolationType OutInterpolation) { } + + virtual public void OnSetStartFrame(int bSuccess, string ObjectName, int Frame) { } + + virtual public void OnStartVideoCapture(int bSuccess, string FilePath, int VideoCodec) { } + + virtual public void OnStopVideoCapture(int bSuccess) { } + + virtual public void OnCaptureImage(int bSuccess, string FilePath) { } + + virtual public void OnAddAbsolutePause(int bSuccess, string SceneName, int AnimationType, int FrameNo, int Delay, int bAuto) { } + + virtual public void OnResetTotalTime(int bSuccess, string SceneName, int AnimationType) { } + + virtual public void OnSetTotalTime(int bSuccess, string SceneName, int AnimationType, int Frame) { } + + virtual public void OnSetAnimationLibrary(int bSuccess, string ObjectName, int AnimationID, int bApplyAtCurrentPosition) { } + + virtual public void OnSetMaterialLibrary(int bSuccess, string ObjectName, int MaterialID) { } + + virtual public void OnSetStyleLibrary(int bSuccess, string ObjectName, int StyleID) { } + + virtual public void OnSetObjectEffectType(int bSuccess, string ObjectName, int bInEffect, eKEffectType EffectType, int Duration) { } + + virtual public void OnSetAnimationLibrary(int bSuccess, string ObjectName, string Name, int bApplyAtCurrentPosition) { } + + virtual public void OnSetMaterialLibrary(int bSuccess, string ObjectName, string Name) { } + + virtual public void OnSetStyleLibrary(int bSuccess, string ObjectName, string Name) { } + + virtual public void OnLoadStyleLibrarys(int bSuccess, string LibraryPath) { } + + virtual public void OnLoadAnimationLibrarys(int bSuccess, string LibraryPath) { } + + virtual public void OnLoadMaterialLibrarys(int bSuccess, string LibraryPath) { } + + virtual public void OnCheckVersion(int bSuccess, string ServerVersion, string SDKVersion) { } + + virtual public void OnSetEffectNone(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectWipe(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectPush(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectTransform(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectCurl(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectRipple(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectParticle(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectFade(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectDistortion(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectBlink(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectCrop(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectBlur(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectColor(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectSidefade(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetEffectCutOut(int bSuccess, string SceneName, string ObjectName, int bAppliedObjectEffect) { } + + virtual public void OnSetSceneEffectType(int bSuccess, string SceneName, int bInEffect, eKSceneEffectType EffectType, int Duration) { } + + virtual public void OnQueryGroupType(int bSuccess, string ObjectName, eKGroupType GroupType) { } + + virtual public void OnQueryImageType(int bSuccess, string ObjectName, eKTextureTarget TextureTarget, eKImageType ImageType) { } + + virtual public void OnSetDiffuseTextColor(int bSuccess, string ObjectName, int BeginPos, int Count, int R, int G, int B, int A) { } + + virtual public void OnSetVideoPlayInfo(int bSuccess, string ObjectName, eKTextureTarget TextureTarget, ref sKVideoPlayInfo pVideoPlayInfo) { } + + virtual public void OnQueryVideoPlayInfo(int bSuccess, string ObjectName, eKTextureTarget TextureTarget, ref sKVideoPlayInfo pVideoPlayInfo) { } + + virtual public void OnQueryIs3D(int bSuccess, string ObjectName, int b3D) { } + + //virtual public void OnAddScrollObject2(int bSuccess, string ObjectName, string ChildName, string VariableName) { } + + virtual public void OnPlayDirect(int bSuccess, string SceneName, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnSetImageType(int bSuccess, string ObjectName, eKTextureTarget TextureTarget, eKImageType ImageType) { } + + virtual public void OnCutIn(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnCutOut(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnClearNextPreview(int bSuccess, int OutputChannelIndex, int LayerNo) { } + + virtual public void OnSetAudioOutput(int bSuccess, eKPlayAudioType PlayAudioType) { } + + virtual public void OnSetMemo(int bSuccess, string ObjectName, string Memo) { } + + virtual public void OnQueryMemo(int bSuccess, string ObjectName, string Memo) { } + + virtual public void OnEnableMaterialItem(int bSuccess, string ObjectName, eKMaterialType Type, int bEnable) { } + + virtual public void OnSetDiffuseColor(int bSuccess, string ObjectName, sKColor Color) { } + + virtual public void OnSetDiffuseColorKey(int bSuccess, string ObjectName, int KeyIndex, sKColor Color) { } + + virtual public void OnSetAmbientColor(int bSuccess, string ObjectName, sKColor Color) { } + + virtual public void OnSetAmbientColorKey(int bSuccess, string ObjectName, int KeyIndex, sKColor Color) { } + + virtual public void OnSetSpecularColor(int bSuccess, string ObjectName, sKColor Color) { } + + virtual public void OnSetSpecularColorKey(int bSuccess, string ObjectName, int KeyIndex, sKColor Color) { } + + virtual public void OnSetEmissiveColor(int bSuccess, string ObjectName, sKColor Color) { } + + virtual public void OnSetEmissiveColorKey(int bSuccess, string ObjectName, int KeyIndex, sKColor Color) { } + + virtual public void OnSetSpecularSharpness(int bSuccess, string ObjectName, float Sharpness) { } + + virtual public void OnSetTransparencyOpacity(int bSuccess, string ObjectName, byte Opacity) { } + + virtual public void OnSetMaterialTextureOffset(int bSuccess, string ObjectName, float x, float y) { } + + virtual public void OnSetMaterialTextureOffsetKey(int bSuccess, string ObjectName, int KeyIndex, float x, float y) { } + + virtual public void OnSetMaterialTextureTiling(int bSuccess, string ObjectName, float x, float y) { } + + virtual public void OnSetMaterialTextureTilingKey(int bSuccess, string ObjectName, int KeyIndex, float x, float y) { } + + virtual public void OnSetMaterialTextureRotation(int bSuccess, string ObjectName, float Degree) { } + + virtual public void OnSetMaterialTextureRotationKey(int bSuccess, string ObjectName, int KeyIndex, float Degree) { } + + virtual public void OnSetMaterialTextureType(int bSuccess, string ObjectName, eKTextureType Type) { } + + virtual public void OnSetMaterialTextureFile(int bSuccess, string ObjectName, string FilePathName) { } + + virtual public void OnSetMaterialTextureFilter(int bSuccess, string ObjectName, eKTextureFilter FilterType) { } + + virtual public void OnSetMaterialTextureOpacity(int bSuccess, string ObjectName, byte Opacity) { } + + virtual public void OnSetMaterialTextureBlending(int bSuccess, string ObjectName, eKTextureBlending BlendingType) { } + + virtual public void OnSetMaterialTextureAddress(int bSuccess, string ObjectName, eKTextureAddress AddressType) { } + + virtual public void OnSetTrialPlayMode(int bSuccess) { } + + virtual public void OnQueryFont(int bSuccess, string ObjectName, ref sKFont Param) { } + + virtual public void OnSetImageOriginalSize(int bSuccess, string SceneName, string ObjectName) { } + + virtual public void OnApplyLibrary(int bSuccess, string SceneName, string ObjectName, string LibraryPath, eKEffectTarget EffectTarget) { } + + virtual public void OnSetTableValue(int bSuccess, string SceneName, string ObjectName, int Row, int Column, string Value) { } + + virtual public void OnSetTableColor(int bSuccess, string SceneName, string ObjectName, int Row, int Column, sKColor Color) { } + + virtual public void OnQueryTableValue(int bSuccess, string SceneName, string ObjectName, int Row, int Column, string Value) { } + + virtual public void OnQueryTableValues(int bSuccess, string SceneName, string ObjectName, int Index, int TotalCount, int Row, int Column, string Value) { } + + virtual public void OnQueryPauseCount(int bSuccess, string SceneName, int AnimationType, int PauseCount) { } + + virtual public void OnQueryPauseCountByName(int bSuccess, string SceneName, string AnimationName, int PauseCount) { } + + virtual public void OnPlayRange(int bSuccess, int OutputChannelIndex, int LayerNo, int PlaybackRangeNo) { } + + virtual public void OnQueryPlaybackRangeCount(int bSuccess, string SceneName, int PlaybackRangeCount) { } + + virtual public void OnQueryPlaybackRange(int bSuccess, string SceneName, int PlaybackRangeNo, int Start, int End) { } + + //virtual public void OnSetVROffset(int bSuccess, string SceneName, float Horz, float Vert) { } + + virtual public void OnSetOutputChannelIndex(int bSuccess, string SceneName, int OutputChannelIndex) { } + + virtual public void OnQueryOutputChannelIndex(int bSuccess, string SceneName, int OutputChannelIndex) { } + + virtual public void OnEndTransactionOnChannel(int bSuccess, int OutputChannelIndex) { } + + void IKAEventHandler.OnSetVROffset(int bSuccess, string SceneName, float Horz, float Vert) + { + + } + + void IKAEventHandler.OnQueryTotalTime(int iSuccess, string SceneName, int AnimationType, int Frame) + { + + } + + void IKAEventHandler.OnSetPathShapeOutlineThickness(int bSuccess, string SceneName, string ObjectName, float Thickness) + { + + } + + void IKAEventHandler.OnEnablePathShapeOutline(int bSuccess, string SceneName, string ObjectName, int bEnable) + { + + } + + void IKAEventHandler.OnPlayInNextPreview(int bSuccess, int OutputChannelIndex, int LayerNo) + { + + } + + void IKAEventHandler.OnPlayOutNextPreview(int bSuccess, int OutputChannelIndex, int LayerNo) + { + + } + + void IKAEventHandler.OnSetPlaybackCamera(int bSuccess, string SceneName, string ObjectName) + { + + } + + void IKAEventHandler.OnSetMoveTo(int bSuccess, string SceneName, string ObjectName, float X, float Y, float Z) + { + + } + + void IKAEventHandler.OnSetRotateTo(int bSuccess, string SceneName, string ObjectName, float Pitch, float Yaw, float Roll) + { + + } + + void IKAEventHandler.OnSetVerticalFOV(int bSuccess, string SceneName, string ObjectName, float Angle) + { + + } + + void IKAEventHandler.OnSetDelay(int bSuccess, string SceneName, string ObjectName, int Delay) + { + + } + + void IKAEventHandler.OnExportVideo(int bSuccess, string SceneName, string FileName) + { + + } + + void IKAEventHandler.OnStopVideoExporting(int bSuccess, string SceneName) + { + + } + + void IKAEventHandler.OnQueryVideoExportingProgress(int bSuccess, string SceneName, int CurrentFrame, int TotalFrame) + { + + } + + void IKAEventHandler.OnFinishedVideoExporting(int bSuccess, string FileName) + { + + } + + void IKAEventHandler.OnSetPause(int bSuccess, string SceneName, int AnimationType, int FrameNo, int Delay, int bAuto) + { + + } + + void IKAEventHandler.OnSetPauseByName(int bSuccess, string SceneName, string AnimationName, int FrameNo, int Delay, int bAuto) + { + + } + + void IKAEventHandler.OnSetPauseWithIndex(int bSuccess, string SceneName, int AnimationType, int Index, int Delay, int bAuto) + { + + } + + void IKAEventHandler.OnSetPauseWithIndexByName(int bSuccess, string SceneName, string AnimationName, int Index, int Delay, int bAuto) + { + + } + + void IKAEventHandler.OnDeletePauseWithIndex(int bSuccess, string SceneName, int AnimationType, int Index, int bAll) + { + + } + + void IKAEventHandler.OnDeletePauseWithIndexByName(int bSuccess, string SceneName, string AnimationName, int Index, int bAll) + { + + } + + /* + void IKAEventHandler.OnQueryTextlistOfTextObjects(int bSuccess, string SceneName, int Index, int TotalCount, string Text) + { + + } + + void IKAEventHandler.OnPlayIn(int bSuccess, int OutputChannelIndex, int LayerNo) + { + + } + */ + } +} diff --git a/SSG_Automation_Solution/Tornado/TornadoManager.cs b/SSG_Automation_Solution/Tornado/TornadoManager.cs new file mode 100644 index 0000000..24d69f7 --- /dev/null +++ b/SSG_Automation_Solution/Tornado/TornadoManager.cs @@ -0,0 +1,108 @@ +using K3DAsyncEngineLib; +using SSG_Automation_Solution.Data; +using SSG_Automation_Solution.Design.Forms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SSG_Automation_Solution.Tornado +{ + public class TornadoManager + { + #region variables + + protected KAEngine KAEngine; + protected KAScenePlayer KAScenePlayer; + protected KAScene KAScene; + protected K3DEventHandler KAEvent; + + public string IP { get; set; } = "127.0.0.1"; + public int Port { get; set; } = 30001; + + public int DissolveTime { get; set; } = 3; + + public bool isConnected() + { + if (KAScenePlayer == null) return false; + else return true; + } + + + #endregion + + + #region singleton + + private static TornadoManager uniqueInstance = null; + private static readonly Object mInstanceLocker = new Object(); + + public static TornadoManager getInstance() + { + lock (mInstanceLocker) + { + if (uniqueInstance == null) + { + uniqueInstance = new TornadoManager(); + } + } + return uniqueInstance; + } + + public TornadoManager() + { + KAEngine = new KAEngine(); + } + + #endregion + + + #region Method - Connection + public void setMainFrom(MainForm _mainForm) + { + KAEvent = new K3DEventHandler(_mainForm); + } + public void Connection() + { + KAEngine.KTAPConnect(1, IP, Port, 0, KAEvent); + KAScenePlayer = KAEngine.GetScenePlayer(); + } + public void AliveCheck() + { + KAEngine.HeartBeat(); + } + + #endregion + + + public void Display(SceneVO scene ,short? layerNo , BindingList variables) + { + KAScene = KAEngine.LoadScene(scene.ScenePath, scene.SceneName); + foreach(var v in variables) + { + KAScene.GetObject(v.Tag).SetValue(v.Text); + } + int layer = Convert.ToInt32(layerNo); + KAScenePlayer.Prepare(layer, KAScene); + KAScenePlayer.Play(layer); + + KAEngine.UnloadScene(scene.SceneName); + } + + public void Out(short? layerNo) + { + int layer = Convert.ToInt32(layerNo); + KAScenePlayer.CutOut(layer); + } + + + public void FileLoad(string path, string sceneName ,string savePath, int frame) + { + KAScene = KAEngine.LoadScene(path, sceneName); + KAScene.DownloadThumbnail(savePath, 640, 480, frame); + } + } +} diff --git a/SSG_Automation_Solution/packages.config b/SSG_Automation_Solution/packages.config new file mode 100644 index 0000000..6151392 --- /dev/null +++ b/SSG_Automation_Solution/packages.config @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSG_Automation_Solution/ssg.ico b/SSG_Automation_Solution/ssg.ico new file mode 100644 index 0000000..15fbfbf Binary files /dev/null and b/SSG_Automation_Solution/ssg.ico differ