diff --git a/DSView/pv/data/logicsnapshot.cpp b/DSView/pv/data/logicsnapshot.cpp index 98d79bbf..b30187dd 100644 --- a/DSView/pv/data/logicsnapshot.cpp +++ b/DSView/pv/data/logicsnapshot.cpp @@ -882,6 +882,7 @@ bool LogicSnapshot::pattern_search(int64_t start, int64_t end, bool nxt, int64_t while(nxt ? index <= end : index >= start) { // get expacted and current pattern exp_index.clear(); + cur_edge.clear(); for(it_type iterator = pattern.begin(); iterator != pattern.end(); iterator++) { uint16_t ch_index = iterator->first; @@ -934,6 +935,7 @@ bool LogicSnapshot::pattern_search(int64_t start, int64_t end, bool nxt, int64_t (nxt ? sub_index <= end : sub_index >= start)) { // get expacted and current pattern exp_index.clear(); + cur_edge.clear(); for(it_type iterator = pattern.begin(); iterator != pattern.end(); iterator++) { uint16_t ch_index = iterator->first; @@ -1006,13 +1008,18 @@ bool LogicSnapshot::pattern_search(int64_t start, int64_t end, bool nxt, int64_t cur_sample[ch_index] = get_sample(exp_index[seq], ch_index); find_edge = get_pre_edge(exp_index[seq], cur_sample[ch_index], 1, ch_index); } - if (find_edge) + if (find_edge) { cur_sample[ch_index] = get_sample(exp_index[seq], ch_index); - else + if (iterator->second[cur_match_pos] == 'C') + exp_sample[ch_index] = cur_sample[ch_index]; + } else break; }while(cur_sample[ch_index] != exp_sample[ch_index]); } - seq++; + if (find_edge) + seq++; + else + break; } if (find_edge) { if (nxt) diff --git a/DSView/pv/dock/searchdock.cpp b/DSView/pv/dock/searchdock.cpp index 6f6f143e..d702373e 100644 --- a/DSView/pv/dock/searchdock.cpp +++ b/DSView/pv/dock/searchdock.cpp @@ -234,22 +234,23 @@ void SearchDock::on_set() { dialogs::Search dlg(this, _session, _pattern); if (dlg.exec()) { - _pattern = dlg.get_pattern(); + std::map new_pattern = dlg.get_pattern(); QString search_label; - for (auto& iter:_pattern) { + for (auto& iter:new_pattern) { iter.second.remove(QChar(' '), Qt::CaseInsensitive); iter.second = iter.second.toUpper(); search_label.push_back(iter.second); -// if (iter.second != "XXXXXXXXXXXXXXXX") { -// search_label.push_back(QString::number(iter.first)); -// search_label.push_back("/"); -// } } _search_value->setText(search_label); QFontMetrics fm = this->fontMetrics(); _search_value->setFixedWidth(fm.width(search_label)+_search_button->width()+20); + + if (new_pattern != _pattern) { + _view.set_search_pos(_view.get_search_pos(), false); + _pattern = new_pattern; + } } }