コード例 #1
0
ファイル: ItemViewModel.cs プロジェクト: zvtrung/fileexplorer
 public NavigationItemViewModel(NavigationRootViewModel <FI, DI, FSI> rootModel,
                                NavigationItemViewModel <FI, DI, FSI> parentModel,
                                FileModel <FI, DI, FSI> embedFileModel)
 {
     _isDirectory            = false;
     _embeddedEntryModel     = embedFileModel;
     _embeddedEntryViewModel = embedFileModel.ToViewModel(rootModel.Profile);
     _rootModel     = rootModel;
     _parentModel   = (parentModel != null && rootModel.Profile.IsInsideScope(parentModel.EmbeddedDirectoryModel)) ? parentModel : null;
     CustomPosition = embedFileModel.CustomPosition;
     setupCommands();
 }
コード例 #2
0
 internal void ReportBeingSelected(NavigationItemViewModel <FI, DI, FSI> selectedModel)
 {
     if (!selectedModel.Equals(SelectedNavigationViewModel))
     {
         if (SelectedNavigationViewModel != null)
         {
             SelectedNavigationViewModel.IsSelected = false;
         }
         SelectedNavigationViewModel = selectedModel;
         DirectoryChanged(this, new DirectoryChangedEventArgs <FI, DI, FSI>(selectedModel.EmbeddedEntryModel));
     }
     //ProcessHierarchy(selectedModel);
 }
コード例 #3
0
        public override void PlaceBounty(EntryModel <FI, DI, FSI> bountyModel)
        {
            if (bountyModel != null && !bountyModel.Equals(CurrentEntryViewModel))
            {
                CurrentEntryViewModel       = Profile.ConstructEntryViewModel(bountyModel);
                SelectedNavigationViewModel =
                    NavigationItemViewModel <FI, DI, FSI> .FromModel(this,
                                                                     CurrentEntryViewModel.EmbeddedModel);

                ProcessHierarchy(SelectedNavigationViewModel);
                DirectoryChanged(this, new DirectoryChangedEventArgs <FI, DI, FSI>(bountyModel));
            }
        }
コード例 #4
0
        public int Compare(NavigationItemViewModel <FI, DI, FSI> x, NavigationItemViewModel <FI, DI, FSI> y)
        {
            if (x.CustomPosition != -1 || y.CustomPosition != -1)
            {
                return(x.CustomPosition.CompareTo(y.CustomPosition) * sortDirectionModifier);
            }

            if (x.EmbeddedEntryModel != null && y.EmbeddedEntryModel != null)
            {
                return(Compare(x.EmbeddedEntryModel, y.EmbeddedEntryModel));
            }

            return(-1);
        }
コード例 #5
0
ファイル: ItemViewModel.cs プロジェクト: zvtrung/fileexplorer
        public NavigationItemViewModel(NavigationRootViewModel <FI, DI, FSI> rootModel,
                                       NavigationItemViewModel <FI, DI, FSI> parentModel,
                                       EntryModel <FI, DI, FSI> embedEntryModel)
        {
            _isDirectory = embedEntryModel is DirectoryModel <FI, DI, FSI>;

            if (_isDirectory)
            {
                DirectoryModel <FI, DI, FSI> embedDirectoryModel = embedEntryModel as DirectoryModel <FI, DI, FSI>;;
                _embeddedEntryModel     = _embeddedDirectoryModel = embedDirectoryModel;
                _embeddedEntryViewModel = _embeddedDirectoryViewModel =
                    (DirectoryViewModel <FI, DI, FSI>)embedDirectoryModel.ToViewModel(rootModel.Profile);
            }
            else
            {
                _embeddedEntryModel     = embedEntryModel;
                _embeddedEntryViewModel = embedEntryModel.ToViewModel(rootModel.Profile);
            }
            _rootModel     = rootModel;
            _parentModel   = (parentModel != null && rootModel.Profile.IsInsideScope(parentModel.EmbeddedDirectoryModel)) ? parentModel : null;
            CustomPosition = embedEntryModel.CustomPosition;
            setupCommands();
        }
コード例 #6
0
 internal void RequestBountyReward(NavigationItemViewModel <FI, DI, FSI> foundModel)
 {
     Bounty = default(DirectoryModel <FI, DI, FSI>);
     foundModel.IsSelected = true;
 }
コード例 #7
0
 internal void ReportDraggedLeave(NavigationItemViewModel <FI, DI, FSI> highlightedModel)
 {
     //DraggingOverNavigationViewModel = null;
 }
コード例 #8
0
 internal void ReportDraggedOver(NavigationItemViewModel <FI, DI, FSI> highlightedModel)
 {
     DraggingOverNavigationViewModel = highlightedModel;
 }
