//=============================================================================
//  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.