예제 #1
0
        private void OnNavigatorSelectedClass(object sender, ClassEventArgs arg)
        {
            if (ActiveDiagram != null)
            {
                XCaseViewBase classView = null;
                if (ActiveDiagram.ElementRepresentations.IsElementPresent(arg.SelectedClass))
                {
                    classView = (PIM_Class)ActiveDiagram.ElementRepresentations[arg.SelectedClass];
                }
                if (classView != null)
                {
                    foreach (ISelectable i in ActiveDiagram.SelectedItems)
                    {
                        i.IsSelected = false;
                    }
                    classView.IsSelected = true;
                    ActiveDiagram.SelectedItems.Clear();
                    ActiveDiagram.SelectedItems.Add(classView);
                }
            }

            // Display the class in the Properties window
            if (arg != null && arg.SelectedClass != null)
            {
                propertiesWindow.DisplayModelClass(arg.SelectedClass);
            }
        }
예제 #2
0
        /// <summary>
        /// Draws given root element and all its children and counts width of its subtree.
        /// </summary>
        /// <param name="diagram">Diagram to be layouted</param>
        /// <param name="root">Root element of layouted subtree</param>
        /// <param name="top">Location of the upper border of the root</param>
        /// <param name="left">Location of the left border of the entire subtree</param>
        /// <returns>Width of the subtree (root included)</returns>
        private static double DrawTree(XCaseCanvas diagram, NamedElement root, double top, double left)
        {
            if (!diagram.ElementRepresentations.IsElementPresent(root))
            {
                return(-horizontalSpace);
            }
            XCaseViewBase element = (diagram.ElementRepresentations[root] as XCaseViewBase);
            double        height  = element.ActualHeight;
            double        width   = element.ActualWidth;
            double        right   = left + TreeLayout.DrawSubtree(diagram, root, top + height + verticalSpace, left);

            if (right == left)
            {
                right = left + width;
            }
            else
            {
                if (right < left + width)
                {
                    double subtreeWidth = right - left;
                    TreeLayout.DrawSubtree(diagram, root, top + height + verticalSpace, left + (width - subtreeWidth) / 2);
                    right = left + width;
                }
            }
            element.X            = Math.Round((right + left) / 2 - width / 2);
            element.ViewHelper.X = element.X;
            element.Y            = Math.Round(top);
            element.ViewHelper.Y = element.Y;
            return(right - left);
        }
