コード例 #1
0
        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;
        }
コード例 #2
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);
            }
        }
コード例 #3
0
        public EditorTabItem CreateEmtyTab()
        {
            IsLoadingEmptyTab = true;
            EditorTabItem tab = NewTab(null);

            TabPanels.Add(tab);
            return(tab);
        }
コード例 #4
0
 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));
     }
 }
コード例 #5
0
        private void SelectLastSelectedFile()
        {
            string lastSelectedFile = m_AppSettings.LastStatus.LastSelectedFile;

            if (!string.IsNullOrEmpty(lastSelectedFile))
            {
                var tab = TabPanels.FirstOrDefault(x => x.FilePath == lastSelectedFile);
                SelectTab(tab);
            }
        }
コード例 #6
0
        private void AdjustTabOrder(EditorTabItem tab)
        {
            if (IsSorted())
            {
                return;
            }

            TabPanels.Remove(tab);
            InsertTab(tab);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
ファイル: BSimpleTabBase.cs プロジェクト: hbb0b0/Blazui
 internal async Task AddTabAsync(ITab tab)
 {
     if (TabPanels.Any(x => x.Name == tab.Name))
     {
         return;
     }
     TabPanels.Add(tab);
     if (ActiveTab == null)
     {
         await SetActivateTabAsync(tab);
     }
 }
コード例 #9
0
        /// <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();
            }
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
                }
            }
        }
コード例 #12
0
ファイル: BSimpleTabBase.cs プロジェクト: hbb0b0/Blazui
        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();
            }
        }
コード例 #13
0
        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();
        }
コード例 #14
0
        /// <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));
        }
コード例 #15
0
ファイル: Dataset.cs プロジェクト: silou/SWL-Clockwatcher
        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;
            }
        }
コード例 #16
0
ファイル: Dataset.cs プロジェクト: silou/SWL-Clockwatcher
 internal Dataset()
 {
     TabPanels.Add(Settings);
     Refresh();
 }
コード例 #17
0
ファイル: BSimpleTabBase.cs プロジェクト: hbb0b0/Blazui
        public async Task SetActivateTabAsync(string name)
        {
            var tab = TabPanels.FirstOrDefault(x => x.Name == name);

            await SetActivateTabAsync(tab);
        }
コード例 #18
0
        private void SelectTab(EditorTabItem tab)
        {
            int index = TabPanels.IndexOf(tab);

            this.SelectedTabIndex = Math.Max(0, index);
        }