Пример #1
0
        internal void UnregisterNode(object dataObject, Gtk.TreeIter iter, NodeBuilder[] chain)
        {
            if (dataObject == copyObject)
                copyObject = null;

            nodeOptions.Remove (iter);
            object currentIt = nodeHash [dataObject];
            if (currentIt is Gtk.TreeIter[]) {
                Gtk.TreeIter[] arr = (Gtk.TreeIter[]) currentIt;
                int i = Array.IndexOf (arr, iter);
                if (arr.Length > 2) {
                    Gtk.TreeIter[] newArr = new Gtk.TreeIter[arr.Length - 1];
                    Array.Copy (arr, 0, newArr, 0, i);
                    if (i < newArr.Length)
                        Array.Copy (arr, i+1, newArr, i, arr.Length - i - 1);
                    nodeHash [dataObject] = newArr;
                } else {
                    if (i == 0) nodeHash [dataObject] = arr[1];
                    else nodeHash [dataObject] = arr[0];
                }
            } else {
                nodeHash.Remove (dataObject);
                if (chain == null) chain = GetBuilderChain (dataObject.GetType());
                foreach (NodeBuilder nb in chain)
                    nb.OnNodeRemoved (dataObject);
            }
        }
Пример #2
0
        // Helper methods
        internal static bool HasAttribute(ITreeNavigator treeNavigator, NodeAttributes attr, NodeBuilder[] chain, object dataObject)
        {
            NodeAttributes nodeAttr = NodeAttributes.None;
            NodePosition pos = treeNavigator.CurrentPosition;

            foreach (NodeBuilder nb in chain) {
                nb.GetNodeAttributes (treeNavigator, dataObject, ref nodeAttr);
                treeNavigator.MoveToPosition (pos);
            }

            return (nodeAttr & attr) != 0;
        }
