Exemplo n.º 1
0
        private void Initialize()
        {
            views.Clear();
            // clear unwanted Widget references for GC to collect
            foreach (var(_, viewNode) in FilesystemUserPreferences.Instance.ViewRootPerProjectFile)
            {
                viewNode.Widget = null;
            }
            rootWidget?.UnlinkAndDispose();
            var up = FilesystemUserPreferences.Instance;
            var q  = new Queue <ViewNode>();

            q.Enqueue(up.ViewRoot);
            while (q.Count != 0)
            {
                var n = q.Dequeue();
                foreach (var child in n.Children)
                {
                    child.Parent = n;
                    q.Enqueue(child);
                }
                Widget w;
                if (n is FSViewNode)
                {
                    var fsView = new FilesystemView();
                    views.Add(fsView);
                    w = fsView.RootWidget;
                    w.Components.Add(new ViewNodeComponent {
                        ViewNode = n
                    });
                    fsView.Initialize();
                }
                else if (n is SplitterNode)
                {
                    var      type = (n as SplitterNode).Type;
                    Splitter s    = type.MakeSplitter();
                    s.Stretches = Splitter.GetStretchesList((n as SplitterNode).Stretches, 1, 1);
                    w           = s;
                    w.Components.Add(new ViewNodeComponent {
                        ViewNode = n
                    });                                                                           // copy pasted line
                }
                else
                {
                    throw new InvalidDataException();
                }
                n.Widget = w;
                if (n.Parent != null)
                {
                    n.Parent.Widget.AddNode(w);
                }
                else
                {
                    rootWidget = w;
                }
            }
            dockPanelWidget.PushNode(rootWidget);
            rootWidget.SetFocus();
        }
Exemplo n.º 2
0
        public void Close(FilesystemView fsView)
        {
            views.Remove(fsView);
            var      RootWidget = fsView.RootWidget;
            ViewNode vn         = RootWidget.Components.Get <ViewNodeComponent>().ViewNode;

            if (vn.Parent == null)
            {
                // oh noes can't close root!
                return;
            }

            if (vn.Parent is SplitterNode)
            {
                var sn = vn.Parent as SplitterNode;
                vn.Widget = null;                 // just in case?
                sn.Children.Remove(vn);
                RootWidget.UnlinkAndDispose();
                if (sn.Children.Count == 1)
                {
                    var ovn = sn.Children.First();
                    if (sn.Parent == null)
                    {
                        // Root => update up
                        var up = FilesystemUserPreferences.Instance;
                        up.ViewRoot = ovn;
                        ovn.Parent  = null;
                        ovn.Widget.Unlink();
                        var pw = sn.Widget.ParentWidget;
                        sn.Widget.UnlinkAndDispose();
                        pw.AddNode(ovn.Widget);
                    }
                    else
                    {
                        // remap
                        ovn.Parent = sn.Parent;
                        ovn.Widget.Unlink();
                        var pwIndex = sn.Widget.ParentWidget.Nodes.IndexOf(sn.Widget);
                        var pw      = sn.Widget.ParentWidget;
                        sn.Widget.UnlinkAndDispose();
                        pw.Nodes.Insert(pwIndex, ovn.Widget);
                        ovn.Parent.Children.Remove(sn);
                        ovn.Parent.Children.Insert(pwIndex, ovn);
                    }
                }
                else
                {
                    // wat
                }
            }
            else
            {
                // wat
            }
        }
Exemplo n.º 3
0
 public FilesystemToolbar(FilesystemView view, Model model)
 {
     this.view = view;
     Nodes.AddRange(
         new Widget {
         Presenter = new SyncDelegatePresenter <Widget>((w) => {
             w.PrepareRendererState();
             Renderer.DrawLine(0.0f, w.Size.Y, w.Size.X, w.Size.Y, Theme.Colors.SeparatorColor);
         }),
         Layout = new VBoxLayout(),
         Nodes  =
         {
             new Widget         {
                 Layout = new HBoxLayout()
                 {
                     Spacing = 2
                 },
                 Nodes =
                 {
                     CreateGotoCurrentProjectDirectoryButton(),
                     CreateUpButton(),
                     CreateGoBackwardButton(),
                     CreateGoForwardButton(),
                     CreateToggleCookingRulesButton(),
                     CreateTogglePreviewButton(),
                     CreateSplitHButton(),
                     CreateSplitVButton(),
                     CreateSortByText(),
                     CreateSortDropDownList(),
                     CreateSortOrderDropDownList(),
                     new Widget {
                         LayoutCell = new LayoutCell{
                             Stretch = new Vector2(9999, 9999)
                         }
                     },
                     CreateCloseButton()
                 }
             },
             (AddressBar = new AddressBar(view.Open, model)),
         }
     }
         );
 }
