bar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
bar->setIconSize(QSize(48,48));
QAction*a=mplayaction=bar->addAction(QIcon(":/play-dvd.png"),"&Play",this,SLOT(playMedia()));
- a->setShortcut(QKeySequence("Alt+P"));
a->setToolTip("Play Media: Alt-P\nPlay without full-screen: Alt-Shift-P");
- addAction(a=new QAction(this));
- a->setShortcut(QKeySequence("Alt+Shift+P"));
- connect(a,&QAction::triggered,this,[this](){this->playMedia(false);});
+ QMenu*m=new QMenu;
+ a->setMenu(m);
+ a=m->addAction("Play with Xine",this,SLOT(playMedia()),QKeySequence("Alt+P"));
+ a=m->addAction("Play with Xine, no FullScreen",this,[this](){this->playMedia(false);},QKeySequence("Alt+Shift+P"));
+ a=m->addAction("Play with VLC",this,[this](){this->playMedia(true,Player::Vlc);},QKeySequence("Alt+V"));
+ a=m->addAction("Play with VLC, no FullScreen",this,[this](){this->playMedia(false,Player::Vlc);},QKeySequence("Alt+Shift+V"));
a=meditaction=bar->addAction(QIcon(":/configure.png"),"&Edit Description",this,SLOT(editMedia()));
a->setShortcut(QKeySequence("Alt+E"));
a->setToolTip("Edit Media Description: Alt-E");
csplit->setStretchFactor(0,15);
csplit->addWidget(mText=new QTextBrowser);
mText->setFrameShape(QFrame::StyledPanel);
+ mText->setLineWrapMode(QTextEdit::WidgetWidth);
csplit->setStretchFactor(1,3);
split->setSizes(QList<int>()<<100<<500);
if(std::find_if(mvolumes.constBegin(),mvolumes.constEnd(),[&id](const Volume&v){return v.volumeId()==id;})==mvolumes.constEnd())
mvolumes<<Volume(id);
//sort
- qSort(mvolumes.begin(),mvolumes.end(),[](const Volume&a,const Volume&b){
+ std::sort(mvolumes.begin(),mvolumes.end(),[](const Volume&a,const Volume&b){
if(a.isCached()==b.isCached())return a.label()<b.label();
return b.isCached();
});
}
-void Kino::playMedia(bool full)
+void Kino::playMedia(bool full,Player player)
{
const QString p=getCurrent();
//play
- if(play(p,full)){
+ if(play(p,full,player)){
//remember
if(mrecent.contains(p))
mrecent.removeAll(p);
}
}
-bool Kino::play(QString p,bool f)
+bool Kino::play(QString p,bool f,Player player)
{
auto &vol=getVolume(p);
if(vol.volumeId().isNull())return false;
auto &ent=getEntry(vol,p);
if(!ent.isPlayable())return false;
//construct MRL
- QString mrl=QString("dvd:%1/%2").arg(vol.rootdir()).arg(ent.directory());
+ QString mrl=QString("dvd://%1/%2").arg(vol.rootdir()).arg(ent.directory());
//start; TODO: keep track of running processes
QStringList args;
- if(f)args<<"-f";
+ if(f){
+ if(player==Player::Xine)args<<"-f";
+ else if(player==Player::Vlc)args<<"--fullscreen";
+ else qDebug()<<"OOOOPS! Unknown Player type!";
+ }
args<<mrl;
- QProcess::startDetached("xine",args);
+ QProcess::startDetached(player==Player::Xine?"xine":"vlc",args);
return true;
}
class Kino:public QWidget
{
Q_OBJECT
+ enum class Player {Xine,Vlc,Default=Xine};
public:
///instantiates main window, loads old state
- explicit Kino(QWidget* parent = 0, Qt::WindowFlags f = 0);
+ explicit Kino(QWidget* parent = 0, Qt::WindowFlags f = Qt::WindowFlags());
///deletes main window, saves state
~Kino();
private slots:
///edit media/path properties
void editMedia();
///play media via play button
- void playMedia(bool full=true);
+ void playMedia(bool full=true,Player p=Player::Default);
///goto recently played disc
void gotoRecent(QString id=QString());
///called when selection changes
void sync();
///helper: plays media
- bool play(QString,bool);
+ bool play(QString,bool,Player p);
QStandardItemModel *mModel=0;
QLabel *mPicture=0;