X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FManaged.Windows.Forms%2FSystem.Windows.Forms%2FRichTextBox.cs;h=d307ed5ce101178be24dd0d87ed56452ca9409bb;hb=ecd61be7b3ef7aa871d3bd7be9669d69dd6812b6;hp=204fb2df86765d992d5763ccda8381980d268f52;hpb=a8ad8e66a0ee1a69f4e11cca48fdb07d934d991e;p=mono.git diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/RichTextBox.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/RichTextBox.cs index 204fb2df867..d307ed5ce10 100644 --- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/RichTextBox.cs +++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/RichTextBox.cs @@ -24,7 +24,7 @@ // // -// NOT COMPLETE +// #define DEBUG using System; using System.Collections; @@ -32,18 +32,21 @@ using System.ComponentModel; using System.Drawing; using System.IO; using System.Text; +using System.Runtime.InteropServices; using RTF=System.Windows.Forms.RTF; namespace System.Windows.Forms { +#if NET_2_0 + [ClassInterface (ClassInterfaceType.AutoDispatch)] + [Docking (DockingBehavior.Ask)] + [ComVisible (true)] +#endif public class RichTextBox : TextBoxBase { #region Local Variables internal bool auto_word_select; internal int bullet_indent; - internal bool can_redo; internal bool detect_urls; - internal string redo_action_name; internal int margin_right; - internal string undo_action_name; internal float zoom; private RTF.TextMap rtf_text_map; @@ -65,12 +68,9 @@ namespace System.Windows.Forms { accepts_return = true; auto_word_select = false; bullet_indent = 0; - can_redo = false; detect_urls = true; max_length = Int32.MaxValue; - redo_action_name = string.Empty; margin_right = 0; - undo_action_name = string.Empty; zoom = 1; base.Multiline = true; document.CRLFSize = 1; @@ -101,6 +101,9 @@ namespace System.Windows.Forms { #endregion // Private & Internal Methods #region Public Instance Properties +#if NET_2_0 + [Browsable (false)] +#endif public override bool AllowDrop { get { return base.AllowDrop; @@ -112,7 +115,14 @@ namespace System.Windows.Forms { } [DefaultValue(false)] +#if NET_2_0 + [DesignerSerializationVisibility (DesignerSerializationVisibility.Visible)] + [RefreshProperties (RefreshProperties.Repaint)] + [EditorBrowsable (EditorBrowsableState.Never)] + [Browsable (false)] +#else [Localizable(true)] +#endif public override bool AutoSize { get { return auto_size; @@ -137,13 +147,8 @@ namespace System.Windows.Forms { [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] public override System.Drawing.Image BackgroundImage { - get { - return background_image; - } - - set { - base.BackgroundImage = value; - } + get { return base.BackgroundImage; } + set { base.BackgroundImage = value; } } [DefaultValue(0)] @@ -162,7 +167,7 @@ namespace System.Windows.Forms { [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool CanRedo { get { - return can_redo; + return document.undo.CanRedo; } } @@ -198,7 +203,7 @@ namespace System.Windows.Forms { // Font changes always set the whole doc to that font start = document.GetLine(1); end = document.GetLine(document.Lines); - document.FormatText(start, 1, end, end.text.Length + 1, base.Font, new SolidBrush(this.ForeColor)); + document.FormatText(start, 1, end, end.text.Length + 1, base.Font, null, null, FormatSpecified.Font); } } } @@ -240,7 +245,7 @@ namespace System.Windows.Forms { [MonoTODO] public string RedoActionName { get { - return redo_action_name; + return document.undo.RedoActionName; } } @@ -258,8 +263,12 @@ namespace System.Windows.Forms { } [Browsable(false)] - [DefaultValue("")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] +#if NET_2_0 + [RefreshProperties (RefreshProperties.All)] +#else + [DefaultValue("")] +#endif public string Rtf { get { Line start_line; @@ -639,6 +648,9 @@ namespace System.Windows.Forms { } [Localizable(true)] +#if NET_2_0 + [RefreshProperties (RefreshProperties.All)] +#endif public override string Text { get { return base.Text; @@ -660,7 +672,7 @@ namespace System.Windows.Forms { [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public string UndoActionName { get { - return document.undo.UndoName; + return document.undo.UndoActionName; } } @@ -862,9 +874,7 @@ namespace System.Windows.Forms { try { sb = new StringBuilder((int)data.Length); buffer = new byte[1024]; - } - - catch { + } catch { throw new IOException("Not enough memory to load document"); } @@ -878,6 +888,10 @@ namespace System.Windows.Forms { } InsertRTFFromStream(data, 0, 1); + + document.PositionCaret (document.GetLine (1), 0); + document.SetSelectionToCaret (true); + ScrollToCaret (); } [MonoTODO("Make smarter RTF detection?")] @@ -894,15 +908,17 @@ namespace System.Windows.Forms { data = null; + try { data = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 1024); + LoadFile(data, fileType); } - +#if !DEBUG catch { throw new IOException("Could not open file " + path); } - +#endif finally { if (data != null) { data.Close(); @@ -914,8 +930,9 @@ namespace System.Windows.Forms { base.Paste(Clipboard.GetDataObject(), clipFormat, false); } - [MonoTODO()] - public void Redo() { + public void Redo() + { + document.undo.Redo (); } public void SaveFile(Stream data, RichTextBoxStreamType fileType) { @@ -1116,14 +1133,18 @@ namespace System.Windows.Forms { } [Browsable(false)] +#if !NET_2_0 [EditorBrowsable(EditorBrowsableState.Never)] +#endif public new event DragEventHandler DragDrop { add { base.DragDrop += value; } remove { base.DragDrop -= value; } } [Browsable(false)] +#if !NET_2_0 [EditorBrowsable(EditorBrowsableState.Never)] +#endif public new event DragEventHandler DragEnter { add { base.DragEnter += value; } remove { base.DragEnter -= value; } @@ -1228,6 +1249,7 @@ namespace System.Windows.Forms { System.Windows.Forms.RTF.Color color; color = System.Windows.Forms.RTF.Color.GetColor(rtf, rtf.Param); + if (color != null) { FlushText(rtf, false); if (color.Red == -1 && color.Green == -1 && color.Blue == -1) { @@ -1235,6 +1257,7 @@ namespace System.Windows.Forms { } else { this.rtf_color = new SolidBrush(Color.FromArgb(color.Red, color.Green, color.Blue)); } + FlushText (rtf, false); } break; } @@ -1444,6 +1467,7 @@ namespace System.Windows.Forms { } else { rtf_color = new SolidBrush(Color.FromArgb(color.Red, color.Green, color.Blue)); } + } rtf_chars += rtf_line.Length; @@ -1456,7 +1480,7 @@ namespace System.Windows.Forms { line = document.GetLine(rtf_cursor_y); if (rtf_line.Length > 0) { document.InsertString(line, rtf_cursor_x, rtf_line.ToString()); - document.FormatText(line, rtf_cursor_x + 1, line, rtf_cursor_x + 1 + length, font, rtf_color); // FormatText is 1-based + document.FormatText(line, rtf_cursor_x + 1, line, rtf_cursor_x + 1 + length, font, rtf_color, null, FormatSpecified.Font | FormatSpecified.Color); // FormatText is 1-based } if (newline) { document.Split(line, rtf_cursor_x + length); @@ -1505,26 +1529,31 @@ namespace System.Windows.Forms { rtf_text_map = new RTF.TextMap(); RTF.TextMap.SetupStandardTable(rtf_text_map.Table); - document.NoRecalc = true; + document.SuspendRecalc (); try { rtf.Read(); // That's it FlushText(rtf, false); + } + catch (RTF.RTFException e) { +#if DEBUG + throw e; +#endif // Seems to be plain text or broken RTF Console.WriteLine("RTF Parsing failure: {0}", e.Message); - } + } to_x = rtf_cursor_x; to_y = rtf_cursor_y; chars = rtf_chars; document.RecalculateDocument(CreateGraphicsInternal(), cursor_y, document.Lines, false); - document.NoRecalc = false; + document.ResumeRecalc (true); - document.Invalidate(document.GetLine(cursor_y), 0, document.GetLine(document.Lines), -1); + document.Invalidate (document.GetLine(cursor_y), 0, document.GetLine(document.Lines), -1); } private void RichTextBox_HScrolled(object sender, EventArgs e) {