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(); }
void KSaneOptSlider::sliderChanged(int val) { if (val == m_iVal) return; unsigned char data[4]; m_iVal = val; fromSANE_Word(data, val); writeData(data); }
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; }
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; }