Пример #1
0
        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);
        }
Пример #2
0
        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)));
        }
Пример #4
0
        // 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);
        }
Пример #5
0
        private void TreeSelectionChanged(object sender, EventArgs e)
        {
            IResourceFolder selectedFolder = m_treeContext.LastSelected.As <IResourceFolder>();

            if (selectedFolder != null)
            {
                m_listContext.SelectedFolder = selectedFolder;
                RefreshThumbnails();
            }
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        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);
        }
Пример #8
0
            /// <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;
                }
            }
Пример #9
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);
        }
Пример #10
0
            public IEnumerable <object> GetChildren(object parent)
            {
                IResourceFolder resourceFolder = parent.As <IResourceFolder>();

                if (resourceFolder != null)
                {
                    foreach (IResourceFolder childFolder in resourceFolder.Folders)
                    {
                        yield return(childFolder);
                    }
                }
            }
Пример #11
0
        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;
            }
        }
Пример #12
0
        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();
                }
            }
        }
Пример #13
0
        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);
                    }
                }
            }
        }
Пример #14
0
        /// <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);
        }
Пример #15
0
        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);
            }
        }
Пример #16
0
        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);
        }
Пример #17
0
 public TreeViewContext(IResourceFolder rootFolder)
 {
     m_rootFolder = rootFolder;
 }
Пример #18
0
 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);
 }
Пример #21
0
 public TreeViewContext(IResourceFolder rootFolder)
 {
     m_rootFolder          = rootFolder;
     m_selection.Changing += TheSelectionChanging;
     m_selection.Changed  += TheSelectionChanged;
 }
Пример #22
0
 public void AddFolder(IResourceFolder folder)
 {
     this._folders.Add(folder);
 }
Пример #23
0
 private CustomFileSystemResourceFolder(string path, IResourceFolder parent)
 {
     m_path   = path;
     m_parent = parent;
     m_name   = PathUtil.GetLastElement(path);
 }