Ejemplo n.º 1
0
        public void Remove(TabManager <TState> tabManager)
        {
            int index = tabManagers.IndexOf(tabManager);

            Debug.Assert(index >= 0);
            if (index < 0)
            {
                return;
            }
            if (tabManagers.Count <= 1)
            {
                return;
            }
            if (ActiveIndex == index)
            {
                int newIndex = index == 0 ? index + 1 : index - 1;
                SetActive(tabManagers[newIndex]);
                ActiveIndex = newIndex;
            }
            var current = tabManagers[ActiveIndex];

            tabManagers.Remove(tabManager);
            ActiveIndex = tabManagers.IndexOf(current);
            Debug.Assert(ActiveIndex >= 0);
            if (OnTabGroupRemoved != null)
            {
                OnTabGroupRemoved(this, TabGroupEventArgs.Empty);
            }
            UpdateGrid();
        }
Ejemplo n.º 2
0
        void MoveAllToOtherTabGroup(TabManager <TState> dst, TabManager <TState> src)
        {
            var activeTab = src.ActiveTabState;

            Merge(dst, src, 0);
            dst.SetSelectedTab(activeTab);
            SetActive(dst);
        }
Ejemplo n.º 3
0
        public bool MoveToAndSelect(TabManager <TState> dstTabManager, TState srcTabState, int insertIndex)
        {
            bool res = MoveTo(dstTabManager, srcTabState, insertIndex);

            if (res)
            {
                dstTabManager.SetSelectedTab(srcTabState);
            }
            return(res);
        }
Ejemplo n.º 4
0
 void Move(TabManager <TState> dstTabManager, TabManager <TState> srcTabManager, TState srcTabState, int insertIndex = 0)
 {
     Debug.Assert(tabManagers.Contains(dstTabManager));
     Debug.Assert(tabManagers.Contains(srcTabManager));
     Debug.Assert(srcTabManager.TabControl.Items.Contains(srcTabState.TabItem));
     if (srcTabManager.MoveToAndSelect(dstTabManager, srcTabState, insertIndex))
     {
         SetActive(dstTabManager);
     }
 }
Ejemplo n.º 5
0
 public TabGroupManager(TabManager tabManager, IMenuManager menuManager, IWpfFocusManager wpfFocusManager, TabGroupManagerOptions options)
 {
     this.options                   = (options ?? new TabGroupManagerOptions()).Clone();
     this.stackedContent            = new StackedContent <TabGroup>();
     this.tabSelectionChanged       = new WeakEventList <TabSelectedEventArgs>();
     this.tabGroupSelectionChanged  = new WeakEventList <TabGroupSelectedEventArgs>();
     this.tabGroupCollectionChanged = new WeakEventList <TabGroupCollectionChangedEventArgs>();
     this.tabManager                = tabManager;
     this.menuManager               = menuManager;
     this.wpfFocusManager           = wpfFocusManager;
     this._activeIndex              = -1;
 }
Ejemplo n.º 6
0
 public bool MoveTo(TabManager <TState> dstTabManager, TState srcTabState, TState insertBeforeThis)
 {
     if (insertBeforeThis != null)
     {
         Debug.Assert(dstTabManager.tabControl.Items.Contains(insertBeforeThis.TabItem));
         return(MoveTo(dstTabManager, srcTabState, dstTabManager.tabControl.Items.IndexOf(insertBeforeThis.TabItem)));
     }
     else
     {
         return(MoveTo(dstTabManager, srcTabState, -1));
     }
 }
Ejemplo n.º 7
0
 public TabGroupManager(TabManager tabManager, IMenuManager menuManager, IWpfFocusManager wpfFocusManager, TabGroupManagerOptions options)
 {
     this.options = (options ?? new TabGroupManagerOptions()).Clone();
     this.stackedContent = new StackedContent<TabGroup>();
     this.tabSelectionChanged = new WeakEventList<TabSelectedEventArgs>();
     this.tabGroupSelectionChanged = new WeakEventList<TabGroupSelectedEventArgs>();
     this.tabGroupCollectionChanged = new WeakEventList<TabGroupCollectionChangedEventArgs>();
     this.tabManager = tabManager;
     this.menuManager = menuManager;
     this.wpfFocusManager = wpfFocusManager;
     this._activeIndex = -1;
 }
Ejemplo n.º 8
0
 void Merge(TabManager <TState> dstTabManager, TabManager <TState> srcTabManager, int insertIndex)
 {
     if (dstTabManager == srcTabManager)
     {
         return;
     }
     if (insertIndex < 0 || insertIndex > dstTabManager.Count)
     {
         insertIndex = dstTabManager.Count;
     }
     foreach (var srcTabState in srcTabManager.AllTabStates.ToArray())
     {
         srcTabManager.MoveTo(dstTabManager, srcTabState, insertIndex++);
     }
 }
Ejemplo n.º 9
0
        TabManager <TState> CreateTabManager(int insertIndex)
        {
            var tabControl = new TabControl();

            tabControl.Style = App.Current.FindResource("TabStateTabControl") as Style;
            var tabManager = new TabManager <TState>(this, tabControl, onSelectionChanged, onAddRemoveTabState);

            tabManagers.Insert(insertIndex, tabManager);
            ContextMenuProvider.Add(tabManager.TabControl);
            if (OnTabGroupAdded != null)
            {
                OnTabGroupAdded(this, TabGroupEventArgs.Empty);
            }
            return(tabManager);
        }
