Skip to content

Commit 05a11c7

Browse files
committed
Get rid of requestTrackFocus()
1 parent f90f74a commit 05a11c7

File tree

6 files changed

+26
-45
lines changed

6 files changed

+26
-45
lines changed

src/application/service/editor_service.cpp

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,10 +1288,10 @@ quint8 EditorService::delayAtCurrentPosition() const
12881288

12891289
bool EditorService::requestPosition(const Position & position)
12901290
{
1291-
return requestPosition(position.pattern, position.track, position.column, position.line, position.lineColumn);
1291+
return requestPosition(position.pattern, position.track, position.column, static_cast<qint32>(position.line), position.lineColumn);
12921292
}
12931293

1294-
bool EditorService::requestPosition(quint64 pattern, quint64 track, quint64 column, quint64 line, quint64 lineColumn)
1294+
bool EditorService::requestPosition(quint64 pattern, quint64 track, quint64 column, qint64 line, quint64 lineColumn)
12951295
{
12961296
juzzlin::L(TAG).debug() << "Requesting position: " << pattern << " " << track << " " << column << " " << line << " " << lineColumn;
12971297

@@ -1300,10 +1300,10 @@ bool EditorService::requestPosition(quint64 pattern, quint64 track, quint64 colu
13001300
return false;
13011301
}
13021302

1303-
if (line >= m_song->lineCount(pattern)) {
1304-
juzzlin::L(TAG).error() << "Invalid line index: " << line;
1305-
return false;
1306-
}
1303+
// The requested line index can be outside the valid indices if clicked on the empty area of a column.
1304+
// In that case we'll just clamp to either zero or to the last index which is what the user very likely wants.
1305+
line = std::min(static_cast<int>(line), static_cast<int>(m_song->lineCount(pattern)) - 1);
1306+
line = std::max(static_cast<int>(line), 0);
13071307

13081308
if (!m_song->hasTrack(track)) {
13091309
juzzlin::L(TAG).error() << "Invalid track index: " << track;
@@ -1324,11 +1324,11 @@ bool EditorService::requestPosition(quint64 pattern, quint64 track, quint64 colu
13241324
m_state.cursorPosition.pattern = pattern;
13251325
m_state.cursorPosition.track = track;
13261326
m_state.cursorPosition.column = column;
1327-
m_state.cursorPosition.line = line;
1327+
m_state.cursorPosition.line = static_cast<quint64>(line);
13281328
m_state.cursorPosition.lineColumn = lineColumn;
13291329
notifyPositionChange(oldPosition);
13301330

1331-
setCurrentTime(m_song->lineToTime(m_state.cursorPosition.line));
1331+
setCurrentTime(m_song->lineToTime(static_cast<quint32>(m_state.cursorPosition.line)));
13321332

13331333
return true;
13341334
}
@@ -1343,7 +1343,7 @@ void EditorService::requestPositionByTick(quint64 tick)
13431343
const auto oldPosition = m_state.cursorPosition;
13441344
if (auto && songPosition = m_song->songPositionByTick(tick); songPosition.has_value()) {
13451345
m_state.cursorPosition.pattern = songPosition->pattern;
1346-
m_state.cursorPosition.line = songPosition->line;
1346+
m_state.cursorPosition.line = static_cast<quint64>(songPosition->line);
13471347
notifyPositionChange(oldPosition);
13481348
setSongPosition(songPosition->position);
13491349
setCurrentTime(songPosition->currentTime);
@@ -1355,8 +1355,8 @@ void EditorService::requestScroll(int steps)
13551355
const auto oldPosition = m_state.cursorPosition;
13561356

13571357
// Work in signed domain to handle negative steps correctly
1358-
qint64 newLine = static_cast<qint64>(m_state.cursorPosition.line) + steps;
1359-
const qint64 lineCount = static_cast<qint64>(m_song->lineCount(m_state.cursorPosition.pattern));
1358+
auto newLine = static_cast<qint64>(m_state.cursorPosition.line) + steps;
1359+
const auto lineCount = static_cast<qint64>(m_song->lineCount(m_state.cursorPosition.pattern));
13601360

13611361
// Wrap around correctly
13621362
if (newLine < 0) {
@@ -1371,25 +1371,6 @@ void EditorService::requestScroll(int steps)
13711371
notifyPositionChange(oldPosition);
13721372
}
13731373

1374-
void EditorService::requestTrackFocus(quint64 trackIndex, quint64 column, int line)
1375-
{
1376-
if (m_song->hasTrack(trackIndex)) {
1377-
juzzlin::L(TAG).info() << "Focus for track " << trackIndex << " on column " << column << " on line " << line << " requested";
1378-
if (column < m_song->columnCount(trackIndex)) {
1379-
// The requested line index can be outside the valid indices if clicked on the empty area of a column.
1380-
// In that case we'll just clamp to either zero or to the last index which is what the user very likely wants.
1381-
line = std::min(line, static_cast<int>(currentLineCount()) - 1);
1382-
line = std::max(line, 0);
1383-
const auto oldPosition = m_state.cursorPosition;
1384-
m_state.cursorPosition.track = trackIndex;
1385-
m_state.cursorPosition.column = column;
1386-
m_state.cursorPosition.line = static_cast<quint64>(line);
1387-
m_state.cursorPosition.lineColumn = 0;
1388-
notifyPositionChange(oldPosition);
1389-
}
1390-
}
1391-
}
1392-
13931374
quint64 EditorService::ticksPerLine() const
13941375
{
13951376
return m_song->ticksPerLine();

src/application/service/editor_service.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,8 @@ class EditorService : public QObject
199199
Q_INVOKABLE quint8 delayAtCurrentPosition() const;
200200

201201
bool requestPosition(const Position & position);
202-
Q_INVOKABLE bool requestPosition(quint64 pattern, quint64 track, quint64 column, quint64 line, quint64 lineColumn);
202+
Q_INVOKABLE bool requestPosition(quint64 pattern, quint64 track, quint64 column, qint64 line, quint64 lineColumn);
203203
Q_INVOKABLE void requestScroll(int steps);
204-
Q_INVOKABLE void requestTrackFocus(quint64 trackIndex, quint64 column, int line);
205204

206205
Q_INVOKABLE quint64 ticksPerLine() const;
207206
Q_INVOKABLE quint64 beatsPerMinute() const;

src/unit_tests/editor_service_test/editor_service_test.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -994,7 +994,6 @@ void EditorServiceTest::test_requestPosition_invalidPosition_shouldNotChangePosi
994994
QVERIFY(!editorService.requestPosition(neg, 0, 0, 0, 0));
995995
QVERIFY(!editorService.requestPosition(0, neg, 0, 0, 0));
996996
QVERIFY(!editorService.requestPosition(0, 0, neg, 0, 0));
997-
QVERIFY(!editorService.requestPosition(0, 0, 0, neg, 0));
998997
QVERIFY(!editorService.requestPosition(0, 0, 0, 0, neg));
999998
QCOMPARE(positionChangedSpy.count(), 0);
1000999
QCOMPARE(currentTimeChangedSpy.count(), 0);
@@ -1079,35 +1078,35 @@ void EditorServiceTest::test_requestScroll_shouldChangeCurrentTime()
10791078
QCOMPARE(editorService.currentTime(), "00:00:00.062");
10801079
}
10811080

1082-
void EditorServiceTest::test_requestTrackFocus_shouldChangePosition()
1081+
void EditorServiceTest::test_requestPosition_shouldChangePosition()
10831082
{
10841083
EditorService editorService;
10851084
QSignalSpy positionChangedSpy { &editorService, &EditorService::positionChanged };
10861085

1087-
editorService.requestTrackFocus(0, 0, 0);
1086+
editorService.requestPosition(0, 0, 0, 0, 0);
10881087
QCOMPARE(positionChangedSpy.count(), 1);
10891088

1090-
editorService.requestTrackFocus(0, 1, 0);
1089+
editorService.requestPosition(0, 0, 1, 0, 0);
10911090
QCOMPARE(positionChangedSpy.count(), 1);
10921091

10931092
editorService.requestNewColumn(0);
10941093
QCOMPARE(positionChangedSpy.count(), 2);
1095-
editorService.requestTrackFocus(0, 1, 0);
1094+
editorService.requestPosition(0, 0, 1, 0, 0);
10961095
QCOMPARE(positionChangedSpy.count(), 3);
10971096
QCOMPARE(editorService.position().track, 0);
10981097
QCOMPARE(editorService.position().column, 1);
10991098

1100-
editorService.requestTrackFocus(editorService.trackCount() - 1, 0, 0);
1099+
editorService.requestPosition(0, editorService.trackCount() - 1, 0, 0, 0);
11011100
QCOMPARE(positionChangedSpy.count(), 4);
11021101
QCOMPARE(editorService.position().track, editorService.trackCount() - 1);
11031102
}
11041103

1105-
void EditorServiceTest::test_requestTrackFocus_shouldNotChangePosition()
1104+
void EditorServiceTest::test_requestPosition_shouldNotChangePosition()
11061105
{
11071106
EditorService editorService;
11081107
QSignalSpy positionChangedSpy { &editorService, &EditorService::positionChanged };
11091108

1110-
editorService.requestTrackFocus(editorService.trackCount(), 0, 0);
1109+
editorService.requestPosition(0, editorService.trackCount(), 0, 0, 0);
11111110

11121111
QCOMPARE(positionChangedSpy.count(), 0);
11131112
QCOMPARE(editorService.position().track, 0);

src/unit_tests/editor_service_test/editor_service_test.hpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,13 @@ private slots:
8282

8383
void test_requestPosition_invalidPosition_shouldNotChangePosition();
8484
void test_requestPosition_validPosition_shouldChangePosition();
85+
void test_requestPosition_shouldChangePosition();
86+
void test_requestPosition_shouldNotChangePosition();
8587
void test_resetSongPosition_firstTrackRemoved_shouldResetPosition();
8688

8789
void test_requestScroll_shouldChangePosition();
8890
void test_requestScroll_shouldChangeCurrentTime();
8991

90-
void test_requestTrackFocus_shouldChangePosition();
91-
void test_requestTrackFocus_shouldNotChangePosition();
92-
9392
void test_setCurrentLineCount_shouldSetLineCount();
9493

9594
void test_setCurrentPattern_shouldCreatePattern();

src/view/qml/Editor/MouseHandler.qml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ QtObject {
99
property int _selectionEndLine: 0
1010
property bool _isDragging: false
1111
function handleLeftClicked(track: var, columnIndex: int, lineIndex: int, x: int, y: int): void {
12-
editorService.requestTrackFocus(track.index(), columnIndex, lineIndex);
12+
editorService.requestPosition(track.patternIndex(), track.index(), columnIndex, lineIndex, 0);
1313
editorFocusRequested();
1414
}
1515
function handleRightClicked(track: var, columnIndex: int, lineIndex: int, x: int, y: int): void {
16-
editorService.requestTrackFocus(track.index(), columnIndex, lineIndex);
16+
editorService.requestPosition(track.patternIndex(), track.index(), columnIndex, lineIndex, 0);
1717
editorFocusRequested();
1818
UiService.requestContextMenu(x, y);
1919
}

src/view/qml/Editor/Track.qml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ Rectangle {
2323
function index(): int {
2424
return _index;
2525
}
26+
function patternIndex(): int {
27+
return _patternIndex;
28+
}
2629
function setLocation(patternIndex: int, trackIndex: int): void {
2730
_patternIndex = patternIndex;
2831
_index = trackIndex;

0 commit comments

Comments
 (0)