Пример #3
0
        public virtual void Initialize(string label, string icon, NodeBuilder[] builders, TreePadOption[] options)
        {
            // Create default options

            this.options = options;
            globalOptions = new TreeOptions ();
            foreach (TreePadOption op in options)
                globalOptions [op.Id] = op.DefaultValue;

            globalOptions.Pad = this;

            // Check that there is only one node builder per type

            Hashtable bc = new Hashtable ();
            foreach (NodeBuilder nb in builders) {
                TypeNodeBuilder tnb = nb as TypeNodeBuilder;
                if (tnb != null) {
                    TypeNodeBuilder other = (TypeNodeBuilder) bc [tnb.NodeDataType];
                    if (other != null)
                        throw new ApplicationException (string.Format ("The type node builder {0} can't be used in this context because the type {1} is already handled by {2}", nb.GetType(), tnb.NodeDataType, other.GetType()));
                    bc [tnb.NodeDataType] = tnb;
                }
                else if (!(nb is NodeBuilderExtension))
                    throw new InvalidOperationException (string.Format ("Invalid NodeBuilder type: {0}. NodeBuilders must inherit either from TypeNodeBuilder or NodeBuilderExtension", nb.GetType()));
            }

            NodeBuilders = builders;
            Title = label;
            Icon = icon;

            builderContext = new TreeBuilderContext (this);

            tree = new Gtk.TreeView ();

            /*
            0 -- Text
            1 -- Icon (Open)
            2 -- Icon (Closed)
            3 -- Node Data
            4 -- Builder chain
            5 -- Pango weight
            6 -- Expanded
            */
            store = new Gtk.TreeStore (typeof (string), typeof (Gdk.Pixbuf), typeof (Gdk.Pixbuf), typeof (object), typeof (object), typeof(int), typeof(bool));
            tree.Model = store;

            tree.EnableModelDragDest (target_table, Gdk.DragAction.Copy | Gdk.DragAction.Move);
            Gtk.Drag.SourceSet (tree, Gdk.ModifierType.Button1Mask, target_table, Gdk.DragAction.Copy | Gdk.DragAction.Move);

            store.DefaultSortFunc = new Gtk.TreeIterCompareFunc (CompareNodes);
            store.SetSortColumnId (/* GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID */ -1, Gtk.SortType.Ascending);

            tree.HeadersVisible = false;
            tree.SearchColumn = 0;
            tree.EnableSearch = true;
            complete_column = new Gtk.TreeViewColumn ();
            complete_column.Title = "column";

            Gtk.CellRendererPixbuf pix_render = new Gtk.CellRendererPixbuf ();
            complete_column.PackStart (pix_render, false);
            complete_column.AddAttribute (pix_render, "pixbuf", OpenIconColumn);
            complete_column.AddAttribute (pix_render, "pixbuf-expander-open", OpenIconColumn);
            complete_column.AddAttribute (pix_render, "pixbuf-expander-closed", ClosedIconColumn);

            text_render = new Gtk.CellRendererText ();
            text_render.Edited += new Gtk.EditedHandler (HandleOnEdit);

            complete_column.PackStart (text_render, true);
            complete_column.AddAttribute (text_render, "text", TextColumn);
            complete_column.AddAttribute (text_render, "weight", WeightColumn);

            tree.AppendColumn (complete_column);

            Gtk.ScrolledWindow sw = new Gtk.ScrolledWindow ();
            sw.Add(tree);
            contentPanel = new Gtk.Frame ();
            contentPanel.Add(sw);

            tree.TestExpandRow += new Gtk.TestExpandRowHandler (OnTestExpandRow);
            tree.RowActivated += new Gtk.RowActivatedHandler(OnNodeActivated);

            contentPanel.ButtonReleaseEvent += new Gtk.ButtonReleaseEventHandler(OnButtonRelease);
            contentPanel.PopupMenu += new Gtk.PopupMenuHandler (OnPopupMenu);

            foreach (NodeBuilder nb in builders)
                nb.SetContext (builderContext);

            workNode = new TreeNodeNavigator (this);
            compareNode1 = new TreeNodeNavigator (this);
            compareNode2 = new TreeNodeNavigator (this);

            tree.DragBegin += new Gtk.DragBeginHandler (OnDragBegin);
            tree.DragDataReceived += new Gtk.DragDataReceivedHandler (OnDragDataReceived);
            tree.DragDrop += new Gtk.DragDropHandler (OnDragDrop);
            tree.DragEnd += new Gtk.DragEndHandler (OnDragEnd);
            tree.DragMotion += new Gtk.DragMotionHandler (OnDragMotion);

            tree.CursorChanged += new EventHandler (OnSelectionChanged);

            contentPanel.ShowAll ();
        }
Пример #4
0
 internal void RegisterNode(Gtk.TreeIter it, object dataObject, NodeBuilder[] chain)
 {
     object currentIt = nodeHash [dataObject];
     if (currentIt == null) {
         nodeHash [dataObject] = it;
         if (chain == null) chain = GetBuilderChain (dataObject.GetType());
         foreach (NodeBuilder nb in chain)
             nb.OnNodeAdded (dataObject);
     } else {
         if (currentIt is Gtk.TreeIter[]) {
             Gtk.TreeIter[] arr = (Gtk.TreeIter[]) currentIt;
             Gtk.TreeIter[] newArr = new Gtk.TreeIter [arr.Length + 1];
             arr.CopyTo (newArr, 0);
             newArr [arr.Length] = it;
             nodeHash [dataObject] = newArr;
         } else {
             nodeHash [dataObject] = new Gtk.TreeIter [] { it, (Gtk.TreeIter) currentIt};
         }
     }
 }
Пример #5
0
 bool HasChildNodes(NodeBuilder[] chain, object dataObject)
 {
     Gtk.TreeIter citer = currentIter;
     foreach (NodeBuilder nb in chain) {
         bool res = nb.HasChildNodes (this, dataObject);
         currentIter = citer;
         if (res) return true;
     }
     return false;
 }
