示例#1
0
        /// <summary>
        /// Checks if an existing identifier at the focus can be split in two.
        /// </summary>
        /// <param name="inner">Inner to use to split the identifier upon return.</param>
        /// <param name="replaceIndex">Index of the identifier to replace upon return.</param>
        /// <param name="insertIndex">Index of the identifier to insert upon return.</param>
        /// <returns>True if an identifier can be split at the focus.</returns>
        public virtual bool IsIdentifierSplittable(out IFocusListInner inner, out IFocusInsertionListNodeIndex replaceIndex, out IFocusInsertionListNodeIndex insertIndex)
        {
            inner        = null;
            replaceIndex = null;
            insertIndex  = null;

            bool IsSplittable = false;

            IFocusNodeState IdentifierState = Focus.CellView.StateView.State;

            if (IdentifierState.Node is Identifier AsIdentifier)
            {
                IFocusNodeState ParentState = IdentifierState.ParentState;
                if (ParentState.Node is QualifiedName)
                {
                    string Text = AsIdentifier.Text;
                    Debug.Assert(CaretPosition >= 0 && CaretPosition <= Text.Length);

                    inner = IdentifierState.ParentInner as IFocusListInner;
                    Debug.Assert(inner != null);

                    IFocusBrowsingListNodeIndex CurrentIndex = IdentifierState.ParentIndex as IFocusBrowsingListNodeIndex;
                    Debug.Assert(CurrentIndex != null);

                    Identifier FirstPart  = NodeHelper.CreateSimpleIdentifier(Text.Substring(0, CaretPosition));
                    Identifier SecondPart = NodeHelper.CreateSimpleIdentifier(Text.Substring(CaretPosition));

                    replaceIndex = CurrentIndex.ToInsertionIndex(ParentState.Node, FirstPart) as IFocusInsertionListNodeIndex;
                    Debug.Assert(replaceIndex != null);

                    insertIndex = CurrentIndex.ToInsertionIndex(ParentState.Node, SecondPart) as IFocusInsertionListNodeIndex;
                    Debug.Assert(insertIndex != null);

                    insertIndex.MoveUp();

                    IsSplittable = true;
                }
            }

            return(IsSplittable);
        }
 bool ICollection <IFocusBrowsingListNodeIndex> .Remove(IFocusBrowsingListNodeIndex item)
 {
     return(Remove((ILayoutBrowsingListNodeIndex)item));
 }
 bool ICollection <IFocusBrowsingListNodeIndex> .Contains(IFocusBrowsingListNodeIndex value)
 {
     return(Contains((ILayoutBrowsingListNodeIndex)value));
 }
 void ICollection <IFocusBrowsingListNodeIndex> .Add(IFocusBrowsingListNodeIndex item)
 {
     Add((ILayoutBrowsingListNodeIndex)item);
 }
 void IList <IFocusBrowsingListNodeIndex> .Insert(int index, IFocusBrowsingListNodeIndex item)
 {
     Insert(index, (ILayoutBrowsingListNodeIndex)item);
 }
 int IList <IFocusBrowsingListNodeIndex> .IndexOf(IFocusBrowsingListNodeIndex value)
 {
     return(IndexOf((ILayoutBrowsingListNodeIndex)value));
 }