public IResourceFolder FindFolder(string directoryPath) { if (directoryPath == null) { throw new ArgumentNullException("directoryPath"); } var parts = directoryPath.TrimStart('~', '/', '\\').Split('\\', '/').AsEnumerable(); if (parts.Count() == 1 && String.IsNullOrWhiteSpace(parts.First())) { return(this); } IResourceFolder currentFolder = this; while (parts.Count() > 0) { var part = parts.First(); currentFolder = currentFolder.Folders.FirstOrDefault(x => x.Name.Equals(part, StringComparison.OrdinalIgnoreCase)); if (currentFolder == null) { return(null); } parts = parts.Skip(1); } return(currentFolder); }
private void RefreshThumbnails() { foreach (var item in m_thumbnailControl.Items) { if (item.Image != null) { item.Image.Dispose(); } } m_thumbnailControl.Selection.Clear(); m_thumbnailControl.Items.Clear(); m_thumbnailControl.Invalidate(); if (m_treeContext != null) { IResourceFolder currentAssetFolder = m_treeContext.GetLastSelected <IResourceFolder>(); if (currentAssetFolder == null || !m_thumbnailControl.Visible) { return; } foreach (Uri resourceUri in currentAssetFolder.ResourceUris) { m_thumbnailService.ResolveThumbnail(resourceUri); string assetPath = resourceUri.LocalPath; string assetFileName = Path.GetFileName(assetPath); Icon shellIcon = FileIconUtil.GetFileIcon(assetFileName, FileIconUtil.IconSize.Large, false); Bitmap tempThumbnail = shellIcon.ToBitmap(); shellIcon.Dispose(); ThumbnailControlItem item = NewItem(resourceUri, tempThumbnail); m_thumbnailControl.Items.Add(item); } m_thumbnailControl.RecalculateClientSize(); } }
/// <summary> /// Gets the resource file. /// </summary> /// <param name="fileName">Name of the file.</param> /// <returns></returns> /// <exception cref="System.NotImplementedException"></exception> public IResourceFile GetResourceFile(string fileName) { var folderIndex = fileName.LastIndexOfAny(new[] { '\\', '/' }); string folder = String.Empty; string fName = fileName; IResourceFolder resourceFolder = null; if (folderIndex > -1) { folder = fileName.Substring(0, folderIndex); fName = fileName.Substring(folderIndex + 1); } resourceFolder = this._rootFolder.FindFolder(folder); if (resourceFolder == this._rootFolder || resourceFolder == null) { // We cannot find the folder, we could be // using an assembly that does not have any metadata var file = this.GetResourceItem(fileName); if (file != null && String.IsNullOrWhiteSpace(file.FileName)) { return(file); } } if (resourceFolder == null) { return(null); } return(resourceFolder.Files.FirstOrDefault(x => x.FileName.Equals(fName))); }
// Returns the folder represented by m_lastHit, or the root folder. private IResourceFolder GetHitFolder() { IResourceFolder hitFolder = m_lastHit.As <IResourceFolder>(); if (hitFolder == null) { hitFolder = m_treeContext.RootFolder; } return(hitFolder); }
private void TreeSelectionChanged(object sender, EventArgs e) { IResourceFolder selectedFolder = m_treeContext.LastSelected.As <IResourceFolder>(); if (selectedFolder != null) { m_listContext.SelectedFolder = selectedFolder; RefreshThumbnails(); } }
/// <summary> /// Sets the root resource folder, registers events and refreshes controls</summary> /// <param name="rootFolder">Resource folder</param> public void SetRootFolder(IResourceFolder rootFolder) { if (m_watcher == null) { m_uiThreadContext = SynchronizationContext.Current; m_watcher = new FileSystemWatcher(); m_watcher.SynchronizingObject = m_mainForm; m_watcher.IncludeSubdirectories = true; m_watcher.EnableRaisingEvents = false; m_watcher.Created += Watcher_FileChanged; m_watcher.Deleted += Watcher_FileChanged; m_watcher.Renamed += Watcher_Renamed; // We need to shut down the watcher before the dispose phase begins // this is because file events can occur while disposing other MEF objects // (eg, flushing out a cached file). When this happens, we can get a // callback that can end up accessing MEF objects that have already // been disposed. Application.ApplicationExit += ShutdownWatcher; } IFileSystemResourceFolder rootDirectory = rootFolder as IFileSystemResourceFolder; if (rootDirectory != null) { m_watcher.Path = rootDirectory.FullPath; m_watcher.EnableRaisingEvents = true; } else { m_watcher.Path = null; m_watcher.EnableRaisingEvents = false; } if (m_treeContext != null) { m_treeContext.SelectionChanged -= TreeSelectionChanged; } m_treeContext = new TreeViewContext(rootFolder); m_treeContext.SelectionChanged += TreeSelectionChanged; m_treeControlAdapter.TreeView = m_treeContext; if (m_listContext != null) { m_listContext.SelectionChanged -= listSelectionContext_SelectionChanged; } m_listContext = new ListViewContext(); m_listContext.SelectionChanged += listSelectionContext_SelectionChanged; m_listViewAdapter.ListView = m_listContext; m_treeControlAdapter.Refresh(rootFolder); }
private CustomFileSystemResourceFolder(string path, IResourceFolder parent) { if (string.IsNullOrWhiteSpace(path)) { throw new ArgumentNullException("path"); } m_path = path; m_parent = parent; m_name = PathUtil.GetLastElement(path); }
/// <summary> /// Gets item's display information</summary> /// <param name="item">Item being displayed</param> /// <param name="info">Item info, to fill out</param> public virtual void GetInfo(object item, ItemInfo info) { IResourceFolder resourceFolder = item.As <IResourceFolder>(); if (resourceFolder != null) { info.Label = resourceFolder.Name; info.ImageIndex = info.GetImageList().Images.IndexOfKey(Sce.Atf.Resources.FolderImage); info.AllowLabelEdit = !resourceFolder.ReadOnlyName; info.IsLeaf = resourceFolder.Folders.Count == 0; } }
/// <summary> /// Sets the root resource folder, registers events and refreshes controls</summary> /// <param name="rootFolder">Resource folder</param> public void SetRootFolder(IResourceFolder rootFolder) { m_treeContext = new TreeViewContext(rootFolder); m_treeSelectionContext = m_treeContext.As <ISelectionContext>(); m_treeSelectionContext.SelectionChanged += TreeSelectionChanged; m_treeControlAdapter.TreeView = m_treeContext; m_listContext = new ListViewContext(); m_listViewAdapter.ListView = m_listContext; m_treeControlAdapter.Refresh(rootFolder); }
public IEnumerable <object> GetChildren(object parent) { IResourceFolder resourceFolder = parent.As <IResourceFolder>(); if (resourceFolder != null) { foreach (IResourceFolder childFolder in resourceFolder.Folders) { yield return(childFolder); } } }
private void treeControl_DragOver(object sender, DragEventArgs e) { e.Effect = DragDropEffects.None; Point clientPoint = m_treeControl.PointToClient(new Point(e.X, e.Y)); m_lastHit = m_treeControlAdapter.GetItemAt(clientPoint); IResourceFolder hitFolder = GetHitFolder(); if (hitFolder != null && !hitFolder.Folders.IsReadOnly) { e.Effect = DragDropEffects.Move; } }
private void TreeSelectionChanged(object sender, EventArgs e) { ISelectionContext selectionContext = sender.As <ISelectionContext>(); if (selectionContext != null) { IResourceFolder selectedFolder = selectionContext.LastSelected.As <IResourceFolder>(); if (selectedFolder != null) { m_listContext.SelectedFolder = selectedFolder; m_listViewAdapter.ListView = m_listViewAdapter.ListView; // force reload RefreshThumbnails(); } } }
private void RefreshThumbnails() { if (m_listContext != null) { IResourceFolder currentAssetFolder = m_listContext.SelectedFolder; if (currentAssetFolder != null) { m_thumbnailControl.Items.Clear(); foreach (Uri resourceUri in currentAssetFolder.ResourceUris) { AddThumbnail(resourceUri); } } } }
/// <summary> /// Sets the root resource folder, registers events and refreshes controls</summary> /// <param name="rootFolder">Resource folder</param> public void SetRootFolder(IResourceFolder rootFolder) { if (m_watcher == null) { m_watcher = new FileSystemWatcher(); m_watcher.SynchronizingObject = m_mainForm; m_watcher.IncludeSubdirectories = true; m_watcher.EnableRaisingEvents = false; m_watcher.Created += Watcher_FileChanged; m_watcher.Deleted += Watcher_FileChanged; m_watcher.Renamed += Watcher_Renamed; } IFileSystemResourceFolder rootDirectory = rootFolder as IFileSystemResourceFolder; if (rootDirectory != null) { m_watcher.Path = rootDirectory.FullPath; m_watcher.EnableRaisingEvents = true; } else { m_watcher.Path = null; m_watcher.EnableRaisingEvents = false; } if (m_treeContext != null) { m_treeContext.SelectionChanged -= TreeSelectionChanged; } m_treeContext = new TreeViewContext(rootFolder); m_treeContext.SelectionChanged += TreeSelectionChanged; m_treeControlAdapter.TreeView = m_treeContext; if (m_listContext != null) { m_listContext.SelectionChanged -= listSelectionContext_SelectionChanged; } m_listContext = new ListViewContext(); m_listContext.SelectionChanged += listSelectionContext_SelectionChanged; m_listViewAdapter.ListView = m_listContext; m_treeControlAdapter.Refresh(rootFolder); }
private void treeControl_DragDrop(object sender, DragEventArgs e) { Point clientPoint = m_treeControl.PointToClient(new Point(e.X, e.Y)); m_lastHit = m_treeControlAdapter.GetItemAt(clientPoint); string[] droppedFiles = e.Data.GetData(DataFormats.FileDrop) as string[]; if (droppedFiles != null) { IResourceFolder parentFolder = GetHitFolder(); if (parentFolder != null) { foreach (string path in droppedFiles) { CreateFolder(parentFolder, new Uri(path)); } } m_treeControlAdapter.Refresh(m_treeContext.RootFolder); } }
private IResourceFolder AddFolder(IResourceFolder parentFolder, DirectoryInfo dirInfo) { IResourceFolder folder = parentFolder.CreateFolder(); if (folder != null) { folder.Name = dirInfo.Name; if (parentFolder != null) { IList <IResourceFolder> folders = parentFolder.Folders; if (!folders.IsReadOnly) { folders.Add(folder); } } foreach (DirectoryInfo subDir in dirInfo.GetDirectories()) { AddFolder(folder, subDir); } foreach (FileInfo fileInfo in dirInfo.GetFiles()) { if (!fileInfo.Name.StartsWith("~")) // ignore thumbnails { IList <Uri> uris = folder.ResourceUris; if (!uris.IsReadOnly) { Uri uri = new Uri(fileInfo.FullName); folder.ResourceUris.Add(uri); } } } } return(folder); }
public TreeViewContext(IResourceFolder rootFolder) { m_rootFolder = rootFolder; }
private IResourceFolder CreateFolder(IResourceFolder parentFolder, Uri uri) { return(AddFolder(parentFolder, new DirectoryInfo(uri.LocalPath))); }
private FileSystemResourceFolder(string path, IResourceFolder parent) { m_path = path; m_parent = parent; m_name = PathUtil.GetLastElement(path); }
public void AddFolder(IResourceFolder folder) { this._folders.Add(folder); }
public TreeViewContext(IResourceFolder rootFolder) { m_rootFolder = rootFolder; m_selection.Changing += TheSelectionChanging; m_selection.Changed += TheSelectionChanged; }
private CustomFileSystemResourceFolder(string path, IResourceFolder parent) { m_path = path; m_parent = parent; m_name = PathUtil.GetLastElement(path); }