170 lines
6 KiB
C++
170 lines
6 KiB
C++
//=============================================================================
|
|
// MuseScore
|
|
// Linux Music Score Editor
|
|
// $Id: editstaff.cpp 3629 2010-10-26 10:40:47Z wschweer $
|
|
//
|
|
// Copyright (C) 2010 Werner Schweer and others
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License version 2.
|
|
//
|
|
// This program 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 this program; if not, write to the Free Software
|
|
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
//=============================================================================
|
|
|
|
#include "selinstrument.h"
|
|
#include "instrdialog.h"
|
|
|
|
#include "libmscore/instrument.h"
|
|
#include "libmscore/instrtemplate.h"
|
|
|
|
namespace Ms {
|
|
|
|
extern void filterInstruments(QTreeWidget *instrumentList, const QString &searchPhrase = QString(""));
|
|
|
|
//---------------------------------------------------------
|
|
// SelectInstrument
|
|
//---------------------------------------------------------
|
|
|
|
SelectInstrument::SelectInstrument(const Instrument* instrument, QWidget* parent)
|
|
: QDialog(parent)
|
|
{
|
|
setupUi(this);
|
|
setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
|
currentInstrument->setText(instrument->trackName());
|
|
buildTemplateList();
|
|
buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
|
|
connect(instrumentList, SIGNAL(clicked(const QModelIndex &)), SLOT(expandOrCollapse(const QModelIndex &)));
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// buildTemplateList
|
|
//---------------------------------------------------------
|
|
|
|
void SelectInstrument::buildTemplateList()
|
|
{
|
|
// clear search if instrument list is updated
|
|
search->clear();
|
|
filterInstruments(instrumentList, search->text());
|
|
|
|
populateInstrumentList(instrumentList);
|
|
populateGenreCombo(instrumentGenreFilter);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// expandOrCollapse
|
|
//---------------------------------------------------------
|
|
|
|
void SelectInstrument::expandOrCollapse(const QModelIndex &model)
|
|
{
|
|
if(instrumentList->isExpanded(model))
|
|
instrumentList->collapse(model);
|
|
else
|
|
instrumentList->expand(model);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// on_instrumentList_itemSelectionChanged
|
|
//---------------------------------------------------------
|
|
|
|
void SelectInstrument::on_instrumentList_itemSelectionChanged()
|
|
{
|
|
QList<QTreeWidgetItem*> wi = instrumentList->selectedItems();
|
|
bool flag = !wi.isEmpty();
|
|
buttonBox->button(QDialogButtonBox::Ok)->setEnabled(flag);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// on_instrumentList
|
|
//---------------------------------------------------------
|
|
|
|
void SelectInstrument::on_instrumentList_itemDoubleClicked(QTreeWidgetItem*, int)
|
|
{
|
|
QList<QTreeWidgetItem*> wi = instrumentList->selectedItems();
|
|
if(!wi.isEmpty())
|
|
done(true);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// instrTemplate
|
|
//---------------------------------------------------------
|
|
|
|
const InstrumentTemplate* SelectInstrument::instrTemplate() const
|
|
{
|
|
QList<QTreeWidgetItem*> wi = instrumentList->selectedItems();
|
|
if (wi.isEmpty())
|
|
return 0;
|
|
InstrumentTemplateListItem* item = (InstrumentTemplateListItem*)wi.front();
|
|
return item->instrumentTemplate();
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// on_search_textChanged
|
|
//---------------------------------------------------------
|
|
|
|
void SelectInstrument::on_search_textChanged(const QString &searchPhrase)
|
|
{
|
|
filterInstruments(instrumentList, searchPhrase);
|
|
instrumentGenreFilter->blockSignals(true);
|
|
instrumentGenreFilter->setCurrentIndex(0);
|
|
instrumentGenreFilter->blockSignals(false);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// on_clearSearch_clicked
|
|
//---------------------------------------------------------
|
|
|
|
void SelectInstrument::on_clearSearch_clicked()
|
|
{
|
|
search->clear();
|
|
filterInstruments (instrumentList);
|
|
}
|
|
//---------------------------------------------------------
|
|
// on_instrumentGenreFilter_currentTextChanged
|
|
//---------------------------------------------------------
|
|
|
|
void SelectInstrument::on_instrumentGenreFilter_currentIndexChanged(int index)
|
|
{
|
|
QString id = instrumentGenreFilter->itemData(index).toString();
|
|
// Redisplay tree, only showing items from the selected genre
|
|
filterInstrumentsByGenre(instrumentList, id);
|
|
}
|
|
|
|
|
|
//---------------------------------------------------------
|
|
// filterInstrumentsByGenre
|
|
//---------------------------------------------------------
|
|
|
|
void SelectInstrument::filterInstrumentsByGenre(QTreeWidget *instrumentList, QString genre)
|
|
{
|
|
QTreeWidgetItemIterator iList(instrumentList);
|
|
while (*iList) {
|
|
(*iList)->setHidden(true);
|
|
InstrumentTemplateListItem* itli = static_cast<InstrumentTemplateListItem*>(*iList);
|
|
InstrumentTemplate *it=itli->instrumentTemplate();
|
|
|
|
if(it) {
|
|
if (genre == "all" || it->genreMember(genre)) {
|
|
(*iList)->setHidden(false);
|
|
|
|
QTreeWidgetItem *iParent = (*iList)->parent();
|
|
while(iParent) {
|
|
if(!iParent->isHidden())
|
|
break;
|
|
|
|
iParent->setHidden(false);
|
|
iParent = iParent->parent();
|
|
}
|
|
}
|
|
}
|
|
++iList;
|
|
}
|
|
}
|
|
}
|
|
|