//=============================================================================
// MuseScore
// Music Composition & Notation
//
// Copyright (C) 2002-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 __TEXTLINEBASE_H__
#define __TEXTLINEBASE_H__
#include "line.h"
#include "style.h"
#include "property.h"
namespace Ms {
enum class SubStyle;
enum class Align : char;
class TextLineBase;
class Element;
class Text;
//---------------------------------------------------------
// @@ TextLineBaseSegment
//---------------------------------------------------------
class TextLineBaseSegment : public LineSegment {
Q_GADGET
protected:
Text* _text;
Text* _endText;
QPointF points[4];
int npoints;
bool twoLines { false };
public:
TextLineBaseSegment(Score* s);
TextLineBaseSegment(const TextLineBaseSegment&);
~TextLineBaseSegment();
TextLineBase* textLineBase() const { return (TextLineBase*)spanner(); }
virtual void draw(QPainter*) const override;
virtual void layout() override;
virtual void setSelected(bool f);
virtual void spatiumChanged(qreal /*oldValue*/, qreal /*newValue*/) override;
virtual QVariant getProperty(P_ID id) const override;
virtual bool setProperty(P_ID propertyId, const QVariant&) override;
virtual QVariant propertyDefault(P_ID id) const override;
virtual Shape shape() const override;
};
//---------------------------------------------------------
// HookType
//---------------------------------------------------------
enum class HookType : char {
NONE, HOOK_90, HOOK_45
};
//---------------------------------------------------------
// @@ TextLineBase
//---------------------------------------------------------
class TextLineBase : public SLine {
Q_GADGET
enum class LineType : char { CRESCENDO, DECRESCENDO };
#define PROP(a,b,c) \
a _ ## b; \
PropertyFlags _ ## b ## Style { PropertyFlags::STYLED }; \
public: \
const a& b() const { return _ ## b; } \
void c(const a& val) { _ ## b = val; } \
private:
PROP(bool, lineVisible, setLineVisible)
PROP(HookType, beginHookType, setBeginHookType)
PROP(HookType, endHookType, setEndHookType)
PROP(Spatium, beginHookHeight, setBeginHookHeight)
PROP(Spatium, endHookHeight, setEndHookHeight)
PROP(PlaceText, beginTextPlace, setBeginTextPlace)
PROP(QString, beginText, setBeginText)
PROP(Align, beginTextAlign, setBeginTextAlign)
PROP(QString, beginFontFamily, setBeginFontFamily)
PROP(qreal, beginFontSize, setBeginFontSize)
PROP(bool, beginFontBold, setBeginFontBold)
PROP(bool, beginFontItalic, setBeginFontItalic)
PROP(bool, beginFontUnderline, setBeginFontUnderline)
PROP(QPointF, beginTextOffset, setBeginTextOffset)
PROP(PlaceText, continueTextPlace, setContinueTextPlace)
PROP(QString, continueText, setContinueText)
PROP(Align, continueTextAlign, setContinueTextAlign)
PROP(QString, continueFontFamily, setContinueFontFamily)
PROP(qreal, continueFontSize, setContinueFontSize)
PROP(bool, continueFontBold, setContinueFontBold)
PROP(bool, continueFontItalic, setContinueFontItalic)
PROP(bool, continueFontUnderline, setContinueFontUnderline)
PROP(QPointF, continueTextOffset, setContinueTextOffset)
PROP(PlaceText, endTextPlace, setEndTextPlace)
PROP(QString, endText, setEndText)
PROP(Align, endTextAlign, setEndTextAlign)
PROP(QString, endFontFamily, setEndFontFamily)
PROP(qreal, endFontSize, setEndFontSize)
PROP(bool, endFontBold, setEndFontBold)
PROP(bool, endFontItalic, setEndFontItalic)
PROP(bool, endFontUnderline, setEndFontUnderline)
PROP(QPointF, endTextOffset, setEndTextOffset)
#undef PROP
protected:
friend class TextLineBaseSegment;
public:
TextLineBase(Score* s);
TextLineBase(const TextLineBase&);
virtual void write(XmlWriter& xml) const override;
virtual void read(XmlReader&) override;
virtual void writeProperties(XmlWriter& xml) const override;
virtual bool readProperties(XmlReader& node) override;
virtual void spatiumChanged(qreal /*oldValue*/, qreal /*newValue*/) override;
virtual QVariant getProperty(P_ID id) const override;
virtual bool setProperty(P_ID propertyId, const QVariant&) override;
virtual QVariant propertyDefault(P_ID id) const override;
};
} // namespace Ms
Q_DECLARE_METATYPE(Ms::HookType);
#endif
↑ V690 The 'TextLineBaseSegment' class implements a copy constructor, but lacks the '=' operator. It is dangerous to use such a class.