Пример #1
0
        /// -----------------------------------------------------------------------------------
        /// <summary>
        /// Handle typed character
        /// </summary>
        /// <param name="stuInput">input string</param>
        /// <param name="ss">Status of Shift/Control/Alt key</param>
        /// <param name="modifiers">key modifiers - shift status, etc.</param>
        /// -----------------------------------------------------------------------------------
        protected override void OnCharAux(string stuInput, VwShiftStatus ss, Keys modifiers)
        {
            if (string.IsNullOrEmpty(stuInput))
            {
                return;
            }

            SelectionHelper currSel = CurrentSelection;

            if (modifiers != Keys.Control && modifiers != Keys.Alt && currSel != null)
            {
                ITsTextProps ttpTop = currSel.GetSelProps(SelectionHelper.SelLimitType.Top);
                if (ttpTop != null)
                {
                    string sObjData = ttpTop.GetStrPropValue((int)FwTextPropType.ktptObjData);
                    string urlTop   = TsStringUtils.GetURL(sObjData);
                    if (urlTop != null)
                    {
                        ITsTextProps ttpBottom = currSel.GetSelProps(SelectionHelper.SelLimitType.Bottom);
                        if (ttpBottom != null)
                        {
                            sObjData = ttpBottom.GetStrPropValue((int)FwTextPropType.ktptObjData);
                            string urlBottom = TsStringUtils.GetURL(sObjData);
                            if (urlBottom != urlTop)
                            {
                                int          nVar;
                                ITsTextProps propsToUse = StyleUtils.CharStyleTextProps(null,
                                                                                        ttpTop.GetIntPropValues((int)FwTextPropType.ktptWs, out nVar));
                                currSel.Selection.SetTypingProps(propsToUse);
                            }
                            else if (stuInput[0] == (char)VwSpecialChars.kscDelForward ||
                                     stuInput[0] == (char)VwSpecialChars.kscBackspace)
                            {
                                if (currSel.IsRange)
                                {
                                    ITsTextProps ttpBefore = currSel.PropsBefore;
                                    string       urlBefore = (ttpBefore == null) ? null :
                                                             TsStringUtils.GetURL(ttpBefore.GetStrPropValue((int)FwTextPropType.ktptObjData));

                                    ITsTextProps ttpAfter = currSel.PropsAfter;
                                    string       urlAfter = (ttpAfter == null) ? null :
                                                            TsStringUtils.GetURL(ttpAfter.GetStrPropValue((int)FwTextPropType.ktptObjData));

                                    if (urlBefore != urlTop && urlAfter != urlTop)
                                    {
                                        int          nVar;
                                        ITsTextProps propsToUse = ttpBefore ?? StyleUtils.CharStyleTextProps(null,
                                                                                                             ttpTop.GetIntPropValues((int)FwTextPropType.ktptWs, out nVar));
                                        currSel.Selection.SetTypingProps(propsToUse);
                                    }
                                }
                            }
                            else if (!currSel.IsRange)
                            {
                                ITsTextProps ttpBefore = currSel.PropsBefore;
                                string       urlBefore = (ttpBefore == null) ? null :
                                                         TsStringUtils.GetURL(ttpBefore.GetStrPropValue((int)FwTextPropType.ktptObjData));
                                if (urlBefore != urlTop)
                                {
                                    int          nVar;
                                    ITsTextProps propsToUse = ttpBefore ?? StyleUtils.CharStyleTextProps(null,
                                                                                                         ttpTop.GetIntPropValues((int)FwTextPropType.ktptWs, out nVar));
                                    currSel.Selection.SetTypingProps(propsToUse);
                                }
                                else
                                {
                                    ITsTextProps ttpAfter = currSel.PropsAfter;
                                    string       urlAfter = (ttpAfter == null) ? null :
                                                            TsStringUtils.GetURL(ttpAfter.GetStrPropValue((int)FwTextPropType.ktptObjData));

                                    if (urlAfter != urlBottom)
                                    {
                                        int          nVar;
                                        ITsTextProps propsToUse = ttpAfter ?? StyleUtils.CharStyleTextProps(null,
                                                                                                            ttpTop.GetIntPropValues((int)FwTextPropType.ktptWs, out nVar));
                                        currSel.Selection.SetTypingProps(propsToUse);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            base.OnCharAux(stuInput, ss, modifiers);
        }