m_statusLabel->setBaseSize(150, 12);
ui->statusBar->addWidget(m_statusLabel, 1);
+ // cache the original background color of the search text box
+ m_searchTextboxBackgroundColor = ui->searchTextBox->palette().base().color();
+
// setup framebuffer tab
QGridLayout* framebufferTab_layout = new QGridLayout;
m_framebufferExplorer = new vogleditor_QFramebufferExplorer(ui->framebufferTab);
m_openFilename.clear();
m_backtraceToJsonMap.clear();
m_backtraceDoc.clear();
- m_searchApicallResults.clear();
reset_tracefile_ui();
{
ui->treeView->setCurrentIndex(index);
}
-
- if (m_searchApicallResults.size() > 0 && !ui->searchTextBox->text().isEmpty())
- {
- QItemSelectionModel* pSelection = ui->treeView->selectionModel();
- for (int i = 0; i < m_searchApicallResults.size(); i++)
- {
- pSelection->select(m_searchApicallResults[i], QItemSelectionModel::Select | QItemSelectionModel::Rows);
- }
- ui->treeView->setSelectionModel(pSelection);
- }
}
void VoglEditor::on_searchTextBox_textChanged(const QString &searchText)
{
- QModelIndex curSearchIndex = ui->treeView->currentIndex();
- if (curSearchIndex.isValid() == false)
- {
- return;
- }
-
- // store original background color of the search text box so that it can be turned to red and later restored.
- static const QColor sOriginalTextBoxBackground = ui->searchTextBox->palette().base().color();
-
- // clear previous items
- QItemSelectionModel* pSelection = ui->treeView->selectionModel();
- if (pSelection != NULL)
- {
- for (int i = 0; i < m_searchApicallResults.size(); i++)
- {
- pSelection->select(m_searchApicallResults[i], QItemSelectionModel::Clear | QItemSelectionModel::Rows);
- }
- ui->treeView->setSelectionModel(pSelection);
- }
+ QPalette palette(ui->searchTextBox->palette());
+ palette.setColor(QPalette::Base, m_searchTextboxBackgroundColor);
+ ui->searchTextBox->setPalette(palette);
- // find new matches
- m_searchApicallResults.clear();
if (m_pApicallTreeModel != NULL)
{
- m_searchApicallResults = m_pApicallTreeModel->find_search_matches(searchText);
+ m_pApicallTreeModel->set_highlight_search_string(searchText);
}
- // if there are matches, restore the textbox background to its original color
- if (m_searchApicallResults.size() > 0)
- {
- QPalette palette(ui->searchTextBox->palette());
- palette.setColor(QPalette::Base, sOriginalTextBoxBackground);
- ui->searchTextBox->setPalette(palette);
- }
-
- // select new items
- if (!searchText.isEmpty())
- {
- if (m_searchApicallResults.size() > 0)
- {
- // scroll to the first result, but don't select it
- selectApicallModelIndex(m_searchApicallResults[0], true, false);
- }
- else
- {
- // no items were found, so set the textbox background to red
- QPalette palette(ui->searchTextBox->palette());
- palette.setColor(QPalette::Base, Qt::red);
- ui->searchTextBox->setPalette(palette);
- }
- }
+ // need to briefly give the treeview focus so that it properly redraws and highlights the matching rows
+ // then return focus to the search textbox so that typed keys are not lost
+ ui->treeView->setFocus();
+ ui->searchTextBox->setFocus();
}
void VoglEditor::on_searchNextButton_clicked()
if (m_pApicallTreeModel != NULL)
{
QModelIndex index = m_pApicallTreeModel->find_next_search_result(m_pCurrentCallTreeItem, ui->searchTextBox->text());
- selectApicallModelIndex(index, true, true);
+ if (index.isValid())
+ {
+ selectApicallModelIndex(index, true, true);
+ ui->treeView->setFocus();
+ }
}
}
if (m_pApicallTreeModel != NULL)
{
QModelIndex index = m_pApicallTreeModel->find_prev_search_result(m_pCurrentCallTreeItem, ui->searchTextBox->text());
- selectApicallModelIndex(index, true, true);
+ if (index.isValid())
+ {
+ selectApicallModelIndex(index, true, true);
+ ui->treeView->setFocus();
+ }
}
}
if (m_pApicallTreeModel != NULL)
{
vogleditor_apiCallTreeItem* pPrevItemWithSnapshot = m_pApicallTreeModel->find_prev_snapshot(m_pCurrentCallTreeItem);
- selectApicallModelIndex(m_pApicallTreeModel->indexOf(pPrevItemWithSnapshot), true, true);
- ui->treeView->setFocus();
+ if (pPrevItemWithSnapshot != NULL)
+ {
+ selectApicallModelIndex(m_pApicallTreeModel->indexOf(pPrevItemWithSnapshot), true, true);
+ ui->treeView->setFocus();
+ }
}
}
if (m_pApicallTreeModel != NULL)
{
vogleditor_apiCallTreeItem* pNextItemWithSnapshot = m_pApicallTreeModel->find_next_snapshot(m_pCurrentCallTreeItem);
- selectApicallModelIndex(m_pApicallTreeModel->indexOf(pNextItemWithSnapshot), true, true);
- ui->treeView->setFocus();
+ if (pNextItemWithSnapshot != NULL)
+ {
+ selectApicallModelIndex(m_pApicallTreeModel->indexOf(pNextItemWithSnapshot), true, true);
+ ui->treeView->setFocus();
+ }
}
}
if (m_pApicallTreeModel != NULL)
{
vogleditor_apiCallTreeItem* pPrevItem = m_pApicallTreeModel->find_prev_drawcall(m_pCurrentCallTreeItem);
- selectApicallModelIndex(m_pApicallTreeModel->indexOf(pPrevItem), true, true);
- ui->treeView->setFocus();
+ if (pPrevItem != NULL)
+ {
+ selectApicallModelIndex(m_pApicallTreeModel->indexOf(pPrevItem), true, true);
+ ui->treeView->setFocus();
+ }
}
}
if (m_pApicallTreeModel != NULL)
{
vogleditor_apiCallTreeItem* pNextItem = m_pApicallTreeModel->find_next_drawcall(m_pCurrentCallTreeItem);
- selectApicallModelIndex(m_pApicallTreeModel->indexOf(pNextItem), true, true);
- ui->treeView->setFocus();
+ if (pNextItem != NULL)
+ {
+ selectApicallModelIndex(m_pApicallTreeModel->indexOf(pNextItem), true, true);
+ ui->treeView->setFocus();
+ }
}
}
-
void VoglEditor::on_program_edited(vogl_program_state* pNewProgramState)
{
VOGL_NOTE_UNUSED(pNewProgramState);
setCursor(origCursor);
}
+
+void VoglEditor::on_searchTextBox_returnPressed()
+{
+ if (m_pApicallTreeModel != NULL)
+ {
+ QModelIndex index = m_pApicallTreeModel->find_next_search_result(m_pCurrentCallTreeItem, ui->searchTextBox->text());
+ if (index.isValid())
+ {
+ // a valid item was found, scroll to it and select it
+ selectApicallModelIndex(index, true, true);
+ }
+ else
+ {
+ // no items were found, so set the textbox background to red (it will get cleared to the original color if the user edits the search text)
+ QPalette palette(ui->searchTextBox->palette());
+ palette.setColor(QPalette::Base, Qt::red);
+ ui->searchTextBox->setPalette(palette);
+ }
+ }
+}