private void CopyToClipboard(object sender, RoutedEventArgs e) { try { MimeType[] mimeTypes = null; if (_lastSelectedBlock != null) { mimeTypes = _editor.GetSupportedExportMimeTypes(_lastSelectedBlock); } if (mimeTypes != null && mimeTypes.Contains(MimeType.OFFICE_CLIPBOARD)) { // export block to a file var localFolder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); var clipboardPath = Path.Combine(localFolder, "MyScript", "tmp/clipboard.gvml"); var drawer = new ImageDrawer(); drawer.ImageLoader = UcEditor.ImageLoader; _editor.Export_(_lastSelectedBlock, clipboardPath.ToString(), MimeType.OFFICE_CLIPBOARD, drawer); // read back exported data var clipboardData = File.ReadAllBytes(clipboardPath); var clipboardStream = new MemoryStream(clipboardData); // store the data into clipboard Clipboard.SetData(MimeTypeF.GetTypeName(MimeType.OFFICE_CLIPBOARD), clipboardStream); } } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error); } }
public void SaveImage(string path) { if ((_image != null) && !string.IsNullOrWhiteSpace(path)) { BitmapEncoder encoder = null; var pos = path.LastIndexOf('.'); if (pos >= 0) { var ext = path.Substring(pos)?.ToLower(); if (!string.IsNullOrWhiteSpace(ext)) { string[] jpgExtensions = MimeTypeF.GetFileExtensions(MimeType.JPEG)?.Split(','); string[] pngExtensions = MimeTypeF.GetFileExtensions(MimeType.PNG)?.Split(','); string[] gifExtensions = MimeTypeF.GetFileExtensions(MimeType.GIF)?.Split(','); if ((pngExtensions != null) && pngExtensions.Contains(ext)) { encoder = new PngBitmapEncoder(); } else if ((jpgExtensions != null) && jpgExtensions.Contains(ext)) { encoder = new JpegBitmapEncoder(); } else if ((gifExtensions != null) && gifExtensions.Contains(ext)) { encoder = new GifBitmapEncoder(); } } } if (encoder != null) { encoder.Frames.Add(BitmapFrame.Create(_image)); using (var fileStream = new System.IO.FileStream(path, System.IO.FileMode.Create)) { encoder.Save(fileStream); } } else { throw new Exception("No bitmap encoder available."); } } _image = null; }
public ImportDialog(Window parent, string title, MimeType[] mimeTypes) { InitializeComponent(); Owner = parent; Title = title; ResultTextBox.Text = ""; MimeTypeComboBox.Items.Clear(); foreach (var mimeType in mimeTypes) { MimeTypeComboBox.Items.Add(MimeTypeF.GetTypeName(mimeType)); } MimeTypeComboBox.SelectedIndex = 0; }
private async void Popup_CommandHandler_OfficeClipboard(FlyoutCommand command) { try { MimeType[] mimeTypes = null; if (_lastSelectedBlock != null) { mimeTypes = _editor.GetSupportedExportMimeTypes(_lastSelectedBlock); } if (mimeTypes != null && mimeTypes.Contains(MimeType.OFFICE_CLIPBOARD)) { // export block to a file var localFolder = ApplicationData.Current.LocalFolder.Path; var clipboardPath = System.IO.Path.Combine(localFolder.ToString(), "tmp/clipboard.gvml"); var drawer = new ImageDrawer(_editor.Renderer.DpiX, _editor.Renderer.DpiY); drawer.ImageLoader = UcEditor.ImageLoader; _editor.Export_(_lastSelectedBlock, clipboardPath.ToString(), MimeType.OFFICE_CLIPBOARD, drawer); // read back exported data var clipboardData = File.ReadAllBytes(clipboardPath); var clipboardStream = new MemoryStream(clipboardData); // store the data into clipboard Windows.ApplicationModel.DataTransfer.Clipboard.Clear(); var clipboardContent = new Windows.ApplicationModel.DataTransfer.DataPackage(); clipboardContent.SetData(MimeTypeF.GetTypeName(MimeType.OFFICE_CLIPBOARD), clipboardStream.AsRandomAccessStream()); Windows.ApplicationModel.DataTransfer.Clipboard.SetContent(clipboardContent); } } catch (Exception ex) { MessageDialog msgDialog = new MessageDialog(ex.ToString()); await msgDialog.ShowAsync(); } }
private void Export(object sender, RoutedEventArgs e) { var part = _editor.Part; if (part == null) { return; } var onRawContent = part.Type == "Raw Content"; var contentBlock = onRawContent ? _editor.GetRootBlock() : _lastSelectedBlock; if (contentBlock == null) { return; } var mimeTypes = _editor.GetSupportedExportMimeTypes(contentBlock); if (mimeTypes == null) { return; } if (mimeTypes.Count() == 0) { return; } string filterList = ""; for (int i = 0; i < mimeTypes.Count(); ++i) { // format filter as "name|extension1;extension2;...;extensionX" var extensions = MimeTypeF.GetFileExtensions(mimeTypes[i]).Split(','); string filter = MimeTypeF.GetName(mimeTypes[i]) + "|"; for (int j = 0; j < extensions.Count(); ++j) { if (j > 0) { filter += ";"; } filter += "*" + extensions[j]; } if (i > 0) { filterList += "|"; } filterList += filter; } // Show save dialog { Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); dlg.FileName = "Interactive Ink Document"; // Default file name dlg.DefaultExt = System.String.Empty; // Default file extension dlg.Filter = filterList; // Filter files by extension bool?result = dlg.ShowDialog(); if ((bool)result) { var filePath = dlg.FileName; var filterIndex = dlg.FilterIndex - 1; var extensions = MimeTypeF.GetFileExtensions(mimeTypes[filterIndex]).Split(','); if (extensions.Count() > 0) { int ext; for (ext = 0; ext < extensions.Count(); ++ext) { if (filePath.EndsWith(extensions[ext], StringComparison.OrdinalIgnoreCase)) { break; } } if (ext >= extensions.Count()) { filePath += extensions[0]; } try { var drawer = new ImageDrawer(); drawer.ImageLoader = UcEditor.ImageLoader; _editor.WaitForIdle(); _editor.Export_(contentBlock, filePath, drawer); System.Diagnostics.Process.Start(filePath); } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } } } }
private async System.Threading.Tasks.Task <string> ChooseExportFilename(MimeType[] mimeTypes) { var mimeTypeTextBlock = new TextBlock { Text = "Choose a mime type", MaxLines = 1, TextWrapping = TextWrapping.NoWrap, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 0, 0), Width = 300, }; var mimeTypeComboBox = new ComboBox { IsTextSearchEnabled = true, SelectedIndex = -1, Margin = new Thickness(0, 5, 0, 0), Width = 300 }; foreach (var mimeType in mimeTypes) { mimeTypeComboBox.Items.Add(MimeTypeF.GetTypeName(mimeType)); } mimeTypeComboBox.SelectedIndex = 0; var nameTextBlock = new TextBlock { Text = "Enter Export File Name", MaxLines = 1, TextWrapping = TextWrapping.NoWrap, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 10, 0, 0), Width = 300 }; var nameTextBox = new TextBox { Text = "", AcceptsReturn = false, MaxLength = 1024 * 1024, TextWrapping = TextWrapping.NoWrap, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 5, 0, 10), Width = 300 }; var panel = new StackPanel { Margin = new Thickness(10), HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, }; panel.Children.Add(mimeTypeTextBlock); panel.Children.Add(mimeTypeComboBox); panel.Children.Add(nameTextBlock); panel.Children.Add(nameTextBox); var dialog = new ContentDialog { Title = "Export", Content = panel, PrimaryButtonText = "OK", SecondaryButtonText = "Cancel", IsPrimaryButtonEnabled = true, IsSecondaryButtonEnabled = true }; var result = await dialog.ShowAsync(); if (result == ContentDialogResult.Primary) { var fileName = nameTextBox.Text; var extIndex = mimeTypeComboBox.SelectedIndex; var extensions = MimeTypeF.GetFileExtensions(mimeTypes[extIndex]).Split(','); int ext; for (ext = 0; ext < extensions.Count(); ++ext) { if (fileName.EndsWith(extensions[ext], StringComparison.OrdinalIgnoreCase)) { break; } } if (ext >= extensions.Count()) { fileName += extensions[0]; } return(fileName); } return(null); }
private async System.Threading.Tasks.Task <Tuple <int, string> > EnterImportData(string title, MimeType[] mimeTypes) { var mimeTypeTextBlock = new TextBlock { Text = "Choose a mime type", MaxLines = 1, TextWrapping = TextWrapping.NoWrap, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 0, 0), Width = 300, }; var mimeTypeComboBox = new ComboBox { IsTextSearchEnabled = true, SelectedIndex = -1, Margin = new Thickness(0, 5, 0, 0), Width = 300 }; foreach (var mimeType in mimeTypes) { mimeTypeComboBox.Items.Add(MimeTypeF.GetTypeName(mimeType)); } mimeTypeComboBox.SelectedIndex = 0; var dataTextBlock = new TextBlock { Text = "Enter some text", MaxLines = 1, TextWrapping = TextWrapping.NoWrap, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 10, 0, 0), Width = 300 }; var dataTextBox = new TextBox { Text = "", AcceptsReturn = false, MaxLength = 1024 * 1024, TextWrapping = TextWrapping.NoWrap, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 5, 0, 10), Width = 300 }; var panel = new StackPanel { Margin = new Thickness(10), HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, }; panel.Children.Add(mimeTypeTextBlock); panel.Children.Add(mimeTypeComboBox); panel.Children.Add(dataTextBlock); panel.Children.Add(dataTextBox); var dialog = new ContentDialog { Title = title, Content = panel, PrimaryButtonText = "OK", SecondaryButtonText = "Cancel", IsPrimaryButtonEnabled = true, IsSecondaryButtonEnabled = true }; var result = await dialog.ShowAsync(); if (result == ContentDialogResult.Primary) { return(new Tuple <int, string>(mimeTypeComboBox.SelectedIndex, dataTextBox.Text)); } return(null); }
private async System.Threading.Tasks.Task <Tuple <int, string> > EnterImportData(string title, MimeType[] mimeTypes) { const bool defaultWrapping = false; const double defaultWidth = 400; var mimeTypeTextBlock = new TextBlock { Text = "Choose a mime type", MaxLines = 1, TextWrapping = TextWrapping.NoWrap, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 0, 0), Width = defaultWidth, }; var mimeTypeComboBox = new ComboBox { IsTextSearchEnabled = true, SelectedIndex = -1, Margin = new Thickness(0, 5, 0, 5), Width = defaultWidth }; foreach (var mimeType in mimeTypes) { mimeTypeComboBox.Items.Add(MimeTypeF.GetTypeName(mimeType)); } mimeTypeComboBox.SelectedIndex = 0; var dataTextBlock = new TextBlock { Text = "Enter some text", MaxLines = 1, TextWrapping = TextWrapping.NoWrap, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 5, 0, 0), Width = defaultWidth }; var dataTextBox = new TextBox { Text = "", AcceptsReturn = true, TextWrapping = (defaultWrapping ? TextWrapping.Wrap : TextWrapping.NoWrap), HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, FontSize = 12, Margin = new Thickness(0), Width = defaultWidth, Height = 200, }; ScrollViewer.SetVerticalScrollBarVisibility(dataTextBox, ScrollBarVisibility.Auto); ScrollViewer.SetHorizontalScrollBarVisibility(dataTextBox, ScrollBarVisibility.Auto); var dataWrappingCheckBox = new CheckBox { Content = "Wrapping", HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 0, 5), Width = defaultWidth, IsChecked = defaultWrapping, }; dataWrappingCheckBox.Checked += new RoutedEventHandler((sender, e) => { dataTextBox.TextWrapping = TextWrapping.Wrap; }); dataWrappingCheckBox.Unchecked += new RoutedEventHandler((sender, e) => { dataTextBox.TextWrapping = TextWrapping.NoWrap; }); var panel = new StackPanel { Margin = new Thickness(10), HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, }; panel.Children.Add(mimeTypeTextBlock); panel.Children.Add(mimeTypeComboBox); panel.Children.Add(dataTextBlock); panel.Children.Add(dataTextBox); panel.Children.Add(dataWrappingCheckBox); var dialog = new ContentDialog { Title = title, Content = panel, PrimaryButtonText = "OK", SecondaryButtonText = "Cancel", IsPrimaryButtonEnabled = true, IsSecondaryButtonEnabled = true }; var result = await dialog.ShowAsync(); if (result == ContentDialogResult.Primary) { // Convert '\r' to '\n' // https://stackoverflow.com/questions/42867242/uwp-textbox-puts-r-only-how-to-set-linebreak var text = dataTextBox.Text.Replace('\r', '\n'); return(new Tuple <int, string>(mimeTypeComboBox.SelectedIndex, text)); } return(null); }