diff options
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp new file mode 100644 index 0000000..ed7c260 --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp @@ -0,0 +1,215 @@ +#include "multieditorbool.h" +#include <QVBoxLayout> +#include <QCheckBox> +#include <QVariant> + +QStringList MultiEditorBool::validValues; + +MultiEditorBool::MultiEditorBool(QWidget* parent) + : MultiEditorWidget(parent) +{ + setLayout(new QVBoxLayout()); + checkBox = new QCheckBox(); + layout()->addWidget(checkBox); + connect(checkBox, &QCheckBox::stateChanged, this, &MultiEditorBool::stateChanged); +} + +void MultiEditorBool::staticInit() +{ + validValues << "true" << "false" + << "yes" << "no" + << "on" << "off" + << "1" << "0"; +} + +void MultiEditorBool::setValue(const QVariant& value) +{ + switch (value.userType()) + { + case QVariant::Bool: + case QVariant::Int: + case QVariant::LongLong: + case QVariant::UInt: + case QVariant::ULongLong: + boolValue = value.toBool(); + upperCaseValue = false; + valueFormat = BOOL; + break; + default: + boolValue = valueFromString(value.toString()); + break; + } + + updateLabel(); + checkBox->setChecked(boolValue); +} + +bool MultiEditorBool::valueFromString(const QString& strValue) +{ + if (strValue.isEmpty()) + { + upperCaseValue = false; + valueFormat = BOOL; + return false; + } + + int idx = validValues.indexOf(strValue.toLower()); + if (idx < 0) + { + upperCaseValue = false; + valueFormat = BOOL; + return true; + } + + upperCaseValue = strValue[0].isUpper(); + switch (idx) + { + case 0: + case 1: + valueFormat = TRUE_FALSE; + break; + case 2: + case 3: + valueFormat = YES_NO; + break; + case 4: + case 5: + valueFormat = ON_OFF; + break; + case 6: + case 7: + valueFormat = ONE_ZERO; + break; + } + return !(bool)(idx % 2); +} + +QVariant MultiEditorBool::getValue() +{ + QString value; + switch (valueFormat) + { + case MultiEditorBool::TRUE_FALSE: + value = boolValue ? "true" : "false"; + break; + case MultiEditorBool::ON_OFF: + value = boolValue ? "on" : "off"; + break; + case MultiEditorBool::YES_NO: + value = boolValue ? "yes" : "no"; + break; + case MultiEditorBool::ONE_ZERO: + case MultiEditorBool::BOOL: + value = boolValue ? "1" : "0"; + break; + } + + if (value.isNull()) + value = boolValue ? "1" : "0"; + + if (upperCaseValue) + value = value.toUpper(); + + return value; +} + +void MultiEditorBool::setReadOnly(bool value) +{ + readOnly = value; +} + +QList<QWidget*> MultiEditorBool::getNoScrollWidgets() +{ + QList<QWidget*> list; + list << checkBox; + return list; +} + +QString MultiEditorBool::getTabLabel() +{ + return tr("Boolean"); +} + +void MultiEditorBool::focusThisWidget() +{ + checkBox->setFocus(); +} + +void MultiEditorBool::updateLabel() +{ + checkBox->setText(getValue().toString()); +} + +void MultiEditorBool::stateChanged(int state) +{ + if (readOnly && ((bool)state) != boolValue) + { + checkBox->setChecked(boolValue); + return; + } + + boolValue = checkBox->isChecked(); + updateLabel(); + emit valueModified(); +} + +MultiEditorWidget* MultiEditorBoolPlugin::getInstance() +{ + return new MultiEditorBool(); +} + +bool MultiEditorBoolPlugin::validFor(const DataType& dataType) +{ + switch (dataType.getType()) + { + case DataType::BOOLEAN: + return true; + case DataType::BLOB: + case DataType::BIGINT: + case DataType::DECIMAL: + case DataType::DOUBLE: + case DataType::INTEGER: + case DataType::INT: + case DataType::NUMERIC: + case DataType::REAL: + case DataType::NONE: + case DataType::STRING: + case DataType::TEXT: + case DataType::CHAR: + case DataType::VARCHAR: + case DataType::DATE: + case DataType::DATETIME: + case DataType::TIME: + case DataType::unknown: + break; + } + return false; +} + +int MultiEditorBoolPlugin::getPriority(const DataType& dataType) +{ + switch (dataType.getType()) + { + case DataType::BOOLEAN: + return 1; + case DataType::BLOB: + case DataType::BIGINT: + case DataType::DECIMAL: + case DataType::DOUBLE: + case DataType::INTEGER: + case DataType::INT: + case DataType::NUMERIC: + case DataType::REAL: + case DataType::NONE: + case DataType::STRING: + case DataType::TEXT: + case DataType::CHAR: + case DataType::VARCHAR: + case DataType::DATE: + case DataType::DATETIME: + case DataType::TIME: + case DataType::unknown: + break; + } + return 100; +} |
