using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using MaterialIcons; using F4SD_AdaptableIcon.Enums; using C4IT.Logging; using static C4IT.Logging.cLogManager; using System.IO; using System.Threading; namespace F4SD_AdaptableIcon_Export { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { private List iconInformation = new List(); public MainWindow() => InitializeComponent(); protected override void OnInitialized(EventArgs e) { base.OnInitialized(e); InstantiateIconInformation(); } private void InstantiateIconInformation() { List IconInformation = new List(); foreach (enumInternIcons internIcon in Enum.GetValues(typeof(enumInternIcons))) { cAdvancedIconInformation tempIconInformation = new cAdvancedIconInformation() { IsVisible = true }; tempIconInformation.UpdateIconInformation(internIcon); IconInformation.Add(tempIconInformation); } foreach (MaterialIconType materialIcon in Enum.GetValues(typeof(MaterialIconType))) { cAdvancedIconInformation tempIconInformation = new cAdvancedIconInformation() { IsVisible = true }; tempIconInformation.UpdateIconInformation(materialIcon); IconInformation.Add(tempIconInformation); } iconInformation = IconInformation; //IconListUC.IconInformation = IconInformation; //IconGridUC.IconInformation = IconInformation; } private void folderPathButton_Click(object sender, RoutedEventArgs e) { try { var openFileDlg = new System.Windows.Forms.OpenFileDialog(); openFileDlg.FileName = folderPathTextBox.Text; openFileDlg.ValidateNames = false; openFileDlg.CheckFileExists = false; openFileDlg.CheckPathExists = true; openFileDlg.FileName = "select a folder."; var result = openFileDlg.ShowDialog(); if (result is System.Windows.Forms.DialogResult.OK) { var _path = openFileDlg.FileName; _path = System.IO.Path.GetDirectoryName(_path); if (System.IO.Directory.Exists(_path)) folderPathTextBox.Text = _path; } } catch (Exception E) { LogException(E); } } public void WriteToPng(UIElement element, string filename) { var rect = new Rect(element.RenderSize); var visual = new DrawingVisual(); using (var dc = visual.RenderOpen()) { dc.DrawRectangle(new VisualBrush(element), null, rect); } var bitmap = new RenderTargetBitmap( (int)rect.Width, (int)rect.Height, 96, 96, PixelFormats.Default); bitmap.Render(visual); var encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bitmap)); string directoryPath = System.IO.Path.GetDirectoryName(filename); Directory.CreateDirectory(directoryPath); using (var file = File.OpenWrite(filename)) { encoder.Save(file); } } private async void exportButton_Click(object sender, RoutedEventArgs e) { foreach (cAdvancedIconInformation icon in iconInformation) { exampleIcon.Visibility = Visibility.Collapsed; string strFolder = ""; if (icon.InternIcon != null) { exampleIcon.SelectedMaterialIcon = null; exampleIcon.SelectedInternIcon = icon.InternIcon; strFolder = @folderPathTextBox.Text + "\\" + txtSize.Text + "x" + txtSize.Text + "\\intern\\" + exampleIcon.SelectedInternIcon.ToString() + ".png"; } else if (icon.MaterialIcon != null) { exampleIcon.SelectedInternIcon = null; exampleIcon.SelectedMaterialIcon = icon.MaterialIcon; strFolder = @folderPathTextBox.Text + "\\" + txtSize.Text + "x" + txtSize.Text + "\\material\\" + exampleIcon.SelectedMaterialIcon.ToString() + ".png"; } else continue; exampleIcon.Visibility = Visibility.Visible; await Task.Delay(100); WriteToPng(this.exampleIcon, strFolder); } } private void pixSize_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { var size = (int)e.NewValue; if (txtSize != null) txtSize.Text = size.ToString(); if (exampleIcon != null) { exampleIcon.IconWidth = size; exampleIcon.IconHeight = size; } } private void folderPathTextBox_TextChanged(object sender, TextChangedEventArgs e) { if (folderPathTextBox.Text != String.Empty) { exportButton.IsEnabled = true; } else { exportButton.IsEnabled = false; } } } }