GH-922 improve version select dialogs

This commit is contained in:
Petr Mrázek
2015-05-02 23:42:33 +02:00
parent 4fc4a17256
commit 5779ffd664
12 changed files with 168 additions and 22 deletions

View File

@ -21,8 +21,6 @@
#include "ui_CopyInstanceDialog.h"
#include "Platform.h"
#include "dialogs/VersionSelectDialog.h"
#include "dialogs/ProgressDialog.h"
#include "dialogs/IconPickerDialog.h"
#include "BaseVersion.h"

View File

@ -19,6 +19,7 @@
#include <QHeaderView>
#include <dialogs/ProgressDialog.h>
#include "CustomMessageBox.h"
#include "Platform.h"
#include <BaseVersion.h>
@ -46,6 +47,7 @@ VersionSelectDialog::VersionSelectDialog(BaseVersionList *vlist, QString title,
ui->listView->setModel(m_proxyModel);
ui->listView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
ui->listView->header()->setSectionResizeMode(resizeOnColumn, QHeaderView::Stretch);
ui->sneakyProgressBar->setHidden(true);
if (!cancelable)
{
@ -58,6 +60,11 @@ void VersionSelectDialog::setEmptyString(QString emptyString)
ui->listView->setEmptyString(emptyString);
}
void VersionSelectDialog::setEmptyErrorString(QString emptyErrorString)
{
ui->listView->setEmptyErrorString(emptyErrorString);
}
VersionSelectDialog::~VersionSelectDialog()
{
delete ui;
@ -77,26 +84,89 @@ int VersionSelectDialog::exec()
{
loadList();
}
else
{
if (m_proxyModel->rowCount() == 0)
{
ui->listView->setEmptyMode(VersionListView::String);
}
preselect();
}
return QDialog::exec();
}
void VersionSelectDialog::closeEvent(QCloseEvent * event)
{
if(loadTask)
{
loadTask->abort();
loadTask->deleteLater();
loadTask = nullptr;
}
QDialog::closeEvent(event);
}
void VersionSelectDialog::loadList()
{
if(loadTask)
{
return;
}
loadTask = m_vlist->getLoadTask();
if (!loadTask)
{
return;
}
connect(loadTask, &Task::finished, this, &VersionSelectDialog::onTaskFinished);
connect(loadTask, &Task::progress, this, &VersionSelectDialog::changeProgress);
loadTask->start();
ui->sneakyProgressBar->setHidden(false);
}
void VersionSelectDialog::onTaskFinished()
{
if (!loadTask->successful())
{
CustomMessageBox::selectable(this, tr("Error"),
tr("List update failed:\n%1").arg(loadTask->failReason()),
QMessageBox::Warning)->show();
if (m_proxyModel->rowCount() == 0)
{
ui->listView->setEmptyMode(VersionListView::ErrorString);
}
}
else if (m_proxyModel->rowCount() == 0)
{
ui->listView->setEmptyMode(VersionListView::String);
}
ui->sneakyProgressBar->setHidden(true);
loadTask->deleteLater();
loadTask = nullptr;
preselect();
}
void VersionSelectDialog::changeProgress(qint64 current, qint64 total)
{
ui->sneakyProgressBar->setMaximum(total);
ui->sneakyProgressBar->setValue(current);
}
void VersionSelectDialog::preselect()
{
if(preselectedAlready)
return;
preselectedAlready = true;
selectRecommended();
}
void VersionSelectDialog::selectRecommended()
{
auto idx = m_proxyModel->getRecommended();
if(idx.isValid())
{
ui->listView->selectionModel()->setCurrentIndex(idx,QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);
ui->listView->scrollTo(idx, QAbstractItemView::PositionAtCenter);
}
return QDialog::exec();
}
void VersionSelectDialog::loadList()
{
Task *loadTask = m_vlist->getLoadTask();
if (!loadTask)
{
return;
}
ProgressDialog *taskDlg = new ProgressDialog(this);
loadTask->setParent(taskDlg);
taskDlg->exec(loadTask);
delete taskDlg;
}
BaseVersionPtr VersionSelectDialog::selectedVersion() const

View File

@ -46,19 +46,34 @@ public:
void setFuzzyFilter(BaseVersionList::ModelRoles role, QString filter);
void setExactFilter(BaseVersionList::ModelRoles role, QString filter);
void setEmptyString(QString emptyString);
void setEmptyErrorString(QString emptyErrorString);
void setResizeOn(int column);
void setUseLatest(const bool useLatest);
protected:
virtual void closeEvent ( QCloseEvent* );
private
slots:
void on_refreshButton_clicked();
void onTaskFinished();
void changeProgress(qint64 current, qint64 total);
private:
Ui::VersionSelectDialog *ui;
void preselect();
void selectRecommended();
BaseVersionList *m_vlist;
private:
Ui::VersionSelectDialog *ui = nullptr;
VersionProxyModel *m_proxyModel;
BaseVersionList *m_vlist = nullptr;
VersionProxyModel *m_proxyModel = nullptr;
int resizeOnColumn = 0;
Task * loadTask = nullptr;
bool preselectedAlready = false;
};

View File

@ -39,6 +39,16 @@
</attribute>
</widget>
</item>
<item>
<widget class="QProgressBar" name="sneakyProgressBar">
<property name="value">
<number>24</number>
</property>
<property name="format">
<string notr="true">%p%</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>