private void btnPaste_Click(object sender, EventArgs e) { if (selectedExport == null) { logger.Trace("no selected export"); return; } GpkExport copyExport = (GpkExport)Clipboard.GetData(exportFormat.Name); if (copyExport == null) { logger.Info("copy paste fail"); return; } logger.Trace(Settings.Default.CopyMode); string option = ""; switch (Settings.Default.CopyMode) { case "dataprops": DataTools.ReplaceProperties(copyExport, selectedExport); DataTools.ReplaceData(copyExport, selectedExport); option = "data and properties"; break; case "data": DataTools.ReplaceData(copyExport, selectedExport); option = "data"; break; case "props": DataTools.ReplaceProperties(copyExport, selectedExport); option = "properties"; break; default: logger.Info("Your setting file is broken. Go to settings windows and select a copymode."); break; } copyExport.GetDataSize(); treeMain_AfterSelect(treeMain, new TreeViewEventArgs(treeMain.SelectedNode)); logger.Info("Pasted the {0} of {1} to {2}", option, copyExport.UID, selectedExport.UID); }
private void btnReplace_Click(object sender, EventArgs e) { if (selectedExport == null) { logger.Trace("no selected export"); return; } if (selectedExport.Data == null) { logger.Trace("no export data"); return; } String[] files = MiscFuncs.GenerateOpenDialog(); if (files.Length == 0) { return; } string path = files[0]; if (File.Exists(path)) { byte[] buffer = File.ReadAllBytes(path); if (Settings.Default.PatchMode) { if (treeMain.SelectedNode.Parent.Parent == null) { return; } int packageIndex = Convert.ToInt32(treeMain.SelectedNode.Parent.Parent.Name); if (buffer.Length > selectedExport.Data.Length) { //Too long, not possible without rebuiling the gpk logger.Info("File size too big for PatchMode. Size: " + buffer.Length + " Maximum Size: " + selectedExport.Data.Length); return; } //selectedExport.data = buffer; Array.Copy(buffer, selectedExport.Data, buffer.Length); changedExports[packageIndex].Add(selectedExport); } else { //Rebuild Mode //We force the rebuilder to recalculate the size. (atm we dont know how big the propertys are) logger.Trace(String.Format("rebuild mode old size {0} new size {1}", selectedExport.Data.Length, buffer.Length)); selectedExport.Data = buffer; selectedExport.GetDataSize(); selectedPackage.Changes = true; } logger.Info(String.Format("Replaced the data of {0} successfully! Dont forget to save.", selectedExport.ObjectName)); } }
public static void ImportOgg(GpkExport export, string oggfile) { Soundwave wave = new Soundwave(); wave.oggfile = oggfile; if (oggfile != "fake") { wave.oggdata = File.ReadAllBytes(oggfile); } else { wave.oggdata = new byte[1]; } export.Payload = wave; //Refill data buffer with normal soundwave export.Data = new byte[wave.GetSize()]; BinaryWriter writer = new BinaryWriter(new MemoryStream(export.Data)); wave.WriteData(writer, null, export); writer.Close(); writer.Dispose(); export.GetDataSize(); if (oggfile == "fake") { logger.Info(String.Format("Fake soundfile was imported to {0}!", export.UID)); return; } //manipulate the sound duration VorbisReader vorbis = null; vorbis = new VorbisReader(new MemoryStream(wave.oggdata), true); /* * ObjectName: Duration Type: FloatProperty Value: 0,4694785 * ObjectName: NumChannels Type: IntProperty Value: 1 * ObjectName: SampleRate Type: IntProperty Value: 22050 * ObjectName: SampleDataSize Type: IntProperty Value: 20704 */ foreach (IProperty prop in export.Properties) { if (prop is GpkFloatProperty) { GpkFloatProperty floatProperty = (GpkFloatProperty)prop; if (floatProperty.name == "Duration") { floatProperty.value = (float)vorbis.TotalTime.TotalSeconds; } } else if (prop is GpkIntProperty) { GpkIntProperty intProperty = (GpkIntProperty)prop; if (intProperty.name == "NumChannels") { intProperty.value = vorbis.Channels; } if (intProperty.name == "SampleRate") { intProperty.value = vorbis.SampleRate; } if (intProperty.name == "SampleDataSize") { intProperty.value = wave.oggdata.Length; } } } logger.Info(String.Format("Soundfile was imported to {0}!", export.UID)); }