int VCCueListProperties::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QDialog::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: accept(); break;
        case 1: slotTabChanged(); break;
        case 2: slotAddClicked(); break;
        case 3: slotRemoveClicked(); break;
        case 4: slotRaiseClicked(); break;
        case 5: slotLowerClicked(); break;
        case 6: slotCutClicked(); break;
        case 7: slotCopyClicked(); break;
        case 8: slotPasteClicked(); break;
        case 9: slotNextAttachClicked(); break;
        case 10: slotNextDetachClicked(); break;
        case 11: slotNextChooseInputClicked(); break;
        case 12: slotNextAutoDetectInputToggled((*reinterpret_cast< bool(*)>(_a[1]))); break;
        case 13: slotNextInputValueChanged((*reinterpret_cast< quint32(*)>(_a[1])),(*reinterpret_cast< quint32(*)>(_a[2]))); break;
        case 14: slotPreviousAttachClicked(); break;
        case 15: slotPreviousDetachClicked(); break;
        case 16: slotPreviousChooseInputClicked(); break;
        case 17: slotPreviousAutoDetectInputToggled((*reinterpret_cast< bool(*)>(_a[1]))); break;
        case 18: slotPreviousInputValueChanged((*reinterpret_cast< quint32(*)>(_a[1])),(*reinterpret_cast< quint32(*)>(_a[2]))); break;
        default: ;
        }
        _id -= 19;
    }
    return _id;
}
VCCueListProperties::VCCueListProperties(VCCueList* cueList, Doc* doc)
    : QDialog(cueList)
    , m_doc(doc)
{
    Q_ASSERT(doc != NULL);
    Q_ASSERT(cueList != NULL);
    m_cueList = cueList;

    setupUi(this);

    QAction* action = new QAction(this);
    action->setShortcut(QKeySequence(QKeySequence::Close));
    connect(action, SIGNAL(triggered(bool)), this, SLOT(reject()));
    addAction(action);

    /************************************************************************
     * Cues page
     ************************************************************************/

    /* Name */
    m_nameEdit->setText(cueList->caption());
    m_nameEdit->setSelection(0, cueList->caption().length());

    /* Chaser */
    m_chaserId = cueList->chaserID();
    updateChaserName();

    /* Connections */
    connect(m_chaserAttachButton, SIGNAL(clicked()), this, SLOT(slotChaserAttachClicked()));
    connect(m_chaserDetachButton, SIGNAL(clicked()), this, SLOT(slotChaserDetachClicked()));

    /************************************************************************
     * Next Cue page
     ************************************************************************/

    /* Connections */
    connect(m_nextAttachButton, SIGNAL(clicked()),
            this, SLOT(slotNextAttachClicked()));
    connect(m_nextDetachButton, SIGNAL(clicked()),
            this, SLOT(slotNextDetachClicked()));
    connect(m_nextAutoDetectInputButton, SIGNAL(toggled(bool)),
            this, SLOT(slotNextAutoDetectInputToggled(bool)));
    connect(m_nextChooseInputButton, SIGNAL(clicked()),
            this, SLOT(slotNextChooseInputClicked()));

    /* Key binding */
    m_nextKeySequence = QKeySequence(cueList->nextKeySequence());
    m_nextKeyEdit->setText(m_nextKeySequence.toString(QKeySequence::NativeText));

    /* External input */
    m_nextInputSource = cueList->inputSource(VCCueList::nextInputSourceId);
    updateNextInputSource();

    /************************************************************************
     * Previous Cue page
     ************************************************************************/

    /* Connections */
    connect(m_previousAttachButton, SIGNAL(clicked()),
            this, SLOT(slotPreviousAttachClicked()));
    connect(m_previousDetachButton, SIGNAL(clicked()),
            this, SLOT(slotPreviousDetachClicked()));
    connect(m_previousAutoDetectInputButton, SIGNAL(toggled(bool)),
            this, SLOT(slotPreviousAutoDetectInputToggled(bool)));
    connect(m_previousChooseInputButton, SIGNAL(clicked()),
            this, SLOT(slotPreviousChooseInputClicked()));

    /* Key binding */
    m_previousKeySequence = QKeySequence(cueList->previousKeySequence());
    m_previousKeyEdit->setText(m_previousKeySequence.toString(QKeySequence::NativeText));

    /* External input */
    m_previousInputSource = cueList->inputSource(VCCueList::previousInputSourceId);
    updatePreviousInputSource();

    /************************************************************************
     * Playback Cue List page
     ************************************************************************/

    /* Connections */
    connect(m_playbackAttachButton, SIGNAL(clicked()),
            this, SLOT(slotPlaybackAttachClicked()));
    connect(m_playbackDetachButton, SIGNAL(clicked()),
            this, SLOT(slotPlaybackDetachClicked()));
    connect(m_playbackAutoDetectInputButton, SIGNAL(toggled(bool)),
            this, SLOT(slotPlaybackAutoDetectInputToggled(bool)));
    connect(m_playbackChooseInputButton, SIGNAL(clicked()),
            this, SLOT(slotPlaybackChooseInputClicked()));

    /* Key binding */
    m_playbackKeySequence = QKeySequence(cueList->playbackKeySequence());
    m_playbackKeyEdit->setText(m_playbackKeySequence.toString(QKeySequence::NativeText));

    /* External input */
    m_playbackInputSource = cueList->inputSource(VCCueList::playbackInputSourceId);
    updatePlaybackInputSource();

    /************************************************************************
     * Crossfade Cue List page
     ************************************************************************/

    /* Connections */
    connect(m_cf1AutoDetectInputButton, SIGNAL(toggled(bool)),
            this, SLOT(slotCF1AutoDetectInputToggled(bool)));
    connect(m_cf1ChooseInputButton, SIGNAL(clicked()),
            this, SLOT(slotCF1ChooseInputClicked()));
    connect(m_cf2AutoDetectInputButton, SIGNAL(toggled(bool)),
            this, SLOT(slotCF2AutoDetectInputToggled(bool)));
    connect(m_cf2ChooseInputButton, SIGNAL(clicked()),
            this, SLOT(slotCF2ChooseInputClicked()));

    /* External input */
    m_cf1InputSource = cueList->inputSource(VCCueList::cf1InputSourceId);
    m_cf2InputSource = cueList->inputSource(VCCueList::cf2InputSourceId);
    updateCrossfadeInputSource();
}