diff --git a/.idea/.idea.DiscImageChef/.idea/contentModel.xml b/.idea/.idea.DiscImageChef/.idea/contentModel.xml
index 3cd0d2e3e..47ff7cbac 100644
--- a/.idea/.idea.DiscImageChef/.idea/contentModel.xml
+++ b/.idea/.idea.DiscImageChef/.idea/contentModel.xml
@@ -1623,6 +1623,8 @@
+
+
diff --git a/DiscImageChef.Gui/Forms/frmImageConvert.xeto b/DiscImageChef.Gui/Forms/frmImageConvert.xeto
new file mode 100644
index 000000000..43372d9cd
--- /dev/null
+++ b/DiscImageChef.Gui/Forms/frmImageConvert.xeto
@@ -0,0 +1,240 @@
+
+
\ No newline at end of file
diff --git a/DiscImageChef.Gui/Forms/frmImageConvert.xeto.cs b/DiscImageChef.Gui/Forms/frmImageConvert.xeto.cs
new file mode 100644
index 000000000..881da49f4
--- /dev/null
+++ b/DiscImageChef.Gui/Forms/frmImageConvert.xeto.cs
@@ -0,0 +1,1259 @@
+// /***************************************************************************
+// The Disc Image Chef
+// ----------------------------------------------------------------------------
+//
+// Filename : frmImageConvert.xeto.cs
+// Author(s) : Natalia Portillo
+//
+// Component : Image conversion window.
+//
+// --[ Description ] ----------------------------------------------------------
+//
+// Implements converting media image.
+//
+// --[ License ] --------------------------------------------------------------
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General public License for more details.
+//
+// You should have received a copy of the GNU General public License
+// along with this program. If not, see ;http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+// Copyright © 2011-2018 Natalia Portillo
+// ****************************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Xml.Serialization;
+using DiscImageChef.CommonTypes;
+using DiscImageChef.CommonTypes.Enums;
+using DiscImageChef.CommonTypes.Interfaces;
+using DiscImageChef.CommonTypes.Metadata;
+using DiscImageChef.CommonTypes.Structs;
+using DiscImageChef.Console;
+using DiscImageChef.Core;
+using Eto.Forms;
+using Eto.Serialization.Xaml;
+using Schemas;
+using ImageInfo = DiscImageChef.CommonTypes.Structs.ImageInfo;
+using Version = DiscImageChef.CommonTypes.Interop.Version;
+
+namespace DiscImageChef.Gui.Forms
+{
+ public class frmImageConvert : Form
+ {
+ bool cancel;
+ CICMMetadataType cicmMetadata;
+ List dumpHardware;
+ IMediaImage inputFormat;
+
+ public frmImageConvert(IMediaImage inputFormat, string imageSource)
+ {
+ this.inputFormat = inputFormat;
+ XamlReader.Load(this);
+ cancel = false;
+
+ txtSource.Text = imageSource;
+ btnCreator.Visible = !string.IsNullOrWhiteSpace(inputFormat.Info.Creator);
+ btnMediaTitle.Visible = !string.IsNullOrWhiteSpace(inputFormat.Info.MediaTitle);
+ btnComments.Visible = !string.IsNullOrWhiteSpace(inputFormat.Info.Comments);
+ btnMediaManufacturer.Visible = !string.IsNullOrWhiteSpace(inputFormat.Info.MediaManufacturer);
+ btnMediaModel.Visible = !string.IsNullOrWhiteSpace(inputFormat.Info.MediaModel);
+ btnMediaSerialNumber.Visible = !string.IsNullOrWhiteSpace(inputFormat.Info.MediaSerialNumber);
+ btnMediaBarcode.Visible = !string.IsNullOrWhiteSpace(inputFormat.Info.MediaBarcode);
+ btnMediaPartNumber.Visible = !string.IsNullOrWhiteSpace(inputFormat.Info.MediaPartNumber);
+ btnMediaSequence.Visible =
+ inputFormat.Info.MediaSequence != 0 && inputFormat.Info.LastMediaSequence != 0;
+ btnLastMediaSequence.Visible =
+ inputFormat.Info.MediaSequence != 0 && inputFormat.Info.LastMediaSequence != 0;
+ btnDriveManufacturer.Visible = !string.IsNullOrWhiteSpace(inputFormat.Info.DriveManufacturer);
+ btnDriveModel.Visible = !string.IsNullOrWhiteSpace(inputFormat.Info.DriveModel);
+ btnDriveSerialNumber.Visible = !string.IsNullOrWhiteSpace(inputFormat.Info.DriveSerialNumber);
+ btnDriveFirmwareRevision.Visible = !string.IsNullOrWhiteSpace(inputFormat.Info.DriveFirmwareRevision);
+
+ ObservableCollection lstPlugins = new ObservableCollection();
+ PluginBase plugins = GetPluginBase.Instance;
+ foreach(IWritableImage plugin in
+ plugins.WritableImages.Values.Where(p => p.SupportedMediaTypes.Contains(inputFormat.Info.MediaType)))
+ lstPlugins.Add(plugin);
+ cmbFormat.ItemTextBinding = Binding.Property((IWritableImage p) => p.Name);
+ cmbFormat.ItemKeyBinding = Binding.Property((IWritableImage p) => p.Id.ToString());
+ cmbFormat.DataStore = lstPlugins;
+
+ btnCicmXmlFromImage.Visible = inputFormat.CicmMetadata != null;
+ btnResumeFileFromImage.Visible = inputFormat.DumpHardware != null && inputFormat.DumpHardware.Any();
+ cicmMetadata = inputFormat.CicmMetadata;
+ dumpHardware = inputFormat.DumpHardware != null && inputFormat.DumpHardware.Any()
+ ? inputFormat.DumpHardware
+ : null;
+
+ txtCicmXml.Text = cicmMetadata == null ? "" : "";
+ txtResumeFile.Text = dumpHardware == null ? "" : "";
+ }
+
+ protected void OnBtnStart(object sender, EventArgs e)
+ {
+ if(!(cmbFormat.SelectedValue is IWritableImage plugin))
+ {
+ MessageBox.Show("Error trying to find selected plugin", MessageBoxType.Error);
+ return;
+ }
+
+ new Thread(DoWork).Start(plugin);
+ }
+
+ void DoWork(object plugin)
+ {
+ bool warning = false;
+ if(!(plugin is IWritableImage outputFormat))
+ {
+ MessageBox.Show("Error trying to find selected plugin", MessageBoxType.Error);
+ return;
+ }
+
+ List