public override void OnNoteOpened() { this.buffer = Note.Buffer; setUp(); Preferences.SettingChanged += OnPrefsChanged; }
public TaskNoteUtilities(NoteBuffer n) { this.Buffer = n; }
public UndoManager (NoteBuffer buffer) { frozen_cnt = 0; try_merge = false; undo_stack = new Stack<EditAction> (); redo_stack = new Stack<EditAction> (); this.buffer = buffer; chop_buffer = new ChopBuffer (buffer.TagTable); buffer.InsertTextWithTags += OnInsertText; buffer.NewBulletInserted += OnBulletInserted; buffer.ChangeTextDepth += OnChangeDepth; buffer.DeleteRange += OnDeleteRange; // Before handler buffer.TagApplied += OnTagApplied; buffer.TagRemoved += OnTagRemoved; }
private void Reemplazar(NoteBuffer b, string s, string r) { /* * Changes every occurrences of string s for r in buffer b. * Why three passess? Because TextIter left invalidated every time I modify * content of a note. I use marks to postprocessing deletions and insertions. * Despite that, still invalidation warnings happens. */ bool found; Gtk.TextIter w; // Where to insert "r". List<Gtk.TextMark> inserciones = new List<Gtk.TextMark>(); // Marks to insert. Gtk.TextIter ss; // Start of slice containing the occurrence Gtk.TextIter es; // End of slice List<Gtk.TextMark> comienzos = new List<Gtk.TextMark>(); List<Gtk.TextMark> finales = new List<Gtk.TextMark>(); int i = 0; int j; Gtk.TextIter pos; // First pass. Finding... pos = b.StartIter; do{ found = pos.ForwardSearch(s, Gtk.TextSearchFlags.TextOnly, out ss, out es, b.EndIter); if (found){ inserciones.Add(b.CreateMark("check" + i.ToString(), ss, false)); comienzos.Add(b.CreateMark("comienzo" + i.ToString(), ss, false)); finales.Add(b.CreateMark("final" + i.ToString(), es, false)); i++; pos = es; // Search is started after «s» in next iteration } }while (found); // Second pass. Removing... for (j = 0; j < i; j++){ ss = b.GetIterAtMark(comienzos[j]); es = b.GetIterAtMark(finales[j]); b.Delete(ref ss, ref es); } // Third pass. Inserting... for (j = 0; j < i; j++){ w = b.GetIterAtMark(inserciones[j]); // Special case. If "Something()" in r, is a method, not a string. string methodName = esMetodo(r); if (methodName != null) runMethod(methodName, w); else b.Insert(ref w, r); } }
public void Construct () { data = new NoteData ("http://www.example.com/note"); data.Text = "<note-content>Foo</note-content>"; note = new NoteDataBufferSynchronizer (data); buffer = new NoteBuffer (new TextTagTable ()); }
// FIXME: Tags applied to a word should hold over the space // between the next word, as thats where you'll start typeing. // Tags are only active -after- a character with that tag. This // is different from the way gtk-textbuffer applies tags. // // Text menu // // Menu for font style and size, and set the active radio // menuitem depending on the cursor poition. // public NoteTextMenu (Gtk.AccelGroup accel_group, NoteBuffer buffer, UndoManager undo_manager) : base () { this.buffer = buffer; this.undo_manager = undo_manager; if (undo_manager != null) { undo = new Gtk.ImageMenuItem (Gtk.Stock.Undo, accel_group); undo.Activated += UndoClicked; undo.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.z, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); undo.Show (); Append (undo); redo = new Gtk.ImageMenuItem (Gtk.Stock.Redo, accel_group); redo.Activated += RedoClicked; redo.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.z, (Gdk.ModifierType.ControlMask | Gdk.ModifierType.ShiftMask), Gtk.AccelFlags.Visible); redo.Show (); Append (redo); Gtk.SeparatorMenuItem undo_spacer = new Gtk.SeparatorMenuItem (); Append (undo_spacer); // Listen to events so we can sensitize and // enable keybinding undo_manager.UndoChanged += UndoChanged; } bold = new Gtk.CheckMenuItem ("<b>" + Catalog.GetString ("_Bold") + "</b>"); MarkupLabel (bold); bold.Data ["Tag"] = "bold"; bold.Activated += FontStyleClicked; bold.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.b, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); italic = new Gtk.CheckMenuItem ("<i>" + Catalog.GetString ("_Italic") + "</i>"); MarkupLabel (italic); italic.Data ["Tag"] = "italic"; italic.Activated += FontStyleClicked; italic.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.i, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); strikeout = new Gtk.CheckMenuItem ("<s>" + Catalog.GetString ("_Strikeout") + "</s>"); MarkupLabel (strikeout); strikeout.Data ["Tag"] = "strikethrough"; strikeout.Activated += FontStyleClicked; strikeout.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.s, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); highlight = new Gtk.CheckMenuItem ("<span background='yellow'>" + Catalog.GetString ("_Highlight") + "</span>"); MarkupLabel (highlight); highlight.Data ["Tag"] = "highlight"; highlight.Activated += FontStyleClicked; highlight.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.h, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); Gtk.SeparatorMenuItem spacer1 = new Gtk.SeparatorMenuItem (); Gtk.MenuItem font_size = new Gtk.MenuItem (Catalog.GetString ("Font Size")); font_size.Sensitive = false; normal = new Gtk.RadioMenuItem (Catalog.GetString ("_Normal")); MarkupLabel (normal); normal.Active = true; normal.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.Key_0, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); normal.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.KP_0, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); normal.Activated += FontSizeActivated; huge = new Gtk.RadioMenuItem (normal.Group, "<span size=\"x-large\">" + Catalog.GetString ("Hu_ge") + "</span>"); MarkupLabel (huge); huge.Data ["Tag"] = "size:huge"; huge.Activated += FontSizeActivated; large = new Gtk.RadioMenuItem (huge.Group, "<span size=\"large\">" + Catalog.GetString ("_Large") + "</span>"); MarkupLabel (large); large.Data ["Tag"] = "size:large"; large.Activated += FontSizeActivated; small = new Gtk.RadioMenuItem (large.Group, "<span size=\"small\">" + Catalog.GetString ("S_mall") + "</span>"); MarkupLabel (small); small.Data ["Tag"] = "size:small"; small.Activated += FontSizeActivated; hidden_no_size = new Gtk.RadioMenuItem (small.Group, string.Empty); hidden_no_size.Hide (); increase_font = new Gtk.MenuItem (Catalog.GetString ("Increase Font Size")); increase_font.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.plus, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); increase_font.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.KP_Add, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); increase_font.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.equal, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); increase_font.Activated += IncreaseFontClicked; decrease_font = new Gtk.MenuItem (Catalog.GetString ("Decrease Font Size")); decrease_font.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.minus, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); decrease_font.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.KP_Subtract, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); decrease_font.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.underscore, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible); decrease_font.Activated += DecreaseFontClicked; Gtk.SeparatorMenuItem spacer2 = new Gtk.SeparatorMenuItem (); bullets = new Gtk.CheckMenuItem (Catalog.GetString ("Bullets")); bullets.Activated += ToggleBulletsClicked; increase_indent = new Gtk.ImageMenuItem (Gtk.Stock.Indent, accel_group); increase_indent.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.Right, Gdk.ModifierType.Mod1Mask, Gtk.AccelFlags.Visible); increase_indent.Activated += IncreaseIndentClicked; increase_indent.Show (); decrease_indent = new Gtk.ImageMenuItem (Gtk.Stock.Unindent, accel_group); decrease_indent.AddAccelerator ("activate", accel_group, (uint) Gdk.Key.Left, Gdk.ModifierType.Mod1Mask, Gtk.AccelFlags.Visible); decrease_indent.Activated += DecreaseIndentClicked; decrease_indent.Show (); RefreshState (); Append (bold); Append (italic); Append (strikeout); Append (highlight); Append (spacer1); Append (font_size); Append (small); Append (normal); Append (large); Append (huge); Append (increase_font); Append (decrease_font); Append (spacer2); Append (bullets); Append (increase_indent); Append (decrease_indent); ShowAll (); theme_hack_menu = new Menu (); theme_hack_menu.Realize (); theme_hack_menu.StyleSet += delegate { ModifyBg (StateType.Normal, theme_hack_menu.Style.Background (StateType.Normal)); }; }
List<Match> FindMatchesInBuffer (NoteBuffer buffer, string [] words) { List<Match> matches = new List<Match> (); string note_text = buffer.GetSlice (buffer.StartIter, buffer.EndIter, false /* hidden_chars */); note_text = note_text.ToLower (); foreach (string word in words) { int idx = 0; bool this_word_found = false; if (word == String.Empty) continue; while (true) { idx = note_text.IndexOf (word, idx); if (idx == -1) { if (this_word_found) break; else return null; } this_word_found = true; Gtk.TextIter start = buffer.GetIterAtOffset (idx); Gtk.TextIter end = start; end.ForwardChars (word.Length); Match match = new Match (); match.Buffer = buffer; match.StartMark = buffer.CreateMark (null, start, false); match.EndMark = buffer.CreateMark (null, end, true); match.Highlighting = false; matches.Add (match); idx += word.Length; } } if (matches.Count == 0) return null; else return matches; }