コード例 #9
0
ファイル: ItemViewModel.cs プロジェクト: zvtrung/fileexplorer
        private void setupCommands()
        {
            ContextMenuCommand = new SimpleCommand()
            {
                ExecuteDelegate = (x) =>
                {
                    NavigationItemViewModel <FI, DI, FSI> vm = this;

                    Point pt = UITools.GetScreenMousePosition();
                    switch (vm.ContextMenu(pt))
                    {
                    case "open": if (OpenCommand != null)
                        {
                            OpenCommand.Execute(vm);
                        }
                        break;

                    case "rename": if (RenameCommand != null)
                        {
                            RenameCommand.Execute(vm);
                        }
                        break;

                    case "refresh": if (RefreshCommand != null)
                        {
                            RefreshCommand.Execute(vm);
                        }
                        break;
                    }
                }
            };

            OpenCommand = new SimpleCommand()
            {
                ExecuteDelegate = (x) =>
                {
                    Profile.Open(EmbeddedDirectoryModel);
                }
            };

            RefreshCommand = new SimpleCommand()
            {
                CanExecuteDelegate = (x) =>
                {
                    return(_subDirectories != null && !_subDirectories.IsWorking);
                },
                ExecuteDelegate = (x) =>
                {
                    Refresh();
                }
            };

            PropertiesCommand = new SimpleCommand()
            {
                ExecuteDelegate = x =>
                {
                    System.Windows.Point position = Mouse.GetPosition(null);
                    Profile.ShowProperties(position, EmbeddedDirectoryModel);
                }
            };

            RenameCommand = new SimpleCommand()
            {
                CanExecuteDelegate = (x) =>
                {
                    return(!this.EmbeddedDirectoryModel.IsReadonly);
                },
                ExecuteDelegate = (x) =>
                {
                    EmbeddedDirectoryViewModel.IsEditing = true;
                }
            };

            DeleteCommand = new SimpleCommand()
            {
                CanExecuteDelegate = (x) =>
                {
                    return(EmbeddedDirectoryModel.IsReadonly);
                },
                ExecuteDelegate = (x) =>
                {
                    try
                    {
                        string caption = String.Format(Texts.strConfirmDelete,
                                                       1, "");

                        if (new WPFMessageBoxService().ShowYesNo(caption, CustomDialogIcons.Question)
                            == CustomDialogResults.Yes)
                        {
                            Profile.Delete(EmbeddedDirectoryModel, EmbeddedDirectoryViewModel.EmbeddedDirectoryModel);
                        }
                    }
                    catch (Exception ex)
                    {
                        new WPFMessageBoxService().ShowError(ex.Message);
                    }
                }
            };
        }
コード例 #10
0
ファイル: ItemViewModel.cs プロジェクト: zvtrung/fileexplorer
        /// <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)
            }
        }
コード例 #11
0
ファイル: ItemViewModel.cs プロジェクト: zvtrung/fileexplorer
 public int CompareTo(NavigationItemViewModel <FI, DI, FSI> other)
 {
     return(EmbeddedEntryViewModel.CompareTo(other.EmbeddedEntryViewModel));
 }
コード例 #12
0
        private void setupBackgroundWorker()
        {
            bgWorker_ProcessHierarchy = new BackgroundTaskManager
                                        <NavigationItemViewModel <FI, DI, FSI>,
                                         List <NavigationItemViewModel <FI, DI, FSI> > >(
                (VM) =>
            {
                List <NavigationItemViewModel <FI, DI, FSI> > retVal =
                    new List <NavigationItemViewModel <FI, DI, FSI> >();


                NavigationItemViewModel <FI, DI, FSI> currentModel = VM;

                while (currentModel != null)
                {
                    retVal.Add(currentModel);
                    currentModel = currentModel.ParentViewModel;
                }

                retVal.Reverse();
                return(new List <NavigationItemViewModel <FI, DI, FSI> >(retVal));
            },
                (result) =>
            {
                foreach (var item in Hierarchy)
                {
                    item.IsDropDownOpen = false;
                }

                if (result.Count == 1)         //Root Directory
                {
                    while (Hierarchy.Count > 1)
                    {
                        Hierarchy.RemoveAt(1);
                    }
                    if (Hierarchy.Count == 0)
                    {
                        Hierarchy.Add(result[0]);
                    }
                    Hierarchy[0].ShowCaption = true;
                }
                else
                {
                    for (int i = 0; i < result.Count; i++)
                    {
                        if (Hierarchy.Count > i)
                        {
                            if (result[i].Equals(Hierarchy[i]))
                            {
                                //ok, do nothing
                                Hierarchy[i].IsShadowItem = false;
                            }
                            else         //Not equal, replace all further directories
                            {
                                while (Hierarchy.Count > i)
                                {
                                    Hierarchy.RemoveAt(i);
                                }
                                //Then add back the item
                                Hierarchy.Add(result[i]);
                            }
                        }
                        else
                        {
                            Hierarchy.Add(result[i]);
                        }
                    }
                }

                try
                {
                    if (Hierarchy.Count > result.Count)
                    {
                        if (Hierarchy[result.Count - 1].IsItemVisible)
                        {
                            for (int i = result.Count; i < Hierarchy.Count; i++)
                            {
                                Hierarchy[i].IsShadowItem = true;
                            }
                        }
                        else
                        {
                            while (Hierarchy.Count > result.Count)
                            {
                                Hierarchy.RemoveAt(Hierarchy.Count - 1);
                            }
                        }
                    }
                }
                catch (ArgumentOutOfRangeException) { }         //HierarchyDirectory changed when loading


                BroadcastItemsChanged();



                //foreach (NavigationItemViewModel<FI, DI, FSI> hierarchyItem in stack)
                //    _hierarchy.Add(hierarchyItem);
                //foreach (NavigationItemViewModel<FI, DI, FSI> hierarchyItem in stack)
                //    hierarchyItem.BroadcastItemsChanged();
            });
        }
コード例 #13
0
 internal void ProcessHierarchy(NavigationItemViewModel <FI, DI, FSI> itemViewModel)
 {
     bgWorker_ProcessHierarchy.WorkerArgument = itemViewModel;
     bgWorker_ProcessHierarchy.RunBackgroundTask();
 }