Skip to content

Commit 5ae1478

Browse files
committed
Optimize track and column creation
1 parent 3079782 commit 5ae1478

4 files changed

Lines changed: 37 additions & 69 deletions

File tree

CHANGELOG

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Bug fixes:
1515

1616
Other:
1717

18+
* Optimize track and column creation
19+
1820
1.8.0
1921
=====
2022

src/view/qml/Editor/EditorView.qml

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -313,10 +313,21 @@ FocusScope {
313313
lineNumberColumnLeft.setPosition(newPosition);
314314
lineNumberColumnRight.setPosition(newPosition);
315315
}
316+
function _refreshPattern(pattern) {
317+
uiLogger.debug(_tag, `Refreshing pattern index=${pattern.index()}`);
318+
_createTracks(pattern);
319+
pattern.updateTrackDimensions(trackArea.width, trackArea.height);
320+
_setPosition(editorService.position);
321+
}
316322
function _updatePatternVisibility() {
317323
const currentPatternIndex = editorService.currentPattern;
318324
_patterns.forEach(pattern => {
319-
pattern.visible = pattern.index() === currentPatternIndex;
325+
const isVisible = pattern.index() === currentPatternIndex;
326+
pattern.visible = isVisible;
327+
if (isVisible && pattern._dirty) {
328+
_refreshPattern(pattern);
329+
pattern._dirty = false;
330+
}
320331
});
321332
}
322333
function _updateTracksOnHorizontalScroll() {
@@ -326,46 +337,32 @@ FocusScope {
326337
_updatePatternVisibility();
327338
_updateCurrentTrackDimensions();
328339
}
329-
function _addColumn(trackIndex) {
330-
_patterns.forEach(pattern => {
331-
pattern.addColumn(trackIndex);
332-
});
333-
_updateCurrentTrackDimensions();
334-
}
335-
function _addTrack(trackIndex) {
340+
function _refreshLayout() {
341+
uiLogger.debug(_tag, "Refreshing layout..");
342+
noteColumnModelHandler.clear();
343+
const currentPatternIndex = editorService.currentPattern;
336344
_patterns.forEach(pattern => {
337-
const track = pattern.addTrack(trackIndex);
338-
if (track) {
339-
_connectTrack(track);
345+
if (pattern.index() === currentPatternIndex) {
346+
_refreshPattern(pattern);
347+
_updateFocus(editorService.position, editorService.position);
348+
} else {
349+
pattern._dirty = true;
340350
}
341351
});
342-
_updateCurrentTrackDimensions();
343-
}
344-
function _deleteColumn(trackIndex) {
345-
_patterns.forEach(pattern => {
346-
pattern.deleteColumn(trackIndex);
347-
});
348-
_updateCurrentTrackDimensions();
349-
}
350-
function _deleteTrack(trackIndex) {
351-
_patterns.forEach(pattern => {
352-
pattern.deleteTrack(trackIndex);
353-
});
354-
_updateCurrentTrackDimensions();
355352
}
356353
function _clearMixerSettings() {
357354
_patterns.forEach(pattern => {
358355
pattern.clearMixerSettings();
359356
});
360357
}
361358
function _connectSignals() {
362-
editorService.columnAdded.connect(trackIndex => _addColumn(trackIndex));
363-
editorService.columnDeleted.connect(trackIndex => _deleteColumn(trackIndex));
359+
editorService.columnAdded.connect(_refreshLayout);
360+
editorService.columnDeleted.connect(_refreshLayout);
364361
editorService.columnNameChanged.connect(_updateColumnHeaders);
365362
editorService.horizontalScrollChanged.connect(_updateTracksOnHorizontalScroll);
366363
editorService.songChanged.connect(_changeSong);
367-
editorService.trackAdded.connect(_addTrack);
368-
editorService.trackDeleted.connect(_deleteTrack);
364+
editorService.trackAdded.connect(_refreshLayout);
365+
editorService.trackDeleted.connect(_refreshLayout);
369366
editorService.trackNameChanged.connect(_updateTrackHeaders);
370367
editorService.patternCreated.connect(patternIndex => _createPattern(patternIndex));
371368
editorService.positionChanged.connect((newPosition, oldPosition) => {

src/view/qml/Editor/NoteColumn_LineContainer.qml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ Item {
3232
_patternIndex = patternIndex;
3333
_trackIndex = trackIndex;
3434
_index = columnIndex;
35-
_listView = listViewComponent.createObject(rootItem);
35+
if (!_listView) {
36+
_listView = listViewComponent.createObject(rootItem);
37+
}
3638
_listView.model = noteColumnModelHandler.columnModel(_patternIndex, _trackIndex, _index);
3739
_scrollOffset = editorService.position.line;
3840
_lastTriggeredLine = -1;

src/view/qml/Editor/Pattern.qml

Lines changed: 7 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ Item {
55
property int _index: 0
66
property var _tracks: []
77
property var _positionBar
8+
property bool _dirty: false
89
readonly property string _tag: "Pattern"
910
function createTracks(positionBar: var, trackAreaWidth: int, trackAreaHeight: int): void {
1011
_positionBar = positionBar
11-
_tracks.length = 0;
12+
_clearTracks();
13+
const unitWidth = trackAreaWidth / editorService.visibleUnitCount();
1214
for (let trackIndex of editorService.trackIndices()) {
1315
const track = trackComponent.createObject(this);
1416
if (track) {
@@ -18,52 +20,17 @@ Item {
1820
track.nameChanged.connect(name => {
1921
editorService.setTrackName(trackIndex, name);
2022
});
23+
track.setDimensions(trackAreaWidth, trackAreaHeight, unitWidth);
2124
track.updateData();
2225
_tracks.push(track);
2326
uiLogger.trace(_tag, `Added track index=${trackIndex}, width=${track.width}, height=${track.height}, x=${track.x}, y=${track.y}`);
2427
}
2528
}
26-
updateTrackDimensions(trackAreaWidth, trackAreaHeight);
2729
updateColumnHeaders();
2830
}
29-
function addTrack(trackIndex: int): var {
30-
const track = trackComponent.createObject(this);
31-
if (track) {
32-
track.setLocation(_index, trackIndex);
33-
track.setName(editorService.trackName(trackIndex));
34-
track.setPositionBar(_positionBar);
35-
track.nameChanged.connect(name => {
36-
editorService.setTrackName(trackIndex, name);
37-
});
38-
track.updateData();
39-
const position = editorService.trackPositionByIndex(trackIndex);
40-
_tracks.splice(position, 0, track);
41-
uiLogger.trace(_tag, `Added track index=${trackIndex} at position=${position}`);
42-
return track;
43-
}
44-
return null;
45-
}
46-
function addColumn(trackIndex: int): void {
47-
const track = trackByIndex(trackIndex);
48-
if (track) {
49-
track.addColumn();
50-
}
51-
}
52-
function deleteColumn(trackIndex: int): void {
53-
const track = trackByIndex(trackIndex);
54-
if (track) {
55-
track.deleteColumn();
56-
}
57-
}
58-
function deleteTrack(trackIndex: int): void {
59-
const track = trackByIndex(trackIndex);
60-
if (track) {
61-
_tracks = _tracks.filter(t => t !== track); // Remove the track from the array
62-
track.destroy(); // Destroy the track object
63-
uiLogger.debug(_tag, `Deleted track index=${trackIndex}`);
64-
} else {
65-
uiLogger.error(_tag, `No such track: index=${trackIndex}`);
66-
}
31+
function _clearTracks(): void {
32+
_tracks.forEach(track => track.destroy());
33+
_tracks.length = 0;
6734
}
6835
function index(): int {
6936
return _index;

0 commit comments

Comments
 (0)