/// <summary> /// 状态编辑时点击确认 /// </summary> public void Update_Name() { if (name_TextBox.Text == null || name_TextBox.Text.Length == 0) { ResourceManager.mainWindowVM.Tips = "需要给出状态名称!"; return; } // 【注意】区分“状态机”和“访问控制” SidePanel_VM sidePanel_VM = ResourceManager.mainWindowVM.SelectedItem.SelectedItem.SelectedItem; if (sidePanel_VM is ProcessToSM_P_VM) // “状态机” { // 检查状态名称独一无二 ProcessToSM_P_VM processToSM_P_VM = (ProcessToSM_P_VM)ResourceManager.mainWindowVM.SelectedItem.SelectedItem.SelectedItem; StateMachine_P_VM stateMachine_P_VM = processToSM_P_VM.SelectedItem; if (!Checker.checkStateName(stateMachine_P_VM, VM.State, name_TextBox.Text)) { ResourceManager.mainWindowVM.Tips = "不可用的名称,与其它状态重名!"; return; } VM.State.Name = name_TextBox.Text; ResourceManager.mainWindowVM.Tips = "为状态设置了名称:" + VM.State.Name; } else if (sidePanel_VM is AccessControl_P_VM) // “访问控制” { // 不检查状态名是否独一无二 VM.State.Name = name_TextBox.Text; ResourceManager.mainWindowVM.Tips = "为状态设置了名称:" + VM.State.Name; } // 关闭窗口 this.Close(); }
// 关闭窗体 private void close_event(object sender, CancelEventArgs e) { // 【注意】区分“状态机”和“访问控制” SidePanel_VM sidePanel_VM = ResourceManager.mainWindowVM.SelectedItem.SelectedItem.SelectedItem; if (sidePanel_VM is ProcessToSM_P_VM) // “状态机” { ProcessToSM_P_VM processToSM_P_VM = (ProcessToSM_P_VM)sidePanel_VM; StateMachine_P_VM stateMachineP_VM = processToSM_P_VM.SelectedItem; stateMachineP_VM.PanelEnabled = true; } else if (sidePanel_VM is AccessControl_P_VM) // “访问控制” { AccessControl_P_VM accessControl_P_VM = (AccessControl_P_VM)sidePanel_VM; accessControl_P_VM.PanelEnabled = true; } }
// 鼠标按下 protected override void OnPointerPressed(PointerPressedEventArgs e) { base.OnPointerPressed(e); // 【注意】区分“状态机”和“访问控制” SidePanel_VM sidePanel_VM = ResourceManager.mainWindowVM.SelectedItem.SelectedItem.SelectedItem; if (sidePanel_VM is ProcessToSM_P_VM) // “状态机” { StateMachine_P_VM nowSMPVM = ((ProcessToSM_P_VM)sidePanel_VM).SelectedItem; // 如果有连线,那么要做的是删除连线 if (ConnectorVM.ConnectionVM != null) { nowSMPVM.BreakTransitionVM(ConnectorVM); ResourceManager.mainWindowVM.Tips = "删除了转移关系"; } // 如果已经是活动锚点,要清除活动状态 else if (nowSMPVM.ActiveConnector == ConnectorVM) // 也可用ConnectorVM.IsActive { ConnectorVM.IsActive = false; nowSMPVM.ActiveConnector = null; ResourceManager.mainWindowVM.Tips = "清除了锚点的预连线状态"; } // 否则,即是空闲锚点 // 如果还没有活动锚点,设置其为活动锚点 else if (nowSMPVM.ActiveConnector == null) { nowSMPVM.ActiveConnector = ConnectorVM; ConnectorVM.IsActive = true; ResourceManager.mainWindowVM.Tips = "设置锚点为预连线锚点"; } // 至此,说明已经有一个活动锚点了,且当前锚点是另一个空闲锚点,这时要从活动锚点连线到此锚点 else { nowSMPVM.CreateTransitionVM(nowSMPVM.ActiveConnector, ConnectorVM); // 清除活动锚点 nowSMPVM.ActiveConnector.IsActive = false; nowSMPVM.ActiveConnector = null; } e.Handled = true; } else if (sidePanel_VM is AccessControl_P_VM) // “访问控制” { AccessControl_P_VM nowSMPVM = (AccessControl_P_VM)sidePanel_VM; // 如果有连线,那么要做的是删除连线 if (ConnectorVM.ConnectionVM != null) { nowSMPVM.BreakTransitionVM(ConnectorVM); ResourceManager.mainWindowVM.Tips = "删除了转移关系"; } // 如果已经是活动锚点,要清除活动状态 else if (nowSMPVM.ActiveConnector == ConnectorVM) // 也可用ConnectorVM.IsActive { ConnectorVM.IsActive = false; nowSMPVM.ActiveConnector = null; ResourceManager.mainWindowVM.Tips = "清除了锚点的预连线状态"; } // 否则,即是空闲锚点 // 如果还没有活动锚点,设置其为活动锚点 else if (nowSMPVM.ActiveConnector == null) { nowSMPVM.ActiveConnector = ConnectorVM; ConnectorVM.IsActive = true; ResourceManager.mainWindowVM.Tips = "设置锚点为预连线锚点"; } // 至此,说明已经有一个活动锚点了,且当前锚点是另一个空闲锚点,这时要从活动锚点连线到此锚点 else { nowSMPVM.CreateTransitionVM(nowSMPVM.ActiveConnector, ConnectorVM); // 清除活动锚点 nowSMPVM.ActiveConnector.IsActive = false; nowSMPVM.ActiveConnector = null; } e.Handled = true; } }
/// <summary> /// 删除指定面板上指定的建模元素 /// </summary> /// <param name="networkItem_VM">要删除的建模元素</param> /// <param name="sidePanel_VM">指定的面板</param> public static void deleteAndClearNetworkItemVM(NetworkItem_VM networkItem_VM, SidePanel_VM sidePanel_VM) { // 清理其锚点上的所有连线 foreach (Connector_VM connector_VM in networkItem_VM.ConnectorVMs) { if (connector_VM is null) { continue; } Connection_VM connection_VM = connector_VM.ConnectionVM; if (connection_VM is null) { continue; } if (connection_VM.Source == connector_VM) { connection_VM.Dest.ConnectionVM = null; } else { connection_VM.Source.ConnectionVM = null; } sidePanel_VM.UserControlVMs.Remove(connection_VM); } // 从面板中删除该建模元素 sidePanel_VM.UserControlVMs.Remove(networkItem_VM); }