Allow users to filter out MCNostalgia and Snapshots from the version list.

Resolves JIRA issue MMC-9:
	https://jira.forkk.net/browse/MMC-9
This commit is contained in:
Andrew 2013-05-06 12:48:01 -05:00
parent 857a4e4dbe
commit 74133bb172
6 changed files with 72 additions and 22 deletions

View File

@ -18,6 +18,8 @@
#include <QHeaderView>
#include <QDebug>
#include <gui/taskdialog.h>
#include <instversionlist.h>
@ -31,9 +33,18 @@ VersionSelectDialog::VersionSelectDialog(InstVersionList *vlist, QWidget *parent
ui->setupUi(this);
m_vlist = vlist;
ui->listView->setModel(m_vlist);
m_proxyModel = new QSortFilterProxyModel(this);
m_proxyModel->setSourceModel(vlist);
ui->listView->setModel(m_proxyModel);
ui->listView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
ui->listView->header()->setSectionResizeMode(0, QHeaderView::Stretch);
connect(ui->filterSnapshotsCheckbox, SIGNAL(clicked()), SLOT(updateFilterState()));
connect(ui->filterMCNostalgiaCheckbox, SIGNAL(clicked()), SLOT(updateFilterState()));
updateFilterState();
}
VersionSelectDialog::~VersionSelectDialog()
@ -60,13 +71,32 @@ void VersionSelectDialog::loadList()
const InstVersion *VersionSelectDialog::selectedVersion() const
{
const InstVersion *versionPtr = (const InstVersion *)
m_vlist->data(ui->listView->selectionModel()->currentIndex(),
InstVersionList::VersionPointerRole).value<void *>();
m_proxyModel->data(ui->listView->selectionModel()->currentIndex(),
InstVersionList::VersionPointerRole).value<void *>();
return versionPtr;
}
void VersionSelectDialog::on_refreshButton_clicked()
{
loadList();
loadList();
}
void VersionSelectDialog::updateFilterState()
{
m_proxyModel->setFilterKeyColumn(InstVersionList::TypeColumn);
QStringList filteredTypes;
if (!ui->filterSnapshotsCheckbox->isChecked())
filteredTypes += "Snapshot";
if (!ui->filterMCNostalgiaCheckbox->isChecked())
filteredTypes += "MCNostalgia";
QString regexStr = "^.*$";
if (filteredTypes.length() > 0)
regexStr = QString("^((?!%1).)*$").arg(filteredTypes.join('|'));
qDebug() << "Filter:" << regexStr;
m_proxyModel->setFilterRegExp(regexStr);
}

View File

@ -18,6 +18,8 @@
#include <QDialog>
#include <QSortFilterProxyModel>
class InstVersionList;
class InstVersion;
@ -44,10 +46,14 @@ public:
private slots:
void on_refreshButton_clicked();
void updateFilterState();
private:
Ui::VersionSelectDialog *ui;
InstVersionList *m_vlist;
QSortFilterProxyModel *m_proxyModel;
};
#endif // VERSIONSELECTDIALOG_H

View File

@ -36,6 +36,24 @@
</attribute>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="filterCheckboxLayout1">
<item>
<widget class="QCheckBox" name="filterSnapshotsCheckbox">
<property name="text">
<string>Show &amp;snapshots?</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="filterMCNostalgiaCheckbox">
<property name="text">
<string>Show MC&amp;Nostalgia?</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>

View File

@ -46,6 +46,18 @@ public:
VersionPointerRole = 0x34B1CB48
};
enum VListColumns
{
// First column - Name
NameColumn = 0,
// Second column - Type
TypeColumn,
// Third column - Timestamp
TimeColumn
};
explicit InstVersionList(QObject *parent = 0);
/*!

View File

@ -39,22 +39,6 @@ const InstVersion *InstVersionList::getLatestStable()
return at(0);
}
// Column Enum
enum VListColumns
{
// First column - Name
NameColumn = 0,
// Second column - Type
TypeColumn,
// Third column - Timestamp
TimeColumn,
// Column count
ColCount
};
QVariant InstVersionList::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
@ -141,5 +125,5 @@ int InstVersionList::rowCount(const QModelIndex &parent) const
int InstVersionList::columnCount(const QModelIndex &parent) const
{
return ColCount;
return 2;
}

View File

@ -63,7 +63,7 @@ QString MinecraftVersion::typeName() const
switch (versionType())
{
case OldSnapshot:
return "Old Snapshot";
return "Snapshot";
case Stable:
return "Stable";