summaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp215
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;
+}