Просмотр исходного кода

isUserSearchActive now is explicit

user search pattern can be set from the outside
fixed an issue in TerminalSearchResult (empty didn't initialize the hits)
devmil 4 лет назад
Родитель
Сommit
872ab62411

+ 1 - 1
lib/frontend/terminal_painters.dart

@@ -87,7 +87,7 @@ class TerminalPainter extends CustomPainter {
     final searchResult = terminal.userSearchResult;
 
     //when there is no ongoing user search then directly return
-    if (terminal.userSearchPattern == null) {
+    if (!terminal.isUserSearchActive) {
       return;
     }
 

+ 16 - 2
lib/terminal/terminal.dart

@@ -46,8 +46,6 @@ class Terminal with Observable implements TerminalUiInteraction {
   }) : _maxLines = maxLines {
     _search = TerminalSearch(this);
     _userSearchTask = _search.createSearchTask("UserSearch");
-    //TODO: remove and tie to the API
-    _userSearchTask.pattern = "test";
     backend?.init();
     backend?.exitCode.then((value) {
       _isTerminated = true;
@@ -747,4 +745,20 @@ class Terminal with Observable implements TerminalUiInteraction {
 
   @override
   String? get userSearchPattern => _userSearchTask.pattern;
+
+  @override
+  void set userSearchPattern(String? newValue) {
+    _userSearchTask.pattern = newValue;
+    refresh();
+  }
+
+  var _isUserSearchActive = false;
+
+  @override
+  bool get isUserSearchActive => _isUserSearchActive;
+
+  @override
+  void set isUserSearchActive(bool isUserSearchActive) {
+    _isUserSearchActive = isUserSearchActive;
+  }
 }

+ 20 - 1
lib/terminal/terminal_isolate.dart

@@ -33,7 +33,8 @@ enum _IsolateCommand {
   requestNewStateWhenDirty,
   paste,
   terminateBackend,
-  updateComposingString
+  updateComposingString,
+  updateSearchPattern
 }
 
 enum _IsolateEvent {
@@ -163,6 +164,9 @@ void terminalMain(SendPort port) async {
       case _IsolateCommand.updateComposingString:
         _terminal?.updateComposingString(msg[1]);
         break;
+      case _IsolateCommand.updateSearchPattern:
+        _terminal?.userSearchPattern = msg[1];
+        break;
     }
   }
 }
@@ -545,4 +549,19 @@ class TerminalIsolate with Observable implements TerminalUiInteraction {
 
   @override
   String? get userSearchPattern => _lastState?.userSearchPattern;
+
+  @override
+  void set userSearchPattern(String? newValue) {
+    _sendPort?.send([_IsolateCommand.updateSearchPattern, newValue]);
+  }
+
+  var _isUserSearchActive = false;
+
+  @override
+  bool get isUserSearchActive => _isUserSearchActive;
+
+  @override
+  void set isUserSearchActive(bool isUserSearchActive) {
+    _isUserSearchActive = isUserSearchActive;
+  }
 }

+ 2 - 1
lib/terminal/terminal_search.dart

@@ -23,7 +23,8 @@ class TerminalSearchResult {
     }
   }
 
-  TerminalSearchResult.empty();
+  TerminalSearchResult.empty()
+      : _allHits = List<TerminalSearchHit>.empty(growable: false);
 
   List<TerminalSearchHit> get allHits => _allHits;
 

+ 9 - 0
lib/terminal/terminal_ui_interaction.dart

@@ -140,4 +140,13 @@ abstract class TerminalUiInteraction with Observable {
 
   /// the search pattern of a currently active search or [null]
   String? get userSearchPattern;
+
+  /// sets the currently active search pattern
+  void set userSearchPattern(String? pattern);
+
+  /// gets if a user search is active
+  bool get isUserSearchActive;
+
+  // sets the user search active state
+  void set isUserSearchActive(bool isUserSearchActive);
 }