コード例 #1
0
        private void RemoveChildren(Node node, TreePath path)
        {
            if (node.Empty)
            {
                return;
            }

            TreePath children = path.Copy();

            children.Down();

            foreach (Node child in node)
            {
                RemoveChildren(child, children);
                children.Next();
            }

            children.Up();
            children.Down();

            // Then empty the node
            for (int i = 0; i < node.Count; ++i)
            {
                //Console.WriteLine("Row deleted recurse: {0}, {1}", children, node[i]);
                d_adapter.EmitRowDeleted(children.Copy());
            }
        }
コード例 #2
0
        private void AddNodeToModel(Node node, TreePath path)
        {
            // First reorder the child if necessary
            if (path == null && IsSorted)
            {
                Comparison <Node> sorter = Sorter;

                for (int i = 0; i < node.Parent.Count; ++i)
                {
                    Node child = node.Parent[i];

                    if (node != child && sorter(node, child) < 0)
                    {
                        node.Parent.Move(node, i);
                        break;
                    }
                }
            }

            if (path == null)
            {
                path = node.Path;
            }

            //Console.WriteLine("Row inserted: {0}, {1}", path, node);
            d_adapter.EmitRowInserted(path.Copy(), node.Iter);

            TreePath children = path.Copy();

            children.Down();

            if (IsSorted)
            {
                node.Sort(Sorter);
            }

            // Then also its children
            foreach (Node child in node)
            {
                AddNodeToModel(child, children);
                children.Next();
            }
        }
コード例 #3
0
ファイル: Dialog.cs プロジェクト: unhammer/gimp-sharp
        public Dialog(Image image, Drawable drawable, VariableSet variables) :
            base("Photoshop Actions", variables)
        {
            _image    = image;
            _drawable = drawable;

            var vbox = new VBox(false, 12)
            {
                BorderWidth = 12
            };

            VBox.PackStart(vbox, true, true, 0);

            var store = CreateActionTree();

            var sw = new ScrolledWindow()
            {
                HeightRequest = 400
            };

            vbox.PackStart(sw, true, true, 0);

            var view = new TreeView(store);

            sw.Add(view);

            var activeRenderer = new CellRendererToggle()
            {
                Activatable = true
            };
            var columnOne = view.AppendColumn("Enabled", activeRenderer,
                                              new TreeCellDataFunc(RenderActive));

            activeRenderer.Toggled += delegate(object o, ToggledArgs args)
            {
                TreeIter iter;
                var      path = new TreePath(args.Path);
                if (store.GetIter(out iter, path))
                {
                    var executable = store.GetValue(iter, 1) as IExecutable;
                    executable.IsEnabled = !executable.IsEnabled;

                    path.Down();
                    while (store.GetIter(out iter, path))
                    {
                        store.EmitRowChanged(path, iter);
                        path.Next();
                    }
                }
            };

            var textRenderer = new CellRendererText();
            var column       = view.AppendColumn("Set Name", textRenderer,
                                                 new TreeCellDataFunc(RenderText));

            var hbox = new HBox();

            vbox.PackStart(hbox, false, true, 0);

            var play = new Button(Stock.Execute);

            play.Clicked += delegate
            {
                RenameToBackground();

                var paths = view.Selection.GetSelectedRows();
                var path  = paths[0]; // Assume only 1 is selected

                var indices = path.Indices;

                var actions = _set[indices[0]];

                if (indices.Length > 2)
                {
                    actions.Execute(indices[1], indices[2]);
                    path.Next();
                    view.Selection.SelectPath(path);
                }
                else
                {
                    actions.Execute(indices[1]);
                }
                Gimp.DisplaysFlush();
            };
            hbox.PackStart(play, false, true, 0);

            view.Selection.Changed += delegate
            {
                var paths   = view.Selection.GetSelectedRows();
                var indices = paths[0].Indices;

                play.Sensitive = (indices.Length > 1);
            };

            view.Selection.SetSelectFunction(delegate(TreeSelection selection,
                                                      TreeModel model,
                                                      TreePath path,
                                                      bool path_currently_selected)
            {
                return(path.Indices.Length <= 3);
            },
                                             IntPtr.Zero, null);

            ActionEvent.ActionSetCollection = _set;
        }