/// <summary> /// 应用新状态的修改 /// </summary> /// <param name="newState">新状态</param> /// <param name="changeType">状态变换种类</param> /// <param name="isNeededKeyCheck"></param> /// <returns>应用是否成功</returns> protected bool Apply(MaskManagerState newState, StateChangeType changeType, bool isNeededKeyCheck) { if (!IsValid(newState)) { return(false); } if (newState.IsSame(CurrentState)) { return(false); } string editText = GetEditText(newState); if (!isNeededKeyCheck) { if (GetCurrentEditText() != editText) { if (!RaiseEditTextChanging(editText)) { return(false); } ApplyInternal(newState, changeType); base.RaiseEditTextChanged(); } else { ApplyInternal(newState, changeType); } } return(true); }
/// <summary> /// 记录状态及状态变换类别 /// </summary> /// <param name="newState"></param> /// <param name="changeType"></param> void ApplyInternal(MaskManagerState newState, StateChangeType changeType) { if (backupType != changeType) { if (changeType != StateChangeType.Terminator) { backupState = currentState; } backupType = changeType; } currentState = newState; }
/// <summary> /// 同步状态缓存 /// </summary> void VerifyCache() { if (!object.ReferenceEquals(cachedDState, CurrentState)) { cachedDState = CurrentState; // 光标位置 cachedDCP = -1; // 选中区域的起始位置 cachedDSA = -1; // 显示文本 cachedDT = null; } }
/// <summary> /// 撤消操作 /// </summary> /// <returns></returns> public override bool Undo() { if (!CanUndo) { return(false); } if (!RaiseEditTextChanging(GetEditText(backupState))) { return(false); } backupType = StateChangeType.Terminator; MaskManagerState currentState = this.currentState; currentState = backupState; backupState = currentState; base.RaiseEditTextChanged(); return(true); }
/// <summary> /// 根据给的掩码状态构造掩码员 /// </summary> /// <param name="initialState"></param> protected MaskManagerStated(MaskManagerState initialState) { SetInitialState(initialState); }
/// <summary> /// 是否有效 /// </summary> /// <param name="newState"></param> /// <returns></returns> protected virtual bool IsValid(MaskManagerState newState) { return(true); }
/// <summary> /// 选择区域的起始位置 /// </summary> /// <param name="state"></param> /// <returns></returns> protected abstract int GetSelectionAnchor(MaskManagerState state);
/// <summary> /// 获取给定掩码状态的显示文本 /// </summary> /// <param name="state"></param> /// <returns></returns> protected abstract string GetDisplayText(MaskManagerState state);
/// <summary> /// 根据掩码状态获取当前光标位置 /// </summary> /// <param name="state"></param> /// <returns></returns> protected abstract int GetCursorPosition(MaskManagerState state);
/// <summary> /// 根据掩码状态获取当前文本 /// </summary> /// <returns></returns> protected abstract string GetEditText(MaskManagerState state);
/// <summary> /// 根据掩码状态获取当前值 /// </summary> /// <returns></returns> protected abstract object GetEditValue(MaskManagerState state);
/// <summary> /// 应用新状态的修改 /// </summary> /// <param name="newState">新状态</param> /// <param name="changeType">状态变换种类</param> /// <returns>应用是否成功</returns> protected bool Apply(MaskManagerState newState, StateChangeType changeType) { return(Apply(newState, changeType, false)); }
/// <summary> /// 设置初始掩码状态 /// </summary> /// <param name="newState"></param> protected void SetInitialState(MaskManagerState newState) { backupState = null; currentState = newState; backupType = StateChangeType.Terminator; }
/// <summary> /// 比较掩码状态是否和当前状态相同 /// </summary> /// <param name="comparedState">掩码状态实例</param> /// <returns></returns> public abstract bool IsSame(MaskManagerState comparedState);
/// <summary> /// 比较掩码状态是否和当前状态相同 /// </summary> /// <param name="comparedState">掩码状态实例</param> /// <returns></returns> public override bool IsSame(MaskManagerState comparedState) { return((base.IsSame(comparedState) && (this.IsNegative == ((NumericMaskManagerState)comparedState).IsNegative)) && (this.IsNull == ((NumericMaskManagerState)comparedState).IsNull)); }