MuseScore/mscore/symboldialog.cpp
2013-11-26 15:15:45 +01:00

123 lines
3.7 KiB
C++

//=============================================================================
// MusE Score
// Linux Music Score Editor
// $Id: symboldialog.cpp 5384 2012-02-27 12:21:49Z wschweer $
//
// Copyright (C) 2007 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 "symboldialog.h"
#include "palette.h"
#include "musescore.h"
#include "libmscore/sym.h"
#include "libmscore/style.h"
#include "libmscore/element.h"
#include "libmscore/symbol.h"
#include "preferences.h"
namespace Ms {
extern Score* gscore;
//---------------------------------------------------------
// createSymbolPalette
//---------------------------------------------------------
void SymbolDialog::createSymbolPalette()
{
sp = new Palette();
createSymbols();
}
//---------------------------------------------------------
// createSymbols
//---------------------------------------------------------
void SymbolDialog::createSymbols()
{
int currentIndex = fontList->currentIndex();
const ScoreFont* f = &ScoreFont::scoreFonts()[currentIndex];
sp->clear();
for (int i = 0; i < int(SymId::lastSym); ++i) {
if (f->isValid(SymId(i))) {
Symbol* s = new Symbol(gscore);
s->setSym(SymId(i), f);
sp->append(s, Sym::id2userName(SymId(i)));
}
}
}
//---------------------------------------------------------
// SymbolDialog
//---------------------------------------------------------
SymbolDialog::SymbolDialog(QWidget* parent)
: QWidget(parent, Qt::WindowFlags(Qt::Dialog | Qt::Window))
{
setupUi(this);
int idx = 0;
int currentIndex = 0;
for (const ScoreFont& f : ScoreFont::scoreFonts()) {
fontList->addItem(f.name());
if (f.name() == "Bravura")
currentIndex = idx;
++idx;
}
fontList->setCurrentIndex(currentIndex);
setWindowTitle(tr("MuseScore: Symbols"));
QLayout* l = new QVBoxLayout();
frame->setLayout(l);
createSymbolPalette();
QScrollArea* sa = new PaletteScrollArea(sp);
l->addWidget(sa);
sp->setAcceptDrops(false);
sp->setDrawGrid(true);
sp->setSelectable(true);
connect(systemFlag, SIGNAL(stateChanged(int)), SLOT(systemFlagChanged(int)));
connect(fontList, SIGNAL(currentIndexChanged(int)), SLOT(systemFontChanged(int)));
sa->setWidget(sp);
}
//---------------------------------------------------------
// systemFlagChanged
//---------------------------------------------------------
void SymbolDialog::systemFlagChanged(int state)
{
bool sysFlag = state == Qt::Checked;
for (int i = 0; i < sp->size(); ++i) {
Element* e = sp->element(i);
if (e && e->type() == Element::SYMBOL)
static_cast<Symbol*>(e)->setSystemFlag(sysFlag);
}
}
//---------------------------------------------------------
// systemFontChanged
//---------------------------------------------------------
void SymbolDialog::systemFontChanged(int)
{
createSymbols();
}
}