diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2014-03-09 16:35:15 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2014-03-09 16:35:15 +0000 |
| commit | d1a426d6658c7e674afb68da5a3c644b6b67bcc1 (patch) | |
| tree | 4ea3e477f055e5b84540620f4a45008545da9e76 /src/qmmpui/winfileassocpage.cpp | |
| parent | 358003e84b713bf7c99d57f13e0eda0a02c97678 (diff) | |
| download | qmmp-d1a426d6658c7e674afb68da5a3c644b6b67bcc1.tar.gz qmmp-d1a426d6658c7e674afb68da5a3c644b6b67bcc1.tar.bz2 qmmp-d1a426d6658c7e674afb68da5a3c644b6b67bcc1.zip | |
enabled 'file types' page, removed unused code
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4140 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui/winfileassocpage.cpp')
| -rw-r--r-- | src/qmmpui/winfileassocpage.cpp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/src/qmmpui/winfileassocpage.cpp b/src/qmmpui/winfileassocpage.cpp new file mode 100644 index 000000000..a409472fc --- /dev/null +++ b/src/qmmpui/winfileassocpage.cpp @@ -0,0 +1,151 @@ +/*************************************************************************** + * Based on smplayer - GUI front-end for mplayer * + * * + * Copyright (C) 2006-2014 Ricardo Villalba <rvm@users.sourceforge.net> * + * Copyright (C) 2014 Ilya Kotov forkotov02@hotmail.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(); + } + + foreach (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(0); + } + } + else + { + pItem->setCheckState(Qt::Unchecked); + } + } + } +} + +int WinFileAssocPage::ProcessAssociations(QStringList& current, QStringList& old) +{ + WinFileAssoc RegAssoc; + + QStringList toRestore; + + //Restore unselected associations + foreach(const QString& ext, old) + { + if (!current.contains(ext)) + toRestore.append(ext); + } + + RegAssoc.RestoreFileAssociations(toRestore); + 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, m_regExtensions); + + 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.")); +} |
