2
0
Эх сурвалжийг харах

tools: limit the number of displayed lines in ConsoleView

Daniele Bartolini 5 жил өмнө
parent
commit
ed90356445

+ 1 - 0
docs/changelog.rst

@@ -12,6 +12,7 @@ Changelog
 **Tools**
 
 * Windows: fixed wrong Editor View window size.
+* Added a setting to limit the number of lines displayed by the Console.
 
 0.42.0
 ------

+ 5 - 5
tools/level_editor/level_editor.vala

@@ -386,12 +386,16 @@ public class LevelEditorApplication : Gtk.Application
 		_project_store = new ProjectStore(_project);
 
 		// Widgets
+		_preferences_dialog = new PreferencesDialog(this);
+		_preferences_dialog.set_icon_name(CROWN_ICON_NAME);
+		_preferences_dialog.delete_event.connect(() => { _preferences_dialog.hide(); return Gdk.EVENT_STOP; });
+
 		_combo = new Gtk.ComboBoxText();
 		_combo.append("editor", "Editor");
 		_combo.append("game", "Game");
 		_combo.set_active_id("editor");
 
-		_console_view = new ConsoleView(_project, _combo);
+		_console_view = new ConsoleView(_project, _combo, _preferences_dialog);
 		_project_browser = new ProjectBrowser(this, _project, _project_store);
 		_level_treeview = new LevelTreeView(_database, _level);
 		_level_layers_treeview = new LevelLayersTreeView(_database, _level);
@@ -412,10 +416,6 @@ public class LevelEditorApplication : Gtk.Application
 		_resource_popover.delete_event.connect(() => { _resource_popover.hide(); return Gdk.EVENT_STOP; });
 		_resource_popover.modal = true;
 
-		_preferences_dialog = new PreferencesDialog(this);
-		_preferences_dialog.set_icon_name(CROWN_ICON_NAME);
-		_preferences_dialog.delete_event.connect(() => { _preferences_dialog.hide(); return Gdk.EVENT_STOP; });
-
 		_resource_chooser = new ResourceChooser(_project, _project_store, true);
 		_resource_chooser.resource_selected.connect(on_resource_browser_resource_selected);
 		_resource_chooser.resource_selected.connect(() => { _resource_popover.hide(); });

+ 5 - 0
tools/level_editor/preferences_dialog.vala

@@ -27,6 +27,7 @@ public class PreferencesDialog : Gtk.Dialog
 	public Grid _viewport_grid;
 
 	public EntryDouble _log_delete_after_days;
+	public EntryDouble _console_max_lines;
 	public Grid _system_grid;
 
 	public PropertyGridSet _document_set;
@@ -97,8 +98,10 @@ public class PreferencesDialog : Gtk.Dialog
 		_viewport_set.add_property_grid(cv, "Level");
 
 		_log_delete_after_days = new EntryDouble(10, 0, 90);
+		_console_max_lines = new EntryDouble(256, 10, 1024);
 		cv = new PropertyGrid();
 		cv.add_row("Delete logs older than (days)", _log_delete_after_days);
+		cv.add_row("Console max lines", _console_max_lines);
 		_system_set.add_property_grid(cv, "Memory and Limits");
 
 		_notebook = new Gtk.Notebook();
@@ -143,6 +146,7 @@ public class PreferencesDialog : Gtk.Dialog
 		_gizmo_size_spin_button.value     = preferences.has_key("gizmo_size") ? (double)preferences["gizmo_size"] : _gizmo_size_spin_button.value;
 		_level_autosave_spin_button.value = preferences.has_key("autosave_timer") ? (double)preferences["autosave_timer"] : _level_autosave_spin_button.value;
 		_log_delete_after_days.value      = preferences.has_key("log_expiration") ? (double)preferences["log_expiration"] : _log_delete_after_days.value;
+		_console_max_lines.value          = preferences.has_key("console_max_lines") ? (double)preferences["console_max_lines"] : _console_max_lines.value;
 	}
 
 	public void save(Hashtable preferences)
@@ -156,6 +160,7 @@ public class PreferencesDialog : Gtk.Dialog
 		preferences["gizmo_size"]     = _gizmo_size_spin_button.value;
 		preferences["autosave_timer"] = _level_autosave_spin_button.value;
 		preferences["log_expiration"] = _log_delete_after_days.value;
+		preferences["console_max_lines"] = _console_max_lines.value;
 	}
 
 	public void apply()

+ 17 - 2
tools/widgets/console_view.vala

@@ -82,6 +82,7 @@ public class ConsoleView : Gtk.Box
 	public EntryHistory _entry_history;
 	public uint _distance;
 	public Project _project;
+	public PreferencesDialog _preferences_dialog;
 
 	// Widgets
 	public Gtk.ScrolledWindow _scrolled_window;
@@ -89,7 +90,7 @@ public class ConsoleView : Gtk.Box
 	public EntryText _entry;
 	public Gtk.Box _entry_hbox;
 
-	public ConsoleView(Project project, Gtk.ComboBoxText combo)
+	public ConsoleView(Project project, Gtk.ComboBoxText combo, PreferencesDialog preferences_dialog)
 	{
 		Object(orientation: Gtk.Orientation.VERTICAL, spacing: 0);
 
@@ -97,6 +98,7 @@ public class ConsoleView : Gtk.Box
 		_entry_history = new EntryHistory(256);
 		_distance = 0;
 		_project = project;
+		_preferences_dialog = preferences_dialog;
 
 		// Widgets
 		_text_view = new Gtk.TextView();
@@ -216,7 +218,7 @@ public class ConsoleView : Gtk.Box
 	{
 		string line = message;
 
-		// Replace IDs with human-readable names
+		// Replace IDs with human-readable names.
 		int id_index = message.index_of("#ID(");
 		if (id_index != -1)
 		{
@@ -226,6 +228,19 @@ public class ConsoleView : Gtk.Box
 		}
 
 		Gtk.TextBuffer buffer = _text_view.buffer;
+
+		// Limit number of lines recorded.
+		int max_lines = (int)_preferences_dialog._console_max_lines.value;
+		if (buffer.get_line_count()-1 >= max_lines)
+		{
+			Gtk.TextIter start_of_first_line;
+			buffer.get_iter_at_line(out start_of_first_line, 0);
+			Gtk.TextIter end_of_first_line = start_of_first_line;
+			start_of_first_line.forward_line();
+			buffer.delete(ref start_of_first_line, ref end_of_first_line);
+		}
+
+		// Append line.
 		Gtk.TextIter end_iter;
 		buffer.get_end_iter(out end_iter);
 		buffer.insert(ref end_iter, line, line.length);