Ejemplo n.º 1
0
        public ExplorerViewModel(Profile <FI, DI, FSI> profile)
        {
            _profile = profile;

            var notificationSources = from m in _profile.GetNotificationSources() select m.ToViewModel();

            _notificationViewModel = new NotificationBarViewModel(notificationSources.ToArray());

            _navigationViewModel     = new NavigationRootViewModel <FI, DI, FSI>(_profile);
            _currentBrowserViewModel =
                new DirectoryViewerViewModel <FI, DI, FSI>(_profile, _viewSize);
            _breadcrumbViewModel = new BreadcrumbViewModel <FI, DI, FSI>(_profile, this);
            _searchViewModel     = new SearchViewModel <FI, DI, FSI>(_profile);

            _navigationViewModel.DirectoryChanged += dirChangedHandler;

            if (CurrentEntryBrowserViewModel != null)
            {
                CurrentEntryBrowserViewModel.DirectoryChanged += dirChangedHandler;
            }
            _breadcrumbViewModel.DirectoryChanged += dirChangedHandler;
            _searchViewModel.DirectoryChanged     += dirChangedHandler;

            ChangeCurrentBrowserViewModel(_profile.ConstructDirectoryModel(profile.RootDirectories[0]));


            setupCommands();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Subdir can only initalized after an TreeViewItem called SubDirectories
        /// </summary>
        private void setupSubdir()
        {
            if (EmbeddedDirectoryModel == null)
            {
                return;
            }

            if (!_isDirectory || EmbeddedDirectoryModel.IsLink)
            {
                _subDirectories = new AsyncObservableCollection <NavigationItemViewModel <FI, DI, FSI> >();
            }
            else
            {
                bool bountyPlaced = false;
                DirectoryModel <FI, DI, FSI> bounty = null;
                _subDirectories = new AsyncObservableCollection <NavigationItemViewModel <FI, DI, FSI> >
                                  (
                    DispatcherPriority.Background,
                    from item in (_embeddedDirectoryModel.GetSubEntries(true, "*", true, false))
                    select new NavigationItemViewModel <FI, DI, FSI>(_rootModel, this,
                                                                     item as DirectoryModel <FI, DI, FSI>)
                {
                    IsSubItem = true
                },
                    //task Func
                    () =>
                {
                    if (_subDirectories.Contains(dummyNode))
                    {
                        _subDirectories.Clear();
                    }
                    bountyPlaced = false;
                    bounty       = _rootModel.Bounty;
                },     //Begina action
                    (itemAdded) =>
                {
                    //Debug.WriteLine("Added " + itemAdded.EmbeddedDirectoryModel.EmbeddedEntry.ToString());
                    if (!bountyPlaced && _rootModel.Bounty != null &&
                        itemAdded.EmbeddedEntryModel.CustomPosition == -1)
                    {
                        if (itemAdded.EmbeddedDirectoryModel.EqualsOrHasChild(_rootModel.Bounty))
                        {
                            //BountyIsUp();
                            bountyPlaced = true;
                            itemAdded.PlaceBounty();
                        }
                    }
                },
                    (removedItem) =>
                {
                    //Debug.WriteLine("Removed " + removedItem.EmbeddedDirectoryModel.EmbeddedEntry.ToString());
                },
                    (itemList, ex) =>
                {
                    if (ex != null)
                    {
#if DEBUG
                        Debug.WriteLine(ex.Message);
                        throw ex;
#endif
                    }
                    else
                    {
                        _isInited = true;


                        #region Breadcrumb related code
                        //Custom menu if it's first item of breadcrumb.
                        if (IsFirstItem && _rootModel is BreadcrumbViewModel <FI, DI, FSI> )
                        {
                            BreadcrumbViewModel <FI, DI, FSI> rootBreadcrumbVM = _rootModel as BreadcrumbViewModel <FI, DI, FSI>;
                            int insertCount = 0;

                            foreach (DI dir in Profile.RootDirectories)
                            {
                                DirectoryModel <FI, DI, FSI> newDirModel =
                                    Profile.ConstructDirectoryModel(dir);
                                if (!_rootModel.SelectedModel.Equals(dir))
                                {
                                    NavigationItemViewModel <FI, DI, FSI> newItem
                                        = new NavigationItemViewModel <FI, DI, FSI>(_rootModel, null,
                                                                                    newDirModel)
                                        {
                                            CustomPosition = ++insertCount
                                        };
                                    _subDirectories.Add(newItem);
                                }
                            }

                            foreach (var rootSubDir in rootBreadcrumbVM.Hierarchy)
                            {
                                if (!rootSubDir.IsItemVisible)
                                {
                                    NavigationItemViewModel <FI, DI, FSI> cloneItem
                                        = new NavigationItemViewModel <FI, DI, FSI>(_rootModel, rootSubDir.ParentViewModel,
                                                                                    rootSubDir.EmbeddedEntryModel)
                                        {
                                            CustomPosition = ++insertCount
                                        };
                                    _subDirectories.Add(cloneItem);


                                    //_subDirectories.Insert(0, rootSubDir);
                                }
                            }
                            //new NavigationItemViewModel<FI, DI, FSI>(_rootModel, rootSubDir.ParentViewModel,
                            //rootSubDir.EmbeddedDirectoryModel));



                            if (insertCount > 0)
                            {
                                _subDirectories.Insert(insertCount++, new NavigationItemViewModel <FI, DI, FSI>()
                                {
                                    CustomPosition = 0
                                });
                            }
                        }
                        #endregion

                        #region Directory releated code
                        if (bounty != null)
                        {
                            if (!bountyPlaced)
                            {
                                //BountyIsUp();
                                foreach (NavigationItemViewModel <FI, DI, FSI> subDirVM in
                                         itemList.OrderBy((nivm) => { return(-nivm.EmbeddedEntryModel.CustomPosition); }))
                                {
                                    if (subDirVM.EmbeddedDirectoryModel.EqualsOrHasChild(_rootModel.Bounty))
                                    {
                                        subDirVM.PlaceBounty();
                                        break;
                                    }
                                    else
                                    {
                                        subDirVM.CollapseAll();
                                    }
                                }
                            }
                            else
                            {
                                foreach (NavigationItemViewModel <FI, DI, FSI> subDirVM in itemList)
                                {
                                    if (!subDirVM.EmbeddedDirectoryModel.EqualsOrHasChild(bounty))
                                    {
                                        subDirVM.CollapseAll();
                                    }
                                }
                            }
                        }

                        #endregion
                        //for (int i = 1; i < itemList.Count; i++)
                        //{
                        //    NavigationItemViewModel<FI, DI, FSI> subDirVM = itemList[i];
                        //    if (subDirVM.EmbeddedDirectoryModel.EqualsOrHasChild(_rootModel.Bounty))
                        //    {
                        //        subDirVM.PlaceBounty();
                        //        break;
                        //    }
                        //}

                        _subDirectories.ChangeSortMethod(SortCriteria.sortByName, ListSortDirection.Ascending);
                    }
                }
                                  );

                if (IsDirectory && EmbeddedDirectoryModel.HasSubDirectories)
                {
                    _subDirectories.Add(dummyNode);
                }

                //if (!IsFirstItem)
            }
        }