Fixed the version combobox

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97 2023-10-20 00:44:36 +03:00
parent 55946c8923
commit 6883c19579
No known key found for this signature in database
GPG Key ID: 55EF5DA53DB36318
2 changed files with 28 additions and 11 deletions

View File

@ -39,17 +39,17 @@ class CheckComboModel : public QIdentityProxyModel {
virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const
{
if (role == Qt::CheckStateRole) {
auto txt = QIdentityProxyModel::data(index, BaseVersionList::VersionIdRole).toString();
auto txt = QIdentityProxyModel::data(index, Qt::DisplayRole).toString();
return checked.contains(txt) ? Qt::Checked : Qt::Unchecked;
}
if (role == Qt::DisplayRole)
return QIdentityProxyModel::data(index, BaseVersionList::VersionIdRole);
return QIdentityProxyModel::data(index, Qt::DisplayRole);
return {};
}
virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole)
{
if (role == Qt::CheckStateRole) {
auto txt = QIdentityProxyModel::data(index, BaseVersionList::VersionIdRole).toString();
auto txt = QIdentityProxyModel::data(index, Qt::DisplayRole).toString();
if (checked.contains(txt)) {
checked.removeOne(txt);
} else {
@ -72,11 +72,10 @@ class CheckComboModel : public QIdentityProxyModel {
CheckComboBox::CheckComboBox(QWidget* parent) : QComboBox(parent), m_separator(",")
{
// read-only contents
// QLineEdit* lineEdit = new QLineEdit(this);
// lineEdit->setReadOnly(false);
// setLineEdit(lineEdit);
// lineEdit->disconnect(this);
QLineEdit* lineEdit = new QLineEdit(this);
lineEdit->setReadOnly(false);
setLineEdit(lineEdit);
lineEdit->disconnect(this);
setInsertPolicy(QComboBox::NoInsert);
view()->installEventFilter(this);
@ -150,7 +149,6 @@ bool CheckComboBox::eventFilter(QObject* receiver, QEvent* event)
showPopup();
return true;
} else if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Escape) {
// it is important to call QComboBox implementation
QComboBox::hidePopup();
return (keyEvent->key() != Qt::Key_Escape);
}

View File

@ -14,6 +14,20 @@ unique_qobject_ptr<ModFilterWidget> ModFilterWidget::create(MinecraftInstance* i
return unique_qobject_ptr<ModFilterWidget>(new ModFilterWidget(instance, parent));
}
class VersionBasicModel : public QIdentityProxyModel {
Q_OBJECT
public:
explicit VersionBasicModel(QObject* parent = nullptr) : QIdentityProxyModel(parent) {}
virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override
{
if (role == Qt::DisplayRole)
return QIdentityProxyModel::data(index, BaseVersionList::VersionIdRole);
return {};
}
};
ModFilterWidget::ModFilterWidget(MinecraftInstance* instance, QWidget* parent)
: QTabWidget(parent), ui(new Ui::ModFilterWidget), m_instance(instance), m_filter(new Filter())
{
@ -21,7 +35,10 @@ ModFilterWidget::ModFilterWidget(MinecraftInstance* instance, QWidget* parent)
m_versions_proxy = new VersionProxyModel(this);
ui->versionsCb->setModel(m_versions_proxy);
auto proxy = new VersionBasicModel(this);
proxy->setSourceModel(m_versions_proxy);
ui->versionsCb->setModel(proxy);
ui->versionsCb->setSeparator("| ");
m_versions_proxy->setFilter(BaseVersionList::TypeRole, new RegexpFilter("(release)", false));
@ -178,3 +195,5 @@ void ModFilterWidget::onHideInstalledFilterChanged()
else
emit filterUnchanged();
}
#include "ModFilterWidget.moc"