root/src/apps/haikudepot/textview/Bullet.cpp
/*
 * Copyright 2013, Stephan Aßmus <superstippi@gmx.de>.
 * All rights reserved. Distributed under the terms of the MIT License.
 */

#include "Bullet.h"


static BulletData sEmptyBullet;


Bullet::Bullet()
        :
        fBulletData(&sEmptyBullet)
{
}


Bullet::Bullet(const BString& string, float spacing)
        :
        fBulletData(new BulletData(string, spacing), true)
{
}


Bullet::Bullet(const Bullet& other)
        :
        fBulletData(other.fBulletData)
{
}


Bullet&
Bullet::operator=(const Bullet& other)
{
        if (this == &other)
                return *this;

        fBulletData = other.fBulletData;
        return *this;
}


bool
Bullet::operator==(const Bullet& other) const
{
        if (this == &other)
                return true;

        if (fBulletData == other.fBulletData)
                return true;

        if (fBulletData.IsSet() && other.fBulletData.IsSet())
                return *fBulletData == *other.fBulletData;

        return false;
}


bool
Bullet::operator!=(const Bullet& other) const
{
        return !(*this == other);
}


bool
Bullet::SetString(const BString& string)
{
        BulletDataRef data = fBulletData->SetString(string);
        if (data == fBulletData)
                return data->String() == string;

        fBulletData = data;
        return true;
}


const BString&
Bullet::String() const
{
        return fBulletData->String();
}


bool
Bullet::SetSpacing(float spacing)
{
        BulletDataRef data = fBulletData->SetSpacing(spacing);
        if (data == fBulletData)
                return data->Spacing() == spacing;

        fBulletData = data;
        return true;
}


float
Bullet::Spacing() const
{
        return fBulletData->Spacing();
}