Beispiel #1
0
        private void FillNewVertexAndEdgeBySchemaMenu()
        {
            IVertex baseVertex = Edge.Get(@"To:");

            IVertex r = baseVertex.GetAll(@"$Is:");

            if (r.Count() == 0)
            {
                r = Edge.GetAll(@"Meta:");
            }
            ;

            if (r.Count() == 0 || r.FirstOrDefault().To.Value == null || GeneralUtil.CompareStrings(r.FirstOrDefault().To.Value, "$Empty"))
            {
                NewVertexBySchema.IsEnabled = false;
                NewEdgeBySchema.IsEnabled   = false;
                return;
            }

            NewVertexBySchema.Items.Clear();
            NewEdgeBySchema.Items.Clear();

            foreach (IEdge e in r)
            {
                NewVertexAndEdgeBySchema_FillForMeta(baseVertex, e.To, VertexOperations.GetChildEdges(e.To));
            }

            NewVertexAndEdgeBySchema_FillForMeta(baseVertex, MinusZero.Instance.Root.Get(@"System\Meta\Base\Vertex"), MinusZero.Instance.Root.GetAll(@"System\Meta\Base\Vertex\"));

            NewVertexBySchema.IsEnabled = true;
            NewEdgeBySchema.IsEnabled   = true;
        }
Beispiel #2
0
        public SelectDialog(IVertex info, IVertex options, Point?position)
        {
            if (options.Count() > 1)
            {
                InitializeComponent();

                if (position != null)
                {
                    _mousePosition = (Point)position;
                    this.Loaded   += new RoutedEventHandler(OnLoad);
                }
                else
                {
                    Owner = m0Main.Instance;
                }

                Info.Content = info.Value;

                List.ItemsSource = options;

                ShowDialog();
            }
            else
            {
                IEdge e = options.FirstOrDefault();

                if (e != null)
                {
                    SelectedOption = e.To;
                }
            }
        }
Beispiel #3
0
        public static bool IsToVertexEnoughToIdentifyEdge(IVertex baseEdge, IVertex to)
        {
            if (to.Value == null)
            {
                // int cnt = baseEdge.OutEdgesRaw.Count;

                if (baseEdge.GetAll("").Count() > 1)
                {
                    // if(cnt > 1)
                    return(false);
                }
                else
                {
                    return(true);
                }
            }

            //  int cnt2 = 0;

            //   foreach (IEdge e in baseEdge.OutEdgesRaw)
            //   if (GraphUtil.GetValueAndCompareStrings(e.To, to.Value.ToString()))
            //      cnt2++;
            IVertex test = baseEdge.GetAll("\"" + to.Value.ToString() + "\"");

            if (test != null && test.Count() > 1)
            {
                // if(cnt2 > 1)
                return(false);
            }

            return(true);
        }
Beispiel #4
0
 private static void PrintVertexTrack(IVertex[] vertex)
 {
     Console.WriteLine("Vertex tracks:");
     for (int i = 0; i < vertex.Count(); i++) {
         Console.WriteLine("{0}: {1}", i + 1, vertex[i]);
     }
 }
Beispiel #5
0
        private void dndPreviewMouseMove(object sender, MouseEventArgs e)
        {
            Point  mousePos = e.GetPosition(this);
            Vector diff     = dndStartPoint - mousePos;

            var    headersPresenter   = UIWpf.FindVisualChild <DataGridColumnHeadersPresenter>(this);
            double headerActualHeight = headersPresenter.ActualHeight;

            if (mousePos.Y <= headerActualHeight) // if header
            {
                e.Handled = false;
                return;
            }

            if (hasButtonBeenDown && isDraggin == false &&
                !UIWpf.IsMouseOverScrollbar(sender, dndStartPoint) &&
                (e.LeftButton == MouseButtonState.Pressed) && (
                    (Math.Abs(diff.X) > Dnd.MinimumHorizontalDragDistance) ||
                    (Math.Abs(diff.Y) > Dnd.MinimumVerticalDragDistance)))
            {
                isDraggin = true;

                RestoreSelectedVertexes();

                IVertex dndVertex = MinusZero.Instance.CreateTempVertex();

                if (Vertex.Get(@"SelectedEdges:\") != null)
                {
                    foreach (IEdge ee in Vertex.GetAll(@"SelectedEdges:\"))
                    {
                        dndVertex.AddEdge(null, ee.To);
                    }
                }
                else
                {
                    IVertex v = GetEdgeByLocation(dndStartPoint);
                    if (v != null)
                    {
                        dndVertex.AddEdge(null, v);
                    }
                }

                if (dndVertex.Count() > 0)
                {
                    DataObject dragData = new DataObject("Vertex", dndVertex);
                    dragData.SetData("DragSource", this);

                    Dnd.DoDragDrop(this, dragData);

                    e.Handled = true;
                }

                isDraggin = false;
            }

            // e.Handled = true;
        }
Beispiel #6
0
        private void BaseEdgeSet()
        {
            UpdateItemList();

            if ((bool)DirectRadio.IsChecked && (ItemsList.Count() == 1))
            {
                InstanceRadio.IsChecked = true;

                UpdateItemList();

                if (ItemsList.Count() == 0)
                {
                    RadioLabel_MouseDown_Instance(null, null);
                }
                else
                {
                    this.List.SelectedIndex = 0;
                }
            }
        }
Beispiel #7
0
        public IEdge this[string meta]
        {
            get {
                IVertex r = this.GetAll(meta + ":");

                if (r.Count() > 0)
                {
                    return(r.First());
                }

                IVertex metavertexs = this.GetAll(@"$Is:\" + meta);

                if (metavertexs.Count() > 0)
                {
                    IEdge metavertex = metavertexs.First();

                    IEdge newedge = new EasyEdge(this, metavertex.To, null);

                    return(newedge);
                }
                else
                {
                    if (meta == "$EdgeTarget")
                    {
                        IEdge metavertex = m0.MinusZero.Instance.Root.GetAll(@"System\Meta\Base\Vertex\$EdgeTarget").FirstOrDefault();

                        IEdge newedge = new EasyEdge(this, metavertex.To, null);

                        return(newedge);
                    }
                }

                // inherits from Vertex. hiddenly
                // this is for Table Visualiser
                IEdge vertexMetaVertex = m0.MinusZero.Instance.Root.GetAll(@"System\Meta\Base\Vertex\" + meta).FirstOrDefault();

                if (vertexMetaVertex != null)
                {
                    return(new EasyEdge(this, vertexMetaVertex.To, null));
                }

                return(null);
            }
        }
Beispiel #8
0
        private bool testVertex(IVertex toTest, string query)
        {
            IVertex temp = MinusZero.Instance.CreateTempVertex();

            IEdge e = temp.AddEdge(null, toTest);

            IVertex res = temp.GetAll(query);

            temp.DeleteEdge(e);

            if (res.Count() > 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Beispiel #9
0
        private void dndPreviewMouseMove(object sender, MouseEventArgs e)
        {
            Point  mousePos = e.GetPosition(this);
            Vector diff     = dndStartPoint - mousePos;

            if (hasButtonBeenDown &&
                !UIWpf.IsMouseOverScrollbar(sender, dndStartPoint) &&
                (e.LeftButton == MouseButtonState.Pressed) && (
                    (Math.Abs(diff.X) > Dnd.MinimumHorizontalDragDistance) ||
                    (Math.Abs(diff.Y) > Dnd.MinimumVerticalDragDistance)))
            {
                isDraggin = true;

                IVertex dndVertex = MinusZero.Instance.CreateTempVertex();

                if (Vertex.Get(@"SelectedEdges:\") != null)
                {
                    foreach (IEdge ee in Vertex.GetAll(@"SelectedEdges:\"))
                    {
                        dndVertex.AddEdge(null, ee.To);
                    }
                }
                else
                {
                    IVertex v = GetEdgeByLocation(dndStartPoint);
                    if (v != null)
                    {
                        dndVertex.AddEdge(null, v);
                    }
                }

                if (dndVertex.Count() > 0)
                {
                    DataObject dragData = new DataObject("Vertex", dndVertex);
                    dragData.SetData("DragSource", this);

                    Dnd.DoDragDrop(this, dragData);
                }

                isDraggin = false;
            }
        }
Beispiel #10
0
        public void UpdateBaseEdge()
        {
            DispachAllSubVisualisers();

            BaseVertexEdgeAdded_PreFill = false;
            BaseVertexEdgeAdded         = false;


            //  if (!isLoaded)
            //    return;

            IVertex basTo = Vertex.Get(@"BaseEdge:\To:");

            if (basTo != null)
            {
                if ((string)Vertex.Get(@"SectionsAsTabs:").Value == "True")
                {
                    SectionsAsTabs = true;
                }
                else
                {
                    SectionsAsTabs = false;
                }

                if ((string)Vertex.Get(@"MetaOnLeft:").Value == "True")
                {
                    MetaOnLeft = true;
                }
                else
                {
                    MetaOnLeft = false;
                }

                if ((string)Vertex.Get(@"ExpertMode:").Value == "True")
                {
                    ExpertMode = true;
                }
                else
                {
                    ExpertMode = false;
                }

                ColumnNumber = GraphUtil.GetIntegerValue(Vertex.Get(@"ColumnNumber:"));

                IVertex metaForForm = getMetaForForm();

                PreFillForm();

                InitializeControlContent();

                List <IEdge> childs = new List <IEdge>();

                if (metaForForm == null || metaForForm.Count() == 0) // if Form is not typed
                {
                    IList <IVertex> visited = new List <IVertex>();

                    foreach (IEdge e in basTo)
                    {
                        childs.Add(e);

                        if (!visited.Contains(e.Meta) && e.Meta.Get("$Hide:") == null)
                        {
                            if (basTo.GetAll(e.Meta + ":").Count() > 1)
                            {
                                AddEdge(e.Meta, true);
                                visited.Add(e.Meta);
                            }
                            else
                            {
                                AddEdge(e.Meta, false);
                            }
                        }
                    }
                }
                else // Form is typed
                {
                    foreach (IEdge e in VertexOperations.GetChildEdges(metaForForm))
                    {
                        childs.Add(e);

                        if (e.To.Get("$Hide:") == null)
                        {
                            if (GraphUtil.GetIntegerValue(e.To.Get("$MaxCardinality:")) > 1 || GraphUtil.GetIntegerValue(e.To.Get("$MaxCardinality:")) == -1)
                            {
                                AddEdge(e.To, true);
                            }
                            else
                            {
                                AddEdge(e.To, false);
                            }
                        }
                    }
                }

                if (ExpertMode)
                {
                    foreach (IEdge e in MinusZero.Instance.Root.Get(@"System\Meta\Base\Vertex"))
                    {
                        bool contains = false;

                        foreach (IEdge ee in childs)
                        {
                            if (GeneralUtil.CompareStrings(ee.To, e.To))
                            {
                                contains = true;
                            }
                        }

                        if (contains == false)
                        {
                            AddEdge(e.To, false);
                        }
                    }
                }

                if (MetaOnLeft)
                {
                    if (!HasTabs)
                    {
                        CorrectWidth(TabList[""]);
                    }
                }
            }
        }
Beispiel #11
0
        private void PreFillForm()
        {
            TabList = new Dictionary <string, TabInfo>();

            IVertex basTo = Vertex.Get(@"BaseEdge:\To:");

            IVertex metaForForm = getMetaForForm();

            List <IEdge> childs = new List <IEdge>();

            if (metaForForm == null || metaForForm.Count() == 0) // if Form is not typed
            {
                IList <IVertex> visited = new List <IVertex>();

                foreach (IEdge e in basTo)
                {
                    childs.Add(e);
                    if (!visited.Contains(e.Meta) && e.Meta.Get("$Hide:") == null)
                    {
                        if (basTo.GetAll(e.Meta + ":").Count() > 1)
                        {
                            PreFillFormAnalyseEdge(e.Meta, true);
                            visited.Add(e.Meta);
                        }
                        else
                        {
                            PreFillFormAnalyseEdge(e.Meta, false);
                        }
                    }
                }
            }
            else // Form is typed
            {
                foreach (IEdge e in VertexOperations.GetChildEdges(metaForForm))
                {
                    childs.Add(e);

                    if (e.To.Get("$Hide:") == null)
                    {
                        if (GraphUtil.GetIntegerValue(e.To.Get("$MaxCardinality:")) > 1 || GraphUtil.GetIntegerValue(e.To.Get("$MaxCardinality:")) == -1)
                        {
                            PreFillFormAnalyseEdge(e.To, true);
                        }
                        else
                        {
                            PreFillFormAnalyseEdge(e.To, false);
                        }
                    }
                }
            }

            if (ExpertMode)
            {
                foreach (IEdge e in MinusZero.Instance.Root.Get(@"System\Meta\Base\Vertex"))
                {
                    bool contains = false;

                    foreach (IEdge ee in childs)
                    {
                        if (GeneralUtil.CompareStrings(ee.To, e.To))
                        {
                            contains = true;
                        }
                    }

                    if (contains == false)
                    {
                        PreFillFormAnalyseEdge(e.To, false);
                    }
                }
            }
        }
Beispiel #12
0
        protected void UpdateItemList()
        {
            ItemsList = m0.MinusZero.Instance.CreateTempVertex();

            if (InstanceRadio.IsChecked == true)
            {
                IVertex Instance = m0.MinusZero.Instance.Root.GetAll(@"System\Data\Visualiser\Diagram\{InstanceCreation:Instance}");

                foreach (IEdge d in Instance)
                {
                    //if (BaseEdge.Get("To:").Get((string)GraphUtil.GetValue(d.To.Get("MetaVertexTestQuery:"))) != null)
                    if (testVertex(BaseEdge.Get("To:"), (string)GraphUtil.GetValue(d.To.Get("MetaVertexTestQuery:"))))
                    {
                        ItemsList.AddEdge(null, d.To);
                    }
                }

                IVertex InstanceAndDirect = m0.MinusZero.Instance.Root.GetAll(@"System\Data\Visualiser\Diagram\{InstanceCreation:InstanceAndDirect}");

                foreach (IEdge d in InstanceAndDirect)
                {
                    //if (BaseEdge.Get("To:").Get((string)GraphUtil.GetValue(d.To.Get("MetaVertexTestQuery:"))) != null)
                    if (testVertex(BaseEdge.Get("To:"), (string)GraphUtil.GetValue(d.To.Get("MetaVertexTestQuery:"))))
                    {
                        ItemsList.AddEdge(null, d.To);
                    }
                }
            }
            else
            {
                IVertex InstanceAndDirect = m0.MinusZero.Instance.Root.GetAll(@"System\Data\Visualiser\Diagram\{InstanceCreation:InstanceAndDirect}");

                foreach (IEdge d in InstanceAndDirect)
                {
                    //if (BaseEdge.Get("To:").Get((string)GraphUtil.GetValue(d.To.Get("DirectVertexTestQuery:"))) != null)
                    if (testVertex(BaseEdge.Get("To:"), (string)GraphUtil.GetValue(d.To.Get("DirectVertexTestQuery:"))))
                    {
                        ItemsList.AddEdge(null, d.To);
                    }
                    else
                    if ((string)GraphUtil.GetValue(d.To.Get("DirectVertexTestQuery:")) == "")
                    {
                        ItemsList.AddEdge(null, d.To);
                    }
                }

                IVertex Direct = m0.MinusZero.Instance.Root.GetAll(@"System\Data\Visualiser\Diagram\{InstanceCreation:Direct}");

                foreach (IEdge d in Direct)
                {
                    //if (BaseEdge.Get("To:").Get((string)GraphUtil.GetValue(d.To.Get("DirectVertexTestQuery:"))) != null)
                    if (testVertex(BaseEdge.Get("To:"), (string)GraphUtil.GetValue(d.To.Get("DirectVertexTestQuery:"))))
                    {
                        ItemsList.AddEdge(null, d.To);
                    }
                    else
                    if ((string)GraphUtil.GetValue(d.To.Get("DirectVertexTestQuery:")) == "")
                    {
                        ItemsList.AddEdge(null, d.To);
                    }
                }
            }

            List.ItemsSource = ItemsList;

            if (ItemsList.Count() > 0)
            {
                ListLabel.Visibility = Visibility.Visible;
                List.Visibility      = Visibility.Visible;

                CreateButton.IsEnabled = true;

                if (InstanceRadio.IsChecked == true)
                {
                    NameControlsShow();
                }
                else
                {
                    NameControlsHide();
                }
            }
            else
            {
                ListLabel.Visibility = Visibility.Hidden;
                List.Visibility      = Visibility.Hidden;

                CreateButton.IsEnabled = false;

                NameControlsHide();
            }
        }
Beispiel #13
0
        public virtual void DoCreateDiagramLine(DiagramItemBase toItem)
        {
            IVertex toEdge = toItem.Vertex.Get("BaseEdge:");

            IVertex r = m0.MinusZero.Instance.Root;

            IVertex v = m0.MinusZero.Instance.CreateTempVertex();


            foreach (IEdge def in Vertex.GetAll(@"Definition:\DiagramLineDefinition:"))
            {
                bool CreateEdgeOnly = false;

                if (GraphUtil.GetValueAndCompareStrings(def.To.Get("CreateEdgeOnly:"), "True"))
                {
                    CreateEdgeOnly = true;
                }

                foreach (IEdge e in Vertex.GetAll(@"BaseEdge:\To:\" + def.To.Get("EdgeTestQuery:")))
                {
                    bool canAdd = true;

                    if (def.To.Get("ToDiagramItemTestQuery:") != null && toItem.Vertex.Get((string)def.To.Get("ToDiagramItemTestQuery:").Value) == null)
                    {
                        canAdd = false;
                    }

                    if (e.To.Get(@"$EdgeTarget:") != null &&
                        !GeneralUtil.CompareStrings(e.To.Get(@"$EdgeTarget:").Value, "Vertex") && // Vertexes do not have $Is:Vertex
                        toEdge.Get(@"To:\$Is:" + (string)e.To.Get(@"$EdgeTarget:").Value) == null)
                    {
                        canAdd = false;
                    }

                    if (CreateEdgeOnly == false &&
                        e.To.Get(@"$VertexTarget:") != null &&
                        toEdge.Get(@"To:\$Is:" + (string)e.To.Get(@"$VertexTarget:").Value) == null)
                    {
                        canAdd = false;
                    }

                    if (canAdd)
                    {
                        AddNewLineOption(v, def, e);
                    }
                }

                if (GeneralUtil.CompareStrings(def.To.Value, "Edge"))// Vertex\Edge
                {
                    foreach (IEdge e in r.Get(@"System\Meta\Base\Vertex"))
                    {
                        AddNewLineOption(v, def, e);
                    }
                }

                if (GeneralUtil.CompareStrings(def.To.Get("EdgeTestQuery:"), "$EdgeTarget")) // $EdgeTarget is not present as there is no inheritance from Vertex
                {
                    AddNewLineOption(v, def, GraphUtil.FindEdgeByToVertex(r.Get(@"System\Meta\Base\Vertex"), "$EdgeTarget"));
                }
            }

            if (v.Count() == 0)
            {
                MinusZero.Instance.DefaultShow.ShowInfo("There is no diagram line definition matching selected source and target items.");
            }

            IVertex info = m0.MinusZero.Instance.CreateTempVertex();

            info.Value = "choose diagram line:";


            Point mousePosition = UIWpf.GetMousePosition();

            IVertex a = MinusZero.Instance.DefaultShow.SelectDialog(info, v, mousePosition);

            if (a != null)
            {
                IVertex test = VertexOperations.TestIfNewEdgeValid(Vertex.Get(@"BaseEdge:\To:"), a.Get("OptionEdge:"), toEdge.Get("To:"));

                if (test == null)
                {
                    bool?ForceShowEditForm = null;      // ForceShowEditForm

                    if (a.Get(@"OptionDiagramLineDefinition:\ForceShowEditForm:") != null)
                    {
                        if (GeneralUtil.CompareStrings(a.Get(@"OptionDiagramLineDefinition:\ForceShowEditForm:"), "True"))
                        {
                            ForceShowEditForm = true;
                        }

                        if (GeneralUtil.CompareStrings(a.Get(@"OptionDiagramLineDefinition:\ForceShowEditForm:"), "False"))
                        {
                            ForceShowEditForm = false;
                        }
                    }

                    bool CreateEdgeOnly = false;     // CreateEdgeOnly

                    if (GraphUtil.GetValueAndCompareStrings(a.Get(@"OptionDiagramLineDefinition:\CreateEdgeOnly:"), "True"))
                    {
                        CreateEdgeOnly = true;
                    }


                    CanAutomaticallyAddEdges = false;     // for VertexChange
                    IEdge edge = VertexOperations.AddEdgeOrVertexByMeta(Vertex.Get(@"BaseEdge:\To:"), a.Get("OptionEdge:"), toEdge.Get("To:"), mousePosition, CreateEdgeOnly, ForceShowEditForm);
                    CanAutomaticallyAddEdges = true;

                    AddDiagramLineVertex(edge, a.Get(@"OptionDiagramLineDefinition:"), toItem);
                }
                else
                {
                    MinusZero.Instance.DefaultShow.ShowInfo("Adding new diagram line  \"" + a.Value + "\" is not possible.\n\n" + test.Value);
                }
            }
        }