@@ -1288,10 +1288,10 @@ quint8 EditorService::delayAtCurrentPosition() const
12881288
12891289bool 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-
13931374quint64 EditorService::ticksPerLine () const
13941375{
13951376 return m_song->ticksPerLine ();
0 commit comments