Пример #1
0
 public RNavigatorButton(int depth, NAV_DIRECTION direction)
 {
     Depth = depth;
     Direction = direction;
 }
Пример #2
0
 //public void NavigatorSetPointer(PBaseObject obj)
 //{
 //    _navigator.Pointer = obj;
 //}
 // int level
 //public IPBaseObject Navigate(PModelObjectNavigatorPathLevel level, NAV_DIRECTION dir)
 //{
 //    return _navigator.Navigate(level, dir);
 //}
 public IPBaseObject Navigate(int depth, NAV_DIRECTION direction)
 {
     if (_navigator == null)
         throw new Exception("Попытка выполнить относительную навигацию без полной (Navigate(string))");
     return _navigator.Navigate(depth, direction);
 }
Пример #3
0
        //public PBaseObject Navigate(int depth, NAV_DIRECTION direction)
        //{
        //    if (_owner == null)
        //        throw new Exception("Текущий объект не задан");
        //    PBaseObject obj = Pointer;
        //    // есть уровень?
        //    if (depth < _levels.Count())
        //    {
        //        // навигация в текущем уровне?
        //        if (Pointer._ownerCollection.Name == _levels[depth])
        //        {
        //            int index = Pointer._ownerCollection.IndexOf(Pointer);
        //            if (index != -1)
        //            {
        //                if (direction == NAV_DIRECTION.DOWN)
        //                {
        //                    // можно вниз?
        //                    if (index < Pointer._ownerCollection.Count() - 1)
        //                    {
        //                        _positionInLevel[depth] = _positionInLevel[depth] + 1;
        //                    }
        //                }
        //                else {
        //                    // можно вверх?
        //                    if (index > 0) {
        //                        _positionInLevel[depth] = _positionInLevel[depth] + 1;
        //                    }
        //                }
        //                obj = Pointer._ownerCollection.GetObject(_positionInLevel[depth]);
        //            }
        //        }
        //        else
        //        {
        //            PCollection collection = _owner.GetCollection(_levels[depth], true)
        //            if (collection != null)
        //            {
        //                if (direction == NAV_DIRECTION.DOWN)
        //                {
        //                }
        //            }
        //        }
        //    }
        //    Pointer = obj;
        //    return obj;
        //}
        //public PBaseObject Navigate(string level, NAV_DIRECTION dir)
        //{
        //    if (_owner == null)
        //        throw new Exception("Текущий объект не задан");
        //    int cnt = _indexOf(level) + 1;
        //    int[] newPath = new int[cnt];
        //    for (int ii = 0; ii < cnt; ii++)
        //    {
        //        newPath[ii] = Levels[ii].Index;
        //    }
        //    if (_tryGetNewPath(ref newPath, dir))
        //    {
        //        for (int ii = 0; ii < Levels.Count(); ii++)
        //        {
        //            Levels[ii].Index = (ii < cnt) ? newPath[ii] : 0;
        //        }
        //        return _updatePointer();
        //    }
        //    else
        //    {
        //        return Pointer;
        //    }
        //}
        private bool _tryGetNewPath(ref List<int> path, NAV_DIRECTION dir)
        {
            for (int ii = path.Count() - 1; ii >= 0; ii--)
            {
                path[ii] += (dir == NAV_DIRECTION.UP) ? -1 : 1;
                if (_validatePath(path, ii))
                {
                    return true;
                }
                else
                {
                    path[ii] = (dir == NAV_DIRECTION.UP) ? -1 : 0;
                }
            }

            return false;
        }
Пример #4
0
        //public PBaseObject Navigate(int depth, NAV_DIRECTION dir)
        //{
        //    if (_owner == null)
        //        throw new Exception("Текущий объект не задан");
        //    int cnt = depth + 1;
        //    if (cnt > _levels.Count)
        //        throw new Exception("Задана глубина больше чем уровней в навигаторе");
        //    List<int> newPath = new List<int>();
        //    for (int ii = 0; ii < cnt; ii++ )
        //    {
        //        newPath.Add(_positionInLevel[ii]);
        //    }
        //    //_positionInLevel.ToList();
        //    if (_tryGetNewPath(ref newPath, dir))
        //    {
        //        for (int ii = 0; ii < _levels.Count(); ii++)
        //        {
        //            _positionInLevel[ii] = (ii < cnt) ? newPath[ii] : 0;
        //        }
        //        //_positionInLevel = newPath;
        //        //for (int ii = 0; ii < _levels.Count(); ii++)
        //        //{
        //        //    _positionInLevel[ii] = (ii < cnt) ? newPath[ii] : 0;
        //        //}
        //        _updatePointer();
        //        return Pointer;
        //    }
        //    else
        //    {
        //        return Pointer;
        //    }
        //}
        public PBaseObject Navigate(int depth, NAV_DIRECTION dir)
        {
            if (_owner == null)
                throw new Exception("Текущий объект не задан");

            int cnt = depth + 1;

            if (cnt > _path.Parts.Count())
                throw new Exception("Задана глубина больше чем уровней в навигаторе");

            List<int> newPath = new List<int>();
            for (int ii = 0; ii < cnt; ii++)
            {
                newPath.Add(_path.Parts[ii].PositionInLevel);
            }

            if (_tryGetNewPath(ref newPath, dir))
            {
                for (int ii = 0; ii < _path.Parts.Count(); ii++)
                {
                    _path.Parts[ii].PositionInLevel = (ii < cnt) ? newPath[ii] : 0;
                }
                _updatePointer();

                return Pointer;
            }
            else
            {
                return Pointer;
            }
        }
Пример #5
0
        public IPObject Navigate(int depth, NAV_DIRECTION dir, bool overStep)
        {
            if (this._base == null)
                throw new Exception("Текущий объект не задан");

            if (depth >= this._path.Parts.Count())
                throw new Exception("Задана глубина больше чем уровней в навигаторе");

            List<int> newPath = new List<int>();
            for (int ii = 0; ii <= depth; ii++)
            {
                newPath.Add(this._path.Parts[ii].PositionInLevel);
            }

            if (_tryGetNewPath(ref newPath, dir, overStep))
            {
                int cnt = this._path.Parts.Count;
                for (int ii = 0; ii < cnt; ii++)
                {
                    _path.Parts[ii].PositionInLevel = (ii <= depth) ? newPath[ii] : 0;
                }
                this._path.Normalize(this._base);
                this.Pointer = this.GetObjectAtPathLevel(_path.Parts.Count-1, false);
                return Pointer;
            }
            else
            {
                if (this.OnNavigated != null)
                {
                    OnNavigated(this, new NavigatedEventArgs(this.Pointer, this.Pointer));
                }
                return null;
            }
        }
Пример #6
0
        private bool _navigate(RModelObjectNavigatorPathLevel level, NAV_DIRECTION dir)
        {
            if (this._current == null)
                throw new Exception("Текущий объект не задан");
            int cnt = _indexOf(level) + 1;
            int[] newPath = new int[cnt];
            for (int ii = 0; ii < cnt; ii++)
            {
                newPath[ii] = _levels[ii].Index;
            }

            if (_tryGetNewPath(ref newPath, dir))
            {
                for (int ii = 0; ii < _levels.Count(); ii++)
                {
                    _levels[ii].Index = (ii < cnt) ? newPath[ii] : 0;
                }
                _updatePointer();
                return true;
            }
            else
            {
                return false;
            }
        }