void VideoRegionsConfigDialog::apply() { // FIXME: Bad code AutoLock al(m_config); // // Clear old video classes names container // StringVector *videoClasses = m_config->getVideoClassNames(); videoClasses->clear(); std::vector<Rect> *videoRects = m_config->getVideoRects(); videoRects->clear(); // // Split text from text area to string array // StringStorage classNames; m_videoClasses.getText(&classNames); size_t count = 0; TCHAR delimiters[] = _T(" \n\r\t,;"); classNames.split(delimiters, NULL, &count); if (count != 0) { std::vector<StringStorage> chunks(count); classNames.split(delimiters, &chunks.front(), &count); for (size_t i = 0; i < count; i++) { if (!chunks[i].isEmpty()) { videoClasses->push_back(chunks[i].getString()); } } } StringStorage videoRectsStringStorage; m_videoRects.getText(&videoRectsStringStorage); count = 0; videoRectsStringStorage.split(delimiters, NULL, &count); if (count != 0) { std::vector<StringStorage> chunks(count); videoRectsStringStorage.split(delimiters, &chunks.front(), &count); for (size_t i = 0; i < count; i++) { if (!chunks[i].isEmpty()) { try { videoRects->push_back(RectSerializer::toRect(&chunks[i])); } catch (...) { // Ignore wrong formatted strings } } } } // // TODO: Create parseUInt method // StringStorage vriss; m_videoRecognitionInterval.getText(&vriss); int interval; StringParser::parseInt(vriss.getString(), &interval); m_config->setVideoRecognitionInterval((unsigned int)interval); }