public void Process(IDiff diff, IKoreFolderInfo source, IKoreFolderInfo destination) { IsNotNull(diff); if (diff.Relation == DiffRelation.Identical) { return; } if (diff.Relation == DiffRelation.DestinationOrphan) { diff.Destination.Delete(); return; } IsNotNull(source); IsNotNull(destination); var sourceFileInfo = diff.Source; var destinationFileInfo = diff.Destination; if (diff.Relation == DiffRelation.SourceNew) { var sourceInnerFullPath = BuildRelativePath(diff.Source, source); destinationFileInfo = new KoreFileInfo(Path.Combine(destination.FullName, sourceInnerFullPath)); } else if (diff.Relation == DiffRelation.SourceOlder) { sourceFileInfo = destinationFileInfo; destinationFileInfo = diff.Source; } _fileCopier.Copy(sourceFileInfo, destinationFileInfo); }
public void ReadSettings() { _currentTest = Path.Combine(CurrentWorkingFolder, "test6"); EnsureFolderExists(_currentTest); var sourceFolder = "C:\\Music"; var destinationFolder = "D:\\Backups\\Music"; _settingsManager.Data.SyncPairs.Add(new SyncPair { Source = _currentTest, Destination = _currentTest }); var settingsFile = new KoreFileInfo(Path.Combine(_currentTest, "settings.bin")); _kontrol.WriteSettings(settingsFile); var settingsManager = new SettingsManager <ISettings>(new BinarySerializer <ISettings>()); var kontrol = new Kontrol(settingsManager, _syncManager); kontrol.ReadSettings(settingsFile); Assert.IsNotNull(settingsManager.Data); Assert.IsNotNull(settingsManager.Data.SyncPairs); Assert.AreEqual(1, settingsManager.Data.SyncPairs.Count); Assert.AreEqual(sourceFolder, settingsManager.Data.SyncPairs[0].Source); Assert.AreEqual(destinationFolder, settingsManager.Data.SyncPairs[0].Destination); Assert.IsTrue(settingsFile.Exists); }
public ImageForm(KoreFileInfo kfi, TabPage tabPage, IArchiveAdapter parentAdapter, TabPage parentTabPage) { InitializeComponent(); Kfi = kfi; _currentTab = tabPage; _parentTab = parentTabPage; _parentAdapter = parentAdapter; _bestBitmaps = _imageAdapter.BitmapInfos.Select(x => (Bitmap)x.Image.Clone()).ToArray(); imbPreview.Image = _imageAdapter.BitmapInfos.FirstOrDefault()?.Image; tsbFormat.DropDownItems.AddRange(_imageAdapter.FormatInfos?.Select(f => new ToolStripMenuItem { Text = f.FormatName, Tag = f, Checked = f.FormatIndex == _selectedBitmapInfo.FormatInfo.FormatIndex }).ToArray()); if (tsbFormat.DropDownItems.Count > 0) { foreach (var tsb in tsbFormat.DropDownItems) { ((ToolStripMenuItem)tsb).Click += tsbFormat_Click; } } tsbImageBorderStyle.DropDownItems.AddRange(Enum.GetNames(typeof(ImageBoxBorderStyle)).Select(s => new ToolStripMenuItem { Image = (Image)Resources.ResourceManager.GetObject(_stylesImages[s]), Text = _stylesText[s], Tag = s }).ToArray()); foreach (var tsb in tsbImageBorderStyle.DropDownItems) { ((ToolStripMenuItem)tsb).Click += tsbImageBorderStyle_Click; } UpdateForm(); UpdatePreview(); UpdateImageList(); }
public void NotCopyAnIdenticalFile() { SetupCurrentTestFolder("test-identical-files"); var sourceFileInfo = new KoreFileInfo(Path.Combine(_sourceFolder, _primaryTestFileName)); sourceFileInfo.EnsureExists(); using (var streamWriter = new StreamWriter(sourceFileInfo.FullName)) { streamWriter.Write('c'); } var destinationFileInfo = new KoreFileInfo(Path.Combine(_destinationFolder, _primaryTestFileName)); destinationFileInfo.EnsureExists(); var now = DateTime.Now; sourceFileInfo.LastWriteTime = now; destinationFileInfo.LastWriteTime = now; _kontrol.Sync(); Assert.IsTrue(destinationFileInfo.Exists); Assert.IsTrue(sourceFileInfo.Exists); Assert.AreEqual(0, destinationFileInfo.Size); }
/// <summary> /// Saves a Kfi /// </summary> private void SaveFile(KoreFileInfo kfi, string newSaveLocation = "", int version = 0) { if (!kfi.HasChanges && newSaveLocation == string.Empty) { return; } // Save files var ksi = new KoreSaveInfo(kfi, _tempFolder) { Version = version, NewSaveFile = newSaveLocation }; var savedKfi = _fileManager.SaveFile(ksi); if (savedKfi.ParentKfi != null) { savedKfi.ParentKfi.HasChanges = true; } // Update all corresponsing tabs var kuriimuForm = GetTabPageForKfi(kfi).Controls[0] as IKuriimuForm; kuriimuForm.Kfi = savedKfi; if (kuriimuForm is IArchiveForm archiveForm) { archiveForm.UpdateChildTabs(savedKfi); archiveForm.UpdateParent(); } kuriimuForm.UpdateForm(); }
private bool CloseFile(KoreFileInfo kfi, bool leaveFileStreamOpen, bool firstIteration) { if (kfi.ChildKfi != null && kfi.ChildKfi.Count > 0) { foreach (var child in kfi.ChildKfi) { CloseFile(child, false, false); } } if (OpenFiles.Contains(kfi)) { OpenFiles.Remove(kfi); } kfi.Adapter.Dispose(); if (!leaveFileStreamOpen) { kfi.StreamFileInfo.FileData.Close(); } if (firstIteration) { kfi.ParentKfi?.ChildKfi.Remove(kfi); } return(true); }
// Constructor public TextEditor2ViewModel(FileManager fileManager, PluginLoader pluginLoader, KoreFileInfo koreFile) { _fileManager = fileManager; _pluginLoader = pluginLoader; KoreFile = koreFile; _adapter = KoreFile.Adapter as ITextAdapter; GameAdapters = _pluginLoader.GetAdapters <IGameAdapter>().Select(ga => new GameAdapter(ga)).ToList(); // TODO: Implement game adapter persistence SelectedGameAdapter = GameAdapters.FirstOrDefault(); SelectedZoomLevel = 1; if (Keyboard.IsKeyDown(Key.LeftShift)) { SelectedGameAdapter = GameAdapters.FirstOrDefault(ga => ga.Adapter.GetType().GetCustomAttribute <PluginInfoAttribute>().ID == "84D2BD62-7AC6-459B-B3BB-3A65855135F6") ?? GameAdapters.First(); SelectedZoomLevel = 2; } else if (Keyboard.IsKeyDown(Key.LeftAlt)) { SelectedGameAdapter = GameAdapters.FirstOrDefault(ga => ga.Adapter.GetType().GetCustomAttribute <PluginInfoAttribute>().ID == "B344166C-F1BE-49B2-9ADC-38771D0A15DA") ?? GameAdapters.First(); SelectedZoomLevel = 1; } SelectedEntry = Entries?.FirstOrDefault(); }
// Constructor public TextEditor2ViewModel(KoreManager kore, KoreFileInfo koreFile) { _kore = kore; KoreFile = koreFile; _adapter = KoreFile.Adapter as ITextAdapter; GameAdapters = _kore.GetAdapters <IGameAdapter>().Select(ga => new GameAdapter(ga)).ToList(); // TODO: Implement game adapter persistence SelectedGameAdapter = GameAdapters.FirstOrDefault(); SelectedZoomLevel = 1; if (Keyboard.IsKeyDown(Key.LeftShift)) { SelectedGameAdapter = GameAdapters.FirstOrDefault(ga => ga.Adapter.GetType().GetCustomAttribute <PluginInfoAttribute>().ID == "84D2BD62-7AC6-459B-B3BB-3A65855135F6") ?? GameAdapters.First(); SelectedZoomLevel = 2; } else if (Keyboard.IsKeyDown(Key.LeftAlt)) { SelectedGameAdapter = GameAdapters.FirstOrDefault(ga => ga.Adapter.GetType().GetCustomAttribute <PluginInfoAttribute>().ID == "B344166C-F1BE-49B2-9ADC-38771D0A15DA") ?? GameAdapters.First(); SelectedZoomLevel = 1; } // Direct entry loading is now dead since GameAdapters have become a thing //if (_adapter != null) // Entries = new ObservableCollection<TextEntry>(_adapter.Entries); SelectedEntry = Entries?.FirstOrDefault(); }
private TabPage AddTabPage(KoreFileInfo kfi, Color tabColor, KoreFileInfo parentKfi = null) { var tabPage = new TabPage { BackColor = SystemColors.Window, Padding = new Padding(0, 2, 2, 1) }; IKuriimuForm tabControl = null; try { if (kfi.Adapter is ITextAdapter) { tabControl = new TextForm(kfi, tabPage, parentKfi?.Adapter as IArchiveAdapter, GetTabPageForKfi(parentKfi), _pluginLoader.GetAdapters <IGameAdapter>()); } else if (kfi.Adapter is IImageAdapter) { tabControl = new ImageForm(kfi, tabPage, parentKfi?.Adapter as IArchiveAdapter, GetTabPageForKfi(parentKfi)); } else if (kfi.Adapter is ILayoutAdapter) { tabControl = new LayoutForm(kfi, tabPage, parentKfi?.Adapter as IArchiveAdapter, GetTabPageForKfi(parentKfi)); } else if (kfi.Adapter is IArchiveAdapter) { tabControl = new ArchiveForm(kfi, tabPage, parentKfi?.Adapter as IArchiveAdapter, GetTabPageForKfi(parentKfi), _tempFolder, _pluginLoader); (tabControl as IArchiveForm).OpenTab += Kuriimu2_OpenTab; (tabControl as IArchiveForm).GetAdapterById += Kuriimu2_GetAdapterById; } } catch (Exception e) { MessageBox.Show(e.ToString(), "Exception catched."); return(null); } tabControl.TabColor = tabColor; if (tabControl is UserControl uc) { uc.Dock = DockStyle.Fill; } tabControl.SaveTab += TabControl_SaveTab; tabControl.CloseTab += TabControl_CloseTab; tabControl.ReportProgress += Report_ProgressChanged; tabPage.Controls.Add(tabControl as UserControl); openFiles.TabPages.Add(tabPage); tabPage.ImageKey = "close-button"; // setting ImageKey before adding, makes the image not working openFiles.SelectedTab = tabPage; return(tabPage); }
public void DeleteAnOrphanDestinationFile() { SetupCurrentTestFolder("test-oprhanr-destination-file"); var destinationFileInfo = new KoreFileInfo(Path.Combine(_destinationFolder, _primaryTestFileName)); destinationFileInfo.EnsureExists(); _kontrol.Sync(); Assert.IsFalse(destinationFileInfo.Exists); }
public void SupportMultipleSyncPairs() { _currentTest = Path.Combine(CurrentWorkingFolder, "test-multiple-sync-pairs"); var sourceFolder1 = Path.Combine(_currentTest, "src1"); EnsureFolderExists(sourceFolder1); var sourceFolder2 = Path.Combine(_currentTest, "src2"); EnsureFolderExists(sourceFolder2); var destinationFolder1 = Path.Combine(_currentTest, "dest1"); EnsureFolderExists(destinationFolder1); var destinationFolder2 = Path.Combine(_currentTest, "dest2"); EnsureFolderExists(destinationFolder2); var fileName1 = "file1.txt"; var sourceFileInfo1 = new KoreFileInfo(Path.Combine(sourceFolder1, fileName1)); sourceFileInfo1.EnsureExists(); var fileName2 = "file2.exe"; var sourceFileInfo2 = new KoreFileInfo(Path.Combine(sourceFolder2, fileName2)); sourceFileInfo2.EnsureExists(); _kontrol.Settings.SyncPairs.Add(new SyncPair { Source = sourceFolder1, Destination = destinationFolder1, Level = SyncLevel.Flat }); _kontrol.Settings.SyncPairs.Add(new SyncPair { Source = sourceFolder2, Destination = destinationFolder2, Level = SyncLevel.Flat }); _kontrol.Sync(); var destinationFileInfo1 = new KoreFileInfo(Path.Combine(destinationFolder1, fileName1)); var destinationFileInfo2 = new KoreFileInfo(Path.Combine(destinationFolder2, fileName2)); Assert.IsTrue(destinationFileInfo1.Exists); Assert.IsTrue(destinationFileInfo2.Exists); }
private FullPathNode CreateFullPathTree(KoreFileInfo kfi) { var newNode = new FullPathNode(kfi.FullPath); if (kfi.ChildKfi != null) { foreach (var child in kfi.ChildKfi) { newNode.Nodes.Add(CreateFullPathTree(child)); } } return(newNode); }
public void CopiesContentAtDestinationUnderSourceParentIfLevelIsParent() { SetupCurrentTestFolder("test-sync-options-copy-content", SyncLevel.Parent); var sourceFileInfo = new KoreFileInfo(Path.Combine(_sourceFolder, _primaryTestFileName)); sourceFileInfo.EnsureExists(); _kontrol.Sync(); var destinationFileInfo = new KoreFileInfo(Path.Combine(_destinationFolder, "src", _primaryTestFileName)); Assert.IsTrue(destinationFileInfo.Exists); }
public LayoutForm(KoreFileInfo kfi, TabPage tabPage, IArchiveAdapter parentAdapter, TabPage parentTabPage) { InitializeComponent(); Kfi = kfi; _currentTab = tabPage; _parentTab = parentTabPage; _parentAdapter = parentAdapter; imgLayout.Image = new Bitmap(500, 500); UpdateForm(); UpdateLayout(); }
public void CopyANewSourceFile() { SetupCurrentTestFolder("test-new-source-file"); var sourceFileInfo = new KoreFileInfo(Path.Combine(_sourceFolder, _primaryTestFileName)); sourceFileInfo.EnsureExists(); _kontrol.Sync(); var destinationFileInfo = new KoreFileInfo(Path.Combine(_destinationFolder, _primaryTestFileName)); Assert.IsTrue(destinationFileInfo.Exists); }
// Constructor public TextEditor1ViewModel(KoreFileInfo koreFile) { KoreFile = koreFile; DisplayName = KoreFile.DisplayName; _adapter = KoreFile.Adapter as ITextAdapter; if (_adapter != null) { Entries = new ObservableCollection <TextEntry>(_adapter.Entries); } SelectedEntry = Entries.First(); }
/// <summary> /// Close a Kfi and its corresponding tabs /// </summary> /// <param name="kfi">The initial Kfi to close</param> /// <param name="ignoreChildWarning">Ignore showing child close warning</param> /// <returns>If the closing was successful</returns> private bool CloseFile(KoreFileInfo kfi, bool leaveOpen = false, bool ignoreChildWarning = false) { // Security question, so the user knows that every sub file will be closed if (kfi.ChildKfi != null && kfi.ChildKfi.Count > 0 && !ignoreChildWarning) { var result = MessageBox.Show("Every file opened from this one and below will be closed too. Continue?", "Dependant files", MessageBoxButtons.YesNo); switch (result) { case DialogResult.Yes: break; case DialogResult.No: default: return(false); } } // Save unchanged saves, if wanted if (kfi.HasChanges) { var result = MessageBox.Show($"Changes were made to \"{kfi.FullPath}\" or its opened sub files. Do you want to save those changes?", "Unsaved changes", MessageBoxButtons.YesNoCancel); switch (result) { case DialogResult.Yes: TabControl_SaveTab(this, new SaveTabEventArgs(kfi)); break; case DialogResult.No: break; case DialogResult.Cancel: default: return(false); } } // Remove all tabs related to KFIs CloseOpenTabs(kfi); // Update parent, if existent if (kfi.ParentKfi != null) { var parentTab = GetTabPageForKfi(kfi.ParentKfi); (parentTab.Controls[0] as IArchiveForm).RemoveChildTab(GetTabPageForKfi(kfi)); } // Close all KFIs return(_fileManager.CloseFile(kfi, leaveOpen)); }
private KoreFileInfo ReopenFiles(KoreFileInfo kfi, FullPathNode fullPathTree, string tempFolder, bool isChild) { var guid = Guid.NewGuid().ToString(); // Open this file KoreFileInfo newKfi; if (isChild) { var parentFiles = (kfi.Adapter as IArchiveAdapter)?.Files; var foundAfi = parentFiles.FirstOrDefault(x => x.FileName == fullPathTree.FullPath.Remove(0, kfi.FullPath.Length + 1)); if (foundAfi == null) { throw new InvalidOperationException($"While reopening files, the ArchiveFileInfo with FullPath \"{fullPathTree.FullPath}\" couldn't be found."); } newKfi = LoadFile(new KoreLoadInfo(foundAfi.FileData, foundAfi.FileName) { LeaveOpen = true, Adapter = kfi.Adapter, FileSystem = NodeFactory.FromArchiveFileInfos((kfi.Adapter as IArchiveAdapter).Files) }); // new VirtualFileSystem(kfi.Adapter as IArchiveAdapter, tempFolder) newKfi.ParentKfi = kfi; newKfi.ChildKfi = new List <KoreFileInfo>(); } else { var openedFile = File.Open(fullPathTree.FullPath, FileMode.Open); newKfi = LoadFile(new KoreLoadInfo(openedFile, fullPathTree.FullPath) { LeaveOpen = true, Adapter = kfi.Adapter, FileSystem = NodeFactory.FromDirectory(Path.GetDirectoryName(fullPathTree.FullPath)) }); newKfi.ChildKfi = new List <KoreFileInfo>(); } // Open Childs foreach (var child in fullPathTree.Nodes) { newKfi.ChildKfi.Add(ReopenFiles(newKfi, child, tempFolder, true)); } return(newKfi); }
// Constructor public ImageEditorViewModel(FileManager fileManager, KoreFileInfo koreFile) { _fileManager = fileManager; KoreFile = koreFile; _adapter = KoreFile.Adapter as IImageAdapter; if (_adapter?.BitmapInfos != null) { Bitmaps = new ObservableCollection <BitmapEntry>(_adapter.BitmapInfos.Select(bi => new BitmapEntry(bi))); } SelectedBitmap = Bitmaps?.FirstOrDefault(); SelectedZoomLevel = 1; }
public TextForm(KoreFileInfo kfi, TabPage tabPage, IArchiveAdapter parentAdapter, TabPage parentTabPage, IList <IGameAdapter> gameAdapters) { InitializeComponent(); Kfi = kfi; _currentTab = tabPage; _parentTab = parentTabPage; _parentAdapter = parentAdapter; LoadGameAdapters(gameAdapters); LoadEntries(_textAdapter.Entries); UpdatePreview(); UpdateForm(); }
public void WriteSettings() { _currentTest = Path.Combine(CurrentWorkingFolder, "test5"); EnsureFolderExists(_currentTest); _settingsManager.Data.SyncPairs.Add(new SyncPair { Source = _currentTest, Destination = _currentTest }); var settingsFile = new KoreFileInfo(Path.Combine(_currentTest, "settings.bin")); _kontrol.WriteSettings(settingsFile); Assert.IsTrue(settingsFile.Exists); }
private TabPage GetTabPageForKfi(KoreFileInfo kfi) { if (kfi == null) { return(null); } foreach (TabPage page in openFiles.TabPages) { if (page.Controls[0] is IKuriimuForm kuriimuForm) { if (kuriimuForm.Kfi == kfi) { return(page); } } } return(null); }
public void CopyANewerDestinationFile() { SetupCurrentTestFolder("test-newer-destination-file"); var now = DateTime.Now; var sourceFileInfo = new KoreFileInfo(Path.Combine(_sourceFolder, _primaryTestFileName)); sourceFileInfo.EnsureExists(); sourceFileInfo.LastWriteTime = now.AddSeconds(-1); var destinationFileInfo = new KoreFileInfo(Path.Combine(_destinationFolder, _primaryTestFileName)); destinationFileInfo.EnsureExists(); destinationFileInfo.LastWriteTime = now; _kontrol.Sync(); Assert.AreEqual(now, sourceFileInfo.LastWriteTime); }
public ArchiveForm(KoreFileInfo kfi, TabPage tabPage, IArchiveAdapter parentAdapter, TabPage parentTabPage, string tempFolder, PluginLoader pluginLoader) { InitializeComponent(); // Overwrite window themes //Win32.SetWindowTheme(treDirectories.Handle, "explorer", null); //Win32.SetWindowTheme(lstFiles.Handle, "explorer", null); // Populate image list imlFiles.Images.Add("tree-directory", Resources.tree_directory); imlFiles.Images.Add("tree-directory-open", Resources.tree_directory_open); imlFiles.Images.Add("tree-text-file", Resources.tree_text_file); imlFiles.Images.Add("tree-image-file", Resources.tree_image_file); imlFiles.Images.Add("tree-archive-file", Resources.tree_archive_file); imlFilesLarge.Images.Add("tree-directory", Resources.tree_directory_32); imlFilesLarge.Images.Add("tree-directory-open", Resources.tree_directory_open); imlFilesLarge.Images.Add("tree-text-file", Resources.tree_text_file_32); imlFilesLarge.Images.Add("tree-image-file", Resources.tree_image_file_32); imlFilesLarge.Images.Add("tree-archive-file", Resources.tree_archive_file_32); Kfi = kfi; Kfi.PropertyChanged += Kfi_PropertyChanged; _currentTab = tabPage; _parentTab = parentTabPage; _tempFolder = tempFolder; _subFolder = Guid.NewGuid().ToString(); _childTabs = new List <TabPage>(); _pluginLoader = pluginLoader; if (!Directory.Exists(Path.Combine(tempFolder, _subFolder))) { Directory.CreateDirectory(Path.Combine(tempFolder, _subFolder)); } LoadDirectories(); UpdateForm(); }
public void MakeScanInformationAvailable() { SetupCurrentTestFolder("test-scan-info"); var now = DateTime.Now; var sourceFileInfo = new KoreFileInfo(Path.Combine(_sourceFolder, _primaryTestFileName)); sourceFileInfo.EnsureExists(); sourceFileInfo.LastWriteTime = now; var destinationFileInfo = new KoreFileInfo(Path.Combine(_destinationFolder, _primaryTestFileName)); destinationFileInfo.EnsureExists(); destinationFileInfo.LastWriteTime = now.AddSeconds(-1); _kontrol.Sync(); Assert.AreEqual(1u, _kontrol.SyncInfo.SourceFiles); Assert.AreEqual(1u, _kontrol.SyncInfo.DestinationFiles); Assert.AreEqual(SyncStatus.Complete, _kontrol.SyncInfo.Status); }
private void CloseOpenTabs(KoreFileInfo kfi) { if (kfi.ChildKfi != null) { foreach (var child in kfi.ChildKfi) { CloseOpenTabs(child); } } foreach (TabPage page in openFiles.TabPages) { if (page.Controls[0] is IKuriimuForm kuriimuForm) { if (kuriimuForm.Kfi == kfi) { openFiles.TabPages.Remove(page); break; } } } }
public ImageForm(KoreFileInfo kfi, TabPage tabPage, IArchiveAdapter parentAdapter, TabPage parentTabPage) { InitializeComponent(); Kfi = kfi; _currentTab = tabPage; _parentTab = parentTabPage; _parentAdapter = parentAdapter; try { if (_imageAdapter.BitmapInfos == null) { throw new ArgumentNullException(nameof(_imageAdapter.BitmapInfos)); } if (_imageAdapter.ImageEncodingInfos == null) { throw new ArgumentNullException(nameof(_imageAdapter.ImageEncodingInfos)); } if (_imageAdapter is IIndexedImageAdapter indexAdapter) { if (indexAdapter.PaletteEncodingInfos == null) { throw new ArgumentNullException(nameof(indexAdapter.PaletteEncodingInfos)); } } } catch { throw new InvalidOperationException($"The plugin missed to implement a property."); } _bestBitmaps = _imageAdapter.BitmapInfos.Select(x => (Bitmap)x.Image.Clone()).ToArray(); imbPreview.Image = _imageAdapter.BitmapInfos.FirstOrDefault()?.Image; // Populate format dropdown tsbFormat.DropDownItems.AddRange(_imageAdapter.ImageEncodingInfos?.Select(f => new ToolStripMenuItem { Text = f.EncodingName, Tag = f, Checked = f.EncodingIndex == _selectedBitmapInfo.ImageEncoding.EncodingIndex }).ToArray()); if (tsbFormat.DropDownItems.Count > 0) { foreach (var tsb in tsbFormat.DropDownItems) { ((ToolStripMenuItem)tsb).Click += tsbFormat_Click; } } // populate palette format dropdown if (_imageAdapter is IIndexedImageAdapter indexAdapter2 && _selectedBitmapInfo is IndexedBitmapInfo indexInfo) { tsbPalette.DropDownItems.AddRange(indexAdapter2.PaletteEncodingInfos?.Select(f => new ToolStripMenuItem { Text = f.EncodingName, Tag = f, Checked = f.EncodingIndex == indexInfo.PaletteEncoding.EncodingIndex }).ToArray()); if (tsbPalette.DropDownItems.Count > 0) { foreach (var tsb in tsbPalette.DropDownItems) { ((ToolStripMenuItem)tsb).Click += tsbPalette_Click; } } } tsbImageBorderStyle.DropDownItems.AddRange(Enum.GetNames(typeof(ImageBoxBorderStyle)).Select(s => new ToolStripMenuItem { Image = (Image)Resources.ResourceManager.GetObject(_stylesImages[s]), Text = _stylesText[s], Tag = s }).ToArray()); foreach (var tsb in tsbImageBorderStyle.DropDownItems) { ((ToolStripMenuItem)tsb).Click += tsbImageBorderStyle_Click; } UpdateForm(); UpdatePreview(); UpdateImageList(); }
// TODO: We want to somehow reflect these names and also possibly return a class holding the Type and a DisplayName vs. the plain interface name. /// <summary> /// Load a file using Kore. /// </summary> /// <param name="kli"></param> /// <returns></returns> public KoreFileInfo LoadFile(KoreLoadInfo kli) { if (kli.Adapter == null) { // Select adapter automatically and if failed select it manually var adapter = SelectAdapter(kli) ?? SelectAdapterManually(kli); // If still no adapter was chosen, return if (adapter == null) { return(null); } kli.Adapter = adapter; } // Instantiate a new instance of the adapter // ReSharper disable once SuspiciousTypeConversion.Global kli.Adapter = _pluginLoader.CreateNewAdapter <ILoadFiles>((IPlugin)kli.Adapter); // Load files(s) // TODO: Make KLI contain a StreamInfo of the given file kli.FileData.Position = 0; var streamInfo = new StreamInfo { FileData = kli.FileData, FileName = kli.FileName }; try { // TODO: Subject to remove kli.Adapter.LeaveOpen = kli.LeaveOpen; // Try to load the file via adapter kli.Adapter.Load(streamInfo, kli.FileSystem); } catch (Exception ex) { // Catch any exception thrown by the plugin and expose it var pi = _pluginLoader.GetMetadata <PluginInfoAttribute>(kli.Adapter); var msg = $"The {pi?.Name} plugin failed to load \"{Path.GetFileName(kli.FileName)}\"."; throw new LoadFileException(msg, ex); } // TODO: Subject to remove // Check if the stream still follows the LeaveOpen restriction if (!kli.FileData.CanRead && kli.LeaveOpen) { throw new InvalidOperationException($"Plugin with ID {_pluginLoader.GetMetadata<PluginInfoAttribute>(kli.Adapter).ID} closed the streams while loading the file."); } // Create a KoreFileInfo to keep track of the now open file. var kfi = new KoreFileInfo { StreamFileInfo = streamInfo, HasChanges = false, Adapter = kli.Adapter }; if (kli.TrackFile) { OpenFiles.Add(kfi); } return(kfi); }
//public void SaveFile(KoreSaveInfo ksi) //{ // // Save data with the adapter // var guid = Guid.NewGuid().ToString(); // var fs = new PhysicalFileSystem(RelativePath.Combine(tempFolder, guid)); // if (kfi.Adapter is IMultipleFiles multFileAdapter) // multFileAdapter.FileSystem = fs; // kfi.Adapter.LeaveOpen = false; // var streaminfo = new StreamInfo { FileData = fs.CreateFile(RelativePath.GetFileName(kfi.StreamFileInfo.FileName)), FileName = RelativePath.GetFileName(kfi.StreamFileInfo.FileName) }; // (kfi.Adapter as ISaveFiles).Save(streaminfo, ksi.Version); // // Replace files in adapter // if (kfi.ParentKfi != null) // { // var parentArchiveAdapter = kfi.ParentKfi.Adapter as IArchiveAdapter; // RecursiveUpdate(parentArchiveAdapter, fs, RelativePath.Combine(RelativePath.GetFullPath(tempFolder), guid)); // } // else // { // // TODO: Implement save if no parent is given // // Get intial directory // var initialDir = RelativePath.GetDirectoryName(ksi.Kfi.FullPath); // // Close current initial file // ksi.Kfi.StreamFileInfo.FileData.Close(); // // Close current FileSystem, if set // if (ksi.Kfi is IMultipleFiles multFileAdapter2 && multFileAdapter2.FileSystem != null) // multFileAdapter2.FileSystem.Dispose(); // // All open filestreams of the initial file should be closed by now // if (string.IsNullOrEmpty(ksi.NewSaveLocation)) // { // // Move saved files to intial location // SaveFileSystem(fs, initialDir); // } // else // { // } // // Reopen // } // // Update archive file states in this level // if (kfi.Adapter is IArchiveAdapter archiveAdapter) // foreach (var afi in archiveAdapter.Files) // afi.State = ArchiveFileState.Archived; // // Update archive file states up the parent tree // if (kfi.ParentKfi != null) // kfi.UpdateState(ArchiveFileState.Replaced); //} /// <summary> /// Closes an open file. /// </summary> /// <param name="kfi">The file to be closed.</param> /// <param name="leaveFileStreamOpen">If the file stream should be left open.</param> /// <returns>True if file was closed, False otherwise.</returns> public bool CloseFile(KoreFileInfo kfi, bool leaveFileStreamOpen = false) { return(CloseFile(kfi, leaveFileStreamOpen, true)); }
public CloseTabEventArgs(KoreFileInfo kfi) { Kfi = kfi; }