Changeset View
Changeset View
Standalone View
Standalone View
addons/symbolviewer/plugin_katesymbolviewer.cpp
Context not available. | |||||
214 | 214 | | |||
---|---|---|---|---|---|
215 | void KatePluginSymbolViewerView::slotDocEdited() | 215 | void KatePluginSymbolViewerView::slotDocEdited() | ||
216 | { | 216 | { | ||
217 | m_currItemTimer.stop(); // Avoid unneeded update | ||||
217 | m_updateTimer.start(500); | 218 | m_updateTimer.start(500); | ||
218 | } | 219 | } | ||
219 | 220 | | |||
220 | void KatePluginSymbolViewerView::cursorPositionChanged() | 221 | void KatePluginSymbolViewerView::cursorPositionChanged() | ||
221 | { | 222 | { | ||
222 | m_currItemTimer.start(100); | 223 | m_currItemTimer.start(200); | ||
223 | } | 224 | } | ||
224 | 225 | | |||
225 | void KatePluginSymbolViewerView::updateCurrTreeItem() | 226 | void KatePluginSymbolViewerView::updateCurrTreeItem() | ||
Context not available. | |||||
235 | if (!doc) { | 236 | if (!doc) { | ||
236 | return; | 237 | return; | ||
237 | } | 238 | } | ||
239 | | ||||
238 | int currLine = editView->cursorPositionVirtual().line(); | 240 | int currLine = editView->cursorPositionVirtual().line(); | ||
239 | 241 | | |||
242 | if (currLine >= m_firstLine && currLine <= m_lastLine && m_firstLine != m_lastLine) { | ||||
243 | // Gotcha! Nothing to do | ||||
244 | return; | ||||
245 | } | ||||
246 | | ||||
240 | int newItemLine = 0; | 247 | int newItemLine = 0; | ||
241 | QTreeWidgetItem *newItem = nullptr; | 248 | QTreeWidgetItem *newItem = nullptr; | ||
242 | QTreeWidgetItem *tmp = nullptr; | 249 | QTreeWidgetItem *tmp = nullptr; | ||
250 | m_firstLine = std::numeric_limits<int>::max(); | ||||
251 | m_lastLine = std::numeric_limits<int>::min(); | ||||
252 | m_stopSearch = false; | ||||
243 | for (int i=0; i<m_symbols->topLevelItemCount(); i++) { | 253 | for (int i=0; i<m_symbols->topLevelItemCount(); i++) { | ||
244 | tmp = newActveItem(newItemLine, currLine, m_symbols->topLevelItem(i)); | 254 | tmp = newActveItem(newItemLine, currLine, m_symbols->topLevelItem(i)); | ||
245 | if (tmp) newItem = tmp; | 255 | if (tmp) newItem = tmp; | ||
256 | if (m_stopSearch) break; | ||||
246 | } | 257 | } | ||
247 | 258 | | |||
248 | if (newItem) { | 259 | if (newItem) { | ||
Context not available. | |||||
254 | 265 | | |||
255 | QTreeWidgetItem *KatePluginSymbolViewerView::newActveItem(int &newItemLine, int currLine, QTreeWidgetItem *item) | 266 | QTreeWidgetItem *KatePluginSymbolViewerView::newActveItem(int &newItemLine, int currLine, QTreeWidgetItem *item) | ||
256 | { | 267 | { | ||
268 | if (m_stopSearch) return nullptr; | ||||
269 | | ||||
257 | QTreeWidgetItem *newItem = nullptr; | 270 | QTreeWidgetItem *newItem = nullptr; | ||
258 | QTreeWidgetItem *tmp = nullptr; | 271 | QTreeWidgetItem *tmp = nullptr; | ||
259 | int itemLine = item->data(1, Qt::DisplayRole).toInt(); | 272 | int itemLine = item->data(1, Qt::DisplayRole).toInt(); | ||
260 | 273 | | |||
261 | if ((itemLine <= currLine) && (itemLine > newItemLine)) { | 274 | if ((itemLine <= currLine) && (itemLine > newItemLine)) { | ||
262 | newItemLine = itemLine; | 275 | newItemLine = itemLine; | ||
276 | m_firstLine = itemLine; | ||||
277 | m_lastLine = qMax(m_lastLine, m_firstLine); | ||||
263 | newItem = item; | 278 | newItem = item; | ||
264 | } | 279 | } | ||
265 | 280 | | |||
281 | if (itemLine > currLine) { // Nested "if" to avoid unclear cluttered parentheses | ||||
282 | if ( ((itemLine - 1) < m_lastLine) || (m_lastLine < currLine) || (m_lastLine == m_firstLine) ) { | ||||
283 | m_lastLine = itemLine - 1; | ||||
284 | if (m_firstLine == m_lastLine) m_stopSearch = true; | ||||
285 | } | ||||
286 | } | ||||
287 | | ||||
266 | for (int i=0; i<item->childCount(); i++) { | 288 | for (int i=0; i<item->childCount(); i++) { | ||
289 | if (m_stopSearch) break; | ||||
267 | tmp = newActveItem(newItemLine, currLine, item->child(i)); | 290 | tmp = newActveItem(newItemLine, currLine, item->child(i)); | ||
268 | if (tmp) newItem = tmp; | 291 | if (tmp) newItem = tmp; | ||
269 | } | 292 | } | ||
Context not available. | |||||
335 | else | 358 | else | ||
336 | new QTreeWidgetItem(m_symbols, QStringList(i18n("Sorry. Language not supported yet") ) ); | 359 | new QTreeWidgetItem(m_symbols, QStringList(i18n("Sorry. Language not supported yet") ) ); | ||
337 | 360 | | |||
361 | // To by-pass the check in updateCurrTreeItem() | ||||
362 | m_firstLine = std::numeric_limits<int>::max(); | ||||
363 | m_lastLine = std::numeric_limits<int>::min(); | ||||
364 | | ||||
338 | updateCurrTreeItem(); | 365 | updateCurrTreeItem(); | ||
366 | | ||||
339 | if (m_sort->isChecked()) | 367 | if (m_sort->isChecked()) | ||
340 | m_symbols->sortItems(0, Qt::AscendingOrder); | 368 | m_symbols->sortItems(0, Qt::AscendingOrder); | ||
341 | } | 369 | } | ||
Context not available. |