private void OnBridgeCallBack(IPanelBase panel, object data) { if (onCallBack != null) { onCallBack.Invoke(panel, data); } }
/// <summary> /// 互斥面板自动隐藏 /// </summary> /// <param name="childPanel"></param> /// <param name=""></param> /// <param name="bridge"></param> private void TryHideMutexPanels(IPanelBase childPanel, BridgeInfo bridge) { if (bridge.showModel.mutex != MutexRule.NoMutex) { if (bridge.showModel.mutex == MutexRule.SameParentAndLayer) { var mayBridges = bridges.FindAll(x => x.inNode == bridge.inNode); foreach (var bg in mayBridges) { var mayPanels = createdPanels.FindAll(x => x.Name == bg.outNode && x.UType.layer == childPanel.UType.layer && x != childPanel && !IsChildOfPanel(childPanel, x)); foreach (var mayPanel in mayPanels) { if (mayPanel != null && mayPanel.IsShowing) { HidePanelInteral(childPanel, mayPanel); } } } } else if (bridge.showModel.mutex == MutexRule.SameLayer) { var mayPanels = createdPanels.FindAll(x => x.UType.layer == childPanel.UType.layer && x != childPanel && !IsChildOfPanel(childPanel, x)); foreach (var mayPanel in mayPanels) { if (mayPanel != null && mayPanel.IsShowing) { HidePanelInteral(childPanel, mayPanel); } } } } }
private void OnCreatePanel(IPanelBase panel) { if (onCreate != null) { onCreate.Invoke(panel); } }
public Bridge InstencePanel(IPanelBase parentPanel, string panelName, Transform root) { Bridge bridge = null; UIInfoBase uiNode = null; if (TryMatchPanel(parentPanel, panelName, out bridge, out uiNode)) { uiNode.OnCreate = (go) => { Utility.SetTranform(go.transform, uiNode.type.layer, uiNode.type.layerIndex, root == null ? Trans : root); go.SetActive(true); var panel = go.GetComponent <IPanelBase>(); if (panel != null) { createdPanels.Add(panel); if (parentPanel != null) { parentPanel.RecordChild(panel); } bridgeDic.Add(panel, bridge); InitPanel(panel, bridge, uiNode); HandBridgeOptions(panel, bridge); } }; creater.CreatePanel(uiNode); } return(bridge); }
private void OnRemoveChild(IPanelBase childPanel) { if (childPanels != null && childPanels.Contains(childPanel)) { childPanels.Remove(childPanel); } }
public NewObjectForm(IObjectController controller) { InitializeComponent(); rightNextButton.Click += nextButton_Click; middlePreviousButton.Click += previousButton_Click; leftCancelButton.Click += cancelButton_Click; middleCancelButton.Click += cancelButton_Click; rightFinishButton.Click += finishButton_Click; _controller = controller; objectSelectionPanel.Visible = true; featuresPanel.Visible = false; positionPanel.Visible = false; materialPanel.Visible = false; _currentPanel = objectSelectionPanel; _currentPanel.Controller = _controller; topLabel.Text = Properties.Strings.AddObjectMessageEmpty; SetController(); controller.UpdateModelFromUI = () => { ChooseOrder(); UpdateForModel(); materialPanel.UpdateFromModel(); }; ChooseOrder(); foreach (var panel in _order) { panel.UpdateFromModel(); } }
/// <summary> /// 找到信息源和bridge /// </summary> /// <param name="parentName"></param> /// <param name="panelName"></param> /// <param name="bridgeObj"></param> /// <param name="uiNode"></param> /// <returns></returns> private bool TryMatchPanel(IPanelBase parentPanel, string panelName, out Bridge bridgeObj, out UIInfoBase uiNode) { uiNode = Nodes.Find(x => x.panelName == panelName); if (uiNode != null)// && uiNode.type.form == UIFormType.Fixed { if (uiNode.type.form == UIFormType.Fixed) { var oldPanel = createdPanels.Find(x => x.Name == panelName); if (oldPanel != null) { bridgeObj = bridgeDic[oldPanel]; if (!oldPanel.IsShowing) { oldPanel.UnHide(); HandBridgeOptions(oldPanel, bridgeObj); } return(false); } } } if (uiNode == null) { bridgeObj = null; return(false); } bridgeObj = GetBridgeClamp(parentPanel, panelName); return(uiNode != null && bridgeObj != null); }
/// <summary> /// 建立遮罩 /// </summary> /// <param name="panel"></param> /// <param name="info"></param> private void TryMakeCover(IPanelBase panel, BridgeInfo info) { if (info.showModel.cover) { panel.Cover(); } }
private void MovePrevious() { var index = _order.FindIndex(control => control == _currentPanel); if (index == 1) { topLabel.Text = Properties.Strings.AddObjectMessageEmpty; middleCancelButton.Visible = true; leftCancelButton.Visible = false; middlePreviousButton.Visible = false; middleCancelButton.Focus(); } if (index == _order.Count - 1) { rightNextButton.Visible = true; rightFinishButton.Visible = false; middlePreviousButton.Focus(); } if (index > 0) { _order[index - 1].ShowPanel(); _order[index].HidePanel(); _currentPanel = _order[index - 1]; } }
/// <summary> /// 按规则设置面板及父亲面板的状态 /// </summary> /// <param name="panel"></param> /// <param name="root"></param> /// <param name="bridge"></param> private void InitPanel(IPanelBase panel, Bridge bridge, UIInfoBase uiNode) { panel.UType = uiNode.type; panel.Group = this; panel.onDelete += OnDeletePanel; panel.HandleData(bridge); }
public IUIHandle Open(IPanelBase parent, string panelName, object data = null) { var handle = handlePool.Allocate(panelName); var currentGroup = parent == null ? null : parent.Group; if (currentGroup != null)//限制性打开 { InternalOpen(parent, currentGroup, handle, panelName); } else { foreach (var group in groupList) { InternalOpen(parent, group, handle, panelName); } } if (data != null) { handle.Send(data); } return(handle); }
/// <summary> /// 获取可用的bridge /// </summary> /// <param name="parentName"></param> /// <param name="panelName"></param> /// <returns></returns> private Bridge GetBridgeClamp(IPanelBase parentPanel, string panelName) { Bridge bridge = null; var parentName = parentPanel == null ? "" : parentPanel.Name; var mayInfos = bridges.FindAll(x => x.outNode == panelName); var baseInfos = mayInfos.FindAll(x => x.inNode == parentName); BridgeInfo?bridgeInfo = null; if (baseInfos.Count > 0) { bridgeInfo = baseInfos[0]; } else { var usefulInfos = mayInfos.FindAll(x => string.IsNullOrEmpty(x.inNode)); if (usefulInfos.Count > 0) { bridgeInfo = usefulInfos[0]; } } if (bridgeInfo == null) { bridge = poolDic[defultBridge].Allocate(parentPanel); var show = new ShowMode(false, MutexRule.NoMutex, false, BaseShow.NoChange, false); bridge.Info = new BridgeInfo(parentName, panelName, show, 0); } else { bridge = poolDic[(BridgeInfo)bridgeInfo].Allocate(parentPanel); } return(bridge); }
private void MoveNext() { var index = _order.FindIndex(control => control == _currentPanel); if (index == 0) { leftCancelButton.Visible = true; middlePreviousButton.Visible = true; rightNextButton.Visible = true; middleCancelButton.Visible = false; rightNextButton.Focus(); } if (index == _order.Count - 2) { rightFinishButton.Visible = true; rightNextButton.Visible = false; rightFinishButton.Focus(); } if (index < _order.Count - 1) { _order[index + 1].ShowPanel(); _order[index].HidePanel(); _currentPanel = _order[index + 1]; } }
public void CallBack(IPanelBase panel, object data) { if (onCallBack != null) { onCallBack.Invoke(panel, data); } }
internal Bridge Allocate(IPanelBase parentPanel = null) { var bridge = innerPool.Allocate(); bridge.Reset(parentPanel); return(bridge); }
public IUIHandle Open(IPanelBase parent, string panelName, UnityAction <object> callBack, object data = null) { var handle = handlePool.Allocate(); var currentGroup = parent == null ? null : parent.Group; if (currentGroup != null)//限制性打开 { InternalOpen(parent, currentGroup, handle, panelName); } else { foreach (var group in groupList) { InternalOpen(parent, group, handle, panelName); } } if (callBack != null) { handle.RegistCallBack((x, y) => { callBack(y); }); } if (data != null) { handle.Send(data); } return(handle); }
internal void OnCreatePanel(IPanelBase panel) { OutPanel = panel; if (onCreate != null) { onCreate.Invoke(panel); } }
private void HandBridgeOptions(IPanelBase panel, Bridge bridge) { TryChangeParentState(panel, bridge.Info); TryHideMutexPanels(panel, bridge.Info); TryHideGroup(panel, bridge.Info); TryMakeCover(panel, bridge.Info); TryAutoOpen(panel.Content, panel); }
private void OnCloseCallBack(IPanelBase panel) { var array = onClose.ToArray(); foreach (var item in array) { item.Invoke(panel); } }
private void OnCreatePanel(IPanelBase panel) { var array = onCreate.ToArray(); foreach (var item in array) { item.Invoke(panel); } }
public void CloseRegistedPanel(IPanelBase panel, int key) { var bindingItem = FindBindingItem(panel.Name, key); if (bindingItem != null && bindingItem.closeAction != null) { bindingItem.closeAction.Invoke(); } }
private void OnBridgeCallBack(IPanelBase panel, object data) { var array = onCallBack.ToArray(); foreach (var item in array) { item.Invoke(panel, data); } }
public IUIHandle OpenRegistedPanel(IPanelBase panel, int key, object data = null) { var bindingItem = FindBindingItem(panel.Name, key); if (bindingItem != null && bindingItem.openAction != null) { return(bindingItem.openAction.Invoke(panel, data)); } return(null); }
private void InternalOpen(IPanelBase parentPanel, IPanelGroup group, IUIHandleInternal handle, string panelName) { var Content = parentPanel == null ? null : parentPanel.Content; Bridge bridgeObj = group.InstencePanel(parentPanel, panelName, Content); if (bridgeObj != null) { handle.RegistBridge(bridgeObj); } }
public bool IsRegistedPanelOpen(IPanelBase panel, int key) { var bindingItem = FindBindingItem(panel.Name, key); if (bindingItem != null) { return(bindingItem.isOpenAction.Invoke()); } return(false); }
public void RecordChild(IPanelBase childPanel) { if (childPanels == null) { childPanels = new List <IPanelBase>(); } if (!childPanels.Contains(childPanel)) { childPanel.onDelete += OnRemoveChild; childPanels.Add(childPanel); } childPanel.Parent = this; }
/// <summary> /// /// </summary> /// <param name="panel"></param> /// <param name="needHidePanel"></param> private void HidePanelInteral(IPanelBase panel, IPanelBase needHidePanel) { if (needHidePanel.IsShowing) { needHidePanel.Hide(); } if (!hidedPanelStack.ContainsKey(panel)) { hidedPanelStack[panel] = new Stack <IPanelBase>(); } //Debug.Log("push:" + needHidePanel); hidedPanelStack[panel].Push(needHidePanel); }
/// <summary> /// 自动打开子面板 /// </summary> /// <param name="panel"></param> private void TryAutoOpen(Transform content, IPanelBase parentPanel = null) { var panelName = parentPanel == null ? "" : parentPanel.Name; var autoBridges = bridges.FindAll(x => x.inNode == panelName && x.showModel.auto); if (autoBridges != null) { foreach (var autoBridge in autoBridges) { InstencePanel(parentPanel, autoBridge.outNode, content); } } }
public EditObjectForm(IObjectController controller) { InitializeComponent(); FormClosed += EditObjectForm_FormClosed; rightNextButton.Click += nextButton_Click; middlePreviousButton.Click += previousButton_Click; leftCancelButton.Click += cancelButton_Click; leftCancelButton.Text = "OK"; middleCancelButton.Click += cancelButton_Click; middleCancelButton.Text = "OK"; rightFinishButton.Click += finishButton_Click; _controller = controller; featuresPanel.Visible = false; positionPanel.Visible = false; materialPanel.Visible = false; var model = _controller.GetModel(); var featureTypes = new List <Type> { typeof(Cylinder), typeof(Rectangle), typeof(Cuboid) }; if (featureTypes.Contains(model.GetType())) { _order = new List <IPanelBase> { featuresPanel, positionPanel, materialPanel } } ; else { _order = new List <IPanelBase> { positionPanel, materialPanel } }; _currentPanel = _order[0]; _currentPanel.ShowPanel(); SetController(controller); foreach (var panel in _order) { panel.UpdateFromModel(); } topLabel.Text = String.Format(Properties.Strings.EditObjectMessage, _controller.GetModel().ToString().ToLower()); }
private bool IsChildOfPanel(IPanelBase current, IPanelBase target) { if (current.Parent == null) { return(false); } if (current.Parent == target) { return(true); } else { return(IsChildOfPanel(current.Parent, target)); } }