コード例 #1
0
 //ValidationErrorの通知
 internal void ValidationError(IPreferenceItemBase item, PreferenceValidationResult result)
 {
     if (_loading)            //ロード中のエラーは初期値に戻すだけ。どこかにWarningは出してもいいかもな
     {
         item.ResetValue();
     }
     else
     {
         throw new ValidationException(item, result.Clone());
     }
 }
コード例 #2
0
ファイル: PreferencesEx.cs プロジェクト: zhchlmm/EasyConnect
 /// <summary>
 /// <ja>
 /// 検証が失敗したときの例外を生成します。
 /// </ja>
 /// <en>
 /// The exception when the verification fails is generated.
 /// </en>
 /// </summary>
 /// <param name="source"><ja>例外の原因となったソースです。</ja><en>Source that causes exception</en></param>
 /// <param name="result"><ja>検証結果です。</ja><en>Verification result</en></param>
 public ValidationException(IPreferenceItemBase source, IPreferenceValidationResult result)
     : base(result.ErrorMessage)
 {
     _sourceItem = source;
     _result     = result;
 }
コード例 #3
0
        internal void LoadFrom(StructuredText node)
        {
            bool dirty       = false;
            int  child_index = 0;
            int  data_index  = 0;

            while (child_index < _children.Count)
            {
                IPreferenceItemBase   child     = (IPreferenceItemBase)_children[child_index];
                PreferenceFolder      ch_folder = child as PreferenceFolder;
                PreferenceFolderArray ch_array  = child as PreferenceFolderArray;
                PreferenceItem        ch_item   = child as PreferenceItem;
                PreferenceLooseNode   ch_loose  = child as PreferenceLooseNode;

                //TODO 以下の分岐汚すぎ、何とかする

                if (ch_folder != null)
                {
                    StructuredText ch_data = node.GetChildOrNull(data_index);                     //大抵はうまく整列しているので検索の手間を省く
                    if (ch_data == null || ch_data.Name != ch_folder.Id)
                    {
                        dirty   = true;
                        ch_data = node.FindChild(ch_folder.Id);
                    }
                    else
                    {
                        data_index++;
                    }

                    if (ch_data == null)
                    {
                        ch_folder.ResetValue();
                    }
                    else
                    {
                        ch_folder.LoadFrom(ch_data);
                    }
                }
                else if (ch_item != null)
                {
                    StructuredText.Entry ch_data = node.GetEntryOrNull(data_index);                     //大抵はうまく整列しているので検索の手間を省く
                    if (ch_data == null || ch_data.name != ch_item.Id)
                    {
                        dirty   = true;
                        ch_data = node.FindEntry(ch_item.Id);
                    }
                    else
                    {
                        data_index++;
                    }

                    if (ch_data == null)
                    {
                        ch_item.ResetValue();
                    }
                    else
                    {
                        ch_item.TryToParse(ch_data.value, PreferenceItem.ErrorMode.Reset);
                    }
                }
                else if (ch_array != null)
                {
                    ArrayList      ch_data = new ArrayList();
                    StructuredText t       = node.GetChildOrNull(data_index);
                    if (t == null || t.Name != ch_array.Id)
                    {
                        dirty = true;
                        ch_data.Clear();
                        ch_data.AddRange(node.FindMultipleNote(ch_array.Id));
                    }
                    else                       //最初の一つが合格だったら継続して読み続ける
                    {
                        data_index++;
                        while (t != null && t.Name == ch_array.Id)
                        {
                            ch_data.Add(t);
                            t = node.GetChildOrNull(data_index++);
                        }
                    }

                    ch_array.LoadFrom(ch_data);
                }
                else if (ch_loose != null)
                {
                    //TODO これはFolderのときと同じだ。まとめよう
                    StructuredText ch_data = node.GetChildOrNull(data_index);     //大抵はうまく整列しているので検索の手間を省く
                    if (ch_data == null || ch_data.Name != ch_loose.Id)
                    {
                        dirty   = true;
                        ch_data = node.FindChild(ch_loose.Id);
                    }
                    else
                    {
                        data_index++;
                    }

                    if (ch_data == null)
                    {
                        ch_loose.ResetValue();
                    }
                    else
                    {
                        ch_loose.LoadFrom(ch_data);
                    }
                }

                child_index++;                 //自分の子をステップ
            }

            //一度エラーなく読むことができていればdirtyはfalseのまま
            node.IsDirty = dirty;
        }
コード例 #4
0
        public IPreferenceItem FindItem(string id)
        {
            IPreferenceItemBase t = FindChild(id);

            return(t == null? null : t.AsItem());
        }
コード例 #5
0
        public IPreferenceFolderArray FindChildFolderArray(string id)
        {
            IPreferenceItemBase t = FindChild(id);

            return(t == null? null : t.AsFolderArray());
        }