mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
226 lines
5.8 KiB
C++
226 lines
5.8 KiB
C++
|
/* smplayer, GUI front-end for mplayer.
|
||
|
Copyright (C) 2006-2008 Ricardo Villalba <rvm@escomposlinux.org>
|
||
|
|
||
|
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
|
|
||
|
|
||
|
prefassociations.cpp
|
||
|
Handles file associations in Windows
|
||
|
Author: Florin Braghis (florin@libertv.ro)
|
||
|
*/
|
||
|
|
||
|
|
||
|
#include "prefassociations.h"
|
||
|
#include "images.h"
|
||
|
#include <QSettings>
|
||
|
#include <QApplication>
|
||
|
#include <QMessageBox>
|
||
|
#include "winfileassoc.h"
|
||
|
#include "extensions.h"
|
||
|
|
||
|
static Qt::CheckState CurItemCheckState = Qt::Unchecked;
|
||
|
|
||
|
|
||
|
PrefAssociations::PrefAssociations(QWidget * parent, Qt::WindowFlags f)
|
||
|
: PrefWidget(parent, f )
|
||
|
{
|
||
|
setupUi(this);
|
||
|
|
||
|
connect(selectAll, SIGNAL(clicked(bool)), this, SLOT(selectAllClicked(bool)));
|
||
|
connect(selectNone, SIGNAL(clicked(bool)), this, SLOT(selectNoneClicked(bool)));
|
||
|
connect(listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(listItemClicked(QListWidgetItem*)));
|
||
|
connect(listWidget, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(listItemPressed(QListWidgetItem*)));
|
||
|
|
||
|
#ifdef Q_OS_WIN
|
||
|
if (QSysInfo::WindowsVersion == QSysInfo::WV_VISTA)
|
||
|
{
|
||
|
//Hide Select None - One cannot restore an association in Vista. Go figure.
|
||
|
selectNone->hide();
|
||
|
//QPushButton* lpbButton = new QPushButton("Launch Program Defaults", this);
|
||
|
//hboxLayout->addWidget(lpbButton);
|
||
|
//connect(lpbButton, SIGNAL(clicked(bool)), this, SLOT(launchAppDefaults()));
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
Extensions e;
|
||
|
for (int n=0; n < e.multimedia().count(); n++) {
|
||
|
addItem( e.multimedia()[n] );
|
||
|
}
|
||
|
|
||
|
retranslateStrings();
|
||
|
}
|
||
|
|
||
|
PrefAssociations::~PrefAssociations()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void PrefAssociations::selectAllClicked(bool)
|
||
|
{
|
||
|
for (int k = 0; k < listWidget->count(); k++)
|
||
|
listWidget->item(k)->setCheckState(Qt::Checked);
|
||
|
listWidget->setFocus();
|
||
|
}
|
||
|
|
||
|
void PrefAssociations::selectNoneClicked(bool)
|
||
|
{
|
||
|
|
||
|
for (int k = 0; k < listWidget->count(); k++)
|
||
|
listWidget->item(k)->setCheckState(Qt::Unchecked);
|
||
|
listWidget->setFocus();
|
||
|
}
|
||
|
|
||
|
void PrefAssociations::listItemClicked(QListWidgetItem* item)
|
||
|
{
|
||
|
if (!(item->flags() & Qt::ItemIsEnabled))
|
||
|
return;
|
||
|
|
||
|
if (item->checkState() == CurItemCheckState)
|
||
|
{
|
||
|
//Clicked on the list item (not checkbox)
|
||
|
if (item->checkState() == Qt::Checked)
|
||
|
{
|
||
|
item->setCheckState(Qt::Unchecked);
|
||
|
}
|
||
|
else
|
||
|
item->setCheckState(Qt::Checked);
|
||
|
}
|
||
|
|
||
|
//else - clicked on the checkbox itself, do nothing
|
||
|
}
|
||
|
|
||
|
void PrefAssociations::listItemPressed(QListWidgetItem* item)
|
||
|
{
|
||
|
CurItemCheckState = item->checkState();
|
||
|
}
|
||
|
|
||
|
void PrefAssociations::addItem(QString label)
|
||
|
{
|
||
|
QListWidgetItem* item = new QListWidgetItem(listWidget);
|
||
|
item->setText(label);
|
||
|
}
|
||
|
|
||
|
void PrefAssociations::refreshList()
|
||
|
{
|
||
|
m_regExtensions.clear();
|
||
|
WinFileAssoc ().GetRegisteredExtensions(Extensions().multimedia(), m_regExtensions);
|
||
|
|
||
|
for (int k = 0; k < listWidget->count(); k++)
|
||
|
{
|
||
|
QListWidgetItem* pItem = 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.
|
||
|
#ifdef Q_OS_WIN
|
||
|
if (QSysInfo::WindowsVersion == QSysInfo::WV_VISTA) {
|
||
|
pItem->setFlags(0);
|
||
|
}
|
||
|
#endif
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
pItem->setCheckState(Qt::Unchecked);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void PrefAssociations::setData(Preferences * )
|
||
|
{
|
||
|
refreshList();
|
||
|
}
|
||
|
|
||
|
int PrefAssociations::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 PrefAssociations::getData(Preferences *)
|
||
|
{
|
||
|
QStringList extensions;
|
||
|
|
||
|
for (int k = 0; k < listWidget->count(); k++)
|
||
|
{
|
||
|
QListWidgetItem* pItem = listWidget->item(k);
|
||
|
if (pItem && pItem->checkState() == Qt::Checked)
|
||
|
extensions.append(pItem->text());
|
||
|
}
|
||
|
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
refreshList(); //Useless when OK is pressed... How to detect if apply or ok is pressed ?
|
||
|
}
|
||
|
|
||
|
QString PrefAssociations::sectionName() {
|
||
|
return tr("File Types");
|
||
|
}
|
||
|
|
||
|
QPixmap PrefAssociations::sectionIcon() {
|
||
|
return Images::icon("pref_associations");
|
||
|
}
|
||
|
|
||
|
void PrefAssociations::retranslateStrings() {
|
||
|
|
||
|
retranslateUi(this);
|
||
|
createHelp();
|
||
|
}
|
||
|
|
||
|
void PrefAssociations::createHelp() {
|
||
|
|
||
|
clearHelp();
|
||
|
|
||
|
setWhatsThis(selectAll, tr("Select all"),
|
||
|
tr("Check all file types in the list"));
|
||
|
|
||
|
setWhatsThis(selectNone, tr("Select none"),
|
||
|
tr("Uncheck all file types in the list"));
|
||
|
|
||
|
setWhatsThis(listWidget, tr("List of file types"),
|
||
|
tr("Check the media file extensions you would like SMPlayer to handle. "
|
||
|
"When you click Apply, the checked files will be associated with "
|
||
|
"SMPlayer. If you uncheck a media type, the file association will "
|
||
|
"be restored.") +
|
||
|
tr(" <b>Note:</b> (Restoration doesn't work on Windows Vista)."));
|
||
|
}
|
||
|
|
||
|
#include "moc_prefassociations.cpp"
|
||
|
|