Play-/Source/ui_qt/vfsdiscselectordialog.cpp

146 lines
3.6 KiB
C++
Raw Normal View History

2016-09-06 00:03:02 +01:00
#include "vfsdiscselectordialog.h"
#include "ui_vfsdiscselectordialog.h"
#include <QFileDialog>
#include <QMessageBox>
2018-09-24 13:01:30 -04:00
#include "QStringUtils.h"
2016-09-06 00:03:02 +01:00
2018-09-24 13:01:30 -04:00
VFSDiscSelectorDialog::VFSDiscSelectorDialog(boost::filesystem::path path, CCdrom0Device::BINDINGTYPE m_nBindingType, QWidget* parent)
2017-12-21 18:21:44 -05:00
: QDialog(parent)
, ui(new Ui::VFSDiscSelectorDialog)
2018-09-25 14:21:39 -04:00
, m_path(path)
2016-09-06 00:03:02 +01:00
{
2017-12-21 18:21:44 -05:00
ui->setupUi(this);
2016-09-06 00:03:02 +01:00
2017-12-21 18:21:44 -05:00
Refresh_disc_drive();
if(m_nBindingType == CCdrom0Device::BINDING_IMAGE)
{
2018-09-24 13:01:30 -04:00
ui->lineEdit->setText(PathToQString(m_path));
2017-12-21 18:21:44 -05:00
on_disc_image_radioButton_clicked();
ui->disc_image_radioButton->setChecked(true);
}
else
{
on_cd_device_radioButton_clicked();
ui->cd_device_radioButton->setChecked(true);
}
2016-09-06 00:03:02 +01:00
}
VFSDiscSelectorDialog::~VFSDiscSelectorDialog()
{
2017-12-21 18:21:44 -05:00
delete ui;
2016-09-06 00:03:02 +01:00
}
void VFSDiscSelectorDialog::on_iso_browse_button_clicked()
{
2017-12-21 18:21:44 -05:00
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::ExistingFile);
dialog.setNameFilter(tr("All supported types(*.iso *.bin *.isz *.cso);;UltraISO Compressed Disk Images (*.isz);;CISO Compressed Disk Images (*.cso);;All files (*.*)"));
if(dialog.exec())
{
2018-09-24 13:01:30 -04:00
m_path = QStringToPath(dialog.selectedFiles().first());
ui->lineEdit->setText(PathToQString(m_path));
2017-12-21 18:21:44 -05:00
}
2016-09-06 00:03:02 +01:00
}
void VFSDiscSelectorDialog::on_refresh_disc_drive_button_clicked()
{
2017-12-21 18:21:44 -05:00
Refresh_disc_drive();
2016-09-06 00:03:02 +01:00
}
2016-08-10 16:42:37 +01:00
void VFSDiscSelectorDialog::Refresh_disc_drive()
2016-09-06 00:03:02 +01:00
{
2017-12-21 18:21:44 -05:00
m_discInfo.clear();
ui->comboBox->clear();
foreach(const QStorageInfo& storage, QStorageInfo::mountedVolumes())
{
if(storage.isValid() && storage.isReady())
{
QString FS(storage.fileSystemType());
if(QString::compare(FS, "UDF", Qt::CaseInsensitive) == 0 || QString::compare(FS, "ISO9660", Qt::CaseInsensitive) == 0)
{
QString device(storage.device());
QString name;
if(!storage.name().isNull())
{
name = storage.name();
}
else
{
name = "Unknown";
}
QString item("%1 (%2)");
ui->comboBox->addItem(item.arg(device).arg(name));
m_discInfo.append(storage);
}
}
}
ui->comboBox->setEnabled(!m_discInfo.isEmpty());
{
2018-09-24 13:01:30 -04:00
auto pathString = PathToQString(m_path);
if(
2018-09-25 14:21:39 -04:00
pathString.startsWith("////", Qt::CaseInsensitive) ||
pathString.startsWith("/dev/", Qt::CaseInsensitive))
2017-12-21 18:21:44 -05:00
{
2018-09-24 13:01:30 -04:00
for(int i = 0; i < m_discInfo.size(); i++)
2017-12-21 18:21:44 -05:00
{
2018-09-24 13:01:30 -04:00
QString device(m_discInfo.at(i).device());
if(QString::compare(device, pathString, Qt::CaseInsensitive) == 0)
{
ui->comboBox->setCurrentIndex(i);
break;
}
2017-12-21 18:21:44 -05:00
}
}
}
2016-09-06 00:03:02 +01:00
}
void VFSDiscSelectorDialog::accept()
{
2017-12-21 18:21:44 -05:00
if(ui->disc_image_radioButton->isChecked())
{
if(!ui->lineEdit->text().isEmpty())
{
emit onFinish(ui->lineEdit->text(), CCdrom0Device::BINDING_IMAGE);
return QDialog::accept();
}
}
else
{
if(ui->comboBox->currentIndex() > -1)
{
emit onFinish(QString(m_discInfo.at(ui->comboBox->currentIndex()).device()), CCdrom0Device::BINDING_PHYSICAL);
return QDialog::accept();
}
}
QMessageBox messageBox;
messageBox.critical(this, "Error", "Invalid selection, please try again.");
messageBox.show();
2016-09-06 00:03:02 +01:00
}
2017-12-21 18:21:44 -05:00
2016-09-06 00:03:02 +01:00
void VFSDiscSelectorDialog::on_comboBox_currentIndexChanged(int index)
{
2017-12-21 18:21:44 -05:00
if(m_discInfo.size() > 0)
{
2018-09-24 13:01:30 -04:00
m_path = QStringToPath(m_discInfo.at(index).device());
2017-12-21 18:21:44 -05:00
}
2016-09-06 00:03:02 +01:00
}
void VFSDiscSelectorDialog::on_disc_image_radioButton_clicked()
{
2017-12-21 18:21:44 -05:00
ui->lineEdit->setEnabled(true);
ui->iso_browse_button->setEnabled(true);
2016-09-06 00:03:02 +01:00
2017-12-21 18:21:44 -05:00
ui->comboBox->setEnabled(false);
ui->refresh_disc_drive_button->setEnabled(false);
2016-09-06 00:03:02 +01:00
}
void VFSDiscSelectorDialog::on_cd_device_radioButton_clicked()
{
2017-12-21 18:21:44 -05:00
ui->comboBox->setEnabled(!m_discInfo.isEmpty());
ui->refresh_disc_drive_button->setEnabled(true);
2016-09-06 00:03:02 +01:00
2017-12-21 18:21:44 -05:00
ui->lineEdit->setEnabled(false);
ui->iso_browse_button->setEnabled(false);
2016-09-06 00:03:02 +01:00
}