aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/selectabledbmodel.cpp
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/selectabledbmodel.cpp
Imported Upstream version 2.99.6upstream/2.99.6
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/selectabledbmodel.cpp')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/selectabledbmodel.cpp109
1 files changed, 109 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/selectabledbmodel.cpp b/SQLiteStudio3/guiSQLiteStudio/selectabledbmodel.cpp
new file mode 100644
index 0000000..f19d52d
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/selectabledbmodel.cpp
@@ -0,0 +1,109 @@
+#include "selectabledbmodel.h"
+#include "dbtree/dbtreeitem.h"
+#include "dbtree/dbtreemodel.h"
+
+SelectableDbModel::SelectableDbModel(QObject* parent) :
+ QSortFilterProxyModel(parent)
+{
+}
+
+QVariant SelectableDbModel::data(const QModelIndex& index, int role) const
+{
+ if (role != Qt::CheckStateRole)
+ return QSortFilterProxyModel::data(index, role);
+
+ DbTreeItem* item = getItemForProxyIndex(index);
+ if (!item)
+ return QSortFilterProxyModel::data(index, role);
+
+ DbTreeItem::Type type = item->getType();
+ if (type != DbTreeItem::Type::DB)
+ return QSortFilterProxyModel::data(index, role);
+
+ return checkedDatabases.contains(item->text(), Qt::CaseInsensitive) ? Qt::Checked : Qt::Unchecked;
+}
+
+bool SelectableDbModel::setData(const QModelIndex& index, const QVariant& value, int role)
+{
+ if (role != Qt::CheckStateRole)
+ return QSortFilterProxyModel::setData(index, value, role);
+
+ DbTreeItem* item = getItemForProxyIndex(index);
+ if (!item)
+ return QSortFilterProxyModel::setData(index, value, role);
+
+ DbTreeItem::Type type = item->getType();
+ if (type != DbTreeItem::Type::DB)
+ return QSortFilterProxyModel::setData(index, value, role);
+
+ if (value.toBool())
+ checkedDatabases << item->text();
+ else
+ checkedDatabases.removeOne(item->text());
+
+ emit dataChanged(index, index, {Qt::CheckStateRole});
+
+ return true;
+}
+
+Qt::ItemFlags SelectableDbModel::flags(const QModelIndex& index) const
+{
+ Qt::ItemFlags itemFlags = QSortFilterProxyModel::flags(index);
+
+ DbTreeItem* item = getItemForProxyIndex(index);
+ if (!item)
+ return itemFlags;
+
+ DbTreeItem::Type type = item->getType();
+ if (item->getDb() && item->getDb()->getVersion() == disabledVersion)
+ itemFlags ^= Qt::ItemIsEnabled;
+ else if (type == DbTreeItem::Type::DB)
+ itemFlags |= Qt::ItemIsUserCheckable;
+
+ return itemFlags;
+}
+
+void SelectableDbModel::setDatabases(const QStringList& databases)
+{
+ beginResetModel();
+ checkedDatabases = databases;
+ endResetModel();
+}
+
+QStringList SelectableDbModel::getDatabases() const
+{
+ return checkedDatabases;
+}
+
+bool SelectableDbModel::filterAcceptsRow(int srcRow, const QModelIndex& srcParent) const
+{
+ QModelIndex idx = sourceModel()->index(srcRow, 0, srcParent);
+ DbTreeItem* item = dynamic_cast<DbTreeItem*>(dynamic_cast<DbTreeModel*>(sourceModel())->itemFromIndex(idx));
+ switch (item->getType())
+ {
+ case DbTreeItem::Type::DIR:
+ case DbTreeItem::Type::DB:
+ return true;
+ default:
+ return false;
+ }
+ return false;
+}
+
+DbTreeItem* SelectableDbModel::getItemForProxyIndex(const QModelIndex& index) const
+{
+ QModelIndex srcIdx = mapToSource(index);
+ DbTreeItem* item = dynamic_cast<DbTreeItem*>(dynamic_cast<DbTreeModel*>(sourceModel())->itemFromIndex(srcIdx));
+ return item;
+}
+int SelectableDbModel::getDisabledVersion() const
+{
+ return disabledVersion;
+}
+
+void SelectableDbModel::setDisabledVersion(int value)
+{
+ disabledVersion = value;
+}
+
+