/// <summary> /// Sets file item by index within specified library. /// </summary> /// <param name="Type">Library type.</param> /// <param name="Index">Index of file.</param> /// <param name="Item">ImageFileItem to store.</param> private void SetFileItem(LibraryTypes Type, int Index, ImageFileItem Item) { // Index must be within range if (Index < 0 || Index >= GetFileCount(Type)) { return; } // Get path by index switch (Type) { case LibraryTypes.Texture: TextureFileItems[Index] = Item; break; case LibraryTypes.Img: ImgFileItems[Index] = Item; break; case LibraryTypes.Cif: CifFileItems[Index] = Item; break; case LibraryTypes.Rci: RciFileItems[Index] = Item; break; case LibraryTypes.Sky: SkyFileItems[Index] = Item; break; } }
/// <summary> /// Discard a file object so it will be garbage collected. /// </summary> /// <param name="Type">Library type.</param> /// <param name="Index">Index of file to discard.</param> private void DiscardFile(LibraryTypes Type, int Index) { // Discard by type ImageFileItem Item = GetFileItem(Type, Index); Item.ImageFile = null; SetFileItem(Type, Index, Item); }
/// <summary> /// Loads file by index within specified library. /// </summary> /// <param name="Type">Library type.</param> /// <param name="Index">Index of file.</param> /// <returns>True if successful, otherwise false.</returns> private bool LoadFile(LibraryTypes Type, int Index) { // Arena2 must be valid, which implies files are indexed if (0 == GetFileCount(Type)) { return(false); } // Get file item and exit if already loaded (ImageFile is non-null) ImageFileItem Item = GetFileItem(Type, Index); if (null != Item.ImageFile) { MyFileIndex = Index; return(true); } // Discard last file DiscardLastFile(); // Compose full path to file string FilePath = Path.Combine(MyArena2Path, GetFileName(Type, Index)); // Create file object Item.ImageFile = CreateFile(Type); if (null == Item.ImageFile) { return(false); } // Load file if (!Item.ImageFile.Load(FilePath, Usage, true)) { return(false); } // Load pallette string PaletteName = Item.ImageFile.PaletteName; if (!string.IsNullOrEmpty(PaletteName)) { string PalettePath = Path.Combine(MyArena2Path, PaletteName); Item.ImageFile.LoadPalette(PalettePath); } // Set file item SetFileItem(Type, Index, Item); // Store new file index MyFileIndex = Index; // Store new library and index for auto-discard later LastOpenLibraryType = LibraryType; LastOpenFileIndex = Index; return(true); }
/// <summary> /// Gets image file object of index from specified library. /// </summary> /// <param name="Type">Library type.</param> /// <param name="Index">Index of file.</param> /// <returns>DFImageFile object.</returns> private DFImageFile GetImageFile(LibraryTypes Type, int Index) { // File must be loaded if (!LoadFile(Type, Index)) { return(null); } // Get the item ImageFileItem Item = GetFileItem(Type, Index); return(Item.ImageFile); }
private void AddFiles(String dirPath) { //GET FILES string[] files = System.IO.Directory.GetFiles(dirPath); foreach (string file in files) { System.IO.FileInfo fileInfo = new System.IO.FileInfo(System.IO.Path.Combine(dirPath, file)); if (fileInfo.Exists) { String fileName = fileInfo.Name; // ADD THE RELATIVE PATH INFORMATION if (dirPath != imagesFolderPath) { fileName = System.IO.Path.Combine(dirPath.Substring(imagesFolderPath.Length + 1), fileName); fileName = fileName.Replace("\\", "/"); } // CHECK IF IT IS ASSOCIATED WITH SOME PRODUCT OR OTHER CATALOG ITEM if (IsAssociatedImage(System.IO.Path.Combine("~/Assets/ProductImages/", fileName))) { continue; } ImageFileItem dgFileItem = new ImageFileItem(fileName, fileInfo.Extension, fileInfo.Length); // DIMENTIONS System.Drawing.Image thisImage = null; try { thisImage = System.Drawing.Image.FromFile(fileInfo.FullName); dgFileItem.Dimensions = string.Format("({0}w X {1}h)", thisImage.Width, thisImage.Height); } catch { dgFileItem.Dimensions = String.Empty; } finally { if (thisImage != null) { thisImage.Dispose(); thisImage = null; } } imageFiles.Add(dgFileItem); } } }
/// <summary> /// Index all files of specified library type. /// </summary> /// <param name="FilePaths">Array of absolute paths to files.</param> /// <param name="Type">Library type.</param> /// <returns></returns> private bool IndexLibrary(ref string[] FilePaths, LibraryTypes Type) { // Create file name arrays switch (Type) { case LibraryTypes.Texture: TextureFileNames = new string[(FilePaths.Length - Arena2.TextureFile.UnsupportedFilenames.Length)]; break; case LibraryTypes.Img: ImgFileNames = new string[(FilePaths.Length - Arena2.TextureFile.UnsupportedFilenames.Length)]; break; case LibraryTypes.Cif: CifFileNames = new string[FilePaths.Length]; break; case LibraryTypes.Rci: RciFileNames = new string[FilePaths.Length]; break; case LibraryTypes.Sky: SkyFileNames = new string[FilePaths.Length]; break; } // Index and hash files int Index = 0; TextureFile TextureFile = new TextureFile(); ImgFile ImgFile = new ImgFile(); foreach (string FilePath in FilePaths) { // Get filename only string FileName = Path.GetFileName(FilePath); // Handle unsupported TEXTURE files if (LibraryTypes.Texture == Type) { if (!TextureFile.IsFilenameSupported(FileName)) { continue; } } // Handle unsupported IMG files if (LibraryTypes.Img == Type) { if (!ImgFile.IsFilenameSupported(FileName)) { continue; } } // Store file name in array switch (Type) { case LibraryTypes.Texture: TextureFileNames[Index] = FileName; break; case LibraryTypes.Img: ImgFileNames[Index] = FileName; break; case LibraryTypes.Cif: CifFileNames[Index] = FileName; break; case LibraryTypes.Rci: RciFileNames[Index] = FileName; break; case LibraryTypes.Sky: SkyFileNames[Index] = FileName; break; } // Create file item ImageFileItem Item = new ImageFileItem(); Item.FileName = FileName; Item.LibraryType = Type; Item.ImageFile = null; // Add file item based on type switch (Type) { case LibraryTypes.Texture: TextureFileItems.Add(Item); break; case LibraryTypes.Img: ImgFileItems.Add(Item); break; case LibraryTypes.Cif: CifFileItems.Add(Item); break; case LibraryTypes.Rci: RciFileItems.Add(Item); break; case LibraryTypes.Sky: SkyFileItems.Add(Item); break; } // Hash file index based on type switch (Type) { case LibraryTypes.Texture: TextureHashtable.Add(FileName, Index); break; case LibraryTypes.Img: ImgHashtable.Add(FileName, Index); break; case LibraryTypes.Cif: CifHashtable.Add(FileName, Index); break; case LibraryTypes.Rci: RciHashtable.Add(FileName, Index); break; case LibraryTypes.Sky: SkyHashtable.Add(FileName, Index); break; } // Increment index Index++; } return(true); }