aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/configwidgets
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2014-12-06 17:33:25 -0500
committerLibravatarUnit 193 <unit193@ubuntu.com>2014-12-06 17:33:25 -0500
commit7167ce41b61d2ba2cdb526777a4233eb84a3b66a (patch)
treea35c14143716e1f2c98f808c81f89426045a946f /SQLiteStudio3/guiSQLiteStudio/configwidgets
Imported Upstream version 2.99.6upstream/2.99.6
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/configwidgets')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/configwidgets/combodatawidget.cpp63
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/configwidgets/combodatawidget.h35
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/configwidgets/listtostringlisthash.cpp67
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/configwidgets/listtostringlisthash.h22
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/configwidgets/styleconfigwidget.cpp54
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/configwidgets/styleconfigwidget.h20
6 files changed, 261 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/configwidgets/combodatawidget.cpp b/SQLiteStudio3/guiSQLiteStudio/configwidgets/combodatawidget.cpp
new file mode 100644
index 0000000..93433a0
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/configwidgets/combodatawidget.cpp
@@ -0,0 +1,63 @@
+#include "combodatawidget.h"
+#include "common/unused.h"
+#include "config_builder.h"
+#include "dialogs/configdialog.h"
+#include <QComboBox>
+#include <QDebug>
+
+ComboDataWidget::ComboDataWidget(CfgEntry* key) :
+ assignedKey(key)
+{
+}
+
+bool ComboDataWidget::isConfigForWidget(CfgEntry* key, QWidget* widget)
+{
+ UNUSED(widget);
+ return (assignedKey == key);
+}
+
+void ComboDataWidget::applyConfigToWidget(CfgEntry* key, QWidget* widget, const QVariant& value)
+{
+ QComboBox* cb = dynamic_cast<QComboBox*>(widget);
+ if (!cb)
+ {
+ qWarning() << "ComboDataWidget assigned to widget which is not combobox, but:" << widget->metaObject()->className()
+ << ", config key:" << key->getFullKey();
+ return;
+ }
+
+ QVariant data;
+ for (int i = 0; i < cb->count(); i++)
+ {
+ data = cb->itemData(i);
+ if (data == value)
+ {
+ cb->setCurrentIndex(i);
+ break;
+ }
+ }
+}
+
+QVariant ComboDataWidget::getWidgetConfigValue(QWidget* widget, bool& ok)
+{
+ QComboBox* cb = dynamic_cast<QComboBox*>(widget);
+ if (!cb)
+ {
+ ok = false;
+ qWarning() << "ComboDataWidget assigned to widget which is not combobox, but:" << widget->metaObject()->className();
+ return QVariant();
+ }
+
+ ok = true;
+ return cb->itemData(cb->currentIndex());
+}
+
+const char* ComboDataWidget::getModifiedNotifier() const
+{
+ return SIGNAL(currentTextChanged(QString));
+}
+
+QString ComboDataWidget::getFilterString(QWidget *widget) const
+{
+ return ConfigDialog::getFilterString(widget);
+}
diff --git a/SQLiteStudio3/guiSQLiteStudio/configwidgets/combodatawidget.h b/SQLiteStudio3/guiSQLiteStudio/configwidgets/combodatawidget.h
new file mode 100644
index 0000000..302186e
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/configwidgets/combodatawidget.h
@@ -0,0 +1,35 @@
+#ifndef COMBODATAWIDGET_H
+#define COMBODATAWIDGET_H
+
+#include "customconfigwidgetplugin.h"
+#include "plugins/genericplugin.h"
+#include "guiSQLiteStudio_global.h"
+
+/**
+ * @brief Config entry handler for combo box items with dynamic data set
+ *
+ * This config entry handler runs only for specified "assigned key", so even it's implements CustomConfigWidgetPlugin,
+ * it's created explicitly for each combo.
+ *
+ * It is used to convert CfgEntry value to one of combo's entries and set that value in the combo.
+ * It also works the other way, of course (from combo value to CfgEntry value).
+ *
+ * Currently it is used only by ConfigDialog because of its specific case with custom formatter combo,
+ * which has dynamic contents based on what's added/removed from the combo.
+ */
+class GUI_API_EXPORT ComboDataWidget : public GenericPlugin, public CustomConfigWidgetPlugin
+{
+ public:
+ explicit ComboDataWidget(CfgEntry* key);
+
+ bool isConfigForWidget(CfgEntry* key, QWidget* widget);
+ void applyConfigToWidget(CfgEntry* key, QWidget* widget, const QVariant& value);
+ QVariant getWidgetConfigValue(QWidget* widget, bool& ok);
+ const char*getModifiedNotifier() const;
+ QString getFilterString(QWidget* widget) const;
+
+ private:
+ CfgEntry* assignedKey = nullptr;
+};
+
+#endif // COMBODATAWIDGET_H
diff --git a/SQLiteStudio3/guiSQLiteStudio/configwidgets/listtostringlisthash.cpp b/SQLiteStudio3/guiSQLiteStudio/configwidgets/listtostringlisthash.cpp
new file mode 100644
index 0000000..48b46cc
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/configwidgets/listtostringlisthash.cpp
@@ -0,0 +1,67 @@
+#include "listtostringlisthash.h"
+#include "config_builder.h"
+#include "common/unused.h"
+#include <QListWidget>
+
+ListToStringListHash::ListToStringListHash(CfgEntry* key) :
+ assignedKey(key)
+{
+}
+
+bool ListToStringListHash::isConfigForWidget(CfgEntry* key, QWidget* widget)
+{
+ UNUSED(widget);
+ return (assignedKey == key);
+}
+
+void ListToStringListHash::applyConfigToWidget(CfgEntry* key, QWidget* widget, const QVariant& value)
+{
+ UNUSED(key);
+
+ QListWidget* list = dynamic_cast<QListWidget*>(widget);
+ QHash<QString,QListWidgetItem*> itemsByName;
+ for (int i = 0; i < list->count(); i++)
+ itemsByName[list->item(i)->text()] = list->item(i);
+
+ QHash<QString,QVariant> orderHash = value.toHash();
+
+ for (const QString& typeName : itemsByName.keys())
+ {
+ if (!orderHash.contains(typeName))
+ continue;
+
+ itemsByName[typeName]->setData(QListWidgetItem::UserType, orderHash[typeName]);
+ }
+}
+
+QVariant ListToStringListHash::getWidgetConfigValue(QWidget* widget, bool& ok)
+{
+ QListWidget* list = dynamic_cast<QListWidget*>(widget);
+ if (!list)
+ {
+ ok = false;
+ return QVariant();
+ }
+
+ QHash<QString,QVariant> orderHash;
+ for (int i = 0; i < list->count(); i++)
+ orderHash[list->item(i)->text()] = list->item(i)->data(QListWidgetItem::UserType);
+
+ ok = true;
+ return orderHash;
+}
+
+const char*ListToStringListHash::getModifiedNotifier() const
+{
+ return SIGNAL(itemChanged(QListWidgetItem*));
+}
+
+QString ListToStringListHash::getFilterString(QWidget* widget) const
+{
+ QListWidget* list = dynamic_cast<QListWidget*>(widget);
+ QStringList strList;
+ for (int i = 0; i < list->count(); i++)
+ strList += list->item(i)->text() + " " + list->item(i)->data(QListWidgetItem::UserType).toStringList().join(" ");
+
+ return strList.join(" ");
+}
diff --git a/SQLiteStudio3/guiSQLiteStudio/configwidgets/listtostringlisthash.h b/SQLiteStudio3/guiSQLiteStudio/configwidgets/listtostringlisthash.h
new file mode 100644
index 0000000..1f5d6fc
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/configwidgets/listtostringlisthash.h
@@ -0,0 +1,22 @@
+#ifndef LISTTOSTRINGLISTHASH_H
+#define LISTTOSTRINGLISTHASH_H
+
+#include "customconfigwidgetplugin.h"
+#include "plugins/genericplugin.h"
+#include "guiSQLiteStudio_global.h"
+
+class GUI_API_EXPORT ListToStringListHash: public GenericPlugin, public CustomConfigWidgetPlugin
+{
+ public:
+ ListToStringListHash(CfgEntry* key);
+ bool isConfigForWidget(CfgEntry* key, QWidget* widget);
+ void applyConfigToWidget(CfgEntry* key, QWidget* widget, const QVariant& value);
+ QVariant getWidgetConfigValue(QWidget* widget, bool& ok);
+ const char*getModifiedNotifier() const;
+ QString getFilterString(QWidget* widget) const;
+
+ private:
+ CfgEntry* assignedKey = nullptr;
+};
+
+#endif // LISTTOSTRINGLISTHASH_H
diff --git a/SQLiteStudio3/guiSQLiteStudio/configwidgets/styleconfigwidget.cpp b/SQLiteStudio3/guiSQLiteStudio/configwidgets/styleconfigwidget.cpp
new file mode 100644
index 0000000..a8d8b46
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/configwidgets/styleconfigwidget.cpp
@@ -0,0 +1,54 @@
+#include "styleconfigwidget.h"
+#include "uiconfig.h"
+#include "common/unused.h"
+#include "dialogs/configdialog.h"
+#include <QDebug>
+#include <QComboBox>
+
+StyleConfigWidget::StyleConfigWidget()
+{
+}
+
+bool StyleConfigWidget::isConfigForWidget(CfgEntry* key, QWidget* widget)
+{
+ UNUSED(widget);
+ return (key == &CFG_UI.General.Style);
+}
+
+void StyleConfigWidget::applyConfigToWidget(CfgEntry* key, QWidget* widget, const QVariant& value)
+{
+ UNUSED(key);
+
+ QComboBox* combo = qobject_cast<QComboBox*>(widget);
+
+ // QComboBox fails to findIndex() in case insensitive manner, so we will do it manually:
+ QStringList items;
+ for (int i = 0; i < combo->count(); i++)
+ items << combo->itemText(i).toLower();
+
+ int idx = items.indexOf(value.toString().toLower());
+ combo->setCurrentIndex(idx);
+}
+
+QVariant StyleConfigWidget::getWidgetConfigValue(QWidget* widget, bool& ok)
+{
+ QComboBox* combo = qobject_cast<QComboBox*>(widget);
+ if (!combo)
+ {
+ ok = false;
+ return QVariant();
+ }
+
+ ok = true;
+ return combo->currentText();
+}
+
+const char* StyleConfigWidget::getModifiedNotifier() const
+{
+ return SIGNAL(currentTextChanged(QString));
+}
+
+QString StyleConfigWidget::getFilterString(QWidget *widget) const
+{
+ return ConfigDialog::getFilterString(widget);
+}
diff --git a/SQLiteStudio3/guiSQLiteStudio/configwidgets/styleconfigwidget.h b/SQLiteStudio3/guiSQLiteStudio/configwidgets/styleconfigwidget.h
new file mode 100644
index 0000000..d3548af
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/configwidgets/styleconfigwidget.h
@@ -0,0 +1,20 @@
+#ifndef STYLECONFIGWIDGET_H
+#define STYLECONFIGWIDGET_H
+
+#include "plugins/genericplugin.h"
+#include "customconfigwidgetplugin.h"
+#include "guiSQLiteStudio_global.h"
+
+class GUI_API_EXPORT StyleConfigWidget : public GenericPlugin, public CustomConfigWidgetPlugin
+{
+ public:
+ StyleConfigWidget();
+
+ bool isConfigForWidget(CfgEntry* key, QWidget* widget);
+ void applyConfigToWidget(CfgEntry* key, QWidget* widget, const QVariant& value);
+ QVariant getWidgetConfigValue(QWidget* widget, bool& ok);
+ const char* getModifiedNotifier() const;
+ QString getFilterString(QWidget* widget) const;
+};
+
+#endif // STYLECONFIGWIDGET_H