Пример #6
0
            void UpdateNode(NodeBuilder[] chain, NodeAttributes ats, object dataObject)
            {
                Gdk.Pixbuf icon = null;
                Gdk.Pixbuf closedIcon = null;
                string text = string.Empty;
                Gtk.TreeIter citer = currentIter;

                foreach (NodeBuilder builder in chain) {
                    builder.BuildNode (this, dataObject, ref text, ref icon, ref closedIcon);
                    currentIter = citer;
                }

                if (closedIcon == null) closedIcon = icon;

                if (dataObject == pad.copyObject && pad.currentTransferOperation == DragOperation.Move) {
                    Gdk.Pixbuf gicon = pad.builderContext.GetComposedIcon (icon, "fade");
                    if (gicon == null) {
                        gicon = Runtime.Gui.Icons.MakeTransparent (icon, 0.5);
                        pad.builderContext.CacheComposedIcon (icon, "fade", gicon);
                    }
                    icon = gicon;
                    gicon = pad.builderContext.GetComposedIcon (closedIcon, "fade");
                    if (gicon == null) {
                        gicon = Runtime.Gui.Icons.MakeTransparent (closedIcon, 0.5);
                        pad.builderContext.CacheComposedIcon (closedIcon, "fade", gicon);
                    }
                    closedIcon = gicon;
                }

                SetNodeInfo (currentIter, ats, text, icon, closedIcon);
            }
Пример #7
0
 void CreateChildren(NodeBuilder[] chain, object dataObject)
 {
     Gtk.TreeIter it = currentIter;
     foreach (NodeBuilder builder in chain) {
         builder.BuildChildNodes (this, dataObject);
         currentIter = it;
     }
 }
Пример #8
0
            NodeAttributes GetAttributes(NodeBuilder[] chain, object dataObject)
            {
                Gtk.TreeIter oldIter = currentIter;
                NodeAttributes ats = NodeAttributes.None;

                foreach (NodeBuilder nb in chain) {
                    nb.GetNodeAttributes (this, dataObject, ref ats);
                    currentIter = oldIter;
                }
                return ats;
            }
Пример #9
0
            void BuildNode(Gtk.TreeIter it, NodeBuilder[] chain, NodeAttributes ats, object dataObject)
            {
                Gtk.TreeIter oldIter = currentIter;
                currentIter = it;

                // It is *critical* that we set this first. We will
                // sort after this call, so we must give as much info
                // to the sort function as possible.
                store.SetValue (it, TreeViewPad.DataItemColumn, dataObject);
                store.SetValue (it, TreeViewPad.BuilderChainColumn, chain);

                UpdateNode (chain, ats, dataObject);

                bool hasChildren = HasChildNodes (chain, dataObject);
                store.SetValue (currentIter, TreeViewPad.FilledColumn, !hasChildren);

                if (hasChildren)
                    store.AppendNode (currentIter);	// Dummy node

                currentIter = oldIter;
            }
Пример #10
0
 public TreeViewPad(string label, string icon, NodeBuilder[] builders, TreePadOption[] options)
 {
     Initialize (label, icon, builders, options);
 }
Пример #11
0
 public override void Initialize(string label, string icon, NodeBuilder[] builders, TreePadOption[] options)
 {
     base.Initialize (label, icon, builders, options);
     OnProvidersChanged (this, null);
 }
 public override object BuildItem(object owner, ArrayList subItems, ConditionCollection conditions)
 {
     builder = (NodeBuilder) AddIn.CreateObject (Class);
     if (builder == null) throw new ApplicationException ("Could not create object of type: " + Class);
     return this;
 }
