pianobooster/src/GuiSidePanel.cpp

224 lines
5.9 KiB
C++

/*********************************************************************************/
/*!
@file GuiSidePanel.cpp
@brief xxxx.
@author L. J. Barman
Copyright (c) 2008-2009, L. J. Barman, all rights reserved
This file is part of the PianoBooster application
PianoBooster is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
PianoBooster is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with PianoBooster. If not, see <http://www.gnu.org/licenses/>.
*/
/*********************************************************************************/
#include <QtWidgets>
#include "GuiSidePanel.h"
#include "GuiTopBar.h"
#include "TrackList.h"
GuiSidePanel::GuiSidePanel(QWidget *parent, CSettings* settings)
: QWidget(parent), m_parent(parent)
{
m_song = 0;
m_score = 0;
m_trackList = 0;
m_topBar = 0;
m_settings = settings;
setupUi(this);
}
void GuiSidePanel::init(CSong* songObj, CTrackList* trackList, GuiTopBar* topBar)
{
m_song = songObj;
m_trackList = trackList;
m_topBar = topBar;
m_trackList->init(songObj, m_settings);
followYouRadio->setChecked(true);
bothHandsRadio->setChecked(true);
rhythmTappingCombo->addItem(tr("Drums"));
rhythmTappingCombo->addItem(tr("Melody"));
//FIXME rhythmTappingCombo->addItem(tr("Drums+M"));
rhythmTappingCombo->setCurrentIndex(m_song->cfg_rhythmTapping);
boostSlider->setMinimum(-100);
boostSlider->setMaximum(100);
pianoSlider->setMinimum(-100);
pianoSlider->setMaximum(100);
QAction* act;
act = new QAction(tr("Set as Right Hand Part"), this);
trackListWidget->addAction(act);
connect(act, SIGNAL(triggered()), this, SLOT(setTrackRightHandPart()));
act = new QAction(tr("Set as Left Hand Part"), this);
trackListWidget->addAction(act);
connect(act, SIGNAL(triggered()), this, SLOT(setTrackLeftHandPart()));
act = new QAction(tr("Reset Both Parts"), this);
trackListWidget->addAction(act);
connect(act, SIGNAL(triggered()), this, SLOT(clearTrackPart()));
trackListWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
}
void GuiSidePanel::refresh() {
if (m_trackList)
{
m_trackList->refresh();
trackListWidget->clear();
trackListWidget->addItems(m_trackList->getAllChannelProgramNames());
trackListWidget->setCurrentRow(m_trackList->getActiveItemIndex());
for (int i = 0; i < trackListWidget->count(); i++)
m_trackList->changeListWidgetItemView(i, trackListWidget->item(i));
}
autoSetMuteYourPart();
}
void GuiSidePanel::loadBookList()
{
QStringList bookNames = m_settings->getBookList();
bookCombo->clear();
for (int i = 0; i < bookNames.size(); i++)
{
bookCombo->addItem( bookNames.at(i));
if (bookNames.at(i) == m_settings->getCurrentBookName())
bookCombo->setCurrentIndex(i);
}
on_bookCombo_activated(-1);
}
void GuiSidePanel::on_bookCombo_activated (int index)
{
QString currentSong;
m_settings->setCurrentBookName(bookCombo->currentText(), (index >= 0)? true : false);
currentSong = m_settings->getCurrentSongName();
songCombo->clear();
QStringList songNames = m_settings->getSongList();
for (int i = 0; i < songNames.size(); ++i)
{
songCombo->addItem( songNames.at(i));
if (songNames.at(i) == currentSong)
songCombo->setCurrentIndex(i);
}
on_songCombo_activated(0); // Now load the selected song
}
void GuiSidePanel::on_songCombo_activated(int index)
{
m_settings->setCurrentSongName(songCombo->currentText());
}
void GuiSidePanel::on_rightHandRadio_toggled (bool checked)
{
if (checked)
m_settings->setActiveHand(PB_PART_right);
}
void GuiSidePanel::on_bothHandsRadio_toggled (bool checked)
{
if (checked)
m_settings->setActiveHand(PB_PART_both);
}
void GuiSidePanel::on_leftHandRadio_toggled (bool checked)
{
if (checked)
m_settings->setActiveHand(PB_PART_left);
}
void GuiSidePanel::autoSetMuteYourPart()
{
bool checked = false;
if ( CNote::hasPianoPart(m_song->getActiveChannel()))
checked = true;
if (m_song->getPlayMode() == PB_PLAY_MODE_rhythmTapping)
{
if (m_song->cfg_rhythmTapping == PB_RHYTHM_TAP_drumsOnly)
checked = false;
}
muteYourPartCheck->setChecked(checked);
m_song->mutePianistPart(checked);
}
void GuiSidePanel::setSongName(QString songName)
{
for (int i = 0; i < songCombo->count(); ++i)
{
if (songCombo->itemText(i) == songName)
songCombo->setCurrentIndex(i);
}
}
void GuiSidePanel::setBookName(QString bookName)
{
for (int i = 0; i < bookCombo->count(); ++i)
{
if (bookCombo->itemText(i) == bookName)
bookCombo->setCurrentIndex(i);
}
}
// pass either 'left' 'right' or 'both'
void GuiSidePanel::setCurrentHand(QString hand)
{
if (hand == "left")
leftHandRadio->setChecked(true);
else if (hand == "right")
rightHandRadio->setChecked(true);
else
bothHandsRadio->setChecked(true);
}
void GuiSidePanel::on_rhythmTappingCombo_activated (int index)
{
switch ((rhythmTappingCombo->currentIndex()))
{
case 1 :
m_song->cfg_rhythmTapping = PB_RHYTHM_TAP_mellodyOnly;
break;
case 2 :
m_song->cfg_rhythmTapping = PB_RHYTHM_TAP_drumsAndMellody;
break;
default:
m_song->cfg_rhythmTapping = PB_RHYTHM_TAP_drumsOnly;
}
autoSetMuteYourPart();
}