#include "custom_combo_box.h"

CustomComboBox::CustomComboBox(QWidget *parent)
    : QComboBox(parent)
{

}

void CustomComboBox::setDefaultPreItem(const QString &text, bool isDefaultItem)
{
    QComboBox::insertItem(m_preItemSize, text);
    m_preItemSize++;

    if (isDefaultItem) {
        m_defaultItem = m_preItemSize - 1;
        QComboBox::setCurrentIndex(m_defaultItem);
    }
}

void CustomComboBox::setDefaultAfterItem(const QString &text, bool isDefaultItem)
{
    QComboBox::insertItem(QComboBox::count(), text);
    m_tailItemSize++;

    if (isDefaultItem) {
        m_defaultItem = QComboBox::count() - 1;
        QComboBox::setCurrentIndex(m_defaultItem);
    }
}

void CustomComboBox::addItem(const QString &text)
{
    QComboBox::insertItem(QComboBox::count() - m_tailItemSize, text);
    if (m_preItemSize < m_defaultItem) {
        m_defaultItem++;
    }
    QComboBox::setCurrentIndex(QComboBox::count() - m_tailItemSize - 1);
}

void CustomComboBox::addItems(const QStringList &texts)
{
    for (auto text : texts) {
        addItem(text);
    }
}

void CustomComboBox::clear()
{
    QComboBox::setCurrentIndex(-1);
    int cnt = QComboBox::count() - m_preItemSize - m_tailItemSize;
    if (m_preItemSize < m_defaultItem) {
        m_defaultItem -= cnt;
    }
    while(cnt--) {
        QComboBox::removeItem(m_preItemSize);
    }
    QComboBox::setCurrentIndex(m_defaultItem);
}

void CustomComboBox::setCurrentIndexToDefault()
{
    if (isEmpty()) {
        QComboBox::setCurrentIndex(m_defaultItem);
    } else {
        QComboBox::setCurrentIndex(m_preItemSize);
    }
}

bool CustomComboBox::isEmpty()
{
    return !(QComboBox::count() - m_preItemSize - m_tailItemSize);
}