/// <summary> /// Handles diagram removing event invoked by Projects window /// </summary> internal void DiagramRemoveHandler(object sender, DiagramDClickArgs arg) { if (arg.Diagram is PIMDiagram) { RemoveDiagramCommand removeDiagramCommand = (RemoveDiagramCommand)RemoveDiagramCommandFactory.Factory().Create(arg.Diagram.Project.GetModelController()); removeDiagramCommand.Set(arg.Diagram.Project, arg.Diagram); removeDiagramCommand.Execute(); } else if (arg.Diagram is PSMDiagram) { PanelWindow Tab = FindTab(arg.Diagram); if (Tab != null) { RemovePSMDiagramMacroCommand c = (RemovePSMDiagramMacroCommand)RemovePSMDiagramMacroCommandFactory.Factory().Create(arg.Diagram.Project.GetModelController()); c.Set(arg.Diagram.Project, arg.Diagram as PSMDiagram, Tab.xCaseDrawComponent.Canvas.Controller); if (c.Commands.Count > 0) { c.Execute(); } } else { RemovePSMDiagramMacroCommand c = (RemovePSMDiagramMacroCommand)RemovePSMDiagramMacroCommandFactory.Factory().Create(MainWindow.CurrentProject.GetModelController()); c.Set(arg.Diagram.Project, arg.Diagram as PSMDiagram, new DiagramController(arg.Diagram as PSMDiagram, MainWindow.CurrentProject.GetModelController())); if (c.Commands.Count > 0) { c.Execute(); } } } else { throw new NotImplementedException("Unknown diagram type"); } }
/// <summary> /// Adds a new tab to the tab panel, associated with given <paramref name="diagram"/> /// <param name="diagram">Diagram to which the new tab should be bound</param> /// </summary> internal PanelWindow AddTab(Diagram diagram) { PanelWindow newTab = new PanelWindow(); if (diagram is PIMDiagram) { newTab.xCaseDrawComponent.Canvas.InitializeRegistrationSet(MainWindow.PIMRepresentantsSet); } if (diagram is PSMDiagram) { newTab.xCaseDrawComponent.Canvas.InitializeRegistrationSet(MainWindow.PSMRepresentantsSet); } newTab.BindToDiagram(diagram, diagram.Project.GetModelController()); newTab.xCaseDrawComponent.Canvas.SelectedItems.CollectionChanged += SelectedItems_CollectionChanged; ActivePane.Items.Add(newTab); ActivePane.UpdateLayout(); //ActivePane.BringHeaderToFront(newTab); dockManager.ActiveDocument = newTab; #if DEBUG newTab.BindToLogWIndow(MainWindow.logWindow); #endif return(newTab); }
internal void project_DiagramRemoved(object sender, DiagramEventArgs e) { PanelWindow tab = FindTab(e.Diagram); if (tab != null) { RemoveTab(tab); } }
/// <summary> /// Invokes <see cref="ActiveDiagramChanged"/> event. /// </summary> /// <param name="panelWindow">New active panel window</param> internal void InvokeActiveDiagramChanged(PanelWindow panelWindow) { ActiveDiagramChangedEventHandler temp = ActiveDiagramChanged; if (temp != null) { temp(panelWindow); } }
public XCaseCanvas GetDiagramView(Diagram diag) { PanelWindow w = FindTab(diag); if (w != null) { return(w.xCaseDrawComponent.Canvas); } return(null); }
private void OnActiveDiagramChanged(PanelWindow panelWindow) { if (panelWindow != null) { Project diagramProject = panelWindow.xCaseDrawComponent.Canvas.Diagram.Project; if (diagramProject != CurrentProject) { CurrentProject = diagramProject; } } if (panelWindow != null && panelWindow.xCaseDrawComponent.Canvas.Diagram != null) { //if (panelWindow.xCaseDrawComponent.Canvas.Diagram is PSMDiagram) // View.TreeLayout.SwitchOff(); ActiveDiagram = panelWindow.xCaseDrawComponent.Canvas; Debug.WriteLine("ActiveDiagramChanged (" + ActiveDiagram.Diagram.Caption + ")"); } else { ActiveDiagram = null; Debug.WriteLine("ActiveDiagramChanged (null)"); } navigatorWindow.ActiveDiagram = ActiveDiagram; propertiesWindow.ActiveDiagram = ActiveDiagram; InvokeDiagramSelectionChanged(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); UIElement[] pimMenus = new UIElement[] { PIMmenu, AlignmentMenu, PIMDeleteMenu, DeriveMenu }; UIElement[] psmMenus = new UIElement[] { PSMmenuClass, PSMmenuElements, OrderingMenu, PSMDeleteMenu, bXMLSchema, bSampleDocument, ReverseMenu }; bool showPIMMenus = ActiveDiagram != null && ActiveDiagram.Diagram != null && ActiveDiagram.Diagram is PIMDiagram; bool showPSMMenus = ActiveDiagram != null && ActiveDiagram.Diagram != null && ActiveDiagram.Diagram is PSMDiagram; foreach (UIElement menu in pimMenus) { menu.Visibility = showPIMMenus ? Visibility.Visible : Visibility.Collapsed; } foreach (UIElement menu in psmMenus) { menu.Visibility = showPSMMenus ? Visibility.Visible : Visibility.Collapsed; } if (ActiveDiagram != null) { ActiveDiagram.SelectedItems.CollectionChanged += navigatorWindow.SelectedItems_CollectionChanged; } // I am hiding the reverse menu in release versions for now #if DEBUG #else ReverseMenu.Visibility = Visibility.Collapsed; #endif }
/// <summary> /// Closes given PanelWindow /// </summary> /// <param name="tab">PanelWindow to be closed</param> internal void RemoveTab(PanelWindow tab) { if (dockManager.ActiveDocument == tab) { MainWindow.ActiveDiagram.Unbind(); } tab.Close(); if (dockManager.ActiveDocument == null && dockManager.Documents.Count() > 0) { dockManager.ActiveDocument = dockManager.Documents.Last(); } //InvokeActiveDiagramChanged(dockManager.ActiveDocument as PanelWindow); }
/// <summary> /// Closes active PanelWindow /// </summary> internal void RemoveActiveTab() { if (dockManager.ActiveDocument != null) { int index = dockManager.MainDocumentPane.Items.IndexOf(dockManager.ActiveDocument); PanelWindow pw = dockManager.ActiveDocument as PanelWindow; if (pw != null) { RemoveTab(pw); } else { (dockManager.ActiveDocument as DocumentContent).Close(); } } }
/// <summary> /// Activates given diagram and selects given element on it (used from Properties window) /// </summary> /// <param name="diagram"></param> /// <param name="selectedElement"></param> public void ActivateDiagramWithElement(Diagram diagram, Element selectedElement) { PanelWindow tab = ActivateDiagram(diagram); tab.xCaseDrawComponent.Canvas.SelectedItems.SetSelection(); if (selectedElement != null) { IModelElementRepresentant r = tab.xCaseDrawComponent.Canvas.ElementRepresentations[selectedElement]; if (r != null && r is ISelectable) { tab.xCaseDrawComponent.Canvas.SelectedItems.SetSelection((ISelectable)r); } } MainWindow.InvokeActiveDiagramChanged(tab); }
/// <summary> /// Activates a diagram /// </summary> /// <param name="diagram">Diagram to be activated</param> public PanelWindow ActivateDiagram(Diagram diagram) { PanelWindow Tab = FindTab(diagram); if (Tab == null) { if (diagram is PSMDiagram) { View.TreeLayout.SwitchOff(); } Tab = AddTab(diagram); MainWindow.propertiesWindow.BindDiagram(ref MainWindow.dockManager); } else { dockManager.ActiveDocument = Tab; Tab.xCaseDrawComponent.Canvas.SelectedItems.CollectionChanged += SelectedItems_CollectionChanged; } Tab.BringDocumentHeaderToView(); return(Tab); }
//public void DrawPSMExample(int x, int y) //{ // PIM_Class clPurchase, clCustomer1, clCustomer2, clShop, // clDealer, clItem, clAddress, clProduct, clRegion; // XCaseAttributeContainer acCustomer1, acCustomer2, // acAddress, acRegion, acProduct, acItem; // XCaseAssociationChoice asc1, asc2; // XCaseAssociationContainer ascoItems; // List<string> prPurchase = new List<string>() { "date" }, // prShop = new List<string>() { "shop-number" }, // prDealer = new List<string>() { "dealer-number" }, // prProduct = new List<string>() { "product-number" }, // atCustomer1 = new List<string>() { "customer-number" }, // atCustomer2 = new List<string>() { "name", "email" }, // atAddress = new List<string>() { "street", "postcode", "city" }, // atRegion = new List<string>() { "name AS region" }, // atProduct = new List<string>() { "unit-price", "title" }, // atItem = new List<string>() { "amount" }; // clPurchase = AddClass("Purchase", null, "purchase", prPurchase, null, 364 + x, 65 + y); // clCustomer1 = AddClass("Customer", null, null, null, null, 51 + x, 256 + y); // clCustomer2 = AddClass("Customer", null, "new-customer", null, null, 172 + x, 239 + y); // clShop = AddClass("Shop", null, "from-shop", prShop, null, 309 + x, 254 + y); // clDealer = AddClass("Dealer", null, "from-dealer", prDealer, null, 430 + x, 229 + y); // clItem = AddClass("Item", null, "item", null, null, 561 + x, 273 + y); // clAddress = AddClass("Address", null, "delivery-address", null, null, 262 + x, 352 + y); // clProduct = AddClass("Product", null, null, prProduct, null, 443 + x, 379 + y); // clRegion = AddClass("Region", null, null, null, null, 344 + x, 460 + y); // acCustomer1 = AddAttributeContainer(atCustomer1, 36 + x, 320 + y); // acCustomer2 = AddAttributeContainer(atCustomer2, 153 + x, 332 + y); // acAddress = AddAttributeContainer(atAddress, 193 + x, 434 + y); // acRegion = AddAttributeContainer(atRegion, 353 + x, 515 + y); // acProduct = AddAttributeContainer(atProduct, 468 + x, 455 + y); // acItem = AddAttributeContainer(atItem, 586 + x, 364 + y); // ascoItems = AddAssociationContainer("items", 532 + x, 147 + y); // asc1 = AddAssociationChoice(150 + x, 150 + y); // asc2 = AddAssociationChoice(395 + x, 150 + y); // AddAssociation(clPurchase, asc1); // AddAssociation(asc1, clCustomer1, EJunctionCapStyle.Straight, EJunctionCapStyle.FullArrow, "buyer", "0..*", "1"); // AddAssociation(asc1, clCustomer2, EJunctionCapStyle.Straight, EJunctionCapStyle.FullArrow, "buyer", "0..*", "1"); // AddAssociation(clCustomer1, acCustomer1); // AddAssociation(clCustomer2, acCustomer2); // AddAssociation(clCustomer2, clAddress, EJunctionCapStyle.Straight, EJunctionCapStyle.FullArrow, "deliver to", "0..1", "0..1"); // AddAssociation(clAddress, acAddress); // AddAssociation(clAddress, clRegion, EJunctionCapStyle.Straight, EJunctionCapStyle.FullArrow, "in", "0..*", "1"); // AddAssociation(clRegion, acRegion); // AddAssociation(clPurchase, asc2); // AddAssociation(asc2, clShop, EJunctionCapStyle.Straight, EJunctionCapStyle.FullArrow, "from shop", "0..*", "1"); // AddAssociation(asc2, clDealer, EJunctionCapStyle.Straight, EJunctionCapStyle.FullArrow, "from dealer", "0..*", "1"); // AddAssociation(clPurchase, ascoItems); // AddAssociation(ascoItems, clItem, EJunctionCapStyle.Straight, EJunctionCapStyle.FullArrow, "<<ordered>>\ncontained in", "1", "1..*"); // AddAssociation(clItem, clProduct, EJunctionCapStyle.Straight, EJunctionCapStyle.FullArrow, "purchases", "0..*", "1"); // AddAssociation(clProduct, acProduct); // AddAssociation(clItem, acItem); //} #endregion public void DrawPIMPSMExample() { // prepare simple PIM diagram to start with RepresentationCollection ModelViewMap = xCaseDrawComponent.Canvas.ElementRepresentations; CreationResult <Class, ClassViewHelper> classCreationResult = DiagramController.NewClass("Region", 100, 10); Class clRegion = classCreationResult.ModelElement; PIM_Class clRegionView = (PIM_Class)ModelViewMap[clRegion]; classCreationResult = DiagramController.NewClass("Address", 35, 189); Class clAddress = classCreationResult.ModelElement; PIM_Class clAddressView = (PIM_Class)ModelViewMap[classCreationResult.ModelElement]; Dictionary <PIM_Class, List <string> > properties = new Dictionary <PIM_Class, List <string> >(); properties[clRegionView] = new List <string> { "name", "code" }; properties[clAddressView] = new List <string> { "street", "postcode", "city" }; foreach (KeyValuePair <PIM_Class, List <string> > keyValuePair in properties) { foreach (string attribute in keyValuePair.Value) { keyValuePair.Key.ClassController.AddNewAttribute(attribute); } } CreationResult <Association, AssociationViewHelper> associationCreationResult = DiagramController.NewAssociation("in", (Class)clRegionView.ModelElement, (Class)clAddressView.ModelElement); PIM_Association aRegionAdress = (PIM_Association)ModelViewMap[associationCreationResult.ModelElement]; aRegionAdress.Controller.ChangeMultiplicity(aRegionAdress.Ends[0], "1"); aRegionAdress.Controller.ChangeMultiplicity(aRegionAdress.Ends[1], "0..*"); // derive PSM diagram PSMClass psmRegion = clRegionView.ClassController.DerivePSMClassToNewDiagram(); PanelWindow p = (PanelWindow)Manager.Documents.Last(); XCaseCanvas psmDiagramView = p.xCaseDrawComponent.Canvas; //ManageAttributesMacroCommand c = (ManageAttributesMacroCommand)ManageAttributesMacroCommandFactory.Factory().Create(psmDiagramView.Controller); PSM_Class psmRegionView = (PSM_Class)psmDiagramView.ElementRepresentations[psmRegion]; //((PSM_ClassController)psmRegionView.Controller).IncludeAttributes(new Dictionary<Property, string> { {clRegion.Attributes[0], "RegionName"}, {clRegion.Attributes[1], "RegionCode"} }); ViewController.MoveElement(200, 20, psmRegionView.ViewHelper, DiagramController); // add an attribute container NewPSMAttributeContainerCommand attrib = (NewPSMAttributeContainerCommand)NewPSMAttributeContainerCommandFactory.Factory().Create(psmDiagramView.Controller); attrib.PSMAttributes.Add(psmRegion.PSMAttributes[0]); attrib.PSMClass = psmRegion; attrib.ViewHelper = new PSMElementViewHelper(Diagram) { X = 100, Y = 100 }; attrib.Execute(); NewPSMAttributeContainerCommand attrib2 = (NewPSMAttributeContainerCommand)NewPSMAttributeContainerCommandFactory.Factory().Create(psmDiagramView.Controller); attrib2.PSMAttributes.Add(psmRegion.PSMAttributes[0]); attrib2.PSMClass = psmRegion; attrib2.ViewHelper = new PSMElementViewHelper(Diagram) { X = 280, Y = 100 }; attrib2.Execute(); AddPSMChildrenMacroCommand command = (AddPSMChildrenMacroCommand)AddPSMChildrenMacroCommandFactory.Factory().Create(psmDiagramView.Controller); command.Set(psmRegion); command.Execute(); }
/// <summary> /// Handles diagram renaming event invoked by Projects window /// </summary> internal void DiagramRenameHandler(object sender, DiagramRenameArgs arg) { PanelWindow tab = FindTab(arg.Diagram); tab.RenameDiagram(arg.NewCaption); }