logic: Showing annotations in fulltext search results

* new LocationType for errors
* refactored CodeController
* cache active locations in CodeController for later manipulations
This commit is contained in:
Eberhard Graether
2016-06-08 20:33:34 +02:00
parent c6fa1f0969
commit 5173400b8d
19 changed files with 184 additions and 213 deletions
+8 -11
View File
@@ -433,10 +433,10 @@ void QtCodeArea::mouseReleaseEvent(QMouseEvent* event)
m_eventPosition = event->pos();
setIDECursorPosition();
}
else if (!m_fileWidget->hasErrors())
else
{
QTextCursor cursor = this->cursorForPosition(event->pos());
std::vector<const Annotation*> annotations = getNonScopeAnnotationsForPosition(cursor.position());
std::vector<const Annotation*> annotations = getInteractiveAnnotationsForPosition(cursor.position());
activateTokenLocations(annotations);
activateLocalSymbols(annotations);
@@ -464,7 +464,7 @@ void QtCodeArea::mouseMoveEvent(QMouseEvent* event)
QTextCursor cursor = this->cursorForPosition(event->pos());
std::vector<const Annotation*> annotations = getNonScopeAnnotationsForPosition(cursor.position());
std::vector<const Annotation*> annotations = getInteractiveAnnotationsForPosition(cursor.position());
bool same = annotations.size() == m_hoveredAnnotations.size();
if (same)
@@ -541,13 +541,15 @@ void QtCodeArea::setIDECursorPosition()
MessageMoveIDECursor(m_locationFile->getFilePath().str(), lineColumn.first, lineColumn.second).dispatch();
}
std::vector<const QtCodeArea::Annotation*> QtCodeArea::getNonScopeAnnotationsForPosition(int pos) const
std::vector<const QtCodeArea::Annotation*> QtCodeArea::getInteractiveAnnotationsForPosition(int pos) const
{
std::vector<const QtCodeArea::Annotation*> annotations;
for (const Annotation& annotation : m_annotations)
{
if (annotation.locationType != LOCATION_SCOPE && pos >= annotation.start && pos <= annotation.end)
const LocationType& type = annotation.locationType;
if ((type == LOCATION_TOKEN || type == LOCATION_LOCAL_SYMBOL || type == LOCATION_ERROR)
&& pos >= annotation.start && pos <= annotation.end)
{
annotations.push_back(&annotation);
}
@@ -674,7 +676,6 @@ void QtCodeArea::createAnnotations(std::shared_ptr<TokenLocationFile> locationFi
annotation.locationId = startLocation->getId();
annotation.locationType = startLocation->getType();
annotation.isError = false;
annotation.isActive = false;
annotation.isFocused = false;
@@ -690,8 +691,6 @@ void QtCodeArea::annotateText()
const std::vector<Id>& activeLocalSymbolIds = m_fileWidget->getActiveLocalSymbolIds();
const std::vector<Id>& focusIds = m_fileWidget->getFocusedTokenIds();
bool isError = m_fileWidget->hasErrors();
bool needsUpdate = false;
for (Annotation& annotation: m_annotations)
{
@@ -705,8 +704,6 @@ void QtCodeArea::annotateText()
);
annotation.isFocused = std::find(focusIds.begin(), focusIds.end(), annotation.tokenId) != focusIds.end();
annotation.isError = isError;
const AnnotationColor& newColor = getAnnotationColorForAnnotation(annotation);
if ((newColor.text != oldColor.text || !m_wasAnnotated))
{
@@ -933,7 +930,7 @@ const QtCodeArea::AnnotationColor& QtCodeArea::getAnnotationColorForAnnotation(c
{
i = 6;
}
else if (annotation.isError)
else if (annotation.locationType == LOCATION_ERROR)
{
i = 9;
}