public bool Run(OpenFileDialogData data) { var parent = data.TransientFor ?? MessageService.RootWindow; CommonFileDialog dialog; if (data.Action == FileChooserAction.Open) { dialog = new CustomCommonOpenFileDialog { EnsureFileExists = true }; } else { dialog = new CustomCommonSaveFileDialog(); } dialog.SetCommonFormProperties(data); CustomCommonFileDialogComboBox encodingCombo = null; if (data.ShowEncodingSelector) { var group = new CommonFileDialogGroupBox("encoding", "Encoding:"); encodingCombo = new CustomCommonFileDialogComboBox(); BuildEncodingsCombo(encodingCombo, data.Action != FileChooserAction.Save, data.Encoding); group.Items.Add(encodingCombo); dialog.Controls.Add(group); encodingCombo.SelectedIndexChanged += (sender, e) => { if (encodingCombo.SelectedIndex == encodingCombo.Items.Count - 1) { var dlg = new System.Windows.Window { Title = "Choose encodings", Content = new SelectEncodingControl(), SizeToContent = SizeToContent.WidthAndHeight }; if (dlg.ShowDialog().Value) { BuildEncodingsCombo(encodingCombo, data.Action != FileChooserAction.Save, data.Encoding); dialog.ApplyControlPropertyChange("Items", encodingCombo); } } }; } CustomCommonFileDialogComboBox viewerCombo = null; CommonFileDialogCheckBox closeSolution = null; if (data.ShowViewerSelector && data.Action == FileChooserAction.Open) { var group = new CommonFileDialogGroupBox("openWith", "Open with:"); viewerCombo = new CustomCommonFileDialogComboBox { Enabled = false }; group.Items.Add(viewerCombo); dialog.Controls.Add(group); if (encodingCombo != null || IdeApp.Workspace.IsOpen) { viewerCombo.SelectedIndexChanged += (o, e) => { bool solutionWorkbenchSelected = ((ViewerComboItem)viewerCombo.Items [viewerCombo.SelectedIndex]).Viewer == null; if (closeSolution != null) { closeSolution.Visible = solutionWorkbenchSelected; } if (encodingCombo != null) { encodingCombo.Enabled = !solutionWorkbenchSelected; } }; } if (IdeApp.Workspace.IsOpen) { var group2 = new CommonFileDialogGroupBox(); // "Close current workspace" is too long and splits the text on 2 lines. closeSolution = new CommonFileDialogCheckBox("Close workspace", true) { Visible = false }; group2.Items.Add(closeSolution); dialog.Controls.Add(group2); } dialog.SelectionChanged += (sender, e) => { try { var files = GetSelectedItems(dialog); var file = files.Count == 0 ? null : files[0]; bool hasBench = FillViewers(viewerCombo, file); if (closeSolution != null) { closeSolution.Visible = hasBench; } if (encodingCombo != null) { encodingCombo.Enabled = !hasBench; } dialog.ApplyControlPropertyChange("Items", viewerCombo); } catch (Exception ex) { LoggingService.LogInternalError(ex); } }; } if (!GdkWin32.RunModalWin32Dialog(dialog, parent)) { return(false); } dialog.GetCommonFormProperties(data); if (encodingCombo != null) { data.Encoding = ((EncodingComboItem)encodingCombo.Items [encodingCombo.SelectedIndex]).Encoding; } if (viewerCombo != null) { if (closeSolution != null) { data.CloseCurrentWorkspace = closeSolution.Visible && closeSolution.IsChecked; } int index = viewerCombo.SelectedIndex; if (index != -1) { data.SelectedViewer = ((ViewerComboItem)viewerCombo.Items [index]).Viewer; } } return(true); }
public bool Run (OpenFileDialogData data) { var parent = data.TransientFor ?? MessageService.RootWindow; CommonFileDialog dialog; if (data.Action == FileChooserAction.Open) { dialog = new CustomCommonOpenFileDialog { EnsureFileExists = true }; } else dialog = new CustomCommonSaveFileDialog (); dialog.SetCommonFormProperties (data); CustomCommonFileDialogComboBox encodingCombo = null; if (data.ShowEncodingSelector) { var group = new CommonFileDialogGroupBox ("encoding", "Encoding:"); encodingCombo = new CustomCommonFileDialogComboBox (); BuildEncodingsCombo (encodingCombo, data.Action != FileChooserAction.Save, data.Encoding); group.Items.Add (encodingCombo); dialog.Controls.Add (group); encodingCombo.SelectedIndexChanged += (sender, e) => { if (encodingCombo.SelectedIndex == encodingCombo.Items.Count - 1) { var dlg = new System.Windows.Window { Title = "Choose encodings", Content = new SelectEncodingControl(), SizeToContent = SizeToContent.WidthAndHeight }; if (dlg.ShowDialog ().Value) { BuildEncodingsCombo (encodingCombo, data.Action != FileChooserAction.Save, data.Encoding); dialog.ApplyControlPropertyChange ("Items", encodingCombo); } } }; } CustomCommonFileDialogComboBox viewerCombo = null; CommonFileDialogCheckBox closeSolution = null; if (data.ShowViewerSelector && data.Action == FileChooserAction.Open) { var group = new CommonFileDialogGroupBox ("openWith", "Open with:"); viewerCombo = new CustomCommonFileDialogComboBox { Enabled = false }; group.Items.Add (viewerCombo); dialog.Controls.Add (group); if (encodingCombo != null || IdeApp.Workspace.IsOpen) { viewerCombo.SelectedIndexChanged += (o, e) => { bool solutionWorkbenchSelected = ((ViewerComboItem)viewerCombo.Items [viewerCombo.SelectedIndex]).Viewer == null; if (closeSolution != null) closeSolution.Visible = solutionWorkbenchSelected; if (encodingCombo != null) encodingCombo.Enabled = !solutionWorkbenchSelected; }; } if (IdeApp.Workspace.IsOpen) { var group2 = new CommonFileDialogGroupBox (); // "Close current workspace" is too long and splits the text on 2 lines. closeSolution = new CommonFileDialogCheckBox ("Close workspace", true) { Visible = false }; group2.Items.Add (closeSolution); dialog.Controls.Add (group2); } dialog.SelectionChanged += (sender, e) => { try { var files = GetSelectedItems (dialog); var file = files.Count == 0 ? null : files[0]; bool hasBench = FillViewers (viewerCombo, file); if (closeSolution != null) closeSolution.Visible = hasBench; if (encodingCombo != null) encodingCombo.Enabled = !hasBench; dialog.ApplyControlPropertyChange ("Items", viewerCombo); } catch (Exception ex) { LoggingService.LogInternalError (ex); } }; } if (!GdkWin32.RunModalWin32Dialog (dialog, parent)) return false; dialog.GetCommonFormProperties (data); if (encodingCombo != null) data.Encoding = ((EncodingComboItem)encodingCombo.Items [encodingCombo.SelectedIndex]).Encoding; if (viewerCombo != null) { if (closeSolution != null) data.CloseCurrentWorkspace = closeSolution.Visible && closeSolution.IsChecked; int index = viewerCombo.SelectedIndex; if (index != -1) data.SelectedViewer = ((ViewerComboItem)viewerCombo.Items [index]).Viewer; } return true; }