aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikita Baryshnikov <[email protected]>2025-02-28 16:41:19 +0300
committerNikita Baryshnikov <[email protected]>2025-03-04 17:33:01 +0000
commit895af3d632d29f2e4d5ed6877ace08217880d2c8 (patch)
tree7c2bfe16bf54a7df47119e75fcbbeb0fec29c976
parentf9fa4255de098e7013a8f0162452464cc87e669a (diff)
Utils: CamelCaseCursor further simplify templates
Improves b8ec1c4b03fbcf4999be12991325cb5348ae3cf4 Change-Id: Ib45e9a54f9526214abe87678e7b1e5b5bc68a4d4 Reviewed-by: AndrĂ© Hartmann <[email protected]>
-rw-r--r--src/libs/utils/camelcasecursor.cpp120
-rw-r--r--src/libs/utils/camelcasecursor.h1
2 files changed, 57 insertions, 64 deletions
diff --git a/src/libs/utils/camelcasecursor.cpp b/src/libs/utils/camelcasecursor.cpp
index ded3ba4ef99..98a68ee9755 100644
--- a/src/libs/utils/camelcasecursor.cpp
+++ b/src/libs/utils/camelcasecursor.cpp
@@ -7,22 +7,22 @@
#include "multitextcursor.h"
#include <QLineEdit>
-#include <QPlainTextEdit>
namespace Utils {
+namespace {
-template<typename C, typename E>
-bool moveCursor(C *cursor, E edit, QTextCursor::MoveOperation direction, QTextCursor::MoveMode mode);
+template<typename C>
+bool moveCursor(C *cursor, QTextCursor::MoveOperation direction, QTextCursor::MoveMode mode);
template<>
-bool moveCursor(QTextCursor *cursor, std::nullptr_t, QTextCursor::MoveOperation direction,
+bool moveCursor(QTextCursor *cursor, QTextCursor::MoveOperation direction,
QTextCursor::MoveMode mode)
{
return cursor->movePosition(direction, mode);
}
-template<typename C>
-bool moveCursor(C *, QLineEdit *edit, QTextCursor::MoveOperation direction, QTextCursor::MoveMode mode)
+template<>
+bool moveCursor(QLineEdit *edit, QTextCursor::MoveOperation direction, QTextCursor::MoveMode mode)
{
bool mark = (mode == QTextCursor::KeepAnchor);
switch (direction) {
@@ -44,17 +44,17 @@ bool moveCursor(C *, QLineEdit *edit, QTextCursor::MoveOperation direction, QTex
return edit->cursorPosition() > 0 && edit->cursorPosition() < edit->text().size();
}
-template<typename C, typename E>
-QChar charUnderCursor(C *cursor, E edit);
+template<typename C>
+QChar charUnderCursor(C *cursor);
template<>
-QChar charUnderCursor(QTextCursor *cursor, std::nullptr_t)
+QChar charUnderCursor(QTextCursor *cursor)
{
return cursor->document()->characterAt(cursor->position());
}
-template<typename C>
-QChar charUnderCursor(C *, QLineEdit *edit)
+template<>
+QChar charUnderCursor(QLineEdit *edit)
{
const int pos = edit->cursorPosition();
if (pos < 0 || pos >= edit->text().length())
@@ -63,17 +63,17 @@ QChar charUnderCursor(C *, QLineEdit *edit)
return edit->text().at(pos);
};
-template<typename C, typename E>
-int position(C *cursor, E edit);
+template<typename C>
+int position(C *cursor);
template<>
-int position(QTextCursor *cursor, std::nullptr_t)
+int position(QTextCursor *cursor)
{
return cursor->position();
}
-template<typename C>
-int position(C *, QLineEdit *edit)
+template<>
+int position(QLineEdit *edit)
{
return edit->cursorPosition();
}
@@ -86,27 +86,32 @@ enum class Input {
Other
};
-template<typename C, typename E>
-bool camelCaseLeft(C *cursor, E edit, QTextCursor::MoveMode mode)
+static Input inputFromChar(QChar c)
+{
+ Input input = Input::Other;
+ if (c.isUpper())
+ input = Input::Upper;
+ else if (c.isLower() || c.isDigit())
+ input = Input::Lower;
+ else if (c == '_')
+ input = Input::Underscore;
+ else if (c.isSpace() && c != QChar::ParagraphSeparator)
+ input = Input::Space;
+ else
+ input = Input::Other;
+ return input;
+}
+
+template<typename C>
+bool camelCaseLeft(C *cursor, QTextCursor::MoveMode mode)
{
int state = 0;
- if (!moveCursor(cursor, edit, QTextCursor::Left, mode))
+ if (!moveCursor(cursor, QTextCursor::Left, mode))
return false;
for (;;) {
- QChar c = charUnderCursor(cursor, edit);
- Input input = Input::Other;
- if (c.isUpper())
- input = Input::Upper;
- else if (c.isLower() || c.isDigit())
- input = Input::Lower;
- else if (c == '_')
- input = Input::Underscore;
- else if (c.isSpace() && c != QChar::ParagraphSeparator)
- input = Input::Space;
- else
- input = Input::Other;
+ const Input input = inputFromChar(charUnderCursor(cursor));
switch (state) {
case 0:
@@ -124,8 +129,8 @@ bool camelCaseLeft(C *cursor, E edit, QTextCursor::MoveMode mode)
state = 4;
break;
default:
- moveCursor(cursor, edit, QTextCursor::Right, mode);
- return moveCursor(cursor, edit, QTextCursor::WordLeft, mode);
+ moveCursor(cursor, QTextCursor::Right, mode);
+ return moveCursor(cursor, QTextCursor::WordLeft, mode);
}
break;
case 1:
@@ -133,7 +138,7 @@ bool camelCaseLeft(C *cursor, E edit, QTextCursor::MoveMode mode)
case Input::Upper:
break;
default:
- moveCursor(cursor, edit, QTextCursor::Right, mode);
+ moveCursor(cursor, QTextCursor::Right, mode);
return true;
}
break;
@@ -144,7 +149,7 @@ bool camelCaseLeft(C *cursor, E edit, QTextCursor::MoveMode mode)
case Input::Lower:
break;
default:
- moveCursor(cursor, edit, QTextCursor::Right, mode);
+ moveCursor(cursor, QTextCursor::Right, mode);
return true;
}
break;
@@ -159,7 +164,7 @@ bool camelCaseLeft(C *cursor, E edit, QTextCursor::MoveMode mode)
state = 2;
break;
default:
- moveCursor(cursor, edit, QTextCursor::Right, mode);
+ moveCursor(cursor, QTextCursor::Right, mode);
return true;
}
break;
@@ -177,36 +182,25 @@ bool camelCaseLeft(C *cursor, E edit, QTextCursor::MoveMode mode)
state = 3;
break;
default:
- moveCursor(cursor, edit, QTextCursor::Right, mode);
- if (position(cursor, edit) == 0)
+ moveCursor(cursor, QTextCursor::Right, mode);
+ if (position(cursor) == 0)
return true;
- return moveCursor(cursor, edit, QTextCursor::WordLeft, mode);
+ return moveCursor(cursor, QTextCursor::WordLeft, mode);
}
}
- if (!moveCursor(cursor, edit, QTextCursor::Left, mode))
+ if (!moveCursor(cursor, QTextCursor::Left, mode))
return true;
}
}
-template<typename C, typename E>
-bool camelCaseRight(C *cursor, E edit, QTextCursor::MoveMode mark)
+template<typename C>
+bool camelCaseRight(C *cursor, QTextCursor::MoveMode mark)
{
int state = 0;
for (;;) {
- QChar c = charUnderCursor(cursor, edit);
- Input input = Input::Other;
- if (c.isUpper())
- input = Input::Upper;
- else if (c.isLower() || c.isDigit())
- input = Input::Lower;
- else if (c == '_')
- input = Input::Underscore;
- else if (c.isSpace() && c != QChar::ParagraphSeparator)
- input = Input::Space;
- else
- input = Input::Other;
+ const Input input = inputFromChar(charUnderCursor(cursor));
switch (state) {
case 0:
@@ -221,7 +215,7 @@ bool camelCaseRight(C *cursor, E edit, QTextCursor::MoveMode mark)
state = 6;
break;
default:
- return moveCursor(cursor, edit, QTextCursor::WordRight, mark);
+ return moveCursor(cursor, QTextCursor::WordRight, mark);
}
break;
case 1:
@@ -245,7 +239,7 @@ bool camelCaseRight(C *cursor, E edit, QTextCursor::MoveMode mark)
case Input::Upper:
break;
case Input::Lower:
- moveCursor(cursor, edit, QTextCursor::Left, mark);
+ moveCursor(cursor, QTextCursor::Left, mark);
return true;
case Input::Underscore:
state = 6;
@@ -295,14 +289,16 @@ bool camelCaseRight(C *cursor, E edit, QTextCursor::MoveMode mark)
}
break;
}
- if (!moveCursor(cursor, edit, QTextCursor::Right, mark))
+ if (!moveCursor(cursor, QTextCursor::Right, mark))
return false;
}
}
+} // anonymous namespace
+
bool CamelCaseCursor::left(QTextCursor *cursor, QTextCursor::MoveMode mode)
{
- return camelCaseLeft(cursor, nullptr, mode);
+ return camelCaseLeft(cursor, mode);
}
bool CamelCaseCursor::left(MultiTextCursor *cursor, QTextCursor::MoveMode mode)
@@ -316,13 +312,12 @@ bool CamelCaseCursor::left(MultiTextCursor *cursor, QTextCursor::MoveMode mode)
bool CamelCaseCursor::left(QLineEdit *edit, QTextCursor::MoveMode mode)
{
- QTextCursor temp;
- return camelCaseLeft(&temp, edit, mode);
+ return camelCaseLeft(edit, mode);
}
bool CamelCaseCursor::right(QTextCursor *cursor, QTextCursor::MoveMode mode)
{
- return camelCaseRight(cursor, nullptr, mode);
+ return camelCaseRight(cursor, mode);
}
bool CamelCaseCursor::right(MultiTextCursor *cursor, QTextCursor::MoveMode mode)
@@ -336,8 +331,7 @@ bool CamelCaseCursor::right(MultiTextCursor *cursor, QTextCursor::MoveMode mode)
bool CamelCaseCursor::right(QLineEdit *edit, QTextCursor::MoveMode mode)
{
- QTextCursor temp;
- return camelCaseRight(&temp, edit, mode);
+ return camelCaseRight(edit, mode);
}
} // namespace Utils
diff --git a/src/libs/utils/camelcasecursor.h b/src/libs/utils/camelcasecursor.h
index fd7fc5754c6..d4152971657 100644
--- a/src/libs/utils/camelcasecursor.h
+++ b/src/libs/utils/camelcasecursor.h
@@ -10,7 +10,6 @@
QT_BEGIN_NAMESPACE
class QLineEdit;
-class QPlainTextEdit;
QT_END_NAMESPACE
namespace Utils {