Ejemplo n.º 10
0
        public void SetActive(TabManager <TState> tabManager)
        {
            if (tabManager == tabManagers[ActiveIndex])
            {
                return;
            }
            int newIndex = tabManagers.IndexOf(tabManager);

            if (newIndex < 0)
            {
                throw new InvalidOperationException();
            }
            int oldIndex = ActiveIndex;

            ActiveIndex = newIndex;
            if (OnTabGroupSelected != null)
            {
                OnTabGroupSelected(this, new TabGroupSelectedEventArgs(oldIndex, newIndex));
            }
        }
Ejemplo n.º 11
0
        public bool MoveTo(TabManager <TState> dstTabManager, TState srcTabState, int insertIndex)
        {
            Debug.Assert(this.TabControl.Items.Contains(srcTabState.TabItem));
            if (srcTabState == null)
            {
                return(false);
            }

            DetachTabState(srcTabState);
            dstTabManager.AttachTabState(srcTabState, insertIndex);

            if ((bool)srcTabState.TabItem.GetValue(UIElement.IsKeyboardFocusWithinProperty))
            {
                tabGroupsManager.SetActiveTab(srcTabState);
                this.IsActive          = false;
                dstTabManager.IsActive = true;
            }

            return(true);
        }
Ejemplo n.º 12
0
 DecompileTabState CreateNewDecompileTabState(TabManager<TabState> tabManager, Language language = null)
 {
     var tabState = new DecompileTabState(language ?? sessionSettings.FilterSettings.Language);
     return (DecompileTabState)tabManager.AddNewTabState(tabState);
 }
Ejemplo n.º 13
0
        internal void tabManager_OnSelectionChanged(TabManager<TabState> tabManager, TabState oldState, TabState newState)
        {
            UninitializeActiveTab(oldState, false);
            InitializeActiveTab(newState, false);

            if (IsActiveTab(newState))
                SetTabFocus(newState);

            if (OnTabStateChanged != null)
                OnTabStateChanged(this, new TabStateChangedEventArgs(oldState, newState));
        }
Ejemplo n.º 14
0
        static SavedTabGroupState CreateSavedTabGroupState(TabManager<TabState> tabManager)
        {
            var savedState = new SavedTabGroupState();

            savedState.Index = tabManager.ActiveIndex;

            foreach (var tabState in tabManager.AllTabStates)
                savedState.Tabs.Add(tabState.CreateSavedTabState());

            return savedState;
        }
Ejemplo n.º 15
0
        bool GetInfo(object sender, DragEventArgs e, out TabItem source, out TabItem target, out TabControl tabControlSource, out TabControl tabControlTarget, out TState tabStateSource, out TState tabStateTarget, out TabManager <TState> tabManagerSource, out TabManager <TState> tabManagerTarget, bool canBeSame)
        {
            source           = target = null;
            tabControlSource = tabControlTarget = null;
            tabStateSource   = tabStateTarget = null;
            tabManagerSource = tabManagerTarget = null;

            if (!e.Data.GetDataPresent(typeof(TabItem)))
            {
                return(false);
            }

            target = sender as TabItem;
            source = (TabItem)e.Data.GetData(typeof(TabItem));
            if (target == null || source == null || (!canBeSame && target == source))
            {
                return(false);
            }
            tabControlTarget = target.Parent as TabControl;
            if (tabControlTarget == null)
            {
                return(false);
            }
            tabControlSource = source.Parent as TabControl;
            if (tabControlSource == null)
            {
                return(false);
            }

            tabManagerTarget = tabControlTarget.DataContext as TabManager <TState>;
            tabManagerSource = tabControlSource.DataContext as TabManager <TState>;
            if (tabManagerTarget == null || tabManagerSource == null)
            {
                return(false);
            }
            if (tabManagerTarget.tabGroupsManager != tabManagerSource.tabGroupsManager)
            {
                return(false);
            }
            if (tabManagerTarget.tabGroupsManager != this.tabGroupsManager)
            {
                return(false);
            }

            tabStateSource = source.DataContext as TState;
            tabStateTarget = target.DataContext as TState;
            if (tabStateSource == null || tabStateTarget == null)
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 16
0
 HexTabState CreateNewHexTabState(TabManager<TabState> tabManager)
 {
     var tabState = new HexTabState();
     return (HexTabState)tabManager.AddNewTabState(tabState);
 }
Ejemplo n.º 17
0
        void tabManager_OnAddRemoveTabState(TabManager<TabState> tabManager, TabManagerAddType addType, TabState tabState)
        {
            if (addType == TabManagerAddType.Add) {
                tabState.PropertyChanged += tabState_PropertyChanged;

                var dts = tabState as DecompileTabState;
                if (dts != null) {
                    var view = dts.TextView;
                    RemoveCommands(view);
                    view.TextEditor.TextArea.MouseRightButtonDown += (s, e) => view.GoToMousePosition();
                    view.TextEditor.Options.EnableRectangularSelection = false;
                    view.TextEditor.SetBinding(ICSharpCode.AvalonEdit.TextEditor.WordWrapProperty, new Binding("WordWrap") { Source = sessionSettings });
                }

                if (OnTabStateAdded != null)
                    OnTabStateAdded(this, new TabStateEventArgs(tabState));
            }
            else if (addType == TabManagerAddType.Remove) {
                tabState.PropertyChanged -= tabState_PropertyChanged;
                if (OnTabStateRemoved != null)
                    OnTabStateRemoved(this, new TabStateEventArgs(tabState));
            }
            else if (addType == TabManagerAddType.Attach) {
                if (OnTabStateAttached != null)
                    OnTabStateAttached(this, new TabStateEventArgs(tabState));
            }
            else if (addType == TabManagerAddType.Detach) {
                if (OnTabStateDetached != null)
                    OnTabStateDetached(this, new TabStateEventArgs(tabState));
            }
            else
                throw new InvalidOperationException();
        }