commit
6ff3dfb9c7
|
@ -18,14 +18,6 @@ INSTALL_ALL_LANGS="ON"
|
||||||
|
|
||||||
TRANSLATIONS = $$files(translations/*.ts)
|
TRANSLATIONS = $$files(translations/*.ts)
|
||||||
|
|
||||||
USE_FLUIDSYNTH {
|
|
||||||
# Note The FLUIDSYNTH_INPLACE_DIR dir is used mainly used when compiling on windows
|
|
||||||
# You normally do not need to set it
|
|
||||||
#FLUIDSYNTH_INPLACE_DIR = ../../fluidsynth-1.0.9
|
|
||||||
message(building using fluidsynth)
|
|
||||||
DEFINES += PB_USE_FLUIDSYNTH
|
|
||||||
}
|
|
||||||
|
|
||||||
CONFIG(debug, debug|release): DEFINES += IS_DEBUG
|
CONFIG(debug, debug|release): DEFINES += IS_DEBUG
|
||||||
|
|
||||||
HEADERS = src/QtWindow.h \
|
HEADERS = src/QtWindow.h \
|
||||||
|
@ -120,16 +112,21 @@ unix {
|
||||||
LIBS += -lasound -lpthread -lGL
|
LIBS += -lasound -lpthread -lGL
|
||||||
}
|
}
|
||||||
|
|
||||||
USE_FLUIDSYNTH {
|
contains (USE_FLUIDSYNTH, ON) {
|
||||||
|
message("building using fluidsynth")
|
||||||
|
DEFINES += PB_USE_FLUIDSYNTH
|
||||||
|
|
||||||
SOURCES += src/MidiDeviceFluidSynth.cpp
|
SOURCES += src/MidiDeviceFluidSynth.cpp
|
||||||
!isEmpty(FLUIDSYNTH_INPLACE_DIR) {
|
!isEmpty(FLUIDSYNTH_INPLACE_DIR) {
|
||||||
!exists( $${FLUIDSYNTH_INPLACE_DIR}/include/fluidsynth.h ) {
|
!exists( $${FLUIDSYNTH_INPLACE_DIR}/include/fluidsynth.h ) {
|
||||||
error( "No $${FLUIDSYNTH_INPLACE_DIR}/include/fluidsynth.h file found" )
|
error( "No $${FLUIDSYNTH_INPLACE_DIR}/include/fluidsynth.h file found" )
|
||||||
}
|
}
|
||||||
message(fluidsynth FLUIDSYNTH_INPLACE_DIR = $${FLUIDSYNTH_INPLACE_DIR})
|
message(fluidsynth FLUIDSYNTH_INPLACE_DIR = $${FLUIDSYNTH_INPLACE_DIR})
|
||||||
INCLUDEPATH += $${FLUIDSYNTH_INPLACE_DIR}/include/
|
INCLUDEPATH += $${FLUIDSYNTH_INPLACE_DIR}/include/
|
||||||
win32:LIBS += $${FLUIDSYNTH_INPLACE_DIR}/src/.libs/libfluidsynth.dll.a
|
win32:LIBS += $${FLUIDSYNTH_INPLACE_DIR}/src/.libs/libfluidsynth.dll.a
|
||||||
unix:LIBS += $${FLUIDSYNTH_INPLACE_DIR}/src/.libs/libfluidsynth.a
|
unix:LIBS += $${FLUIDSYNTH_INPLACE_DIR}/src/.libs/libfluidsynth.a
|
||||||
|
}else{
|
||||||
|
PKGCONFIG += fluidsynth
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,11 @@ ENDIF(WIN32)
|
||||||
# set project's name
|
# set project's name
|
||||||
PROJECT( pianobooster )
|
PROJECT( pianobooster )
|
||||||
|
|
||||||
|
|
||||||
|
cmake_policy(SET CMP0020 NEW)
|
||||||
|
cmake_policy(SET CMP0043 NEW)
|
||||||
|
|
||||||
|
|
||||||
# enable warnings
|
# enable warnings
|
||||||
add_compile_options(-Wall)
|
add_compile_options(-Wall)
|
||||||
|
|
||||||
|
@ -212,6 +217,7 @@ ENDIF(WIN32)
|
||||||
|
|
||||||
qt5_use_modules(pianobooster Core Gui Widgets LinguistTools OpenGL Xml)
|
qt5_use_modules(pianobooster Core Gui Widgets LinguistTools OpenGL Xml)
|
||||||
|
|
||||||
|
target_link_directories(pianobooster PUBLIC ${FTGL_LIBRARY_DIRS} ${JACK_LIBRARY_DIRS})
|
||||||
target_link_libraries (pianobooster Qt5::Widgets Qt5::Xml Qt5::OpenGL ${OPENGL_LIBRARIES} ${FTGL_LIBRARY} ${RTMIDI_LIBRARY} ${JACK_LIBRARY})
|
target_link_libraries (pianobooster Qt5::Widgets Qt5::Xml Qt5::OpenGL ${OPENGL_LIBRARIES} ${FTGL_LIBRARY} ${RTMIDI_LIBRARY} ${JACK_LIBRARY})
|
||||||
|
|
||||||
INSTALL( FILES ../pianobooster.desktop DESTINATION share/applications )
|
INSTALL( FILES ../pianobooster.desktop DESTINATION share/applications )
|
||||||
|
@ -255,12 +261,12 @@ ENDIF (WIN32)
|
||||||
|
|
||||||
if(USE_FONT)
|
if(USE_FONT)
|
||||||
INSTALL ( FILES ${USE_FONT} DESTINATION share/games/pianobooster/fonts)
|
INSTALL ( FILES ${USE_FONT} DESTINATION share/games/pianobooster/fonts)
|
||||||
endif()
|
endif(USE_FONT)
|
||||||
|
|
||||||
if(NOT USE_SYSTEM_FONT)
|
if(NOT USE_SYSTEM_FONT)
|
||||||
INSTALL ( FILES fonts/DejaVuSans.ttf DESTINATION share/games/pianobooster/fonts)
|
INSTALL ( FILES fonts/DejaVuSans.ttf DESTINATION share/games/pianobooster/fonts)
|
||||||
endif()
|
endif(NOT USE_SYSTEM_FONT)
|
||||||
|
|
||||||
if (NOT NO_LANGS)
|
if (NOT NO_LANGS)
|
||||||
ADD_SUBDIRECTORY(../translations ../build/translations)
|
ADD_SUBDIRECTORY(../translations ../build/translations)
|
||||||
endif(NO_LANGS)
|
endif(NOT NO_LANGS)
|
||||||
|
|
|
@ -744,6 +744,64 @@ void CConductor::pianistInput(CMidiEvent inputNote)
|
||||||
|
|
||||||
m_piano->addPianistNote(hand, inputNote, false);
|
m_piano->addPianistNote(hand, inputNote, false);
|
||||||
m_rating.wrongNotes(1);
|
m_rating.wrongNotes(1);
|
||||||
|
|
||||||
|
if (m_settings->followThroughErrors() && m_playMode == PB_PLAY_MODE_followYou) // If the setting is checked, errors cause following too
|
||||||
|
{
|
||||||
|
if (m_chordDeltaTime <= -m_cfg_playZoneEarly) // We're hitting bad notes, but earlier than the zone (so ignore them)
|
||||||
|
{
|
||||||
|
m_piano->clear();
|
||||||
|
m_savedNoteQueue->clear();
|
||||||
|
m_savedNoteOffQueue->clear();
|
||||||
|
}
|
||||||
|
else // Hitting bad notes within the zone (so register them)
|
||||||
|
{
|
||||||
|
// Register the wrong note in the ratings calculation (if not as missed notes, I don't believe it's factored in)
|
||||||
|
missedNotesColour(Cfg::pianoBadColour());
|
||||||
|
m_rating.lateNotes(m_wantedChord.length() - m_goodPlayedNotes.length());
|
||||||
|
setEventBits(EVENT_BITS_forceRatingRedraw);
|
||||||
|
fetchNextChord(); // Skip through the wrong note and continue to the next
|
||||||
|
|
||||||
|
// Was the next note the one keyed by accident (dyslexia)? If so, validate it instead and continue as usual.
|
||||||
|
if (m_wantedChord.searchChord(inputNote.note(), m_transpose)) // replaces validatePianistNote ignoring out-of-zone
|
||||||
|
{
|
||||||
|
m_goodPlayedNotes.addNote(hand, inputNote.note());
|
||||||
|
m_piano->addPianistNote(hand, inputNote,true);
|
||||||
|
int pianistTiming;
|
||||||
|
if ( ( cfg_timingMarkersFlag && m_followSkillAdvanced ) || m_playMode == PB_PLAY_MODE_rhythmTapping )
|
||||||
|
pianistTiming = m_pianistTiming;
|
||||||
|
else
|
||||||
|
pianistTiming = NOT_USED;
|
||||||
|
m_scoreWin->setPlayedNoteColour(inputNote.note(),
|
||||||
|
(!m_followPlayingTimeOut)? Cfg::playedGoodColour():Cfg::playedBadColour(),
|
||||||
|
m_chordDeltaTime, pianistTiming);
|
||||||
|
|
||||||
|
if (validatePianistChord() == true)
|
||||||
|
{
|
||||||
|
if (m_chordDeltaTime < 0)
|
||||||
|
m_tempo.removePlayingTicks(-m_chordDeltaTime);
|
||||||
|
|
||||||
|
m_goodPlayedNotes.clear();
|
||||||
|
fetchNextChord();
|
||||||
|
// count the good notes so that the live percentage looks OK
|
||||||
|
m_rating.totalNotes(m_wantedChord.length());
|
||||||
|
m_rating.calculateAccuracy();
|
||||||
|
m_settings->pianistActive();
|
||||||
|
if (m_rating.isAccuracyGood() || m_playMode == PB_PLAY_MODE_playAlong)
|
||||||
|
setFollowSkillAdvanced(true); // change the skill level only when they are good enough
|
||||||
|
else
|
||||||
|
setFollowSkillAdvanced(false);
|
||||||
|
setEventBits( EVENT_BITS_forceRatingRedraw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear & ignore any further slips until in range of the next note's zone
|
||||||
|
m_piano->clear();
|
||||||
|
m_savedNoteQueue->clear();
|
||||||
|
m_savedNoteOffQueue->clear();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
m_piano->addPianistNote(hand, inputNote, true);
|
m_piano->addPianistNote(hand, inputNote, true);
|
||||||
|
|
|
@ -100,7 +100,7 @@ void GuiMidiSetupDialog::updateMidiInfoText()
|
||||||
midiInfoText->append("<span style=\"color:#FF6600\">" + tr("The use of Midi Through is not recommended!") + "</span>");
|
midiInfoText->append("<span style=\"color:#FF6600\">" + tr("The use of Midi Through is not recommended!") + "</span>");
|
||||||
else if (midiOutputCombo->currentText().contains("Microsoft GS Wavetable", Qt::CaseInsensitive))
|
else if (midiOutputCombo->currentText().contains("Microsoft GS Wavetable", Qt::CaseInsensitive))
|
||||||
midiInfoText->append("<span style=\"color:#FF6600\">" + tr("Note: the Microsoft GS Wavetable Synth introduces an unwanted delay!.") + "\n"
|
midiInfoText->append("<span style=\"color:#FF6600\">" + tr("Note: the Microsoft GS Wavetable Synth introduces an unwanted delay!.") + "\n"
|
||||||
+ tr("(Try a latency fix of 150msc)") + "</span>");
|
+ tr("(Try a latency fix of 150msc)") + "</span>");
|
||||||
else
|
else
|
||||||
midiInfoText->append("<span style=\"color:gray\">" + tr("Midi Output Device:") + " " + midiOutputCombo->currentText() +"</span>");
|
midiInfoText->append("<span style=\"color:gray\">" + tr("Midi Output Device:") + " " + midiOutputCombo->currentText() +"</span>");
|
||||||
|
|
||||||
|
|
|
@ -151,6 +151,7 @@ void GuiPreferencesDialog::init(CSong* song, CSettings* settings, CGLView * glVi
|
||||||
showNoteNamesCheck->setChecked(m_settings->isNoteNamesEnabled());
|
showNoteNamesCheck->setChecked(m_settings->isNoteNamesEnabled());
|
||||||
courtesyAccidentalsCheck->setChecked(m_settings->displayCourtesyAccidentals());
|
courtesyAccidentalsCheck->setChecked(m_settings->displayCourtesyAccidentals());
|
||||||
showTutorPagesCheck->setChecked(m_settings->isTutorPagesEnabled());
|
showTutorPagesCheck->setChecked(m_settings->isTutorPagesEnabled());
|
||||||
|
followThroughErrorsCheck->setChecked(m_settings->isFollowThroughErrorsEnabled());
|
||||||
followStopPointCombo->setCurrentIndex(m_song->cfg_stopPointMode);
|
followStopPointCombo->setCurrentIndex(m_song->cfg_stopPointMode);
|
||||||
|
|
||||||
initLanguageCombo();
|
initLanguageCombo();
|
||||||
|
@ -165,6 +166,7 @@ void GuiPreferencesDialog::accept()
|
||||||
m_settings->setNoteNamesEnabled( showNoteNamesCheck->isChecked());
|
m_settings->setNoteNamesEnabled( showNoteNamesCheck->isChecked());
|
||||||
m_settings->setCourtesyAccidentals( courtesyAccidentalsCheck->isChecked());
|
m_settings->setCourtesyAccidentals( courtesyAccidentalsCheck->isChecked());
|
||||||
m_settings->setTutorPagesEnabled( showTutorPagesCheck->isChecked());
|
m_settings->setTutorPagesEnabled( showTutorPagesCheck->isChecked());
|
||||||
|
m_settings->setFollowThroughErrorsEnabled( followThroughErrorsCheck->isChecked());
|
||||||
m_song->cfg_stopPointMode = static_cast<stopPointMode_t> (followStopPointCombo->currentIndex());
|
m_song->cfg_stopPointMode = static_cast<stopPointMode_t> (followStopPointCombo->currentIndex());
|
||||||
m_settings->setValue("Score/StopPointMode", m_song->cfg_stopPointMode );
|
m_settings->setValue("Score/StopPointMode", m_song->cfg_stopPointMode );
|
||||||
m_song->refreshScroll();
|
m_song->refreshScroll();
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>339</width>
|
<width>339</width>
|
||||||
<height>368</height>
|
<height>386</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
@ -25,30 +25,40 @@
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Score Settings</string>
|
<string>Score Settings</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="2" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QCheckBox" name="timingMarkersCheck">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Timing Markers</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Follow stop point:</string>
|
<string>Follow stop point:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="1">
|
<item row="1" column="0">
|
||||||
|
<widget class="QCheckBox" name="courtesyAccidentalsCheck">
|
||||||
|
<property name="text">
|
||||||
|
<string>Courtesy Accidentals</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<spacer name="horizontalSpacer_4">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
<widget class="QComboBox" name="followStopPointCombo">
|
<widget class="QComboBox" name="followStopPointCombo">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
@ -61,23 +71,10 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="1">
|
<item row="3" column="0">
|
||||||
<spacer name="horizontalSpacer">
|
<widget class="QCheckBox" name="followThroughErrorsCheck">
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QCheckBox" name="showNoteNamesCheck">
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Show Note Names</string>
|
<string>Follow Through Errors</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -94,10 +91,43 @@
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QCheckBox" name="courtesyAccidentalsCheck">
|
<widget class="QCheckBox" name="timingMarkersCheck">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Courtesy Accidentals</string>
|
<string>Timing Markers</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QCheckBox" name="showNoteNamesCheck">
|
||||||
|
<property name="text">
|
||||||
|
<string>Show Note Names</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<spacer name="horizontalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QCheckBox" name="checkBoxAAAA">
|
||||||
|
<property name="text">
|
||||||
|
<string>CheckBox</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -209,8 +239,8 @@
|
||||||
<slot>accept()</slot>
|
<slot>accept()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>248</x>
|
<x>257</x>
|
||||||
<y>254</y>
|
<y>385</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>157</x>
|
<x>157</x>
|
||||||
|
@ -225,8 +255,8 @@
|
||||||
<slot>reject()</slot>
|
<slot>reject()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>316</x>
|
<x>325</x>
|
||||||
<y>260</y>
|
<y>385</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>286</x>
|
<x>286</x>
|
||||||
|
|
|
@ -68,6 +68,7 @@ CSettings::CSettings(QtWindow *mainWindow) : QSettings(CSettings::IniFormat, CSe
|
||||||
m_noteNamesEnabled = value("Score/NoteNames", true ).toBool();
|
m_noteNamesEnabled = value("Score/NoteNames", true ).toBool();
|
||||||
m_tutorPagesEnabled = value("Tutor/TutorPages", true ).toBool();
|
m_tutorPagesEnabled = value("Tutor/TutorPages", true ).toBool();
|
||||||
CNotation::setCourtesyAccidentals(value("Score/CourtesyAccidentals", false ).toBool());
|
CNotation::setCourtesyAccidentals(value("Score/CourtesyAccidentals", false ).toBool());
|
||||||
|
m_followThroughErrorsEnabled = value("Score/FollowThroughErrors", true ).toBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSettings::setDefaultValue(const QString & key, const QVariant & value )
|
void CSettings::setDefaultValue(const QString & key, const QVariant & value )
|
||||||
|
@ -104,6 +105,11 @@ void CSettings::setCourtesyAccidentals(bool value) {
|
||||||
setValue("Score/CourtesyAccidentals", value );
|
setValue("Score/CourtesyAccidentals", value );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSettings::setFollowThroughErrorsEnabled(bool value) {
|
||||||
|
m_followThroughErrorsEnabled = value;
|
||||||
|
setValue("Score/FollowThroughErrors", value );
|
||||||
|
}
|
||||||
|
|
||||||
// Open a document if it exists or else create it (also delete an duplicates
|
// Open a document if it exists or else create it (also delete an duplicates
|
||||||
QDomElement CSettings::openDomElement(QDomElement parent, const QString & elementName, const QString & attributeName)
|
QDomElement CSettings::openDomElement(QDomElement parent, const QString & elementName, const QString & attributeName)
|
||||||
{
|
{
|
||||||
|
|
|
@ -52,10 +52,12 @@ public:
|
||||||
bool displayCourtesyAccidentals() { return CNotation::displayCourtesyAccidentals(); }
|
bool displayCourtesyAccidentals() { return CNotation::displayCourtesyAccidentals(); }
|
||||||
|
|
||||||
bool isTutorPagesEnabled() { return m_tutorPagesEnabled; }
|
bool isTutorPagesEnabled() { return m_tutorPagesEnabled; }
|
||||||
|
bool isFollowThroughErrorsEnabled() { return m_followThroughErrorsEnabled; }
|
||||||
|
|
||||||
/// Saves in the .ini file whether the user wants to show the note names
|
/// Saves in the .ini file whether the user wants to show the note names
|
||||||
void setNoteNamesEnabled(bool value);
|
void setNoteNamesEnabled(bool value);
|
||||||
void setTutorPagesEnabled(bool value);
|
void setTutorPagesEnabled(bool value);
|
||||||
|
void setFollowThroughErrorsEnabled(bool value);
|
||||||
|
|
||||||
void setCourtesyAccidentals(bool value);
|
void setCourtesyAccidentals(bool value);
|
||||||
void setAdvancedMode(bool value) { m_advancedMode = value;}
|
void setAdvancedMode(bool value) { m_advancedMode = value;}
|
||||||
|
@ -65,6 +67,11 @@ public:
|
||||||
return m_noteNamesEnabled;
|
return m_noteNamesEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// returns true if the user wants Follow Skill to ignore errors
|
||||||
|
bool followThroughErrors(){
|
||||||
|
return m_followThroughErrorsEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
void updateTutorPage();
|
void updateTutorPage();
|
||||||
void openSongFile(const QString & filename);
|
void openSongFile(const QString & filename);
|
||||||
QString getCurrentSongName() { return m_currentSongName; }
|
QString getCurrentSongName() { return m_currentSongName; }
|
||||||
|
@ -144,6 +151,7 @@ private:
|
||||||
bool m_noteNamesEnabled;
|
bool m_noteNamesEnabled;
|
||||||
bool m_tutorPagesEnabled;
|
bool m_tutorPagesEnabled;
|
||||||
bool m_advancedMode;
|
bool m_advancedMode;
|
||||||
|
bool m_followThroughErrorsEnabled;
|
||||||
QString m_bookPath;
|
QString m_bookPath;
|
||||||
QString m_currentBookName;
|
QString m_currentBookName;
|
||||||
QString m_currentSongName;
|
QString m_currentSongName;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user