Пример #1
0
 private void RebuildTabs()
 {
     tabBar.Nodes.Clear();
     foreach (var doc in Project.Current.Documents)
     {
         var tab = new ThemedTab {
             Closable = true
         };
         tab.Tasks.Add(Tooltip.Instance.ShowOnMouseOverTask(tab, () => doc.FullPath.Replace('/', '\\')));
         tab.AddChangeWatcher(() => Document.Current, _ => {
             if (doc == Document.Current)
             {
                 tabBar.ActivateTab(tab);
             }
         });
         tab.Gestures.Add(new ClickGesture(1, () => {
             DocumentTabContextMenu.Create(doc);
         }));
         tab.AddChangeWatcher(() => doc.DisplayName, _ => tab.Text = doc.DisplayName);
         tab.Clicked += doc.MakeCurrent;
         tab.Closing += () => Project.Current.CloseDocument(doc);
         tabBar.AddNode(tab);
     }
     tabBar.AddNode(new Widget {
         LayoutCell = new LayoutCell {
             StretchX = 0
         }
     });
 }
Пример #2
0
            private void RebuildTabs(TabBar tabBar)
            {
                tabBar.Nodes.Clear();
                foreach (var doc in Project.Current.Documents)
                {
                    var tab = new ThemedTab {
                        Closable = true
                    };
                    var currentDocumentChanged = new Property <bool>(() => Document.Current == doc).DistinctUntilChanged().Where(i => i);
                    tab.Tasks.Add(currentDocumentChanged.Consume(_ => tabBar.ActivateTab(tab)));
                    tab.AddChangeWatcher(() => doc.Path, _ => RefreshTabText(doc, tab));
                    tab.AddChangeWatcher(() => doc.IsModified, _ => RefreshTabText(doc, tab));
                    tab.Clicked += doc.MakeCurrent;
                    tab.Closing += () => Project.Current.CloseDocument(doc);
                    tab.Updated += (dt) => {
                        if (tab.Input.WasKeyReleased(Key.Mouse1))
                        {
                            DocumentTabContextMenu.Create(doc);
                        }
                    };

                    DragGesture dragGesture = new DragGesture();
                    tab.Gestures.Add(dragGesture);
                    dragGesture.Changed += () => {
                        int index = -1;
                        foreach (Tab tabEl in tabBar.Nodes.OfType <Tab>())
                        {
                            index++;
                            if (tabEl == tab)
                            {
                                continue;
                            }

                            Vector2 localMousePosition = tabEl.LocalMousePosition();

                            if (!(localMousePosition.X >= 0 && localMousePosition.Y >= 0 &&
                                  localMousePosition.X < tabEl.Width && localMousePosition.Y < tabEl.Height))
                            {
                                continue;
                            }

                            Project.Current.ReorderDocument(doc, index);

                            int previousIndex = tabBar.Nodes.IndexOf(tab);
                            int toIndex       = tabBar.Nodes.IndexOf(tabEl);

                            if (previousIndex < 0 || toIndex < 0)
                            {
                                RebuildTabs(tabBar);
                                break;
                            }

                            tabBar.Nodes.Remove(tab);
                            tabBar.Nodes.Insert(toIndex, tab);
                            break;
                        }
                    };
                    tabBar.AddNode(tab);
                }
                tabBar.AddNode(new Widget {
                    LayoutCell = new LayoutCell {
                        StretchX = 0
                    }
                });
            }