From cc3b473ba7d7522cc165ad5d68fa5cddda723948 Mon Sep 17 00:00:00 2001 From: y2keui Date: Wed, 1 Apr 2026 19:57:37 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B4=88=EA=B8=B0=20=EC=BB=A4=EB=B0=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SSG_Automation_Solution.sln | 25 + SSG_Automation_Solution/App.config | 51 + SSG_Automation_Solution/Data/DBInfo.cs | 62 + SSG_Automation_Solution/Data/LogWriter.cs | 97 + SSG_Automation_Solution/Data/Options.cs | 114 + SSG_Automation_Solution/Data/SceneGroup.cs | 29 + SSG_Automation_Solution/Data/SceneVO.cs | 50 + SSG_Automation_Solution/Data/Schedule.cs | 243 ++ SSG_Automation_Solution/Data/SyncMetadata.cs | 19 + SSG_Automation_Solution/Data/VariablesVO.cs | 25 + .../CustomToggleSwitchPainter.cs | 34 + .../Design/Forms/LoginForm.Designer.cs | 207 + .../Design/Forms/LoginForm.cs | 169 + .../Design/Forms/LoginForm.resx | 165 + .../Design/Forms/MainForm.Designer.cs | 3796 +++++++++++++++++ .../Design/Forms/MainForm.cs | 3507 +++++++++++++++ .../Design/Forms/MainForm.resx | 1055 +++++ SSG_Automation_Solution/Program.cs | 35 + .../Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 73 + .../Properties/Resources.resx | 124 + .../Properties/Settings.Designer.cs | 29 + .../Properties/Settings.settings | 7 + .../Properties/licenses.licx | 11 + .../Resources/no-image-icon-23494.png | Bin 0 -> 6137 bytes .../SSG_Automation_Solution.csproj | 184 + .../SSG_Automation_Solution.zip | Bin 0 -> 92537 bytes SSG_Automation_Solution/SyncManager.cs | 510 +++ .../Tornado/K3DEventHandler.cs | 24 + .../Tornado/K3DEventHandlerBase.cs | 663 +++ .../Tornado/TornadoManager.cs | 108 + SSG_Automation_Solution/packages.config | 18 + SSG_Automation_Solution/ssg.ico | Bin 0 -> 6915 bytes 33 files changed, 11470 insertions(+) create mode 100644 SSG_Automation_Solution.sln create mode 100644 SSG_Automation_Solution/App.config create mode 100644 SSG_Automation_Solution/Data/DBInfo.cs create mode 100644 SSG_Automation_Solution/Data/LogWriter.cs create mode 100644 SSG_Automation_Solution/Data/Options.cs create mode 100644 SSG_Automation_Solution/Data/SceneGroup.cs create mode 100644 SSG_Automation_Solution/Data/SceneVO.cs create mode 100644 SSG_Automation_Solution/Data/Schedule.cs create mode 100644 SSG_Automation_Solution/Data/SyncMetadata.cs create mode 100644 SSG_Automation_Solution/Data/VariablesVO.cs create mode 100644 SSG_Automation_Solution/Design/CustomControl/CustomToggleSwitchPainter.cs create mode 100644 SSG_Automation_Solution/Design/Forms/LoginForm.Designer.cs create mode 100644 SSG_Automation_Solution/Design/Forms/LoginForm.cs create mode 100644 SSG_Automation_Solution/Design/Forms/LoginForm.resx create mode 100644 SSG_Automation_Solution/Design/Forms/MainForm.Designer.cs create mode 100644 SSG_Automation_Solution/Design/Forms/MainForm.cs create mode 100644 SSG_Automation_Solution/Design/Forms/MainForm.resx create mode 100644 SSG_Automation_Solution/Program.cs create mode 100644 SSG_Automation_Solution/Properties/AssemblyInfo.cs create mode 100644 SSG_Automation_Solution/Properties/Resources.Designer.cs create mode 100644 SSG_Automation_Solution/Properties/Resources.resx create mode 100644 SSG_Automation_Solution/Properties/Settings.Designer.cs create mode 100644 SSG_Automation_Solution/Properties/Settings.settings create mode 100644 SSG_Automation_Solution/Properties/licenses.licx create mode 100644 SSG_Automation_Solution/Resources/no-image-icon-23494.png create mode 100644 SSG_Automation_Solution/SSG_Automation_Solution.csproj create mode 100644 SSG_Automation_Solution/SSG_Automation_Solution.zip create mode 100644 SSG_Automation_Solution/SyncManager.cs create mode 100644 SSG_Automation_Solution/Tornado/K3DEventHandler.cs create mode 100644 SSG_Automation_Solution/Tornado/K3DEventHandlerBase.cs create mode 100644 SSG_Automation_Solution/Tornado/TornadoManager.cs create mode 100644 SSG_Automation_Solution/packages.config create mode 100644 SSG_Automation_Solution/ssg.ico 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 + 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 + 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== + + + + + 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 + AElFTkSuQmCC + + + + + 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 + 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 0000000000000000000000000000000000000000..b6ffa8126ba1d8450e53cc9dd17ae7f02fda7adb GIT binary patch literal 6137 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 + + + + 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 0000000000000000000000000000000000000000..912cb906789ba5aa9f3537ba1f4e67b412b66695 GIT binary patch literal 92537 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 z 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 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 0000000000000000000000000000000000000000..15fbfbfd1debb6ec720e4afb3a94de3878d4c5c0 GIT binary patch literal 6915 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 O1zc0t#(hw=3jHssz51R2 literal 0 HcmV?d00001