2012-05-26 14:26:10 +02:00
|
|
|
//=============================================================================
|
|
|
|
// MuseScore
|
|
|
|
// Music Composition & Notation
|
|
|
|
//
|
|
|
|
// Copyright (C) 2004-2011 Werner Schweer
|
|
|
|
//
|
|
|
|
// This program is free software; you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU General Public License version 2
|
|
|
|
// as published by the Free Software Foundation and appearing in
|
|
|
|
// the file LICENCE.GPL
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
#ifndef __ACCIDENTAL_H__
|
|
|
|
#define __ACCIDENTAL_H__
|
|
|
|
|
|
|
|
/**
|
|
|
|
\file
|
|
|
|
Definition of class Accidental
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "element.h"
|
|
|
|
#include "mscore.h"
|
|
|
|
|
|
|
|
class Note;
|
|
|
|
class QPainter;
|
|
|
|
|
|
|
|
//---------------------------------------------------------
|
|
|
|
// SymElement
|
|
|
|
//---------------------------------------------------------
|
|
|
|
|
|
|
|
struct SymElement {
|
|
|
|
int sym;
|
|
|
|
qreal x;
|
|
|
|
SymElement(int _sym, qreal _x) : sym(_sym), x(_x) {}
|
|
|
|
};
|
|
|
|
|
|
|
|
//---------------------------------------------------------
|
2012-07-25 11:49:34 +02:00
|
|
|
// @@ Accidental
|
2012-07-27 18:01:15 +02:00
|
|
|
// @P hasBracket bool
|
|
|
|
// @P small bool
|
2012-11-06 10:07:47 +01:00
|
|
|
// @P acctype enum ACC_NONE, ACC_SHARP, ACC_FLAT, ACC_SHARP2, ACC_FLAT2, ACC_NATURAL, ... (read only)
|
|
|
|
// @P role enum ACC_AUTO, ACC_USER (read only)
|
2012-05-26 14:26:10 +02:00
|
|
|
//---------------------------------------------------------
|
|
|
|
|
|
|
|
class Accidental : public Element {
|
2012-10-01 20:03:31 +02:00
|
|
|
public:
|
|
|
|
enum AccidentalRole {
|
|
|
|
ACC_AUTO, // layout created accidental
|
|
|
|
ACC_USER // user created accidental
|
|
|
|
};
|
|
|
|
enum AccidentalType {
|
|
|
|
ACC_NONE,
|
|
|
|
ACC_SHARP,
|
|
|
|
ACC_FLAT,
|
|
|
|
ACC_SHARP2,
|
|
|
|
ACC_FLAT2,
|
|
|
|
ACC_NATURAL,
|
|
|
|
|
|
|
|
ACC_FLAT_SLASH,
|
|
|
|
ACC_FLAT_SLASH2,
|
|
|
|
ACC_MIRRORED_FLAT2,
|
|
|
|
ACC_MIRRORED_FLAT,
|
|
|
|
ACC_MIRRIRED_FLAT_SLASH,
|
|
|
|
ACC_FLAT_FLAT_SLASH,
|
|
|
|
|
|
|
|
ACC_SHARP_SLASH,
|
|
|
|
ACC_SHARP_SLASH2,
|
|
|
|
ACC_SHARP_SLASH3,
|
|
|
|
ACC_SHARP_SLASH4,
|
|
|
|
|
|
|
|
ACC_SHARP_ARROW_UP,
|
|
|
|
ACC_SHARP_ARROW_DOWN,
|
|
|
|
ACC_SHARP_ARROW_BOTH,
|
|
|
|
ACC_FLAT_ARROW_UP,
|
|
|
|
ACC_FLAT_ARROW_DOWN,
|
|
|
|
ACC_FLAT_ARROW_BOTH,
|
|
|
|
ACC_NATURAL_ARROW_UP,
|
|
|
|
ACC_NATURAL_ARROW_DOWN,
|
|
|
|
ACC_NATURAL_ARROW_BOTH,
|
|
|
|
ACC_SORI,
|
|
|
|
ACC_KORON,
|
|
|
|
ACC_END
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
2012-05-28 11:29:21 +02:00
|
|
|
Q_OBJECT
|
2012-10-01 20:03:31 +02:00
|
|
|
Q_PROPERTY(bool hasBracket READ hasBracket WRITE undoSetHasBracket)
|
|
|
|
Q_PROPERTY(bool small READ small WRITE undoSetSmall)
|
2013-03-05 20:23:59 +01:00
|
|
|
Q_PROPERTY(AccidentalType accType READ accidentalType)
|
2012-10-01 20:03:31 +02:00
|
|
|
Q_PROPERTY(AccidentalRole role READ role)
|
|
|
|
Q_ENUMS(AccidentalType)
|
|
|
|
Q_ENUMS(AccidentalRole)
|
2012-05-28 11:29:21 +02:00
|
|
|
|
2012-05-26 14:26:10 +02:00
|
|
|
QList<SymElement> el;
|
2013-03-05 20:23:59 +01:00
|
|
|
AccidentalType _accidentalType;
|
2012-05-26 14:26:10 +02:00
|
|
|
bool _hasBracket;
|
|
|
|
bool _small;
|
2012-07-27 18:01:15 +02:00
|
|
|
AccidentalRole _role;
|
2012-05-26 14:26:10 +02:00
|
|
|
|
|
|
|
public:
|
2012-08-24 19:05:54 +02:00
|
|
|
Accidental(Score* s = 0);
|
2012-05-26 14:26:10 +02:00
|
|
|
virtual Accidental* clone() const { return new Accidental(*this); }
|
|
|
|
virtual ElementType type() const { return ACCIDENTAL; }
|
|
|
|
|
|
|
|
const char* subtypeUserName() const;
|
|
|
|
void setSubtype(const QString& s);
|
2013-03-05 20:23:59 +01:00
|
|
|
void setAccidentalType(AccidentalType t) { _accidentalType = t; }
|
|
|
|
AccidentalType accidentalType() const { return _accidentalType; }
|
2012-05-26 14:26:10 +02:00
|
|
|
|
|
|
|
virtual bool acceptDrop(MuseScoreView*, const QPointF&, Element*) const;
|
|
|
|
virtual Element* drop(const DropData&);
|
|
|
|
virtual void layout();
|
|
|
|
virtual void draw(QPainter*) const;
|
|
|
|
virtual bool isEditable() const { return true; }
|
|
|
|
virtual void startEdit(MuseScoreView*, const QPointF&) { setGenerated(false); }
|
|
|
|
|
|
|
|
int symbol() const;
|
|
|
|
Note* note() const { return (Note*)parent(); }
|
2012-07-27 18:01:15 +02:00
|
|
|
|
2012-05-26 14:26:10 +02:00
|
|
|
bool hasBracket() const { return _hasBracket; }
|
|
|
|
void setHasBracket(bool val) { _hasBracket = val; }
|
2012-07-27 18:01:15 +02:00
|
|
|
void undoSetHasBracket(bool val);
|
|
|
|
|
2012-05-26 14:26:10 +02:00
|
|
|
AccidentalRole role() const { return _role; }
|
|
|
|
void setRole(AccidentalRole r) { _role = r; }
|
2012-07-27 18:01:15 +02:00
|
|
|
|
2012-05-26 14:26:10 +02:00
|
|
|
bool small() const { return _small; }
|
|
|
|
void setSmall(bool val) { _small = val; }
|
2012-07-27 18:01:15 +02:00
|
|
|
void undoSetSmall(bool val);
|
2012-05-26 14:26:10 +02:00
|
|
|
|
2013-01-11 18:10:18 +01:00
|
|
|
virtual void read(XmlReader&);
|
2012-05-26 14:26:10 +02:00
|
|
|
virtual void write(Xml& xml) const;
|
|
|
|
|
|
|
|
virtual QVariant getProperty(P_ID propertyId) const;
|
|
|
|
virtual bool setProperty(P_ID propertyId, const QVariant&);
|
|
|
|
|
2012-08-08 20:46:29 +02:00
|
|
|
static AccidentalVal subtype2value(AccidentalType); // return effective pitch offset
|
|
|
|
static const char* subtype2name(AccidentalType);
|
|
|
|
static AccidentalType value2subtype(AccidentalVal);
|
2012-05-26 14:26:10 +02:00
|
|
|
static AccidentalType name2subtype(const QString&);
|
|
|
|
};
|
|
|
|
|
2012-10-01 20:03:31 +02:00
|
|
|
Q_DECLARE_METATYPE(Accidental::AccidentalRole)
|
|
|
|
Q_DECLARE_METATYPE(Accidental::AccidentalType)
|
|
|
|
|
2012-05-26 14:26:10 +02:00
|
|
|
//---------------------------------------------------------
|
2012-07-25 11:49:34 +02:00
|
|
|
// @@ AccidentalBracket
|
2012-11-06 10:07:47 +01:00
|
|
|
/// used as icon in palette
|
2012-05-26 14:26:10 +02:00
|
|
|
//---------------------------------------------------------
|
|
|
|
|
|
|
|
class AccidentalBracket : public Compound {
|
2012-05-28 11:29:21 +02:00
|
|
|
Q_OBJECT
|
|
|
|
|
2012-05-26 14:26:10 +02:00
|
|
|
public:
|
|
|
|
AccidentalBracket(Score*);
|
|
|
|
virtual AccidentalBracket* clone() const { return new AccidentalBracket(*this); }
|
|
|
|
virtual ElementType type() const { return ACCIDENTAL_BRACKET; }
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|