File indexing completed on 2024-04-21 03:58:07

0001 /*
0002     SPDX-FileCopyrightText: KDE Developers
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "jumps.h"
0008 
0009 using namespace KateVi;
0010 
0011 void Jumps::add(const KTextEditor::Cursor cursor)
0012 {
0013     for (auto iterator = m_jumps.begin(); iterator != m_jumps.end(); iterator++) {
0014         if ((*iterator).line() == cursor.line()) {
0015             m_jumps.erase(iterator);
0016             break;
0017         }
0018     }
0019 
0020     m_jumps.push_back(cursor);
0021     m_current = m_jumps.end();
0022 }
0023 
0024 KTextEditor::Cursor Jumps::next(const KTextEditor::Cursor cursor)
0025 {
0026     if (m_current == m_jumps.end()) {
0027         return cursor;
0028     }
0029 
0030     KTextEditor::Cursor jump;
0031     if (m_current + 1 != m_jumps.end()) {
0032         jump = *(++m_current);
0033     } else {
0034         jump = *(m_current);
0035     }
0036 
0037     return jump;
0038 }
0039 
0040 KTextEditor::Cursor Jumps::prev(const KTextEditor::Cursor cursor)
0041 {
0042     if (m_current == m_jumps.end()) {
0043         add(cursor);
0044         m_current--;
0045     }
0046 
0047     if (m_current != m_jumps.begin()) {
0048         m_current--;
0049         return *m_current;
0050     }
0051 
0052     return cursor;
0053 }
0054 
0055 void Jumps::readSessionConfig(const KConfigGroup &config)
0056 {
0057     // Format: jump1.line, jump1.column, jump2.line, jump2.column, jump3.line, ...
0058     m_jumps.clear();
0059     QStringList jumps = config.readEntry("JumpList", QStringList());
0060 
0061     for (int i = 0; i + 1 < jumps.size(); i += 2) {
0062         KTextEditor::Cursor jump = {jumps.at(i).toInt(), jumps.at(i + 1).toInt()};
0063         m_jumps.push_back(jump);
0064     }
0065 
0066     m_current = m_jumps.end();
0067 }
0068 
0069 void Jumps::writeSessionConfig(KConfigGroup &config) const
0070 {
0071     // Format: jump1.line, jump1.column, jump2.line, jump2.column, jump3.line, ...
0072     QStringList l;
0073     for (const auto &jump : m_jumps) {
0074         l << QString::number(jump.line()) << QString::number(jump.column());
0075     }
0076     config.writeEntry("JumpList", l);
0077 }