diff options
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/multieditor')
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: |
