void SoundManager::setEventEnabled(Events event, bool enabled) { Settings->beginGroup(GROUP_MAIN); Settings->beginGroup(GROUP_ENABLE); Settings->setValue(settingName(event), enabled); Settings->endGroup(); Settings->endGroup(); }
void SoundManager::setEventFilename(Events event, const QString &filename) { Settings->beginGroup(GROUP_MAIN); Settings->beginGroup(GROUP_SOUNDFILE); Settings->setValue(settingName(event), filename); Settings->endGroup(); Settings->endGroup(); }
F32 lggBeamMaps::setUpAndGetDuration() { static LLCachedControl<std::string> settingNameCached(gSavedSettings, "FSBeamShape"); std::string settingName(settingNameCached); if(settingName != lastFileName) { lastFileName = settingName; if( settingName != "===OFF===" && settingName != "") { std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "beams", "")); std::string path_name2(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS , "beams", "")); std::string filename = path_name + settingName + ".xml"; if (!gDirUtilp->fileExists(filename)) { filename =path_name2 + settingName +".xml"; } LLSD mydata = getPic(filename); scale = (F32)mydata["scale"].asReal()/10.0f; LLSD myPicture = mydata["data"]; dots.clear(); for (int i = 0; i < myPicture.size(); i++) { LLSD beamData = myPicture[i]; lggBeamData dot; dot.p = LLVector3d(beamData["offset"]); // <FS:PP> Attempt to speed up things a little // dot.p *= (gSavedSettings.getF32("FSBeamShapeScale")*2.0f); static LLCachedControl<F32> FSBeamShapeScale(gSavedSettings, "FSBeamShapeScale"); dot.p *= (FSBeamShapeScale*2.0f); // </FS:PP> LLColor4 color = LLColor4(beamData["color"]); dot.c = LLColor4U(color); dots.push_back(dot); } // <FS:PP> Attempt to speed up things a little // F32 maxBPerQS = gSavedSettings.getF32("FSMaxBeamsPerSecond") / 4.0f; static LLCachedControl<F32> FSMaxBeamsPerSecond(gSavedSettings, "FSMaxBeamsPerSecond"); F32 maxBPerQS = FSMaxBeamsPerSecond / 4.0f; // </FS:PP> duration = llceil((F32)(myPicture.size()) / maxBPerQS) * 0.25f; llinfos << "reading it all now size is " << myPicture.size() << " and duration is " << duration << llendl; } else { dots.clear(); scale = 0.0f;//used as a flag too duration = 0.25f; } } //llinfos << "sent final dur of " << duration << llendl; return duration; }
QString SoundManager::eventFilename(Events event) { Settings->beginGroup(GROUP_MAIN); Settings->beginGroup(GROUP_SOUNDFILE); QString filename = Settings->value(settingName(event)).toString(); Settings->endGroup(); Settings->endGroup(); return filename; }
bool SoundManager::eventEnabled(Events event) { Settings->beginGroup(GROUP_MAIN); Settings->beginGroup(GROUP_ENABLE); bool enabled = Settings->value(settingName(event), false).toBool(); Settings->endGroup(); Settings->endGroup(); return enabled; }
F32 lggBeamMaps::setUpAndGetDuration() { static LLCachedControl<std::string> settingNameCached(gSavedSettings, "FSBeamShape"); std::string settingName(settingNameCached); if (settingName != mLastFileName) { mLastFileName = settingName; if (!settingName.empty()) { std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "beams", "")); std::string path_name2(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS , "beams", "")); std::string filename = path_name + settingName + ".xml"; if (!gDirUtilp->fileExists(filename)) { filename = path_name2 + settingName + ".xml"; } LLSD mydata = getPic(filename); mScale = (F32)mydata["scale"].asReal() / 10.0f; LLSD myPicture = mydata["data"]; mDots.clear(); for (LLSD::array_iterator it = myPicture.beginArray(); it != myPicture.endArray(); ++it) { LLSD beamData = *it; lggBeamData dot; dot.p = LLVector3d(beamData["offset"]); static LLCachedControl<F32> FSBeamShapeScale(gSavedSettings, "FSBeamShapeScale"); dot.p *= (FSBeamShapeScale * 2.0f); LLColor4 color = LLColor4(beamData["color"]); dot.c = LLColor4U(color); mDots.push_back(dot); } static LLCachedControl<F32> FSMaxBeamsPerSecond(gSavedSettings, "FSMaxBeamsPerSecond"); F32 maxBPerQS = FSMaxBeamsPerSecond / 4.0f; mDuration = llceil((F32)(myPicture.size()) / maxBPerQS) * 0.25f; LL_INFOS("LGG_Beams") << "reading it all now size is " << myPicture.size() << " and duration is " << mDuration << LL_ENDL; } else { mDots.clear(); mScale = 0.0f; //used as a flag too mDuration = 0.25f; } } return mDuration; }
Setting * SettingCollectionList::Get(const char * name) { Node * node = data; do { Setting * setting = node->data; if(setting) { BSAutoFixedString searchName(name); BSAutoFixedString settingName(setting->name); if(searchName == settingName) { return setting; } } node = node->next; } while(node); return nullptr; }
void Sword25FileProxy::writeSettings() { // Loop through the setting lines const char *pSrc = _settings.c_str(); while (*pSrc) { if ((*pSrc != '\r') && (*pSrc != '\n')) { const char *p = strchr(pSrc, '='); assert(p); // Get the setting name const char *pEnd = p - 1; while (*pEnd == ' ') --pEnd; Common::String settingName(pSrc, pEnd - pSrc + 1); // Get the setting value const char *pStart = p + 1; while (*pStart == ' ') ++pStart; pEnd = pStart + 1; while ((*pEnd != '\r') && (*pEnd != '\n') && (*pEnd != '\0')) ++pEnd; Common::String value(pStart + (*pStart == '"' ? 1 : 0), pEnd - pStart - (*pStart == '"' ? 2 : 0)); // Update the setting updateSetting(settingName, value); pSrc = pEnd; } // Move to next line while ((*pSrc == '\r') || (*pSrc == '\n')) ++pSrc; } ConfMan.flushToDisk(); }
void VTTCue::parseSettings(const String& inputString) { VTTScanner input(inputString); while (!input.isAtEnd()) { // The WebVTT cue settings part of a WebVTT cue consists of zero or more of the following components, in any order, // separated from each other by one or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters. input.skipWhile<VTTParser::isValidSettingDelimiter>(); if (input.isAtEnd()) break; // When the user agent is to parse the WebVTT settings given by a string input for a text track cue cue, // the user agent must run the following steps: // 1. Let settings be the result of splitting input on spaces. // 2. For each token setting in the list settings, run the following substeps: // 1. If setting does not contain a U+003A COLON character (:), or if the first U+003A COLON character (:) // in setting is either the first or last character of setting, then jump to the step labeled next setting. // 2. Let name be the leading substring of setting up to and excluding the first U+003A COLON character (:) in that string. CueSetting name = settingName(input); // 3. Let value be the trailing substring of setting starting from the character immediately after the first U+003A COLON character (:) in that string. VTTScanner::Run valueRun = input.collectUntil<VTTParser::isValidSettingDelimiter>(); // 4. Run the appropriate substeps that apply for the value of name, as follows: switch (name) { case Vertical: { // If name is a case-sensitive match for "vertical" // 1. If value is a case-sensitive match for the string "rl", then let cue's text track cue writing direction // be vertical growing left. if (input.scanRun(valueRun, verticalGrowingLeftKeyword())) m_writingDirection = VerticalGrowingLeft; // 2. Otherwise, if value is a case-sensitive match for the string "lr", then let cue's text track cue writing // direction be vertical growing right. else if (input.scanRun(valueRun, verticalGrowingRightKeyword())) m_writingDirection = VerticalGrowingRight; break; } case Line: { // 1-2 - Collect chars that are either '-', '%', or a digit. // 1. If value contains any characters other than U+002D HYPHEN-MINUS characters (-), U+0025 PERCENT SIGN // characters (%), and characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), then jump // to the step labeled next setting. bool isNegative = input.scan('-'); int linePosition; unsigned numDigits = input.scanDigits(linePosition); bool isPercentage = input.scan('%'); if (!input.isAt(valueRun.end())) break; // 2. If value does not contain at least one character in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT // NINE (9), then jump to the step labeled next setting. // 3. If any character in value other than the first character is a U+002D HYPHEN-MINUS character (-), then // jump to the step labeled next setting. // 4. If any character in value other than the last character is a U+0025 PERCENT SIGN character (%), then // jump to the step labeled next setting. // 5. If the first character in value is a U+002D HYPHEN-MINUS character (-) and the last character in value is a // U+0025 PERCENT SIGN character (%), then jump to the step labeled next setting. if (!numDigits || (isPercentage && isNegative)) break; // 6. Ignoring the trailing percent sign, if any, interpret value as a (potentially signed) integer, and // let number be that number. // 7. If the last character in value is a U+0025 PERCENT SIGN character (%), but number is not in the range // 0 ≤ number ≤ 100, then jump to the step labeled next setting. // 8. Let cue's text track cue line position be number. // 9. If the last character in value is a U+0025 PERCENT SIGN character (%), then let cue's text track cue // snap-to-lines flag be false. Otherwise, let it be true. if (isPercentage) { if (linePosition < 0 || linePosition > 100) break; // 10 - If '%' then set snap-to-lines flag to false. m_snapToLines = false; } else { if (isNegative) linePosition = -linePosition; m_snapToLines = true; } m_linePosition = linePosition; break; } case Position: { int number; // Steps 1 - 6. if (!scanPercentage(input, valueRun, number)) break; // 7. Let cue's text track cue text position be number. m_textPosition = number; break; } case Size: { int number; // Steps 1 - 6. if (!scanPercentage(input, valueRun, number)) break; // 7. Let cue's text track cue size be number. m_cueSize = number; break; } case Align: { // 1. If value is a case-sensitive match for the string "start", then let cue's text track cue alignment be start alignment. if (input.scanRun(valueRun, startKeyword())) m_cueAlignment = Start; // 2. If value is a case-sensitive match for the string "middle", then let cue's text track cue alignment be middle alignment. else if (input.scanRun(valueRun, middleKeyword())) m_cueAlignment = Middle; // 3. If value is a case-sensitive match for the string "end", then let cue's text track cue alignment be end alignment. else if (input.scanRun(valueRun, endKeyword())) m_cueAlignment = End; // 4. If value is a case-sensitive match for the string "left", then let cue's text track cue alignment be left alignment. else if (input.scanRun(valueRun, leftKeyword())) m_cueAlignment = Left; // 5. If value is a case-sensitive match for the string "right", then let cue's text track cue alignment be right alignment. else if (input.scanRun(valueRun, rightKeyword())) m_cueAlignment = Right; break; } case RegionId: m_regionId = input.extractString(valueRun); break; case None: break; } // Make sure the entire run is consumed. input.skipRun(valueRun); } // If cue's line position is not auto or cue's size is not 100 or cue's // writing direction is not horizontal, but cue's region identifier is not // the empty string, let cue's region identifier be the empty string. if (m_regionId.isEmpty()) return; if (m_linePosition != undefinedPosition || m_cueSize != 100 || m_writingDirection != Horizontal) m_regionId = emptyString(); }
void TextTrackCue::setCueSettings(const String& input) { m_settings = input; unsigned position = 0; while (position < input.length()) { // The WebVTT cue settings part of a WebVTT cue consists of zero or more of the following components, in any order, // separated from each other by one or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters. while (position < input.length() && WebVTTParser::isValidSettingDelimiter(input[position])) position++; if (position >= input.length()) break; // When the user agent is to parse the WebVTT settings given by a string input for a text track cue cue, // the user agent must run the following steps: // 1. Let settings be the result of splitting input on spaces. // 2. For each token setting in the list settings, run the following substeps: // 1. If setting does not contain a U+003A COLON character (:), or if the first U+003A COLON character (:) // in setting is either the first or last character of setting, then jump to the step labeled next setting. unsigned endOfSetting = position; String setting = WebVTTParser::collectWord(input, &endOfSetting); CueSetting name; size_t colonOffset = setting.find(':', 1); if (colonOffset == notFound || colonOffset == 0 || colonOffset == setting.length() - 1) goto NextSetting; // 2. Let name be the leading substring of setting up to and excluding the first U+003A COLON character (:) in that string. name = settingName(setting.substring(0, colonOffset)); // 3. Let value be the trailing substring of setting starting from the character immediately after the first U+003A COLON character (:) in that string. position += colonOffset + 1; if (position >= input.length()) break; // 4. Run the appropriate substeps that apply for the value of name, as follows: switch (name) { case Vertical: { // If name is a case-sensitive match for "vertical" // 1. If value is a case-sensitive match for the string "rl", then let cue's text track cue writing direction // be vertical growing left. String writingDirection = WebVTTParser::collectWord(input, &position); if (writingDirection == verticalGrowingLeftKeyword()) m_writingDirection = VerticalGrowingLeft; // 2. Otherwise, if value is a case-sensitive match for the string "lr", then let cue's text track cue writing // direction be vertical growing right. else if (writingDirection == verticalGrowingRightKeyword()) m_writingDirection = VerticalGrowingRight; } break; case Line: { // 1-2 - Collect chars that are either '-', '%', or a digit. // 1. If value contains any characters other than U+002D HYPHEN-MINUS characters (-), U+0025 PERCENT SIGN // characters (%), and characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), then jump // to the step labeled next setting. StringBuilder linePositionBuilder; while (position < input.length() && (input[position] == '-' || input[position] == '%' || isASCIIDigit(input[position]))) linePositionBuilder.append(input[position++]); if (position < input.length() && !WebVTTParser::isValidSettingDelimiter(input[position])) break; // 2. If value does not contain at least one character in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT // NINE (9), then jump to the step labeled next setting. // 3. If any character in value other than the first character is a U+002D HYPHEN-MINUS character (-), then // jump to the step labeled next setting. // 4. If any character in value other than the last character is a U+0025 PERCENT SIGN character (%), then // jump to the step labeled next setting. String linePosition = linePositionBuilder.toString(); if (linePosition.find('-', 1) != notFound || linePosition.reverseFind("%", linePosition.length() - 2) != notFound) break; // 5. If the first character in value is a U+002D HYPHEN-MINUS character (-) and the last character in value is a // U+0025 PERCENT SIGN character (%), then jump to the step labeled next setting. if (linePosition[0] == '-' && linePosition[linePosition.length() - 1] == '%') break; // 6. Ignoring the trailing percent sign, if any, interpret value as a (potentially signed) integer, and // let number be that number. // NOTE: toInt ignores trailing non-digit characters, such as '%'. bool validNumber; int number = linePosition.toInt(&validNumber); if (!validNumber) break; // 7. If the last character in value is a U+0025 PERCENT SIGN character (%), but number is not in the range // 0 ≤ number ≤ 100, then jump to the step labeled next setting. // 8. Let cue's text track cue line position be number. // 9. If the last character in value is a U+0025 PERCENT SIGN character (%), then let cue's text track cue // snap-to-lines flag be false. Otherwise, let it be true. if (linePosition[linePosition.length() - 1] == '%') { if (number < 0 || number > 100) break; // 10 - If '%' then set snap-to-lines flag to false. m_snapToLines = false; } m_linePosition = number; } break; case Position: { // 1. If value contains any characters other than U+0025 PERCENT SIGN characters (%) and characters in the range // U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), then jump to the step labeled next setting. // 2. If value does not contain at least one character in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), // then jump to the step labeled next setting. String textPosition = WebVTTParser::collectDigits(input, &position); if (textPosition.isEmpty()) break; if (position >= input.length()) break; // 3. If any character in value other than the last character is a U+0025 PERCENT SIGN character (%), then jump // to the step labeled next setting. // 4. If the last character in value is not a U+0025 PERCENT SIGN character (%), then jump to the step labeled // next setting. if (input[position++] != '%') break; if (position < input.length() && !WebVTTParser::isValidSettingDelimiter(input[position])) break; // 5. Ignoring the trailing percent sign, interpret value as an integer, and let number be that number. // 6. If number is not in the range 0 ≤ number ≤ 100, then jump to the step labeled next setting. // NOTE: toInt ignores trailing non-digit characters, such as '%'. bool validNumber; int number = textPosition.toInt(&validNumber); if (!validNumber) break; if (number < 0 || number > 100) break; // 7. Let cue's text track cue text position be number. m_textPosition = number; } break; case Size: { // 1. If value contains any characters other than U+0025 PERCENT SIGN characters (%) and characters in the // range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), then jump to the step labeled next setting. // 2. If value does not contain at least one character in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT // NINE (9), then jump to the step labeled next setting. String cueSize = WebVTTParser::collectDigits(input, &position); if (cueSize.isEmpty()) break; if (position >= input.length()) break; // 3. If any character in value other than the last character is a U+0025 PERCENT SIGN character (%), // then jump to the step labeled next setting. // 4. If the last character in value is not a U+0025 PERCENT SIGN character (%), then jump to the step // labeled next setting. if (input[position++] != '%') break; if (position < input.length() && !WebVTTParser::isValidSettingDelimiter(input[position])) break; // 5. Ignoring the trailing percent sign, interpret value as an integer, and let number be that number. // 6. If number is not in the range 0 ≤ number ≤ 100, then jump to the step labeled next setting. bool validNumber; int number = cueSize.toInt(&validNumber); if (!validNumber) break; if (number < 0 || number > 100) break; // 7. Let cue's text track cue size be number. m_cueSize = number; } break; case Align: { String cueAlignment = WebVTTParser::collectWord(input, &position); // 1. If value is a case-sensitive match for the string "start", then let cue's text track cue alignment be start alignment. if (cueAlignment == startKeyword()) m_cueAlignment = Start; // 2. If value is a case-sensitive match for the string "middle", then let cue's text track cue alignment be middle alignment. else if (cueAlignment == middleKeyword()) m_cueAlignment = Middle; // 3. If value is a case-sensitive match for the string "end", then let cue's text track cue alignment be end alignment. else if (cueAlignment == endKeyword()) m_cueAlignment = End; } break; #if ENABLE(WEBVTT_REGIONS) case RegionId: m_regionId = WebVTTParser::collectWord(input, &position); break; #endif case None: break; } NextSetting: position = endOfSetting; } #if ENABLE(WEBVTT_REGIONS) // If cue's line position is not auto or cue's size is not 100 or cue's // writing direction is not horizontal, but cue's region identifier is not // the empty string, let cue's region identifier be the empty string. if (m_regionId.isEmpty()) return; if (m_linePosition != undefinedPosition || m_cueSize != 100 || m_writingDirection != Horizontal) m_regionId = emptyString(); #endif }
void VTTCue::parseSettings(const String& inputString) { VTTScanner input(inputString); while (!input.isAtEnd()) { // The WebVTT cue settings part of a WebVTT cue consists of zero or more of the following components, in any order, // separated from each other by one or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters. input.skipWhile<VTTParser::isValidSettingDelimiter>(); if (input.isAtEnd()) break; // When the user agent is to parse the WebVTT settings given by a string input for a text track cue cue, // the user agent must run the following steps: // 1. Let settings be the result of splitting input on spaces. // 2. For each token setting in the list settings, run the following substeps: // 1. If setting does not contain a U+003A COLON character (:), or if the first U+003A COLON character (:) // in setting is either the first or last character of setting, then jump to the step labeled next setting. // 2. Let name be the leading substring of setting up to and excluding the first U+003A COLON character (:) in that string. CueSetting name = settingName(input); // 3. Let value be the trailing substring of setting starting from the character immediately after the first U+003A COLON character (:) in that string. VTTScanner::Run valueRun = input.collectUntil<VTTParser::isValidSettingDelimiter>(); // 4. Run the appropriate substeps that apply for the value of name, as follows: switch (name) { case Vertical: { // If name is a case-sensitive match for "vertical" // 1. If value is a case-sensitive match for the string "rl", then // let cue's WebVTT cue writing direction be vertical // growing left. if (input.scanRun(valueRun, verticalGrowingLeftKeyword())) m_writingDirection = VerticalGrowingLeft; // 2. Otherwise, if value is a case-sensitive match for the string // "lr", then let cue's WebVTT cue writing direction be // vertical growing right. else if (input.scanRun(valueRun, verticalGrowingRightKeyword())) m_writingDirection = VerticalGrowingRight; break; } case Line: { // If name is a case-sensitive match for "line" // Steps 1 - 2 skipped. float number; // 3. If linepos does not contain at least one ASCII digit, then // jump to the step labeled next setting. // 4. If the last character in linepos is a U+0025 PERCENT SIGN character (%) // // If parse a percentage string from linepos doesn't fail, let // number be the returned percentage, otherwise jump to the step // labeled next setting. bool isPercentage = scanPercentage(input, number); if (!isPercentage) { // Otherwise // // 1. If linepos contains any characters other than U+002D // HYPHEN-MINUS characters (-) and ASCII digits, then jump to // the step labeled next setting. // 2. If any character in linepos other than the first character is // a U+002D HYPHEN-MINUS character (-), then jump to the step // labeled next setting. bool isNegative = input.scan('-'); int intLinePosition; if (!input.scanDigits(intLinePosition)) break; // 3. Interpret linepos as a (potentially signed) integer, and let // number be that number. number = isNegative ? -intLinePosition : intLinePosition; } if (!input.isAt(valueRun.end())) break; // 5. Let cue's WebVTT cue line be number. m_linePosition = number; // 6. If the last character in linepos is a U+0025 PERCENT SIGN // character (%), then let cue's WebVTT cue snap-to-lines // flag be false. Otherwise, let it be true. m_snapToLines = !isPercentage; // Steps 7 - 9 skipped. break; } case Position: { // If name is a case-sensitive match for "position". float number; // Steps 1 - 2 skipped. // 3. If parse a percentage string from colpos doesn't fail, let // number be the returned percentage, otherwise jump to the step // labeled next setting (text track cue text position's value // remains the special value auto). if (!scanPercentage(input, number)) break; if (!input.isAt(valueRun.end())) break; // 4. Let cue's cue position be number. m_textPosition = number; // Steps 5 - 7 skipped. break; } case Size: { // If name is a case-sensitive match for "size" float number; // 1. If parse a percentage string from value doesn't fail, let // number be the returned percentage, otherwise jump to the step // labeled next setting. if (!scanPercentage(input, number)) break; if (!input.isAt(valueRun.end())) break; // 2. Let cue's WebVTT cue size be number. m_cueSize = number; break; } case Align: { // If name is a case-sensitive match for "align" // 1. If value is a case-sensitive match for the string "start", // then let cue's WebVTT cue text alignment be start alignment. if (input.scanRun(valueRun, startKeyword())) m_cueAlignment = Start; // 2. If value is a case-sensitive match for the string "middle", // then let cue's WebVTT cue text alignment be middle alignment. else if (input.scanRun(valueRun, middleKeyword())) m_cueAlignment = Middle; // 3. If value is a case-sensitive match for the string "end", then // let cue's WebVTT cue text alignment be end alignment. else if (input.scanRun(valueRun, endKeyword())) m_cueAlignment = End; // 4. If value is a case-sensitive match for the string "left", // then let cue's WebVTT cue text alignment be left alignment. else if (input.scanRun(valueRun, leftKeyword())) m_cueAlignment = Left; // 5. If value is a case-sensitive match for the string "right", // then let cue's WebVTT cue text alignment be right alignment. else if (input.scanRun(valueRun, rightKeyword())) m_cueAlignment = Right; break; } case RegionId: m_regionId = input.extractString(valueRun); break; case None: break; } // Make sure the entire run is consumed. input.skipRun(valueRun); } // If cue's line position is not auto or cue's size is not 100 or cue's // writing direction is not horizontal, but cue's region identifier is not // the empty string, let cue's region identifier be the empty string. if (m_regionId.isEmpty()) return; if (!lineIsAuto() || m_cueSize != 100 || m_writingDirection != Horizontal) m_regionId = emptyString(); }