Use a validator function for ConsoleLineEdit.

The prompts provided (e.g. sys.ps1/sys.ps2) could change during the lifetime of
the validator.
This commit is contained in:
Florian Bruhin 2014-08-13 07:09:16 +02:00
parent 73214836da
commit 9c69ea3c45
3 changed files with 22 additions and 7 deletions

View File

@ -43,7 +43,12 @@ class ConsoleLineEdit(CommandLineEdit):
sys.ps1 = '>>> ' sys.ps1 = '>>> '
if not hasattr(sys, 'ps2'): if not hasattr(sys, 'ps2'):
sys.ps2 = '... ' sys.ps2 = '... '
super().__init__(parent, prompts=[sys.ps1, sys.ps2])
def validator(text):
"""Check if a given input is valid."""
return any(text.startswith(p) for p in (sys.ps1, sys.ps2))
super().__init__(parent, validator)
self.setFont(config.get('fonts', 'debug-console')) self.setFont(config.get('fonts', 'debug-console'))
self._more = False self._more = False
self._buffer = [] self._buffer = []

View File

@ -51,10 +51,15 @@ class CommandLineEdit(QLineEdit):
_validator: The current command validator. _validator: The current command validator.
""" """
def __init__(self, parent, prompts): def __init__(self, parent, validator):
"""Constructor.
Args:
validator: A function which checks if a given input is valid.
"""
super().__init__(parent) super().__init__(parent)
self.history = History() self.history = History()
self._validator = _CommandValidator(prompts, parent=self) self._validator = _CommandValidator(validator, parent=self)
self.setValidator(self._validator) self.setValidator(self._validator)
def __repr__(self): def __repr__(self):
@ -65,9 +70,9 @@ class _CommandValidator(QValidator):
"""Validator to prevent the : from getting deleted.""" """Validator to prevent the : from getting deleted."""
def __init__(self, prompts, parent=None): def __init__(self, validator, parent=None):
super().__init__(parent) super().__init__(parent)
self.prompts = prompts self.validator = validator
def validate(self, string, pos): def validate(self, string, pos):
"""Override QValidator::validate. """Override QValidator::validate.
@ -79,7 +84,7 @@ class _CommandValidator(QValidator):
Return: Return:
A tuple (status, string, pos) as a QValidator should. A tuple (status, string, pos) as a QValidator should.
""" """
if any(string.startswith(c) for c in self.prompts): if self.validator(string):
return (QValidator.Acceptable, string, pos) return (QValidator.Acceptable, string, pos)
else: else:
return (QValidator.Invalid, string, pos) return (QValidator.Invalid, string, pos)

View File

@ -77,7 +77,12 @@ class Command(MinimalLineEditMixin, CommandLineEdit):
# for a possible fix. # for a possible fix.
def __init__(self, parent=None): def __init__(self, parent=None):
CommandLineEdit.__init__(self, parent, STARTCHARS)
def validator(text):
"""Check if a given input is valid."""
return any(text.startswith(p) for p in STARTCHARS)
CommandLineEdit.__init__(self, parent, validator)
MinimalLineEditMixin.__init__(self) MinimalLineEditMixin.__init__(self)
self.cursor_part = 0 self.cursor_part = 0
self.history.history = QApplication.instance().cmd_history.data self.history.history = QApplication.instance().cmd_history.data