| 1313 | } |
| 1314 | |
| 1315 | void CLogView::Add(int beginIndex, int line, const Message& msg) |
| 1316 | { |
| 1317 | if (IsClearMessage(msg)) |
| 1318 | ClearView(); |
| 1319 | |
| 1320 | if (!IsIncluded(msg)) |
| 1321 | return; |
| 1322 | |
| 1323 | if (IsBeepMessage(msg)) |
| 1324 | MessageBeep(0xFFFFFFFF); // A simple beep. If the sound card is not available, the sound is generated using the speaker. |
| 1325 | |
| 1326 | m_dirty = true; |
| 1327 | m_changed = true; |
| 1328 | auto it = m_logLines.begin(); |
| 1329 | while (it != m_logLines.end() && it->line < beginIndex) |
| 1330 | ++it; |
| 1331 | m_logLines.erase(m_logLines.begin(), it); |
| 1332 | |
| 1333 | int viewline = m_logLines.size(); |
| 1334 | m_logLines.push_back(LogLine(line)); |
| 1335 | |
| 1336 | if (m_autoScrollDown && MatchFilterType(FilterType::Stop, msg)) |
| 1337 | { |
| 1338 | m_stop = [this, viewline] () |
| 1339 | { |
| 1340 | StopScrolling(); |
| 1341 | ScrollToIndex(viewline, true); |
| 1342 | }; |
| 1343 | return; |
| 1344 | } |
| 1345 | |
| 1346 | if (MatchFilterType(FilterType::Track, msg)) |
| 1347 | { |
| 1348 | m_autoScrollDown = false; |
| 1349 | m_track = [this, viewline] () |
| 1350 | { |
| 1351 | return ScrollToIndex(viewline, true); |
| 1352 | }; |
| 1353 | } |
| 1354 | } |
| 1355 | |
| 1356 | void CLogView::BeginUpdate() |
| 1357 | { |