diff options
| author | 2014-12-06 17:33:25 -0500 | |
|---|---|---|
| committer | 2014-12-06 17:33:25 -0500 | |
| commit | 7167ce41b61d2ba2cdb526777a4233eb84a3b66a (patch) | |
| tree | a35c14143716e1f2c98f808c81f89426045a946f /SQLiteStudio3/guiSQLiteStudio/configwidgets | |
Imported Upstream version 2.99.6upstream/2.99.6
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/configwidgets')
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 |
