Assembly.Metro.Controls.PageTemplates.Games.Components.MetaData.MetaReader.ReadReflexiveChildren C# (CSharp) Method

ReadReflexiveChildren() public method

public ReadReflexiveChildren ( Assembly.Metro.Controls.PageTemplates.Games.Components.MetaData.ReflexiveData reflexive ) : void
reflexive Assembly.Metro.Controls.PageTemplates.Games.Components.MetaData.ReflexiveData
return void
        public void ReadReflexiveChildren(ReflexiveData reflexive)
        {
            if (!reflexive.HasChildren || reflexive.CurrentIndex < 0)
                return;

            bool opened = OpenReader();
            if (_reader == null)
                return;

            try
            {
                // Calculate the base offset to read from
                uint oldBaseOffset = BaseOffset;
                uint dataOffset = reflexive.FirstEntryAddress;
                if (_type == LoadType.File)
                    dataOffset = (uint) _cache.MetaArea.PointerToOffset(dataOffset);
                BaseOffset = (uint) (dataOffset + reflexive.CurrentIndex*reflexive.EntrySize);

                ReflexivePage page = reflexive.Pages[reflexive.CurrentIndex];
                for (int i = 0; i < page.Fields.Length; i++)
                {
                    ReadField(page.Fields[i] ?? reflexive.Template[i]);
                }

                BaseOffset = oldBaseOffset;
            }
            finally
            {
                if (opened)
                    CloseReader();
            }
        }

Usage Example

Example #1
0
        private void ReflexivePropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            var reflexive = (ReflexiveData)sender;
            FlattenedReflexive flattenedField = _flattenInfo[reflexive];

            if (e.PropertyName == "IsExpanded")
            {
                if (reflexive.IsExpanded)
                {
                    flattenedField.Expand();
                }
                else
                {
                    flattenedField.Contract();
                }
            }
            else if (!_loading &&
                     (e.PropertyName == "CurrentIndex" || e.PropertyName == "FirstEntryAddress" || e.PropertyName == "EntrySize"))
            {
                _loading         = true;
                _tracker.Enabled = false;

                if (e.PropertyName == "FirstEntryAddress")
                {
                    // Throw out any cached changes and reset the current index
                    RecursiveReset(flattenedField.LoadedFields);
                    if (reflexive.Length > 0)
                    {
                        reflexive.CurrentIndex = 0;
                    }
                    else
                    {
                        reflexive.CurrentIndex = -1;
                    }
                }
                else
                {
                    // Cache any changes made to the current page
                    RecursiveUnload(flattenedField.LoadedFields);
                }

                // Load the new page in
                flattenedField.LoadPage(reflexive, reflexive.CurrentIndex);

                // Read any non-cached fields in the page
                _reader.ReadReflexiveChildren(reflexive);
                RecursiveLoad(flattenedField.LoadedFields);

                _tracker.Enabled = true;
                _loading         = false;
            }
        }