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());
|
2019-10-02 14:20:06 +01:00
|
|
|
if(QString::compare(FS, "UDF", Qt::CaseInsensitive) == 0 || QString::compare(FS, "ISO9660", Qt::CaseInsensitive) == 0 || QString::compare(FS, "CDFS", Qt::CaseInsensitive) == 0)
|
2017-12-21 18:21:44 -05:00
|
|
|
{
|
|
|
|
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
|
|
|
}
|