コード例 #1
0
 /// <summary>
 /// 指定した RestorePropertiesAttribute に従って
 /// 指定したオブジェクトのプロパティの値を復元します。
 /// </summary>
 /// <param name="obj">復元するオブジェクトを指定します。</param>
 /// <param name="k">復元に使用する昔の情報を持つ SettingKey を指定します。</param>
 /// <param name="attrs">どのプロパティを復元するかの情報を指定します。</param>
 private static void Restore(object obj, SettingKey k, RestorePropertiesAttribute[] attrs)
 {
     foreach (RestorePropertiesAttribute attr in attrs)
     {
         foreach (string prop in attr.props)
         {
             if (prop.IndexOf(">") >= 0)
             {
                 string[] prop2 = prop.Split(new char[] { '>' }, 2);
                 if (!k.Var.HasVariable(prop2[0]))
                 {
                     continue;
                 }
                 SetValue(obj, prop2[1], k.Var[prop2[0]]);
             }
             else
             {
                 if (!k.Var.HasVariable(prop))
                 {
                     continue;
                 }
                 SetValue(obj, prop, k.Var[prop]);
             }
         }
     }
 }
コード例 #2
0
        /// <summary>
        /// 指定したオブジェクトの型に設定された RestorePropertiesAttribute に従って
        /// プロパティの値を保存します。
        /// </summary>
        /// <param name="obj">保存するオブジェクトを指定します。</param>
        /// <param name="k">現在の状態の保存先である SettingKey を指定します。</param>
        private static void Save(object obj, SettingKey k)
        {
            System.Type t = obj.GetType();
            RestorePropertiesAttribute[] attrs
                = (RestorePropertiesAttribute[])t.GetCustomAttributes(typeof(RestorePropertiesAttribute), true);
            if (attrs.Length == 0)
            {
                return;
            }
            //--obj 自体の保存
            Save(obj, k, attrs);
            //--Field の保存
            object field; SettingKey kf;

            foreach (System.Reflection.FieldInfo f in t.GetFields(BF_FIELD))
            {
                attrs = (RestorePropertiesAttribute[])f.GetCustomAttributes(typeof(RestorePropertiesAttribute), true);
                if (attrs.Length == 0)
                {
                    continue;
                }
                //--準備
                field = f.GetValue(obj); kf = k["F", f.Name];
                //--復元
                Save(field, kf, attrs);
                if (attrs[0].traceField)
                {
                    Save(field, kf);
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// 指定した RestorePropertiesAttribute に従って
        /// 指定したオブジェクトのプロパティの値を保存します。
        /// </summary>
        /// <param name="obj">保存するオブジェクトを指定します。</param>
        /// <param name="k">現在の状態の保存先である SettingKey を指定します。</param>
        /// <param name="attrs">どのプロパティを保存するかの情報を指定します。</param>
        private static void Save(object obj, SettingKey k, RestorePropertiesAttribute[] attrs)
        {
            int i; string prop2;

            foreach (RestorePropertiesAttribute attr in attrs)
            {
                foreach (string prop in attr.props)
                {
                    i            = prop.IndexOf(">");
                    prop2        = i < 0?prop:prop.Substring(0, i);
                    k.Var[prop2] = GetValue(obj, prop2);
                }
            }
        }
コード例 #4
0
 /// <summary>
 /// 名前を指定して SettingKey を取得します。
 /// 対応する XML 要素がなかった場合は新しく要素を作成します。
 /// </summary>
 public SettingKey this[string name] {
     get{
         foreach (System.Xml.XmlElement e in this.list)
         {
             if (e.GetAttribute("name", Setting.XMLNS_KEY) == name)
             {
                 return(new SettingKey(e));
             }
         }
         SettingKey r = new SettingKey(this.p, this.cls, name);
         this.list = this.p.GetElementsByTagName(this.cls);
         return(r);
     }
 }
コード例 #5
0
        /// <summary>
        /// 指定したパスの SettingKey を取得します
        /// </summary>
        /// <param name="names">パスの [それぞれの階層の名前を表す文字列] の配列を指定します。
        /// クラスを指定する際には "&lt;" と "&gt;" で囲んで名前の前に指定します</param>
        /// <param name="index">次に検索する名前</param>
        /// <returns>パスによって指定される SettingKey を返します。
        /// 既存でない場合は新しく作成して返します。</returns>
        private SettingKey GetKey(string[] names, int index)
        {
            string cls  = DEFAULT_CLASS;
            string name = names[index];

            if (name.StartsWith("<"))
            {
                int i = name.IndexOf(">");
                if (i > 0)
                {
                    cls  = name.Substring(1, i - 1);
                    name = name.Substring(i + 1);
                }
            }
            SettingKey r = this[cls, name];

            if (++index == names.Length)
            {
                return(r);
            }
            return(r.GetKey(names, index));
        }
コード例 #6
0
            private void Initialize(System.Windows.Forms.Form form, string id, bool savesize)
            {
                if (form == null)
                {
                    throw new System.ArgumentNullException("form");
                }
                this.form              = form;
                this.form.Load        += new System.EventHandler(form_Load);
                this.form.FormClosing += new System.Windows.Forms.FormClosingEventHandler(form_FormClosing);

                string name = this.form.GetType().ToString();

                if (id != null)
                {
                    name += ':' + id;
                }
                this.key = Setting.Root[SETTINGKEY_NAME]["T", name];

                if (this.savesize = savesize)
                {
                    this.form.SizeChanged     += new System.EventHandler(form_SizeChanged);
                    this.form.LocationChanged += new System.EventHandler(form_LocationChanged);
                }
            }
コード例 #7
0
 //===========================================================
 //		操作
 //===========================================================
 static Setting()
 {
     Setting.root = new SettingKey(Setting.xdoc.DocumentElement);
 }
コード例 #8
0
 /// <summary>
 /// VarCollection のコンストラクタ。
 /// </summary>
 /// <param name="p">対応する SettingKey を指定します。</param>
 internal VarCollection(SettingKey p)
 {
     this.p = p;
 }