Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don't give clips a hidden default name (Fix #5528) #5621

Merged
merged 9 commits into from
Sep 21, 2020
2 changes: 1 addition & 1 deletion include/DataFile.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ class LMMS_EXPORT DataFile : public QDomDocument
void upgrade_1_1_91();
void upgrade_1_2_0_rc3();
void upgrade_1_3_0();
void upgrade_noHiddenClipNames();

// List of all upgrade methods
static const std::vector<UpgradeMethod> UPGRADE_METHODS;
Expand Down Expand Up @@ -141,4 +142,3 @@ class LMMS_EXPORT DataFile : public QDomDocument


#endif

1 change: 1 addition & 0 deletions include/ProjectVersion.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class ProjectVersion
ProjectVersion(QString version, CompareType c = All);
ProjectVersion(const char * version, CompareType c = All);

const QString& getVersion() const { return m_version; }
int getMajor() const { return m_major; }
int getMinor() const { return m_minor; }
int getPatch() const { return m_patch; }
Expand Down
106 changes: 59 additions & 47 deletions src/core/DataFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ const std::vector<DataFile::UpgradeMethod> DataFile::UPGRADE_METHODS = {
&DataFile::upgrade_0_4_0_beta1 , &DataFile::upgrade_0_4_0_rc2,
&DataFile::upgrade_1_0_99 , &DataFile::upgrade_1_1_0,
&DataFile::upgrade_1_1_91 , &DataFile::upgrade_1_2_0_rc3,
&DataFile::upgrade_1_3_0
&DataFile::upgrade_1_3_0 , &DataFile::upgrade_noHiddenClipNames
};

// Vector of all versions that have upgrade routines.
Expand Down Expand Up @@ -1355,6 +1355,35 @@ void DataFile::upgrade_1_3_0()
}
}

void DataFile::upgrade_noHiddenClipNames()
{
QDomNodeList tracks = elementsByTagName("track");

auto clearDefaultNames = [](QDomNodeList clips, QString trackName)
{
for (int j = 0; j < clips.size(); ++j)
{
QDomElement clip = clips.item(j).toElement();
QString clipName = clip.attribute("name", "");
if (clipName == trackName) { clip.setAttribute("name", ""); }
}
};

for (int i = 0; i < tracks.size(); ++i)
{
QDomElement track = tracks.item(i).toElement();
QString trackName = track.attribute("name", "");

QDomNodeList instClips = track.elementsByTagName("pattern");
QDomNodeList autoClips = track.elementsByTagName("automationpattern");
QDomNodeList bbClips = track.elementsByTagName("bbtco");

clearDefaultNames(instClips, trackName);
clearDefaultNames(autoClips, trackName);
clearDefaultNames(bbClips, trackName);
}
}


