private void LoadPlayers(string updatedPlayer = null) { _ = Dispatcher.InvokeAsync(() => { if (updatedPlayer == null || (updatedPlayer != null && !players.Items.Contains(updatedPlayer))) { var playerList = ChatManager.GetArchivedPlayers(); if (playerList.Count > 0) { if (players.ItemsSource == null) { players.Items.Clear(); } players.ItemsSource = playerList; string player = ConfigUtil.GetSetting("ChatSelectedPlayer"); if (string.IsNullOrEmpty(player) && !string.IsNullOrEmpty(ConfigUtil.PlayerName) && !string.IsNullOrEmpty(ConfigUtil.ServerName)) { player = ConfigUtil.PlayerName + "." + ConfigUtil.ServerName; } players.SelectedIndex = (player != null && playerList.IndexOf(player) > -1) ? playerList.IndexOf(player) : 0; } } else { if (!RefreshTimer.IsEnabled) { RefreshTimer.Start(); } } }, DispatcherPriority.DataBind); }
private void LoadColorSettings() { // load defaults ColorList.Add((Color)ColorConverter.ConvertFromString("#2e7d32")); ColorList.Add((Color)ColorConverter.ConvertFromString("#01579b")); ColorList.Add((Color)ColorConverter.ConvertFromString("#006064")); ColorList.Add((Color)ColorConverter.ConvertFromString("#673ab7")); ColorList.Add((Color)ColorConverter.ConvertFromString("#37474f")); for (int i = 0; i < ColorList.Count; i++) { try { string name = ConfigUtil.GetSetting(string.Format(CultureInfo.CurrentCulture, "OverlayRankColor{0}", i + 1)); if (!string.IsNullOrEmpty(name) && ColorConverter.ConvertFromString(name) is Color color) { ColorList[i] = color; // override } } catch (FormatException ex) { LOG.Error("Invalid Overlay Color", ex); } } }
public EQLogViewer() { InitializeComponent(); fontSize.ItemsSource = FontSizeList; logSearchTime.ItemsSource = Times; string fgColor = ConfigUtil.GetSetting("EQLogViewerFontFgColor"); if (fontFgColor.ItemsSource is List <ColorItem> colors) { fontFgColor.SelectedItem = (colors.Find(item => item.Name == fgColor) is ColorItem found) ? found : colors.Find(item => item.Name == "#ffffff"); } string family = ConfigUtil.GetSetting("EQLogViewerFontFamily"); fontFamily.SelectedItem = (family != null) ? new FontFamily(family) : logBox.FontFamily; string size = ConfigUtil.GetSetting("EQLogViewerFontSize"); if (size != null && double.TryParse(size, out double dsize)) { fontSize.SelectedItem = dsize; } else { fontSize.SelectedValue = logBox.FontSize; } logSearch.Text = Properties.Resources.LOG_SEARCH_TEXT; logSearch2.Text = Properties.Resources.LOG_SEARCH_TEXT; progress.Foreground = MainWindow.WARNING_BRUSH; searchButton.Focus(); logFilter.Text = Properties.Resources.LOG_FILTER_TEXT; FilterTimer = new DispatcherTimer { Interval = new TimeSpan(0, 0, 0, 0, 1000) }; FilterTimer.Tick += (sender, e) => { UpdateUI(); FilterTimer.Stop(); }; }
public ChatViewer() { InitializeComponent(); fontSize.ItemsSource = FontSizeList; startDate.Text = Properties.Resources.CHAT_START_DATE; endDate.Text = Properties.Resources.CHAT_END_DATE; textFilter.Text = Properties.Resources.CHAT_TEXT_FILTER; var context = new AutoCompleteText() { Text = Properties.Resources.CHAT_TO_FILTER }; context.Items.AddRange(PlayerAutoCompleteList); toFilter.DataContext = context; context = new AutoCompleteText() { Text = Properties.Resources.CHAT_FROM_FILTER }; context.Items.AddRange(PlayerAutoCompleteList); fromFilter.DataContext = context; string fgColor = ConfigUtil.GetSetting("ChatFontFgColor"); if (fontFgColor.ItemsSource is List <ColorItem> colors) { fontFgColor.SelectedItem = (colors.Find(item => item.Name == fgColor) is ColorItem found) ? found : colors.Find(item => item.Name == "#ffffff"); } string family = ConfigUtil.GetSetting("ChatFontFamily"); fontFamily.SelectedItem = (family != null) ? new FontFamily(family) : chatBox.FontFamily; string size = ConfigUtil.GetSetting("ChatFontSize"); if (size != null && double.TryParse(size, out double dsize)) { fontSize.SelectedItem = dsize; } else { fontSize.SelectedValue = chatBox.FontSize; } FilterTimer = new DispatcherTimer { Interval = new TimeSpan(0, 0, 0, 0, 500) }; FilterTimer.Tick += (sender, e) => { FilterTimer.Stop(); ChangeSearch(); }; RefreshTimer = new DispatcherTimer { Interval = new TimeSpan(0, 0, 1) }; RefreshTimer.Tick += (sender, e) => { ChatIterator newIterator = new ChatIterator(players.SelectedValue as string, CurrentChatFilter); var tempChat = FirstChat; var tempFilter = CurrentChatFilter; if (tempChat != null) { Task.Run(() => { foreach (var chatType in newIterator.TakeWhile(chatType => chatType.Line != tempChat.Line).Reverse()) { Dispatcher.Invoke(() => { // make sure user didnt start new search if (tempFilter == CurrentChatFilter && RefreshTimer.IsEnabled && tempFilter.PastLiveFilter(chatType)) { if (chatBox.Document.Blocks.Count == 0) { MainParagraph = new Paragraph { Margin = new Thickness(0, 0, 0, 0), Padding = new Thickness(4, 0, 0, 4) }; chatBox.Document.Blocks.Add(MainParagraph); MainParagraph.Inlines.Add(new Run()); } var newItem = new Span(new Run(Environment.NewLine)); newItem.Inlines.Add(new Run(chatType.Line)); MainParagraph.Inlines.InsertAfter(MainParagraph.Inlines.LastInline, newItem); statusCount.Text = ++CurrentLineCount + " Lines"; FirstChat = chatType; } }, DispatcherPriority.DataBind); } Dispatcher.Invoke(() => RefreshTimer.Stop()); }); } }; LoadPlayers(); Ready = true; ChangeSearch(); ChatManager.EventsUpdatePlayer += ChatManager_EventsUpdatePlayer; ChatManager.EventsNewChannels += ChatManager_EventsNewChannels; }
public OverlayWindow(bool configure = false) { InitializeComponent(); LoadColorSettings(); string width = ConfigUtil.GetSetting("OverlayWidth"); string height = ConfigUtil.GetSetting("OverlayHeight"); string top = ConfigUtil.GetSetting("OverlayTop"); string left = ConfigUtil.GetSetting("OverlayLeft"); // Hide other player names on overlay IsHideOverlayOtherPlayersEnabled = ConfigUtil.IfSet("HideOverlayOtherPlayers"); showNameSelection.SelectedIndex = IsHideOverlayOtherPlayersEnabled ? 1 : 0; // Hide/Show crit rate IsShowOverlayCritRateEnabled = ConfigUtil.IfSet("ShowOverlayCritRate"); showCritRateSelection.SelectedIndex = IsShowOverlayCritRateEnabled ? 1 : 0; var margin = SystemParameters.WindowNonClientFrameThickness; bool offsetSize = configure || width == null || height == null || top == null || left == null; if (!offsetSize) { CreateRows(); Title = "Overlay"; MinHeight = 0; UpdateTimer = new DispatcherTimer { Interval = new TimeSpan(0, 0, 0, 0, 1000) }; UpdateTimer.Tick += UpdateTimerTick; AllowsTransparency = true; Style = null; WindowStyle = WindowStyle.None; SetVisible(false); ShowActivated = false; } else { overlayCanvas.Background = new SolidColorBrush(Color.FromRgb(45, 45, 48)); CreateRows(true); MinHeight = 130; AllowsTransparency = false; WindowStyle = WindowStyle.SingleBorderWindow; SetVisible(true); LoadTestData(); } if (width != null && double.TryParse(width, out double dvalue) && !double.IsNaN(dvalue)) { Width = offsetSize ? dvalue + margin.Left + margin.Right : dvalue; } if (height != null && double.TryParse(height, out dvalue) && !double.IsNaN(dvalue)) { Height = offsetSize ? dvalue + margin.Top + margin.Bottom : 0; if (!offsetSize) { CalculatedRowHeight = dvalue / (MAX_ROWS + 1); } } if (top != null && double.TryParse(top, out dvalue) && !double.IsNaN(dvalue)) { var test = offsetSize ? dvalue - margin.Top : dvalue; if (test >= SystemParameters.VirtualScreenTop && test < SystemParameters.VirtualScreenHeight) { Top = test; } } if (left != null && double.TryParse(left, out dvalue) && !double.IsNaN(dvalue)) { var test = offsetSize ? dvalue - margin.Left : dvalue; if (test >= SystemParameters.VirtualScreenLeft && test < SystemParameters.VirtualScreenWidth) { Left = test; } } int damageMode = ConfigUtil.GetSettingAsInteger("OverlayDamageMode"); foreach (var item in damageModeSelection.Items.Cast <ComboBoxItem>()) { if ((string)item.Tag == damageMode.ToString(CultureInfo.CurrentCulture)) { damageModeSelection.SelectedItem = item; CurrentDamageSelectionMode = damageMode; } } string fontSize = ConfigUtil.GetSetting("OverlayFontSize"); bool fontHasBeenSet = false; int currentFontSize = DEFAULT_TEXT_FONT_SIZE; if (fontSize != null && int.TryParse(fontSize, out currentFontSize) && currentFontSize >= 0 && currentFontSize <= 64) { foreach (var item in fontSizeSelection.Items) { if ((item as ComboBoxItem).Tag as string == fontSize) { fontSizeSelection.SelectedItem = item; SetFont(currentFontSize); fontHasBeenSet = true; } } } if (!fontHasBeenSet) { SetFont(currentFontSize); } if (!offsetSize) { NpcDamageManager.EventsPlayerAttackProcessed += NpcDamageManager_EventsPlayerAttackProcessed; DataManager.Instance.EventsNewInactiveFight += Instance_EventsNewInactiveFight; Active = true; } else { // remove when configuring NpcDamageManager.EventsPlayerAttackProcessed -= NpcDamageManager_EventsPlayerAttackProcessed; DataManager.Instance.EventsNewInactiveFight -= Instance_EventsNewInactiveFight; } if (!configure) { var settingsButton = CreateButton("Change Settings", "\xE713", currentFontSize - 1); settingsButton.Click += (object sender, RoutedEventArgs e) => OverlayUtil.OpenOverlay(Dispatcher, true, false); settingsButton.Margin = new Thickness(4, 0, 0, 0); var copyButton = CreateButton("Copy Parse", "\xE8C8", currentFontSize - 1); copyButton.Click += (object sender, RoutedEventArgs e) => { lock (Stats) { (Application.Current.MainWindow as MainWindow)?.AddAndCopyDamageParse(Stats, Stats.StatsList); } }; var refreshButton = CreateButton("Cancel Current Parse", "\xE8BB", currentFontSize - 1); refreshButton.Click += (object sender, RoutedEventArgs e) => OverlayUtil.ResetOverlay(Dispatcher); ButtonPopup = new Popup(); ButtonsPanel = CreateNameStackPanel(); ButtonsPanel.Children.Add(settingsButton); ButtonsPanel.Children.Add(copyButton); ButtonsPanel.Children.Add(refreshButton); ButtonPopup.Child = ButtonsPanel; ButtonPopup.AllowsTransparency = true; ButtonPopup.Opacity = 0.3; ButtonPopup.Placement = PlacementMode.Relative; ButtonPopup.PlacementTarget = this; ButtonPopup.VerticalOffset = -1; ButtonsPanel.SizeChanged += (object sender, SizeChangedEventArgs e) => { if (TitlePanel.Margin.Left != e.NewSize.Width + 2) { TitlePanel.Margin = new Thickness(e.NewSize.Width + 2, TitlePanel.Margin.Top, 0, TitlePanel.Margin.Bottom); } if (ButtonsPanel != null && ButtonsPanel.ActualHeight != TitlePanel.ActualHeight) { ButtonsPanel.Height = TitlePanel.ActualHeight; } }; } }
public MainWindow() { try { InitializeComponent(); // update titles #pragma warning disable CA1303 // Do not pass literals as localized parameters versionText.Text = VERSION; #pragma warning restore CA1303 // Do not pass literals as localized parameters // 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; SystemThemeCatalogRegistrar.Register(); ThemeManager.CurrentTheme = ThemeNames.Dark; 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"); if (ConfigUtil.IfSet("AutoMonitor")) { enableAutoMonitorIcon.Visibility = Visibility.Visible; var previousFile = ConfigUtil.GetSetting("LastOpenedFile"); if (File.Exists(previousFile)) { OpenLogFile(LogOption.MONITOR, previousFile); } } else { enableAutoMonitorIcon.Visibility = Visibility.Hidden; } if (ConfigUtil.IfSet("Debug")) { LOG.Info("Debug Enabled. Saving Unprocessed Lines to " + ConfigUtil.LogsDir); ConfigUtil.Debug = true; } } catch (Exception e) { LOG.Error(e); throw; } finally { ThemeManager.EndUpdate(); } }
internal static Dictionary <string, bool> LoadColumns(ComboBox columns, DataGrid dataGrid) { var indexesCache = new Dictionary <string, int>(); var indexString = ConfigUtil.GetSetting(columns.Tag as string + "DisplayIndex"); if (!string.IsNullOrEmpty(indexString)) { foreach (var index in indexString.Split(',')) { if (!string.IsNullOrEmpty(index)) { var split = index.Split('|'); if (split != null && split.Length == 2 && !string.IsNullOrEmpty(split[0]) && !string.IsNullOrEmpty(split[1])) { if (int.TryParse(split[1], out int result)) { indexesCache[split[0]] = result; } } } } } var cache = new Dictionary <string, bool>(); string columnSetting = ConfigUtil.GetSetting(columns.Tag as string); if (!string.IsNullOrEmpty(columnSetting)) { foreach (var selected in columnSetting.Split(',')) { cache[selected] = true; } } int selectedCount = 0; List <ComboBoxItemDetails> list = new List <ComboBoxItemDetails>(); for (int i = 0; i < dataGrid.Columns.Count; i++) { var column = dataGrid.Columns[i]; var header = column.Header as string; if (!string.IsNullOrEmpty(header)) { if (header != "Name") { var visible = (cache.Count == 0 && column.Visibility == Visibility.Visible) || cache.ContainsKey(header); column.Visibility = visible ? Visibility.Visible : Visibility.Hidden; selectedCount += visible ? 1 : 0; list.Add(new ComboBoxItemDetails { Text = column.Header as string, IsChecked = visible }); if (indexesCache.ContainsKey(header) && column.DisplayIndex != indexesCache[header]) { column.DisplayIndex = indexesCache[header]; } } } } columns.ItemsSource = list; SetSelectedColumnsTitle(columns, selectedCount); return(cache); }