/// <summary> /// Sets status bar text along the current cursor position in the parsed text box. /// Finds the selected capture, determines its filter tree path and constructs from them status text. /// </summary> /// <param name="start"></param> /// <param name="length"></param> void set_status_by_position(int start, int length) { if (CaptureLabels == null) return; if (current_capture_label_index < 0 || current_capture_label_index >= CaptureLabels.Count) { SetStatus(""); return; } int end = start + length; CaptureLabel owner_cl = null; for (CaptureLabel c = CaptureLabels[current_capture_label_index]; c != null; c = c.parent) { if (!c.visible) continue; if (start >= c.start3 && end <= c.end && (owner_cl == null || c.level > owner_cl.level)) owner_cl = c; } if (owner_cl == null) { SetStatus(""); return; } string path = null; for (CaptureLabel l = owner_cl; l != null; l = l.parent) { string name; int r; if (int.TryParse(l.group_name, out r)) name = "$" + l.group_name; else name = l.group_name; path = "/" + name + "[" + l.match_id.ToString() + "]" + path; } string text = Document.Text.Substring(owner_cl.start, owner_cl.end - owner_cl.start); if (tr != null) tr.Abort(); tr = new ThreadRunner(10000, this, "Stripping text of the selected capture is not completed still. Break it?"); text = (string)tr.Run(this, "set_status_by_position_2", text); SetStatus(path.Substring(1) + " - \"" + text + "\""); }
/// <summary> /// Sets status bar text along the current cursor position in the parsed text box. /// Finds the selected capture, determines its filter tree path and constructs from them status text. /// </summary> /// <param name="start"></param> /// <param name="length"></param> void set_status_by_position(int start, int length) { if (CaptureLabels == null) { return; } if (current_capture_label_index < 0 || current_capture_label_index >= CaptureLabels.Count) { SetStatus(""); return; } int end = start + length; CaptureLabel owner_cl = null; for (CaptureLabel c = CaptureLabels[current_capture_label_index]; c != null; c = c.parent) { if (!c.visible) { continue; } if (start >= c.start3 && end <= c.end && (owner_cl == null || c.level > owner_cl.level)) { owner_cl = c; } } if (owner_cl == null) { SetStatus(""); return; } string path = null; for (CaptureLabel l = owner_cl; l != null; l = l.parent) { string name; int r; if (int.TryParse(l.group_name, out r)) { name = "$" + l.group_name; } else { name = l.group_name; } path = "/" + name + "[" + l.match_id.ToString() + "]" + path; } string text = Document.Text.Substring(owner_cl.start, owner_cl.end - owner_cl.start); if (tr != null) { tr.Abort(); } tr = new ThreadRunner(10000, this, "Stripping text of the selected capture is not completed still. Break it?"); text = (string)tr.Run(this, "set_status_by_position_2", text); SetStatus(path.Substring(1) + " - \"" + text + "\""); }