private void OnDeleteAllEditorTabsRequested(object sender, DeleteAllEditorTabsRequestedArg arg) { MessageBoxResult result = GherkinSettings.SaveAllFilesWithRequesting(arg.ExcludedEditorViewModel); if (result == MessageBoxResult.Cancel) { return; } SelectedTabIndex = TabPanels.Count - 1; // Note: Select last tab to force to notify SelectedTabIndex property changed event if (arg.ExcludedEditorViewModel == null) { for (int i = TabPanels.Count - 1; i > 0; i--) { EventAggregator <EditorClosedArg> .Instance.Publish(this, new EditorClosedArg(TabPanels[i].EditorTabContentViewModel.CurrentFilePath)); TabPanels.RemoveAt(i); } TabPanels[0].EditorTabContentViewModel.ChangeToEmptyFile(); } else { for (int i = TabPanels.Count - 1; i >= 0; i--) { if (TabPanels[i].EditorTabContentViewModel != arg.ExcludedEditorViewModel) { EventAggregator <EditorClosedArg> .Instance.Publish(this, new EditorClosedArg(TabPanels[i].EditorTabContentViewModel.CurrentFilePath)); TabPanels.RemoveAt(i); } } } SelectedTabIndex = 0; }
private static UIHelper CreateTab(UIScrollablePanel mainPanel, string name) { TabStrip.AddTab(name, 1.25f); var tabPanel = mainPanel.AddUIComponent <UIPanel>(); tabPanel.size = new Vector2(mainPanel.width - mainPanel.scrollPadding.horizontal, mainPanel.height - mainPanel.scrollPadding.vertical - 2 * mainPanel.autoLayoutPadding.vertical - TabStrip.height); tabPanel.isVisible = false; TabPanels.Add(tabPanel); var panel = tabPanel.AddUIComponent <UIScrollablePanel>(); UIUtils.AddScrollbar(tabPanel, panel); panel.verticalScrollbar.eventVisibilityChanged += ScrollbarVisibilityChanged; panel.size = tabPanel.size; panel.relativePosition = Vector2.zero; panel.autoLayout = true; panel.autoLayoutDirection = LayoutDirection.Vertical; panel.clipChildren = true; panel.scrollWheelDirection = UIOrientation.Vertical; return(new UIHelper(panel)); void ScrollbarVisibilityChanged(UIComponent component, bool value) { panel.width = tabPanel.width - (panel.verticalScrollbar.isVisible ? panel.verticalScrollbar.width : 0); } }
public EditorTabItem CreateEmtyTab() { IsLoadingEmptyTab = true; EditorTabItem tab = NewTab(null); TabPanels.Add(tab); return(tab); }
private void OnFailedToFindEditorControl(object sender, FailedToFindEditorControlArg arg) { if (TabPanels.Count > 1) { EditorTabItem tab = TabPanels.FirstOrDefault(x => x.EditorTabContentViewModel == arg.EditorViewModel); TabPanels.Remove(tab); base.OnPropertyChanged(nameof(TabPanels)); } }
private void SelectLastSelectedFile() { string lastSelectedFile = m_AppSettings.LastStatus.LastSelectedFile; if (!string.IsNullOrEmpty(lastSelectedFile)) { var tab = TabPanels.FirstOrDefault(x => x.FilePath == lastSelectedFile); SelectTab(tab); } }
private void AdjustTabOrder(EditorTabItem tab) { if (IsSorted()) { return; } TabPanels.Remove(tab); InsertTab(tab); }
private void InsertTab(EditorTabItem tab) { string fileName = tab.FileName; int i = 0; while (i < TabPanels.Count && Compare(fileName, TabPanels[i].FileName) > 0) { i++; } TabPanels.Insert(i, tab); }
internal async Task AddTabAsync(ITab tab) { if (TabPanels.Any(x => x.Name == tab.Name)) { return; } TabPanels.Add(tab); if (ActiveTab == null) { await SetActivateTabAsync(tab); } }
/// <summary> /// Open a file or reload the file if it has been opened. /// </summary> /// <param name="filePath">file to be opened or reloaded</param> public void OpenFileByReloading(string filePath) { EditorTabItem tab = TabPanels.FirstOrDefault(x => x.EditorTabContentViewModel.CurrentFilePath == filePath); if (tab != null) { tab.EditorTabContentViewModel.Load(filePath); OpeningTabEvent?.Invoke(tab); } else { FilesToLoad.Add(filePath); LoadNextFile(); } }
private UIAdvancedHelper CreateTab(string name, string label) { TabStrip.AddTab(label, 1.25f); var tabPanel = MainPanel.AddUIComponent <AdvancedScrollablePanel>(); tabPanel.Content.autoLayoutPadding = new RectOffset(8, 8, 0, 0); SetTabSize(tabPanel); tabPanel.isVisible = false; TabPanels.Add(tabPanel); var helper = new UIAdvancedHelper(tabPanel.Content); Tabs[name] = helper; return(helper); }
private void OnDeleteEditorTab(object sender, DeleteEditorTabRequestedArg arg) { EditorTabContentViewModel editorViewModel = arg.EditorViewModel; MessageBoxResult result = GherkinSettings.SaveCurrentFileWithRequesting(editorViewModel); if (result == MessageBoxResult.Cancel) { return; } EventAggregator <EditorClosedArg> .Instance.Publish(this, new EditorClosedArg(editorViewModel.CurrentFilePath)); if (TabPanels.Count == 1) { CurrentEditor?.ChangeToEmptyFile(); NotifyCurrentFilePathChanged(); base.OnPropertyChanged(nameof(IsShowScenarioIndexEnabled)); } else { EditorTabItem editorTab = TabPanels.FirstOrDefault(x => x.EditorTabContentViewModel == editorViewModel); int index = TabPanels.IndexOf(editorTab); bool isDeletingCurrentTab = (index == SelectedTabIndex); if (isDeletingCurrentTab) { // Force select a tab before removing tab. // Note: property changed notification would not be raised if index is same as SelectedTabIndex. // Therefore we select another tab at first and then select agian the indexed tab if index == SelectedTabIndex int other_index = (index + 1) % TabPanels.Count; SelectedTabIndex = other_index; } TabPanels.Remove(editorTab); if (isDeletingCurrentTab) { SelectedTabIndex = Math.Min(index, TabPanels.Count - 1); } } }
protected override void OnAfterRender(bool firstRender) { if (!TabPanels.Any()) { return; } var oldActiveTab = ActiveTab; if (!string.IsNullOrWhiteSpace(ActiveTabName)) { ActiveTab = TabPanels.FirstOrDefault(x => x.Name == ActiveTabName); } if (ActiveTab == null) { return; } ActiveTab.OnRenderCompletedAsync += AcitveTabOnRenderCompletedAsync; if (oldActiveTab == null || oldActiveTab.Name != ActiveTab.Name) { StateHasChanged(); } }
public void LoadTabs() { AddFieldsTab(); AddLayoutsTab(); AddLinkSettingsTab(); AddSEOSettingsTab(); AddPublishSettingsTab(); //AddTagsTab(); AddSettingsTab(); AddInjectHtmlTab(); //AddShoppingCartSettingsTab(); if (SelectedItem.Media.Comments.Any()) { AddCommentsTab(); } if ((this.SelectedItem != null) && ((this.SelectedItem.ID != 0))) { AddRolesUsersTab(); AddHistoryTab(); } ChildrensTab(); Tabs.DataSource = base.Tabs.Select(i => i.Name); Tabs.DataBind(); TabPanels.DataSource = base.Tabs; TabPanels.DataBind(); //UpdateFieldsFromObject(); }
/// <summary> /// Open an editor tab. /// </summary> /// <param name="filePath"></param> /// <returns>true: new tab created</returns> public Tuple <bool, EditorTabItem> OpenEditorTab(string filePath) { bool isNewTab = false; EditorTabItem tab = TabPanels.FirstOrDefault(x => x.EditorTabContentViewModel.CurrentFilePath == filePath); if (tab == null) { tab = TabPanels.FirstOrDefault(x => x.EditorTabContentViewModel.IsEmptyFile()); if (tab != null) { tab.EditorTabContentViewModel.Load(filePath); AdjustTabOrder(tab); } else { isNewTab = true; tab = CreateNewTab(filePath); } } OpeningTabEvent?.Invoke(tab); m_AppSettings.LastUsedFile = filePath; return(Tuple.Create(isNewTab, tab)); }
internal void Refresh() { // Basic re-entrancy guard if (Refreshing) { // Warning: previous refresh took longer than 5s. Will skip this cycle App.LogMessage("A refresh cycle took far longer than expected, and conflicted with the subsequent call"); return; } Refreshing = true; try { // Scan the logfiles for alerts or other state messages OpenGameLogs(); // Ensure open logs match up to open client instances foreach (var logReader in LogReaders.Values) { while (!logReader.EndOfStream) { var line = logReader.ReadLine(); if (line.Length > 32 && line.IndexOf("Scaleform.Clockwatcher", 32) != -1) { if (line.EndsWith("Groupfinder queue popped")) { RaiseAlert?.Invoke(this, new AudioAlertEventArgs(AudioAlertType.GroupfinderAlert)); } } } } // Load settings files var charNames = new List <string>(); foreach (var charFile in FindCharacterFiles()) { var charData = ExtractCharacterMissions(charFile, out var charName); if (charNames.Contains(charName)) { // Character name was encountered multiple times on this pass // Likely caused by duplication of game settings data in multiple folders (either a bug, or intentional backup) // Is likely to cause conflicts, but can't tell from here which version is definitive, log for reporting App.LogMessage(charName + " has duplicated settings data, reported values may not synch"); } else { charNames.Add(charName); } if (charData != null) { var existing = (from e in CharacterMissionLists where e.TabName == charName select e).SingleOrDefault(); if (existing != null) // Merge with existing character record { existing.Merge(charData); } else // Add new character { var charPanel = new CharacterTimers(charName, charData); CharacterMissionLists.Add(charPanel); TabPanels.Insert(TabPanels.Count - 1, charPanel); } } } // Update time displays and trigger alert states if ((from c in CharacterMissionLists from m in c.TimerList where m.Refresh(Settings.AlertFilter) select m).ToList().Any()) { RaiseAlert?.Invoke(this, new AudioAlertEventArgs(AudioAlertType.AgentAlert)); } } finally { Refreshing = false; } }
internal Dataset() { TabPanels.Add(Settings); Refresh(); }
public async Task SetActivateTabAsync(string name) { var tab = TabPanels.FirstOrDefault(x => x.Name == name); await SetActivateTabAsync(tab); }
private void SelectTab(EditorTabItem tab) { int index = TabPanels.IndexOf(tab); this.SelectedTabIndex = Math.Max(0, index); }