Exemplo n.º 1
0
        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;
		}