Exemplo n.º 1
0
 private void OnBridgeCallBack(IPanelBase panel, object data)
 {
     if (onCallBack != null)
     {
         onCallBack.Invoke(panel, data);
     }
 }
Exemplo n.º 2
0
 /// <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);
                 }
             }
         }
     }
 }
Exemplo n.º 3
0
 private void OnCreatePanel(IPanelBase panel)
 {
     if (onCreate != null)
     {
         onCreate.Invoke(panel);
     }
 }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
 private void OnRemoveChild(IPanelBase childPanel)
 {
     if (childPanels != null && childPanels.Contains(childPanel))
     {
         childPanels.Remove(childPanel);
     }
 }
Exemplo n.º 6
0
        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();
            }
        }
Exemplo n.º 7
0
        /// <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);
        }
Exemplo n.º 8
0
 /// <summary>
 /// 建立遮罩
 /// </summary>
 /// <param name="panel"></param>
 /// <param name="info"></param>
 private void TryMakeCover(IPanelBase panel, BridgeInfo info)
 {
     if (info.showModel.cover)
     {
         panel.Cover();
     }
 }
Exemplo n.º 9
0
        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];
            }
        }
Exemplo n.º 10
0
 /// <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);
 }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        /// <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);
        }
Exemplo n.º 13
0
        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);
     }
 }
Exemplo n.º 15
0
        internal Bridge Allocate(IPanelBase parentPanel = null)
        {
            var bridge = innerPool.Allocate();

            bridge.Reset(parentPanel);
            return(bridge);
        }
Exemplo n.º 16
0
        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);
     }
 }
Exemplo n.º 18
0
 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);
 }
Exemplo n.º 19
0
        private void OnCloseCallBack(IPanelBase panel)
        {
            var array = onClose.ToArray();

            foreach (var item in array)
            {
                item.Invoke(panel);
            }
        }
Exemplo n.º 20
0
        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();
            }
        }
Exemplo n.º 22
0
        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);
        }
Exemplo n.º 24
0
        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);
        }
Exemplo n.º 26
0
 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;
 }
Exemplo n.º 27
0
 /// <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);
 }
Exemplo n.º 28
0
        /// <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);
                }
            }
        }
Exemplo n.º 29
0
        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());
        }
Exemplo n.º 30
0
 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));
     }
 }