diff --git a/Data/DcLang-Japanese.txt b/Data/DcLang-Japanese.txt index 4a3f3da..b25f9d2 100644 --- a/Data/DcLang-Japanese.txt +++ b/Data/DcLang-Japanese.txt @@ -6,8 +6,8 @@ LANG=日本語 2=FFXIV プラグインが見つからないんです! 3=FFXIV プラグインを見つかりました! 4=FFXIV ドユーティー・コンテンツ: {0} -5=ACT 情報: {0} ({1}) -6=FFXIV プラグイン情報: {0} ({1}) +5=ACT 情報: {0} +6=FFXIV プラグイン情報: {0} 7=データが壊れました: {0} 8=分析できません! 9=アンノウン・コンテンツ: {0} @@ -16,7 +16,7 @@ LANG=日本語 12=アンノウン・フェイト: {0} 13=データが読めないんです! 14=データ・ファイルが見つからないんです! {0} -20=ドユーティー・コンテンツ情報: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ({6}) +20=ドユーティー・コンテンツ情報: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} 21=ルーレット 22=インスタンス 23=フェイト @@ -25,13 +25,18 @@ LANG=日本語 26=基本 27=なし 28=パケット・データが見つからないんです! {0} -29=パケット情報: {0} "{1}" ({2}) +29=パケット情報: {0} "{1}" 30=Webサービスにエラーが発生しました。 31=コンテンツ・データのアップデートが失敗しました。 32=パケット・データのアップデートが失敗しまし。 33=パケット・アップデート: {0} "{1}" +35=クリップボードエラーです! +36=ウィンドウ制御エラーです! +37=デバッグ +38=マッチング +39=待機 -99=Duty Content プラグイン {0} +99=DutyContent プラグイン {0} 101=WAVEファイルを選んでください 102=WAVファイル (*.wav)|*.wav|全て (*.*)|*.* @@ -54,13 +59,13 @@ LANG=日本語 213=使用する 214=使用しない 215=※プラグイン再起動が必要です +216=ログフォント 300=コンテンツ 301=コンテンツ 302=設定 303=パゲット 304=データ -305=ログフォント 306=オーバレイ・オン 307=透明度 308=サウンド・オン @@ -82,15 +87,6 @@ LANG=日本語 324=状態 325=人数 326=進行度 -327=ピン -328=ピン使用 -329=速度色 -330=ナイス -331=いい -332=ふつう -333=わるい -334=グラフ -335=クライアントの接触がない場合のDC選択 336=パケット 337=カストム・パケット 338=Discordのウェブフックお知らせ @@ -98,7 +94,26 @@ LANG=日本語 340=テスト&& お知らせ保存 341=TTS使用 342=正しいDiscordのウェブフックURLを入力してください -343=現在アドレス + +400=ピン +401=ピン使用 +402=速度色 +403=ナイス +404=いい +405=ふつう +406=わるい +407=グラフ +408=クライアントの接触がない場合のDC選択 +409=現在アドレス +410=グラフタイプ +411=線形 +412=湾曲 +413=損失率を示す + +500=ログ +501=コピー +502=全て消す +503=自動的にスクロール 10001="{0}" 発生! 10002=待機: {0} diff --git a/Data/DcLang-Korean(Actoz).txt b/Data/DcLang-Korean(Actoz).txt index 1e40384..dd998a6 100644 --- a/Data/DcLang-Korean(Actoz).txt +++ b/Data/DcLang-Korean(Actoz).txt @@ -6,8 +6,8 @@ LANG=한국어(액토즈) 2=FFXIV 플러그인이 없어요! 3=FFXIV 플러그인을 찾았어요! 4=FFXIV 듀티 콘텐츠: {0} -5=ACT 정보: {0} ({1}) -6=FFXIV 플러그인 정보: {0} ({1}) +5=ACT 정보: {0} +6=FFXIV 플러그인 정보: {0} 7=잘못된 데이터: {0} 8=분석할 수 없어요 9=알수없는 임무: {0} @@ -16,7 +16,7 @@ LANG=한국어(액토즈) 12=알수없는 돌발: {0} 13=데이터를 읽을 수가 없어요! 14=데이터 파일이 없어요! {0} -20=듀티 콘텐츠 정보: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ({6}) +20=듀티 콘텐츠 정보: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} 21=무작위 임무 22=인스턴스 23=돌발 @@ -25,11 +25,16 @@ LANG=한국어(액토즈) 26=기본 27=없음 28=패킷 파일이 없어요! {0} -29=패킷 정보: {0} "{1}" ({2}) +29=패킷 정보: {0} "{1}" 30=웹 요청중 에러 발생 31=임무 데이터 업데이트중 에러 발생 32=패킷 데이터 업데이트중 에러 발생 33=패킷을 업데이트 했습니다: {0} "{1}" +35=클립보드를 사용할 수 없습니다! +36=윈도우 컨트롤에 오류가 있습니다! +37=디버그 +38=매칭 +39=찾습니다 99=듀티 콘텐츠 플러그인 {0} @@ -54,13 +59,13 @@ LANG=한국어(액토즈) 213=사용함 214=사용안함 215=※플러그인 재기동이 필요합니다 +216=로그 글꼴 300=임무 301=콘텐츠 302=설정 303=패킷 304=데이터셋 -305=로그 글꼴 306=오버레이 보기 307=투명도 308=소리 듣기 @@ -82,15 +87,6 @@ LANG=한국어(액토즈) 324=상태 325=사람수 326=진행도 -327=핑 -328=핑 사용 -329=속도별 색깔 -330=매우 좋음 -331=좋음 -332=보통 -333=나쁨 -334=그래프 보기 -335=클라이언트의 접속이 없을때 사용할 DC 선택 336=패킷 337=커스텀 패킷 338=디스코드 웹훅 알림 @@ -98,7 +94,26 @@ LANG=한국어(액토즈) 340=테스트 && 알림설정 저장 341=말하기 사용 342=올바른 디스코드 웹훅 주소를 입력해주세요. -343=연결된 IP주소 + +400=핑 +401=핑 사용 +402=속도별 색깔 +403=매우 좋음 +404=좋음 +405=보통 +406=나쁨 +407=그래프 보기 +408=클라이언트의 접속이 없을때 사용할 DC 선택 +409=연결된 IP주소 +410=그래프 모양 +411=선형 +412=곡선 +413=손실율 표시 + +500=로그 +501=복사 +502=모두 지우기 +503=자동으로 스크롤 10001="{0}" 발생했어요! 10002=찾습니다: {0} diff --git a/Data/DcLang-Korean(Test).txt b/Data/DcLang-Korean(Test).txt index 9846286..213f8e2 100644 --- a/Data/DcLang-Korean(Test).txt +++ b/Data/DcLang-Korean(Test).txt @@ -6,8 +6,8 @@ LANG=한국어 2=FFXIV 플러그인이 없어요! 3=FFXIV 플러그인을 찾았어요! 4=FFXIV 듀티 콘텐츠: {0} -5=ACT 정보: {0} ({1}) -6=FFXIV 플러그인 정보: {0} ({1}) +5=ACT 정보: {0} +6=FFXIV 플러그인 정보: {0} 7=잘못된 데이터: {0} 8=분석할 수 없어요 9=알수없는 듀티: {0} @@ -16,20 +16,25 @@ LANG=한국어 12=알수없는 페이트: {0} 13=데이터를 읽을 수가 없어요! 14=데이터 파일이 없어요! {0} -20=듀티 콘텐츠 정보: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ({6}) +20=듀티 콘텐츠 정보: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} 21=루렛 22=인스턴스 23=페이트 24=스커미시 -25=크리티컬 인게이지먼트 +25=인게이지먼트 26=기본 27=없음 28=패킷 파일이 없어요! {0} -29=패킷 정보: {0} "{1}" ({2}) +29=패킷 정보: {0} "{1}" 30=웹 요청중 에러 발생 31=임무 데이터 업데이트중 에러 발생 32=패킷 데이터 업데이트중 에러 발생 33=새 패킷 업데이트: {0} "{1}" +35=클립보드를 사용할 수 없습니다! +36=윈도우 컨트롤에 오류가 있습니다! +37=디버그 +38=매칭 +39=찾아요 99=듀티 콘텐츠 플러그인 {0} @@ -54,13 +59,13 @@ LANG=한국어 213=보이기 214=감추기 215=※플러그인을 다시 실행해야합니다 +216=로그 글꼴 300=듀티 301=콘텐츠 302=설정 303=패킷 304=데이터셋 -305=로그 글꼴 306=오버레이 보기 307=투명도 308=소리 듣기 @@ -82,15 +87,6 @@ LANG=한국어 324=상태 325=사람수 326=진행도 -327=핑 -328=핑 사용 -329=속도별 색깔 -330=매우 좋음 -331=좋음 -332=보통 -333=나쁨 -334=그래프 보기 -335=클라이언트의 접속이 없을때 사용할 DC 선택 336=패킷 337=커스텀 패킷 338=디스코드 Webhook 알림 @@ -98,7 +94,26 @@ LANG=한국어 340=테스트 && 알림설정 저장 341=TTS 사용 342=올바른 디스코드 Webhook을 입력해주세요. -343=현재 연결 IP + +400=핑 +401=핑 사용 +402=속도별 색깔 +403=매우 좋음 +404=좋음 +405=보통 +406=나쁨 +407=그래프 보기 +408=클라이언트의 접속이 없을때 사용할 DC 선택 +409=현재 연결 IP +410=그래프 모양 +411=선형 +412=곡선 +413=손실율 표시 + +500=로그 +501=복사 +502=모두 지우기 +503=자동으로 스크롤 10001="{0}" 떠스요! 10002=찾아요: {0} diff --git a/Data/DcPacket-LocalChina.config b/Data/DcPacketReserved-LocalChina.config similarity index 100% rename from Data/DcPacket-LocalChina.config rename to Data/DcPacketReserved-LocalChina.config diff --git a/DcConfig.cs b/DcConfig.cs index c913515..63362ce 100644 --- a/DcConfig.cs +++ b/DcConfig.cs @@ -12,7 +12,7 @@ namespace DutyContent { class DcConfig { - public static int PluginTag => 14; + public static int PluginTag => 15; public static Version PluginVersion => System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; public static bool PluginEnable { get; set; } @@ -33,6 +33,7 @@ namespace DutyContent public static int LastUpdatedPlugin { get; set; } = 0; public static string UiFontFamily { get; set; } = "Microsoft Sans Serif"; public static bool StatusBar { get; set; } = false; + public static bool DebugEnable { get; set; } = false; // public static string BuildDataFileName(string header, string context, string ext) @@ -75,6 +76,7 @@ namespace DutyContent sw.WriteLine("LastUpdatedPlugin={0}", LastUpdatedPlugin); sw.WriteLine("UiFontFamily={0}", UiFontFamily); sw.WriteLine("StatusBar={0}", StatusBar); + sw.WriteLine("DebugEnable={0}", DebugEnable); sw.WriteLine(); Duty.InternalSaveStream(sw); @@ -97,6 +99,7 @@ namespace DutyContent LastUpdatedPlugin = ThirdParty.Converter.ToInt(db["LastUpdatedPlugin"]); UiFontFamily = db.Get("UiFontFamily", UiFontFamily); StatusBar = ThirdParty.Converter.ToBool(db["StatusBar"], StatusBar); + DebugEnable = ThirdParty.Converter.ToBool(db["DebugEnable"], DebugEnable); Duty.InternalReadFromDb(db); } @@ -107,16 +110,16 @@ namespace DutyContent if (string.IsNullOrWhiteSpace(Language)) { if (!is_in_init) - MesgLog.Initialize(Properties.Resources.DefaultMessage); + Locale.Initialize(Properties.Resources.DefaultMessage); } else { string filename = BuildLangFileName(Language); if (File.Exists(filename)) - MesgLog.LoadFile(filename); + Locale.LoadFile(filename); else - MesgLog.Initialize(Properties.Resources.DefaultMessage); + Locale.Initialize(Properties.Resources.DefaultMessage); } } @@ -139,7 +142,7 @@ namespace DutyContent if (!File.Exists(filename)) { - MesgLog.E(27, " "); + Logger.E(27, " "); return false; } } @@ -150,8 +153,7 @@ namespace DutyContent // load. if file not exist, create new one with default value Packet.Load(filename); - - MesgLog.I(29, Packet.Version, Packet.Description, filename); + Logger.Write(Packet.GetInformation()); return true; } @@ -160,13 +162,13 @@ namespace DutyContent public class PacketConfig { // Packet - public long Version { get; set; } = 2005551; - public string Description { get; set; } = "5.55 HotFix"; - public ushort OpFate { get; set; } = 858; - public ushort OpDuty { get; set; } = 271; - public ushort OpMatch { get; set; } = 220; - public ushort OpInstance { get; set; } = 923; - public ushort OpSouthernBozja { get; set; } = 584; + public long Version { get; set; } = 2005580; + public string Description { get; set; } = "5.58 (JP/NA/EU/OC)"; + public ushort OpFate { get; set; } = 788; + public ushort OpDuty { get; set; } = 676; + public ushort OpMatch { get; set; } = 428; + public ushort OpInstance { get; set; } = 234; + public ushort OpCe { get; set; } = 269; // packet version structure // 0 - Service area (1:Custom, 2:Global, 3:Korea) @@ -197,7 +199,7 @@ namespace DutyContent OpDuty = right.OpDuty; OpMatch = right.OpMatch; OpInstance = right.OpInstance; - OpSouthernBozja = right.OpSouthernBozja; + OpCe = right.OpCe; } else { @@ -205,10 +207,22 @@ namespace DutyContent OpDuty = 0; OpMatch = 0; OpInstance = 0; - OpSouthernBozja = 0; + OpCe = 0; } } + // + public string GetInformation() + { + return Locale.Text(29, Version, Description); + } + + // + public override string ToString() + { + return GetInformation(); + } + // public bool Save(string filename) { @@ -227,7 +241,7 @@ namespace DutyContent sw.WriteLine("OpDuty={0}", OpDuty); sw.WriteLine("OpMatch={0}", OpMatch); sw.WriteLine("OpInstance={0}", OpInstance); - sw.WriteLine("OpSouthernBozja={0}", OpSouthernBozja); + sw.WriteLine("OpSouthernBozja={0}", OpCe); sw.WriteLine(); } @@ -242,7 +256,7 @@ namespace DutyContent OpDuty = ThirdParty.Converter.ToUshort(db["OpDuty"], OpDuty); OpMatch = ThirdParty.Converter.ToUshort(db["OpMatch"], OpMatch); OpInstance = ThirdParty.Converter.ToUshort(db["OpInstance"], OpInstance); - OpSouthernBozja = ThirdParty.Converter.ToUshort(db["OpSouthernBozja"], OpSouthernBozja); + OpCe = ThirdParty.Converter.ToUshort(db["OpSouthernBozja"], OpCe); } // @@ -302,7 +316,9 @@ namespace DutyContent Color.FromArgb(0xFF, 0xDD, 0xA0, 0xDD), }; public bool PingGraph { get; set; } + public bool PingShowLoss { get; set; } public string PingDefAddr { get; set; } + public int PingGraphType { get; set; } // public bool EnableNotify => UseNotifyLine || UseNotifyTelegram || UseNotifyDiscordWebhook; @@ -356,8 +372,10 @@ namespace DutyContent sw.WriteLine("DutyPingColor1={0:X}", PingColors[1].ToArgb()); sw.WriteLine("DutyPingColor2={0:X}", PingColors[2].ToArgb()); sw.WriteLine("DutyPingColor3={0:X}", PingColors[3].ToArgb()); + sw.WriteLine("DutyPingShowLoss={0}", PingShowLoss); sw.WriteLine("DutyPingGraph={0}", PingGraph); sw.WriteLine("DutyPingDefAddr={0}", PingDefAddr); + sw.WriteLine("DutyPingGraphType={0}", PingGraphType); sw.WriteLine(); } @@ -401,8 +419,10 @@ namespace DutyContent PingColors[1] = ThirdParty.Converter.ToColorArgb(db["DutyPingColor1"], PingColors[1]); PingColors[2] = ThirdParty.Converter.ToColorArgb(db["DutyPingColor2"], PingColors[2]); PingColors[3] = ThirdParty.Converter.ToColorArgb(db["DutyPingColor3"], PingColors[3]); + PingShowLoss = ThirdParty.Converter.ToBool(db["DutyPingShowLoss"]); PingGraph = ThirdParty.Converter.ToBool(db["DutyPingGraph"]); PingDefAddr = db.Get("DutyPingDefAddr", string.Empty); + PingGraphType = ThirdParty.Converter.ToInt(db["PingGraphType"]); } } @@ -440,19 +460,24 @@ namespace DutyContent // public class ConnectionList { - public List Conns = new List(); + public SortedSet Conns = new SortedSet(); + + public int Count => Conns.Count; public ThirdParty.NativeMethods.TcpRow[] CopyConnection() { ThirdParty.NativeMethods.TcpRow[] ret; lock (Conns) - ret = Conns.ToArray(); + { + ret = new ThirdParty.NativeMethods.TcpRow[Conns.Count]; + Conns.CopyTo(ret); + } return ret; } - public void GetConnections(Process process) + public void BuildConnections(Process process) { var size = 0; ThirdParty.NativeMethods.GetExtendedTcpTable(IntPtr.Zero, ref size, true, AddressFamily.InterNetwork, 4); diff --git a/DcContent.cs b/DcContent.cs index 5ee26f4..94f0a9a 100644 --- a/DcContent.cs +++ b/DcContent.cs @@ -72,6 +72,18 @@ namespace DutyContent public static IReadOnlyDictionary Fates { get; private set; } = new Dictionary(); public static Dictionary Missions { get; private set; } = new Dictionary(); + // + public static string GetInformation() + { + return Locale.Text(20, + Language, + Version, + Areas.Count, + Roulettes.Count, + Instances.Count, + Fates.Count); + } + // public static bool Initialize(string json) { @@ -116,12 +128,12 @@ namespace DutyContent } catch (NullReferenceException /*nex*/) { - MesgLog.E(7, fate.Key); + Logger.E(7, fate.Key); return false; } catch (Exception ex) { - MesgLog.Ex(ex, 8); + Logger.Ex(ex, 8); return false; } } @@ -167,28 +179,28 @@ namespace DutyContent public static Roulette GetRoulette(int code) { return Roulettes.TryGetValue(code, out Roulette roulette) ? roulette : - new Roulette { Name = MesgLog.Text(9, code) }; + new Roulette { Name = Locale.Text(9, code) }; } // public static Instance GetInstance(int code) { return Instances.TryGetValue(code, out Instance instance) ? instance : - new Instance { Name = MesgLog.Text(10, code) }; + new Instance { Name = Locale.Text(10, code) }; } // public static Area GetArea(int code) { return Areas.TryGetValue(code, out Area area) ? area : - new Area { Name = MesgLog.Text(11, code) }; + new Area { Name = Locale.Text(11, code) }; } // public static Fate GetFate(int code) { return Fates.ContainsKey(code) ? Fates[code] : - new Fate { Name = MesgLog.Text(12, code) }; + new Fate { Name = Locale.Text(12, code) }; } // @@ -207,7 +219,7 @@ namespace DutyContent if (!File.Exists(filename)) { - MesgLog.E(14, filename); + Logger.E(14, filename); return false; } @@ -217,22 +229,15 @@ namespace DutyContent string json = File.ReadAllText(filename, Encoding.UTF8); - if (!Initialize(json)) + if (Initialize(json)) { - MesgLog.E(13); - return false; + Logger.Write(GetInformation()); + return true; } else { - MesgLog.I(20, - Language, - Version, - Areas.Count, - Roulettes.Count, - Instances.Count, - Fates.Count, - filename); - return true; + Logger.E(13); + return false; } } @@ -241,11 +246,11 @@ namespace DutyContent // 10[1] status 0=end, 1=wait, 2=??, 3=progress switch (s) { - case 0: return MesgLog.Text(10017); - case 1: return MesgLog.Text(10018); - case 2: return MesgLog.Text(10019); - case 3: return MesgLog.Text(10020); - default: return MesgLog.Text(10021); + case 0: return Locale.Text(10017); + case 1: return Locale.Text(10018); + case 2: return Locale.Text(10019); + case 3: return Locale.Text(10020); + default: return Locale.Text(10021); } } diff --git a/DcControl.Designer.cs b/DcControl.Designer.cs index dc43895..d0f2224 100644 --- a/DcControl.Designer.cs +++ b/DcControl.Designer.cs @@ -29,77 +29,67 @@ namespace DutyContent /// private void InitializeComponent() { - this.spctBase = new System.Windows.Forms.SplitContainer(); this.tabMain = new System.Windows.Forms.TabControl(); + this.tabPageLog = new System.Windows.Forms.TabPage(); this.tabPageDuty = new System.Windows.Forms.TabPage(); this.tabPagePing = new System.Windows.Forms.TabPage(); this.tabPageConfig = new System.Windows.Forms.TabPage(); - this.txtMesg = new System.Windows.Forms.RichTextBox(); - this.btnClearMesg = new System.Windows.Forms.Button(); this.panelBase = new System.Windows.Forms.Panel(); this.lblStatusLeft = new System.Windows.Forms.Label(); - ((System.ComponentModel.ISupportInitialize)(this.spctBase)).BeginInit(); - this.spctBase.Panel1.SuspendLayout(); - this.spctBase.Panel2.SuspendLayout(); - this.spctBase.SuspendLayout(); this.tabMain.SuspendLayout(); this.panelBase.SuspendLayout(); this.SuspendLayout(); // - // spctBase - // - this.spctBase.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.spctBase.Location = new System.Drawing.Point(3, 3); - this.spctBase.Name = "spctBase"; - this.spctBase.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // spctBase.Panel1 - // - this.spctBase.Panel1.Controls.Add(this.tabMain); - // - // spctBase.Panel2 - // - this.spctBase.Panel2.Controls.Add(this.txtMesg); - this.spctBase.Panel2.Controls.Add(this.btnClearMesg); - this.spctBase.Size = new System.Drawing.Size(786, 534); - this.spctBase.SplitterDistance = 467; - this.spctBase.TabIndex = 0; - // // tabMain // this.tabMain.Alignment = System.Windows.Forms.TabAlignment.Left; + this.tabMain.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabMain.Controls.Add(this.tabPageLog); this.tabMain.Controls.Add(this.tabPageDuty); this.tabMain.Controls.Add(this.tabPagePing); this.tabMain.Controls.Add(this.tabPageConfig); - this.tabMain.Dock = System.Windows.Forms.DockStyle.Fill; this.tabMain.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; + this.tabMain.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.tabMain.ItemSize = new System.Drawing.Size(30, 100); this.tabMain.Location = new System.Drawing.Point(0, 0); + this.tabMain.Margin = new System.Windows.Forms.Padding(4); this.tabMain.Multiline = true; this.tabMain.Name = "tabMain"; this.tabMain.SelectedIndex = 0; - this.tabMain.Size = new System.Drawing.Size(786, 467); + this.tabMain.Size = new System.Drawing.Size(820, 465); this.tabMain.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; this.tabMain.TabIndex = 0; this.tabMain.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.TabMain_DrawItem); // + // tabPageLog + // + this.tabPageLog.Location = new System.Drawing.Point(104, 4); + this.tabPageLog.Margin = new System.Windows.Forms.Padding(4); + this.tabPageLog.Name = "tabPageLog"; + this.tabPageLog.Size = new System.Drawing.Size(712, 457); + this.tabPageLog.TabIndex = 3; + this.tabPageLog.Text = "Log"; + this.tabPageLog.UseVisualStyleBackColor = true; + // // tabPageDuty // this.tabPageDuty.BackColor = System.Drawing.Color.Transparent; this.tabPageDuty.Location = new System.Drawing.Point(104, 4); + this.tabPageDuty.Margin = new System.Windows.Forms.Padding(4); this.tabPageDuty.Name = "tabPageDuty"; - this.tabPageDuty.Padding = new System.Windows.Forms.Padding(3); - this.tabPageDuty.Size = new System.Drawing.Size(678, 459); + this.tabPageDuty.Padding = new System.Windows.Forms.Padding(4); + this.tabPageDuty.Size = new System.Drawing.Size(712, 441); this.tabPageDuty.TabIndex = 0; this.tabPageDuty.Text = "Duty"; // // tabPagePing // this.tabPagePing.Location = new System.Drawing.Point(104, 4); + this.tabPagePing.Margin = new System.Windows.Forms.Padding(4); this.tabPagePing.Name = "tabPagePing"; - this.tabPagePing.Size = new System.Drawing.Size(678, 459); + this.tabPagePing.Size = new System.Drawing.Size(712, 441); this.tabPagePing.TabIndex = 2; this.tabPagePing.Text = "Ping"; this.tabPagePing.UseVisualStyleBackColor = true; @@ -107,43 +97,23 @@ namespace DutyContent // tabPageConfig // this.tabPageConfig.Location = new System.Drawing.Point(104, 4); + this.tabPageConfig.Margin = new System.Windows.Forms.Padding(4); this.tabPageConfig.Name = "tabPageConfig"; - this.tabPageConfig.Padding = new System.Windows.Forms.Padding(3); - this.tabPageConfig.Size = new System.Drawing.Size(678, 459); + this.tabPageConfig.Padding = new System.Windows.Forms.Padding(4); + this.tabPageConfig.Size = new System.Drawing.Size(712, 441); this.tabPageConfig.TabIndex = 1; this.tabPageConfig.Text = "Config"; this.tabPageConfig.UseVisualStyleBackColor = true; // - // txtMesg - // - this.txtMesg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.txtMesg.Location = new System.Drawing.Point(104, 3); - this.txtMesg.Name = "txtMesg"; - this.txtMesg.ReadOnly = true; - this.txtMesg.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.txtMesg.Size = new System.Drawing.Size(679, 57); - this.txtMesg.TabIndex = 1; - this.txtMesg.Text = ""; - // - // btnClearMesg - // - this.btnClearMesg.Location = new System.Drawing.Point(3, 3); - this.btnClearMesg.Name = "btnClearMesg"; - this.btnClearMesg.Size = new System.Drawing.Size(95, 33); - this.btnClearMesg.TabIndex = 0; - this.btnClearMesg.Text = "Clear Mesg"; - this.btnClearMesg.UseVisualStyleBackColor = true; - // // panelBase // + this.panelBase.Controls.Add(this.tabMain); this.panelBase.Controls.Add(this.lblStatusLeft); - this.panelBase.Controls.Add(this.spctBase); this.panelBase.Dock = System.Windows.Forms.DockStyle.Fill; this.panelBase.Location = new System.Drawing.Point(0, 0); + this.panelBase.Margin = new System.Windows.Forms.Padding(4); this.panelBase.Name = "panelBase"; - this.panelBase.Size = new System.Drawing.Size(792, 567); + this.panelBase.Size = new System.Drawing.Size(820, 490); this.panelBase.TabIndex = 1; // // lblStatusLeft @@ -153,9 +123,10 @@ namespace DutyContent this.lblStatusLeft.BackColor = System.Drawing.Color.MidnightBlue; this.lblStatusLeft.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblStatusLeft.ForeColor = System.Drawing.Color.White; - this.lblStatusLeft.Location = new System.Drawing.Point(0, 540); + this.lblStatusLeft.Location = new System.Drawing.Point(0, 462); + this.lblStatusLeft.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblStatusLeft.Name = "lblStatusLeft"; - this.lblStatusLeft.Size = new System.Drawing.Size(792, 27); + this.lblStatusLeft.Size = new System.Drawing.Size(820, 28); this.lblStatusLeft.TabIndex = 1; this.lblStatusLeft.Text = "99"; this.lblStatusLeft.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -163,15 +134,13 @@ namespace DutyContent // // DcControl // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.panelBase); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(4); this.Name = "DcControl"; - this.Size = new System.Drawing.Size(792, 567); - this.spctBase.Panel1.ResumeLayout(false); - this.spctBase.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.spctBase)).EndInit(); - this.spctBase.ResumeLayout(false); + this.Size = new System.Drawing.Size(820, 490); this.tabMain.ResumeLayout(false); this.panelBase.ResumeLayout(false); this.ResumeLayout(false); @@ -179,15 +148,12 @@ namespace DutyContent } #endregion - - private System.Windows.Forms.SplitContainer spctBase; - private System.Windows.Forms.Button btnClearMesg; private System.Windows.Forms.TabControl tabMain; private System.Windows.Forms.TabPage tabPageDuty; private System.Windows.Forms.TabPage tabPageConfig; - private System.Windows.Forms.RichTextBox txtMesg; private System.Windows.Forms.TabPage tabPagePing; private System.Windows.Forms.Panel panelBase; private System.Windows.Forms.Label lblStatusLeft; + private System.Windows.Forms.TabPage tabPageLog; } } diff --git a/DcControl.cs b/DcControl.cs index 84e0bd4..324477c 100644 --- a/DcControl.cs +++ b/DcControl.cs @@ -65,6 +65,9 @@ namespace DutyContent Tab.ConfigForm configform = new Tab.ConfigForm(); tabPageConfig.Controls.Add(configform.Controls[0]); + + Tab.LogForm logform = new Tab.LogForm(); + tabPageLog.Controls.Add(logform.Controls[0]); } // @@ -89,7 +92,7 @@ namespace DutyContent ActGlobals.oFormActMain.Shown += OFormActMain_Shown; var actinfo = System.Reflection.Assembly.GetAssembly(typeof(ActGlobals)); - MesgLog.I(5, actinfo.GetName().Version, actinfo.Location); + Logger.I(5, actinfo.GetName().Version); if (_ffxiv_plugin_data == null) { @@ -101,7 +104,7 @@ namespace DutyContent } if (_ffxiv_plugin_data == null) - MesgLog.E(2); // FFXIV plugin is missing! + Logger.E(2); // FFXIV plugin is missing! else { var ids = ((FFXIV_ACT_Plugin.FFXIV_ACT_Plugin)_ffxiv_plugin_data.pluginObj).DataSubscription; @@ -110,7 +113,7 @@ namespace DutyContent ids.ZoneChanged -= FFXIVPlugin_ZoneChanged; ids.ZoneChanged += FFXIVPlugin_ZoneChanged; - MesgLog.I(6, System.Diagnostics.FileVersionInfo.GetVersionInfo(_ffxiv_plugin_data.pluginFile.FullName).FileVersion, _ffxiv_plugin_data.pluginFile.FullName); + Logger.I(6, System.Diagnostics.FileVersionInfo.GetVersionInfo(_ffxiv_plugin_data.pluginFile.FullName).FileVersion); } _save_timer = new System.Timers.Timer() { Interval = 5000 }; @@ -142,10 +145,9 @@ namespace DutyContent Tab.PingForm.Self?.PluginDeinitialize(); Tab.DutyForm.Self?.PluginDeinitialize(); Tab.ConfigForm.Self?.PluginDeinitialize(); + Tab.LogForm.Self?.PluginDeinitialize(); DcConfig.SaveConfig(); - MesgLog.SetTextBox(null); - _act_tab = null; if (_act_label != null) @@ -171,10 +173,9 @@ namespace DutyContent _act_label.Text = "Starting..."; // - MesgLog.SetTextBox(txtMesg); - MesgLog.Initialize(Properties.Resources.DefaultMessage); + Locale.Initialize(Properties.Resources.DefaultMessage); - MesgLog.C(Color.Aquamarine, 4, DcConfig.PluginVersion.ToString()); + Logger.I(4, DcConfig.PluginVersion.ToString()); DcConfig.LoadConfig(); ShowStatusBarAsConfig(true); @@ -185,17 +186,20 @@ namespace DutyContent UpdateUiLocale(); - lblStatusLeft.Text = MesgLog.Text(99, DcConfig.PluginVersion); // once here + lblStatusLeft.Text = Locale.Text(99, DcConfig.PluginVersion); // once here // Dock = DockStyle.Fill; _act_tab.Controls.Add(this); // + Tab.LogForm.Self?.PluginInitialize(); Tab.ConfigForm.Self?.PluginInitialize(); Tab.DutyForm.Self?.PluginInitialize(); Tab.PingForm.Self?.PluginInitialize(); + tabMain.SelectedTab = tabPageDuty; + // if (DcConfig.DataRemoteUpdate) { @@ -206,7 +210,7 @@ namespace DutyContent frm.PluginInitialize(); frm.UpdateUiLocale(); - TabPage tp = new TabPage(MesgLog.Text(206)); + TabPage tp = new TabPage(Locale.Text(206)); try { // why? sometimes trouble @@ -214,7 +218,7 @@ namespace DutyContent } catch (Exception ex) { - MesgLog.Ex(ex); + Logger.Ex(ex); } tabMain.TabPages.Add(tp); @@ -227,7 +231,7 @@ namespace DutyContent DcConfig.SaveConfig(); } - MesgLog.C(Color.Aquamarine, 207, DcConfig.PluginTag, tag); + Logger.C(Color.Aquamarine, 207, DcConfig.PluginTag, tag); } } @@ -254,7 +258,7 @@ namespace DutyContent if (tabMain.SelectedIndex == e.Index) { - f = new Font(tabMain.Font.FontFamily, 12.0f, FontStyle.Bold, GraphicsUnit.Pixel); + f = new Font(tabMain.Font.FontFamily, 14.0f, FontStyle.Bold, GraphicsUnit.Pixel); #if false b = new SolidBrush(Color.Black); h = SystemBrushes.Window; @@ -266,7 +270,7 @@ namespace DutyContent //else if (p.col) else { - f = new Font(tabMain.Font.FontFamily, 12.0f, FontStyle.Regular, GraphicsUnit.Pixel); + f = new Font(tabMain.Font.FontFamily, 14.0f, FontStyle.Regular, GraphicsUnit.Pixel); b = new SolidBrush(Color.DarkSlateGray); h = SystemBrushes.Control; } @@ -320,7 +324,7 @@ namespace DutyContent if (span.TotalSeconds > 2) { _game_connection_tick = now; - DcConfig.Connections.GetConnections(_game_process.Process); + DcConfig.Connections.BuildConnections(_game_process.Process); } } @@ -353,7 +357,7 @@ namespace DutyContent { Tab.DutyForm.Self?.ZoneChanged(zone_id, zone_name); - lblStatusLeft.Text = MesgLog.Text(34, zone_name, zone_id); + lblStatusLeft.Text = Locale.Text(34, zone_name, zone_id); } // @@ -361,18 +365,21 @@ namespace DutyContent { ThirdParty.FontUtilities.SimpleChangeFont(this, DcConfig.UiFontFamily, true); - _act_label.Text = MesgLog.Text(1); // Duty ready - _act_tab.Text = MesgLog.Text(0); // FFXIV dc + _act_label.Text = Locale.Text(1); // Duty ready + _act_tab.Text = Locale.Text(0); // FFXIV dc - tabPageDuty.Text = MesgLog.Text(300); + tabPageDuty.Text = Locale.Text(300); Tab.DutyForm.Self?.UpdateUiLocale(); - tabPagePing.Text = MesgLog.Text(327); + tabPagePing.Text = Locale.Text(400); Tab.PingForm.Self?.UpdateUiLocale(); - tabPageConfig.Text = MesgLog.Text(200); + tabPageConfig.Text = Locale.Text(200); Tab.ConfigForm.Self?.UpdateUiLocale(); + tabPageLog.Text = Locale.Text(500); + Tab.LogForm.Self?.UpdateUiLocale(); + Tab.UpdateNotifyForm.Self?.UpdateUiLocale(); } @@ -383,7 +390,7 @@ namespace DutyContent { if (!lblStatusLeft.Visible || force) { - spctBase.Dock = DockStyle.None; + tabMain.Dock = DockStyle.None; lblStatusLeft.Visible = true; } } @@ -392,7 +399,7 @@ namespace DutyContent if (lblStatusLeft.Visible || force) { lblStatusLeft.Visible = false; - spctBase.Dock = DockStyle.Fill; + tabMain.Dock = DockStyle.Fill; } } } diff --git a/DutyContent.csproj b/DutyContent.csproj index 90f347d..26a540e 100644 --- a/DutyContent.csproj +++ b/DutyContent.csproj @@ -73,6 +73,7 @@ DcControl.cs + Form @@ -95,6 +96,12 @@ DutyOvForm.cs + + Form + + + LogForm.cs + Form @@ -108,16 +115,23 @@ UpdateNotifyForm.cs + + Component + + + Component + + - + Code @@ -147,6 +161,9 @@ ResXFileCodeGenerator Resources.Designer.cs + + LogForm.cs + PingForm.cs @@ -159,7 +176,7 @@ - + @@ -204,6 +221,18 @@ + + + + + + + + + + + + if exist "%25APPDATA%25\Advanced Combat Tracker\Plugins\DutyContent" copy $(TargetPath) "%25APPDATA%25\Advanced Combat Tracker\Plugins\DutyContent" /y diff --git a/Libre/PingGrapher.cs b/Libre/PingGrapher.cs index f502a52..215cb87 100644 --- a/Libre/PingGrapher.cs +++ b/Libre/PingGrapher.cs @@ -89,7 +89,7 @@ namespace DutyContent.Libre } } - public void DrawValues(List values) + public void DrawValues(List values, DrawType drawtype = DrawType.Linear) { if (_bmp == null || values.Count < 2) return; @@ -136,7 +136,10 @@ namespace DutyContent.Libre for (var i = 0; i < cd.Count - 1; i++, u += Step) pts[i] = new PointF(u, height - cd.Values[i] * scale); - g.DrawCurve(pen, pts, 0.6f); + if (drawtype == DrawType.Linear) + g.DrawLines(pen, pts); + else if (drawtype == DrawType.Curved) + g.DrawCurve(pen, pts, 0.6f); } #endif } @@ -148,5 +151,12 @@ namespace DutyContent.Libre _pbx.Image = _bmp; _pbx.Refresh(); } + + // + public enum DrawType : int + { + Linear = 0, + Curved = 1 + } } } diff --git a/Locale.cs b/Locale.cs new file mode 100644 index 0000000..05e5cb9 --- /dev/null +++ b/Locale.cs @@ -0,0 +1,52 @@ +using System.Text; + +namespace DutyContent +{ + static class Locale + { + private static ThirdParty.LineDb _lines; + + public static string Language { get; private set; } + + public static void Initialize(string text) + { + _lines = new ThirdParty.LineDb(text, true); + } + + public static bool LoadFile(string filename, Encoding enc) + { + if (_lines == null) + return false; + else + { + _lines.LoadFile(filename, enc, true); + return true; + } + } + + public static bool LoadFile(string filename) + { + return LoadFile(filename, Encoding.UTF8); + } + + public static string Text(string text) + { + return _lines == null || !_lines.Try(text, out string v) ? $"<{text}>" : v; + } + + public static string Text(string text, params object[] prms) + { + return _lines == null || !_lines.Try(text, out string v) ? $"<{text}>" : string.Format(v, prms); + } + + public static string Text(int key) + { + return _lines == null || !_lines.Try(key, out string v) ? $"<{key}>" : v; + } + + public static string Text(int key, params object[] prms) + { + return _lines == null || !_lines.Try(key, out string v) ? $"<{key}>" : string.Format(v, prms); + } + } +} diff --git a/Logger.cs b/Logger.cs new file mode 100644 index 0000000..e5ecb2f --- /dev/null +++ b/Logger.cs @@ -0,0 +1,77 @@ +using System; +using System.Drawing; +using System.Text.RegularExpressions; + +namespace DutyContent +{ + static class Logger + { + private static readonly Regex ExceptionPattern = new Regex(@"\{(.+?)\}"); + + public static void Write(Color color, string fmt, params object[] prms) + { + if (Tab.LogForm.Self != null) + Tab.LogForm.Self.WriteLog(color, string.Format(fmt, prms)); + } + + public static void Write(string format, params object[] prms) + { + Write(Color.Black, format, prms); + } + + public static void WriteCategory(Color color, string category, string fmt, params object[] prms) + { + if (Tab.LogForm.Self != null) + Tab.LogForm.Self.WriteLogSection(color, category, string.Format(fmt, prms)); + } + + public static void WriteCategory(string category, string format, params object[] prms) + { + Write(Color.Black, category, format, prms); + } + + public static void L(string format, params object[] prms) + { + Write(Color.DarkBlue, format, prms); + } + + // color + public static void C(Color color, int key, params object[] prms) + { + Write(color, Locale.Text(key, prms)); + } + + // info / black + public static void I(int key, params object[] prms) + { + Write(Color.Black, Locale.Text(key, prms)); + } + + // error / red + public static void E(int key, params object[] prms) + { + Write(Color.Red, Locale.Text(key, prms)); + } + + // gray + public static void Y(int key, params object[] prms) + { + Write(Color.Gray, Locale.Text(key, prms)); + } + + // exception + public static void Ex(Exception ex, int key, params object[] prms) + { + string text = Locale.Text(key, prms); + string msg = ExceptionPattern.Replace(ex.Message, "{{$1}}"); + Write(Color.Red, $"{text}: {msg}"); + } + + // exception + public static void Ex(Exception ex) + { + string msg = ExceptionPattern.Replace(ex.Message, "{{$1}}"); + Write(Color.Red, $"EX: {msg}"); + } + } +} diff --git a/MesgLog.cs b/MesgLog.cs deleted file mode 100644 index 4d1913c..0000000 --- a/MesgLog.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System; -using System.Drawing; -using System.Text; -using System.Text.RegularExpressions; -using System.Windows.Forms; - -namespace DutyContent -{ - class MesgLog - { - private static ThirdParty.LineDb _lines; - private static RichTextBox _logs; - - private static readonly Regex ExceptionPattern = new Regex(@"\{(.+?)\}"); - - public static string Language { get; private set; } - - public static void Initialize(string text) - { - _lines = new ThirdParty.LineDb(text, true); - } - - public static bool LoadFile(string filename, Encoding enc) - { - if (_lines == null) - return false; - else - { - _lines.LoadFile(filename, enc, true); - return true; - } - } - - public static bool LoadFile(string filename) - { - return LoadFile(filename, Encoding.UTF8); - } - - public static void SetTextBox(RichTextBox textbox) - { - _logs = textbox; - } - - public static string Text(string text) - { - return _lines == null || !_lines.Try(text, out string v) ? $"<{text}>" : v; - } - - public static string Text(string text, params object[] prms) - { - return _lines == null || !_lines.Try(text, out string v) ? $"<{text}>" : string.Format(v, prms); - } - - public static string Text(int key) - { - return _lines == null || !_lines.Try(key, out string v) ? $"<{key}>" : v; - } - - public static string Text(int key, params object[] prms) - { - return _lines == null || !_lines.Try(key, out string v) ? $"<{key}>" : string.Format(v, prms); - } - - public static void Write(Color color, string format, params object[] prms) - { - if (_logs == null || _logs.IsDisposed || format == null) - return; - - var text = string.Format(format, prms); - var dt = DateTime.Now.ToString("HH:mm:ss"); - var ms = $"[{dt}] {text}{Environment.NewLine}"; - - WorkerAct.Invoker(() => - { - _logs.SelectionColor = color; - _logs.SelectionStart = _logs.TextLength; - _logs.SelectionLength = 0; - _logs.AppendText(ms); - - _logs.SelectionColor = _logs.ForeColor; - ThirdParty.NativeMethods.ScrollToBottom(_logs); - }); - } - - public static void Write(string format, params object[] prms) - { - Write(Color.White, format, prms); - } - - public static void L(string format, params object[] prms) - { - Write(Color.DarkBlue, format, prms); - } - - // color - public static void C(Color color, int key, params object[] prms) - { - Write(color, Text(key, prms)); - } - - // info / black - public static void I(int key, params object[] prms) - { - Write(Color.Black, Text(key, prms)); - } - - // error / red - public static void E(int key, params object[] prms) - { - Write(Color.Red, Text(key, prms)); - } - - // gray - public static void Y(int key, params object[] prms) - { - Write(Color.Gray, Text(key, prms)); - } - - // exception - public static void Ex(Exception ex, int key, params object[] prms) - { - string text = Text(key, prms); - string msg = ExceptionPattern.Replace(ex.Message, "{{$1}}"); - Write(Color.Red, $"{text}: {msg}"); - } - - // exception - public static void Ex(Exception ex) - { - string msg = ExceptionPattern.Replace(ex.Message, "{{$1}}"); - Write(Color.Red, $"EX: {msg}"); - } - } -} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index ad21858..8020c43 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -53,5 +53,5 @@ using System.Windows; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("1.1.*")] +[assembly: AssemblyFileVersion("1.1.0.0")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs index 5cc7031..8712eb3 100644 --- a/Properties/Resources.Designer.cs +++ b/Properties/Resources.Designer.cs @@ -61,16 +61,16 @@ namespace DutyContent.Properties { } /// - /// # Default English message + /// Looks up a localized string similar to # Default English message ///LANG=English /// - ///0=FFXIV dc + ///0=DutyCon ///1=Duty ready ///2=FFXIV plugin is missing! ///3=FFXIV plugin found! - ///4=FFXIV Duty Content starting! - ///5=ACT info: {0} ({1}) - ///6=FFXIV plugin info {0} ({1}) + ///4=FFXIV Duty Content: {0} + ///5=ACT info: {0} + ///6=FFXIV plugin info: {0} ///7=Invalid data: {0} ///8=Parsing error ///9=Unknown roulette: {0} @@ -79,12 +79,14 @@ namespace DutyContent.Properties { ///12=Unknown FATE: {0} ///13=Data reading failed! ///14=Data file not found! {0} - ///20=Duty contents info: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ({6}) + ///20=Duty contents info: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ///21=Roulette ///22=Instance ///23=FATE ///24=Skirmish - /// Looks up a localized string similar to this is city life + ///25=CE + ///26=Default + ///27=N [rest of string was truncated]";. /// internal static string DefaultMessage { get { @@ -122,6 +124,46 @@ namespace DutyContent.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pix_rdrt_bline { + get { + object obj = ResourceManager.GetObject("pix_rdrt_bline", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pix_rdrt_green { + get { + object obj = ResourceManager.GetObject("pix_rdrt_green", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pix_rdrt_puple { + get { + object obj = ResourceManager.GetObject("pix_rdrt_puple", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pix_rdrt_red { + get { + object obj = ResourceManager.GetObject("pix_rdrt_red", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/Properties/Resources.resx b/Properties/Resources.resx index 0bd3315..88b01df 100644 --- a/Properties/Resources.resx +++ b/Properties/Resources.resx @@ -130,6 +130,18 @@ ..\Resources\pix_play.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\pix_rdrt_bline.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pix_rdrt_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pix_rdrt_puple.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pix_rdrt_red.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\resources\pix_tab_content.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/References/Resource/rdrt_base.pdn b/References/Resource/rdrt_base.pdn new file mode 100644 index 0000000..40f1a1f Binary files /dev/null and b/References/Resource/rdrt_base.pdn differ diff --git a/Resources/mesg.txt b/Resources/mesg.txt index acd29ea..6934b53 100644 --- a/Resources/mesg.txt +++ b/Resources/mesg.txt @@ -6,8 +6,8 @@ LANG=English 2=FFXIV plugin is missing! 3=FFXIV plugin found! 4=FFXIV Duty Content: {0} -5=ACT info: {0} ({1}) -6=FFXIV plugin info: {0} ({1}) +5=ACT info: {0} +6=FFXIV plugin info: {0} 7=Invalid data: {0} 8=Parsing error 9=Unknown roulette: {0} @@ -16,7 +16,7 @@ LANG=English 12=Unknown FATE: {0} 13=Data reading failed! 14=Data file not found! {0} -20=Duty contents info: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} ({6}) +20=Duty contents info: {1}({0}) / A:{2} / R:{3} / I:{4} / F:{5} 21=Roulette 22=Instance 23=FATE @@ -25,12 +25,17 @@ LANG=English 26=Default 27=None 28=Packet file not found! {0} -29=Packet info: {0} "{1}" ({2}) +29=Packet info: {0} "{1}" 30=Error requesting web service 31=Error while updating duty/FATE Data 32=Error while updating packet info 33=Packet updated: {0} "{1}" 34={0} ({1}) +35=Access clipboard failed! +36=Window control error! +37=Debug +38=Match +39=Entry 99=DutyContent Plugin {0} @@ -54,14 +59,14 @@ LANG=English 212=Status bar 213=Enable 214=Disable -215=* Need restart plugin +215=* Need plugin reload +216=Log font 300=Duty 301=Contents 302=Setting 303=Packet 304=Dataset -305=Log font 306=Enable overlay 307=Transparent 308=Enable sound @@ -83,15 +88,6 @@ LANG=English 324=Status 325=Member 326=Progress -327=Ping -328=Use ping -329=Colors -330=Excellent -331=Good -332=Normal -333=Bad -334=Show Graph -335=Addresses when client doesn't have connections 336=Packet 337=Custom Packet 338=Use Discord Webhook @@ -99,7 +95,26 @@ LANG=English 340=Test && Save Notifies 341=Use TTS 342=Invalid discord webhook URL -343=Address + +400=Ping +401=Use ping +402=Colors +403=Excellent +404=Good +405=Normal +406=Bad +407=Show Graph +408=Default ping addresses +409=Address +410=Graph type +411=Linear +412=Curved +413=Show loss rate + +500=Log +501=Copy +502=Clear +503=Scroll automatically 10001="{0}" spawned! 10002=Entry: {0} diff --git a/Resources/pix_rdrt_bline.png b/Resources/pix_rdrt_bline.png new file mode 100644 index 0000000..5d90083 Binary files /dev/null and b/Resources/pix_rdrt_bline.png differ diff --git a/Resources/pix_rdrt_green.png b/Resources/pix_rdrt_green.png new file mode 100644 index 0000000..c393732 Binary files /dev/null and b/Resources/pix_rdrt_green.png differ diff --git a/Resources/pix_rdrt_puple.png b/Resources/pix_rdrt_puple.png new file mode 100644 index 0000000..67b3e99 Binary files /dev/null and b/Resources/pix_rdrt_puple.png differ diff --git a/Resources/pix_rdrt_red.png b/Resources/pix_rdrt_red.png new file mode 100644 index 0000000..0d60e50 Binary files /dev/null and b/Resources/pix_rdrt_red.png differ diff --git a/Tab/ConfigForm.Designer.cs b/Tab/ConfigForm.Designer.cs index ca846e5..ff6da93 100644 --- a/Tab/ConfigForm.Designer.cs +++ b/Tab/ConfigForm.Designer.cs @@ -30,7 +30,14 @@ namespace DutyContent.Tab private void InitializeComponent() { this.pnlBase = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.rdoDebugDisable = new System.Windows.Forms.RadioButton(); + this.rdoDebugEnable = new System.Windows.Forms.RadioButton(); + this.lblUseDebug = new System.Windows.Forms.Label(); + this.btnLogFont = new System.Windows.Forms.Button(); + this.lblLogFont = new System.Windows.Forms.Label(); this.panel2 = new System.Windows.Forms.Panel(); + this.lblStatusBarNeedRestart = new System.Windows.Forms.Label(); this.rdoStatusBarEnable = new System.Windows.Forms.RadioButton(); this.rdoStatusBarDisable = new System.Windows.Forms.RadioButton(); this.panel1 = new System.Windows.Forms.Panel(); @@ -45,8 +52,8 @@ namespace DutyContent.Tab this.cboDispLang = new System.Windows.Forms.ComboBox(); this.lblDispLang = new System.Windows.Forms.Label(); this.panelBase = new System.Windows.Forms.Panel(); - this.lblStatusBarNeedRestart = new System.Windows.Forms.Label(); this.pnlBase.SuspendLayout(); + this.panel3.SuspendLayout(); this.panel2.SuspendLayout(); this.panel1.SuspendLayout(); this.panelBase.SuspendLayout(); @@ -58,6 +65,11 @@ namespace DutyContent.Tab | System.Windows.Forms.AnchorStyles.Right))); this.pnlBase.AutoScroll = true; this.pnlBase.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pnlBase.Controls.Add(this.lblStatusBarNeedRestart); + this.pnlBase.Controls.Add(this.panel3); + this.pnlBase.Controls.Add(this.lblUseDebug); + this.pnlBase.Controls.Add(this.btnLogFont); + this.pnlBase.Controls.Add(this.lblLogFont); this.pnlBase.Controls.Add(this.panel2); this.pnlBase.Controls.Add(this.panel1); this.pnlBase.Controls.Add(this.lblUseStatusBar); @@ -68,29 +80,112 @@ namespace DutyContent.Tab this.pnlBase.Controls.Add(this.lblCurrentLang); this.pnlBase.Controls.Add(this.cboDispLang); this.pnlBase.Controls.Add(this.lblDispLang); - this.pnlBase.Location = new System.Drawing.Point(12, 12); + this.pnlBase.Location = new System.Drawing.Point(0, 0); + this.pnlBase.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.pnlBase.Name = "pnlBase"; - this.pnlBase.Size = new System.Drawing.Size(776, 286); + this.pnlBase.Size = new System.Drawing.Size(804, 394); this.pnlBase.TabIndex = 0; // + // panel3 + // + this.panel3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel3.Controls.Add(this.rdoDebugDisable); + this.panel3.Controls.Add(this.rdoDebugEnable); + this.panel3.Location = new System.Drawing.Point(160, 352); + this.panel3.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(627, 30); + this.panel3.TabIndex = 19; + // + // rdoDebugDisable + // + this.rdoDebugDisable.AutoSize = true; + this.rdoDebugDisable.Checked = true; + this.rdoDebugDisable.Location = new System.Drawing.Point(158, 4); + this.rdoDebugDisable.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.rdoDebugDisable.Name = "rdoDebugDisable"; + this.rdoDebugDisable.Size = new System.Drawing.Size(50, 22); + this.rdoDebugDisable.TabIndex = 1; + this.rdoDebugDisable.TabStop = true; + this.rdoDebugDisable.Text = "214"; + this.rdoDebugDisable.UseVisualStyleBackColor = true; + this.rdoDebugDisable.CheckedChanged += new System.EventHandler(this.rdoDebugDisable_CheckedChanged); + // + // rdoDebugEnable + // + this.rdoDebugEnable.AutoSize = true; + this.rdoDebugEnable.Location = new System.Drawing.Point(4, 4); + this.rdoDebugEnable.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.rdoDebugEnable.Name = "rdoDebugEnable"; + this.rdoDebugEnable.Size = new System.Drawing.Size(50, 22); + this.rdoDebugEnable.TabIndex = 0; + this.rdoDebugEnable.Text = "213"; + this.rdoDebugEnable.UseVisualStyleBackColor = true; + this.rdoDebugEnable.CheckedChanged += new System.EventHandler(this.rdoDebugEnable_CheckedChanged); + // + // lblUseDebug + // + this.lblUseDebug.AutoSize = true; + this.lblUseDebug.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblUseDebug.Location = new System.Drawing.Point(18, 357); + this.lblUseDebug.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblUseDebug.Name = "lblUseDebug"; + this.lblUseDebug.Size = new System.Drawing.Size(96, 20); + this.lblUseDebug.TabIndex = 18; + this.lblUseDebug.Text = "Use debug"; + // + // btnLogFont + // + this.btnLogFont.Location = new System.Drawing.Point(160, 223); + this.btnLogFont.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnLogFont.Name = "btnLogFont"; + this.btnLogFont.Size = new System.Drawing.Size(377, 53); + this.btnLogFont.TabIndex = 17; + this.btnLogFont.Text = "button1"; + this.btnLogFont.UseVisualStyleBackColor = true; + this.btnLogFont.Click += new System.EventHandler(this.BtnLogFont_Click); + // + // lblLogFont + // + this.lblLogFont.AutoSize = true; + this.lblLogFont.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblLogFont.Location = new System.Drawing.Point(18, 239); + this.lblLogFont.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblLogFont.Name = "lblLogFont"; + this.lblLogFont.Size = new System.Drawing.Size(39, 20); + this.lblLogFont.TabIndex = 16; + this.lblLogFont.Text = "216"; + // // panel2 // this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.panel2.Controls.Add(this.lblStatusBarNeedRestart); this.panel2.Controls.Add(this.rdoStatusBarEnable); this.panel2.Controls.Add(this.rdoStatusBarDisable); - this.panel2.Location = new System.Drawing.Point(251, 220); + this.panel2.Location = new System.Drawing.Point(160, 284); + this.panel2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(520, 47); + this.panel2.Size = new System.Drawing.Size(627, 50); this.panel2.TabIndex = 15; // + // lblStatusBarNeedRestart + // + this.lblStatusBarNeedRestart.AutoSize = true; + this.lblStatusBarNeedRestart.Location = new System.Drawing.Point(164, 314); + this.lblStatusBarNeedRestart.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblStatusBarNeedRestart.Name = "lblStatusBarNeedRestart"; + this.lblStatusBarNeedRestart.Size = new System.Drawing.Size(32, 18); + this.lblStatusBarNeedRestart.TabIndex = 14; + this.lblStatusBarNeedRestart.Text = "215"; + // // rdoStatusBarEnable // this.rdoStatusBarEnable.AutoSize = true; - this.rdoStatusBarEnable.Location = new System.Drawing.Point(2, 3); + this.rdoStatusBarEnable.Location = new System.Drawing.Point(3, 4); + this.rdoStatusBarEnable.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.rdoStatusBarEnable.Name = "rdoStatusBarEnable"; - this.rdoStatusBarEnable.Size = new System.Drawing.Size(43, 17); + this.rdoStatusBarEnable.Size = new System.Drawing.Size(50, 22); this.rdoStatusBarEnable.TabIndex = 12; this.rdoStatusBarEnable.Text = "213"; this.rdoStatusBarEnable.UseVisualStyleBackColor = true; @@ -100,9 +195,10 @@ namespace DutyContent.Tab // this.rdoStatusBarDisable.AutoSize = true; this.rdoStatusBarDisable.Checked = true; - this.rdoStatusBarDisable.Location = new System.Drawing.Point(105, 3); + this.rdoStatusBarDisable.Location = new System.Drawing.Point(158, 4); + this.rdoStatusBarDisable.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.rdoStatusBarDisable.Name = "rdoStatusBarDisable"; - this.rdoStatusBarDisable.Size = new System.Drawing.Size(43, 17); + this.rdoStatusBarDisable.Size = new System.Drawing.Size(50, 22); this.rdoStatusBarDisable.TabIndex = 13; this.rdoStatusBarDisable.TabStop = true; this.rdoStatusBarDisable.Text = "214"; @@ -115,17 +211,19 @@ namespace DutyContent.Tab | System.Windows.Forms.AnchorStyles.Right))); this.panel1.Controls.Add(this.rdoDataUpdateLocal); this.panel1.Controls.Add(this.rdoDataUpdateRemote); - this.panel1.Location = new System.Drawing.Point(251, 83); + this.panel1.Location = new System.Drawing.Point(160, 89); + this.panel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(520, 67); + this.panel1.Size = new System.Drawing.Size(627, 65); this.panel1.TabIndex = 14; // // rdoDataUpdateLocal // this.rdoDataUpdateLocal.AutoSize = true; - this.rdoDataUpdateLocal.Location = new System.Drawing.Point(3, 3); + this.rdoDataUpdateLocal.Location = new System.Drawing.Point(4, 4); + this.rdoDataUpdateLocal.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.rdoDataUpdateLocal.Name = "rdoDataUpdateLocal"; - this.rdoDataUpdateLocal.Size = new System.Drawing.Size(43, 17); + this.rdoDataUpdateLocal.Size = new System.Drawing.Size(50, 22); this.rdoDataUpdateLocal.TabIndex = 6; this.rdoDataUpdateLocal.Text = "204"; this.rdoDataUpdateLocal.UseVisualStyleBackColor = true; @@ -135,9 +233,10 @@ namespace DutyContent.Tab // this.rdoDataUpdateRemote.AutoSize = true; this.rdoDataUpdateRemote.Checked = true; - this.rdoDataUpdateRemote.Location = new System.Drawing.Point(3, 26); + this.rdoDataUpdateRemote.Location = new System.Drawing.Point(4, 36); + this.rdoDataUpdateRemote.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.rdoDataUpdateRemote.Name = "rdoDataUpdateRemote"; - this.rdoDataUpdateRemote.Size = new System.Drawing.Size(43, 17); + this.rdoDataUpdateRemote.Size = new System.Drawing.Size(50, 22); this.rdoDataUpdateRemote.TabIndex = 7; this.rdoDataUpdateRemote.TabStop = true; this.rdoDataUpdateRemote.Text = "205"; @@ -148,7 +247,8 @@ namespace DutyContent.Tab // this.lblUseStatusBar.AutoSize = true; this.lblUseStatusBar.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblUseStatusBar.Location = new System.Drawing.Point(12, 220); + this.lblUseStatusBar.Location = new System.Drawing.Point(18, 289); + this.lblUseStatusBar.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblUseStatusBar.Name = "lblUseStatusBar"; this.lblUseStatusBar.Size = new System.Drawing.Size(39, 20); this.lblUseStatusBar.TabIndex = 11; @@ -156,18 +256,21 @@ namespace DutyContent.Tab // // lblTag // - this.lblTag.AutoSize = true; - this.lblTag.Location = new System.Drawing.Point(27, 4); + this.lblTag.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.lblTag.Location = new System.Drawing.Point(160, 8); + this.lblTag.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblTag.Name = "lblTag"; - this.lblTag.Size = new System.Drawing.Size(35, 13); + this.lblTag.Size = new System.Drawing.Size(636, 18); this.lblTag.TabIndex = 10; - this.lblTag.Text = "label1"; + this.lblTag.Text = "@@@"; + this.lblTag.TextAlign = System.Drawing.ContentAlignment.TopRight; // // btnUiFont // - this.btnUiFont.Location = new System.Drawing.Point(251, 165); + this.btnUiFont.Location = new System.Drawing.Point(160, 162); + this.btnUiFont.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.btnUiFont.Name = "btnUiFont"; - this.btnUiFont.Size = new System.Drawing.Size(217, 38); + this.btnUiFont.Size = new System.Drawing.Size(377, 53); this.btnUiFont.TabIndex = 9; this.btnUiFont.Text = "button1"; this.btnUiFont.UseVisualStyleBackColor = true; @@ -177,7 +280,8 @@ namespace DutyContent.Tab // this.lblUiFont.AutoSize = true; this.lblUiFont.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblUiFont.Location = new System.Drawing.Point(12, 165); + this.lblUiFont.Location = new System.Drawing.Point(18, 178); + this.lblUiFont.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblUiFont.Name = "lblUiFont"; this.lblUiFont.Size = new System.Drawing.Size(39, 20); this.lblUiFont.TabIndex = 8; @@ -187,7 +291,8 @@ namespace DutyContent.Tab // this.lblDataUpdate.AutoSize = true; this.lblDataUpdate.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblDataUpdate.Location = new System.Drawing.Point(12, 84); + this.lblDataUpdate.Location = new System.Drawing.Point(18, 93); + this.lblDataUpdate.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblDataUpdate.Name = "lblDataUpdate"; this.lblDataUpdate.Size = new System.Drawing.Size(39, 20); this.lblDataUpdate.TabIndex = 5; @@ -195,20 +300,21 @@ namespace DutyContent.Tab // // lblCurrentLang // - this.lblCurrentLang.Location = new System.Drawing.Point(318, 67); + this.lblCurrentLang.Location = new System.Drawing.Point(354, 60); + this.lblCurrentLang.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblCurrentLang.Name = "lblCurrentLang"; - this.lblCurrentLang.Size = new System.Drawing.Size(150, 15); + this.lblCurrentLang.Size = new System.Drawing.Size(225, 21); this.lblCurrentLang.TabIndex = 4; this.lblCurrentLang.Text = "--"; - this.lblCurrentLang.TextAlign = System.Drawing.ContentAlignment.TopRight; // // cboDispLang // this.cboDispLang.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cboDispLang.FormattingEnabled = true; - this.cboDispLang.Location = new System.Drawing.Point(251, 43); + this.cboDispLang.Location = new System.Drawing.Point(160, 55); + this.cboDispLang.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.cboDispLang.Name = "cboDispLang"; - this.cboDispLang.Size = new System.Drawing.Size(217, 21); + this.cboDispLang.Size = new System.Drawing.Size(186, 26); this.cboDispLang.TabIndex = 1; this.cboDispLang.SelectedIndexChanged += new System.EventHandler(this.CboDispLang_SelectedIndexChanged); // @@ -216,7 +322,8 @@ namespace DutyContent.Tab // this.lblDispLang.AutoSize = true; this.lblDispLang.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblDispLang.Location = new System.Drawing.Point(12, 41); + this.lblDispLang.Location = new System.Drawing.Point(18, 57); + this.lblDispLang.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblDispLang.Name = "lblDispLang"; this.lblDispLang.Size = new System.Drawing.Size(39, 20); this.lblDispLang.TabIndex = 0; @@ -228,30 +335,27 @@ namespace DutyContent.Tab this.panelBase.Controls.Add(this.pnlBase); this.panelBase.Dock = System.Windows.Forms.DockStyle.Fill; this.panelBase.Location = new System.Drawing.Point(0, 0); + this.panelBase.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.panelBase.Name = "panelBase"; - this.panelBase.Size = new System.Drawing.Size(800, 450); + this.panelBase.Size = new System.Drawing.Size(804, 623); this.panelBase.TabIndex = 1; // - // lblStatusBarNeedRestart - // - this.lblStatusBarNeedRestart.AutoSize = true; - this.lblStatusBarNeedRestart.Location = new System.Drawing.Point(238, 5); - this.lblStatusBarNeedRestart.Name = "lblStatusBarNeedRestart"; - this.lblStatusBarNeedRestart.Size = new System.Drawing.Size(25, 13); - this.lblStatusBarNeedRestart.TabIndex = 14; - this.lblStatusBarNeedRestart.Text = "215"; - // // ConfigForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScroll = true; - this.ClientSize = new System.Drawing.Size(800, 450); + this.ClientSize = new System.Drawing.Size(804, 623); this.Controls.Add(this.panelBase); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.MinimumSize = new System.Drawing.Size(640, 0); this.Name = "ConfigForm"; this.Text = "Config"; this.pnlBase.ResumeLayout(false); this.pnlBase.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); this.panel2.ResumeLayout(false); this.panel2.PerformLayout(); this.panel1.ResumeLayout(false); @@ -280,5 +384,11 @@ namespace DutyContent.Tab private System.Windows.Forms.Panel panel1; private System.Windows.Forms.Label lblUseStatusBar; private System.Windows.Forms.Label lblStatusBarNeedRestart; + private System.Windows.Forms.Button btnLogFont; + private System.Windows.Forms.Label lblLogFont; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.RadioButton rdoDebugDisable; + private System.Windows.Forms.RadioButton rdoDebugEnable; + private System.Windows.Forms.Label lblUseDebug; } } \ No newline at end of file diff --git a/Tab/ConfigForm.cs b/Tab/ConfigForm.cs index d844b5c..e689c66 100644 --- a/Tab/ConfigForm.cs +++ b/Tab/ConfigForm.cs @@ -28,7 +28,7 @@ namespace DutyContent.Tab public void PluginInitialize() { // - lblCurrentLang.Text = MesgLog.Text("LANG"); + lblCurrentLang.Text = Locale.Text("LANG"); // var lang = MakeConfigLangList(); @@ -59,6 +59,10 @@ namespace DutyContent.Tab // rdoStatusBarEnable.Checked = DcConfig.StatusBar; rdoStatusBarDisable.Checked = !DcConfig.StatusBar; + + // + rdoDebugEnable.Checked = DcConfig.DebugEnable; + rdoDebugDisable.Checked = !DcConfig.DebugEnable; } public void RefreshLocale() @@ -68,28 +72,35 @@ namespace DutyContent.Tab public void UpdateUiLocale() { - lblDispLang.Text = MesgLog.Text(201); + lblDispLang.Text = Locale.Text(201); - lblDataUpdate.Text = MesgLog.Text(203); - rdoDataUpdateLocal.Text = MesgLog.Text(204); - rdoDataUpdateRemote.Text = MesgLog.Text(205); + lblDataUpdate.Text = Locale.Text(203); + rdoDataUpdateLocal.Text = Locale.Text(204); + rdoDataUpdateRemote.Text = Locale.Text(205); - lblUiFont.Text = MesgLog.Text(210); + lblUiFont.Text = Locale.Text(210); btnUiFont.Text = DcConfig.UiFontFamily; - lblTag.Text = MesgLog.Text(211, DcConfig.PluginTag, DcConfig.PluginVersion); + lblLogFont.Text = Locale.Text(216); + btnLogFont.Text = $"{DcConfig.Duty.LogFontFamily}, {DcConfig.Duty.LogFontSize}"; - lblUseStatusBar.Text = MesgLog.Text(212); - rdoStatusBarEnable.Text = MesgLog.Text(213); - rdoStatusBarDisable.Text = MesgLog.Text(214); - lblStatusBarNeedRestart.Text = MesgLog.Text(215); + lblTag.Text = Locale.Text(211, DcConfig.PluginTag, DcConfig.PluginVersion); + + lblUseStatusBar.Text = Locale.Text(212); + rdoStatusBarEnable.Text = Locale.Text(213); + rdoStatusBarDisable.Text = Locale.Text(214); + lblStatusBarNeedRestart.Text = Locale.Text(215); + + + rdoDebugEnable.Text = Locale.Text(213); + rdoDebugDisable.Text = Locale.Text(214); } public static List MakeConfigLangList() { List lst = new List(); - lst.Add($"<{MesgLog.Text(26)}>"); + lst.Add($"<{Locale.Text(26)}>"); DirectoryInfo di = new DirectoryInfo(DcConfig.DataPath); @@ -127,7 +138,7 @@ namespace DutyContent.Tab DcControl.Self?.UpdateUiLocale(); DcConfig.SaveConfig(); - lblCurrentLang.Text = MesgLog.Text("LANG"); + lblCurrentLang.Text = Locale.Text("LANG"); } private void InternalDataUpdate(bool value) @@ -181,6 +192,34 @@ namespace DutyContent.Tab } } + private void BtnLogFont_Click(object sender, EventArgs e) + { + Font ret = (Font)WorkerAct.Invoker(new WorkerAct.ObjectReturnerDelegate(() => + { + FontDialog dg = new FontDialog + { + Font = Tab.LogForm.Self?.LogFont, + FontMustExist = true, + AllowVerticalFonts = false + }; + + return (dg.ShowDialog() == DialogResult.OK) ? dg.Font : null; + })); + + if (ret != null) + { + if (LogForm.Self != null) + LogForm.Self.LogFont = ret; + + DcConfig.Duty.LogFontFamily = ret.Name; + DcConfig.Duty.LogFontSize = ret.Size; + DcConfig.SaveConfig(); + + btnLogFont.Font = ret; + btnLogFont.Text = $"{DcConfig.Duty.LogFontFamily}, {DcConfig.Duty.LogFontSize}"; + } + } + private void InternalStatusBar(bool value) { if (!DcConfig.PluginEnable) @@ -206,5 +245,29 @@ namespace DutyContent.Tab { InternalStatusBar(false); } + + private void InternalDebug(bool value) + { + if (!DcConfig.PluginEnable) + return; + + if (value && DcConfig.DebugEnable) + return; + if (!value && !DcConfig.DebugEnable) + return; + + DcConfig.DebugEnable = value; + DcConfig.SaveConfig(); + } + + private void rdoDebugEnable_CheckedChanged(object sender, EventArgs e) + { + InternalDebug(true); + } + + private void rdoDebugDisable_CheckedChanged(object sender, EventArgs e) + { + InternalDebug(false); + } } } diff --git a/Tab/DutyForm.Designer.cs b/Tab/DutyForm.Designer.cs index 39e9c80..6724dc0 100644 --- a/Tab/DutyForm.Designer.cs +++ b/Tab/DutyForm.Designer.cs @@ -51,7 +51,7 @@ namespace DutyContent.Tab "", ""}, -1); System.Windows.Forms.ListViewItem listViewItem5 = new System.Windows.Forms.ListViewItem(new string[] { - "Southern Bozja", + "Bozja", "", "", ""}, -1); @@ -59,13 +59,12 @@ namespace DutyContent.Tab this.tabContent = new System.Windows.Forms.TabControl(); this.tabPageContent = new System.Windows.Forms.TabPage(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.chkShowDebug = new System.Windows.Forms.CheckBox(); this.rdoFatePreset4 = new System.Windows.Forms.RadioButton(); this.rdoFatePreset3 = new System.Windows.Forms.RadioButton(); this.rdoFatePreset2 = new System.Windows.Forms.RadioButton(); this.rdoFatePreset1 = new System.Windows.Forms.RadioButton(); this.treeFates = new System.Windows.Forms.TreeView(); - this.txtContentLog = new System.Windows.Forms.RichTextBox(); + this.lstContents = new DutyContent.ThirdParty.EXListView(); this.tabPageSetting = new System.Windows.Forms.TabPage(); this.panel4 = new System.Windows.Forms.Panel(); this.chkDiscowkTts = new System.Windows.Forms.CheckBox(); @@ -88,8 +87,6 @@ namespace DutyContent.Tab this.lblCurrentDataSet = new System.Windows.Forms.Label(); this.cboDataset = new System.Windows.Forms.ComboBox(); this.lblDataSet = new System.Windows.Forms.Label(); - this.btnLogFont = new System.Windows.Forms.Button(); - this.lblLogFont = new System.Windows.Forms.Label(); this.panel2 = new System.Windows.Forms.Panel(); this.btnSoundPlayFate = new System.Windows.Forms.Button(); this.btnSoundPlayInstance = new System.Windows.Forms.Button(); @@ -150,9 +147,10 @@ namespace DutyContent.Tab this.tabContent.Dock = System.Windows.Forms.DockStyle.Fill; this.tabContent.ImageList = this.ilTabContent; this.tabContent.Location = new System.Drawing.Point(0, 0); + this.tabContent.Margin = new System.Windows.Forms.Padding(4); this.tabContent.Name = "tabContent"; this.tabContent.SelectedIndex = 0; - this.tabContent.Size = new System.Drawing.Size(800, 542); + this.tabContent.Size = new System.Drawing.Size(804, 561); this.tabContent.TabIndex = 0; // // tabPageContent @@ -160,9 +158,10 @@ namespace DutyContent.Tab this.tabPageContent.Controls.Add(this.splitContainer1); this.tabPageContent.ImageIndex = 0; this.tabPageContent.Location = new System.Drawing.Point(4, 39); + this.tabPageContent.Margin = new System.Windows.Forms.Padding(4); this.tabPageContent.Name = "tabPageContent"; - this.tabPageContent.Padding = new System.Windows.Forms.Padding(3); - this.tabPageContent.Size = new System.Drawing.Size(792, 499); + this.tabPageContent.Padding = new System.Windows.Forms.Padding(4); + this.tabPageContent.Size = new System.Drawing.Size(796, 518); this.tabPageContent.TabIndex = 0; this.tabPageContent.Text = "301"; this.tabPageContent.UseVisualStyleBackColor = true; @@ -170,12 +169,12 @@ namespace DutyContent.Tab // splitContainer1 // this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer1.Location = new System.Drawing.Point(3, 3); + this.splitContainer1.Location = new System.Drawing.Point(4, 4); + this.splitContainer1.Margin = new System.Windows.Forms.Padding(4); this.splitContainer1.Name = "splitContainer1"; // // splitContainer1.Panel1 // - this.splitContainer1.Panel1.Controls.Add(this.chkShowDebug); this.splitContainer1.Panel1.Controls.Add(this.rdoFatePreset4); this.splitContainer1.Panel1.Controls.Add(this.rdoFatePreset3); this.splitContainer1.Panel1.Controls.Add(this.rdoFatePreset2); @@ -184,28 +183,20 @@ namespace DutyContent.Tab // // splitContainer1.Panel2 // - this.splitContainer1.Panel2.Controls.Add(this.txtContentLog); - this.splitContainer1.Size = new System.Drawing.Size(786, 493); - this.splitContainer1.SplitterDistance = 262; + this.splitContainer1.Panel2.Controls.Add(this.lstContents); + this.splitContainer1.Size = new System.Drawing.Size(788, 510); + this.splitContainer1.SplitterDistance = 240; + this.splitContainer1.SplitterWidth = 6; this.splitContainer1.TabIndex = 0; // - // chkShowDebug - // - this.chkShowDebug.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.chkShowDebug.AutoSize = true; - this.chkShowDebug.Location = new System.Drawing.Point(201, 7); - this.chkShowDebug.Name = "chkShowDebug"; - this.chkShowDebug.Size = new System.Drawing.Size(58, 17); - this.chkShowDebug.TabIndex = 5; - this.chkShowDebug.Text = "Debug"; - this.chkShowDebug.UseVisualStyleBackColor = true; - // // rdoFatePreset4 // this.rdoFatePreset4.AutoSize = true; - this.rdoFatePreset4.Location = new System.Drawing.Point(116, 6); + this.rdoFatePreset4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.rdoFatePreset4.Location = new System.Drawing.Point(125, 0); + this.rdoFatePreset4.Margin = new System.Windows.Forms.Padding(4); this.rdoFatePreset4.Name = "rdoFatePreset4"; - this.rdoFatePreset4.Size = new System.Drawing.Size(31, 17); + this.rdoFatePreset4.Size = new System.Drawing.Size(32, 19); this.rdoFatePreset4.TabIndex = 4; this.rdoFatePreset4.TabStop = true; this.rdoFatePreset4.Tag = "3"; @@ -216,9 +207,11 @@ namespace DutyContent.Tab // rdoFatePreset3 // this.rdoFatePreset3.AutoSize = true; - this.rdoFatePreset3.Location = new System.Drawing.Point(79, 6); + this.rdoFatePreset3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.rdoFatePreset3.Location = new System.Drawing.Point(85, 0); + this.rdoFatePreset3.Margin = new System.Windows.Forms.Padding(4); this.rdoFatePreset3.Name = "rdoFatePreset3"; - this.rdoFatePreset3.Size = new System.Drawing.Size(31, 17); + this.rdoFatePreset3.Size = new System.Drawing.Size(32, 19); this.rdoFatePreset3.TabIndex = 3; this.rdoFatePreset3.TabStop = true; this.rdoFatePreset3.Tag = "2"; @@ -229,9 +222,11 @@ namespace DutyContent.Tab // rdoFatePreset2 // this.rdoFatePreset2.AutoSize = true; - this.rdoFatePreset2.Location = new System.Drawing.Point(42, 6); + this.rdoFatePreset2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.rdoFatePreset2.Location = new System.Drawing.Point(45, 0); + this.rdoFatePreset2.Margin = new System.Windows.Forms.Padding(4); this.rdoFatePreset2.Name = "rdoFatePreset2"; - this.rdoFatePreset2.Size = new System.Drawing.Size(31, 17); + this.rdoFatePreset2.Size = new System.Drawing.Size(32, 19); this.rdoFatePreset2.TabIndex = 2; this.rdoFatePreset2.TabStop = true; this.rdoFatePreset2.Tag = "1"; @@ -243,9 +238,11 @@ namespace DutyContent.Tab // this.rdoFatePreset1.AutoSize = true; this.rdoFatePreset1.Checked = true; - this.rdoFatePreset1.Location = new System.Drawing.Point(5, 6); + this.rdoFatePreset1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.rdoFatePreset1.Location = new System.Drawing.Point(5, 0); + this.rdoFatePreset1.Margin = new System.Windows.Forms.Padding(4); this.rdoFatePreset1.Name = "rdoFatePreset1"; - this.rdoFatePreset1.Size = new System.Drawing.Size(31, 17); + this.rdoFatePreset1.Size = new System.Drawing.Size(32, 19); this.rdoFatePreset1.TabIndex = 1; this.rdoFatePreset1.TabStop = true; this.rdoFatePreset1.Tag = "0"; @@ -260,23 +257,27 @@ namespace DutyContent.Tab | System.Windows.Forms.AnchorStyles.Right))); this.treeFates.CheckBoxes = true; this.treeFates.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.treeFates.Location = new System.Drawing.Point(0, 29); + this.treeFates.Location = new System.Drawing.Point(0, 27); + this.treeFates.Margin = new System.Windows.Forms.Padding(4); this.treeFates.Name = "treeFates"; - this.treeFates.Size = new System.Drawing.Size(260, 464); + this.treeFates.Size = new System.Drawing.Size(235, 481); this.treeFates.TabIndex = 0; this.treeFates.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.TreeFates_AfterCheck); // - // txtContentLog + // lstContents // - this.txtContentLog.BackColor = System.Drawing.Color.AliceBlue; - this.txtContentLog.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtContentLog.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.txtContentLog.Location = new System.Drawing.Point(0, 0); - this.txtContentLog.Name = "txtContentLog"; - this.txtContentLog.ReadOnly = true; - this.txtContentLog.Size = new System.Drawing.Size(520, 493); - this.txtContentLog.TabIndex = 0; - this.txtContentLog.Text = ""; + this.lstContents.ControlPadding = 4; + this.lstContents.Dock = System.Windows.Forms.DockStyle.Fill; + this.lstContents.FullRowSelect = true; + this.lstContents.HideSelection = false; + this.lstContents.Location = new System.Drawing.Point(0, 0); + this.lstContents.Name = "lstContents"; + this.lstContents.OwnerDraw = true; + this.lstContents.Size = new System.Drawing.Size(542, 510); + this.lstContents.TabIndex = 0; + this.lstContents.UseCompatibleStateImageBehavior = false; + this.lstContents.View = System.Windows.Forms.View.Details; + this.lstContents.Resize += new System.EventHandler(this.LstContents_Resize); // // tabPageSetting // @@ -287,9 +288,10 @@ namespace DutyContent.Tab this.tabPageSetting.Controls.Add(this.panel1); this.tabPageSetting.ImageIndex = 1; this.tabPageSetting.Location = new System.Drawing.Point(4, 39); + this.tabPageSetting.Margin = new System.Windows.Forms.Padding(4); this.tabPageSetting.Name = "tabPageSetting"; - this.tabPageSetting.Padding = new System.Windows.Forms.Padding(3); - this.tabPageSetting.Size = new System.Drawing.Size(792, 499); + this.tabPageSetting.Padding = new System.Windows.Forms.Padding(4); + this.tabPageSetting.Size = new System.Drawing.Size(796, 518); this.tabPageSetting.TabIndex = 1; this.tabPageSetting.Text = "302"; this.tabPageSetting.UseVisualStyleBackColor = true; @@ -313,18 +315,20 @@ namespace DutyContent.Tab this.panel4.Controls.Add(this.lblLineToken); this.panel4.Controls.Add(this.txtLineToken); this.panel4.Controls.Add(this.chkUseNotifyLine); - this.panel4.Location = new System.Drawing.Point(6, 258); + this.panel4.Location = new System.Drawing.Point(0, 267); + this.panel4.Margin = new System.Windows.Forms.Padding(4); this.panel4.Name = "panel4"; - this.panel4.Size = new System.Drawing.Size(778, 196); + this.panel4.Size = new System.Drawing.Size(792, 228); this.panel4.TabIndex = 3; // // chkDiscowkTts // this.chkDiscowkTts.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.chkDiscowkTts.AutoSize = true; - this.chkDiscowkTts.Location = new System.Drawing.Point(547, 147); + this.chkDiscowkTts.Location = new System.Drawing.Point(543, 168); + this.chkDiscowkTts.Margin = new System.Windows.Forms.Padding(4); this.chkDiscowkTts.Name = "chkDiscowkTts"; - this.chkDiscowkTts.Size = new System.Drawing.Size(44, 17); + this.chkDiscowkTts.Size = new System.Drawing.Size(51, 22); this.chkDiscowkTts.TabIndex = 5; this.chkDiscowkTts.Text = "341"; this.chkDiscowkTts.UseVisualStyleBackColor = true; @@ -333,9 +337,10 @@ namespace DutyContent.Tab // lblDiscowkUrl // this.lblDiscowkUrl.AutoSize = true; - this.lblDiscowkUrl.Location = new System.Drawing.Point(23, 171); + this.lblDiscowkUrl.Location = new System.Drawing.Point(33, 194); + this.lblDiscowkUrl.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblDiscowkUrl.Name = "lblDiscowkUrl"; - this.lblDiscowkUrl.Size = new System.Drawing.Size(25, 13); + this.lblDiscowkUrl.Size = new System.Drawing.Size(32, 18); this.lblDiscowkUrl.TabIndex = 18; this.lblDiscowkUrl.Text = "339"; // @@ -343,9 +348,10 @@ namespace DutyContent.Tab // this.txtDiscowkUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.txtDiscowkUrl.Location = new System.Drawing.Point(108, 168); + this.txtDiscowkUrl.Location = new System.Drawing.Point(160, 194); + this.txtDiscowkUrl.Margin = new System.Windows.Forms.Padding(4); this.txtDiscowkUrl.Name = "txtDiscowkUrl"; - this.txtDiscowkUrl.Size = new System.Drawing.Size(483, 20); + this.txtDiscowkUrl.Size = new System.Drawing.Size(434, 24); this.txtDiscowkUrl.TabIndex = 17; this.txtDiscowkUrl.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtDiscowkUrl_KeyDown); // @@ -353,7 +359,8 @@ namespace DutyContent.Tab // this.chkUseNotifyDiscowk.AutoSize = true; this.chkUseNotifyDiscowk.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkUseNotifyDiscowk.Location = new System.Drawing.Point(3, 144); + this.chkUseNotifyDiscowk.Location = new System.Drawing.Point(4, 166); + this.chkUseNotifyDiscowk.Margin = new System.Windows.Forms.Padding(4); this.chkUseNotifyDiscowk.Name = "chkUseNotifyDiscowk"; this.chkUseNotifyDiscowk.Size = new System.Drawing.Size(58, 24); this.chkUseNotifyDiscowk.TabIndex = 16; @@ -364,9 +371,10 @@ namespace DutyContent.Tab // lblTelegramToken // this.lblTelegramToken.AutoSize = true; - this.lblTelegramToken.Location = new System.Drawing.Point(23, 118); + this.lblTelegramToken.Location = new System.Drawing.Point(33, 129); + this.lblTelegramToken.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblTelegramToken.Name = "lblTelegramToken"; - this.lblTelegramToken.Size = new System.Drawing.Size(25, 13); + this.lblTelegramToken.Size = new System.Drawing.Size(32, 18); this.lblTelegramToken.TabIndex = 15; this.lblTelegramToken.Text = "315"; // @@ -374,26 +382,29 @@ namespace DutyContent.Tab // this.txtTelegramToken.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.txtTelegramToken.Location = new System.Drawing.Point(108, 115); + this.txtTelegramToken.Location = new System.Drawing.Point(160, 126); + this.txtTelegramToken.Margin = new System.Windows.Forms.Padding(4); this.txtTelegramToken.Name = "txtTelegramToken"; - this.txtTelegramToken.Size = new System.Drawing.Size(483, 20); + this.txtTelegramToken.Size = new System.Drawing.Size(434, 24); this.txtTelegramToken.TabIndex = 14; this.txtTelegramToken.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtTelegramToken_KeyDown); // // lblTelegramId // this.lblTelegramId.AutoSize = true; - this.lblTelegramId.Location = new System.Drawing.Point(23, 92); + this.lblTelegramId.Location = new System.Drawing.Point(33, 97); + this.lblTelegramId.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblTelegramId.Name = "lblTelegramId"; - this.lblTelegramId.Size = new System.Drawing.Size(25, 13); + this.lblTelegramId.Size = new System.Drawing.Size(32, 18); this.lblTelegramId.TabIndex = 13; this.lblTelegramId.Text = "314"; // // txtTelegramId // - this.txtTelegramId.Location = new System.Drawing.Point(108, 89); + this.txtTelegramId.Location = new System.Drawing.Point(160, 94); + this.txtTelegramId.Margin = new System.Windows.Forms.Padding(4); this.txtTelegramId.Name = "txtTelegramId"; - this.txtTelegramId.Size = new System.Drawing.Size(196, 20); + this.txtTelegramId.Size = new System.Drawing.Size(173, 24); this.txtTelegramId.TabIndex = 12; this.txtTelegramId.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtTelegramId_KeyDown); // @@ -401,7 +412,8 @@ namespace DutyContent.Tab // this.chkUseNotifyTelegram.AutoSize = true; this.chkUseNotifyTelegram.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkUseNotifyTelegram.Location = new System.Drawing.Point(3, 59); + this.chkUseNotifyTelegram.Location = new System.Drawing.Point(4, 69); + this.chkUseNotifyTelegram.Margin = new System.Windows.Forms.Padding(4); this.chkUseNotifyTelegram.Name = "chkUseNotifyTelegram"; this.chkUseNotifyTelegram.Size = new System.Drawing.Size(58, 24); this.chkUseNotifyTelegram.TabIndex = 11; @@ -414,9 +426,10 @@ namespace DutyContent.Tab this.btnTestNotify.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnTestNotify.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; this.btnTestNotify.Enabled = false; - this.btnTestNotify.Location = new System.Drawing.Point(665, 137); + this.btnTestNotify.Location = new System.Drawing.Point(624, 129); + this.btnTestNotify.Margin = new System.Windows.Forms.Padding(4); this.btnTestNotify.Name = "btnTestNotify"; - this.btnTestNotify.Size = new System.Drawing.Size(108, 51); + this.btnTestNotify.Size = new System.Drawing.Size(162, 92); this.btnTestNotify.TabIndex = 4; this.btnTestNotify.Text = "340"; this.btnTestNotify.UseVisualStyleBackColor = true; @@ -426,9 +439,10 @@ namespace DutyContent.Tab // this.lblLineNotifyBotLink.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.lblLineNotifyBotLink.AutoSize = true; - this.lblLineNotifyBotLink.Location = new System.Drawing.Point(461, 13); + this.lblLineNotifyBotLink.Location = new System.Drawing.Point(618, 6); + this.lblLineNotifyBotLink.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblLineNotifyBotLink.Name = "lblLineNotifyBotLink"; - this.lblLineNotifyBotLink.Size = new System.Drawing.Size(127, 13); + this.lblLineNotifyBotLink.Size = new System.Drawing.Size(168, 18); this.lblLineNotifyBotLink.TabIndex = 10; this.lblLineNotifyBotLink.TabStop = true; this.lblLineNotifyBotLink.Text = "https://notify-bot.line.me/"; @@ -437,9 +451,10 @@ namespace DutyContent.Tab // lblLineToken // this.lblLineToken.AutoSize = true; - this.lblLineToken.Location = new System.Drawing.Point(22, 36); + this.lblLineToken.Location = new System.Drawing.Point(33, 32); + this.lblLineToken.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblLineToken.Name = "lblLineToken"; - this.lblLineToken.Size = new System.Drawing.Size(25, 13); + this.lblLineToken.Size = new System.Drawing.Size(32, 18); this.lblLineToken.TabIndex = 9; this.lblLineToken.Text = "312"; // @@ -447,9 +462,10 @@ namespace DutyContent.Tab // this.txtLineToken.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.txtLineToken.Location = new System.Drawing.Point(108, 33); + this.txtLineToken.Location = new System.Drawing.Point(160, 29); + this.txtLineToken.Margin = new System.Windows.Forms.Padding(4); this.txtLineToken.Name = "txtLineToken"; - this.txtLineToken.Size = new System.Drawing.Size(483, 20); + this.txtLineToken.Size = new System.Drawing.Size(434, 24); this.txtLineToken.TabIndex = 1; this.txtLineToken.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtLineToken_KeyDown); // @@ -457,7 +473,8 @@ namespace DutyContent.Tab // this.chkUseNotifyLine.AutoSize = true; this.chkUseNotifyLine.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkUseNotifyLine.Location = new System.Drawing.Point(3, 3); + this.chkUseNotifyLine.Location = new System.Drawing.Point(4, 4); + this.chkUseNotifyLine.Margin = new System.Windows.Forms.Padding(4); this.chkUseNotifyLine.Name = "chkUseNotifyLine"; this.chkUseNotifyLine.Size = new System.Drawing.Size(58, 24); this.chkUseNotifyLine.TabIndex = 0; @@ -475,20 +492,20 @@ namespace DutyContent.Tab this.panel3.Controls.Add(this.lblCurrentDataSet); this.panel3.Controls.Add(this.cboDataset); this.panel3.Controls.Add(this.lblDataSet); - this.panel3.Controls.Add(this.btnLogFont); - this.panel3.Controls.Add(this.lblLogFont); - this.panel3.Location = new System.Drawing.Point(6, 6); + this.panel3.Location = new System.Drawing.Point(0, 8); + this.panel3.Margin = new System.Windows.Forms.Padding(4); this.panel3.Name = "panel3"; - this.panel3.Size = new System.Drawing.Size(778, 83); + this.panel3.Size = new System.Drawing.Size(792, 77); this.panel3.TabIndex = 2; // // cboPacketset // this.cboPacketset.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cboPacketset.FormattingEnabled = true; - this.cboPacketset.Location = new System.Drawing.Point(110, 54); + this.cboPacketset.Location = new System.Drawing.Point(160, 42); + this.cboPacketset.Margin = new System.Windows.Forms.Padding(4); this.cboPacketset.Name = "cboPacketset"; - this.cboPacketset.Size = new System.Drawing.Size(243, 21); + this.cboPacketset.Size = new System.Drawing.Size(362, 26); this.cboPacketset.TabIndex = 13; this.cboPacketset.SelectedIndexChanged += new System.EventHandler(this.CboPacketset_SelectedIndexChanged); // @@ -496,7 +513,8 @@ namespace DutyContent.Tab // this.lblPacketSet.AutoSize = true; this.lblPacketSet.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblPacketSet.Location = new System.Drawing.Point(21, 52); + this.lblPacketSet.Location = new System.Drawing.Point(32, 44); + this.lblPacketSet.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblPacketSet.Name = "lblPacketSet"; this.lblPacketSet.Size = new System.Drawing.Size(39, 20); this.lblPacketSet.TabIndex = 12; @@ -504,20 +522,22 @@ namespace DutyContent.Tab // // lblCurrentDataSet // - this.lblCurrentDataSet.Location = new System.Drawing.Point(110, 30); + this.lblCurrentDataSet.AutoSize = true; + this.lblCurrentDataSet.Location = new System.Drawing.Point(418, 13); + this.lblCurrentDataSet.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblCurrentDataSet.Name = "lblCurrentDataSet"; - this.lblCurrentDataSet.Size = new System.Drawing.Size(243, 15); + this.lblCurrentDataSet.Size = new System.Drawing.Size(18, 18); this.lblCurrentDataSet.TabIndex = 3; this.lblCurrentDataSet.Text = "--"; - this.lblCurrentDataSet.TextAlign = System.Drawing.ContentAlignment.TopRight; // // cboDataset // this.cboDataset.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cboDataset.FormattingEnabled = true; - this.cboDataset.Location = new System.Drawing.Point(110, 6); + this.cboDataset.Location = new System.Drawing.Point(160, 8); + this.cboDataset.Margin = new System.Windows.Forms.Padding(4); this.cboDataset.Name = "cboDataset"; - this.cboDataset.Size = new System.Drawing.Size(243, 21); + this.cboDataset.Size = new System.Drawing.Size(250, 26); this.cboDataset.TabIndex = 11; this.cboDataset.SelectedIndexChanged += new System.EventHandler(this.CboDataset_SelectedIndexChanged); // @@ -525,32 +545,13 @@ namespace DutyContent.Tab // this.lblDataSet.AutoSize = true; this.lblDataSet.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblDataSet.Location = new System.Drawing.Point(21, 7); + this.lblDataSet.Location = new System.Drawing.Point(32, 10); + this.lblDataSet.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblDataSet.Name = "lblDataSet"; this.lblDataSet.Size = new System.Drawing.Size(39, 20); this.lblDataSet.TabIndex = 10; this.lblDataSet.Text = "304"; // - // btnLogFont - // - this.btnLogFont.Location = new System.Drawing.Point(427, 30); - this.btnLogFont.Name = "btnLogFont"; - this.btnLogFont.Size = new System.Drawing.Size(273, 45); - this.btnLogFont.TabIndex = 3; - this.btnLogFont.Text = "--"; - this.btnLogFont.UseVisualStyleBackColor = true; - this.btnLogFont.Click += new System.EventHandler(this.BtnLogFont_Click); - // - // lblLogFont - // - this.lblLogFont.AutoSize = true; - this.lblLogFont.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblLogFont.Location = new System.Drawing.Point(409, 7); - this.lblLogFont.Name = "lblLogFont"; - this.lblLogFont.Size = new System.Drawing.Size(39, 20); - this.lblLogFont.TabIndex = 9; - this.lblLogFont.Text = "305"; - // // panel2 // this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) @@ -565,9 +566,10 @@ namespace DutyContent.Tab this.panel2.Controls.Add(this.txtSoundInstance); this.panel2.Controls.Add(this.chkEnableSound); this.panel2.Controls.Add(this.lblSoundInstance); - this.panel2.Location = new System.Drawing.Point(6, 162); + this.panel2.Location = new System.Drawing.Point(0, 161); + this.panel2.Margin = new System.Windows.Forms.Padding(4); this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(778, 90); + this.panel2.Size = new System.Drawing.Size(792, 98); this.panel2.TabIndex = 1; // // btnSoundPlayFate @@ -575,7 +577,8 @@ namespace DutyContent.Tab this.btnSoundPlayFate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnSoundPlayFate.Enabled = false; this.btnSoundPlayFate.Image = global::DutyContent.Properties.Resources.pix_play; - this.btnSoundPlayFate.Location = new System.Drawing.Point(743, 55); + this.btnSoundPlayFate.Location = new System.Drawing.Point(756, 62); + this.btnSoundPlayFate.Margin = new System.Windows.Forms.Padding(4); this.btnSoundPlayFate.Name = "btnSoundPlayFate"; this.btnSoundPlayFate.Size = new System.Drawing.Size(30, 30); this.btnSoundPlayFate.TabIndex = 8; @@ -587,7 +590,8 @@ namespace DutyContent.Tab this.btnSoundPlayInstance.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnSoundPlayInstance.Enabled = false; this.btnSoundPlayInstance.Image = global::DutyContent.Properties.Resources.pix_play; - this.btnSoundPlayInstance.Location = new System.Drawing.Point(743, 24); + this.btnSoundPlayInstance.Location = new System.Drawing.Point(756, 24); + this.btnSoundPlayInstance.Margin = new System.Windows.Forms.Padding(4); this.btnSoundPlayInstance.Name = "btnSoundPlayInstance"; this.btnSoundPlayInstance.Size = new System.Drawing.Size(30, 30); this.btnSoundPlayInstance.TabIndex = 7; @@ -599,7 +603,8 @@ namespace DutyContent.Tab this.btnSoundFindFate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnSoundFindFate.Enabled = false; this.btnSoundFindFate.Image = global::DutyContent.Properties.Resources.pix_magnify; - this.btnSoundFindFate.Location = new System.Drawing.Point(709, 55); + this.btnSoundFindFate.Location = new System.Drawing.Point(718, 62); + this.btnSoundFindFate.Margin = new System.Windows.Forms.Padding(4); this.btnSoundFindFate.Name = "btnSoundFindFate"; this.btnSoundFindFate.Size = new System.Drawing.Size(30, 30); this.btnSoundFindFate.TabIndex = 6; @@ -611,7 +616,8 @@ namespace DutyContent.Tab this.btnSoundFindInstance.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnSoundFindInstance.Enabled = false; this.btnSoundFindInstance.Image = global::DutyContent.Properties.Resources.pix_magnify; - this.btnSoundFindInstance.Location = new System.Drawing.Point(709, 24); + this.btnSoundFindInstance.Location = new System.Drawing.Point(718, 24); + this.btnSoundFindInstance.Margin = new System.Windows.Forms.Padding(4); this.btnSoundFindInstance.Name = "btnSoundFindInstance"; this.btnSoundFindInstance.Size = new System.Drawing.Size(30, 30); this.btnSoundFindInstance.TabIndex = 2; @@ -621,9 +627,10 @@ namespace DutyContent.Tab // lblSoundFate // this.lblSoundFate.AutoSize = true; - this.lblSoundFate.Location = new System.Drawing.Point(22, 64); + this.lblSoundFate.Location = new System.Drawing.Point(33, 65); + this.lblSoundFate.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblSoundFate.Name = "lblSoundFate"; - this.lblSoundFate.Size = new System.Drawing.Size(25, 13); + this.lblSoundFate.Size = new System.Drawing.Size(32, 18); this.lblSoundFate.TabIndex = 3; this.lblSoundFate.Text = "310"; // @@ -632,10 +639,11 @@ namespace DutyContent.Tab this.txtSoundFate.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.txtSoundFate.Enabled = false; - this.txtSoundFate.Location = new System.Drawing.Point(110, 61); + this.txtSoundFate.Location = new System.Drawing.Point(160, 62); + this.txtSoundFate.Margin = new System.Windows.Forms.Padding(4); this.txtSoundFate.Name = "txtSoundFate"; this.txtSoundFate.ReadOnly = true; - this.txtSoundFate.Size = new System.Drawing.Size(593, 20); + this.txtSoundFate.Size = new System.Drawing.Size(550, 24); this.txtSoundFate.TabIndex = 4; // // txtSoundInstance @@ -643,17 +651,19 @@ namespace DutyContent.Tab this.txtSoundInstance.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.txtSoundInstance.Enabled = false; - this.txtSoundInstance.Location = new System.Drawing.Point(110, 30); + this.txtSoundInstance.Location = new System.Drawing.Point(160, 30); + this.txtSoundInstance.Margin = new System.Windows.Forms.Padding(4); this.txtSoundInstance.Name = "txtSoundInstance"; this.txtSoundInstance.ReadOnly = true; - this.txtSoundInstance.Size = new System.Drawing.Size(593, 20); + this.txtSoundInstance.Size = new System.Drawing.Size(550, 24); this.txtSoundInstance.TabIndex = 5; // // chkEnableSound // this.chkEnableSound.AutoSize = true; this.chkEnableSound.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkEnableSound.Location = new System.Drawing.Point(5, 3); + this.chkEnableSound.Location = new System.Drawing.Point(8, 4); + this.chkEnableSound.Margin = new System.Windows.Forms.Padding(4); this.chkEnableSound.Name = "chkEnableSound"; this.chkEnableSound.Size = new System.Drawing.Size(58, 24); this.chkEnableSound.TabIndex = 4; @@ -664,9 +674,10 @@ namespace DutyContent.Tab // lblSoundInstance // this.lblSoundInstance.AutoSize = true; - this.lblSoundInstance.Location = new System.Drawing.Point(22, 33); + this.lblSoundInstance.Location = new System.Drawing.Point(33, 33); + this.lblSoundInstance.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblSoundInstance.Name = "lblSoundInstance"; - this.lblSoundInstance.Size = new System.Drawing.Size(25, 13); + this.lblSoundInstance.Size = new System.Drawing.Size(32, 18); this.lblSoundInstance.TabIndex = 2; this.lblSoundInstance.Text = "309"; // @@ -680,30 +691,34 @@ namespace DutyContent.Tab this.panel1.Controls.Add(this.btnOverlayDimming); this.panel1.Controls.Add(this.lblOverlayTransparent); this.panel1.Controls.Add(this.chkEnableOverlay); - this.panel1.Location = new System.Drawing.Point(6, 95); + this.panel1.Location = new System.Drawing.Point(0, 93); + this.panel1.Margin = new System.Windows.Forms.Padding(4); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(778, 61); + this.panel1.Size = new System.Drawing.Size(792, 60); this.panel1.TabIndex = 0; // // chkOverlayClickThru // this.chkOverlayClickThru.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.chkOverlayClickThru.AutoSize = true; - this.chkOverlayClickThru.Location = new System.Drawing.Point(672, 8); + this.chkOverlayClickThru.Location = new System.Drawing.Point(681, 6); + this.chkOverlayClickThru.Margin = new System.Windows.Forms.Padding(4); this.chkOverlayClickThru.Name = "chkOverlayClickThru"; - this.chkOverlayClickThru.Size = new System.Drawing.Size(44, 17); + this.chkOverlayClickThru.Size = new System.Drawing.Size(51, 22); this.chkOverlayClickThru.TabIndex = 4; this.chkOverlayClickThru.Text = "104"; + this.chkOverlayClickThru.TextAlign = System.Drawing.ContentAlignment.MiddleRight; this.chkOverlayClickThru.UseVisualStyleBackColor = true; this.chkOverlayClickThru.CheckedChanged += new System.EventHandler(this.ChkOverlayClickThru_CheckedChanged); // // progbOverlayTransparent // this.progbOverlayTransparent.Enabled = false; - this.progbOverlayTransparent.Location = new System.Drawing.Point(108, 30); + this.progbOverlayTransparent.Location = new System.Drawing.Point(160, 18); + this.progbOverlayTransparent.Margin = new System.Windows.Forms.Padding(4); this.progbOverlayTransparent.Maximum = 255; this.progbOverlayTransparent.Name = "progbOverlayTransparent"; - this.progbOverlayTransparent.Size = new System.Drawing.Size(243, 23); + this.progbOverlayTransparent.Size = new System.Drawing.Size(364, 32); this.progbOverlayTransparent.TabIndex = 1; this.progbOverlayTransparent.Click += new System.EventHandler(this.ProgbOverlayTransparent_Click); // @@ -713,9 +728,10 @@ namespace DutyContent.Tab this.btnOverlayDimming.BackgroundImage = global::DutyContent.Properties.Resources.pix_annotation; this.btnOverlayDimming.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; this.btnOverlayDimming.Enabled = false; - this.btnOverlayDimming.Location = new System.Drawing.Point(722, 3); + this.btnOverlayDimming.Location = new System.Drawing.Point(740, 4); + this.btnOverlayDimming.Margin = new System.Windows.Forms.Padding(4); this.btnOverlayDimming.Name = "btnOverlayDimming"; - this.btnOverlayDimming.Size = new System.Drawing.Size(51, 51); + this.btnOverlayDimming.Size = new System.Drawing.Size(46, 46); this.btnOverlayDimming.TabIndex = 3; this.btnOverlayDimming.UseVisualStyleBackColor = true; this.btnOverlayDimming.Click += new System.EventHandler(this.BtnOverlayDimming_Click); @@ -723,9 +739,11 @@ namespace DutyContent.Tab // lblOverlayTransparent // this.lblOverlayTransparent.AutoSize = true; - this.lblOverlayTransparent.Location = new System.Drawing.Point(23, 35); + this.lblOverlayTransparent.Enabled = false; + this.lblOverlayTransparent.Location = new System.Drawing.Point(33, 30); + this.lblOverlayTransparent.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblOverlayTransparent.Name = "lblOverlayTransparent"; - this.lblOverlayTransparent.Size = new System.Drawing.Size(25, 13); + this.lblOverlayTransparent.Size = new System.Drawing.Size(32, 18); this.lblOverlayTransparent.TabIndex = 2; this.lblOverlayTransparent.Text = "307"; // @@ -733,7 +751,8 @@ namespace DutyContent.Tab // this.chkEnableOverlay.AutoSize = true; this.chkEnableOverlay.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkEnableOverlay.Location = new System.Drawing.Point(3, 3); + this.chkEnableOverlay.Location = new System.Drawing.Point(4, 4); + this.chkEnableOverlay.Margin = new System.Windows.Forms.Padding(4); this.chkEnableOverlay.Name = "chkEnableOverlay"; this.chkEnableOverlay.Size = new System.Drawing.Size(58, 24); this.chkEnableOverlay.TabIndex = 0; @@ -747,9 +766,10 @@ namespace DutyContent.Tab this.tabPagePacket.Controls.Add(this.panel5); this.tabPagePacket.ImageIndex = 2; this.tabPagePacket.Location = new System.Drawing.Point(4, 39); + this.tabPagePacket.Margin = new System.Windows.Forms.Padding(4); this.tabPagePacket.Name = "tabPagePacket"; - this.tabPagePacket.Padding = new System.Windows.Forms.Padding(3); - this.tabPagePacket.Size = new System.Drawing.Size(792, 499); + this.tabPagePacket.Padding = new System.Windows.Forms.Padding(4); + this.tabPagePacket.Size = new System.Drawing.Size(796, 518); this.tabPagePacket.TabIndex = 2; this.tabPagePacket.Text = "337"; this.tabPagePacket.UseVisualStyleBackColor = true; @@ -769,17 +789,19 @@ namespace DutyContent.Tab this.panel5.Controls.Add(this.txtPacketInfo); this.panel5.Controls.Add(this.lstPacketInfo); this.panel5.Controls.Add(this.lblPacketFinder); - this.panel5.Location = new System.Drawing.Point(6, 6); + this.panel5.Location = new System.Drawing.Point(0, 0); + this.panel5.Margin = new System.Windows.Forms.Padding(4); this.panel5.Name = "panel5"; - this.panel5.Size = new System.Drawing.Size(780, 261); + this.panel5.Size = new System.Drawing.Size(792, 361); this.panel5.TabIndex = 0; // // lblPacketVersion // this.lblPacketVersion.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.lblPacketVersion.Location = new System.Drawing.Point(625, 42); + this.lblPacketVersion.Location = new System.Drawing.Point(561, 58); + this.lblPacketVersion.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblPacketVersion.Name = "lblPacketVersion"; - this.lblPacketVersion.Size = new System.Drawing.Size(150, 15); + this.lblPacketVersion.Size = new System.Drawing.Size(225, 21); this.lblPacketVersion.TabIndex = 9; this.lblPacketVersion.Text = "--"; this.lblPacketVersion.TextAlign = System.Drawing.ContentAlignment.TopRight; @@ -789,17 +811,19 @@ namespace DutyContent.Tab this.txtPacketDescription.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.txtPacketDescription.Enabled = false; - this.txtPacketDescription.Location = new System.Drawing.Point(336, 58); + this.txtPacketDescription.Location = new System.Drawing.Point(340, 80); + this.txtPacketDescription.Margin = new System.Windows.Forms.Padding(4); this.txtPacketDescription.Name = "txtPacketDescription"; - this.txtPacketDescription.Size = new System.Drawing.Size(439, 20); + this.txtPacketDescription.Size = new System.Drawing.Size(443, 24); this.txtPacketDescription.TabIndex = 8; // // lblPacketDesc // this.lblPacketDesc.AutoSize = true; - this.lblPacketDesc.Location = new System.Drawing.Point(333, 42); + this.lblPacketDesc.Location = new System.Drawing.Point(340, 61); + this.lblPacketDesc.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblPacketDesc.Name = "lblPacketDesc"; - this.lblPacketDesc.Size = new System.Drawing.Size(25, 13); + this.lblPacketDesc.Size = new System.Drawing.Size(32, 18); this.lblPacketDesc.TabIndex = 7; this.lblPacketDesc.Text = "317"; // @@ -807,9 +831,10 @@ namespace DutyContent.Tab // this.btnPacketApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnPacketApply.Enabled = false; - this.btnPacketApply.Location = new System.Drawing.Point(652, 3); + this.btnPacketApply.Location = new System.Drawing.Point(601, 4); + this.btnPacketApply.Margin = new System.Windows.Forms.Padding(4); this.btnPacketApply.Name = "btnPacketApply"; - this.btnPacketApply.Size = new System.Drawing.Size(123, 30); + this.btnPacketApply.Size = new System.Drawing.Size(184, 42); this.btnPacketApply.TabIndex = 6; this.btnPacketApply.Text = "10009"; this.btnPacketApply.UseVisualStyleBackColor = true; @@ -819,9 +844,10 @@ namespace DutyContent.Tab // btnPacketStart // this.btnPacketStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnPacketStart.Location = new System.Drawing.Point(523, 3); + this.btnPacketStart.Location = new System.Drawing.Point(407, 4); + this.btnPacketStart.Margin = new System.Windows.Forms.Padding(4); this.btnPacketStart.Name = "btnPacketStart"; - this.btnPacketStart.Size = new System.Drawing.Size(123, 30); + this.btnPacketStart.Size = new System.Drawing.Size(184, 42); this.btnPacketStart.TabIndex = 5; this.btnPacketStart.Text = "10007"; this.btnPacketStart.UseVisualStyleBackColor = true; @@ -841,10 +867,11 @@ namespace DutyContent.Tab this.lstBozjaInfo.GridLines = true; this.lstBozjaInfo.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; this.lstBozjaInfo.HideSelection = false; - this.lstBozjaInfo.Location = new System.Drawing.Point(333, 107); + this.lstBozjaInfo.Location = new System.Drawing.Point(340, 148); + this.lstBozjaInfo.Margin = new System.Windows.Forms.Padding(4); this.lstBozjaInfo.MultiSelect = false; this.lstBozjaInfo.Name = "lstBozjaInfo"; - this.lstBozjaInfo.Size = new System.Drawing.Size(442, 148); + this.lstBozjaInfo.Size = new System.Drawing.Size(444, 203); this.lstBozjaInfo.TabIndex = 4; this.lstBozjaInfo.UseCompatibleStateImageBehavior = false; this.lstBozjaInfo.View = System.Windows.Forms.View.Details; @@ -854,7 +881,7 @@ namespace DutyContent.Tab // columnHeader5 // this.columnHeader5.Text = "Name"; - this.columnHeader5.Width = 233; + this.columnHeader5.Width = 180; // // columnHeader6 // @@ -864,19 +891,20 @@ namespace DutyContent.Tab // columnHeader7 // this.columnHeader7.Text = "Member"; - this.columnHeader7.Width = 55; + this.columnHeader7.Width = 72; // // columnHeader8 // this.columnHeader8.Text = "Progress"; - this.columnHeader8.Width = 56; + this.columnHeader8.Width = 73; // // lblPacketBozja // this.lblPacketBozja.AutoSize = true; - this.lblPacketBozja.Location = new System.Drawing.Point(333, 91); + this.lblPacketBozja.Location = new System.Drawing.Point(340, 126); + this.lblPacketBozja.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblPacketBozja.Name = "lblPacketBozja"; - this.lblPacketBozja.Size = new System.Drawing.Size(25, 13); + this.lblPacketBozja.Size = new System.Drawing.Size(32, 18); this.lblPacketBozja.TabIndex = 3; this.lblPacketBozja.Text = "318"; // @@ -885,11 +913,12 @@ namespace DutyContent.Tab this.txtPacketInfo.BackColor = System.Drawing.SystemColors.Window; this.txtPacketInfo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.txtPacketInfo.Enabled = false; - this.txtPacketInfo.Location = new System.Drawing.Point(3, 166); + this.txtPacketInfo.Location = new System.Drawing.Point(4, 206); + this.txtPacketInfo.Margin = new System.Windows.Forms.Padding(4); this.txtPacketInfo.Multiline = true; this.txtPacketInfo.Name = "txtPacketInfo"; this.txtPacketInfo.ReadOnly = true; - this.txtPacketInfo.Size = new System.Drawing.Size(324, 89); + this.txtPacketInfo.Size = new System.Drawing.Size(328, 146); this.txtPacketInfo.TabIndex = 2; // // lstPacketInfo @@ -910,10 +939,11 @@ namespace DutyContent.Tab listViewItem3, listViewItem4, listViewItem5}); - this.lstPacketInfo.Location = new System.Drawing.Point(3, 42); + this.lstPacketInfo.Location = new System.Drawing.Point(4, 58); + this.lstPacketInfo.Margin = new System.Windows.Forms.Padding(4); this.lstPacketInfo.MultiSelect = false; this.lstPacketInfo.Name = "lstPacketInfo"; - this.lstPacketInfo.Size = new System.Drawing.Size(324, 118); + this.lstPacketInfo.Size = new System.Drawing.Size(328, 140); this.lstPacketInfo.TabIndex = 1; this.lstPacketInfo.UseCompatibleStateImageBehavior = false; this.lstPacketInfo.View = System.Windows.Forms.View.Details; @@ -923,7 +953,7 @@ namespace DutyContent.Tab // columnHeader1 // this.columnHeader1.Text = "Function"; - this.columnHeader1.Width = 100; + this.columnHeader1.Width = 101; // // columnHeader2 // @@ -944,7 +974,8 @@ namespace DutyContent.Tab // this.lblPacketFinder.AutoSize = true; this.lblPacketFinder.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblPacketFinder.Location = new System.Drawing.Point(3, -1); + this.lblPacketFinder.Location = new System.Drawing.Point(4, -1); + this.lblPacketFinder.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblPacketFinder.Name = "lblPacketFinder"; this.lblPacketFinder.Size = new System.Drawing.Size(43, 24); this.lblPacketFinder.TabIndex = 0; @@ -961,11 +992,14 @@ namespace DutyContent.Tab // // DutyForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScroll = true; - this.ClientSize = new System.Drawing.Size(800, 542); + this.ClientSize = new System.Drawing.Size(804, 561); this.Controls.Add(this.tabContent); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(4); + this.MinimumSize = new System.Drawing.Size(820, 39); this.Name = "DutyForm"; this.Text = "Duty"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DutyTabForm_FormClosing); @@ -1001,7 +1035,6 @@ namespace DutyContent.Tab private System.Windows.Forms.ImageList ilTabContent; private System.Windows.Forms.SplitContainer splitContainer1; private System.Windows.Forms.TreeView treeFates; - private System.Windows.Forms.RichTextBox txtContentLog; private System.Windows.Forms.RadioButton rdoFatePreset4; private System.Windows.Forms.RadioButton rdoFatePreset3; private System.Windows.Forms.RadioButton rdoFatePreset2; @@ -1022,8 +1055,6 @@ namespace DutyContent.Tab private System.Windows.Forms.Button btnSoundFindFate; private System.Windows.Forms.Button btnSoundFindInstance; private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.Button btnLogFont; - private System.Windows.Forms.Label lblLogFont; private System.Windows.Forms.ComboBox cboDataset; private System.Windows.Forms.Label lblDataSet; private System.Windows.Forms.Label lblCurrentDataSet; @@ -1057,7 +1088,6 @@ namespace DutyContent.Tab private System.Windows.Forms.Label lblPacketDesc; private System.Windows.Forms.ColumnHeader columnHeader8; private System.Windows.Forms.CheckBox chkOverlayClickThru; - private System.Windows.Forms.CheckBox chkShowDebug; private System.Windows.Forms.ComboBox cboPacketset; private System.Windows.Forms.Label lblPacketSet; private System.Windows.Forms.Label lblPacketVersion; @@ -1065,5 +1095,6 @@ namespace DutyContent.Tab private System.Windows.Forms.TextBox txtDiscowkUrl; private System.Windows.Forms.CheckBox chkUseNotifyDiscowk; private System.Windows.Forms.CheckBox chkDiscowkTts; + private ThirdParty.EXListView lstContents; } } \ No newline at end of file diff --git a/Tab/DutyForm.cs b/Tab/DutyForm.cs index c5a4560..8070815 100644 --- a/Tab/DutyForm.cs +++ b/Tab/DutyForm.cs @@ -33,6 +33,11 @@ namespace DutyContent.Tab // private Overlay.DutyOvForm _overlay; + // + private object _lock_contents = new object(); + private ImageList _ilCategory; + + // public DutyForm() { _self = this; @@ -40,6 +45,17 @@ namespace DutyContent.Tab InitializeComponent(); _overlay = new Overlay.DutyOvForm(); + + // + ImageList ildmy = new ImageList() { ImageSize = new Size(1, 40) }; + lstContents.SmallImageList = ildmy; + + lstContents.MySortBrush = SystemBrushes.ControlLight; + lstContents.MyHighlightBrush = Brushes.LightGoldenrodYellow; + lstContents.GridLines = true; + lstContents.ControlPadding = 1; + + ThirdParty.WinFormSupp.DoubleBuffered(lstContents, true); } private void DutyTabForm_FormClosing(object sender, FormClosingEventArgs e) @@ -56,8 +72,6 @@ namespace DutyContent.Tab RefreshDatasetList(); RefreshPacketList(); - btnLogFont.Text = $"{DcConfig.Duty.LogFontFamily}, {DcConfig.Duty.LogFontSize}"; - // chkEnableOverlay.Checked = DcConfig.Duty.EnableOverlay; @@ -66,7 +80,7 @@ namespace DutyContent.Tab chkOverlayClickThru.Checked = DcConfig.Duty.OverlayClickThru; // - _overlay.SetText(MesgLog.Text(99, DcConfig.PluginVersion.ToString())); + _overlay.SetText(Locale.Text(99, DcConfig.PluginVersion.ToString())); _overlay.Location = DcConfig.Duty.OverlayLocation; if (DcConfig.Duty.EnableOverlay) @@ -139,56 +153,120 @@ namespace DutyContent.Tab public void UpdateUiLocale() { - tabPageContent.Text = MesgLog.Text(301); - tabPageSetting.Text = MesgLog.Text(302); - tabPagePacket.Text = MesgLog.Text(337); + tabPageContent.Text = Locale.Text(301); + tabPageSetting.Text = Locale.Text(302); + tabPagePacket.Text = Locale.Text(337); - lblDataSet.Text = MesgLog.Text(304); - lblPacketSet.Text = MesgLog.Text(336); - lblLogFont.Text = MesgLog.Text(305); + lblDataSet.Text = Locale.Text(304); + lblPacketSet.Text = Locale.Text(336); - chkEnableOverlay.Text = MesgLog.Text(306); - lblOverlayTransparent.Text = MesgLog.Text(307); - chkOverlayClickThru.Text = MesgLog.Text(104); + chkEnableOverlay.Text = Locale.Text(306); + lblOverlayTransparent.Text = Locale.Text(307); + chkOverlayClickThru.Text = Locale.Text(104); - chkEnableSound.Text = MesgLog.Text(308); - lblSoundInstance.Text = MesgLog.Text(309); - lblSoundFate.Text = MesgLog.Text(310); + chkEnableSound.Text = Locale.Text(308); + lblSoundInstance.Text = Locale.Text(309); + lblSoundFate.Text = Locale.Text(310); - chkUseNotifyLine.Text = MesgLog.Text(311); - lblLineToken.Text = MesgLog.Text(312); + chkUseNotifyLine.Text = Locale.Text(311); + lblLineToken.Text = Locale.Text(312); - chkUseNotifyTelegram.Text = MesgLog.Text(313); - lblTelegramId.Text = MesgLog.Text(314); - lblTelegramToken.Text = MesgLog.Text(315); + chkUseNotifyTelegram.Text = Locale.Text(313); + lblTelegramId.Text = Locale.Text(314); + lblTelegramToken.Text = Locale.Text(315); - chkUseNotifyDiscowk.Text = MesgLog.Text(338); - chkDiscowkTts.Text = MesgLog.Text(341); - lblDiscowkUrl.Text = MesgLog.Text(339); + chkUseNotifyDiscowk.Text = Locale.Text(338); + chkDiscowkTts.Text = Locale.Text(341); + lblDiscowkUrl.Text = Locale.Text(339); - btnTestNotify.Text = MesgLog.Text(340); + btnTestNotify.Text = Locale.Text(340); - lblPacketFinder.Text = MesgLog.Text(316); - lblPacketDesc.Text = MesgLog.Text(317); - lblPacketBozja.Text = MesgLog.Text(318); + lblPacketFinder.Text = Locale.Text(316); + lblPacketDesc.Text = Locale.Text(317); + lblPacketBozja.Text = Locale.Text(318); - lstPacketInfo.Columns[0].Text = MesgLog.Text(319); - lstPacketInfo.Columns[1].Text = MesgLog.Text(320); - lstPacketInfo.Columns[2].Text = MesgLog.Text(321); - lstPacketInfo.Columns[3].Text = MesgLog.Text(322); + lstPacketInfo.Columns[0].Text = Locale.Text(319); + lstPacketInfo.Columns[1].Text = Locale.Text(320); + lstPacketInfo.Columns[2].Text = Locale.Text(321); + lstPacketInfo.Columns[3].Text = Locale.Text(322); - lstBozjaInfo.Columns[0].Text = MesgLog.Text(323); - lstBozjaInfo.Columns[1].Text = MesgLog.Text(324); - lstBozjaInfo.Columns[2].Text = MesgLog.Text(325); - lstBozjaInfo.Columns[3].Text = MesgLog.Text(326); + lstBozjaInfo.Columns[0].Text = Locale.Text(323); + lstBozjaInfo.Columns[1].Text = Locale.Text(324); + lstBozjaInfo.Columns[2].Text = Locale.Text(325); + lstBozjaInfo.Columns[3].Text = Locale.Text(326); - btnPacketStart.Text = MesgLog.Text(10007); - btnPacketApply.Text = MesgLog.Text(10009); + btnPacketStart.Text = Locale.Text(10007); + btnPacketApply.Text = Locale.Text(10009); - // - var logfont = new Font(DcConfig.Duty.LogFontFamily, DcConfig.Duty.LogFontSize, FontStyle.Regular); - txtContentLog.Font = logfont; - btnLogFont.Font = logfont; + // content reset + lock (_lock_contents) + { + lstContents.Items.Clear(); + lstContents.Columns.Clear(); + + Image im_r = Properties.Resources.pix_rdrt_red; + Image im_g = Properties.Resources.pix_rdrt_green; + Image im_p = Properties.Resources.pix_rdrt_puple; + Image im_b = Properties.Resources.pix_rdrt_bline; + + _ilCategory = new ImageList() + { + ColorDepth = ColorDepth.Depth32Bit, + ImageSize = new Size(96, 32), + }; + _ilCategory.Images.Add(CreateCategoryImage(im_b, Locale.Text(27), Brushes.Black)); // none + _ilCategory.Images.Add(CreateCategoryImage(im_g, Locale.Text(21))); // roulette + _ilCategory.Images.Add(CreateCategoryImage(im_g, Locale.Text(22))); // instance + _ilCategory.Images.Add(CreateCategoryImage(im_r, Locale.Text(23))); // FATE + _ilCategory.Images.Add(CreateCategoryImage(im_r, Locale.Text(24))); // skirmish + _ilCategory.Images.Add(CreateCategoryImage(im_p, Locale.Text(25))); // CE + _ilCategory.Images.Add(CreateCategoryImage(im_p, Locale.Text(38))); // Match + _ilCategory.Images.Add(CreateCategoryImage(im_g, Locale.Text(39))); // Entry + + ThirdParty.EXComboBox excbCat = new ThirdParty.EXComboBox(); + excbCat.DropDownStyle = ComboBoxStyle.DropDownList; + excbCat.MyHighlightBrush = Brushes.Goldenrod; + excbCat.ItemHeight = 38; + excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[0], "0")); + excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[1], "1")); + excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[2], "2")); + excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[3], "3")); + excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[4], "4")); + excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[5], "5")); + excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[6], "6")); + excbCat.Items.Add(new ThirdParty.EXComboBox.EXImageItem(_ilCategory.Images[7], "7")); + + lstContents.Columns.Add(new ThirdParty.EXColumnHeader("ID", 50)); + lstContents.Columns.Add(new ThirdParty.EXColumnHeader("Type", 100)); + lstContents.Columns.Add(new ThirdParty.EXColumnHeader("%", 40)); + lstContents.Columns.Add(new ThirdParty.EXColumnHeader("Name", 300)); + + lstContents.BeginUpdate(); + + ThirdParty.EXListViewItem li = new ThirdParty.EXListViewItem(""); + li.SubItems.Add(new ThirdParty.EXImageListViewSubItem(_ilCategory.Images[0], "")); + li.SubItems.Add(""); + li.SubItems.Add(Locale.Text(27)); + lstContents.Items.Add(li); + + lstContents.EndUpdate(); + } + } + + private Image CreateCategoryImage(Image img, string value, Brush brush = null) + { + Bitmap bmp = new Bitmap(img); + RectangleF rt = new RectangleF(0.0f, 7.0f, 96.0f, 16.0f); + StringFormat fmt = new StringFormat() { Alignment = StringAlignment.Center }; + Font fnt = new Font(Font.FontFamily, 14.0f, FontStyle.Regular, GraphicsUnit.Pixel); + + if (brush == null) + brush = Brushes.White; + + using (var g = Graphics.FromImage(bmp)) + g.DrawString(value, fnt, brush, rt, fmt); + + return bmp; } public void PacketHandler(string pid, byte[] message) @@ -202,7 +280,7 @@ namespace DutyContent.Tab opcode != DcConfig.Packet.OpDuty && opcode != DcConfig.Packet.OpMatch && opcode != DcConfig.Packet.OpInstance && - opcode != DcConfig.Packet.OpSouthernBozja) + opcode != DcConfig.Packet.OpCe) return; var data = message.Skip(32).ToArray(); @@ -210,18 +288,15 @@ namespace DutyContent.Tab // FATE if (opcode == DcConfig.Packet.OpFate) { - // 53=begin, 54=end, 62=progress - if (data[0] == 53) - { - var fcode = BitConverter.ToUInt16(data, 4); + var fcode = BitConverter.ToUInt16(data, 4); - if (fcode > 100) + if (fcode > 100) + { + // 53=begin, 54=end, 62=progress + if (data[0] == 53) { var fate = DcContent.GetFate(fcode); - if (_stq_type != DcContent.SaveTheQueenType.No || IsSkirmishFate(fcode)) - LogSkirmish(10001, fate.Name); - else - LogFate(10001, fate.Name); + TraceFate(fcode, true, fate, 0); if (DcConfig.Duty.Fates[DcConfig.Duty.ActiveFate].Selected.Contains(fcode)) { @@ -232,18 +307,27 @@ namespace DutyContent.Tab _last_fate = fcode; } - } - else if (chkShowDebug.Checked && data[0] == 62 && data[8] > 0) // more than 0% - { - var fcode = BitConverter.ToUInt16(data, 4); - - if (fcode > 100) + else if (data[0] == 62 && data[8] > 0) // more than 0% { var fate = DcContent.TryFate(fcode); - if (fate == null) - LogDebug("unknown fate {0}% \"{1}\"", data[8], fcode); - _last_fate = fcode; + if (fate != null) + TraceFate(fcode, false, fate, data[8]); + else + { + if (DcConfig.DebugEnable) + { + WriteLog(Color.Magenta, 37, 12, fcode); + _last_fate = fcode; + } + } + } + else if (data[0] == 54) + { + var fate = DcContent.TryFate(fcode); + + if (fate != null) + TraceFate(fcode, false, fate); } } } @@ -256,11 +340,12 @@ namespace DutyContent.Tab if (rcode != 0) { var roulette = DcContent.GetRoulette(rcode); - LogRoulette(10002, roulette.Name); + TraceEntryRoulette(roulette); _overlay.PlayQueue(roulette.Name); } else { + // TODO: is this working? var insts = new List(); for (var i = 0; i < 5; i++) { @@ -271,12 +356,13 @@ namespace DutyContent.Tab if (insts.Any()) { - LogInstance(10002, string.Join("/", insts.ToArray())); - _overlay.PlayQueue(MesgLog.Text(10006, $"#{insts.Count}")); + TraceEntryInstance(insts); + _overlay.PlayQueue(Locale.Text(10006, $"#{insts.Count}")); } } DcContent.Missions.Clear(); + ResetContents(); } // match @@ -289,19 +375,19 @@ namespace DutyContent.Tab if (icode == 0 && rcode != 0) { var roulette = DcContent.GetRoulette(rcode); - LogRoulette(10003, roulette.Name); + TraceMatchRoulette(roulette); name = roulette.Name; } else if (icode != 0) { var instance = DcContent.GetInstance(icode); - LogInstance(10003, instance.Name); + TraceMatchInstance(instance); name = instance.Name; } else { // ??? - name = MesgLog.Text(10003, icode); + name = Locale.Text(10003, icode); } PlayEffecSoundInstance(); @@ -320,8 +406,8 @@ namespace DutyContent.Tab { var icode = BitConverter.ToUInt16(data, 0); var instance = DcContent.GetInstance(icode); - LogInstance(10004, instance.Name); - _overlay.PlayMatch(MesgLog.Text(10004, instance.Name)); + TraceEnterInstance(instance); + _overlay.PlayMatch(Locale.Text(10004, instance.Name)); DcContent.Missions.Clear(); } @@ -331,8 +417,8 @@ namespace DutyContent.Tab } } - // southen bozja front critical engagement - else if (opcode == DcConfig.Packet.OpSouthernBozja) + // save the queen critical engagement + else if (opcode == DcConfig.Packet.OpCe) { // 0[4] timestamp // 4[2] mmss @@ -354,21 +440,24 @@ namespace DutyContent.Tab var ce = data[8] + DcContent.SaveTheQueenTypeToCeBase(_stq_type); var stat = data[10]; + var fate = DcContent.GetFate(ce); if (stat == 0 /* || data[10] == 3 */) { if (DcContent.Missions.ContainsKey(ce)) DcContent.Missions.Remove(ce); + + TraceCe(ce, false, fate); } else if (stat == 1 || stat == 2) { + var withlog = false; + if (!DcContent.Missions.ContainsKey(ce)) { + withlog = true; DcContent.Missions.Add(ce, 0); - var fate = DcContent.GetFate(ce); - LogCe(10001, fate.Name); - if (DcConfig.Duty.Fates[DcConfig.Duty.ActiveFate].Selected.Contains(ce)) { PlayEffectSoundFate(); @@ -376,16 +465,15 @@ namespace DutyContent.Tab _overlay.PlayFate(fate); } } + + TraceCe(ce, withlog, fate, stat == 1 ? "R" : "E"); } else if (stat == 3) { - if (DcContent.Missions.ContainsKey(ce)) - { + if (!DcContent.Missions.ContainsKey(ce)) DcContent.Missions.Add(ce, 0); - var fate = DcContent.GetFate(ce); - LogCe(10001, fate.Name); - } + TraceCe(ce, false, fate, data[12].ToString()); } } } @@ -403,74 +491,158 @@ namespace DutyContent.Tab #if false LogInstance(10025, $"{zone_name} ({zone_id})"); - if (chkShowDebug.Checked) + if (DcConfig.DebugEnable) LogDebug("Zone: {0}", zone_id); #endif + + ResetContents(); } // - private void WriteLog(Color color, string category, string format, params object[] prms) - { - if (txtContentLog == null || txtContentLog.IsDisposed || format == null) - return; - - var fmt = string.Format(format, prms); - var dt = DateTime.Now.ToString("HH:mm:ss"); - var ms = $"[{dt}/{category}] {fmt}{Environment.NewLine}"; - - WorkerAct.Invoker(() => - { - txtContentLog.SelectionColor = color; - txtContentLog.SelectionStart = txtContentLog.TextLength; - txtContentLog.SelectionLength = 0; - txtContentLog.AppendText(ms); - - txtContentLog.SelectionColor = txtContentLog.ForeColor; - ThirdParty.NativeMethods.ScrollToBottom(txtContentLog); - }); - } - private void WriteLog(Color color, int catkey, int fmtkey, params object[] prms) { - string catergory = MesgLog.Text(catkey); - string format = MesgLog.Text(fmtkey); - WriteLog(color, catergory, format, prms); + string category = Locale.Text(catkey); + string format = Locale.Text(fmtkey); + Logger.WriteCategory(color, category, format, prms); } // - private void LogDebug(string msg, params object[] prms) + private void TraceFate(ushort code, bool withlog, DcContent.Fate fate, int progress = -1) { - WriteLog(Color.Red, "Debug", msg, prms); + int key, subs; + + if (_stq_type != DcContent.SaveTheQueenType.No || IsSkirmishFate(code)) + { + key = 24; + subs = 4; + } + else + { + key = 23; + subs = 3; + } + + if (withlog) + WriteLog(Color.Black, key, 10001, fate.Name); + + lock (_lock_contents) + { + var sc = code.ToString(); + var i = UnsafeFindContent(sc, out int nth); + + if (i == null && progress >= 0) + { + var li = new ThirdParty.EXListViewItem(sc); + var si = new ThirdParty.EXImageListViewSubItem(_ilCategory.Images[subs], ""); + + li.SubItems.Add(si); + li.SubItems.Add(progress.ToString()); + li.SubItems.Add(fate.Name); + lstContents.Items.Add(li); + } + else + { + if (progress >= 0) + i.SubItems[2].Text = progress.ToString(); + else if (nth >= 0) + lstContents.Items.RemoveAt(nth); + } + } } // - private void LogRoulette(int key, params object[] prms) + private void TraceCe(int code, bool withlog, DcContent.Fate fate, string progress = null) { - WriteLog(Color.Black, 21, key, prms); + if (withlog) + WriteLog(Color.Black, 25, 10001, fate.Name); + + lock (_lock_contents) + { + var sc = code.ToString(); + var i = UnsafeFindContent(sc, out int nth); + + if (i == null && progress != null) + { + var li = new ThirdParty.EXListViewItem(sc); + var si = new ThirdParty.EXImageListViewSubItem(_ilCategory.Images[5], ""); + + li.SubItems.Add(si); + li.SubItems.Add(progress.ToString()); + li.SubItems.Add(fate.Name); + lstContents.Items.Add(li); + } + else + { + if (progress == null) + lstContents.Items.RemoveAt(nth); + else + i.SubItems[2].Text = progress; + } + } } // - private void LogInstance(int key, params object[] prms) + private void UpdateTraceInstance(string insname, int count, int imageindex) { - WriteLog(Color.Black, 22, key, prms); + lock (_lock_contents) + { + if (lstContents.Items.Count > 0) + { + //lstContents.BeginUpdate(); + + var li = lstContents.Items[0]; + + var si = li.SubItems[1] as ThirdParty.EXImageListViewSubItem; + si.MyImage = _ilCategory.Images[imageindex]; + + li.SubItems[2].Text = count == 0 ? string.Empty : count.ToString(); + li.SubItems[3].Text = insname; + + //lstContents.EndUpdate(); + } + } } // - private void LogFate(int key, params object[] prms) + private void TraceMatchInstance(DcContent.Instance instance) { - WriteLog(Color.Black, 23, key, prms); + WriteLog(Color.Black, 22, 10003, instance.Name); + + UpdateTraceInstance(instance.Name, 0, 6); } // - private void LogSkirmish(int key, params object[] prms) + private void TraceEnterInstance(DcContent.Instance instance) { - WriteLog(Color.Black, 24, key, prms); + WriteLog(Color.Black, 22, 10004, instance.Name); + + UpdateTraceInstance(instance.Name, 0, 2); } // - private void LogCe(int key, params object[] prms) + private void TraceEntryInstance(List instances) { - WriteLog(Color.Black, 25, key, prms); + var ins = string.Join("/", instances.ToArray()); + + WriteLog(Color.Black, 22, 10002, ins); + + UpdateTraceInstance(ins, instances.Count, 7); + } + + // + private void TraceMatchRoulette(DcContent.Roulette roulette) + { + WriteLog(Color.Black, 22, 10003, roulette.Name); + + UpdateTraceInstance(roulette.Name, 0, 6); + } + + // + private void TraceEntryRoulette(DcContent.Roulette roulette) + { + WriteLog(Color.Black, 22, 10002, roulette.Name); + + UpdateTraceInstance(roulette.Name, 0, 1); } // @@ -584,34 +756,6 @@ namespace DutyContent.Tab } } - private void BtnLogFont_Click(object sender, EventArgs e) - { - Font ret = (Font)WorkerAct.Invoker(new WorkerAct.ObjectReturnerDelegate(() => - { - FontDialog dg = new FontDialog - { - Font = txtContentLog.Font, - FontMustExist = true, - AllowVerticalFonts = false - }; - - return (dg.ShowDialog() == DialogResult.OK) ? dg.Font : null; - })); - - if (ret != null) - { - txtContentLog.Font = ret; - - DcConfig.Duty.LogFontFamily = ret.Name; - DcConfig.Duty.LogFontSize = ret.Size; - - SaveConfig(); - - btnLogFont.Font = ret; - btnLogFont.Text = $"{DcConfig.Duty.LogFontFamily}, {DcConfig.Duty.LogFontSize}"; - } - } - private void TreeFates_AfterCheck(object sender, TreeViewEventArgs e) { if (!DcConfig.PluginEnable) @@ -774,9 +918,9 @@ namespace DutyContent.Tab { var dg = new OpenFileDialog { - Title = MesgLog.Text(101), + Title = Locale.Text(101), DefaultExt = "wav", - Filter = MesgLog.Text(102) + Filter = Locale.Text(102) }; return (dg.ShowDialog() == DialogResult.OK) ? dg.FileName : null; @@ -816,7 +960,7 @@ namespace DutyContent.Tab if (!DcConfig.PluginEnable) return; - string s = MesgLog.Text(103); + string s = Locale.Text(103); if (DcConfig.Duty.UseNotifyLine) await NotifyUsingLine(s); @@ -847,7 +991,7 @@ namespace DutyContent.Tab if (!DcConfig.Duty.EnableNotify) return; - string s = MesgLog.Text(10005, f.Name); + string s = Locale.Text(10005, f.Name); SendNotify(s); } @@ -857,7 +1001,7 @@ namespace DutyContent.Tab if (!DcConfig.Duty.EnableNotify) return; - string s = MesgLog.Text(10003, name); + string s = Locale.Text(10003, name); SendNotify(s); } @@ -1070,7 +1214,7 @@ namespace DutyContent.Tab { if (!IsValidDiscwkUrl(txtDiscowkUrl.Text)) { - MesgLog.E(342); + Logger.E(342); return; } @@ -1107,7 +1251,7 @@ namespace DutyContent.Tab if (!IsValidDiscwkUrl(txtDiscowkUrl.Text)) { - MesgLog.E(342); + Logger.E(342); return; } @@ -1133,12 +1277,12 @@ namespace DutyContent.Tab { if (!is_enable) { - btnPacketStart.Text = MesgLog.Text(10007); + btnPacketStart.Text = Locale.Text(10007); btnPacketStart.BackColor = Color.Transparent; } else { - btnPacketStart.Text = MesgLog.Text(10008); + btnPacketStart.Text = Locale.Text(10008); btnPacketStart.BackColor = Color.Salmon; } @@ -1179,9 +1323,9 @@ namespace DutyContent.Tab lstPacketInfo.Items[3].SubItems[3].Text = newpk.OpInstance.ToString(); // Bozja - lstPacketInfo.Items[4].SubItems[1].Text = DcConfig.Packet.OpSouthernBozja.ToString(); + lstPacketInfo.Items[4].SubItems[1].Text = DcConfig.Packet.OpCe.ToString(); lstPacketInfo.Items[4].SubItems[2].Text = ""; - lstPacketInfo.Items[4].SubItems[3].Text = newpk.OpSouthernBozja.ToString(); + lstPacketInfo.Items[4].SubItems[3].Text = newpk.OpCe.ToString(); } private void BtnPacketStart_Click(object sender, EventArgs e) @@ -1200,7 +1344,7 @@ namespace DutyContent.Tab { var ret = (DialogResult)WorkerAct.Invoker(new WorkerAct.ObjectReturnerDelegate(() => { - var r = MessageBox.Show(MesgLog.Text(10022), MesgLog.Text(0), MessageBoxButtons.YesNo, MessageBoxIcon.Question); + var r = MessageBox.Show(Locale.Text(10022), Locale.Text(0), MessageBoxButtons.YesNo, MessageBoxIcon.Question); return r; })); @@ -1237,7 +1381,7 @@ namespace DutyContent.Tab default: m = 10015; break; } - txtPacketInfo.Text = MesgLog.Text(m); + txtPacketInfo.Text = Locale.Text(m); } private void LstPacketInfo_MouseDoubleClick(object sender, MouseEventArgs e) @@ -1266,13 +1410,13 @@ namespace DutyContent.Tab break; case 4: - v = _new_packet.OpSouthernBozja = DcConfig.Packet.OpSouthernBozja; + v = _new_packet.OpCe = DcConfig.Packet.OpCe; break; } if (v != int.MaxValue) { - lstPacketInfo.SelectedItems[0].SubItems[2].Text = MesgLog.Text(10024); + lstPacketInfo.SelectedItems[0].SubItems[2].Text = Locale.Text(10024); lstPacketInfo.SelectedItems[0].SubItems[3].Text = v.ToString(); } } @@ -1284,10 +1428,10 @@ namespace DutyContent.Tab ushort opcode = (ushort)lstBozjaInfo.SelectedItems[0].Tag; - _new_packet.OpSouthernBozja = opcode; + _new_packet.OpCe = opcode; - lstPacketInfo.Items[4].SubItems[2].Text = MesgLog.Text(10023); - lstPacketInfo.Items[4].SubItems[3].Text = _new_packet.OpSouthernBozja.ToString(); + lstPacketInfo.Items[4].SubItems[2].Text = Locale.Text(10023); + lstPacketInfo.Items[4].SubItems[3].Text = _new_packet.OpCe.ToString(); } private void LstBozjaInfo_MouseDoubleClick(object sender, MouseEventArgs e) @@ -1365,7 +1509,7 @@ namespace DutyContent.Tab WorkerAct.Invoker(() => { - lstPacketInfo.Items[0].SubItems[2].Text = MesgLog.Text(10016); + lstPacketInfo.Items[0].SubItems[2].Text = Locale.Text(10016); lstPacketInfo.Items[0].SubItems[3].Text = _new_packet.OpFate.ToString(); }); @@ -1389,7 +1533,7 @@ namespace DutyContent.Tab WorkerAct.Invoker(() => { - lstPacketInfo.Items[1].SubItems[2].Text = MesgLog.Text(10016); + lstPacketInfo.Items[1].SubItems[2].Text = Locale.Text(10016); lstPacketInfo.Items[1].SubItems[3].Text = _new_packet.OpDuty.ToString(); }); @@ -1412,7 +1556,7 @@ namespace DutyContent.Tab WorkerAct.Invoker(() => { - lstPacketInfo.Items[2].SubItems[2].Text = MesgLog.Text(10016); + lstPacketInfo.Items[2].SubItems[2].Text = Locale.Text(10016); lstPacketInfo.Items[2].SubItems[3].Text = _new_packet.OpMatch.ToString(); }); @@ -1433,7 +1577,7 @@ namespace DutyContent.Tab WorkerAct.Invoker(() => { - lstPacketInfo.Items[3].SubItems[2].Text = MesgLog.Text(10016); + lstPacketInfo.Items[3].SubItems[2].Text = Locale.Text(10016); lstPacketInfo.Items[3].SubItems[3].Text = _new_packet.OpInstance.ToString(); }); @@ -1545,12 +1689,12 @@ namespace DutyContent.Tab DcConfig.Packet.OpDuty = pk.OpDuty; DcConfig.Packet.OpMatch = pk.OpMatch; DcConfig.Packet.OpInstance = pk.OpInstance; - DcConfig.Packet.OpSouthernBozja = pk.OpSouthernBozja; + DcConfig.Packet.OpCe = pk.OpCe; var nfn = DcConfig.BuildPacketFileName(name); pk.Save(nfn); - MesgLog.I(33, pk.Version, pk.Description); + Logger.I(33, pk.Version, pk.Description); // _packet_list.Remove(name); @@ -1616,5 +1760,65 @@ namespace DutyContent.Tab cboPacketset.SelectedIndex = n; } } + + private void LstContents_Resize(object sender, EventArgs e) + { + lock (_lock_contents) + { + if (lstContents.Columns.Count > 0) + { + lstContents.Columns[lstContents.Columns.Count - 1].Width = -2; + } + } + } + + private void ResetContents() + { + lock (_lock_contents) + { + lstContents.BeginUpdate(); + + for (var i = lstContents.Items.Count - 1; i > 0; i--) + lstContents.Items.RemoveAt(1); + + lstContents.EndUpdate(); + } + } + + private ListViewItem UnsafeFindContent(string code, out int nth) + { + nth = -1; + + if (lstContents.Items.Count <= 1) + return null; + + for (var i = 1; i < lstContents.Items.Count; i++) + { + var v = lstContents.Items[i]; + if (v.Text.Equals(code)) + { + nth = i; + return v; + } + } + + return null; + } + + private void RemoveContent(string code) + { + if (lstContents.Items.Count <= 1) + return; + + for (var i = 1; i < lstContents.Items.Count; i++) + { + var v = lstContents.Items[i]; + if (v.Text.Equals(code)) + { + lstContents.Items.RemoveAt(i); + break; + } + } + } } } diff --git a/Tab/DutyForm.resx b/Tab/DutyForm.resx index 1586b32..bbfe73d 100644 --- a/Tab/DutyForm.resx +++ b/Tab/DutyForm.resx @@ -124,304 +124,301 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACC - RQAAAk1TRnQBSQFMAgEBBAEAAZABAQGQAQEBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACw + RAAAAk1TRnQBSQFMAgEBBAEAAbgBAQG4AQEBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA AwABQAMAAQEBAAEgBgABgP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A - /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AWgADNgRZAcQDVQHqAwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/ - AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/ - AwUB/wNdAeIDVAGuAykBPwgAAwcBCgNIAYUCBQGqAf8CAAGqAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGk + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AWgADNgRZAcQDVQHqAwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + AwAB/wNdAeIDVAGuAykBPwgAAwcBCgNIAYUCAAGqAf8CAAGqAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGk Af8CAAGkAf8CAAGkAf8CAAGjAf8CAAGiAf8CAAGiAf8CAAGiAf8CAAGiAf8CAAGiAf8CAAGiAf8CAAGi Af8CAAGiAf8CAAGiAf8CAAGiAf8CAAGjAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGk - Af8CAAGqAf8CBQGqAf8DSAGFAwcBCv8ABQADTgGXAyYB/wOyAf8DzQH/A90B/wPdAf8D3QH/A90B/wPd + Af8CAAGqAf8CAAGqAf8DSAGFAwcBCv8ABQADTgGXAyEB/wOyAf8DzQH/A90B/wPdAf8D3QH/A90B/wPd Af8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A90B/wPd - Af8D3QH/A90B/wPIAf8DogH/AxcB/wNGAYEEAANIAYUCAAGkAf8CAAGiAf8CAAGhAf8CAAGhAf8CAAGh + Af8D3QH/A90B/wPIAf8DogH/AxIB/wNGAYEEAANIAYUCAAGkAf8CAAGiAf8CAAGhAf8CAAGhAf8CAAGh Af8CAAGhAf8CAAGhAf8CAAGgAf8CAAGeAf8CAAGbAf8CAAGZAf8CAAGZAf8CAAGXAf8CAAGVAf8CAAGV Af8CAAGVAf8CAAGVAf8CAAGXAf8CAAGZAf8CAAGZAf8CAAGbAf8CAAGeAf8CAAGgAf8CAAGhAf8CAAGh Af8CAAGhAf8CAAGhAf8CAAGhAf8CAAGiAf8CAAGkAf8DSAGFVwABAQMCBAMEBAEGAwQBBgMDAQQDAQEC - AwABAYwAAzcBWgMyAf8D2wH/A4sB/wMcAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMF - Af8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AxwB/wOH - Af8DzQH/Ax4B/wMrAUICAAGkAf8CAAGiAf8CAAGdAf8CAAGYAf8CAAGXAf8CAAGXAf8CAAGXAf8CAAGX + AwABAYwAAzcBWgMtAf8D2wH/A4sB/wMXAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA + Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AxcB/wOH + Af8DzQH/AxkB/wMrAUICAAGkAf8CAAGiAf8CAAGdAf8CAAGYAf8CAAGXAf8CAAGXAf8CAAGXAf8CAAGX Af8CAAGRAf8CAAGPAf8CAAGMAf8CAAGKAf8CAAGKAf8CAAGIAf8CAAGGAf8CAAGGAf8CAAGGAf8CAAGG Af8CAAGIAf8CAAGKAf8CAAGKAf8CAAGMAf8CAAGPAf8CAAGVAf8CAAGXAf8CAAGXAf8CAAGXAf8CAAGX Af8CAAGYAf8CAAGdAf8CAAGiAf8CAAGkAf9QAAMCAQMDBgEIAw0BEgMaASQDIwEzAyEBMAMWAR4DCgEO - AwQBBgMAAQGIAANZAcMDsgH/A4oB/wFCATABFgH/AbkBkwEoAf8BzgGiAS4B/wHOAaIBLgH/Ac4BogEu - Af8BzgGiAS4B/wHOAaIBLgH/Ac4BogEuAf8BzgGiAS4B/wHOAaIBLgH/Ac4BogEuAf8BzgGiAS4B/wG9 - AZUBJgH/AaMBgAEaAf8BvQGVASYB/wHOAaIBLgH/Ac4BogEuAf8BzgGiAS4B/wHOAaIBLgH/Ac4BogEu - Af8BzgGiAS4B/wHOAaIBLgH/Ac4BogEuAf8BzgGiAS4B/wG5AZMBKAH/AU0BOAEZAf8DhQH/A6MB/wNU - AasCAAGjAf8CAAGaAf8CAAGRAf8CAAGNAf8CAAGNAf8CAAGKAf8CAAGGAf8CAAGBAf8CAAFMAf8CAAFK - Af8CAAFFAf8CAAFEAf8CAAFEAf8CAAFEAf8CAAFAAf8CAAE9Af8CAAE9Af8CAAFAAf8CAAFEAf8CAAFE - Af8CAAFEAf8CAAFFAf8CAAFKAf8CAAGAAf8CAAGGAf8CAAGGAf8CAAGKAf8CAAGNAf8CAAGNAf8CAAGR + AwQBBgMAAQGIAANZAcMDsgH/A4oB/wE9ASsBEQH/AbkBkwEjAf8BzgGiASkB/wHOAaIBKQH/Ac4BogEp + Af8BzgGiASkB/wHOAaIBKQH/Ac4BogEpAf8BzgGiASkB/wHOAaIBKQH/Ac4BogEpAf8BzgGiASkB/wG9 + AZUBIQH/AaMBgAEVAf8BvQGVASEB/wHOAaIBKQH/Ac4BogEpAf8BzgGiASkB/wHOAaIBKQH/Ac4BogEp + Af8BzgGiASkB/wHOAaIBKQH/Ac4BogEpAf8BzgGiASkB/wG5AZMBIwH/AUgBMwEUAf8DhQH/A6MB/wNU + AasCAAGjAf8CAAGaAf8CAAGRAf8CAAGNAf8CAAGNAf8CAAGKAf8CAAGGAf8CAAGBAf8CAAFHAf8CAAFF + Af8CAAFAAf8CAAE/Af8CAAE/Af8CAAE/Af8CAAE7Af8CAAE4Af8CAAE4Af8CAAE7Af8CAAE/Af8CAAE/ + Af8CAAE/Af8CAAFAAf8CAAFFAf8CAAGAAf8CAAGGAf8CAAGGAf8CAAGKAf8CAAGNAf8CAAGNAf8CAAGR Af8CAAGaAf8CAAGjAf9MAAMCAQMDBwEKAxcBIAMwAUwBRQJGAX4BTwJRAZwBTQJOAZYDQQFyAyoBQQMS - ARkDBQEHAwABAS8AAf8DAAH/AwAB/wMAAf8DAAH/RAADQQH5A8oB/wMaAf8BuQGPAScB/wHVAaIBLwH/ - AdUBogEvAf8B1QGiAS8B/wHVAaIBLwH/AdUBogEvAf8B1QGiAS8B/wHVAaIBLwH/AdUBogEvAf8B1QGi - AS8B/wHVAaIBLwH/AcQBlQEnAf8BiQE5ARMB/wEOAR0BIwH/AZQBPgESAf8B0wGhAS4B/wHVAaIBLwH/ - AdUBogEvAf8B1QGiAS8B/wHVAaIBLwH/AdUBogEvAf8B1QGiAS8B/wHVAaIBLwH/AdUBogEvAf8B1QGi - AS8B/wHAAZMBKQH/AxMB/wPFAf8DTgHwAgABmQH/AgABiwH/AgABSgH/AgABRgH/AgABPgH/AgABPgH/ - AgABOQH/AgABNgH/AgABNQH/AgABMgH/AgABLgH/AgABLgH/AgABLQH/AgABKgH/AgABJgH/AgABJgH/ - AgABJgH/AgABJgH/AgABKgH/AgABLQH/AgABLgH/AgABLgH/AgABMgH/AgABNQH/AgABOAH/AgABPgH/ - AgABPgH/AgABPgH/AgABRgH/AgABSgH/AgABiwH/AgABmQH/SAADAQECAwcBCQMYASIDOAFeAVMCVQGt - AV0CYQHiA20B9wNlAfQBXgJhAdoDUAGaAy0BRgMOARMDAwEELwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMF - Af8DwgH/AwcB/wHMAZUBLAH/AdUBmwEuAf8B1QGbAS4B/wHVAZsBLgH/AdUBmwEuAf8B1QGbAS4B/wHV - AZsBLgH/AdUBmwEuAf8B1QGbAS4B/wHVAZsBLgH/Ab8BiwEkAf8BkwE5AREB/wENARsBJAH/AQABIwGO - Af8BPAEpARUB/wGVAToBEQH/Ac8BlwErAf8B1QGbAS4B/wHVAZsBLgH/AdUBmwEuAf8B1QGbAS4B/wHV - AZsBLgH/AdUBmwEuAf8B1QGbAS4B/wHVAZsBLgH/AcUBkAEqAf8DDQH/A8IB/wMFAf8CAAGRAf8CAAGC - Af8BAAERAYQB/wEAARoBhQH/AQABGgGAAf8BAAEcAYMB/wEAARwBgwH/AQABHAGDAf8BAAEcAUwB/wEA - ARwBTAH/AQABHAFMAf8BAAEcAUwB/wEAARwBRwH/AQABGQFEAf8BAAEZAUQB/wEAARkBRAH/AQABGQFE - Af8BAAEZAUQB/wEAARkBRAH/AQABGQFEAf8BAAEZAUkB/wEAARkBSQH/AQABGQFJAf8BAAEZAUkB/wEA - ARoBgwH/AQABHAGDAf8BAAEcAYMB/wEAARwBgwH/AQABHAGIAf8BAAERAYcB/wIAAYMB/wIAAZEB/0cA - AQEDBgEIAxYBHgM4AV0DVQG1A2QB8QHzAfgB/AH/Ae0D/wHzA/8BfwGIAZIB/gNfAeADSAGFAx8BLAMF - AQcvAAH/AwAB/wMAAf8DAAH/AwAB/0QAAwUB/wO0Af8DBQH/Ac4BkAErAf8B1QGUAS0B/wHVAZQBLQH/ - AdUBlAEtAf8B1QGUAS0B/wHVAZQBLQH/AdUBlAEtAf8B1AGTAS0B/wHQAZEBKwH/AbQBSwEeAf8BigEx - AREB/wEDARkBKQH/AQABBwFGAf8BAAEHAUEB/wEAAQ4BRwH/ASYBHwEZAf8BkgE0ARAB/wG5AYABIAH/ - AdIBkgEsAf8B1QGUAS0B/wHVAZQBLQH/AdUBlAEtAf8B1QGUAS0B/wHVAZQBLQH/AdUBlAEtAf8BxQGL - ASkB/wMMAf8DtAH/AwUB/wIAAYoB/wEAARMBhwH/AQwBhQGpAf8BIwGrAdQB/wE8AdEB3gH/AUEB1AHh - Af8BRAHUAeEB/wFGAdQB4QH/AUYB1AHhAf8BRAHUAeEB/wFBAdQB4QH/AUEB1AHhAf8BQQHTAeAB/wFB - AdEB3gH/AUEB0QHeAf8BQQHRAd4B/wFBAdEB3gH/AUEB0QHeAf8BQQHRAd4B/wFBAdEB3gH/AUEB0QHe - Af8BQQHRAd4B/wFBAdEB3gH/AUEB0QHeAf8BQQHRAeEB/wFBAdQB4QH/AUEB1AHhAf8BPAHUAeEB/wEk - AbIB2AH/AQ4BhQGvAf8BAAETAYsB/wIAAYoB/0MAAQEDBQEHAxQBGwM1AVYDVAGvAVoCXQHwAfMB+AH8 - Af8B1AP/AcQB/AL/AcYB/gL/AegD/wFfAWcBcwH7AVUCVgGxAy0BRQMHAQovAAH/AwAB/wMAAf8DAAH/ - AwAB/0QAAwUB/wOnAf8DBQH/Ac4BhwEqAf8B1QGLASwB/wHVAYsBLAH/AcsBhAEoAf8BvQFJASEB/wHE - AYABJQH/AcABSwEjAf8BlQEvARAB/wGNASwBEQH/ASoBHQEZAf8BAAERAT4B/wIAATQB/wEMAZEBsgH/ - AUEB1QHmAf8BAAEqAYkB/wIAAToB/wEAARUBNQH/AUABIwEUAf8BkgEuARAB/wGxAUIBHAH/AcMBgAEk - Af8BwwGAASQB/wG6AUgBIAH/AdMBigErAf8B1QGLASwB/wHFAYIBKAH/AwwB/wOnAf8DBQH/AgABgQH/ - AQABHwGQAf8BHwGhAcIB/wEQAUkBpAH/AQQBGwFKAf8BBQEbAYQB/wEGARsBiAH/AQcBGwGIAf8BBwEb - AYEB/wEGARsBgQH/AQUBGwGBAf8BBQEbAUoB/wEFARsBSQH/AQUBGwFJAf8BBQEbAUkB/wEFARsBSQH/ - AQUBGwFJAf8BBQEbAUkB/wEFARsBSQH/AQUBGwFJAf8BBQEbAYEB/wEFARsBgQH/AQUBGwGBAf8BBQEb - AYEB/wEHARwBiAH/AQoBHwGIAf8BBQEbAYQB/wEEARsBSgH/ARABSwGkAf8BHwGhAcMB/wEAAR8BkQH/ - AgABgQH/PwABAQMEAQYDEgEYAzIBUANSAakBWQJkAewBfwGIAZIB/gHZA/8BxAH8Av8BwwH7Av8BwwH7 - Av8B1wP/A6gB/QFXAlkBvwMyAVADCAELLwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMFAf8DmwH/AwUB/wHO - AU0BKAH/AdUBgwEqAf8BywFLASYB/wGDASQBEQH/ATYBHAEUAf8BRAEfARIB/wE8AR0BEwH/AQ0BGgEl - Af8BAAEUAUIB/wIAAT4B/wEAARkBSAH/ATsB0AHnAf8BRgHdAfEB/wErAacBsQH/AUwB4QH3Af8BIgGp - AcUB/wIAATQB/wEAAQgBRQH/AQABFwE6Af8BHgEaARwB/wFCAR4BEgH/AUMBHgESAf8BMQEcARgB/wGU - ASkBDgH/AdMBggEpAf8BxQFJASYB/wMLAf8DmwH/AwUB/wIAAUwB/wEAASABiwH/ARgBnAG9Af8BAAEH - ATcB/wIAAUMB/wEAASEBmAH/AQABJAGdAf8BAAEiAZ0B/wEAASEBnAH/AQABIQGWAf8BAAEgAZUB/wEA - AR4BkQH/AgABQwH/AgABOgH/AgABOgH/AgABOgH/AgABOgH/AgABOgH/AgABQQH/AQABGgGSAf8BAAEc - AZQB/wEAARIBjQH/AQABKAGYAf8BAAELAY4B/wEAASgBnwH/AQABGAGTAf8CAAFDAf8CAAE0Af8BAAEF - ATUB/wEYAZcBtAH/AQABHwGIAf8CAAFMAf87AAEBAwQBBgMQARUDLAFDAU8CUAGbAVgCYgHpAX8BiAGS - Af4B3gP/AcYB/gL/AcMB+wL/AcMB+wL/AcgD/wHsA/8BXwFqAXMB+wFVAlYBsQMtAUUDBwEKLwAB/wMA - Af8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAwUB/wOTAf8DBQH/AcwBRQEmAf8B0wFI - ASgB/wHOAUUBJgH/AYoBIQEOAf8BAAEpAYQB/wEAASEBjQH/AQABGQGIAf8BAAEPAYEB/wEAAUQBnwH/ - AT8B1QHmAf8BkAHvAf4B/wEiAZsBvAH/AS4BBAEbAf8BkQEAARkB/wEdARoBMgH/ATkBygHmAf8BkAHt - AfoB/wEpAbQBygH/AQABKgGSAf8BAAERAYEB/wEAARoBhwH/AQABKwGWAf8BCwEbAS4B/wGTASMBDQH/ - AdIBSAEoAf8BwwFBASQB/wMKAf8DkwH/AwUB/wIAAUwB/wEAASEBiwH/ARgBnQG9Af8BAAEHAT4B/wEA - ASABlQH/ATUB1gHpAf8BNgHXAfAB/wE1AdIB8AH/ATUB0QHwAf8BNQHRAe4B/wEyAc0B6wH/AS8BxQHn - Af8BAAEEAYoB/wIAAUQB/wIAAUQB/wIAAUQB/wIAAUQB/wIAAUUB/wEAAQYBjAH/ATABwQHiAf8BKgHE - AegB/wEIAYoBzwH/AT4B4QH1Af8BAAE+AcMB/wFAAeEB9QH/ARsBogHVAf8BAAEFAZIB/wIAAUAB/wEA - AQUBPQH/ARYBlAG0Af8BAAEcAYgB/wIAAUwB/zgAAwQBBQMNARIDKAE8A0oBigFeAmEB2gOoAf0B4gP/ - AcYB/gL/AcMB+wL/AcMB+wL/AckD/wHpA/8DqAH9AVwCYQHcA0cBggMdASoDBQEHLwAB/wMAAf8DAAH/ - AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/yQAAwUB/wOPAf8DBQH/AckBQgElAf8B0AFFAScB/wHQ - AUUBJwH/AaYBLQEVAf8BEwEXASUB/wEAAUMBowH/ASsBqwHSAf8BkgHrAfgB/wGJAeoB9wH/ASoBogG8 - Af8BKgEXATAB/wGaAQsBMQH/Ab8BHgGLAf8BwQEjAZMB/wG7ARwBggH/AYIBBAEjAf8BIgEzAU0B/wE5 - AcMB2wH/AZMB8AH8Af8BhgHhAfMB/wEYAZEBuQH/AQABPgGfAf8BQAEYARAB/wG8AToBHwH/AdABRQEn - Af8BwAE+ASMB/wMKAf8DjwH/AwUB/wIAAUwB/wEAASEBiwH/ARgBnQG9Af8BAAEHAUIB/wEAASIBnwH/ - ATwB4gH1Af8BQwHsAv8BSAHuAv8BSQHuAv8BSQHuAv8BSQHuAv8BKAHAAesB/wEAAQQBjwH/AgABSQH/ - AgABRgH/AgABRAH/AgABRQH/AgABggH/AQoBSAG+Af8BOgHaAfgB/wEKAZgB3wH/ASkBxAHxAf8BHQG2 - AeoB/wEVAawB5QH/ATUB1gH5Af8BDwGfAeEB/wEYAZ8B0wH/AQABEQGMAf8BAAEFAUAB/wETAZQBtAH/ - AQABHAGIAf8CAAFMAf8kAAMBAQIDAwQEBAYECAELAw8BFAMkATYBRgJHAYABWAJcAdEBXwFqAXYB+wHp - A/8ByAP/AcMB+wL/AcMB+wL/AcwD/wHwA/8BXwFqAXYB+wFZAl0B1wNMAZIDKwFCAw0BEgMDAQQvAAH/ - AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/JAADBQH/A48B/wMFAf8BxwFAASUB/wHO - AUMBJwH/Ac4BQwEnAf8BpgEtARYB/wITASEB/wEAATMBkAH/ARIBhwGpAf8BBQEaATIB/wE5AQABFAH/ - AaUBDAE0Af8BwgEfAYwB/wHLAS4BpAH/AdIBNgGxAf8B1AE3AbQB/wHRATQBsAH/AcoBLQGiAf8BvgEd - AYQB/wGSAQYBKgH/ASsBAgEUAf8BAAEtAUsB/wEXAYoBrAH/AQABKAGIAf8BPwEYARAB/wG9ATkBIAH/ - Ac4BQwEnAf8BvwE9ASMB/wMKAf8DjwH/AwUB/wIAAUwB/wEAASABiwH/ARgBnAG5Af8BAAEHATwB/wEA - ASIBnwH/ATwB4QH1Af8BQQHnAv8BQgHoAv8BQwHoAv8BRQHqAv8BSQHuAv8BKAHAAesB/wEAAQQBjgH/ - AgABQwH/AgABQgH/AgABQQH/AgABQQH/AgABgQH/ASABoQHUAf8BQQHmAv8BAAE6AcEB/wFBAeYC/wEJ - AY8B1AH/AS4ByQHxAf8BLgHJAfEB/wEJAY8B1QH/ATcB3AH1Af8BAAEgAZgB/wEAAQUBOwH/ARcBlAG0 - Af8BAAEcAYgB/wIAAUwB/xwAAwIBAwMGAQgDDQERAxcBIAMiATIDKgFAAywBQwMxAU4DRwGCAVkCXAHM - AVYBZwFrAfoB7QP/AckD/wHDAfsC/wHDAfsC/wHNA/8B+AP/AlwBXwH4AVwCXgHOAUgCSQGHAysBQgMR - ARcDBAEGAwABAS8AAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMFAf8DkAH/ - AwUB/wHFAT4BJAH/AcwBQQEmAf8BzAFBASYB/wGkASoBFQH/ARABEwEjAf8BAAEtAYkB/wEAATIBjQH/ - ARwBDAEmAf8BvAEVAUoB/wHEASUBnAH/AdEBNQGvAf8B3AFBAcEB/wHmAUoBzQH/AekBTQHSAf8B5gFL - Ac0B/wHdAUIBwQH/AdABNQGvAf8BxQEmAZsB/wGzAREBOQH/AQABGgE7Af8BAAE5AZAB/wEAASIBgwH/ - AT4BFwEQAf8BuwE4AR8B/wHMAUEBJgH/Ab0BOwEiAf8DCgH/A5AB/wMFAf8CAAFMAf8BAAEgAYsB/wEY - AZsBuAH/AQABBgE6Af8BAAEaAZIB/wElAbsB4AH/ASkBvAHmAf8BKQG/AeYB/wEwAb8B5AH/ATABwQHn - Af8BMAHFAesB/wErAb8B5AH/AQABAQGEAf8CAAFBAf8CAAFBAf8CAAFBAf8CAAFBAf8CAAFEAf8CAAGF - Af8BAAEEAY0B/wIAAYgB/wEAAQQBjwH/AgABiwH/AQABAwGUAf8BAAEEAZYB/wEAAQQBkwH/AQABBAGS - Af8CAAFFAf8BAAEFAToB/wEYAZQBtAH/AQABHAGIAf8CAAFMAf8XAAEBAwQBBQMKAQ4DGgElAzEBTQNE - AXkBTwJQAZsBUwJUAawDVAGuA1UBtQFaAl4B2ANtAfcB9AP/AcoD/wHDAfsC/wHEAfwC/wHRB/8DbQH3 - AVgCWwHGA0MBeAMmATgDEAEVAwQBBgMAAQEzAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIA - Av8CAAL/JAADBQH/A5IB/wMFAf8BwwE7ASMB/wHKAT4BJQH/AcgBPQEkAf8BjAEcAQsB/wEAARIBLwH/ - AQABMgGMAf8BAAE+AZ0B/wE5AQoBJgH/AcIBHwGQAf8BzQEwAasB/wHeAUQBxAH/Ae8BhwHaAf8B+wGT - AewB/wH9AZgB9AH/AfsBkwHsAf8B7wGHAdoB/wHeAUQBxAH/Ac4BMAGsAf8BvQEcAYQB/wEIARwBPAH/ - AQYBRQGdAf8BAAEhAYQB/wEsARMBFQH/AbABMAEaAf8BygE+ASUB/wG7ATgBIQH/AwoB/wOSAf8DBQH/ - AgABTAH/AQABIAGKAf8BGAGXAbYB/wEAAQUBOgH/AgABQwH/AQABAwGPAf8BAAEFAZcB/wEAAQUBlwH/ - AQABBQGPAf8BAAEFAY8B/wEAAQUBjwH/AQABAgGIAf8CAAFFAf8CAAFBAf8CAAFBAf8CAAFBAf8CAAFB - Af8CAAFBAf8CAAFBAf8CAAFBAf8CAAFDAf8CAAFJAf8CAAFJAf8CAAFNAf8CAAGDAf8CAAGDAf8CAAFM - Af8CAAE7Af8BAAEFAToB/wEYAZQBtAH/AQABHAGIAf8CAAFMAf8TAAEBAwQBBgMPARQDJAE1AT8CQAFv - A1YBswFbAmEB4QNlAfQBUAFkAWoB+gJcAV8B+ANZAfUBTQFeAWkC+gP/Ac0D/wHDAfsC/wHEAfwC/wHU - A/8B8wH4AfwB/wNZAfUBVgJYAcEDQAFwAyABLgMLAQ8DBAEFAwABARsAAf8DAAH/AwAB/wMAAf8DAAH/ - AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/ - AgAC/wIAAv8CAAL/DAADBQH/A5YB/wMFAf8BwQE4ASMB/wHIATsBJAH/AcQBOQEiAf8BhwEZAQsB/wEA - ARgBQgH/AQYBQAGXAf8BAAE7AZcB/wGAAQkBKgH/AcYBJQGaAf8B1QE5AbcB/wHqAYAB0gH/AfwBlgHx - Av8BqAH+Av8BrwP/AagB/gH/AfwBlgHxAf8B6gGAAdIB/wHWATkBtwH/AcUBIwGTAf8BHwEVATEB/wEE - AUcBoAH/AQABLQGNAf8BCgESASYB/wGMARoBCgH/AccBOwEkAf8BuQE1ASEB/wMLAf8DlgH/AwUB/wIA - AUsB/wEAAR4BhQH/ARUBlQG0Af8BAAEFAToB/wIAATsB/wIAAUwB/wIAAYMB/wIAAYMB/wIAAUkB/wIA - AUkB/wIAAUYB/wIAAUIB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIA - AUEB/wIAAUMB/wIAAUkB/wIAAUkB/wIAAUkB/wIAAYMB/wIAAYMB/wIAAUwB/wIAATsB/wEAAQUBOgH/ - ARgBlAG0Af8BAAEcAYgB/wIAAUwB/xAAAwIBAwMLAQ8DIwE0AUQCRQF8AVcCWgHFA20B9wHzAfgB/AH/ - AfED/wHnA/8B6gP/Ae8D/wHkA/8BzQP/AcMB+wL/AcYB/gL/AdoD/wHzAfgB/AH/AWQCZQH0AVYCWAG8 - Az0BaQMdASoDCgENAwMBBCMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ - AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/DAADBQH/A5oB/wMF - Af8BvgE3ASIB/wHFATkBIwH/Aa8BLQEaAf8BOQETAQ4B/wEAASIBiwH/AR0BiQGrAf8BAAEqAU0B/wGp - AREBOwH/AcgBKQGhAf8B2gE+AbwB/wHwAYgB3AH/Af4BnwH6Av8BtAP/AcID/wG0Av8B/gGfAfoB/wHw - AYgB3AH/AdsBPgG9Af8ByQEoAZ0B/wFFAQoBKQH/AQABRAGdAf8BDAFJAaIB/wEAARcBQgH/AYYBGAEK - Af8BwwE4ASIB/wG2ATQBIAH/AwsB/wOaAf8DBQH/AgABSgH/AQABHAGDAf8BFwGUAbQB/wEAAQUBOgH/ - AgABOwH/AgABTAH/AgABgwH/AgABgwH/AgABSQH/AgABSQH/AgABRAH/AgABQQH/AgABQQH/AgABQQH/ - AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABRQH/AgABSQH/AgABSQH/ - AgABgwH/AgABgwH/AgABTAH/AgABOwH/AQABBQE6Af8BGAGUAbQB/wEAARwBiAH/AgABTAH/EAADAwEE - AxgBIQM9AWkBVwJZAb8BXAFnAWsB+gHxA/8BzgP/AcQB/AL/AcMB+wL/AcMB+wL/AcMB+wL/AcMB+wL/ - AcMB+wL/AcYB/gL/Ad4D/wF/AYgBkgH+AU4CXQHwAVUCVwG3AzsBYwMaASUDCQEMAwMBBCcAAf8DAAH/ - AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/ - AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/DAADBQH/A58B/wMFAf8BuwE0ASEB/wHAATUBIQH/AYYBFwEJ - Af8BAAERASoB/wEAATABlAH/ASQBlQG5Af8BFAEbATYB/wG4ARQBSAH/AccBKQGgAf8B2QE9AbsB/wHv - AYUB2gH/Af4BnQH6Av8BsQP/AbwD/wGxAv8B/gGdAfoB/wHvAYUB2gH/AdkBPQG8Af8BxwEoAZ8B/wGk - AQ4BNwH/AQABNAGJAf8BKgGXAbgB/wEAASABigH/ATgBEgEPAf8BrQErARkB/wGzATEBHwH/AwsB/wOf - Af8DBQH/AgABSgH/AQABHAGDAf8BGAGUAbQB/wEAAQUBOgH/AQABAgFMAf8BAAEsAawB/wEAATEBtgH/ - AQABLwGwAf8BAAEeAaIB/wEAAQgBjgH/AgABTAH/AgABQwH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/ - AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABRAH/AgABSQH/AgABSQH/AgABgwH/AgABgwH/ - AgABTAH/AgABOwH/AQABBQE6Af8BFwGUAbQB/wEAARwBiAH/AgABTAH/EAADBAEGAyMBMwFNAk4BlQNl - AfQE/wHaA/8B2QP/AeAD/wHdA/8BzwP/AcUB/QL/AcMB+wL/AcMB+wL/AdMD/wF/AYgBkgH+AU4CXQHw - AVUCVwG3AzoBYAMYASIDCAELAwIBAysAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/DAADBQH/ - A6QB/wMFAf8BuQExAR8B/wGgASMBEwH/ATMBDwENAf8BAAERAUkB/wETAUgBogH/AQABOQGSAf8BQQEB - ARIB/wG3ARQBSwH/AcIBJQGbAf8B0wE3AbMB/wHmAUwBzwH/AfoBkQHrAv8BoAH8Av8BqAH+Av8BoAH8 - Af8B+gGRAesB/wHmAUwBzwH/AdMBNwG0Af8BwwEkAZoB/wG2ARIBPwH/ARUBDQEhAf8BDwFKAaQB/wEA - AS4BkQH/AQABCQElAf8BhAEVAQcB/wGpASoBGgH/AwsB/wOkAf8DBQH/AgABSwH/AQABHAGFAf8BGAGU - AbQB/wEAAQUBOgH/AQABIgGSAf8BPAHkAfUB/wFBAekC/wE6AeAB+AH/AR0BsQHfAf8BBQE6AbUB/wEA - AQkBigH/AgABQwH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/ - AgABQgH/AgABRgH/AgABSwH/AgABhAH/AQABAQGNAf8CAAGMAf8CAAGDAf8CAAE8Af8BAAEFAToB/wEV - AZUBtAH/AQABHgGIAf8CAAFMAf8QAAMEAQYDIgEyAUwCTQGRA2QB8QOoAf0BfwGBAY8B/gOoAf0BXwFi - AXMB+wFYAWoBcAH8AecB8QH4Af8B1QP/AcMB+wL/AcMB+wL/AeAD/wJfAW0B+wFaAl0B0wNCAXQDGgEl - AwYBCAMBAQIvAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/ - AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wwAAwUB/wOqAf8DBQH/AakBJwEY - Af8BOwEQAQ0B/wEsAZYBtQH/AUUBwQHkAf8BlAHYAesB/wEAAR8BiAH/AQABEgEzAf8BoQEKATIB/wG/ - AR0BjgH/AcoBLQGmAf8B2gE+AbwB/wHoAYEB0gH/AfQBigHhAf8B+QGQAegB/wH0AYoB4QH/AegBgQHS - Af8B2gE+Ab0B/wHLAS0BpQH/AcABHAGKAf8BSwEJASYB/wEAARABQAH/AQwBSgGpAf8BnAHhAe8B/wE3 - AbAB1gH/AR8BGAEgAf8BkAEcAQ8B/wMMAf8DqgH/AwUB/wIAAUwB/wEAARwBiAH/ARgBlAG0Af8BAAEF - AToB/wEAAQwBigH/AQYBjAHPAf8BBgGTAdwB/wEHAY8B1QH/AQABRAHDAf8BAAEeAaUB/wEAAQIBiQH/ - AgABSAH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQQH/AgABQwH/ - AgABSwH/AQABBgGOAf8BBAE8AbgB/wEaAZoB0gH/AREBjQHLAf8BAAEjAaUB/wIAAUQB/wEAAQUBOgH/ - ARgBlwG2Af8BAAEgAYoB/wIAAUwB/xAAAwMBBAMWAR4DNgFZAU8CUQGcAVcCWQG/AVkCXAHJAVoCXQHK - AVwCXgHOAVgCXwHjAVcCYgH2AfAD/wHDAfsC/wHDAfsC/wHdA/8BYgFuAXIB/ANZAccDNwFbAw8BFAMA - AQFPAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/JAADBQH/A7AB/wMFAf8BrwEo - ARsB/wFKAQ8BBwH/AS0BCgEMAf8BKAFEAYUB/wGwAe4B9wH/AZsB4wHvAf8BAAEiAZEB/wEAAR4BNwH/ - AaUBDgE6Af8BwAEhAZUB/wHLAS8BqQH/AdYBOgG3Af8B3gFEAcIB/wHhAUYBxgH/Ad4BRAHCAf8B1gE6 - AbcB/wHLAS8BqAH/AcMBIAGRAf8BgQEKASwB/wEAASgBgAH/AQABQgGlAf8BtwHzAfoB/wGWAdoB5AH/ - ASABFQEdAf8BQAEOAQkB/wGjASMBGAH/AwwB/wOwAf8DBQH/AgABTAH/AQABHAGIAf8BGAGUAbQB/wEA - AQUBOgH/AQABGgGPAf8BJgHHAegB/wEtAdAB8wH/AS4BywHyAf8BJAG7AeYB/wEOAY0BzAH/AQABJQGl - Af8BAAEBAYEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIAAUEB/wIA - AUEB/wIAAUsB/wEAAToBtQH/AS8B0AHxAf8BPwHpAf0B/wE8AeUB+wH/ARgBqQHcAf8BAAEJAYQB/wEA - AQYBOgH/ARgBmwG4Af8BAAEgAYsB/wIAAUwB/xAAAwIBAwMKAQ0DHAEnAy8BSQM8AWYDRAF6A0gBhAFO - Ak8BlwFZAlwBzAFTAmQB8QT/AcMB+wL/AcMB+wL/AdcD/wOoAf0DWwHIAzcBWgMLAQ9TAAH/AwAB/wMA - Af8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/JAADBQH/A7YB/wMFAf8BsAEnARsB/wGyAScBGgH/ - AZ8BHgESAf8BSwEOAQUB/wESAQoBGQH/AZMB1AHoAf8BlgHeAe8B/wEAATEBlgH/AQoBFQEsAf8BuAES - AUUB/wG/AR8BkwH/AcYBKAGgAf8BywEuAaYB/wHNATABqgH/AcsBLgGmAf8BxgEoAaAB/wHAAR8BkQH/ - AZ0BDQE2Af8BAAEqAUQB/wEAAUEBqAH/Aa8B6wH4Af8BPgGgAcMB/wEwAgkB/wFNAQ4BBAH/Aa0BJQEY - Af8BqQElARoB/wMMAf8DtgH/AwUB/wIAAUwB/wEAARwBiAH/ARcBlAG0Af8BAAEFAToB/wEAARUBjgH/ - AR8BwwHnAf8BJgHOAfIB/wEmAcgB8gH/ARwBtAHmAf8BCQGKAcoB/wEAASMBnwH/AgABRwH/AgABOAH/ - AgABNgH/AgABNgH/AgABNgH/AgABNgH/AgABNgH/AgABNgH/AgABNgH/AgABNwH/AgABRQH/ARABlQHL - Af8BNAHpAf0B/wE2Ae4C/wE2Ae4C/wEoAdUB8AH/AQABFgGQAf8BAAEHAToB/wEYAZwBuQH/AQABIAGL - Af8CAAFMAf8TAAEBAwcBCQMWAR8DLwFJAUECQgFzAUwCTQGRAVACUgGjAVUCVwG6A18B4AFJAmIB9gHz - A/8BwwH7Av8BwwH7Av8B3QP/AWIBbgFyAfwBVwJaAb0DMQFPAwkBDFMAAf8DAAH/AwAB/wMAAf8DAAH/ - DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMFAf8DuwH/AwUB/wGtASQBGgH/AbMBJgEbAf8BswEmARsB/wGo - ASEBFgH/AUoBCwEEAf8BEgEKARkB/wGRAdEB6gH/AUkBugHdAf8BAAE6AZMB/wEzAQcBIgH/AbgBEAFI - Af8BvAEYAYcB/wHAARoBigH/Ab8BGwGMAf8BwAEaAYoB/wG8ARcBhgH/AbQBDwFAAf8BBgEYAS0B/wEA - AUABogH/AZ0B3gHxAf8BPgGgAcYB/wEyAQgBCQH/AZYBGAEPAf8BsgEmARsB/wGzASYBGwH/AaYBIgEZ - Af8DDQH/A7sB/wMFAf8CAAFMAf8BAAEcAYgB/wETAZQBtAH/AQABBQE6Af8BAAEHAYUB/wEAAYIBygH/ - AQABjgHXAf8BAAGKAdcB/wEAAYYBzwH/AQABRAHAAf8BAAErAaoB/wEAAQwBjAH/AgABMwH/AgABLQH/ - AgABLQH/AgABLQH/AgABLQH/AgABLQH/AgABLQH/AgABLwH/AgABMQH/AgABQQH/AQYBgAHBAf8BKQHj - AfsB/wEtAe4C/wEtAe4C/wEaAcYB6gH/AQABDgGMAf8BAAEHATwB/wEYAZ0BvQH/AQABIQGLAf8CAAFM - Af8TAAEBAwoBDQMqAUABTgJPAZcBWAJcAdEDXAHqA2cB8gNZAfUBXwFiAXMB+wHaAeoB9QH/AdgD/wHD - AfsC/wHFAf0C/wHvA/8DYgH2AVACUgGjAycBOgMHAQlTAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/ - AgAC/wIAAv8CAAL/JAADBQH/A8AB/wMFAf8BqQEiARgB/wGvASMBGQH/Aa8BIwEZAf8BrwEjARkB/wGl - AR4BFQH/AUYBCQECAf8BEwEcATEB/wGYAdoB8QH/AR8BjwG8Af8BAAElAUEB/wFCAQABEwH/ATYBCQEk - Af8BJQEPASoB/wElAQ8BKgH/ASkBDgEpAf8BPgEFASAB/wEsAQABEQH/AQABNQGQAf8BTQG8AeAB/wGE - AbsB4QH/ASQBBgEMAf8BkQEVAQwB/wGvASMBGQH/Aa8BIwEZAf8BrwEjARkB/wGiASABFwH/Aw0B/wPA - Af8DBQH/AgABTQH/AQABHAGLAf8BFgGUAbQB/wEAAQEBNgH/AQABFQGMAf8BHgHaAesB/wEjAeQB9QH/ - ASMB4gH1Af8BHgHZAfMB/wEYAcIB6QH/AQkBkwHRAf8BAAElAaMB/wIAASoB/wIAASMB/wIAASMB/wIA - ASMB/wIAASMB/wIAASMB/wIAASMB/wIAASYB/wIAASYB/wIAAS4B/wEAARQBkAH/AQoBngHWAf8BHgHR - AfAB/wEYAcMB6gH/AQABRQG9Af8CAAFDAf8BAAEDATwB/wEYAZ0BvQH/AQABIQGOAf8CAAFNAf8TAAEB - Aw8BFAM7AWMDXgHYBP8B+wP/AfMD/wHuA/8B4gP/AdED/wHGAf4C/wHEAfwC/wHWA/8B5wHxAfgB/wFX - AlwB3wNEAXkDGAEiAwQBBlMAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8kAAMF - Af8DxwH/AwUB/wGmAR4BFwH/AawBHwEYAf8BrAEfARgB/wGsAR8BGAH/AawBHwEYAf8BmgEXARAB/wE9 - AQcBBQH/ATABkAGyAf8BlgHSAfEB/wEAATgBogH/AQABMQGLAf8BAAE5AZMB/wEAAT8BmgH/AQABQQGc - Af8BAAE+AZcB/wEAATkBkwH/AQABLAGLAf8BGgGJAbsB/wGYAdgB8wH/ARQBIgE4Af8BRQEHAQIB/wGr - AR4BFwH/AawBHwEYAf8BrAEfARgB/wGsAR8BGAH/AZ8BHQEWAf8DDQH/A8cB/wMFAf8CAAGFAf8BAwEj - AY0B/wEYAZcBtAH/AgABNAH/AgABNQH/AQABGQGMAf8BAAEbAZIB/wEAARsBkgH/AQABGQGQAf8BAAEU - AYYB/wEAAQcBRwH/AgABNwH/AgABIAH/AgABGgH/AgABGgH/AgABGgH/AgABGgH/AgABGgH/AgABGgH/ - AgABGgH/AgABIAH/AgABIQH/AgABLAH/AgABRwH/AQABFQGKAf8BAAENAYUB/wIAAUAB/wIAAS0B/wIA - ATUB/wEYAZwBuQH/AQMBJAGRAf8CAAGFAf8TAAEBAw0BEgM4AVwBWAJbAcsBfwGFAY4B/gHqA/8BzQP/ - AcQB/AL/AcMB+wL/AcMB+wL/AcYB/gL/AdgD/wHzAfgB/AH/A10B8ANSAakDLgFHAwwBEAMCAQNTAAH/ - AwAB/wMAAf8DAAH/AwAB/0QAAwUB/wPPAf8DBQH/AaMBGwEVAf8BqAEcARYB/wGoARwBFgH/AagBHAEW - Af8BqAEcARYB/wGoARwBFgH/AY0BDwEKAf8BGAEKARUB/wGMAdIB8wH/AcMB8AH4Af8B1QHuAfcB/wHg - AfcB/AH/AecD/wHoA/8B5gH+Av8B3QHyAfoB/wHNAe0B9wH/AbUB7wH7Af8BPgGrAc8B/wEzAQMBBQH/ - AZYBFAEOAf8BqAEcARYB/wGoARwBFgH/AagBHAEWAf8BqAEcARYB/wGdARoBFAH/Aw4B/wPPAf8DBQH/ - AgABigH/AQQBJgGYAf8BGQGVAbYB/wEDASoBiAH/AQABAwEzAf8BAAEDATgB/wEAAQMBOAH/AQABAwE4 - Af8BAAEDATIB/wEAAQMBMgH/AQABAwEyAf8BAAEDAS0B/wIAASwB/wIAASwB/wIAASwB/wIAASwB/wIA - ASwB/wIAASwB/wIAASwB/wIAASwB/wEAAQMBLQH/AQABBAEzAf8BAAEFATQB/wEAAQUBNAH/AQABBQE6 - Af8BAAEFAToB/wEAAQQBOQH/AQABAwEzAf8BAQEqAYcB/wEYAZQBtQH/AQQBJgGYAf8CAAGKAf8TAAEB - AwcBCgMmATgDSgGLAVkCXAHPAlwBXwH4AfMB+AH8Af8B8gP/AeYD/wHoA/8B+gP/AX8BiAGSAf4DYQHu - A1UBsgM4AVwDFQEdAwUBBwMAAQFTAAH/AwAB/wMAAf8DAAH/AwAB/0QAAwUB/wPXAf8DBQH/AZ8BGAEU - Af8BpAEZARUB/wGkARkBFQH/AaQBGQEVAf8BpAEZARUB/wGkARkBFQH/AZkBFAEQAf8BLQEBAQUB/wGv - AdwB5AH/AeIB8AHyAf8BjQGkAa8B/wExATcBQwH/AR8BGwEpAf8BIAEcASoB/wEiAR8BLAH/ATwBSAGG - Af8BpQHAAcUB/wHvAvsB/wEoAYIBlwH/AT4BAgEBAf8BowEYARQB/wGkARkBFQH/AaQBGQEVAf8BpAEZ - ARUB/wGkARkBFQH/AZkBFwETAf8DDgH/A9cB/wMFAf8CAAGUAf8BAwEhAZsB/wEkAaIBwwH/ATcBtwHN - Af8BMwG5Ac0B/wEzAbkBzQH/ATEBuQHNAf8BMAG5Ac0B/wEwAbkBzQH/ATABuQHNAf8BMAG5Ac0B/wEw - AbkBzQH/ATABuQHNAf8BMAG5Ac0B/wEwAbkBzQH/ATABuQHNAf8BMAG5Ac0B/wEwAbkBzQH/ATABuQHN - Af8BMAG5Ac0B/wEzAbkBzQH/ATMBvAHPAf8BMwG/AdIB/wEzAb8B0gH/ATMBvwHSAf8BMwG/AdIB/wEx - AbwBzwH/ATABuQHNAf8BLwG2AcgB/wEfAZ4BwAH/AQMBIAGbAf8CAAGUAf8UAAMEAQUDEQEXAykBPwNE - AXkBVQJWAbQBXAJhAdwDXwHzAVABZAFqAfoBUAFkAWoB+gNdAe0BWwJeAdABUAJRAZ8DNgFZAxgBIQMH - AQoDAQECVwAB/wMAAf8DAAH/AwAB/wMAAf9EAAMFAf8D3wH/AwUB/wGcARUBEwH/AaEBFgEUAf8BoQEW - ARQB/wGhARYBFAH/AaEBFgEUAf8BoQEWARQB/wGbARMBEQH/ATMBAAEDAf8BjwGWAaEB/wEhAQABBgH/ - ATsCAAH/AT4CAAH/AYEBCAEGAf8BgQEIAQYB/wGBAQgBBgH/AT0CAAH/ATgBAAEBAf8BFQEJARgB/wFF - AUkBiAH/AT0CAAH/AaABFQETAf8BoQEWARQB/wGhARYBFAH/AaEBFgEUAf8BoQEWARQB/wGWARQBEgH/ - Aw8B/wPfAf8DBQH/AgABngH/AQABBwGUAf8BDwEpAZ8B/wEiAUkBrgH/ASUBTQGrAf8BJQFNAasB/wEj - AU0BqwH/ASIBTQGnAf8BIgFNAaYB/wEgAUoBpgH/ARwBRwGmAf8BHAFHAaIB/wEcAUcBoQH/ARwBRwGh - Af8BHAFHAaEB/wEcAUcBoQH/ARwBRwGhAf8BHAFHAaEB/wEcAUcBoQH/ARwBRwGhAf8BIAFHAaIB/wEg - AUcBpgH/ASMBSgGmAf8BJQFNAaYB/wElAU0BpwH/ASUBTQGrAf8BIwFNAasB/wEiAU0BqwH/AR8BSQGu - Af8BDQEpAZ8B/wEAAQcBlAH/AgABngH/FwABAQMEAQYDDAEQAxwBKAMxAU0DQgF1A04BmQFTAlUBrQNS - AakDSwGOATwCPQFnAykBPgMUARsDBwEJAwIBA1sAAf8DAAH/AwAB/wMAAf8DAAH/RAADTAHzA98B/wMc - Af8BigIPAf8BmwERARIB/wGbAREBEgH/AZsBEQESAf8BmwERARIB/wGbAREBEgH/AZoBEAERAf8BOAIA - Af8BMgIAAf8BOgIAAf8BmQEQAREB/wGaAREBEgH/AZsBEQESAf8BmwERARIB/wGbAREBEgH/AZoBEAER - Af8BkgENAQ4B/wE5AgAB/wEvAQABAQH/AToCAAH/AZoBEQESAf8BmwERARIB/wGbAREBEgH/AZsBEQES - Af8BmwERARIB/wFKAQ0BDgH/AyQB/wPdAf8DTgHwAgQBpAH/AgABngH/AgABlAH/AgABjwH/AgABjAH/ - AgABhgH/AgABggH/AgABTAH/AgABTAH/AgABSQH/AgABRgH/AgABRAH/AgABRAH/AgABRAH/AgABRAH/ - AgABRAH/AgABRAH/AgABRAH/AgABRAH/AgABRAH/AgABRAH/AgABRgH/AgABSQH/AgABTAH/AgABTAH/ - AgABggH/AgABhgH/AgABjAH/AgABjwH/AgABlAH/AgABngH/AgQBpAH/GwABAQMCAQMDBgEIAwwBEAMW - AR4DIgEyAyoBQAMpAT4DHwEsAxIBGQMKAQ0DBAEGAwEBAl8AAf8DAAH/AwAB/wMAAf8DAAH/RAADVwG9 - A78B/wOUAf8BMAEOARAB/wGKAQ0BEwH/AZMBCwESAf8BkwELARIB/wGTAQsBEgH/AZMBCwESAf8BkwEL - ARIB/wGSAQsBEQH/AY4BCQEQAf8BkgELARIB/wGTAQsBEgH/AZMBCwESAf8BkwELARIB/wGTAQsBEgH/ - AZMBCwESAf8BkwELARIB/wGTAQsBEgH/AZIBCwERAf8BjQEJAQ8B/wGSAQsBEgH/AZMBCwESAf8BkwEL - ARIB/wGTAQsBEgH/AZMBCwESAf8BgAEOARMB/wElAQ0BDwH/A7QB/wO0Af8DVAGuAgcBrAH/AgcBqQH/ - AgcBpgH/AgIBpgH/AgEBpgH/AgEBowH/AgEBnwH/AgABngH/AgABlwH/AgABlwH/AgABlgH/AgABlgH/ - AgABjgH/AgABjgH/AgABjgH/AgABjgH/AgABjgH/AgABjgH/AgABjgH/AgABjgH/AgABlgH/AgABlgH/ - AgABlwH/AgABlwH/AgABngH/AgEBnwH/AgEBowH/AgEBpgH/AgIBpgH/AgcBpgH/AgcBqQH/AgcBrAH/ - JAADAQECAwMEBAQGAQgDBgEIAwQBBgMDAQQDAAEBZwAB/wMAAf8DAAH/AwAB/wMAAf9EAAM0AVQDNAH/ - A+4B/wOTAf8DGwH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/ - AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMkAf8DsgH/A+oB/wMkAf8DLQFF - AgcBrAH/AgcBrAH/AgcBrAH/AgcBrAH/AgcBrAH/AgcBrAH/AgcBrAH/AgMBqAH/AgIBpAH/AgABogH/ - AgABnwH/AgABnwH/AgABnAH/AgABnAH/AgABnAH/AgABnAH/AgABnAH/AgABnAH/AgABnAH/AgABnAH/ - AgABnwH/AgABnwH/AgABogH/AgIBpwH/AgMBqAH/AgcBrAH/AgcBrAH/AgcBrAH/AgcBrAH/AgcBrAH/ - AgcBrAH/AgcBrAH//wAFAANKAY0DMwH/A80B/wP5Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/ - A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/ - A+sB/wO9Af8DHgH/A0gBhwQAA0gBhQIHAawB/wIHAawB/wIHAawB/wIHAawB/wIHAawB/wIHAawB/wIH - AawB/wIGAakB/wIEAakB/wIEAaYB/wIAAaQB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIA - AaEB/wIAAaEB/wIAAaEB/wIAAaQB/wIEAaYB/wIEAakB/wIGAasB/wIHAawB/wIHAawB/wIHAawB/wIH - AawB/wIHAawB/wIHAawB/wIHAawB/wNIAYX/AAkAAzcBWgNZAcMDKwH8AwUB/wMFAf8DBQH/AwUB/wMF - Af8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMFAf8DBQH/AwUB/wMF - Af8DBQH/AwUB/wNVAeoDVAGuAy0BRQgAAwcBCgNIAYUCBwGsAf8CBwGsAf8CBwGsAf8CBwGsAf8CBwGs - Af8CBwGsAf8CBwGsAf8CBwGsAf8CBwGrAf8CBgGqAf8CBQGqAf8CBQGoAf8CBQGkAf8CBQGkAf8CBQGk - Af8CBQGkAf8CBQGoAf8CBQGqAf8CBgGqAf8CBwGrAf8CBwGsAf8CBwGsAf8CBwGsAf8CBwGsAf8CBwGs - Af8CBwGsAf8CBwGsAf8CBwGsAf8DSAGFAwcBCv8AAQABQgFNAT4HAAE+AwABKAMAAYADAAFAAwABAQEA - AQEGAAEEFgAD//8A/wADAAHAAgABAwQACP8BgAIAAQEEAAL/AfgBBwT/CAAC/wHwAQME/wgAAv8B4AEB - Af8BwQL/CAAC/wHAAQEB/wHBAv8IAAL/AYABAQH/AcEC/wgAAv8BAAEBAf8BwQL/CAAB/wH+AQABAQH/ - AcEC/wgAAf8B/AEAAQEB/wLBAf8IAAH/AfwBAAEBAf8CwQH/CAAB/wGAAQABAQH/AsEB/wgAAf4CAAEB - Af8CwQH/CAAB+AIAAQMB/wLBAf8IAAHwAgABBwHgAQEBwAEHCAAB8AIAAR8B4AEBAcABBwgAAfACAAE/ - AeABAQHAAQcIAAHwAgABfwHgAQEBwAEHCAAB8AIAAf8B4AEBAcABBwgAAfABAAEBAv8CwQH/CAAB8AEA - AQMC/wLBAf8IAAHwAQABAwL/AsEB/wgAAfABAAEDAv8CwQH/CAAB8AEAAQMC/wLBAf8IAAHwAQABAwL/ - AcEC/wgAAfABAAEDAv8BwQL/CAAB+AEAAQcC/wHBAv8IAAH4AQABDwL/AcEC/wgAAfwBAAEfAv8BwQL/ - CAAB/wGAAX8C/wHBAv8IAAj/AYACAAEBBAAI/wHAAgABAwQACP8L + ARkDBQEHAwABAS8AAf8DAAH/AwAB/wMAAf8DAAH/RAADQQH5A8oB/wMVAf8BuQGPASIB/wHVAaIBKgH/ + AdUBogEqAf8B1QGiASoB/wHVAaIBKgH/AdUBogEqAf8B1QGiASoB/wHVAaIBKgH/AdUBogEqAf8B1QGi + ASoB/wHVAaIBKgH/AcQBlQEiAf8BiQE0AQ4B/wEJARgBHgH/AZQBOQENAf8B0wGhASkB/wHVAaIBKgH/ + AdUBogEqAf8B1QGiASoB/wHVAaIBKgH/AdUBogEqAf8B1QGiASoB/wHVAaIBKgH/AdUBogEqAf8B1QGi + ASoB/wHAAZMBJAH/Aw4B/wPFAf8DTgHwAgABmQH/AgABiwH/AgABRQH/AgABQQH/AgABOQH/AgABOQH/ + AgABNAH/AgABMQH/AgABMAH/AgABLQH/AgABKQH/AgABKQH/AgABKAH/AgABJQH/AgABIQH/AgABIQH/ + AgABIQH/AgABIQH/AgABJQH/AgABKAH/AgABKQH/AgABKQH/AgABLQH/AgABMAH/AgABMwH/AgABOQH/ + AgABOQH/AgABOQH/AgABQQH/AgABRQH/AgABiwH/AgABmQH/SAADAQECAwcBCQMYASIDOAFeAVMCVQGt + AV0CYQHiA20B9wNlAfQBXgJhAdoDUAGaAy0BRgMOARMDAwEELwAB/wMAAf8DAAH/AwAB/wMAAf9HAAH/ + A8IB/wMCAf8BzAGVAScB/wHVAZsBKQH/AdUBmwEpAf8B1QGbASkB/wHVAZsBKQH/AdUBmwEpAf8B1QGb + ASkB/wHVAZsBKQH/AdUBmwEpAf8B1QGbASkB/wG/AYsBHwH/AZMBNAEMAf8BCAEWAR8B/wEAAR4BjgH/ + ATcBJAEQAf8BlQE1AQwB/wHPAZcBJgH/AdUBmwEpAf8B1QGbASkB/wHVAZsBKQH/AdUBmwEpAf8B1QGb + ASkB/wHVAZsBKQH/AdUBmwEpAf8B1QGbASkB/wHFAZABJQH/AwgB/wPCAf8DAAH/AgABkQH/AgABggH/ + AQABDAGEAf8BAAEVAYUB/wEAARUBgAH/AQABFwGDAf8BAAEXAYMB/wEAARcBgwH/AQABFwFHAf8BAAEX + AUcB/wEAARcBRwH/AQABFwFHAf8BAAEXAUIB/wEAARQBPwH/AQABFAE/Af8BAAEUAT8B/wEAARQBPwH/ + AQABFAE/Af8BAAEUAT8B/wEAARQBPwH/AQABFAFEAf8BAAEUAUQB/wEAARQBRAH/AQABFAFEAf8BAAEV + AYMB/wEAARcBgwH/AQABFwGDAf8BAAEXAYMB/wEAARcBiAH/AQABDAGHAf8CAAGDAf8CAAGRAf9HAAEB + AwYBCAMWAR4DOAFdA1UBtQNkAfEB8wH4AfwB/wHtA/8B8wP/An8BiAH+A18B4ANIAYUDHwEsAwUBBy8A + Af8DAAH/AwAB/wMAAf8DAAH/RwAB/wO0Af8DAAH/Ac4BkAEmAf8B1QGUASgB/wHVAZQBKAH/AdUBlAEo + Af8B1QGUASgB/wHVAZQBKAH/AdUBlAEoAf8B1AGTASgB/wHQAZEBJgH/AbQBRgEZAf8BigEsAQwB/wEA + ARQBJAH/AQABAgFBAf8BAAECATwB/wEAAQkBQgH/ASEBGgEUAf8BkgEvAQsB/wG5AYABGwH/AdIBkgEn + Af8B1QGUASgB/wHVAZQBKAH/AdUBlAEoAf8B1QGUASgB/wHVAZQBKAH/AdUBlAEoAf8BxQGLASQB/wMH + Af8DtAH/AwAB/wIAAYoB/wEAAQ4BhwH/AQcBhQGpAf8BHgGrAdQB/wE3AdEB3gH/ATwB1AHhAf8BPwHU + AeEB/wFBAdQB4QH/AUEB1AHhAf8BPwHUAeEB/wE8AdQB4QH/ATwB1AHhAf8BPAHTAeAB/wE8AdEB3gH/ + ATwB0QHeAf8BPAHRAd4B/wE8AdEB3gH/ATwB0QHeAf8BPAHRAd4B/wE8AdEB3gH/ATwB0QHeAf8BPAHR + Ad4B/wE8AdEB3gH/ATwB0QHeAf8BPAHRAeEB/wE8AdQB4QH/ATwB1AHhAf8BNwHUAeEB/wEfAbIB2AH/ + AQkBhQGvAf8BAAEOAYsB/wIAAYoB/0MAAQEDBQEHAxQBGwM1AVYDVAGvAVoCXQHwAfMB+AH8Af8B1AP/ + AcQB/AL/AcYB/gL/AegD/wJfAWQB+wFVAlYBsQMtAUUDBwEKLwAB/wMAAf8DAAH/AwAB/wMAAf9HAAH/ + A6cB/wMAAf8BzgGHASUB/wHVAYsBJwH/AdUBiwEnAf8BywGEASMB/wG9AUQBHAH/AcQBgAEgAf8BwAFG + AR4B/wGVASoBCwH/AY0BJwEMAf8BJQEYARQB/wEAAQwBOQH/AgABLwH/AQcBkQGyAf8BPAHVAeYB/wEA + ASUBiQH/AgABNQH/AQABEAEwAf8BOwEeAQ8B/wGSASkBCwH/AbEBPQEXAf8BwwGAAR8B/wHDAYABHwH/ + AboBQwEbAf8B0wGKASYB/wHVAYsBJwH/AcUBggEjAf8DBwH/A6cB/wMAAf8CAAGBAf8BAAEaAZAB/wEa + AaEBwgH/AQsBRAGkAf8BAAEWAUUB/wEAARYBhAH/AQEBFgGIAf8BAgEWAYgB/wECARYBgQH/AQEBFgGB + Af8BAAEWAYEB/wEAARYBRQH/AQABFgFEAf8BAAEWAUQB/wEAARYBRAH/AQABFgFEAf8BAAEWAUQB/wEA + ARYBRAH/AQABFgFEAf8BAAEWAUQB/wEAARYBgQH/AQABFgGBAf8BAAEWAYEB/wEAARYBgQH/AQIBFwGI + Af8BBQEaAYgB/wEAARYBhAH/AQABFgFFAf8BCwFGAaQB/wEaAaEBwwH/AQABGgGRAf8CAAGBAf8/AAEB + AwQBBgMSARgDMgFQA1IBqQFZAmQB7AJ/AYgB/gHZA/8BxAH8Av8BwwH7Av8BwwH7Av8B1wP/A6gB/QFX + AlkBvwMyAVADCAELLwAB/wMAAf8DAAH/AwAB/wMAAf9HAAH/A5sB/wMAAf8BzgFIASMB/wHVAYMBJQH/ + AcsBRgEhAf8BgwEfAQwB/wExARcBDwH/AT8BGgENAf8BNwEYAQ4B/wEIARUBIAH/AQABDwE9Af8CAAE5 + Af8BAAEUAUMB/wE2AdAB5wH/AUEB3QHxAf8BJgGnAbEB/wFHAeEB9wH/AR0BqQHFAf8CAAEvAf8BAAED + AUAB/wEAARIBNQH/ARkBFQEXAf8BPQEZAQ0B/wE+ARkBDQH/ASwBFwETAf8BlAEkAQkB/wHTAYIBJAH/ + AcUBRAEhAf8DBgH/A5sB/wMAAf8CAAFHAf8BAAEbAYsB/wETAZwBvQH/AQABAgEyAf8CAAE+Af8BAAEc + AZgB/wEAAR8BnQH/AQABHQGdAf8BAAEcAZwB/wEAARwBlgH/AQABGwGVAf8BAAEZAZEB/wIAAT4B/wIA + ATUB/wIAATUB/wIAATUB/wIAATUB/wIAATUB/wIAATwB/wEAARUBkgH/AQABFwGUAf8BAAENAY0B/wEA + ASMBmAH/AQABBgGOAf8BAAEjAZ8B/wEAARMBkwH/AgABPgH/AgABLwH/AgABMAH/ARMBlwG0Af8BAAEa + AYgB/wIAAUcB/zsAAQEDBAEGAxABFQMsAUMBTwJQAZsBWAJiAekCfwGIAf4B3gP/AcYB/gL/AcMB+wL/ + AcMB+wL/AcgD/wHsA/8CXwFkAfsBVQJWAbEDLQFFAwcBCi8AAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIA + Av8CAAL/AgAC/wIAAv8nAAH/A5MB/wMAAf8BzAFAASEB/wHTAUMBIwH/Ac4BQAEhAf8BigEcAQkB/wEA + ASQBhAH/AQABHAGNAf8BAAEUAYgB/wEAAQoBgQH/AQABPwGfAf8BOgHVAeYB/wGQAe8B/gH/AR0BmwG8 + Af8BKQEAARYB/wGRAQABFAH/ARgBFQEtAf8BNAHKAeYB/wGQAe0B+gH/ASQBtAHKAf8BAAElAZIB/wEA + AQwBgQH/AQABFQGHAf8BAAEmAZYB/wEGARYBKQH/AZMBHgEIAf8B0gFDASMB/wHDATwBHwH/AwUB/wOT + Af8DAAH/AgABRwH/AQABHAGLAf8BEwGdAb0B/wEAAQIBOQH/AQABGwGVAf8BMAHWAekB/wExAdcB8AH/ + ATAB0gHwAf8BMAHRAfAB/wEwAdEB7gH/AS0BzQHrAf8BKgHFAecB/wIAAYoB/wIAAT8B/wIAAT8B/wIA + AT8B/wIAAT8B/wIAAUAB/wEAAQEBjAH/ASsBwQHiAf8BJQHEAegB/wEDAYoBzwH/ATkB4QH1Af8BAAE5 + AcMB/wE7AeEB9QH/ARYBogHVAf8CAAGSAf8CAAE7Af8CAAE4Af8BEQGUAbQB/wEAARcBiAH/AgABRwH/ + OAADBAEFAw0BEgMoATwDSgGKAV4CYQHaA6gB/QHiA/8BxgH+Av8BwwH7Av8BwwH7Av8ByQP/AekD/wOo + Af0BXAJhAdwDRwGCAx0BKgMFAQcvAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/ + JwAB/wOPAf8DAAH/AckBPQEgAf8B0AFAASIB/wHQAUABIgH/AaYBKAEQAf8BDgESASAB/wEAAT4BowH/ + ASYBqwHSAf8BkgHrAfgB/wGJAeoB9wH/ASUBogG8Af8BJQESASsB/wGaAQYBLAH/Ab8BGQGLAf8BwQEe + AZMB/wG7ARcBggH/AYIBAAEeAf8BHQEuAUgB/wE0AcMB2wH/AZMB8AH8Af8BhgHhAfMB/wETAZEBuQH/ + AQABOQGfAf8BOwETAQsB/wG8ATUBGgH/AdABQAEiAf8BwAE5AR4B/wMFAf8DjwH/AwAB/wIAAUcB/wEA + ARwBiwH/ARMBnQG9Af8BAAECAT0B/wEAAR0BnwH/ATcB4gH1Af8BPgHsAv8BQwHuAv8BRAHuAv8BRAHu + Av8BRAHuAv8BIwHAAesB/wIAAY8B/wIAAUQB/wIAAUEB/wIAAT8B/wIAAUAB/wIAAYIB/wEFAUMBvgH/ + ATUB2gH4Af8BBQGYAd8B/wEkAcQB8QH/ARgBtgHqAf8BEAGsAeUB/wEwAdYB+QH/AQoBnwHhAf8BEwGf + AdMB/wEAAQwBjAH/AgABOwH/AQ4BlAG0Af8BAAEXAYgB/wIAAUcB/yQAAwEBAgMDBAQEBgQIAQsDDwEU + AyQBNgFGAkcBgAFYAlwB0QJfAWcB+wHpA/8ByAP/AcMB+wL/AcMB+wL/AcwD/wHwA/8CXwFnAfsBWQJd + AdcDTAGSAysBQgMNARIDAwEELwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/ycA + Af8DjwH/AwAB/wHHATsBIAH/Ac4BPgEiAf8BzgE+ASIB/wGmASgBEQH/Ag4BHAH/AQABLgGQAf8BDQGH + AakB/wEAARUBLQH/ATQBAAEPAf8BpQEHAS8B/wHCARoBjAH/AcsBKQGkAf8B0gExAbEB/wHUATIBtAH/ + AdEBLwGwAf8BygEoAaIB/wG+ARgBhAH/AZIBAQElAf8BJgEAAQ8B/wEAASgBRgH/ARIBigGsAf8BAAEj + AYgB/wE6ARMBCwH/Ab0BNAEbAf8BzgE+ASIB/wG/ATgBHgH/AwUB/wOPAf8DAAH/AgABRwH/AQABGwGL + Af8BEwGcAbkB/wEAAQIBNwH/AQABHQGfAf8BNwHhAfUB/wE8AecC/wE9AegC/wE+AegC/wFAAeoC/wFE + Ae4C/wEjAcAB6wH/AgABjgH/AgABPgH/AgABPQH/AgABPAH/AgABPAH/AgABgQH/ARsBoQHUAf8BPAHm + Av8BAAE1AcEB/wE8AeYC/wEEAY8B1AH/ASkByQHxAf8BKQHJAfEB/wEEAY8B1QH/ATIB3AH1Af8BAAEb + AZgB/wIAATYB/wESAZQBtAH/AQABFwGIAf8CAAFHAf8cAAMCAQMDBgEIAw0BEQMXASADIgEyAyoBQAMs + AUMDMQFOA0cBggFZAlwBzAFQAV4BZgH6Ae0D/wHJA/8BwwH7Av8BwwH7Av8BzQP/AfgD/wNcAfgBXAJe + Ac4BSAJJAYcDKwFCAxEBFwMEAQYDAAEBLwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/ + AgAC/ycAAf8DkAH/AwAB/wHFATkBHwH/AcwBPAEhAf8BzAE8ASEB/wGkASUBEAH/AQsBDgEeAf8BAAEo + AYkB/wEAAS0BjQH/ARcBBwEhAf8BvAEQAUUB/wHEASABnAH/AdEBMAGvAf8B3AE8AcEB/wHmAUUBzQH/ + AekBSAHSAf8B5gFGAc0B/wHdAT0BwQH/AdABMAGvAf8BxQEhAZsB/wGzAQwBNAH/AQABFQE2Af8BAAE0 + AZAB/wEAAR0BgwH/ATkBEgELAf8BuwEzARoB/wHMATwBIQH/Ab0BNgEdAf8DBQH/A5AB/wMAAf8CAAFH + Af8BAAEbAYsB/wETAZsBuAH/AQABAQE1Af8BAAEVAZIB/wEgAbsB4AH/ASQBvAHmAf8BJAG/AeYB/wEr + Ab8B5AH/ASsBwQHnAf8BKwHFAesB/wEmAb8B5AH/AgABhAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/ + AgABPwH/AgABhQH/AgABjQH/AgABiAH/AgABjwH/AgABiwH/AgABlAH/AgABlgH/AgABkwH/AgABkgH/ + AgABQAH/AgABNQH/ARMBlAG0Af8BAAEXAYgB/wIAAUcB/xcAAQEDBAEFAwoBDgMaASUDMQFNA0QBeQFP + AlABmwFTAlQBrANUAa4DVQG1AVoCXgHYA20B9wH0A/8BygP/AcMB+wL/AcQB/AL/AdEH/wNtAfcBWAJb + AcYDQwF4AyYBOAMQARUDBAEGAwABATMAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIA + Av8nAAH/A5IB/wMAAf8BwwE2AR4B/wHKATkBIAH/AcgBOAEfAf8BjAEXAQYB/wEAAQ0BKgH/AQABLQGM + Af8BAAE5AZ0B/wE0AQUBIQH/AcIBGgGQAf8BzQErAasB/wHeAT8BxAH/Ae8BhwHaAf8B+wGTAewB/wH9 + AZgB9AH/AfsBkwHsAf8B7wGHAdoB/wHeAT8BxAH/Ac4BKwGsAf8BvQEXAYQB/wEDARcBNwH/AQEBQAGd + Af8BAAEcAYQB/wEnAQ4BEAH/AbABKwEVAf8BygE5ASAB/wG7ATMBHAH/AwUB/wOSAf8DAAH/AgABRwH/ + AQABGwGKAf8BEwGXAbYB/wIAATUB/wIAAT4B/wIAAY8B/wIAAZcB/wIAAZcB/wIAAY8B/wIAAY8B/wIA + AY8B/wIAAYgB/wIAAUAB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIA + AT4B/wIAAUQB/wIAAUQB/wIAAUgB/wIAAYMB/wIAAYMB/wIAAUcB/wIAATYB/wIAATUB/wETAZQBtAH/ + AQABFwGIAf8CAAFHAf8TAAEBAwQBBgMPARQDJAE1AT8CQAFvA1YBswFbAmEB4QNlAfQBTQFaAWQB+gNc + AfgDWQH1AU0BVAFiAvoD/wHNA/8BwwH7Av8BxAH8Av8B1AP/AfMB+AH8Af8DWQH1AVYCWAHBA0ABcAMg + AS4DCwEPAwQBBQMAAQEbAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA + Af8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/w8AAf8DlgH/AwAB/wHB + ATMBHgH/AcgBNgEfAf8BxAE0AR0B/wGHARQBBgH/AQABEwE9Af8BAQE7AZcB/wEAATYBlwH/AYABBAEl + Af8BxgEgAZoB/wHVATQBtwH/AeoBgAHSAf8B/AGWAfEC/wGoAf4C/wGvA/8BqAH+Af8B/AGWAfEB/wHq + AYAB0gH/AdYBNAG3Af8BxQEeAZMB/wEaARABLAH/AQABQgGgAf8BAAEoAY0B/wEFAQ0BIQH/AYwBFQEF + Af8BxwE2AR8B/wG5ATABHAH/AwYB/wOWAf8DAAH/AgABRgH/AQABGQGFAf8BEAGVAbQB/wIAATUB/wIA + ATYB/wIAAUcB/wIAAYMB/wIAAYMB/wIAAUQB/wIAAUQB/wIAAUEB/wIAAT0B/wIAATwB/wIAATwB/wIA + ATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAAT4B/wIAAUQB/wIAAUQB/wIAAUQB/wIA + AYMB/wIAAYMB/wIAAUcB/wIAATYB/wIAATUB/wETAZQBtAH/AQABFwGIAf8CAAFHAf8QAAMCAQMDCwEP + AyMBNAFEAkUBfAFXAloBxQNtAfcB8wH4AfwB/wHxA/8B5wP/AeoD/wHvA/8B5AP/Ac0D/wHDAfsC/wHG + Af4C/wHaA/8B8wH4AfwB/wFkAmUB9AFWAlgBvAM9AWkDHQEqAwoBDQMDAQQjAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/ + AgAC/wIAAv8CAAL/AgAC/w8AAf8DmgH/AwAB/wG+ATIBHQH/AcUBNAEeAf8BrwEoARUB/wE0AQ4BCQH/ + AQABHQGLAf8BGAGJAasB/wEAASUBSAH/AakBDAE2Af8ByAEkAaEB/wHaATkBvAH/AfABiAHcAf8B/gGf + AfoC/wG0A/8BwgP/AbQC/wH+AZ8B+gH/AfABiAHcAf8B2wE5Ab0B/wHJASMBnQH/AUABBQEkAf8BAAE/ + AZ0B/wEHAUQBogH/AQABEgE9Af8BhgETAQUB/wHDATMBHQH/AbYBLwEbAf8DBgH/A5oB/wMAAf8CAAFF + Af8BAAEXAYMB/wESAZQBtAH/AgABNQH/AgABNgH/AgABRwH/AgABgwH/AgABgwH/AgABRAH/AgABRAH/ + AgABPwH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/ + AgABPAH/AgABQAH/AgABRAH/AgABRAH/AgABgwH/AgABgwH/AgABRwH/AgABNgH/AgABNQH/ARMBlAG0 + Af8BAAEXAYgB/wIAAUcB/xAAAwMBBAMYASEDPQFpAVcCWQG/AVMBXgFmAfoB8QP/Ac4D/wHEAfwC/wHD + AfsC/wHDAfsC/wHDAfsC/wHDAfsC/wHDAfsC/wHGAf4C/wHeA/8CfwGIAf4BTgJdAfABVQJXAbcDOwFj + AxoBJQMJAQwDAwEEJwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + DgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8PAAH/A58B/wMAAf8BuwEv + ARwB/wHAATABHAH/AYYBEgEEAf8BAAEMASUB/wEAASsBlAH/AR8BlQG5Af8BDwEWATEB/wG4AQ8BQwH/ + AccBJAGgAf8B2QE4AbsB/wHvAYUB2gH/Af4BnQH6Av8BsQP/AbwD/wGxAv8B/gGdAfoB/wHvAYUB2gH/ + AdkBOAG8Af8BxwEjAZ8B/wGkAQkBMgH/AQABLwGJAf8BJQGXAbgB/wEAARsBigH/ATMBDQEKAf8BrQEm + ARQB/wGzASwBGgH/AwYB/wOfAf8DAAH/AgABRQH/AQABFwGDAf8BEwGUAbQB/wIAATUB/wIAAUcB/wEA + AScBrAH/AQABLAG2Af8BAAEqAbAB/wEAARkBogH/AQABAwGOAf8CAAFHAf8CAAE+Af8CAAE8Af8CAAE8 + Af8CAAE8Af8CAAE8Af8CAAE8Af8CAAE8Af8CAAE8Af8CAAE8Af8CAAE8Af8CAAE/Af8CAAFEAf8CAAFE + Af8CAAGDAf8CAAGDAf8CAAFHAf8CAAE2Af8CAAE1Af8BEgGUAbQB/wEAARcBiAH/AgABRwH/EAADBAEG + AyMBMwFNAk4BlQNlAfQE/wHaA/8B2QP/AeAD/wHdA/8BzwP/AcUB/QL/AcMB+wL/AcMB+wL/AdMD/wJ/ + AYgB/gFOAl0B8AFVAlcBtwM6AWADGAEiAwgBCwMCAQMrAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/ + AgAC/w8AAf8DpAH/AwAB/wG5ASwBGgH/AaABHgEOAf8BLgEKAQgB/wEAAQwBRAH/AQ4BQwGiAf8BAAE0 + AZIB/wE8AQABDQH/AbcBDwFGAf8BwgEgAZsB/wHTATIBswH/AeYBRwHPAf8B+gGRAesC/wGgAfwC/wGo + Af4C/wGgAfwB/wH6AZEB6wH/AeYBRwHPAf8B0wEyAbQB/wHDAR8BmgH/AbYBDQE6Af8BEAEIARwB/wEK + AUUBpAH/AQABKQGRAf8BAAEEASAB/wGEARABAgH/AakBJQEVAf8DBgH/A6QB/wMAAf8CAAFGAf8BAAEX + AYUB/wETAZQBtAH/AgABNQH/AQABHQGSAf8BNwHkAfUB/wE8AekC/wE1AeAB+AH/ARgBsQHfAf8BAAE1 + AbUB/wEAAQQBigH/AgABPgH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/ + AgABPAH/AgABPQH/AgABQQH/AgABRgH/AgABhAH/AgABjQH/AgABjAH/AgABgwH/AgABNwH/AgABNQH/ + ARABlQG0Af8BAAEZAYgB/wIAAUcB/xAAAwQBBgMiATIBTAJNAZEDZAHxA6gB/QJ/AYUB/gOoAf0CXwFk + AfsBUQFlAWsB/AHnAfEB+AH/AdUD/wHDAfsC/wHDAfsC/wHgA/8CXwFgAfsBWgJdAdMDQgF0AxoBJQMG + AQgDAQECLwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIA + Av8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8PAAH/A6oB/wMAAf8BqQEiARMB/wE2 + AQsBCAH/AScBlgG1Af8BQAHBAeQB/wGUAdgB6wH/AQABGgGIAf8BAAENAS4B/wGhAQUBLQH/Ab8BGAGO + Af8BygEoAaYB/wHaATkBvAH/AegBgQHSAf8B9AGKAeEB/wH5AZAB6AH/AfQBigHhAf8B6AGBAdIB/wHa + ATkBvQH/AcsBKAGlAf8BwAEXAYoB/wFGAQQBIQH/AQABCwE7Af8BBwFFAakB/wGcAeEB7wH/ATIBsAHW + Af8BGgETARsB/wGQARcBCgH/AwcB/wOqAf8DAAH/AgABRwH/AQABFwGIAf8BEwGUAbQB/wIAATUB/wEA + AQcBigH/AQEBjAHPAf8BAQGTAdwB/wECAY8B1QH/AQABPwHDAf8BAAEZAaUB/wIAAYkB/wIAAUMB/wIA + ATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAATwB/wIAAT4B/wIAAUYB/wEA + AQEBjgH/AQABNwG4Af8BFQGaAdIB/wEMAY0BywH/AQABHgGlAf8CAAE/Af8CAAE1Af8BEwGXAbYB/wEA + ARsBigH/AgABRwH/EAADAwEEAxYBHgM2AVkBTwJRAZwBVwJZAb8BWQJcAckBWgJdAcoBXAJeAc4BWAJf + AeMBVwJiAfYB8AP/AcMB+wL/AcMB+wL/Ad0D/wFdAWkBbQH8A1kBxwM3AVsDDwEUAwABAU8AAf8DAAH/ + AwAB/wMAAf8DAAH/DgAC/wIAAv8CAAL/AgAC/wIAAv8nAAH/A7AB/wMAAf8BrwEjARYB/wFFAQoBAgH/ + ASgBBQEHAf8BIwE/AYUB/wGwAe4B9wH/AZsB4wHvAf8BAAEdAZEB/wEAARkBMgH/AaUBCQE1Af8BwAEc + AZUB/wHLASoBqQH/AdYBNQG3Af8B3gE/AcIB/wHhAUEBxgH/Ad4BPwHCAf8B1gE1AbcB/wHLASoBqAH/ + AcMBGwGRAf8BgQEFAScB/wEAASMBgAH/AQABPQGlAf8BtwHzAfoB/wGWAdoB5AH/ARsBEAEYAf8BOwEJ + AQQB/wGjAR4BEwH/AwcB/wOwAf8DAAH/AgABRwH/AQABFwGIAf8BEwGUAbQB/wIAATUB/wEAARUBjwH/ + ASEBxwHoAf8BKAHQAfMB/wEpAcsB8gH/AR8BuwHmAf8BCQGNAcwB/wEAASABpQH/AgABgQH/AgABPAH/ + AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABPAH/AgABRgH/AQABNQG1 + Af8BKgHQAfEB/wE6AekB/QH/ATcB5QH7Af8BEwGpAdwB/wEAAQQBhAH/AQABAQE1Af8BEwGbAbgB/wEA + ARsBiwH/AgABRwH/EAADAgEDAwoBDQMcAScDLwFJAzwBZgNEAXoDSAGEAU4CTwGXAVkCXAHMAVMCZAHx + BP8BwwH7Av8BwwH7Av8B1wP/A6gB/QNbAcgDNwFaAwsBD1MAAf8DAAH/AwAB/wMAAf8DAAH/DgAC/wIA + Av8CAAL/AgAC/wIAAv8nAAH/A7YB/wMAAf8BsAEiARYB/wGyASIBFQH/AZ8BGQENAf8BRgEJAQAB/wEN + AQUBFAH/AZMB1AHoAf8BlgHeAe8B/wEAASwBlgH/AQUBEAEnAf8BuAENAUAB/wG/ARoBkwH/AcYBIwGg + Af8BywEpAaYB/wHNASsBqgH/AcsBKQGmAf8BxgEjAaAB/wHAARoBkQH/AZ0BCAExAf8BAAElAT8B/wEA + ATwBqAH/Aa8B6wH4Af8BOQGgAcMB/wErAgQB/wFIAQkBAAH/Aa0BIAETAf8BqQEgARUB/wMHAf8DtgH/ + AwAB/wIAAUcB/wEAARcBiAH/ARIBlAG0Af8CAAE1Af8BAAEQAY4B/wEaAcMB5wH/ASEBzgHyAf8BIQHI + AfIB/wEXAbQB5gH/AQQBigHKAf8BAAEeAZ8B/wIAAUIB/wIAATMB/wIAATEB/wIAATEB/wIAATEB/wIA + ATEB/wIAATEB/wIAATEB/wIAATEB/wIAATIB/wIAAUAB/wELAZUBywH/AS8B6QH9Af8BMQHuAv8BMQHu + Av8BIwHVAfAB/wEAAREBkAH/AQABAgE1Af8BEwGcAbkB/wEAARsBiwH/AgABRwH/EwABAQMHAQkDFgEf + Ay8BSQFBAkIBcwFMAk0BkQFQAlIBowFVAlcBugNfAeABSQJiAfYB8wP/AcMB+wL/AcMB+wL/Ad0D/wFd + AWkBbQH8AVcCWgG9AzEBTwMJAQxTAAH/AwAB/wMAAf8DAAH/AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/ + JwAB/wO7Af8DAAH/Aa0BHwEVAf8BswEhARYB/wGzASEBFgH/AagBHAERAf8BRQEGAQAB/wENAQUBFAH/ + AZEB0QHqAf8BRAG6Ad0B/wEAATUBkwH/AS4BAgEdAf8BuAELAUMB/wG8ARMBhwH/AcABFQGKAf8BvwEW + AYwB/wHAARUBigH/AbwBEgGGAf8BtAEKATsB/wEBARMBKAH/AQABOwGiAf8BnQHeAfEB/wE5AaABxgH/ + AS0BAwEEAf8BlgETAQoB/wGyASEBFgH/AbMBIQEWAf8BpgEdARQB/wMIAf8DuwH/AwAB/wIAAUcB/wEA + ARcBiAH/AQ4BlAG0Af8CAAE1Af8BAAECAYUB/wEAAYIBygH/AQABjgHXAf8BAAGKAdcB/wEAAYYBzwH/ + AQABPwHAAf8BAAEmAaoB/wEAAQcBjAH/AgABLgH/AgABKAH/AgABKAH/AgABKAH/AgABKAH/AgABKAH/ + AgABKAH/AgABKgH/AgABLAH/AgABPAH/AQEBgAHBAf8BJAHjAfsB/wEoAe4C/wEoAe4C/wEVAcYB6gH/ + AQABCQGMAf8BAAECATcB/wETAZ0BvQH/AQABHAGLAf8CAAFHAf8TAAEBAwoBDQMqAUABTgJPAZcBWAJc + AdEDXAHqA2cB8gNZAfUCXwFkAfsB2gHqAfUB/wHYA/8BwwH7Av8BxQH9Av8B7wP/A2IB9gFQAlIBowMn + AToDBwEJUwAB/wMAAf8DAAH/AwAB/wMAAf8OAAL/AgAC/wIAAv8CAAL/AgAC/ycAAf8DwAH/AwAB/wGp + AR0BEwH/Aa8BHgEUAf8BrwEeARQB/wGvAR4BFAH/AaUBGQEQAf8BQQEEAQAB/wEOARcBLAH/AZgB2gHx + Af8BGgGPAbwB/wEAASABPAH/AT0BAAEOAf8BMQEEAR8B/wEgAQoBJQH/ASABCgElAf8BJAEJASQB/wE5 + AQABGwH/AScBAAEMAf8BAAEwAZAB/wFIAbwB4AH/AYQBuwHhAf8BHwEBAQcB/wGRARABBwH/Aa8BHgEU + Af8BrwEeARQB/wGvAR4BFAH/AaIBGwESAf8DCAH/A8AB/wMAAf8CAAFIAf8BAAEXAYsB/wERAZQBtAH/ + AgABMQH/AQABEAGMAf8BGQHaAesB/wEeAeQB9QH/AR4B4gH1Af8BGQHZAfMB/wETAcIB6QH/AQQBkwHR + Af8BAAEgAaMB/wIAASUB/wIAAR4B/wIAAR4B/wIAAR4B/wIAAR4B/wIAAR4B/wIAAR4B/wIAASEB/wIA + ASEB/wIAASkB/wEAAQ8BkAH/AQUBngHWAf8BGQHRAfAB/wETAcMB6gH/AQABQAG9Af8CAAE+Af8CAAE3 + Af8BEwGdAb0B/wEAARwBjgH/AgABSAH/EwABAQMPARQDOwFjA14B2AT/AfsD/wHzA/8B7gP/AeID/wHR + A/8BxgH+Av8BxAH8Av8B1gP/AecB8QH4Af8BVwJcAd8DRAF5AxgBIgMEAQZTAAH/AwAB/wMAAf8DAAH/ + AwAB/w4AAv8CAAL/AgAC/wIAAv8CAAL/JwAB/wPHAf8DAAH/AaYBGQESAf8BrAEaARMB/wGsARoBEwH/ + AawBGgETAf8BrAEaARMB/wGaARIBCwH/ATgBAgEAAf8BKwGQAbIB/wGWAdIB8QH/AQABMwGiAf8BAAEs + AYsB/wEAATQBkwH/AQABOgGaAf8BAAE8AZwB/wEAATkBlwH/AQABNAGTAf8BAAEnAYsB/wEVAYkBuwH/ + AZgB2AHzAf8BDwEdATMB/wFAAQIBAAH/AasBGQESAf8BrAEaARMB/wGsARoBEwH/AawBGgETAf8BnwEY + AREB/wMIAf8DxwH/AwAB/wIAAYUB/wEAAR4BjQH/ARMBlwG0Af8CAAEvAf8CAAEwAf8BAAEUAYwB/wEA + ARYBkgH/AQABFgGSAf8BAAEUAZAB/wEAAQ8BhgH/AQABAgFCAf8CAAEyAf8CAAEbAf8CAAEVAf8CAAEV + Af8CAAEVAf8CAAEVAf8CAAEVAf8CAAEVAf8CAAEVAf8CAAEbAf8CAAEcAf8CAAEnAf8CAAFCAf8BAAEQ + AYoB/wEAAQgBhQH/AgABOwH/AgABKAH/AgABMAH/ARMBnAG5Af8BAAEfAZEB/wIAAYUB/xMAAQEDDQES + AzgBXAFYAlsBywJ/AYQB/gHqA/8BzQP/AcQB/AL/AcMB+wL/AcMB+wL/AcYB/gL/AdgD/wHzAfgB/AH/ + A10B8ANSAakDLgFHAwwBEAMCAQNTAAH/AwAB/wMAAf8DAAH/AwAB/0cAAf8DzwH/AwAB/wGjARYBEAH/ + AagBFwERAf8BqAEXAREB/wGoARcBEQH/AagBFwERAf8BqAEXAREB/wGNAQoBBQH/ARMBBQEQAf8BjAHS + AfMB/wHDAfAB+AH/AdUB7gH3Af8B4AH3AfwB/wHnA/8B6AP/AeYB/gL/Ad0B8gH6Af8BzQHtAfcB/wG1 + Ae8B+wH/ATkBqwHPAf8BLgIAAf8BlgEPAQkB/wGoARcBEQH/AagBFwERAf8BqAEXAREB/wGoARcBEQH/ + AZ0BFQEPAf8DCQH/A88B/wMAAf8CAAGKAf8BAAEhAZgB/wEUAZUBtgH/AQABJQGIAf8CAAEuAf8CAAEz + Af8CAAEzAf8CAAEzAf8CAAEtAf8CAAEtAf8CAAEtAf8CAAEoAf8CAAEnAf8CAAEnAf8CAAEnAf8CAAEn + Af8CAAEnAf8CAAEnAf8CAAEnAf8CAAEnAf8CAAEoAf8CAAEuAf8CAAEvAf8CAAEvAf8CAAE1Af8CAAE1 + Af8CAAE0Af8CAAEuAf8BAAElAYcB/wETAZQBtQH/AQABIQGYAf8CAAGKAf8TAAEBAwcBCgMmATgDSgGL + AVkCXAHPA1wB+AHzAfgB/AH/AfID/wHmA/8B6AP/AfoD/wJ/AYgB/gNhAe4DVQGyAzgBXAMVAR0DBQEH + AwABAVMAAf8DAAH/AwAB/wMAAf8DAAH/RwAB/wPXAf8DAAH/AZ8BEwEPAf8BpAEUARAB/wGkARQBEAH/ + AaQBFAEQAf8BpAEUARAB/wGkARQBEAH/AZkBDwELAf8BKAIAAf8BrwHcAeQB/wHiAfAB8gH/AY0BpAGv + Af8BLAEyAT4B/wEaARYBJAH/ARsBFwElAf8BHQEaAScB/wE3AUMBhgH/AaUBwAHFAf8B7wL7Af8BIwGC + AZcB/wE5AgAB/wGjARMBDwH/AaQBFAEQAf8BpAEUARAB/wGkARQBEAH/AaQBFAEQAf8BmQESAQ4B/wMJ + Af8D1wH/AwAB/wIAAZQB/wEAARwBmwH/AR8BogHDAf8BMgG3Ac0B/wEuAbkBzQH/AS4BuQHNAf8BLAG5 + Ac0B/wErAbkBzQH/ASsBuQHNAf8BKwG5Ac0B/wErAbkBzQH/ASsBuQHNAf8BKwG5Ac0B/wErAbkBzQH/ + ASsBuQHNAf8BKwG5Ac0B/wErAbkBzQH/ASsBuQHNAf8BKwG5Ac0B/wErAbkBzQH/AS4BuQHNAf8BLgG8 + Ac8B/wEuAb8B0gH/AS4BvwHSAf8BLgG/AdIB/wEuAb8B0gH/ASwBvAHPAf8BKwG5Ac0B/wEqAbYByAH/ + ARoBngHAAf8BAAEbAZsB/wIAAZQB/xQAAwQBBQMRARcDKQE/A0QBeQFVAlYBtAFcAmEB3ANfAfMBTQFa + AWQB+gFNAVoBZAH6A10B7QFbAl4B0AFQAlEBnwM2AVkDGAEhAwcBCgMBAQJXAAH/AwAB/wMAAf8DAAH/ + AwAB/0cAAf8D3wH/AwAB/wGcARABDgH/AaEBEQEPAf8BoQERAQ8B/wGhAREBDwH/AaEBEQEPAf8BoQER + AQ8B/wGbAQ4BDAH/AS4CAAH/AY8BlgGhAf8BHAEAAQEB/wE2AgAB/wE5AgAB/wGBAQMBAQH/AYEBAwEB + Af8BgQEDAQEB/wE4AgAB/wEzAgAB/wEQAQQBEwH/AUABRAGIAf8BOAIAAf8BoAEQAQ4B/wGhAREBDwH/ + AaEBEQEPAf8BoQERAQ8B/wGhAREBDwH/AZYBDwENAf8DCgH/A98B/wMAAf8CAAGeAf8BAAECAZQB/wEK + ASQBnwH/AR0BRAGuAf8BIAFIAasB/wEgAUgBqwH/AR4BSAGrAf8BHQFIAacB/wEdAUgBpgH/ARsBRQGm + Af8BFwFCAaYB/wEXAUIBogH/ARcBQgGhAf8BFwFCAaEB/wEXAUIBoQH/ARcBQgGhAf8BFwFCAaEB/wEX + AUIBoQH/ARcBQgGhAf8BFwFCAaEB/wEbAUIBogH/ARsBQgGmAf8BHgFFAaYB/wEgAUgBpgH/ASABSAGn + Af8BIAFIAasB/wEeAUgBqwH/AR0BSAGrAf8BGgFEAa4B/wEIASQBnwH/AQABAgGUAf8CAAGeAf8XAAEB + AwQBBgMMARADHAEoAzEBTQNCAXUDTgGZAVMCVQGtA1IBqQNLAY4BPAI9AWcDKQE+AxQBGwMHAQkDAgED + WwAB/wMAAf8DAAH/AwAB/wMAAf9EAANMAfMD3wH/AxcB/wGKAgoB/wGbAQwBDQH/AZsBDAENAf8BmwEM + AQ0B/wGbAQwBDQH/AZsBDAENAf8BmgELAQwB/wEzAgAB/wEtAgAB/wE1AgAB/wGZAQsBDAH/AZoBDAEN + Af8BmwEMAQ0B/wGbAQwBDQH/AZsBDAENAf8BmgELAQwB/wGSAQgBCQH/ATQCAAH/ASoCAAH/ATUCAAH/ + AZoBDAENAf8BmwEMAQ0B/wGbAQwBDQH/AZsBDAENAf8BmwEMAQ0B/wFFAQgBCQH/Ax8B/wPdAf8DTgHw + AgABpAH/AgABngH/AgABlAH/AgABjwH/AgABjAH/AgABhgH/AgABggH/AgABRwH/AgABRwH/AgABRAH/ + AgABQQH/AgABPwH/AgABPwH/AgABPwH/AgABPwH/AgABPwH/AgABPwH/AgABPwH/AgABPwH/AgABPwH/ + AgABPwH/AgABQQH/AgABRAH/AgABRwH/AgABRwH/AgABggH/AgABhgH/AgABjAH/AgABjwH/AgABlAH/ + AgABngH/AgABpAH/GwABAQMCAQMDBgEIAwwBEAMWAR4DIgEyAyoBQAMpAT4DHwEsAxIBGQMKAQ0DBAEG + AwEBAl8AAf8DAAH/AwAB/wMAAf8DAAH/RAADVwG9A78B/wOUAf8BKwEJAQsB/wGKAQgBDgH/AZMBBgEN + Af8BkwEGAQ0B/wGTAQYBDQH/AZMBBgENAf8BkwEGAQ0B/wGSAQYBDAH/AY4BBAELAf8BkgEGAQ0B/wGT + AQYBDQH/AZMBBgENAf8BkwEGAQ0B/wGTAQYBDQH/AZMBBgENAf8BkwEGAQ0B/wGTAQYBDQH/AZIBBgEM + Af8BjQEEAQoB/wGSAQYBDQH/AZMBBgENAf8BkwEGAQ0B/wGTAQYBDQH/AZMBBgENAf8BgAEJAQ4B/wEg + AQgBCgH/A7QB/wO0Af8DVAGuAgIBrAH/AgIBqQH/AgIBpgH/AgABpgH/AgABpgH/AgABowH/AgABnwH/ + AgABngH/AgABlwH/AgABlwH/AgABlgH/AgABlgH/AgABjgH/AgABjgH/AgABjgH/AgABjgH/AgABjgH/ + AgABjgH/AgABjgH/AgABjgH/AgABlgH/AgABlgH/AgABlwH/AgABlwH/AgABngH/AgABnwH/AgABowH/ + AgABpgH/AgABpgH/AgIBpgH/AgIBqQH/AgIBrAH/JAADAQECAwMEBAQGAQgDBgEIAwQBBgMDAQQDAAEB + ZwAB/wMAAf8DAAH/AwAB/wMAAf9EAAM0AVQDLwH/A+4B/wOTAf8DFgH/AwAB/wMAAf8DAAH/AwAB/wMA + Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA + Af8DAAH/AwAB/wMfAf8DsgH/A+oB/wMfAf8DLQFFAgIBrAH/AgIBrAH/AgIBrAH/AgIBrAH/AgIBrAH/ + AgIBrAH/AgIBrAH/AgABqAH/AgABpAH/AgABogH/AgABnwH/AgABnwH/AgABnAH/AgABnAH/AgABnAH/ + AgABnAH/AgABnAH/AgABnAH/AgABnAH/AgABnAH/AgABnwH/AgABnwH/AgABogH/AgABpwH/AgABqAH/ + AgIBrAH/AgIBrAH/AgIBrAH/AgIBrAH/AgIBrAH/AgIBrAH/AgIBrAH//wAFAANKAY0DLgH/A80B/wP5 + Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7 + Af8D+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8D+wH/A+sB/wO9Af8DGQH/A0gBhwQAA0gBhQICAawB/wIC + AawB/wICAawB/wICAawB/wICAawB/wICAawB/wICAawB/wIBAakB/wIAAakB/wIAAaYB/wIAAaQB/wIA + AaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaEB/wIAAaQB/wIAAaYB/wIA + AakB/wIBAasB/wICAawB/wICAawB/wICAawB/wICAawB/wICAawB/wICAawB/wICAawB/wNIAYX/AAkA + AzcBWgNZAcMDKwH8AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wNVAeoDVAGuAy0BRQgAAwcBCgNI + AYUCAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGrAf8CAQGq + Af8CAAGqAf8CAAGoAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGkAf8CAAGoAf8CAAGqAf8CAQGqAf8CAgGr + Af8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8CAgGsAf8DSAGFAwcBCv8A + AQABQgFNAT4HAAE+AwABKAMAAYADAAFAAwABAQEAAQEGAAEEFgAD//8A/wADAAHAAgABAwQACP8BgAIA + AQEEAAL/AfgBBwT/CAAC/wHwAQME/wgAAv8B4AEBAf8BwQL/CAAC/wHAAQEB/wHBAv8IAAL/AYABAQH/ + AcEC/wgAAv8BAAEBAf8BwQL/CAAB/wH+AQABAQH/AcEC/wgAAf8B/AEAAQEB/wLBAf8IAAH/AfwBAAEB + Af8CwQH/CAAB/wGAAQABAQH/AsEB/wgAAf4CAAEBAf8CwQH/CAAB+AIAAQMB/wLBAf8IAAHwAgABBwHg + AQEBwAEHCAAB8AIAAR8B4AEBAcABBwgAAfACAAE/AeABAQHAAQcIAAHwAgABfwHgAQEBwAEHCAAB8AIA + Af8B4AEBAcABBwgAAfABAAEBAv8CwQH/CAAB8AEAAQMC/wLBAf8IAAHwAQABAwL/AsEB/wgAAfABAAED + Av8CwQH/CAAB8AEAAQMC/wLBAf8IAAHwAQABAwL/AcEC/wgAAfABAAEDAv8BwQL/CAAB+AEAAQcC/wHB + Av8IAAH4AQABDwL/AcEC/wgAAfwBAAEfAv8BwQL/CAAB/wGAAX8C/wHBAv8IAAj/AYACAAEBBAAI/wHA + AgABAwQACP8L \ No newline at end of file diff --git a/Tab/LogForm.Designer.cs b/Tab/LogForm.Designer.cs new file mode 100644 index 0000000..c60ac96 --- /dev/null +++ b/Tab/LogForm.Designer.cs @@ -0,0 +1,132 @@ + +namespace DutyContent.Tab +{ + partial class LogForm + { + /// + /// 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.pnlBase = new System.Windows.Forms.Panel(); + this.txtLogText = new System.Windows.Forms.RichTextBox(); + this.chkLogScroll = new System.Windows.Forms.CheckBox(); + this.btnLogClear = new System.Windows.Forms.Button(); + this.btnLogCopy = new System.Windows.Forms.Button(); + this.pnlBase.SuspendLayout(); + this.SuspendLayout(); + // + // pnlBase + // + this.pnlBase.Controls.Add(this.txtLogText); + this.pnlBase.Controls.Add(this.chkLogScroll); + this.pnlBase.Controls.Add(this.btnLogClear); + this.pnlBase.Controls.Add(this.btnLogCopy); + this.pnlBase.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlBase.Location = new System.Drawing.Point(0, 0); + this.pnlBase.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.pnlBase.Name = "pnlBase"; + this.pnlBase.Size = new System.Drawing.Size(804, 451); + this.pnlBase.TabIndex = 0; + // + // txtLogText + // + this.txtLogText.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtLogText.BackColor = System.Drawing.Color.AliceBlue; + this.txtLogText.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.txtLogText.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtLogText.Location = new System.Drawing.Point(4, 4); + this.txtLogText.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txtLogText.Name = "txtLogText"; + this.txtLogText.ReadOnly = true; + this.txtLogText.Size = new System.Drawing.Size(796, 407); + this.txtLogText.TabIndex = 3; + this.txtLogText.Text = ""; + // + // chkLogScroll + // + this.chkLogScroll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.chkLogScroll.AutoSize = true; + this.chkLogScroll.Location = new System.Drawing.Point(740, 421); + this.chkLogScroll.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.chkLogScroll.Name = "chkLogScroll"; + this.chkLogScroll.Size = new System.Drawing.Size(51, 22); + this.chkLogScroll.TabIndex = 2; + this.chkLogScroll.Text = "503"; + this.chkLogScroll.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.chkLogScroll.UseVisualStyleBackColor = true; + // + // btnLogClear + // + this.btnLogClear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.btnLogClear.Location = new System.Drawing.Point(191, 415); + this.btnLogClear.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnLogClear.Name = "btnLogClear"; + this.btnLogClear.Size = new System.Drawing.Size(166, 32); + this.btnLogClear.TabIndex = 1; + this.btnLogClear.Text = "502"; + this.btnLogClear.UseVisualStyleBackColor = true; + this.btnLogClear.Click += new System.EventHandler(this.BtnLogClear_Click); + // + // btnLogCopy + // + this.btnLogCopy.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.btnLogCopy.Location = new System.Drawing.Point(4, 415); + this.btnLogCopy.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btnLogCopy.Name = "btnLogCopy"; + this.btnLogCopy.Size = new System.Drawing.Size(166, 32); + this.btnLogCopy.TabIndex = 0; + this.btnLogCopy.Text = "501"; + this.btnLogCopy.UseVisualStyleBackColor = true; + this.btnLogCopy.Click += new System.EventHandler(this.BtnLogCopy_Click); + // + // LogForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScroll = true; + this.ClientSize = new System.Drawing.Size(804, 451); + this.Controls.Add(this.pnlBase); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.MinimumSize = new System.Drawing.Size(640, 200); + this.Name = "LogForm"; + this.Text = "Log"; + this.pnlBase.ResumeLayout(false); + this.pnlBase.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel pnlBase; + private System.Windows.Forms.CheckBox chkLogScroll; + private System.Windows.Forms.Button btnLogClear; + private System.Windows.Forms.Button btnLogCopy; + private System.Windows.Forms.RichTextBox txtLogText; + } +} \ No newline at end of file diff --git a/Tab/LogForm.cs b/Tab/LogForm.cs new file mode 100644 index 0000000..6255ea2 --- /dev/null +++ b/Tab/LogForm.cs @@ -0,0 +1,139 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace DutyContent.Tab +{ + public partial class LogForm : Form, Interface.ISuppLocale, Interface.ISuppActPlugin + { + private static LogForm _self; + public static LogForm Self => _self; + + public LogForm() + { + _self = this; + + InitializeComponent(); + } + + public void PluginDeinitialize() + { + + } + + public void PluginInitialize() + { + chkLogScroll.Checked = true; + } + + public void RefreshLocale() + { + + } + + public void UpdateUiLocale() + { + btnLogCopy.Text = Locale.Text(501); + btnLogClear.Text = Locale.Text(502); + chkLogScroll.Text = Locale.Text(503); + + var logfont = new Font(DcConfig.Duty.LogFontFamily, DcConfig.Duty.LogFontSize, FontStyle.Regular); + txtLogText.Font = logfont; + } + + private void BtnLogCopy_Click(object sender, EventArgs e) + { + try + { + if (txtLogText.SelectionLength != 0) + txtLogText.Copy(); + else + { + txtLogText.SelectAll(); + + txtLogText.Copy(); + + txtLogText.SelectionStart = txtLogText.TextLength; + txtLogText.SelectionLength = 0; + } + } + catch (Exception ex) + { + Logger.Ex(ex, 35); + } + } + + private void BtnLogClear_Click(object sender, EventArgs e) + { + try + { + txtLogText.Clear(); + } + catch (Exception ex) + { + Logger.Ex(ex, 36); + } + } + + private void InvokeLog(Color color, string mesg) + { + WorkerAct.Invoker(() => + { + txtLogText.SelectionColor = color; + txtLogText.SelectionStart = txtLogText.TextLength; + txtLogText.SelectionLength = 0; + txtLogText.AppendText(mesg); + + txtLogText.SelectionColor = txtLogText.ForeColor; + + if (chkLogScroll.Checked) + ThirdParty.NativeMethods.ScrollToBottom(txtLogText); + }); + } + + // + public void WriteLog(Color color, string mesg, bool with_time = true) + { + if (txtLogText.IsDisposed || string.IsNullOrEmpty(mesg)) + return; + + string line; + + if (!with_time) + line = mesg + Environment.NewLine; + else + { + var dt = DateTime.Now.ToString("HH:mm:ss"); + line = $"[{dt}] {mesg}{Environment.NewLine}"; + } + + InvokeLog(color, line); + } + + // + public void WriteLogSection(Color color, string section, string mesg, bool with_time = true) + { + if (txtLogText.IsDisposed || string.IsNullOrEmpty(mesg)) + return; + + string line; + + if (!with_time) + line = $"[{section}] {mesg}{Environment.NewLine}"; + else + { + var dt = DateTime.Now.ToString("HH:mm:ss"); + line = $"[{dt}/{section}] {mesg}{Environment.NewLine}"; + } + + InvokeLog(color, line); + } + + // + public Font LogFont + { + get { return txtLogText.Font; } + set { txtLogText.Font = value; } + } + } +} diff --git a/Tab/LogForm.resx b/Tab/LogForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Tab/LogForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/Tab/PingForm.Designer.cs b/Tab/PingForm.Designer.cs index c6dc6f3..6794bb9 100644 --- a/Tab/PingForm.Designer.cs +++ b/Tab/PingForm.Designer.cs @@ -30,6 +30,10 @@ namespace DutyContent.Tab private void InitializeComponent() { this.panel6 = new System.Windows.Forms.Panel(); + this.cboPingGraphType = new System.Windows.Forms.ComboBox(); + this.lblPingGraphType = new System.Windows.Forms.Label(); + this.lstPingAddress = new System.Windows.Forms.ListBox(); + this.lblPingAddress = new System.Windows.Forms.Label(); this.cboPingDefAddr = new System.Windows.Forms.ComboBox(); this.lblPingDefAddr = new System.Windows.Forms.Label(); this.pbxPingGraph = new System.Windows.Forms.PictureBox(); @@ -46,8 +50,7 @@ namespace DutyContent.Tab this.lblPingColors = new System.Windows.Forms.Label(); this.chkUsePing = new System.Windows.Forms.CheckBox(); this.panelDock = new System.Windows.Forms.Panel(); - this.lblPingAddress = new System.Windows.Forms.Label(); - this.lstPingAddress = new System.Windows.Forms.ListBox(); + this.chkPingShowLoss = new System.Windows.Forms.CheckBox(); this.panel6.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pbxPingGraph)).BeginInit(); this.tlpnPingColors.SuspendLayout(); @@ -60,6 +63,9 @@ namespace DutyContent.Tab | System.Windows.Forms.AnchorStyles.Right))); this.panel6.AutoScroll = true; this.panel6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel6.Controls.Add(this.chkPingShowLoss); + this.panel6.Controls.Add(this.cboPingGraphType); + this.panel6.Controls.Add(this.lblPingGraphType); this.panel6.Controls.Add(this.lstPingAddress); this.panel6.Controls.Add(this.lblPingAddress); this.panel6.Controls.Add(this.cboPingDefAddr); @@ -69,51 +75,107 @@ namespace DutyContent.Tab this.panel6.Controls.Add(this.tlpnPingColors); this.panel6.Controls.Add(this.lblPingColors); this.panel6.Controls.Add(this.chkUsePing); - this.panel6.Location = new System.Drawing.Point(12, 12); + this.panel6.Location = new System.Drawing.Point(0, 0); + this.panel6.Margin = new System.Windows.Forms.Padding(4); this.panel6.Name = "panel6"; - this.panel6.Size = new System.Drawing.Size(776, 399); + this.panel6.Size = new System.Drawing.Size(804, 377); this.panel6.TabIndex = 2; // + // cboPingGraphType + // + this.cboPingGraphType.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.cboPingGraphType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cboPingGraphType.FormattingEnabled = true; + this.cboPingGraphType.Items.AddRange(new object[] { + "Linear", + "Curved"}); + this.cboPingGraphType.Location = new System.Drawing.Point(529, 140); + this.cboPingGraphType.Margin = new System.Windows.Forms.Padding(4); + this.cboPingGraphType.Name = "cboPingGraphType"; + this.cboPingGraphType.Size = new System.Drawing.Size(267, 26); + this.cboPingGraphType.TabIndex = 19; + this.cboPingGraphType.SelectedIndexChanged += new System.EventHandler(this.CboPingGraphType_SelectedIndexChanged); + // + // lblPingGraphType + // + this.lblPingGraphType.AutoSize = true; + this.lblPingGraphType.Location = new System.Drawing.Point(513, 118); + this.lblPingGraphType.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblPingGraphType.Name = "lblPingGraphType"; + this.lblPingGraphType.Size = new System.Drawing.Size(32, 18); + this.lblPingGraphType.TabIndex = 18; + this.lblPingGraphType.Text = "410"; + // + // lstPingAddress + // + this.lstPingAddress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lstPingAddress.FormattingEnabled = true; + this.lstPingAddress.ItemHeight = 18; + this.lstPingAddress.Location = new System.Drawing.Point(160, 327); + this.lstPingAddress.Margin = new System.Windows.Forms.Padding(4); + this.lstPingAddress.Name = "lstPingAddress"; + this.lstPingAddress.ScrollAlwaysVisible = true; + this.lstPingAddress.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended; + this.lstPingAddress.Size = new System.Drawing.Size(636, 40); + this.lstPingAddress.TabIndex = 17; + this.lstPingAddress.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.LstPingAddress_MouseDoubleClick); + // + // lblPingAddress + // + this.lblPingAddress.AutoSize = true; + this.lblPingAddress.Location = new System.Drawing.Point(34, 327); + this.lblPingAddress.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lblPingAddress.Name = "lblPingAddress"; + this.lblPingAddress.Size = new System.Drawing.Size(32, 18); + this.lblPingAddress.TabIndex = 16; + this.lblPingAddress.Text = "409"; + // // cboPingDefAddr // this.cboPingDefAddr.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.cboPingDefAddr.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cboPingDefAddr.FormattingEnabled = true; - this.cboPingDefAddr.Location = new System.Drawing.Point(518, 51); + this.cboPingDefAddr.Location = new System.Drawing.Point(529, 78); + this.cboPingDefAddr.Margin = new System.Windows.Forms.Padding(4); this.cboPingDefAddr.Name = "cboPingDefAddr"; - this.cboPingDefAddr.Size = new System.Drawing.Size(253, 21); + this.cboPingDefAddr.Size = new System.Drawing.Size(267, 26); this.cboPingDefAddr.TabIndex = 15; this.cboPingDefAddr.SelectedIndexChanged += new System.EventHandler(this.CboPingDefAddr_SelectedIndexChanged); // // lblPingDefAddr // this.lblPingDefAddr.AutoSize = true; - this.lblPingDefAddr.Location = new System.Drawing.Point(515, 35); + this.lblPingDefAddr.Location = new System.Drawing.Point(513, 58); + this.lblPingDefAddr.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblPingDefAddr.Name = "lblPingDefAddr"; - this.lblPingDefAddr.Size = new System.Drawing.Size(25, 13); + this.lblPingDefAddr.Size = new System.Drawing.Size(32, 18); this.lblPingDefAddr.TabIndex = 14; - this.lblPingDefAddr.Text = "335"; + this.lblPingDefAddr.Text = "408"; // // pbxPingGraph // this.pbxPingGraph.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.pbxPingGraph.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.pbxPingGraph.Location = new System.Drawing.Point(129, 108); + this.pbxPingGraph.Location = new System.Drawing.Point(160, 174); + this.pbxPingGraph.Margin = new System.Windows.Forms.Padding(4); this.pbxPingGraph.Name = "pbxPingGraph"; - this.pbxPingGraph.Size = new System.Drawing.Size(642, 186); + this.pbxPingGraph.Size = new System.Drawing.Size(637, 145); this.pbxPingGraph.TabIndex = 13; this.pbxPingGraph.TabStop = false; // // chkPingGraph // this.chkPingGraph.AutoSize = true; - this.chkPingGraph.Location = new System.Drawing.Point(26, 108); + this.chkPingGraph.Location = new System.Drawing.Point(37, 174); + this.chkPingGraph.Margin = new System.Windows.Forms.Padding(4); this.chkPingGraph.Name = "chkPingGraph"; - this.chkPingGraph.Size = new System.Drawing.Size(44, 17); + this.chkPingGraph.Size = new System.Drawing.Size(51, 22); this.chkPingGraph.TabIndex = 12; - this.chkPingGraph.Text = "334"; + this.chkPingGraph.Text = "407"; this.chkPingGraph.UseVisualStyleBackColor = true; this.chkPingGraph.CheckedChanged += new System.EventHandler(this.ChkPingGraph_CheckedChanged); // @@ -132,33 +194,36 @@ namespace DutyContent.Tab this.tlpnPingColors.Controls.Add(this.lblPingStat4, 3, 0); this.tlpnPingColors.Controls.Add(this.btnPingColor1, 0, 1); this.tlpnPingColors.Controls.Add(this.lblPingStat3, 2, 0); - this.tlpnPingColors.Location = new System.Drawing.Point(129, 35); + this.tlpnPingColors.Location = new System.Drawing.Point(160, 58); + this.tlpnPingColors.Margin = new System.Windows.Forms.Padding(4); this.tlpnPingColors.Name = "tlpnPingColors"; - this.tlpnPingColors.Padding = new System.Windows.Forms.Padding(3); + this.tlpnPingColors.Padding = new System.Windows.Forms.Padding(4); this.tlpnPingColors.RowCount = 2; - this.tlpnPingColors.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40F)); - this.tlpnPingColors.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 60F)); - this.tlpnPingColors.Size = new System.Drawing.Size(318, 62); + this.tlpnPingColors.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 36.53846F)); + this.tlpnPingColors.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 63.46154F)); + this.tlpnPingColors.Size = new System.Drawing.Size(325, 60); this.tlpnPingColors.TabIndex = 11; // // lblPingStat1 // this.lblPingStat1.AutoSize = true; this.lblPingStat1.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblPingStat1.Location = new System.Drawing.Point(6, 3); + this.lblPingStat1.Location = new System.Drawing.Point(8, 4); + this.lblPingStat1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblPingStat1.Name = "lblPingStat1"; - this.lblPingStat1.Size = new System.Drawing.Size(72, 22); + this.lblPingStat1.Size = new System.Drawing.Size(71, 18); this.lblPingStat1.TabIndex = 6; - this.lblPingStat1.Text = "330"; + this.lblPingStat1.Text = "403"; this.lblPingStat1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // btnPingColor4 // this.btnPingColor4.BackColor = System.Drawing.Color.Plum; this.btnPingColor4.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnPingColor4.Location = new System.Drawing.Point(240, 28); + this.btnPingColor4.Location = new System.Drawing.Point(245, 26); + this.btnPingColor4.Margin = new System.Windows.Forms.Padding(4); this.btnPingColor4.Name = "btnPingColor4"; - this.btnPingColor4.Size = new System.Drawing.Size(72, 28); + this.btnPingColor4.Size = new System.Drawing.Size(72, 26); this.btnPingColor4.TabIndex = 8; this.btnPingColor4.UseVisualStyleBackColor = false; this.btnPingColor4.Click += new System.EventHandler(this.BtnPingColor4_Click); @@ -167,9 +232,10 @@ namespace DutyContent.Tab // this.btnPingColor2.BackColor = System.Drawing.Color.Aqua; this.btnPingColor2.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnPingColor2.Location = new System.Drawing.Point(84, 28); + this.btnPingColor2.Location = new System.Drawing.Point(87, 26); + this.btnPingColor2.Margin = new System.Windows.Forms.Padding(4); this.btnPingColor2.Name = "btnPingColor2"; - this.btnPingColor2.Size = new System.Drawing.Size(72, 28); + this.btnPingColor2.Size = new System.Drawing.Size(71, 26); this.btnPingColor2.TabIndex = 10; this.btnPingColor2.UseVisualStyleBackColor = false; this.btnPingColor2.Click += new System.EventHandler(this.BtnPingColor2_Click); @@ -178,9 +244,10 @@ namespace DutyContent.Tab // this.btnPingColor3.BackColor = System.Drawing.Color.LawnGreen; this.btnPingColor3.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnPingColor3.Location = new System.Drawing.Point(162, 28); + this.btnPingColor3.Location = new System.Drawing.Point(166, 26); + this.btnPingColor3.Margin = new System.Windows.Forms.Padding(4); this.btnPingColor3.Name = "btnPingColor3"; - this.btnPingColor3.Size = new System.Drawing.Size(72, 28); + this.btnPingColor3.Size = new System.Drawing.Size(71, 26); this.btnPingColor3.TabIndex = 9; this.btnPingColor3.UseVisualStyleBackColor = false; this.btnPingColor3.Click += new System.EventHandler(this.BtnPingColor3_Click); @@ -189,31 +256,34 @@ namespace DutyContent.Tab // this.lblPingStat2.AutoSize = true; this.lblPingStat2.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblPingStat2.Location = new System.Drawing.Point(84, 3); + this.lblPingStat2.Location = new System.Drawing.Point(87, 4); + this.lblPingStat2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblPingStat2.Name = "lblPingStat2"; - this.lblPingStat2.Size = new System.Drawing.Size(72, 22); + this.lblPingStat2.Size = new System.Drawing.Size(71, 18); this.lblPingStat2.TabIndex = 5; - this.lblPingStat2.Text = "331"; + this.lblPingStat2.Text = "404"; this.lblPingStat2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // lblPingStat4 // this.lblPingStat4.AutoSize = true; this.lblPingStat4.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblPingStat4.Location = new System.Drawing.Point(240, 3); + this.lblPingStat4.Location = new System.Drawing.Point(245, 4); + this.lblPingStat4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblPingStat4.Name = "lblPingStat4"; - this.lblPingStat4.Size = new System.Drawing.Size(72, 22); + this.lblPingStat4.Size = new System.Drawing.Size(72, 18); this.lblPingStat4.TabIndex = 3; - this.lblPingStat4.Text = "333"; + this.lblPingStat4.Text = "406"; this.lblPingStat4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // btnPingColor1 // this.btnPingColor1.BackColor = System.Drawing.Color.RoyalBlue; this.btnPingColor1.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnPingColor1.Location = new System.Drawing.Point(6, 28); + this.btnPingColor1.Location = new System.Drawing.Point(8, 26); + this.btnPingColor1.Margin = new System.Windows.Forms.Padding(4); this.btnPingColor1.Name = "btnPingColor1"; - this.btnPingColor1.Size = new System.Drawing.Size(72, 28); + this.btnPingColor1.Size = new System.Drawing.Size(71, 26); this.btnPingColor1.TabIndex = 7; this.btnPingColor1.UseVisualStyleBackColor = false; this.btnPingColor1.Click += new System.EventHandler(this.BtnPingColor1_Click); @@ -222,31 +292,34 @@ namespace DutyContent.Tab // this.lblPingStat3.AutoSize = true; this.lblPingStat3.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblPingStat3.Location = new System.Drawing.Point(162, 3); + this.lblPingStat3.Location = new System.Drawing.Point(166, 4); + this.lblPingStat3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblPingStat3.Name = "lblPingStat3"; - this.lblPingStat3.Size = new System.Drawing.Size(72, 22); + this.lblPingStat3.Size = new System.Drawing.Size(71, 18); this.lblPingStat3.TabIndex = 4; - this.lblPingStat3.Text = "332"; + this.lblPingStat3.Text = "405"; this.lblPingStat3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // lblPingColors // this.lblPingColors.AutoSize = true; - this.lblPingColors.Location = new System.Drawing.Point(23, 35); + this.lblPingColors.Location = new System.Drawing.Point(34, 58); + this.lblPingColors.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblPingColors.Name = "lblPingColors"; - this.lblPingColors.Size = new System.Drawing.Size(25, 13); + this.lblPingColors.Size = new System.Drawing.Size(32, 18); this.lblPingColors.TabIndex = 2; - this.lblPingColors.Text = "329"; + this.lblPingColors.Text = "402"; // // chkUsePing // this.chkUsePing.AutoSize = true; - this.chkUsePing.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.chkUsePing.Location = new System.Drawing.Point(3, 3); + this.chkUsePing.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.chkUsePing.Location = new System.Drawing.Point(4, 4); + this.chkUsePing.Margin = new System.Windows.Forms.Padding(4); this.chkUsePing.Name = "chkUsePing"; - this.chkUsePing.Size = new System.Drawing.Size(58, 24); + this.chkUsePing.Size = new System.Drawing.Size(62, 28); this.chkUsePing.TabIndex = 0; - this.chkUsePing.Text = "328"; + this.chkUsePing.Text = "401"; this.chkUsePing.UseVisualStyleBackColor = true; this.chkUsePing.CheckedChanged += new System.EventHandler(this.ChkUsePing_CheckedChanged); // @@ -256,39 +329,33 @@ namespace DutyContent.Tab this.panelDock.Controls.Add(this.panel6); this.panelDock.Dock = System.Windows.Forms.DockStyle.Fill; this.panelDock.Location = new System.Drawing.Point(0, 0); + this.panelDock.Margin = new System.Windows.Forms.Padding(4); this.panelDock.Name = "panelDock"; - this.panelDock.Size = new System.Drawing.Size(800, 450); + this.panelDock.Size = new System.Drawing.Size(804, 381); this.panelDock.TabIndex = 3; // - // lblPingAddress + // chkPingShowLoss // - this.lblPingAddress.AutoSize = true; - this.lblPingAddress.Location = new System.Drawing.Point(23, 315); - this.lblPingAddress.Name = "lblPingAddress"; - this.lblPingAddress.Size = new System.Drawing.Size(25, 13); - this.lblPingAddress.TabIndex = 16; - this.lblPingAddress.Text = "343"; - // - // lstPingAddress - // - this.lstPingAddress.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.lstPingAddress.FormattingEnabled = true; - this.lstPingAddress.Location = new System.Drawing.Point(129, 309); - this.lstPingAddress.Name = "lstPingAddress"; - this.lstPingAddress.ScrollAlwaysVisible = true; - this.lstPingAddress.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended; - this.lstPingAddress.Size = new System.Drawing.Size(642, 82); - this.lstPingAddress.TabIndex = 17; + this.chkPingShowLoss.AutoSize = true; + this.chkPingShowLoss.Location = new System.Drawing.Point(37, 140); + this.chkPingShowLoss.Margin = new System.Windows.Forms.Padding(4); + this.chkPingShowLoss.Name = "chkPingShowLoss"; + this.chkPingShowLoss.Size = new System.Drawing.Size(51, 22); + this.chkPingShowLoss.TabIndex = 20; + this.chkPingShowLoss.Text = "413"; + this.chkPingShowLoss.UseVisualStyleBackColor = true; + this.chkPingShowLoss.CheckedChanged += new System.EventHandler(this.ChkPingShowLoss_CheckedChanged); // // PingForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScroll = true; - this.ClientSize = new System.Drawing.Size(800, 450); + this.ClientSize = new System.Drawing.Size(804, 381); this.Controls.Add(this.panelDock); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(4); + this.MinimumSize = new System.Drawing.Size(800, 39); this.Name = "PingForm"; this.Text = "Ping"; this.panel6.ResumeLayout(false); @@ -322,5 +389,8 @@ namespace DutyContent.Tab private System.Windows.Forms.Panel panelDock; private System.Windows.Forms.Label lblPingAddress; private System.Windows.Forms.ListBox lstPingAddress; + private System.Windows.Forms.ComboBox cboPingGraphType; + private System.Windows.Forms.Label lblPingGraphType; + private System.Windows.Forms.CheckBox chkPingShowLoss; } } \ No newline at end of file diff --git a/Tab/PingForm.cs b/Tab/PingForm.cs index 6792b93..eb80552 100644 --- a/Tab/PingForm.cs +++ b/Tab/PingForm.cs @@ -1,16 +1,10 @@ using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; using System.Drawing; -using System.Linq; using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; using System.IO; -using System.Threading; using System.Net.NetworkInformation; -using DutyContent.Interface; using System.Net; namespace DutyContent.Tab @@ -23,10 +17,18 @@ namespace DutyContent.Tab // private System.Timers.Timer _timer; private long _last_ping; + private Color _color = Color.Transparent; + private Libre.PingGrapher _grpr; private List _kepts = new List { 0, 0 }; + // + private const int PingInterval = 5000; + private const int PingAmount = 5; + private const int PingTimeout = PingInterval / (PingAmount + 1); + + // public PingForm() { _self = this; @@ -43,7 +45,9 @@ namespace DutyContent.Tab btnPingColor2.BackColor = DcConfig.Duty.PingColors[1]; btnPingColor3.BackColor = DcConfig.Duty.PingColors[2]; btnPingColor4.BackColor = DcConfig.Duty.PingColors[3]; + chkPingShowLoss.Checked = DcConfig.Duty.PingShowLoss; chkPingGraph.Checked = DcConfig.Duty.PingGraph; + cboPingGraphType.SelectedIndex = DcConfig.Duty.PingGraphType; // try @@ -67,12 +71,12 @@ namespace DutyContent.Tab catch { cboPingDefAddr.Items.Clear(); - cboPingDefAddr.Items.Add(MesgLog.Text(27)); + cboPingDefAddr.Items.Add(Locale.Text(27)); cboPingDefAddr.SelectedIndex = 0; } // - _timer = new System.Timers.Timer() { Interval = 5000 }; + _timer = new System.Timers.Timer() { Interval = PingInterval }; _timer.Elapsed += (sender, e) => PingOnce(); if (DcConfig.Duty.UsePing) @@ -95,15 +99,17 @@ namespace DutyContent.Tab public void UpdateUiLocale() { - chkUsePing.Text = MesgLog.Text(328); - lblPingColors.Text = MesgLog.Text(329); - lblPingStat1.Text = MesgLog.Text(330); - lblPingStat2.Text = MesgLog.Text(331); - lblPingStat3.Text = MesgLog.Text(332); - lblPingStat4.Text = MesgLog.Text(333); - chkPingGraph.Text = MesgLog.Text(334); - lblPingDefAddr.Text = MesgLog.Text(335); - lblPingAddress.Text = MesgLog.Text(343); + chkUsePing.Text = Locale.Text(401); + lblPingColors.Text = Locale.Text(402); + lblPingStat1.Text = Locale.Text(403); + lblPingStat2.Text = Locale.Text(404); + lblPingStat3.Text = Locale.Text(405); + lblPingStat4.Text = Locale.Text(406); + chkPingGraph.Text = Locale.Text(407); + lblPingDefAddr.Text = Locale.Text(408); + lblPingAddress.Text = Locale.Text(409); + lblPingGraphType.Text = Locale.Text(410); + chkPingShowLoss.Text = Locale.Text(413); } private void SaveConfig(int interval = 5000) @@ -173,6 +179,16 @@ namespace DutyContent.Tab PingColorWorker(3, btnPingColor4); } + private void ChkPingShowLoss_CheckedChanged(object sender, EventArgs e) + { + if (!DcConfig.PluginEnable) + return; + + DcConfig.Duty.PingShowLoss = chkPingShowLoss.Checked; + + SaveConfig(); + } + private void ChkPingGraph_CheckedChanged(object sender, EventArgs e) { if (!DcConfig.PluginEnable) @@ -208,6 +224,34 @@ namespace DutyContent.Tab SaveConfig(); } + private void CboPingGraphType_SelectedIndexChanged(object sender, EventArgs e) + { + if (!DcConfig.PluginEnable) + return; + + if (cboPingGraphType.SelectedIndex>=0) + { + DcConfig.Duty.PingGraphType = cboPingGraphType.SelectedIndex; + SaveConfig(); + } + } + + private void LstPingAddress_MouseDoubleClick(object sender, MouseEventArgs e) + { + if (lstPingAddress.SelectedIndices.Count != 1) + return; + + try + { + var s = lstPingAddress.SelectedItem as string; + Clipboard.SetText(s); + } + catch (Exception ex) + { + Logger.Ex(ex, 35); + } + } + // private void PingOnce(bool check_plugin_enable = true) { @@ -229,7 +273,7 @@ namespace DutyContent.Tab { addrs.Add(row.RemoteAddress.ToString()); - var (r, l) = CalcPing(row.RemoteAddress); + var (r, l) = CalcPing(row.RemoteAddress, PingTimeout, PingAmount); if (rtt < r) rtt = r; @@ -256,7 +300,7 @@ namespace DutyContent.Tab return; } - var (r, l) = CalcPing(defip); + var (r, l) = CalcPing(defip, PingTimeout, PingAmount); if (rtt < r) rtt = r; @@ -268,7 +312,7 @@ namespace DutyContent.Tab //MesgLog.L("Ping: {0}, {1}%", rtt, loss); Color color; - if (loss > 0.0 || rtt > 150) + if (rtt > 150) color = DcConfig.Duty.PingColors[3]; else if (rtt > 100) color = DcConfig.Duty.PingColors[2]; @@ -277,6 +321,9 @@ namespace DutyContent.Tab else color = DcConfig.Duty.PingColors[0]; + if (!DcConfig.Duty.PingShowLoss) + loss = 0.0; + if (_last_ping != rtt || loss > 0.0 || _color != color) { _last_ping = rtt; @@ -293,7 +340,7 @@ namespace DutyContent.Tab _kepts.RemoveAt(0); _grpr.Enter(); - _grpr.DrawValues(_kepts); + _grpr.DrawValues(_kepts, (Libre.PingGrapher.DrawType)DcConfig.Duty.PingGraphType); WorkerAct.Invoker(() => _grpr.Leave()); } @@ -305,17 +352,17 @@ namespace DutyContent.Tab } else { - bool havetoupdate = false; + bool have_to_update_addrs = false; if (lstPingAddress.Items.Count == 0) - havetoupdate = true; + have_to_update_addrs = true; else { var i = lstPingAddress.Items[0] as string; - havetoupdate = !addrs.Contains(i); + have_to_update_addrs = !addrs.Contains(i); } - if (havetoupdate) + if (have_to_update_addrs) { WorkerAct.Invoker(() => { @@ -333,10 +380,9 @@ namespace DutyContent.Tab private static readonly PingOptions _ping_options = new PingOptions { DontFragment = true }; private static readonly byte[] _ping_buffers = Encoding.ASCII.GetBytes("01234567890123456789012345678901"); - private static readonly int _ping_timerout = 120; // - private (long Rtt, double Loss) CalcPing(IPAddress host, int amount = 6) + private (long Rtt, double Loss) CalcPing(IPAddress host, int timeout, int amount) { var ps = new Ping(); @@ -345,16 +391,32 @@ namespace DutyContent.Tab for (var i = 0; i < amount; i++) { - PingReply pr = ps.Send(host, _ping_timerout, _ping_buffers, _ping_options); + try + { + PingReply pr = ps.Send(host, timeout, _ping_buffers, _ping_options); - if (pr.Status != IPStatus.Success) + if (pr.Status != IPStatus.Success) + { + failed++; + + if (DcConfig.DebugEnable) + { + Logger.WriteCategory(Color.Red, "Ping", "failed. status: {0} / duration: {1} / at: {2}/{3}", pr.Status, timeout, i + 1, amount); + } + } + + if (rtt < pr.RoundtripTime) + rtt = pr.RoundtripTime; + } + catch + { failed++; + } - if (rtt < pr.RoundtripTime) - rtt = pr.RoundtripTime; + System.Threading.Thread.Sleep(1); } - double loss = (failed / amount) * 100; + double loss = failed == 0 ? 0 : (double)failed / amount * 100.0; return (rtt, loss); } diff --git a/Tab/UpdateNotifyForm.Designer.cs b/Tab/UpdateNotifyForm.Designer.cs index 7074cc0..f307e2c 100644 --- a/Tab/UpdateNotifyForm.Designer.cs +++ b/Tab/UpdateNotifyForm.Designer.cs @@ -43,7 +43,8 @@ namespace DutyContent.Tab // this.lblTitle.AutoSize = true; this.lblTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblTitle.Location = new System.Drawing.Point(46, 0); + this.lblTitle.Location = new System.Drawing.Point(69, 0); + this.lblTitle.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblTitle.Name = "lblTitle"; this.lblTitle.Size = new System.Drawing.Size(62, 31); this.lblTitle.TabIndex = 0; @@ -52,9 +53,10 @@ namespace DutyContent.Tab // lblMesg // this.lblMesg.AutoSize = true; - this.lblMesg.Location = new System.Drawing.Point(3, 50); + this.lblMesg.Location = new System.Drawing.Point(4, 69); + this.lblMesg.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblMesg.Name = "lblMesg"; - this.lblMesg.Size = new System.Drawing.Size(25, 13); + this.lblMesg.Size = new System.Drawing.Size(32, 18); this.lblMesg.TabIndex = 1; this.lblMesg.Text = "208"; // @@ -62,7 +64,8 @@ namespace DutyContent.Tab // this.lblLink.AutoSize = true; this.lblLink.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblLink.Location = new System.Drawing.Point(3, 87); + this.lblLink.Location = new System.Drawing.Point(4, 120); + this.lblLink.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.lblLink.Name = "lblLink"; this.lblLink.Size = new System.Drawing.Size(32, 18); this.lblLink.TabIndex = 2; @@ -76,12 +79,13 @@ namespace DutyContent.Tab | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.txtBody.BackColor = System.Drawing.Color.OldLace; - this.txtBody.Location = new System.Drawing.Point(16, 108); + this.txtBody.Location = new System.Drawing.Point(24, 150); + this.txtBody.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.txtBody.Multiline = true; this.txtBody.Name = "txtBody"; this.txtBody.ReadOnly = true; this.txtBody.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.txtBody.Size = new System.Drawing.Size(464, 296); + this.txtBody.Size = new System.Drawing.Size(584, 283); this.txtBody.TabIndex = 3; // // panel1 @@ -95,9 +99,10 @@ namespace DutyContent.Tab this.panel1.Controls.Add(this.txtBody); this.panel1.Controls.Add(this.lblMesg); this.panel1.Controls.Add(this.lblLink); - this.panel1.Location = new System.Drawing.Point(12, 12); + this.panel1.Location = new System.Drawing.Point(4, 4); + this.panel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(776, 426); + this.panel1.Size = new System.Drawing.Size(796, 443); this.panel1.TabIndex = 4; // // panelBase @@ -106,17 +111,20 @@ namespace DutyContent.Tab this.panelBase.Controls.Add(this.panel1); this.panelBase.Dock = System.Windows.Forms.DockStyle.Fill; this.panelBase.Location = new System.Drawing.Point(0, 0); + this.panelBase.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.panelBase.Name = "panelBase"; - this.panelBase.Size = new System.Drawing.Size(800, 450); + this.panelBase.Size = new System.Drawing.Size(804, 451); this.panelBase.TabIndex = 5; // // UpdateNotifyForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScroll = true; - this.ClientSize = new System.Drawing.Size(800, 450); + this.ClientSize = new System.Drawing.Size(804, 451); this.Controls.Add(this.panelBase); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.Name = "UpdateNotifyForm"; this.Text = "Update"; this.panel1.ResumeLayout(false); diff --git a/Tab/UpdateNotifyForm.cs b/Tab/UpdateNotifyForm.cs index 2aa41e2..c1014c5 100644 --- a/Tab/UpdateNotifyForm.cs +++ b/Tab/UpdateNotifyForm.cs @@ -46,9 +46,9 @@ namespace DutyContent.Tab public void UpdateUiLocale() { - lblTitle.Text = MesgLog.Text(207, DcConfig.PluginTag, _newtag); - lblMesg.Text = MesgLog.Text(208); - lblLink.Text = MesgLog.Text(209); + lblTitle.Text = Locale.Text(207, DcConfig.PluginTag, _newtag); + lblMesg.Text = Locale.Text(208); + lblLink.Text = Locale.Text(209); } private void LblLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) diff --git a/ThirdParty/EXComboBox.cs b/ThirdParty/EXComboBox.cs new file mode 100644 index 0000000..d47a3d7 --- /dev/null +++ b/ThirdParty/EXComboBox.cs @@ -0,0 +1,199 @@ +// https://www.codeproject.com/Articles/13006/Extended-ListView +using System.Windows.Forms; +using System.Drawing; +using System.Collections; + +namespace DutyContent.ThirdParty +{ + class EXComboBox : ComboBox + { + private Brush _highlightbrush; //color of highlighted items + + public EXComboBox() + { + _highlightbrush = SystemBrushes.Highlight; + DrawMode = DrawMode.OwnerDrawFixed; + DrawItem += new DrawItemEventHandler(SelfDrawItem); + } + + public Brush MyHighlightBrush + { + get { return _highlightbrush; } + set { _highlightbrush = value; } + } + + private void SelfDrawItem(object sender, DrawItemEventArgs e) + { + if (e.Index == -1) + return; + + e.DrawBackground(); + + if ((e.State & DrawItemState.Selected) != 0) + { + e.Graphics.FillRectangle(_highlightbrush, e.Bounds); + } + + EXItem item = (EXItem)this.Items[e.Index]; + Rectangle bounds = e.Bounds; + int x = bounds.X + 2; + + if (item.GetType() == typeof(EXImageItem)) + { + EXImageItem imgitem = (EXImageItem)item; + if (imgitem.MyImage != null) + { + Image img = imgitem.MyImage; + int y = bounds.Y + ((int)(bounds.Height / 2)) - ((int)(img.Height / 2)) + 1; + e.Graphics.DrawImage(img, x, y, img.Width, img.Height); + x += img.Width + 2; + } + } + else if (item.GetType() == typeof(EXMultipleImagesItem)) + { + EXMultipleImagesItem imgitem = (EXMultipleImagesItem)item; + if (imgitem.MyImages != null) + { + for (int i = 0; i < imgitem.MyImages.Count; i++) + { + Image img = (Image)imgitem.MyImages[i]; + int y = bounds.Y + ((int)(bounds.Height / 2)) - ((int)(img.Height / 2)) + 1; + e.Graphics.DrawImage(img, x, y, img.Width, img.Height); + x += img.Width + 2; + } + } + } + + int fonty = bounds.Y + ((int)(bounds.Height / 2)) - ((int)(e.Font.Height / 2)); + e.Graphics.DrawString(item.Text, e.Font, new SolidBrush(e.ForeColor), x, fonty); + e.DrawFocusRectangle(); + } + + public class EXItem + { + private string _text = ""; + private string _value = ""; + + public EXItem() + { + + } + + public EXItem(string text) + { + _text = text; + } + + public string Text + { + get { return _text; } + set { _text = value; } + } + + public string MyValue + { + get { return _value; } + set { _value = value; } + } + + public override string ToString() + { + return _text; + } + + } + + public class EXImageItem : EXItem + { + private Image _image; + + public EXImageItem() + { + + } + + public EXImageItem(string text) + { + this.Text = text; + } + + public EXImageItem(Image image) + { + _image = image; + } + + public EXImageItem(string text, Image image) + { + this.Text = text; + _image = image; + } + + public EXImageItem(Image image, string value) + { + _image = image; + this.MyValue = value; + } + + public EXImageItem(string text, Image image, string value) + { + this.Text = text; + _image = image; + this.MyValue = value; + } + + public Image MyImage + { + get { return _image; } + set { _image = value; } + } + + } + + public class EXMultipleImagesItem : EXItem + { + private ArrayList _images; + + public EXMultipleImagesItem() + { + + } + + public EXMultipleImagesItem(string text) + { + this.Text = text; + } + + public EXMultipleImagesItem(ArrayList images) + { + _images = images; + } + + public EXMultipleImagesItem(string text, ArrayList images) + { + this.Text = text; + _images = images; + } + + public EXMultipleImagesItem(ArrayList images, string value) + { + _images = images; + this.MyValue = value; + } + + public EXMultipleImagesItem(string text, ArrayList images, string value) + { + this.Text = text; + _images = images; + this.MyValue = value; + } + + public ArrayList MyImages + { + get { return _images; } + set { _images = value; } + } + + } + + } +} diff --git a/ThirdParty/EXListView.cs b/ThirdParty/EXListView.cs new file mode 100644 index 0000000..51e30f7 --- /dev/null +++ b/ThirdParty/EXListView.cs @@ -0,0 +1,1116 @@ +// https://www.codeproject.com/Articles/13006/Extended-ListView +using System; +using System.Windows.Forms; +using System.Drawing; +using System.Collections; + +namespace DutyContent.ThirdParty +{ + public class EXListView : ListView + { + + private ListViewItem.ListViewSubItem _clickedsubitem; //clicked ListViewSubItem + private ListViewItem _clickeditem; //clicked ListViewItem + private int _col; //index of doubleclicked ListViewSubItem + private TextBox txtbx; //the default edit control + private int _sortcol; //index of clicked ColumnHeader + private Brush _sortcolbrush; //color of items in sorted column + private Brush _highlightbrush; //color of highlighted items + private int _cpadding; //padding of the embedded controls + + private const int LVM_FIRST = 0x1000; + private const int LVM_SCROLL = (LVM_FIRST + 20); + private const int WM_HSCROLL = 0x114; + private const int WM_VSCROLL = 0x115; + private const int WM_MOUSEWHEEL = 0x020A; + private const int WM_PAINT = 0x000F; + + private struct EmbeddedControl + { + public Control MyControl; + public EXControlListViewSubItem MySubItem; + } + + private ArrayList _controls; + + protected override void WndProc(ref Message m) + { + if (m.Msg == WM_PAINT) + { + foreach (EmbeddedControl c in _controls) + { + Rectangle r = c.MySubItem.Bounds; + if (r.Y > 0 && r.Y < ClientRectangle.Height) + { + c.MyControl.Visible = true; + c.MyControl.Bounds = new Rectangle( + r.X + _cpadding, r.Y + _cpadding, + r.Width - (2 * _cpadding), r.Height - (2 * _cpadding)); + } + else + { + c.MyControl.Visible = false; + } + } + } + switch (m.Msg) + { + case WM_HSCROLL: + case WM_VSCROLL: + case WM_MOUSEWHEEL: + this.Focus(); + break; + } + base.WndProc(ref m); + } + + private void ScrollMe(int x, int y) + { + NativeMethods.SendMessage(Handle, LVM_SCROLL, (IntPtr)x, (IntPtr)y); + } + + public EXListView() + { + _cpadding = 4; + _controls = new ArrayList(); + _sortcol = -1; + _sortcolbrush = SystemBrushes.ControlLight; + _highlightbrush = SystemBrushes.Highlight; + + OwnerDraw = true; + FullRowSelect = true; + View = View.Details; + MouseDown += new MouseEventHandler(SelfMouseDown); + MouseDoubleClick += new MouseEventHandler(SelfMouseDoubleClick); + DrawColumnHeader += new DrawListViewColumnHeaderEventHandler(SelfDrawColumnHeader); + DrawSubItem += new DrawListViewSubItemEventHandler(SelfDrawSubItem); + MouseMove += new MouseEventHandler(SelfMouseMove); + ColumnClick += new ColumnClickEventHandler(SelfColumnClick); + + txtbx = new TextBox { Visible = false }; + Controls.Add(txtbx); + txtbx.Leave += new EventHandler(ControlLeave); + txtbx.KeyPress += new KeyPressEventHandler(TxtBx_KeyPress); + } + + public void AddControlToSubItem(Control control, EXControlListViewSubItem subitem) + { + Controls.Add(control); + subitem.MyControl = control; + + EmbeddedControl ec; + ec.MyControl = control; + ec.MySubItem = subitem; + _controls.Add(ec); + } + + public void RemoveControlFromSubItem(EXControlListViewSubItem subitem) + { + Control c = subitem.MyControl; + for (int i = 0; i < this._controls.Count; i++) + { + if (((EmbeddedControl)this._controls[i]).MySubItem == subitem) + { + _controls.RemoveAt(i); + subitem.MyControl = null; + Controls.Remove(c); + c.Dispose(); + return; + } + } + } + + public int ControlPadding + { + get { return _cpadding; } + set { _cpadding = value; } + } + + public Brush MySortBrush + { + get { return _sortcolbrush; } + set { _sortcolbrush = value; } + } + + public Brush MyHighlightBrush + { + get { return _highlightbrush; } + set { _highlightbrush = value; } + } + + private void TxtBx_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == (char)Keys.Return) + { + _clickedsubitem.Text = txtbx.Text; + txtbx.Visible = false; + _clickeditem.Tag = null; + } + } + + private void ControlLeave(object sender, EventArgs e) + { + Control c = (Control)sender; + _clickedsubitem.Text = c.Text; + c.Visible = false; + _clickeditem.Tag = null; + } + + private void SelfMouseDown(object sender, MouseEventArgs e) + { + ListViewHitTestInfo lstvinfo = this.HitTest(e.X, e.Y); + ListViewItem.ListViewSubItem subitem = lstvinfo.SubItem; + if (subitem == null) + return; + + int subx = subitem.Bounds.Left; + if (subx < 0) + { + this.ScrollMe(subx, 0); + } + } + + private void SelfMouseDoubleClick(object sender, MouseEventArgs e) + { + EXListViewItem lstvItem = this.GetItemAt(e.X, e.Y) as EXListViewItem; + if (lstvItem == null) + return; + + _clickeditem = lstvItem; + int x = lstvItem.Bounds.Left; + int i; + for (i = 0; i < this.Columns.Count; i++) + { + x = x + this.Columns[i].Width; + if (x > e.X) + { + x = x - this.Columns[i].Width; + _clickedsubitem = lstvItem.SubItems[i]; + _col = i; + break; + } + } + + if (!(this.Columns[i] is EXColumnHeader)) + return; + + EXColumnHeader col = (EXColumnHeader)this.Columns[i]; + if (col.GetType() == typeof(EXEditableColumnHeader)) + { + EXEditableColumnHeader editcol = (EXEditableColumnHeader)col; + if (editcol.MyControl != null) + { + Control c = editcol.MyControl; + if (c.Tag != null) + { + this.Controls.Add(c); + c.Tag = null; + if (c is ComboBox) + { + ((ComboBox)c).SelectedValueChanged += new EventHandler(CmBx_SelectedValueChanged); + } + c.Leave += new EventHandler(ControlLeave); + } + c.Location = new Point(x, this.GetItemRect(this.Items.IndexOf(lstvItem)).Y); + c.Width = this.Columns[i].Width; + if (c.Width > this.Width) + c.Width = this.ClientRectangle.Width; + c.Text = _clickedsubitem.Text; + c.Visible = true; + c.BringToFront(); + c.Focus(); + } + else + { + txtbx.Location = new Point(x, this.GetItemRect(this.Items.IndexOf(lstvItem)).Y); + txtbx.Width = this.Columns[i].Width; + if (txtbx.Width > this.Width) + txtbx.Width = this.ClientRectangle.Width; + txtbx.Text = _clickedsubitem.Text; + txtbx.Visible = true; + txtbx.BringToFront(); + txtbx.Focus(); + } + } + else if (col.GetType() == typeof(EXBoolColumnHeader)) + { + EXBoolColumnHeader boolcol = (EXBoolColumnHeader)col; + if (boolcol.Editable) + { + EXBoolListViewSubItem boolsubitem = (EXBoolListViewSubItem)_clickedsubitem; + if (boolsubitem.BoolValue == true) + { + boolsubitem.BoolValue = false; + } + else + { + boolsubitem.BoolValue = true; + } + Invalidate(boolsubitem.Bounds); + } + } + } + + private void CmBx_SelectedValueChanged(object sender, EventArgs e) + { + if (((Control)sender).Visible == false || _clickedsubitem == null) + return; + + if (sender.GetType() == typeof(EXComboBox)) + { + EXComboBox excmbx = (EXComboBox)sender; + object item = excmbx.SelectedItem; + //Is this an combobox item with one image? + if (item.GetType() == typeof(EXComboBox.EXImageItem)) + { + EXComboBox.EXImageItem imgitem = (EXComboBox.EXImageItem)item; + //Is the first column clicked -- in that case it's a ListViewItem + if (_col == 0) + { + if (_clickeditem.GetType() == typeof(EXImageListViewItem)) + { + ((EXImageListViewItem)_clickeditem).MyImage = imgitem.MyImage; + } + else if (_clickeditem.GetType() == typeof(EXMultipleImagesListViewItem)) + { + EXMultipleImagesListViewItem imglstvitem = (EXMultipleImagesListViewItem)_clickeditem; + imglstvitem.MyImages.Clear(); + imglstvitem.MyImages.AddRange(new object[] { imgitem.MyImage }); + } + //another column than the first one is clicked, so we have a ListViewSubItem + } + else + { + if (_clickedsubitem.GetType() == typeof(EXImageListViewSubItem)) + { + EXImageListViewSubItem imgsub = (EXImageListViewSubItem)_clickedsubitem; + imgsub.MyImage = imgitem.MyImage; + } + else if (_clickedsubitem.GetType() == typeof(EXMultipleImagesListViewSubItem)) + { + EXMultipleImagesListViewSubItem imgsub = (EXMultipleImagesListViewSubItem)_clickedsubitem; + imgsub.MyImages.Clear(); + imgsub.MyImages.Add(imgitem.MyImage); + imgsub.MyValue = imgitem.MyValue; + } + } + //or is this a combobox item with multiple images? + } + else if (item.GetType() == typeof(EXComboBox.EXMultipleImagesItem)) + { + EXComboBox.EXMultipleImagesItem imgitem = (EXComboBox.EXMultipleImagesItem)item; + if (_col == 0) + { + if (_clickeditem.GetType() == typeof(EXImageListViewItem)) + { + ((EXImageListViewItem)_clickeditem).MyImage = (Image)imgitem.MyImages[0]; + } + else if (_clickeditem.GetType() == typeof(EXMultipleImagesListViewItem)) + { + EXMultipleImagesListViewItem imglstvitem = (EXMultipleImagesListViewItem)_clickeditem; + imglstvitem.MyImages.Clear(); + imglstvitem.MyImages.AddRange(imgitem.MyImages); + } + } + else + { + if (_clickedsubitem.GetType() == typeof(EXImageListViewSubItem)) + { + EXImageListViewSubItem imgsub = (EXImageListViewSubItem)_clickedsubitem; + if (imgitem.MyImages != null) + { + imgsub.MyImage = (Image)imgitem.MyImages[0]; + } + } + else if (_clickedsubitem.GetType() == typeof(EXMultipleImagesListViewSubItem)) + { + EXMultipleImagesListViewSubItem imgsub = (EXMultipleImagesListViewSubItem)_clickedsubitem; + imgsub.MyImages.Clear(); + imgsub.MyImages.AddRange(imgitem.MyImages); + imgsub.MyValue = imgitem.MyValue; + } + } + } + } + + ComboBox c = (ComboBox)sender; + _clickedsubitem.Text = c.Text; + c.Visible = false; + _clickeditem.Tag = null; + } + + private void SelfMouseMove(object sender, MouseEventArgs e) + { + ListViewItem item = this.GetItemAt(e.X, e.Y); + if (item != null && item.Tag == null) + { + this.Invalidate(item.Bounds); + item.Tag = "t"; + } + } + + private void SelfDrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + e.DrawDefault = true; + } + + private void SelfDrawSubItem(object sender, DrawListViewSubItemEventArgs e) + { + e.DrawBackground(); + if (e.ColumnIndex == _sortcol) + { + e.Graphics.FillRectangle(_sortcolbrush, e.Bounds); + } + if ((e.ItemState & ListViewItemStates.Selected) != 0) + { + e.Graphics.FillRectangle(_highlightbrush, e.Bounds); + } + int fonty = e.Bounds.Y + ((int)(e.Bounds.Height / 2)) - ((int)(e.SubItem.Font.Height / 2)); + int x = e.Bounds.X + 2; + if (e.ColumnIndex == 0) + { + EXListViewItem item = (EXListViewItem)e.Item; + if (item.GetType() == typeof(EXImageListViewItem)) + { + EXImageListViewItem imageitem = (EXImageListViewItem)item; + if (imageitem.MyImage != null) + { + Image img = imageitem.MyImage; + int imgy = e.Bounds.Y + ((int)(e.Bounds.Height / 2)) - ((int)(img.Height / 2)); + e.Graphics.DrawImage(img, x, imgy, img.Width, img.Height); + x += img.Width + 2; + } + } + e.Graphics.DrawString(e.SubItem.Text, e.SubItem.Font, new SolidBrush(e.SubItem.ForeColor), x, fonty); + return; + } + EXListViewSubItemAB subitem = e.SubItem as EXListViewSubItemAB; + if (subitem == null) + { + e.DrawDefault = true; + } + else + { + x = subitem.DoDraw(e, x, Columns[e.ColumnIndex] as EXColumnHeader); + e.Graphics.DrawString(e.SubItem.Text, e.SubItem.Font, new SolidBrush(e.SubItem.ForeColor), x, fonty); + } + } + + private void SelfColumnClick(object sender, ColumnClickEventArgs e) + { + if (this.Items.Count == 0) return; + for (int i = 0; i < this.Columns.Count; i++) + { + this.Columns[i].ImageKey = null; + } + for (int i = 0; i < this.Items.Count; i++) + { + this.Items[i].Tag = null; + } + if (e.Column != _sortcol) + { + _sortcol = e.Column; + this.Sorting = SortOrder.Ascending; + this.Columns[e.Column].ImageKey = "up"; + } + else + { + if (this.Sorting == SortOrder.Ascending) + { + this.Sorting = SortOrder.Descending; + this.Columns[e.Column].ImageKey = "down"; + } + else + { + this.Sorting = SortOrder.Ascending; + this.Columns[e.Column].ImageKey = "up"; + } + } + if (_sortcol == 0) + { + //ListViewItem + if (this.Items[0].GetType() == typeof(EXListViewItem)) + { + //sorting on text + this.ListViewItemSorter = new ListViewItemComparerText(e.Column, this.Sorting); + } + else + { + //sorting on value + this.ListViewItemSorter = new ListViewItemComparerValue(e.Column, this.Sorting); + } + } + else + { + //ListViewSubItem + if (this.Items[0].SubItems[_sortcol].GetType() == typeof(EXListViewSubItemAB)) + { + //sorting on text + this.ListViewItemSorter = new ListViewSubItemComparerText(e.Column, this.Sorting); + } + else + { + //sorting on value + this.ListViewItemSorter = new ListViewSubItemComparerValue(e.Column, this.Sorting); + } + } + } + + class ListViewSubItemComparerText : System.Collections.IComparer + { + + private int _col; + private SortOrder _order; + + public ListViewSubItemComparerText() + { + _col = 0; + _order = SortOrder.Ascending; + } + + public ListViewSubItemComparerText(int col, SortOrder order) + { + _col = col; + _order = order; + } + + public int Compare(object x, object y) + { + int returnVal = -1; + + string xstr = ((ListViewItem)x).SubItems[_col].Text; + string ystr = ((ListViewItem)y).SubItems[_col].Text; + + decimal dec_x; + decimal dec_y; + DateTime dat_x; + DateTime dat_y; + + if (Decimal.TryParse(xstr, out dec_x) && Decimal.TryParse(ystr, out dec_y)) + { + returnVal = Decimal.Compare(dec_x, dec_y); + } + else if (DateTime.TryParse(xstr, out dat_x) && DateTime.TryParse(ystr, out dat_y)) + { + returnVal = DateTime.Compare(dat_x, dat_y); + } + else + { + returnVal = String.Compare(xstr, ystr); + } + if (_order == SortOrder.Descending) returnVal *= -1; + return returnVal; + } + + } + + class ListViewSubItemComparerValue : System.Collections.IComparer + { + + private int _col; + private SortOrder _order; + + public ListViewSubItemComparerValue() + { + _col = 0; + _order = SortOrder.Ascending; + } + + public ListViewSubItemComparerValue(int col, SortOrder order) + { + _col = col; + _order = order; + } + + public int Compare(object x, object y) + { + int returnVal = -1; + + string xstr = ((EXListViewSubItemAB)((ListViewItem)x).SubItems[_col]).MyValue; + string ystr = ((EXListViewSubItemAB)((ListViewItem)y).SubItems[_col]).MyValue; + + decimal dec_x; + decimal dec_y; + DateTime dat_x; + DateTime dat_y; + + if (Decimal.TryParse(xstr, out dec_x) && Decimal.TryParse(ystr, out dec_y)) + { + returnVal = Decimal.Compare(dec_x, dec_y); + } + else if (DateTime.TryParse(xstr, out dat_x) && DateTime.TryParse(ystr, out dat_y)) + { + returnVal = DateTime.Compare(dat_x, dat_y); + } + else + { + returnVal = String.Compare(xstr, ystr); + } + if (_order == SortOrder.Descending) returnVal *= -1; + return returnVal; + } + + } + + class ListViewItemComparerText : System.Collections.IComparer + { + + private int _col; + private SortOrder _order; + + public ListViewItemComparerText() + { + _col = 0; + _order = SortOrder.Ascending; + } + + public ListViewItemComparerText(int col, SortOrder order) + { + _col = col; + _order = order; + } + + public int Compare(object x, object y) + { + int returnVal = -1; + + string xstr = ((ListViewItem)x).Text; + string ystr = ((ListViewItem)y).Text; + + decimal dec_x; + decimal dec_y; + DateTime dat_x; + DateTime dat_y; + + if (Decimal.TryParse(xstr, out dec_x) && Decimal.TryParse(ystr, out dec_y)) + { + returnVal = Decimal.Compare(dec_x, dec_y); + } + else if (DateTime.TryParse(xstr, out dat_x) && DateTime.TryParse(ystr, out dat_y)) + { + returnVal = DateTime.Compare(dat_x, dat_y); + } + else + { + returnVal = String.Compare(xstr, ystr); + } + if (_order == SortOrder.Descending) returnVal *= -1; + return returnVal; + } + + } + + class ListViewItemComparerValue : System.Collections.IComparer + { + + private int _col; + private SortOrder _order; + + public ListViewItemComparerValue() + { + _col = 0; + _order = SortOrder.Ascending; + } + + public ListViewItemComparerValue(int col, SortOrder order) + { + _col = col; + _order = order; + } + + public int Compare(object x, object y) + { + int returnVal = -1; + + string xstr = ((EXListViewItem)x).MyValue; + string ystr = ((EXListViewItem)y).MyValue; + + decimal dec_x; + decimal dec_y; + DateTime dat_x; + DateTime dat_y; + + if (Decimal.TryParse(xstr, out dec_x) && Decimal.TryParse(ystr, out dec_y)) + { + returnVal = Decimal.Compare(dec_x, dec_y); + } + else if (DateTime.TryParse(xstr, out dat_x) && DateTime.TryParse(ystr, out dat_y)) + { + returnVal = DateTime.Compare(dat_x, dat_y); + } + else + { + returnVal = String.Compare(xstr, ystr); + } + if (_order == SortOrder.Descending) returnVal *= -1; + return returnVal; + } + + } + + } + + public class EXColumnHeader : ColumnHeader + { + + public EXColumnHeader() + { + + } + + public EXColumnHeader(string text) + { + this.Text = text; + } + + public EXColumnHeader(string text, int width) + { + this.Text = text; + this.Width = width; + } + + } + + public class EXEditableColumnHeader : EXColumnHeader + { + + private Control _control; + + public EXEditableColumnHeader() + { + + } + + public EXEditableColumnHeader(string text) + { + this.Text = text; + } + + public EXEditableColumnHeader(string text, int width) + { + this.Text = text; + this.Width = width; + } + + public EXEditableColumnHeader(string text, Control control) + { + this.Text = text; + this.MyControl = control; + } + + public EXEditableColumnHeader(string text, Control control, int width) + { + this.Text = text; + this.MyControl = control; + this.Width = width; + } + + public Control MyControl + { + get { return _control; } + set + { + _control = value; + _control.Visible = false; + _control.Tag = "not_init"; + } + } + + } + + public class EXBoolColumnHeader : EXColumnHeader + { + + private Image _trueimage; + private Image _falseimage; + private bool _editable; + + public EXBoolColumnHeader() + { + init(); + } + + public EXBoolColumnHeader(string text) + { + init(); + this.Text = text; + } + + public EXBoolColumnHeader(string text, int width) + { + init(); + this.Text = text; + this.Width = width; + } + + public EXBoolColumnHeader(string text, Image trueimage, Image falseimage) + { + init(); + this.Text = text; + _trueimage = trueimage; + _falseimage = falseimage; + } + + public EXBoolColumnHeader(string text, Image trueimage, Image falseimage, int width) + { + init(); + this.Text = text; + _trueimage = trueimage; + _falseimage = falseimage; + this.Width = width; + } + + private void init() + { + _editable = false; + } + + public Image TrueImage + { + get { return _trueimage; } + set { _trueimage = value; } + } + + public Image FalseImage + { + get { return _falseimage; } + set { _falseimage = value; } + } + + public bool Editable + { + get { return _editable; } + set { _editable = value; } + } + + } + + public abstract class EXListViewSubItemAB : ListViewItem.ListViewSubItem + { + + private string _value = ""; + + public EXListViewSubItemAB() + { + + } + + public EXListViewSubItemAB(string text) + { + this.Text = text; + } + + public string MyValue + { + get { return _value; } + set { _value = value; } + } + + //return the new x coordinate + public abstract int DoDraw(DrawListViewSubItemEventArgs e, int x, EXColumnHeader ch); + + } + + public class EXListViewSubItem : EXListViewSubItemAB + { + + public EXListViewSubItem() + { + + } + + public EXListViewSubItem(string text) + { + this.Text = text; + } + + public override int DoDraw(DrawListViewSubItemEventArgs e, int x, EXColumnHeader ch) + { + return x; + } + + } + + public class EXControlListViewSubItem : EXListViewSubItemAB + { + + private Control _control; + + public EXControlListViewSubItem() + { + + } + + public Control MyControl + { + get { return _control; } + set { _control = value; } + } + + public override int DoDraw(DrawListViewSubItemEventArgs e, int x, EXColumnHeader ch) + { + return x; + } + + } + + public class EXImageListViewSubItem : EXListViewSubItemAB + { + + private Image _image; + + public EXImageListViewSubItem() + { + + } + + public EXImageListViewSubItem(string text) + { + this.Text = text; + } + + public EXImageListViewSubItem(Image image) + { + _image = image; + } + + public EXImageListViewSubItem(Image image, string value) + { + _image = image; + this.MyValue = value; + } + + public EXImageListViewSubItem(string text, Image image, string value) + { + this.Text = text; + _image = image; + this.MyValue = value; + } + + public Image MyImage + { + get { return _image; } + set { _image = value; } + } + + public override int DoDraw(DrawListViewSubItemEventArgs e, int x, EXColumnHeader ch) + { + if (this.MyImage != null) + { + Image img = this.MyImage; + int imgy = e.Bounds.Y + ((int)(e.Bounds.Height / 2)) - ((int)(img.Height / 2)); + e.Graphics.DrawImage(img, x, imgy, img.Width, img.Height); + x += img.Width + 2; + } + return x; + } + + } + + public class EXMultipleImagesListViewSubItem : EXListViewSubItemAB + { + + private ArrayList _images; + + public EXMultipleImagesListViewSubItem() + { + + } + + public EXMultipleImagesListViewSubItem(string text) + { + this.Text = text; + } + + public EXMultipleImagesListViewSubItem(ArrayList images) + { + _images = images; + } + + public EXMultipleImagesListViewSubItem(ArrayList images, string value) + { + _images = images; + this.MyValue = value; + } + + public EXMultipleImagesListViewSubItem(string text, ArrayList images, string value) + { + this.Text = text; + _images = images; + this.MyValue = value; + } + + public ArrayList MyImages + { + get { return _images; } + set { _images = value; } + } + + public override int DoDraw(DrawListViewSubItemEventArgs e, int x, EXColumnHeader ch) + { + if (this.MyImages != null && this.MyImages.Count > 0) + { + for (int i = 0; i < this.MyImages.Count; i++) + { + Image img = (Image)this.MyImages[i]; + int imgy = e.Bounds.Y + ((int)(e.Bounds.Height / 2)) - ((int)(img.Height / 2)); + e.Graphics.DrawImage(img, x, imgy, img.Width, img.Height); + x += img.Width + 2; + } + } + return x; + } + + } + + public class EXBoolListViewSubItem : EXListViewSubItemAB + { + + private bool _value; + + public EXBoolListViewSubItem() + { + + } + + public EXBoolListViewSubItem(bool val) + { + _value = val; + this.MyValue = val.ToString(); + } + + public bool BoolValue + { + get { return _value; } + set + { + _value = value; + this.MyValue = value.ToString(); + } + } + + public override int DoDraw(DrawListViewSubItemEventArgs e, int x, EXColumnHeader ch) + { + EXBoolColumnHeader boolcol = (EXBoolColumnHeader)ch; + Image boolimg; + if (this.BoolValue == true) + { + boolimg = boolcol.TrueImage; + } + else + { + boolimg = boolcol.FalseImage; + } + int imgy = e.Bounds.Y + ((int)(e.Bounds.Height / 2)) - ((int)(boolimg.Height / 2)); + e.Graphics.DrawImage(boolimg, x, imgy, boolimg.Width, boolimg.Height); + x += boolimg.Width + 2; + return x; + } + + } + + public class EXListViewItem : ListViewItem + { + + private string _value; + + public EXListViewItem() + { + + } + + public EXListViewItem(string text) + { + this.Text = text; + } + + public string MyValue + { + get { return _value; } + set { _value = value; } + } + + } + + public class EXImageListViewItem : EXListViewItem + { + + private Image _image; + + public EXImageListViewItem() + { + + } + + public EXImageListViewItem(string text) + { + this.Text = text; + } + + public EXImageListViewItem(Image image) + { + _image = image; + } + + public EXImageListViewItem(string text, Image image) + { + _image = image; + this.Text = text; + } + + public EXImageListViewItem(string text, Image image, string value) + { + this.Text = text; + _image = image; + this.MyValue = value; + } + + public Image MyImage + { + get { return _image; } + set { _image = value; } + } + + } + + public class EXMultipleImagesListViewItem : EXListViewItem + { + + private ArrayList _images; + + public EXMultipleImagesListViewItem() + { + + } + + public EXMultipleImagesListViewItem(string text) + { + this.Text = text; + } + + public EXMultipleImagesListViewItem(ArrayList images) + { + _images = images; + } + + public EXMultipleImagesListViewItem(string text, ArrayList images) + { + this.Text = text; + _images = images; + } + + public EXMultipleImagesListViewItem(string text, ArrayList images, string value) + { + this.Text = text; + _images = images; + this.MyValue = value; + } + + public ArrayList MyImages + { + get { return _images; } + set { _images = value; } + } + + } +} diff --git a/ThirdParty/WebApi.cs b/ThirdParty/WebApi.cs index 67779f6..bd8b879 100644 --- a/ThirdParty/WebApi.cs +++ b/ThirdParty/WebApi.cs @@ -33,8 +33,8 @@ namespace DutyContent } catch (Exception ex) { - MesgLog.Ex(ex, 30); - MesgLog.L("URL: {0}", url); + Logger.Ex(ex, 30); + Logger.L("URL: {0}", url); } return null; diff --git a/ThirdParty/WinFormSupp.cs b/ThirdParty/WinFormSupp.cs new file mode 100644 index 0000000..14f5edd --- /dev/null +++ b/ThirdParty/WinFormSupp.cs @@ -0,0 +1,16 @@ +using System.Reflection; +using System.Windows.Forms; + +namespace DutyContent.ThirdParty +{ + static class WinFormSupp + { + public static void DoubleBuffered(Control control, bool enabled) + { + var prop = control.GetType().GetProperty( + "DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic); + + prop.SetValue(control, enabled, null); + } + } +} diff --git a/Updater.cs b/Updater.cs index 35decde..31a2221 100644 --- a/Updater.cs +++ b/Updater.cs @@ -28,7 +28,7 @@ namespace DutyContent } catch (Exception ex) { - MesgLog.Ex(ex, 31); + Logger.Ex(ex, 31); } }); } @@ -44,7 +44,7 @@ namespace DutyContent } catch (Exception ex) { - MesgLog.Ex(ex, 32); + Logger.Ex(ex, 32); return null; }