예제 #3
0
        internal void SelectedItems_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            SelectedItemsCollection selection = (SelectedItemsCollection)sender;

            if (selection.Count == 1 && selection[0] is XCaseViewBase)
            {
                DeselectAll(modelClasses);
                DeselectAll(nestedPackages);

                XCaseViewBase selectedXCaseClass = (XCaseViewBase)selection[0];

                if (selectedXCaseClass.ModelElement.VersionManager != null &&
                    selectedXCaseClass.ModelElement.Version != project.Version)
                {
                    BindToProject(selectedXCaseClass.ModelElement.VersionManager.VersionedProjects[selectedXCaseClass.ModelElement.Version]);
                }

                if (selectedXCaseClass.Controller != null && selectedXCaseClass.Controller.NamedElement is Class && !(selectedXCaseClass.Controller.NamedElement is AssociationClass))
                {
                    Class selectedClass;
                    if (selectedXCaseClass.Controller.NamedElement is PIMClass)
                    {
                        selectedClass = selectedXCaseClass.Controller.NamedElement as Class;
                    }
                    else
                    {
                        selectedClass = (selectedXCaseClass.Controller.NamedElement as PSMClass).RepresentedClass;
                        if (selectedClass is AssociationClass)
                        {
                            selectedClass = null;
                        }
                    }
                    if (selectedClass != null)
                    {
                        Package nestingPackage = selectedClass.Package;
                        if (nestingPackage == model)
                        {
                            ExpandAndSelectClass(modelClasses, selectedClass);
                        }
                        else
                        {
                            Collection <Package> packagePath = new Collection <Package>();
                            Package package = nestingPackage;
                            while (package != null)
                            {
                                packagePath.Add(package);
                                package = package.NestingPackage;
                            }

                            ExpandNestedPackages(nestedPackages, selectedClass, packagePath, packagePath.Count - 1);
                        }
                    }
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Displayes PIM class selected on the canvas
        /// </summary>
        /// <param name="c"></param>
        /// <param name="classtype"></param>
        /// <param name="mainwin"></param>
        public void Display(XCaseViewBase c, string classtype, MainWindow mainwin)
        {
            mv = mainwin;
            SelectedClassController = c.Controller;

            IDictionaryEnumerator ie = grid.Resources.GetEnumerator();

            while (ie.MoveNext())
            {
                if (ie.Key.ToString() == "renamePIMClass")
                {
                    renamePIMClass               = (RenamePIMClassConverter)ie.Value;
                    renamePIMClass.Controller    = mv.CurrentProject.GetModelController();
                    renamePIMClass.selectedClass = (Class)c.Controller.Element;
                }
                else
                if (ie.Key.ToString() == "renameAttribute")
                {
                    renameAttribute               = (RenameAttributeConverter)ie.Value;
                    renameAttribute.Controller    = mv.CurrentProject.GetModelController();
                    renameAttribute.selectedClass = (Class)c.Controller.Element;
                }
                else
                if (ie.Key.ToString() == "renameOperation")
                {
                    renameOperation            = (RenameOperationConverter)ie.Value;
                    renameOperation.Controller = mv.CurrentProject.GetModelController();
                }
            }

            mainLabel.Content = classtype + " Class";

            classNameBox.DataContext = ((ClassController)SelectedClassController).Class;
            attBox.DataContext       = ((ClassController)SelectedClassController).Class.Attributes;
            opBox.DataContext        = ((ClassController)SelectedClassController).Class.Operations;
            dcBox.DataContext        = ((ClassController)SelectedClassController).Class.DerivedPSMClasses;

            appearance.Visibility = Visibility.Visible;
            appearance.SetElement(c.Controller.DiagramController, c.ViewHelper);
        }
예제 #5
0
        /// <summary>
        ///  Displayes PSM class selected on the canvas
        /// </summary>
        /// <param name="c"></param>
        public void Display(XCaseViewBase c, MainWindow mainwin)
        {
            mv = mainwin;

            SelectedClassController = c.Controller;

            IDictionaryEnumerator ie = grid.Resources.GetEnumerator();

            while (ie.MoveNext())
            {
                if (ie.Key.ToString() == "renameClass")
                {
                    renameClass            = (RenamePSMClassConverter)ie.Value;
                    renameClass.Controller = SelectedClassController;
                }
                else
                if (ie.Key.ToString() == "renameAlias")
                {
                    renameAlias            = (RenameAliasConverter)ie.Value;
                    renameAlias.Controller = SelectedClassController;
                }
                else
                if (ie.Key.ToString() == "renameElement")
                {
                    renameElement            = (RenameElementConverter)ie.Value;
                    renameElement.Controller = SelectedClassController;
                }
            }

            classNameBox.DataContext        = ((PSM_ClassController)SelectedClassController).Class;
            elementNameBox.DataContext      = ((PSM_ClassController)SelectedClassController).Class;
            attBox.DataContext              = ((PSM_ClassController)SelectedClassController).Class.AllPSMAttributes;
            representedClassBox.DataContext = ((PSM_ClassController)SelectedClassController).Class;

            appearance.SetElement(c.Controller.DiagramController, c.ViewHelper);
            appearance.DisableEdit();
        }
예제 #6
0
 /// <summary>
 /// Displays currently PSM class in Properties window.
 /// </summary>
 /// <param name="c">psm class</param>
 private void DisplaySelectedPSMClass(XCaseViewBase c)
 {
     currentGrid = psmClassGrid;
     psmClassGrid.Display(c, MainWindowRef);
     psmClassGrid.Visibility = Visibility.Visible;
 }