@@ -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 ) => {
0 commit comments