public MainWindow() { try { InitializeComponent(); // update titles Title = APP_NAME + " " + VERSION; // upate helper Helpers.SetDispatcher(Dispatcher); // used for setting menu icons based on open windows IconToWindow = new Dictionary<string, DockingWindow>() { { npcIcon.Name, npcWindow }, { verifiedPlayersIcon.Name, verifiedPlayersWindow }, { verifiedPetsIcon.Name, verifiedPetsWindow }, { petMappingIcon.Name, petMappingWindow }, { playerParseIcon.Name, playerParseTextWindow } }; // Clear/Reset DataManager.Instance.EventsClearedActiveData += Instance_EventsClearedActiveData; // verified pets table verifiedPetsGrid.ItemsSource = VerifiedPetsView; PlayerManager.Instance.EventsNewVerifiedPet += (sender, name) => Dispatcher.InvokeAsync(() => { Helpers.InsertNameIntoSortedList(name, VerifiedPetsView); verifiedPetsWindow.Title = string.Format(CultureInfo.CurrentCulture, PETS_LIST_TITLE, VerifiedPetsView.Count); }); // pet -> players petMappingGrid.ItemsSource = PetPlayersView; PlayerManager.Instance.EventsNewPetMapping += (sender, mapping) => { Dispatcher.InvokeAsync(() => { var existing = PetPlayersView.FirstOrDefault(item => item.Pet.Equals(mapping.Pet, StringComparison.OrdinalIgnoreCase)); if (existing != null && existing.Owner != mapping.Owner) { existing.Owner = mapping.Owner; } else { PetPlayersView.Add(mapping); } petMappingWindow.Title = "Pet Owners (" + PetPlayersView.Count + ")"; }); CheckComputeStats(); }; PlayerManager.Instance.EventsRemoveVerifiedPet += (sender, name) => Dispatcher.InvokeAsync(() => { var found = VerifiedPetsView.FirstOrDefault(item => item.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); if (found != null) { VerifiedPetsView.Remove(found); verifiedPetsWindow.Title = string.Format(CultureInfo.CurrentCulture, PETS_LIST_TITLE, VerifiedPetsView.Count); var existing = PetPlayersView.FirstOrDefault(item => item.Pet.Equals(name, StringComparison.OrdinalIgnoreCase)); if (existing != null) { PetPlayersView.Remove(existing); petMappingWindow.Title = "Pet Owners (" + PetPlayersView.Count + ")"; } CheckComputeStats(); } }); // verified player table verifiedPlayersGrid.ItemsSource = VerifiedPlayersProperty; PlayerManager.Instance.EventsNewVerifiedPlayer += (sender, name) => Dispatcher.InvokeAsync(() => { Helpers.InsertNameIntoSortedList(name, VerifiedPlayersProperty); verifiedPlayersWindow.Title = string.Format(CultureInfo.CurrentCulture, PLAYER_LIST_TITLE, VerifiedPlayersProperty.Count); }); PlayerManager.Instance.EventsRemoveVerifiedPlayer += (sender, name) => Dispatcher.InvokeAsync(() => { var found = VerifiedPlayersProperty.FirstOrDefault(item => item.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); if (found != null) { VerifiedPlayersProperty.Remove(found); verifiedPlayersWindow.Title = string.Format(CultureInfo.CurrentCulture, PLAYER_LIST_TITLE, VerifiedPlayersProperty.Count); var existing = PetPlayersView.FirstOrDefault(item => item.Owner.Equals(name, StringComparison.OrdinalIgnoreCase)); if (existing != null) { PetPlayersView.Remove(existing); petMappingWindow.Title = "Pet Owners (" + PetPlayersView.Count + ")"; } CheckComputeStats(); } }); (npcWindow.Content as FightTable).EventsSelectionChange += (sender, data) => ComputeStats(); DamageStatsManager.Instance.EventsUpdateDataPoint += (sender, data) => HandleChartUpdateEvent(DamageChartWindow, sender, data); HealingStatsManager.Instance.EventsUpdateDataPoint += (sender, data) => HandleChartUpdateEvent(HealingChartWindow, sender, data); TankingStatsManager.Instance.EventsUpdateDataPoint += (sender, data) => HandleChartUpdateEvent(TankingChartWindow, sender, data); // Setup themes ThemeManager.BeginUpdate(); ThemeManager.AreNativeThemesEnabled = true; SharedThemeCatalogRegistrar.Register(); DockingThemeCatalogRegistrar.Register(); ThemeManager.CurrentTheme = ThemeName.MetroDark.ToString(); UpdateDeleteChatMenu(); // Bane Damage IsBaneDamageEnabled = ConfigUtil.IfSet("IncludeBaneDamage"); enableBaneDamageIcon.Visibility = IsBaneDamageEnabled ? Visibility.Visible : Visibility.Hidden; // Damage Overlay enableDamageOverlayIcon.Visibility = OverlayUtil.LoadSettings() ? Visibility.Visible : Visibility.Hidden; // AoE healing IsAoEHealingEnabled = ConfigUtil.IfSet("IncludeAoEHealing"); enableAoEHealingIcon.Visibility = IsAoEHealingEnabled ? Visibility.Visible : Visibility.Hidden; // Hide window when minimized IsHideOnMinimizeEnabled = ConfigUtil.IfSet("HideWindowOnMinimize"); enableHideOnMinimizeIcon.Visibility = IsHideOnMinimizeEnabled ? Visibility.Visible : Visibility.Hidden; // Show Tanking Summary at startup ConfigUtil.IfSet("ShowTankingSummaryAtStartup", OpenTankingSummary); // Show Healing Summary at startup ConfigUtil.IfSet("ShowHealingSummaryAtStartup", OpenHealingSummary); // Show Healing Summary at startup ConfigUtil.IfSet("ShowDamageSummaryAtStartup", OpenDamageSummary, true); // Show Tanking Summary at startup ConfigUtil.IfSet("ShowTankingChartAtStartup", OpenTankingChart); // Show Healing Summary at startup ConfigUtil.IfSet("ShowHealingChartAtStartup", OpenHealingChart); // Show Healing Summary at startup ConfigUtil.IfSet("ShowDamageChartAtStartup", OpenDamageChart); LOG.Info("Initialized Components"); } catch (Exception e) { LOG.Error(e); throw; } finally { ThemeManager.EndUpdate(); } }
private void OpenLogFile(LogOption option, int lastMins = -1) { CurrentLogOption = option; try { // WPF doesn't have its own file chooser so use Win32 Version Microsoft.Win32.OpenFileDialog dialog = new Microsoft.Win32.OpenFileDialog { // filter to txt files DefaultExt = ".txt", Filter = "eqlog_Player_server (.txt .txt.gz)|*.txt;*.txt.gz", }; // show dialog and read result var result = dialog.ShowDialog(); if (result.Value) { StopProcessing(); CastProcessor = new ActionProcessor<LineData>("CastProcessor", CastLineParser.Process); DamageProcessor = new ActionProcessor<LineData>("DamageProcessor", DamageLineParser.Process); HealingProcessor = new ActionProcessor<LineData>("HealProcessor", HealingLineParser.Process); MiscProcessor = new ActionProcessor<LineData>("MiscProcessor", MiscLineParser.Process); Title = APP_NAME + " " + VERSION + " -- (" + dialog.FileName + ")"; StartLoadTime = DateTime.Now; FilePosition = 0; string name = "You"; string server = "Uknown"; if (dialog.FileName.Length > 0) { LOG.Info("Selected Log File: " + dialog.FileName); string file = Path.GetFileName(dialog.FileName); MatchCollection matches = ParseFileName.Matches(file); if (matches.Count == 1) { if (matches[0].Groups.Count > 1) { name = matches[0].Groups[1].Value; } if (matches[0].Groups.Count > 2) { server = matches[0].Groups[2].Value; } } } var changed = ConfigUtil.ServerName != server; if (changed) { PetPlayersView.Clear(); VerifiedPetsView.Clear(); VerifiedPlayersProperty.Clear(); verifiedPetsWindow.Title = string.Format(CultureInfo.CurrentCulture, PETS_LIST_TITLE, VerifiedPetsView.Count); verifiedPlayersWindow.Title = string.Format(CultureInfo.CurrentCulture, PLAYER_LIST_TITLE, VerifiedPlayersProperty.Count); PlayerManager.Instance.Save(); } ConfigUtil.ServerName = server; ConfigUtil.PlayerName = name; if (changed) { PlayerManager.Instance.Clear(); } DataManager.Instance.Clear(); PlayerChatManager = new ChatManager(); NpcDamageManager.ResetTime(); EQLogReader = new LogReader(dialog.FileName, FileLoadingCallback, CurrentLogOption == LogOption.MONITOR, lastMins); EQLogReader.Start(); UpdateLoadingProgress(); } } catch (Exception e) { if (!(e is InvalidCastException || e is ArgumentException || e is FormatException)) { throw; } } }