111 lines
2.8 KiB
C++
111 lines
2.8 KiB
C++
#include <guitar/TabWriter.hpp>
|
|
#include <guitar/TabLines.hpp>
|
|
#include <guitar/globaldefs.hpp>
|
|
#include <common/VersionInfo.hpp>
|
|
#include <common/file.hpp>
|
|
#include <common/array.hpp>
|
|
|
|
bool TabWriter::write(TabEntries &entries,const String &pathFileTablature)
|
|
{
|
|
VersionInfo versionInfo;
|
|
File outFile;
|
|
|
|
GlobalDefs::outDebug("[TabWriter::write]ENTER",GlobalDefs::Debug);
|
|
if(pathFileTablature.isNull()||!outFile.open(pathFileTablature,"wb"))
|
|
{
|
|
GlobalDefs::outDebug("[TabWriter::write]LEAVE",GlobalDefs::Debug);
|
|
return false;
|
|
}
|
|
outFile.writeLine(String("%")+versionInfo.getProductNameString()+String(" ")+versionInfo.getProductVersion()+String("%"));
|
|
initLines();
|
|
setHeader();
|
|
for(int index=0,entryCount=0;index<entries.size();index++,entryCount++)
|
|
{
|
|
if(entryCount>MaxItems)
|
|
{
|
|
outFile.writeLine(String(" "));
|
|
outFile.writeLine(String(" "));
|
|
writeLines(outFile);
|
|
outFile.writeLine(String(" "));
|
|
initLines();
|
|
setHeader();
|
|
entryCount=0;
|
|
}
|
|
TabEntry &entry=entries[index];
|
|
for(int noteIndex=0;noteIndex<entry.size();noteIndex++)
|
|
{
|
|
FrettedNote ¬e=entry[noteIndex];
|
|
int string=note.getString();
|
|
int fret=note.getFret();
|
|
operator[](5-string).putElement(Element(fret,Action(note.getAction())));
|
|
operator[](5-string).putElement('-');
|
|
}
|
|
synchronize();
|
|
}
|
|
outFile.writeLine(String(" "));
|
|
outFile.writeLine(String(" "));
|
|
writeLines(outFile);
|
|
outFile.writeLine(String(" "));
|
|
GlobalDefs::outDebug("[TabWriter::write]LEAVE");
|
|
return true;
|
|
}
|
|
|
|
void TabWriter::synchronize(void)
|
|
{
|
|
int maxPos;
|
|
int index;
|
|
|
|
for(index=0;index<NumLines;index++)
|
|
{
|
|
if(!index)maxPos=operator[](0).getPosition();
|
|
if(operator[](index).getPosition()>maxPos)maxPos=operator[](index).getPosition();
|
|
}
|
|
for(index=0;index<NumLines;index++)
|
|
{
|
|
while(operator[](index).getPosition()!=maxPos)operator[](index).putElement('-');
|
|
}
|
|
}
|
|
|
|
void TabWriter::initLines()
|
|
{
|
|
size(NumLines);
|
|
}
|
|
|
|
void TabWriter::setHeader(void)
|
|
{
|
|
operator[](0).reset();
|
|
operator[](1).reset();
|
|
operator[](2).reset();
|
|
operator[](3).reset();
|
|
operator[](4).reset();
|
|
operator[](5).reset();
|
|
|
|
operator[](0).putElement('E');
|
|
operator[](1).putElement('B');
|
|
operator[](2).putElement('G');
|
|
operator[](3).putElement('D');
|
|
operator[](4).putElement('A');
|
|
operator[](5).putElement('E');
|
|
|
|
operator[](0).putElement('|');
|
|
operator[](1).putElement('|');
|
|
operator[](2).putElement('|');
|
|
operator[](3).putElement('|');
|
|
operator[](4).putElement('|');
|
|
operator[](5).putElement('|');
|
|
|
|
operator[](0).putElement('-');
|
|
operator[](1).putElement('-');
|
|
operator[](2).putElement('-');
|
|
operator[](3).putElement('-');
|
|
operator[](4).putElement('-');
|
|
operator[](5).putElement('-');
|
|
}
|
|
|
|
void TabWriter::writeLines(File &outFile)
|
|
{
|
|
for(int index=0;index<NumLines;index++)operator[](index).serialize(outFile);
|
|
}
|
|
|
|
|