From 22cddc9dfb6bb8effe77e2c9b4dc4d654f1c1fc6 Mon Sep 17 00:00:00 2001 From: Arno Date: Wed, 12 May 2010 15:23:29 +0200 Subject: Implemented "Open with" The contextmenu of Fileview got an "Open with" submenu containing all configured programs. Opening files does not depend on MIME-types. That means a movie can be opened with a pictureviewer and vice versa. --- filesystemwidget.cpp | 28 ++++++++++++++++++---------- shemov.cpp | 1 + 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index 6b1e1a8..d857407 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -396,11 +396,15 @@ void FilesystemWidget::playSelected(const QString &player){ } QPair data = programData("movieviewer", player); if(data.first.isEmpty()){ - QMessageBox::critical(this, tr("Error"), tr("No viedeo viewer configured.")); - return; + data = programData("pictureviewer", player); + if(data.first.isEmpty()){ + QString message = QString(tr("Cannot find program %1.")).arg(player); + QMessageBox::critical(this, tr("Error"), message); + return; + } } QString program = data.first; - QStringList programArgs = data.second; + QStringList programArgs(data.second); programArgs << files; QProcess::startDetached(program, programArgs); } @@ -470,15 +474,19 @@ QPair FilesystemWidget::programData(const QString &prefix, if(data.isEmpty()){ return QPair(); } - QString defaultProg = s.value(QString("%1/default").arg(section)).toString(); QHash programData; - if(!preferred.isEmpty() && data.keys().contains(preferred)){ - programData = data.value(preferred).toHash(); - }else if(data.keys().contains(defaultProg)){ - programData = data.value(defaultProg).toHash(); - }else{ - programData = data.begin().value().toHash(); + if(!preferred.isEmpty()){ + if(data.keys().contains(preferred)){ + programData = data.value(preferred).toHash(); + return qMakePair(programData.value("path").toString(), programData.value("args").toStringList()); + } + return QPair(); + } + QString defaultProg = s.value(QString("%1/default").arg(section)).toString(); + if(defaultProg.isEmpty()){ + return QPair(); } + programData = data.value(defaultProg).toHash(); return qMakePair(programData.value("path").toString(), programData.value("args").toStringList()); } diff --git a/shemov.cpp b/shemov.cpp index 4a6c94e..f7439e1 100644 --- a/shemov.cpp +++ b/shemov.cpp @@ -363,6 +363,7 @@ void SheMov::createActions(){ // misc mOpenWithGroup = new QActionGroup(this); mOpenWithMapper = new QSignalMapper(this); + connect(mOpenWithMapper, SIGNAL(mapped(QString)), mFSWidget, SLOT(playSelected(QString))); } void SheMov::createMenus(){ -- cgit v1.2.3-70-g09d2