void ShowIncorretEolMarkers (string fileName, bool multiple) { RemoveMessageBar (); messageOverlayWindow = new OverlayMessageWindow (); var hbox = new HBox (); hbox.Spacing = 8; var image = new HoverCloseButton (); hbox.PackStart (image, false, false, 0); var label = new Label (string.Format ("This file has line endings ({0}) which differ from the policy settings ({1}).", GetEolString (DetectedEolMarker), GetEolString (textEditor.Options.DefaultEolMarker))); var color = (Mono.TextEditor.HslColor)textEditor.ColorStyle.NotificationText.Foreground; label.ModifyFg (StateType.Normal, color); int w, h; label.Layout.GetPixelSize (out w, out h); label.Ellipsize = Pango.EllipsizeMode.End; hbox.PackStart (label, true, true, 0); var okButton = new Button (Gtk.Stock.Ok); okButton.WidthRequest = 60; hbox.PackEnd (okButton, false, false, 0); var list = new List<string> (); list.Add (string.Format ("Convert to {0} line endings", GetEolString (textEditor.Options.DefaultEolMarker))); if (multiple) list.Add (string.Format ("Convert all files to {0} line endings", GetEolString (textEditor.Options.DefaultEolMarker))); list.Add (string.Format ("Keep {0} line endings", GetEolString (DetectedEolMarker))); if (multiple) list.Add (string.Format ("Keep {0} line endings in all files", GetEolString (DetectedEolMarker))); var combo = new ComboBox (list.ToArray ()); combo.Active = 0; hbox.PackEnd (combo, false, false, 0); var container = new HBox (); const int containerPadding = 8; container.PackStart (hbox, true, true, containerPadding); messageOverlayWindow.Child = container; messageOverlayWindow.ShowOverlay (this.TextEditor); messageOverlayWindow.SizeFunc = () => { return okButton.SizeRequest ().Width + combo.SizeRequest ().Width + image.SizeRequest ().Width + w + hbox.Spacing * 4 + containerPadding * 2; }; image.Clicked += delegate { UseIncorrectMarkers = true; view.WorkbenchWindow.ShowNotification = false; RemoveMessageBar (); }; okButton.Clicked += delegate { if (multiple) { switch (combo.Active) { case 0: ConvertLineEndings (); view.WorkbenchWindow.ShowNotification = false; view.Save (fileName, view.SourceEncoding); break; case 1: FileRegistry.ConvertLineEndingsInAllFiles (); break; case 2: UseIncorrectMarkers = true; view.WorkbenchWindow.ShowNotification = false; break; case 3: FileRegistry.IgnoreLineEndingsInAllFiles (); break; } } else { switch (combo.Active) { case 0: ConvertLineEndings (); view.WorkbenchWindow.ShowNotification = false; view.Save (fileName, view.SourceEncoding); break; case 1: UseIncorrectMarkers = true; view.WorkbenchWindow.ShowNotification = false; break; } } RemoveMessageBar (); }; }
void ShowIncorrectEolMarkers (string fileName, bool multiple) { RemoveMessageBar (); var hbox = new HBox (); hbox.Spacing = 8; var image = new HoverCloseButton (); hbox.PackStart (image, false, false, 0); var label = new Label (string.Format ("This file has line endings ({0}) which differ from the policy settings ({1}).", GetEolString (DetectedEolMarker), GetEolString (textEditor.Options.DefaultEolMarker))); var color = (HslColor)textEditor.ColorStyle.NotificationText.Foreground; label.ModifyFg (StateType.Normal, color); int w, h; label.Layout.GetPixelSize (out w, out h); label.Ellipsize = Pango.EllipsizeMode.End; hbox.PackStart (label, true, true, 0); var okButton = new Button (Gtk.Stock.Ok); okButton.WidthRequest = 60; // Small amount of vertical padding for the OK button. const int verticalPadding = 2; var vbox = new VBox (); vbox.PackEnd (okButton, true, true, verticalPadding); hbox.PackEnd (vbox, false, false, 0); var list = new List<string> (); list.Add (string.Format ("Convert to {0} line endings", GetEolString (textEditor.Options.DefaultEolMarker))); list.Add (string.Format ("Convert all files to {0} line endings", GetEolString (textEditor.Options.DefaultEolMarker))); list.Add (string.Format ("Keep {0} line endings", GetEolString (DetectedEolMarker))); list.Add (string.Format ("Keep {0} line endings in all files", GetEolString (DetectedEolMarker))); var combo = new ComboBox (list.ToArray ()); combo.Active = 0; hbox.PackEnd (combo, false, false, 0); incorrectEolMessage = new HBox (); const int containerPadding = 8; incorrectEolMessage.PackStart (hbox, true, true, containerPadding); // This is hacky, but it will ensure that our combo appears with with the correct size. GLib.Timeout.Add (100, delegate { combo.QueueResize (); return false; }); AddOverlay (incorrectEolMessage, () => { return okButton.SizeRequest ().Width + combo.SizeRequest ().Width + image.SizeRequest ().Width + w + hbox.Spacing * 4 + containerPadding * 2; }); image.Clicked += delegate { UseIncorrectMarkers = true; view.WorkbenchWindow.ShowNotification = false; RemoveMessageBar (); }; okButton.Clicked += delegate { switch (combo.Active) { case 0: ConvertLineEndings (); view.WorkbenchWindow.ShowNotification = false; view.Save (fileName, view.SourceEncoding); break; case 1: FileRegistry.ConvertLineEndingsInAllFiles (); break; case 2: UseIncorrectMarkers = true; view.WorkbenchWindow.ShowNotification = false; break; case 3: FileRegistry.IgnoreLineEndingsInAllFiles (); break; } RemoveMessageBar (); }; }