diff --git a/Source/CustomEnvelopeComponent.cpp b/Source/CustomEnvelopeComponent.cpp index fcefe30..aa43be5 100644 --- a/Source/CustomEnvelopeComponent.cpp +++ b/Source/CustomEnvelopeComponent.cpp @@ -153,6 +153,10 @@ void CustomEnvelopeComponent::textEditorTextChanged (TextEditor& editor) ParseError err = kParseErrorNone; processor.settingRefs.setSequenceWithString (paramType, txt, &err); + + ColorScheme cs = ColorScheme (processor.settingRefs.colorSchemeType()); + Colour c = (err < kParseErrorLevelFatal) ? cs.main : cs.warning; + label->setColour (juce::Label::textColourId, c); if (err == kParseErrorValueOutOfRange) { diff --git a/Source/FrameSequenceParseErrors.cpp b/Source/FrameSequenceParseErrors.cpp index 8e05e4f..3e7cd37 100644 --- a/Source/FrameSequenceParseErrors.cpp +++ b/Source/FrameSequenceParseErrors.cpp @@ -14,6 +14,18 @@ String getParseErrorString (ParseError err, int minValue, int maxValue) { switch (err) { + case kParseWarningPreRepeatSegmentEmpty: + return TRANS ("Main body of the sequence is empty"); + break; + + case kParseWarningRepeatSegmentEmpty: + return TRANS ("Repeat section is empty"); + break; + + case kParseWarningReleaseSegmentEmpty: + return TRANS ("Release section is empty"); + break; + case kParseErrorDuplicatedReleaseDelimiter: return TRANS ("You cannot use \"|\" more than once"); break; diff --git a/Source/FrameSequenceParseErrors.h b/Source/FrameSequenceParseErrors.h index 3afa5fe..db6ca3a 100644 --- a/Source/FrameSequenceParseErrors.h +++ b/Source/FrameSequenceParseErrors.h @@ -15,6 +15,9 @@ enum ParseError { kParseErrorNone = 0, kParseErrorLevelWarning, + kParseWarningPreRepeatSegmentEmpty, + kParseWarningRepeatSegmentEmpty, + kParseWarningReleaseSegmentEmpty, kParseErrorLevelFatal, kParseErrorDuplicatedReleaseDelimiter, kParseErrorDuplicatedOpenBracket, diff --git a/Source/FrameSequenceParser.cpp b/Source/FrameSequenceParser.cpp index e6ba71d..d1f4350 100644 --- a/Source/FrameSequenceParser.cpp +++ b/Source/FrameSequenceParser.cpp @@ -438,6 +438,9 @@ FrameSequence FrameSequenceParser::parse (const String& input, { return fs; } + if (sequence.size() == 0) { + *error = kParseWarningPreRepeatSegmentEmpty; + } fs.sequence = sequence; fs.sequence.reserve (1000); @@ -456,6 +459,10 @@ FrameSequence FrameSequenceParser::parse (const String& input, { return fs; } + if (repeatSeq.size() == 0) { + // Repeat section is defined but content is empty + *error = kParseWarningRepeatSegmentEmpty; + } // Add the result to working frameSequence fs.sequence.insert (fs.sequence.end(), repeatSeq.begin(), repeatSeq.end()); @@ -477,6 +484,10 @@ FrameSequence FrameSequenceParser::parse (const String& input, { return fs; } + if (releaseSeq.size() == 0) { + // Release section is defined but content is empty + *error = kParseWarningRepeatSegmentEmpty; + } // Add the result to working frameSequence fs.sequence.insert (fs.sequence.end(), releaseSeq.begin(), releaseSeq.end());