Beispiel #1
0
void KSaneOptCombo::comboboxChangedIndex(int i)
{
    if (m_combo && (m_combo->currentText() == m_currentText)) {
        return;
    }

    unsigned char data[4];
    void *dataPtr;

    switch (m_optDesc->type) {
    case SANE_TYPE_INT:
    case SANE_TYPE_FIXED:
        fromSANE_Word(data, m_optDesc->constraint.word_list[i + 1]);
        dataPtr = data;
        break;
    case SANE_TYPE_STRING:
        dataPtr = (void *)m_optDesc->constraint.string_list[i];
        break;
    default:
        qDebug() << "can not handle type:" << m_optDesc->type;
        return;
    }
    writeData(dataPtr);
    readValue();
    emit valueChanged();
}
Beispiel #2
0
void KSaneOptSlider::sliderChanged(int val)
{
    if (val == m_iVal) return;
    unsigned char data[4];
    m_iVal = val;
    fromSANE_Word(data, val);
    writeData(data);
}
Beispiel #3
0
bool KSaneOptCombo::setValue(float value)
{
    unsigned char data[4];
    float tmp;
    float minDiff;
    int i;
    int minIndex = 1;

    switch (m_optDesc->type) {
    case SANE_TYPE_INT:
        tmp = (float)m_optDesc->constraint.word_list[minIndex];
        minDiff = qAbs(value - tmp);
        for (i = 2; i <= m_optDesc->constraint.word_list[0]; ++i) {
            tmp = (float)m_optDesc->constraint.word_list[i];
            if (qAbs(value - tmp) < minDiff) {
                minDiff = qAbs(value - tmp);
                minIndex = i;
            }
        }
        fromSANE_Word(data, m_optDesc->constraint.word_list[minIndex]);
        writeData(data);
        readValue();
        return (minDiff < 1.0);
    case SANE_TYPE_FIXED:
        tmp = (float)SANE_UNFIX(m_optDesc->constraint.word_list[minIndex]);
        minDiff = qAbs(value - tmp);
        for (i = 2; i <= m_optDesc->constraint.word_list[0]; ++i) {
            tmp = (float)SANE_UNFIX(m_optDesc->constraint.word_list[i]);
            if (qAbs(value - tmp) < minDiff) {
                minDiff = qAbs(value - tmp);
                minIndex = i;
            }
        }
        fromSANE_Word(data, m_optDesc->constraint.word_list[minIndex]);
        writeData(data);
        readValue();
        return (minDiff < 1.0);
    default:
        qDebug() << "can not handle type:" << m_optDesc->type;
        break;
    }
    return false;
}
Beispiel #4
0
bool KSaneOptCombo::setValue(const QString &val)
{
    if (state() == STATE_HIDDEN) {
        return false;
    }
    if (val == m_currentText) {
        return true;
    }

    unsigned char data[4];
    void *data_ptr;
    SANE_Word fixed;
    int i;
    float f;
    bool ok;
    QString tmp;

    switch (m_optDesc->type) {
    case SANE_TYPE_INT:
        tmp = val.left(val.indexOf(QLatin1Char(' '))); // strip the unit
        // accept float formating of the string
        i = (int)(tmp.toFloat(&ok));
        if (ok == false) {
            return false;
        }
        fromSANE_Word(data, i);
        data_ptr = data;
        break;
    case SANE_TYPE_FIXED:
        tmp = val.left(val.indexOf(QLatin1Char(' '))); // strip the unit
        f = tmp.toFloat(&ok);
        if (ok == false) {
            return false;
        }
        fixed = SANE_FIX(f);
        fromSANE_Word(data, fixed);
        data_ptr = data;
        break;
    case SANE_TYPE_STRING:
        i = 0;
        while (m_optDesc->constraint.string_list[i] != 0) {
            tmp = getSaneComboString((unsigned char *)m_optDesc->constraint.string_list[i]);
            if (val == tmp) {
                data_ptr = (void *)m_optDesc->constraint.string_list[i];
                break;
            }
            i++;
        }
        if (m_optDesc->constraint.string_list[i] == 0) {
            return false;
        }
        break;
    default:
        qDebug() << "can only handle SANE_TYPE: INT, FIXED and STRING";
        return false;
    }
    writeData(data_ptr);

    readValue();
    return true;
}