Exemplo n.º 4
0
 public FilesystemToolbar(FilesystemView view)
 {
     this.view = view;
     Nodes.AddRange(
         new Widget {
         Presenter = new DelegatePresenter <Widget>((w) => {
             w.PrepareRendererState();
             Renderer.DrawLine(0.0f, w.Size.Y, w.Size.X, w.Size.Y, Theme.Colors.SeparatorColor);
         }),
         Layout = new VBoxLayout(),
         Nodes  =
         {
             new Widget         {
                 Layout = new HBoxLayout(),
                 Nodes  =
                 {
                     CreateGotoCurrentProjectDirectoryButton(),
                     CreateUpButton(),
                     CreateGoBackwardButton(),
                     CreateGoForwardButton(),
                     CreateToggleCookingRulesButton(),
                     CreateTogglePreviewButton(),
                     CreateSplitHButton(),
                     CreateSplitVButton(),
                     new Widget {
                         LayoutCell = new LayoutCell{
                             Stretch = new Vector2(9999, 9999)
                         }
                     },
                     CreateCloseButton()
                 }
             },
             (pathText = new ThemedSimpleText{
             }),
         }
     }
         );
 }
Exemplo n.º 5
0
        public void Split(FilesystemView fsView, SplitterType type)
        {
            var        RootWidget = fsView.RootWidget;
            FSViewNode vn         = RootWidget.Components.Get <ViewNodeComponent>().ViewNode as FSViewNode;

            var newFsView = new FilesystemView();

            views.Add(newFsView);
            var newVn = new FSViewNode {
                Widget = newFsView.RootWidget,
                Path   = vn.Path,
                ShowSelectionPreview   = vn.ShowSelectionPreview,
                ShowCookingRulesEditor = vn.ShowCookingRulesEditor,
            };

            // TODO: setup internal stretches of fsView here
            newFsView.RootWidget.Components.Add(new ViewNodeComponent {
                ViewNode = newVn
            });
            newFsView.Initialize();

            if (vn.Parent == null)
            {
                // Root node, need to replace on in UserPreferences
                Splitter s  = type.MakeSplitter();
                var      up = FilesystemUserPreferences.Instance;
                var      sn = new SplitterNode {
                    Widget = s,
                    Type   = type
                };
                up.ViewRoot  = sn;
                newVn.Parent = sn;
                s.Stretches  = Splitter.GetStretchesList(sn.Stretches, 1, 1);
                sn.Children.Add(vn);
                sn.Children.Add(newVn);
                var thisParent = RootWidget.ParentWidget;
                RootWidget.Unlink();
                s.AddNode(RootWidget);
                s.AddNode(newFsView.RootWidget);
                s.Components.Add(new ViewNodeComponent {
                    ViewNode = sn
                });
                vn.Parent = sn;
                thisParent.Nodes.Add(s);

                // TODO setup stretches ^
            }
            else if (vn.Parent is SplitterNode)
            {
                if ((vn.Parent as SplitterNode).Type == type)
                {
                    var sn = vn.Parent as SplitterNode;
                    var s  = sn.Widget;
                    s.Nodes.Insert(s.Nodes.IndexOf(RootWidget), newFsView.RootWidget);
                    newVn.Parent = sn;
                    sn.Children.Insert(sn.Children.IndexOf(vn), newVn);
                }
                else
                {
                    Splitter s  = type.MakeSplitter();
                    var      sn = new SplitterNode {
                        Widget = s,
                        Type   = type
                    };
                    s.Components.Add(new ViewNodeComponent {
                        ViewNode = sn
                    });
                    s.Stretches = Splitter.GetStretchesList(sn.Stretches);

                    var psn = vn.Parent as SplitterNode;

                    // or vn.Parent.Widget
                    int thisIndex  = RootWidget.ParentWidget.Nodes.IndexOf(RootWidget);
                    var thisParent = RootWidget.ParentWidget;
                    RootWidget.Unlink();
                    s.AddNode(RootWidget);
                    s.AddNode(newFsView.RootWidget);
                    sn.Children.Add(vn);
                    sn.Children.Add(newVn);
                    vn.Parent    = sn;
                    newVn.Parent = sn;
                    thisParent.Nodes.Insert(thisIndex, s);


                    var ps = psn.Widget;
                    sn.Parent = psn;
                    psn.Children.RemoveAt(thisIndex);
                    psn.Children.Insert(thisIndex, sn);
                }
            }
            else if (vn.Parent is FSViewNode)
            {
                // wat
            }
        }