void DataFile::upgrade()
{
Expand Down Expand Up @@ -1430,62 +1459,45 @@ void DataFile::loadData( const QByteArray & _data, const QString & _sourceFile )
m_type = type( root.attribute( "type" ) );
m_head = root.elementsByTagName( "head" ).item( 0 ).toElement();

if( root.hasAttribute( "version" ) )
if (!root.hasAttribute("version") || root.attribute("version")=="1.0")
{
if( root.attribute( "version" ) == "1.0" ){
// The file versioning is now a unsigned int, not maj.min, so we use
// legacyFileVersion() to retrieve the appropriate version
m_fileVersion = legacyFileVersion();
}
else
{
bool success;
m_fileVersion = root.attribute( "version" ).toUInt( &success );
if( !success ) qWarning("File Version conversion failure.");
}
// The file versioning is now a unsigned int, not maj.min, so we use
// legacyFileVersion() to retrieve the appropriate version
m_fileVersion = legacyFileVersion();
}
else
{
bool success;
m_fileVersion = root.attribute( "version" ).toUInt( &success );
if( !success ) qWarning("File Version conversion failure.");
}

if( root.hasAttribute( "creatorversion" ) )
if (root.hasAttribute("creatorversion"))
{
// compareType defaults to All, so it doesn't have to be set here
ProjectVersion createdWith = root.attribute( "creatorversion" );
ProjectVersion createdWith = root.attribute("creatorversion");
ProjectVersion openedWith = LMMS_VERSION;

if ( createdWith != openedWith )
{
if( createdWith.setCompareType( ProjectVersion::Minor ) !=
openedWith.setCompareType( ProjectVersion::Minor ) )
{
if( gui != nullptr && root.attribute( "type" ) == "song" )
{
TextFloat::displayMessage(
SongEditor::tr( "Version difference" ),
SongEditor::tr(
"This %1 was created with "
"LMMS %2."
).arg(
_sourceFile.endsWith( ".mpt" ) ?
SongEditor::tr( "template" ) :
SongEditor::tr( "project" )
)
.arg( root.attribute( "creatorversion" ) ),
embed::getIconPixmap( "whatsthis", 24, 24 ),
2500
);
}
}

// the upgrade needs to happen after the warning as it updates the project version.
if( createdWith.setCompareType( ProjectVersion::Build )
< openedWith )
{
upgrade();
}
if (createdWith < openedWith) { upgrade(); }

if (createdWith.setCompareType(ProjectVersion::Minor)
!= openedWith.setCompareType(ProjectVersion::Minor)
&& gui != nullptr && root.attribute("type") == "song"
){
auto projectType = _sourceFile.endsWith(".mpt") ?
SongEditor::tr("template") : SongEditor::tr("project");

TextFloat::displayMessage(
SongEditor::tr("Version difference"),
SongEditor::tr("This %1 was created with LMMS %2")
.arg(projectType).arg(createdWith.getVersion()),
embed::getIconPixmap("whatsthis", 24, 24),
2500
);
}
}

m_content = root.elementsByTagName( typeName( m_type ) ).
item( 0 ).toElement();
m_content = root.elementsByTagName(typeName(m_type)).item(0).toElement();
}


Expand Down
7 changes: 0 additions & 7 deletions src/core/Track.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1865,13 +1865,6 @@ bool TrackContentWidget::pasteSelection( MidiTime tcoPos, const QMimeData * md,
{
tco->selectViewOnCreate( true );
}

//check tco name, if the same as source track name dont copy
QString sourceTrackName = outerTCOElement.attributeNode( "trackName" ).value();
if( tco->name() == sourceTrackName )
{
tco->setName( "" );
}
}

AutomationPattern::resolveAllIDs();
Expand Down
5 changes: 1 addition & 4 deletions src/tracks/BBTrack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -290,10 +290,7 @@ void BBTCOView::openInBBEditor()



void BBTCOView::resetName()
{
m_bbTCO->setName( m_bbTCO->getTrack()->name() );
}
void BBTCOView::resetName() { m_bbTCO->setName(""); }



Expand Down
13 changes: 1 addition & 12 deletions src/tracks/InstrumentTrack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ InstrumentTrack::~InstrumentTrack()
autoAssignMidiDevice(false);
s_autoAssignedTrack = NULL;
}

// kill all running notes and the iph
silenceAllNotes( true );

Expand Down Expand Up @@ -530,17 +530,6 @@ void InstrumentTrack::deleteNotePluginData( NotePlayHandle* n )

void InstrumentTrack::setName( const QString & _new_name )
{
// when changing name of track, also change name of those patterns,
// which have the same name as the instrument-track
for( int i = 0; i < numOfTCOs(); ++i )
{
Pattern* p = dynamic_cast<Pattern*>( getTCO( i ) );
if( ( p != NULL && p->name() == name() ) || p->name() == "" )
{
p->setName( _new_name );
}
}

Track::setName( _new_name );
m_midiPort.setName( name() );
m_audioPort.setName( name() );
Expand Down
10 changes: 3 additions & 7 deletions src/tracks/Pattern.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ Pattern::Pattern( InstrumentTrack * _instrument_track ) :
m_patternType( BeatPattern ),
m_steps( MidiTime::stepsPerBar() )
{
setName( _instrument_track->name() );
if( _instrument_track->trackContainer()
== Engine::getBBTrackContainer() )
{
Expand Down Expand Up @@ -647,10 +646,7 @@ void PatternView::setGhostInPianoRoll()



void PatternView::resetName()
{
m_pat->setName( m_pat->m_instrumentTrack->name() );
}
void PatternView::resetName() { m_pat->setName(""); }



Expand Down Expand Up @@ -885,8 +881,8 @@ void PatternView::paintEvent( QPaintEvent * )

// Check whether we will paint a text box and compute its potential height
// This is needed so we can paint the notes underneath it.
bool const isDefaultName = m_pat->name() == m_pat->instrumentTrack()->name();
bool const drawTextBox = !beatPattern && !isDefaultName;
bool const drawName = !m_pat->name().isEmpty();
bool const drawTextBox = !beatPattern && drawName;

// TODO Warning! This might cause problems if TrackContentObjectView::paintTextLabel changes
int textBoxHeight = 0;
Expand Down