Пример #13
0
        public override void Initialize(string label, string icon, NodeBuilder[] builders, TreePadOption[] options)
        {
            base.Initialize (label, icon, builders, options);

            testChangedHandler = (EventHandler) Runtime.DispatchService.GuiDispatch (new EventHandler (OnDetailsTestChanged));
            testService.TestSuiteChanged += (EventHandler) Runtime.DispatchService.GuiDispatch (new EventHandler (OnTestSuiteChanged));

            paned = new VPaned ();
            paned.Pack1 (base.Control, true, true);

            detailsPad = new VBox ();

            EventBox eb = new EventBox ();
            HBox header = new HBox ();
            eb.Add (header);

            detailLabel = new HeaderLabel ();
            detailLabel.Padding = 6;

            Button hb = new Button (new Gtk.Image ("gtk-close", IconSize.SmallToolbar));
            hb.Relief = ReliefStyle.None;
            hb.Clicked += new EventHandler (OnCloseDetails);
            header.PackEnd (hb, false, false, 0);

            hb = new Button (new Gtk.Image ("gtk-go-back", IconSize.SmallToolbar));
            hb.Relief = ReliefStyle.None;
            hb.Clicked += new EventHandler (OnGoBackTest);
            header.PackEnd (hb, false, false, 0);

            header.Add (detailLabel);
            Gdk.Color hcol = eb.Style.Background (StateType.Normal);
            hcol.Red = (ushort) (((double)hcol.Red) * 0.9);
            hcol.Green = (ushort) (((double)hcol.Green) * 0.9);
            hcol.Blue = (ushort) (((double)hcol.Blue) * 0.9);
            //	eb.ModifyBg (StateType.Normal, hcol);

            detailsPad.PackStart (eb, false, false, 0);

            VPaned panedDetails = new VPaned ();
            panedDetails.BorderWidth = 3;
            VBox boxPaned1 = new VBox ();

            chart = new TestChart ();
            chart.ButtonReleaseEvent += new Gtk.ButtonReleaseEventHandler (OnChartPopupMenu);
            chart.SelectionChanged += new EventHandler (OnChartDateChanged);
            chart.HeightRequest = 50;

            Toolbar toolbar = new Toolbar ();
            toolbar.IconSize = IconSize.SmallToolbar;
            toolbar.ToolbarStyle = ToolbarStyle.Icons;
            toolbar.ShowArrow = false;
            ToolButton but = new ToolButton ("gtk-zoom-in");
            but.Clicked += new EventHandler (OnZoomIn);
            toolbar.Insert (but, -1);

            but = new ToolButton ("gtk-zoom-out");
            but.Clicked += new EventHandler (OnZoomOut);
            toolbar.Insert (but, -1);

            but = new ToolButton ("gtk-go-back");
            but.Clicked += new EventHandler (OnChartBack);
            toolbar.Insert (but, -1);

            but = new ToolButton ("gtk-go-forward");
            but.Clicked += new EventHandler (OnChartForward);
            toolbar.Insert (but, -1);

            but = new ToolButton ("gtk-goto-last");
            but.Clicked += new EventHandler (OnChartLast);
            toolbar.Insert (but, -1);

            boxPaned1.PackStart (toolbar, false, false, 0);
            boxPaned1.PackStart (chart, true, true, 0);

            panedDetails.Pack1 (boxPaned1, false, false);

            // Detailed test information --------

            infoBook = new ButtonNotebook ();
            infoBook.PageLoadRequired += new EventHandler (OnPageLoadRequired);

            // Info - Group summary

            Frame tf = new Frame ();
            ScrolledWindow sw = new ScrolledWindow ();
            detailsTree = new TreeView ();

            detailsTree.HeadersVisible = true;
            detailsTree.RulesHint = true;
            detailsStore = new ListStore (typeof(object), typeof(string), typeof (string), typeof (string), typeof (string));

            CellRendererText trtest = new CellRendererText ();
            CellRendererText tr;

            TreeViewColumn col3 = new TreeViewColumn ();
            col3.Expand = false;
            //			col3.Alignment = 0.5f;
            col3.Widget = new Gtk.Image (CircleImage.Success);
            col3.Widget.Show ();
            tr = new CellRendererText ();
            //			tr.Xalign = 0.5f;
            col3.PackStart (tr, false);
            col3.AddAttribute (tr, "markup", 2);
            detailsTree.AppendColumn (col3);

            TreeViewColumn col4 = new TreeViewColumn ();
            col4.Expand = false;
            //			col4.Alignment = 0.5f;
            col4.Widget = new Gtk.Image (CircleImage.Failure);
            col4.Widget.Show ();
            tr = new CellRendererText ();
            //			tr.Xalign = 0.5f;
            col4.PackStart (tr, false);
            col4.AddAttribute (tr, "markup", 3);
            detailsTree.AppendColumn (col4);

            TreeViewColumn col5 = new TreeViewColumn ();
            col5.Expand = false;
            //			col5.Alignment = 0.5f;
            col5.Widget = new Gtk.Image (CircleImage.NotRun);
            col5.Widget.Show ();
            tr = new CellRendererText ();
            //			tr.Xalign = 0.5f;
            col5.PackStart (tr, false);
            col5.AddAttribute (tr, "markup", 4);
            detailsTree.AppendColumn (col5);

            TreeViewColumn col1 = new TreeViewColumn ();
            //			col1.Resizable = true;
            //			col1.Expand = true;
            col1.Title = "Test";
            col1.PackStart (trtest, true);
            col1.AddAttribute (trtest, "markup", 1);
            detailsTree.AppendColumn (col1);

            detailsTree.Model = detailsStore;

            sw.Add (detailsTree);
            tf.Add (sw);
            tf.ShowAll ();

            TestSummaryPage = infoBook.AddPage ("Summary", tf);

            // Info - Regressions list

            tf = new Frame ();
            sw = new ScrolledWindow ();
            tf.Add (sw);
            regressionTree = new TreeView ();
            regressionTree.HeadersVisible = false;
            regressionTree.RulesHint = true;
            regressionStore = new ListStore (typeof(object), typeof(string), typeof (Pixbuf));

            CellRendererText trtest2 = new CellRendererText ();
            CellRendererPixbuf pr = new CellRendererPixbuf ();

            TreeViewColumn col = new TreeViewColumn ();
            col.PackStart (pr, false);
            col.AddAttribute (pr, "pixbuf", 2);
            col.PackStart (trtest2, false);
            col.AddAttribute (trtest2, "markup", 1);
            regressionTree.AppendColumn (col);
            regressionTree.Model = regressionStore;
            sw.Add (regressionTree);
            tf.ShowAll ();

            TestRegressionsPage = infoBook.AddPage ("Regressions", tf);

            // Info - Failed tests list

            tf = new Frame ();
            sw = new ScrolledWindow ();
            tf.Add (sw);
            failedTree = new TreeView ();
            failedTree.HeadersVisible = false;
            failedTree.RulesHint = true;
            failedStore = new ListStore (typeof(object), typeof(string), typeof (Pixbuf));

            trtest2 = new CellRendererText ();
            pr = new CellRendererPixbuf ();

            col = new TreeViewColumn ();
            col.PackStart (pr, false);
            col.AddAttribute (pr, "pixbuf", 2);
            col.PackStart (trtest2, false);
            col.AddAttribute (trtest2, "markup", 1);
            failedTree.AppendColumn (col);
            failedTree.Model = failedStore;
            sw.Add (failedTree);
            tf.ShowAll ();

            TestFailuresPage = infoBook.AddPage ("Failed tests", tf);

            // Info - results

            tf = new Frame ();
            sw = new ScrolledWindow ();
            tf.Add (sw);
            resultView = new TextView ();
            resultView.Editable = false;
            sw.Add (resultView);
            tf.ShowAll ();
            TestResultPage = infoBook.AddPage ("Result", tf);

            // Info - Output

            tf = new Frame ();
            sw = new ScrolledWindow ();
            tf.Add (sw);
            outputView = new TextView ();
            outputView.Editable = false;
            sw.Add (outputView);
            tf.ShowAll ();
            TestOutputPage = infoBook.AddPage ("Output", tf);

            panedDetails.Pack2 (infoBook, true, true);
            detailsPad.PackStart (panedDetails, true, true, 0);
            paned.Pack2 (detailsPad, true, true);

            paned.ShowAll ();

            infoBook.HidePage (TestResultPage);
            infoBook.HidePage (TestOutputPage);
            infoBook.HidePage (TestSummaryPage);
            infoBook.HidePage (TestRegressionsPage);
            infoBook.HidePage (TestFailuresPage);

            detailsPad.Sensitive = false;
            detailsPad.Hide ();

            detailsTree.RowActivated += new Gtk.RowActivatedHandler (OnTestActivated);
            regressionTree.RowActivated += new Gtk.RowActivatedHandler (OnRegressionTestActivated);
            failedTree.RowActivated += new Gtk.RowActivatedHandler (OnFailedTestActivated);
        }