aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/multieditor
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/multieditor')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditor.cpp25
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditor.h18
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordatetime.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordialog.cpp5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordialog.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorfk.cpp49
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorfk.h29
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorhex.cpp1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortext.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortext.h4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.cpp2
14 files changed, 133 insertions, 11 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditor.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditor.cpp
index 0f965cd..b3ee1ee 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditor.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditor.cpp
@@ -1,4 +1,5 @@
#include "multieditor.h"
+#include "multieditor/multieditorfk.h"
#include "multieditortext.h"
#include "multieditornumeric.h"
#include "multieditordatetime.h"
@@ -7,15 +8,15 @@
#include "multieditorbool.h"
#include "multieditorhex.h"
#include "mainwindow.h"
-#include "common/unused.h"
+#include "iconmanager.h"
#include "services/notifymanager.h"
#include "services/pluginmanager.h"
#include "multieditorwidgetplugin.h"
#include "uiconfig.h"
#include "dialogs/configdialog.h"
-#include "formview.h"
#include "themetuner.h"
#include "common/compatibility.h"
+#include "datagrid/sqlquerymodelcolumn.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QTabWidget>
@@ -191,7 +192,6 @@ void MultiEditor::addEditor(MultiEditorWidget* editorWidget)
connect(editorWidget, SIGNAL(valueModified()), this, SLOT(invalidateValue()));
editors << editorWidget;
tabs->addTab(editorWidget, editorWidget->getTabLabel().replace("&", "&&"));
- THEME_TUNER->manageCompactLayout(editorWidget);
editorWidget->installEventFilter(this);
connect(editorWidget, &MultiEditorWidget::aboutToBeDeleted, [this, editorWidget]()
@@ -280,7 +280,7 @@ void MultiEditor::setDataType(const DataType& dataType)
{
this->dataType = dataType;
- for (MultiEditorWidget* editorWidget : getEditorTypes(dataType))
+ for (MultiEditorWidget*& editorWidget : getEditorTypes(dataType))
addEditor(editorWidget);
showTab(0);
@@ -288,6 +288,14 @@ void MultiEditor::setDataType(const DataType& dataType)
configBtn->setEnabled(true);
}
+void MultiEditor::enableFk(Db* db, SqlQueryModelColumn* column)
+{
+ MultiEditorFk* fkEditor = new MultiEditorFk();
+ fkEditor->initFkCombo(db, column);
+ fkEditor->setTabLabel(tr("Foreign Key"));
+ addEditor(fkEditor);
+}
+
void MultiEditor::focusThisEditor()
{
MultiEditorWidget* w = dynamic_cast<MultiEditorWidget*>(tabs->currentWidget());
@@ -324,14 +332,15 @@ QList<MultiEditorWidget*> MultiEditor::getEditorTypes(const DataType& dataType)
if (editorsOrder.contains(typeStr))
{
MultiEditorWidgetPlugin* plugin = nullptr;
- for (const QString& editorPluginName : editorsOrder[typeStr].toStringList())
+ for (QString& editorPluginName : editorsOrder[typeStr].toStringList())
{
plugin = dynamic_cast<MultiEditorWidgetPlugin*>(PLUGINS->getLoadedPlugin(editorPluginName));
if (!plugin)
{
if (!missingEditorPluginsAlreadyWarned.contains(editorPluginName))
{
- notifyWarn(tr("Data editor plugin '%1' not loaded, while it is defined for editing '%1' data type."));
+ notifyWarn(tr("Data editor plugin '%1' not loaded, while it is defined for editing '%2' data type.")
+ .arg(editorPluginName, typeStr));
missingEditorPluginsAlreadyWarned[editorPluginName] = true;
}
continue;
@@ -371,7 +380,7 @@ QList<MultiEditorWidget*> MultiEditor::getEditorTypes(const DataType& dataType)
return ed1.first < ed2.first;
});
- for (const EditorWithPriority& e : sortedEditors)
+ for (EditorWithPriority& e : sortedEditors)
editors << e.second;
return editors;
@@ -439,7 +448,7 @@ QVariant MultiEditor::getValueOmmitNull() const
void MultiEditor::initAddTabMenu()
{
addTabMenu = new QMenu(addTabBtn);
- for (MultiEditorWidgetPlugin* plugin : PLUGINS->getLoadedPlugins<MultiEditorWidgetPlugin>())
+ for (MultiEditorWidgetPlugin*& plugin : PLUGINS->getLoadedPlugins<MultiEditorWidgetPlugin>())
addPluginToMenu(plugin);
sortAddTabMenu();
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditor.h b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditor.h
index 55d7f2e..25b09de 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditor.h
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditor.h
@@ -1,11 +1,13 @@
#ifndef MULTIEDITOR_H
#define MULTIEDITOR_H
+#include "datatype.h"
#include "guiSQLiteStudio_global.h"
-#include "datagrid/sqlquerymodelcolumn.h"
#include <QWidget>
#include <QVariant>
+class Db;
+class SqlQueryModelColumn;
class QCheckBox;
class QTabWidget;
class MultiEditorWidget;
@@ -51,9 +53,23 @@ class GUI_API_EXPORT MultiEditor : public QWidget
void setReadOnly(bool value);
void setDeletedRow(bool value);
void setDataType(const DataType& dataType);
+ void enableFk(Db* db, SqlQueryModelColumn* column);
void focusThisEditor();
void setCornerLabel(const QString& label);
+ template <class T>
+ T* getEditorWidget() const
+ {
+ QListIterator<MultiEditorWidget*> it(editors);
+ while (it.hasNext())
+ {
+ T* casted = dynamic_cast<T*>(it.next());
+ if (casted)
+ return casted;
+ }
+ return nullptr;
+ }
+
static void loadBuiltInEditors();
private:
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp
index 1882335..a466e81 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorbool.cpp
@@ -175,6 +175,7 @@ bool MultiEditorBoolPlugin::validFor(const DataType& dataType)
case DataType::DATE:
case DataType::DATETIME:
case DataType::TIME:
+ case DataType::ANY:
case DataType::unknown:
break;
}
@@ -188,6 +189,7 @@ int MultiEditorBoolPlugin::getPriority(const DataType& dataType)
case DataType::BOOLEAN:
return 1;
case DataType::BLOB:
+ case DataType::ANY:
case DataType::BIGINT:
case DataType::DECIMAL:
case DataType::DOUBLE:
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.cpp
index 4059f96..2377a7d 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.cpp
@@ -45,6 +45,7 @@ bool MultiEditorDatePlugin::validFor(const DataType& dataType)
case DataType::VARCHAR:
case DataType::DATETIME:
case DataType::TIME:
+ case DataType::ANY:
case DataType::unknown:
break;
case DataType::DATE:
@@ -59,6 +60,7 @@ int MultiEditorDatePlugin::getPriority(const DataType& dataType)
{
case DataType::BLOB:
case DataType::BOOLEAN:
+ case DataType::ANY:
case DataType::BIGINT:
case DataType::DECIMAL:
case DataType::DOUBLE:
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordatetime.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordatetime.cpp
index 99053b0..d876378 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordatetime.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordatetime.cpp
@@ -231,6 +231,7 @@ bool MultiEditorDateTimePlugin::validFor(const DataType& dataType)
case DataType::CHAR:
case DataType::VARCHAR:
case DataType::TIME:
+ case DataType::ANY:
case DataType::unknown:
break;
case DataType::DATE:
@@ -259,6 +260,7 @@ int MultiEditorDateTimePlugin::getPriority(const DataType& dataType)
case DataType::CHAR:
case DataType::VARCHAR:
case DataType::TIME:
+ case DataType::ANY:
case DataType::unknown:
break;
case DataType::DATE:
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordialog.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordialog.cpp
index 5e3985c..75ebb07 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordialog.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordialog.cpp
@@ -47,3 +47,8 @@ void MultiEditorDialog::setReadOnly(bool readOnly)
{
multiEditor->setReadOnly(readOnly);
}
+
+void MultiEditorDialog::enableFk(Db* db, SqlQueryModelColumn* column)
+{
+ multiEditor->enableFk(db, column);
+}
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordialog.h b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordialog.h
index ffbbd9c..57fb4f2 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordialog.h
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordialog.h
@@ -20,6 +20,7 @@ class GUI_API_EXPORT MultiEditorDialog : public QDialog
void setDataType(const DataType& dataType);
void setReadOnly(bool readOnly);
+ void enableFk(Db* db, SqlQueryModelColumn* column);
private:
MultiEditor* multiEditor = nullptr;
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorfk.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorfk.cpp
new file mode 100644
index 0000000..e0ec5e1
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorfk.cpp
@@ -0,0 +1,49 @@
+#include "multieditorfk.h"
+#include "datagrid/fkcombobox.h"
+#include <QVBoxLayout>
+#include <QLineEdit>
+
+MultiEditorFk::MultiEditorFk(QWidget* parent)
+ : MultiEditorWidget(parent)
+{
+ setLayout(new QVBoxLayout());
+ comboBox = new FkComboBox(this);
+ comboBox->setEditable(false);
+ layout()->addWidget(comboBox);
+
+ connect(comboBox, SIGNAL(valueModified()), this, SIGNAL(valueModified()));
+
+ setFocusProxy(comboBox);
+}
+
+void MultiEditorFk::initFkCombo(Db* db, SqlQueryModelColumn* columnModel)
+{
+ comboBox->init(db, columnModel);
+}
+
+void MultiEditorFk::setValue(const QVariant& value)
+{
+ comboBox->setValue(value);
+}
+
+QVariant MultiEditorFk::getValue()
+{
+ return comboBox->getValue();
+}
+
+void MultiEditorFk::setReadOnly(bool value)
+{
+ comboBox->setDisabled(value);
+}
+
+void MultiEditorFk::focusThisWidget()
+{
+ comboBox->setFocus();
+}
+
+QList<QWidget*> MultiEditorFk::getNoScrollWidgets()
+{
+ QList<QWidget*> list;
+ list << comboBox;
+ return list;
+}
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorfk.h b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorfk.h
new file mode 100644
index 0000000..5854ffc
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorfk.h
@@ -0,0 +1,29 @@
+#ifndef MULTIEDITORFK_H
+#define MULTIEDITORFK_H
+
+#include "multieditorwidget.h"
+
+class Db;
+class SqlQueryModelColumn;
+class FkComboBox;
+
+class MultiEditorFk : public MultiEditorWidget
+{
+ Q_OBJECT
+
+ public:
+ explicit MultiEditorFk(QWidget *parent = nullptr);
+
+ void initFkCombo(Db* db, SqlQueryModelColumn* columnModel);
+ void setValue(const QVariant& value);
+ QVariant getValue();
+ void setReadOnly(bool value);
+ void focusThisWidget();
+
+ QList<QWidget*> getNoScrollWidgets();
+
+ private:
+ FkComboBox* comboBox = nullptr;
+};
+
+#endif // MULTIEDITORFK_H
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorhex.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorhex.cpp
index a959e53..3f92330 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorhex.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditorhex.cpp
@@ -65,6 +65,7 @@ int MultiEditorHexPlugin::getPriority(const DataType& dataType)
case DataType::BLOB:
return 1;
case DataType::BIGINT:
+ case DataType::ANY:
case DataType::DECIMAL:
case DataType::DOUBLE:
case DataType::INTEGER:
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp
index 6b1dd09..322c94f 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp
@@ -70,6 +70,7 @@ bool MultiEditorNumericPlugin::validFor(const DataType& dataType)
case DataType::DATE:
case DataType::DATETIME:
case DataType::TIME:
+ case DataType::ANY:
case DataType::unknown:
break;
}
@@ -98,6 +99,7 @@ int MultiEditorNumericPlugin::getPriority(const DataType& dataType)
case DataType::DATE:
case DataType::DATETIME:
case DataType::TIME:
+ case DataType::ANY:
case DataType::unknown:
break;
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortext.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortext.cpp
index 0d963a5..9222f40 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortext.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortext.cpp
@@ -1,5 +1,6 @@
#include "multieditortext.h"
#include "common/unused.h"
+#include "iconmanager.h"
#include <QPlainTextEdit>
#include <QVariant>
#include <QVBoxLayout>
@@ -173,6 +174,7 @@ int MultiEditorTextPlugin::getPriority(const DataType& dataType)
case DataType::TEXT:
case DataType::CHAR:
case DataType::VARCHAR:
+ case DataType::ANY:
case DataType::unknown:
break;
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortext.h b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortext.h
index 59d2a44..369dada 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortext.h
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortext.h
@@ -20,8 +20,7 @@ CFG_KEY_LIST(MultiEditorText, QObject::tr("Cell text value editor"),
class GUI_API_EXPORT MultiEditorText : public MultiEditorWidget, public ExtActionContainer
{
- Q_OBJECT
- Q_ENUMS(Action)
+ Q_OBJECT
public:
enum Action
@@ -34,6 +33,7 @@ class GUI_API_EXPORT MultiEditorText : public MultiEditorWidget, public ExtActio
UNDO,
REDO
};
+ Q_ENUM(Action)
enum ToolBar
{
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.cpp
index 35800ce..1acd606 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.cpp
@@ -48,6 +48,7 @@ bool MultiEditorTimePlugin::validFor(const DataType& dataType)
case DataType::VARCHAR:
case DataType::DATE:
case DataType::DATETIME:
+ case DataType::ANY:
case DataType::unknown:
break;
case DataType::TIME:
@@ -76,6 +77,7 @@ int MultiEditorTimePlugin::getPriority(const DataType& dataType)
case DataType::VARCHAR:
case DataType::DATE:
case DataType::DATETIME:
+ case DataType::ANY:
case DataType::unknown:
break;
case DataType::TIME: