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(); }
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); }
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)); } }
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); }
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(); }
internal void RequestBountyReward(NavigationItemViewModel <FI, DI, FSI> foundModel) { Bounty = default(DirectoryModel <FI, DI, FSI>); foundModel.IsSelected = true; }
internal void ReportDraggedLeave(NavigationItemViewModel <FI, DI, FSI> highlightedModel) { //DraggingOverNavigationViewModel = null; }
internal void ReportDraggedOver(NavigationItemViewModel <FI, DI, FSI> highlightedModel) { DraggingOverNavigationViewModel = highlightedModel; }
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); } } }; }
/// <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) } }
public int CompareTo(NavigationItemViewModel <FI, DI, FSI> other) { return(EmbeddedEntryViewModel.CompareTo(other.EmbeddedEntryViewModel)); }
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(); }); }
internal void ProcessHierarchy(NavigationItemViewModel <FI, DI, FSI> itemViewModel) { bgWorker_ProcessHierarchy.WorkerArgument = itemViewModel; bgWorker_ProcessHierarchy.RunBackgroundTask(); }