blob: 4f0484b0ea64bc7fc30e71c166e9a42047358c9f (
plain) (
tree)
|
|
/***************************************************************************
* Based on smplayer - GUI front-end for mplayer *
* *
* Copyright (C) 2006-2014 Ricardo Villalba <rvm@users.sourceforge.net> *
* Copyright (C) 2014-2020 Ilya Kotov forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#include <QSettings>
#include <QApplication>
#include <QMessageBox>
#include <qmmp/metadatamanager.h>
#include "ui_winfileassocpage.h"
#include "winfileassocpage_p.h"
#include "winfileassoc.h"
WinFileAssocPage::WinFileAssocPage(QWidget *parent): QWidget(parent)
{
m_ui = new Ui::WinFileAssocPage;
m_ui->setupUi(this);
if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA)
{
//Hide Select None - One cannot restore an association in Vista. Go figure.
m_ui->selectNone->hide();
}
for(QString ext : MetaDataManager::instance()->nameFilters())
{
ext.remove("*.");
m_ui->listWidget->addItem(ext);
m_extensions.append(ext);
}
loadAssociations();
createHelp();
}
WinFileAssocPage::~WinFileAssocPage()
{
saveAssociations();
}
void WinFileAssocPage::on_selectAll_clicked()
{
for (int k = 0; k < m_ui->listWidget->count(); k++)
m_ui->listWidget->item(k)->setCheckState(Qt::Checked);
m_ui->listWidget->setFocus();
}
void WinFileAssocPage::on_selectNone_clicked()
{
for (int k = 0; k < m_ui->listWidget->count(); k++)
m_ui->listWidget->item(k)->setCheckState(Qt::Unchecked);
m_ui->listWidget->setFocus();
}
void WinFileAssocPage::loadAssociations()
{
m_regExtensions.clear();
WinFileAssoc ().GetRegisteredExtensions(m_extensions, m_regExtensions);
for (int k = 0; k < m_ui->listWidget->count(); k++)
{
QListWidgetItem* pItem = m_ui->listWidget->item(k);
if (pItem)
{
pItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
if (m_regExtensions.contains(pItem->text()))
{
pItem->setCheckState(Qt::Checked);
//Don't allow de-selection in windows VISTA if extension is registered.
//VISTA doesn't seem to support extension 'restoration' in the API.
if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA)
{
pItem->setFlags(Qt::NoItemFlags);
}
}
else
{
pItem->setCheckState(Qt::Unchecked);
}
}
}
}
int WinFileAssocPage::ProcessAssociations(const QStringList ¤t)
{
WinFileAssoc RegAssoc;
return RegAssoc.CreateFileAssociations(current);
}
void WinFileAssocPage::saveAssociations()
{
QStringList extensions;
for (int k = 0; k < m_ui->listWidget->count(); k++)
{
QListWidgetItem* pItem = m_ui->listWidget->item(k);
if (pItem && pItem->checkState() == Qt::Checked)
extensions.append(pItem->text());
}
if(extensions == m_regExtensions)
return;
int processed = ProcessAssociations(extensions);
if (processed != extensions.count())
{
QMessageBox::warning(this, tr("Warning"),
tr("Not all files could be associated. Please check your "
"security permissions and retry."), QMessageBox::Ok);
}
}
void WinFileAssocPage::createHelp()
{
m_ui->selectAll->setToolTip(tr("Check all file types in the list"));
m_ui->selectNone->setToolTip(tr("Uncheck all file types in the list"));
m_ui->listWidget->setToolTip(tr("Check the media file extensions you would like Qmmp to handle. "
"When you click Apply, the checked files will be associated with "
"Qmmp. If you uncheck a media type, the file association will "
"be restored.") + "<br>" +
tr("<b>Note:</b> Restoration doesn't work on Windows Vista/7."));
}
|