/***************************************************************************
 * tabbeateffects.h
 *
 * This file is part of KTabEdit, a KDE tabulature editor
 *
 * copyright (C) 2006- the KTabEdit development team <mrgwen@gmail.com>
 ***************************************************************************/

/***************************************************************************
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * See the file COPYING for more information.
 ***************************************************************************/

#ifndef TABBEATEFFECTS_H
#define TABBEATEFFECTS_H

#include <QString>

#include "pickstroke.h"
#include "tabbend.h"

class TabTimeEffect
{
public:
	TabTimeEffect();
	virtual ~TabTimeEffect();
	
	virtual void clone(const TabTimeEffect* effect);
	
	virtual void setRasgueado(bool b);
	virtual bool isRasgueado() const;
	
	virtual bool hasPickStroke() const;
	virtual void setPickStroke(PickStroke p);
	virtual PickStroke pickstroke() const;
	
	virtual bool hasTremolo() const;
	virtual void setTremolo(int i);
	virtual int tremolo() const;
	
	virtual void setTapping(bool b);
	virtual bool isTapping() const;
	
	virtual void setPopping(bool b);
	virtual bool isPopping() const;
	
	virtual void setSlapping(bool b);
	virtual bool isSlapping() const;
	
	virtual void setStroke(bool b);
	virtual bool isStroke() const;
	
	virtual void setUpStroke(int i);
	virtual int upStroke() const;
	
	virtual void setDownStroke(int i);
	virtual int downStroke() const;
	
	virtual void setVibrato(bool b);
	virtual bool isVibrato() const;
	
	virtual void setWideVibrato(bool b);
	virtual bool isWideVibrato() const;
	
	virtual void setNaturalHarmonic(bool b);
	virtual bool isNaturalHarmonic() const;
	
	virtual void setArtificialHarmonic(bool b);
	virtual bool isArtificialHarmonic() const;
	
	virtual void setFadeIn(bool b);
	virtual bool isFadeIn() const;
	
	virtual void setBend(TabBend* bend);
	virtual TabBend* bend() const;
	virtual bool hasBend() const;
	
	virtual void setBendType(TabBend::BendType b);
	virtual TabBend::BendType bendType() const;
	
	virtual void setBendValue(int i);
	virtual int bendValue() const;
	virtual QString bendValueToString() const;
	
	virtual int sizeOfBendPoints() const;
	virtual void addBendPoint(TabBendPoint* point);
	virtual void setBendPoint(uint i, TabBendPoint* point);
	virtual void removeBendPoint(uint i);
	virtual TabBendPoint* bendPoint(uint i) const;
	
	virtual bool operator==(const TabTimeEffect& effect) const;
	virtual bool operator!=(const TabTimeEffect& effect) const;
	
private:
	bool mRasgueado;
	PickStroke mPickStroke;
	int mTremolo;
	bool mTapping;
	bool mPopping;
	bool mSlapping;
	bool mStroke;
	uchar mUpStroke, mDownStroke;
	bool mVibrato;
	bool mWideVibrato;
	bool mNaturalHarmonic;
	bool mArtificialHarmonic;
	bool mFadeIn;
	
	TabBend* mBend;
};

#endif
