--- /dev/null
+/*****************************************************************************
+ * openurl.cpp: Open a MRL or clipboard content
+ *****************************************************************************
+ * Copyright © 2009 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Jean-Philippe André <jpeg@videolan.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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "dialogs/openurl.hpp"
+#include "util/customwidgets.hpp"
+
+#include <QPushButton>
+#include <QDialogButtonBox>
+#include <QApplication>
+#include <QClipboard>
+#include <QMimeData>
+#include <QList>
+#include <QUrl>
+#include <QFile>
+#include <QLabel>
+
+OpenUrlDialog *OpenUrlDialog::instance = NULL;
+
+OpenUrlDialog* OpenUrlDialog::getInstance( QWidget *parent,
+ intf_thread_t *p_intf,
+ bool bClipboard )
+{
+ /* Creation */
+ if( !instance )
+ instance = new OpenUrlDialog( parent, p_intf, bClipboard );
+ else
+ instance->bClipboard = bClipboard;
+ return instance;
+}
+
+OpenUrlDialog::OpenUrlDialog( QWidget *parent,
+ intf_thread_t *_p_intf,
+ bool bClipboard ) : QVLCDialog( parent, _p_intf )
+{
+ this->bClipboard = bClipboard;
+ this->setWindowTitle( qtr( "Open URL" ) );
+
+ /* Buttons */
+ QPushButton *but;
+
+ QDialogButtonBox *box = new QDialogButtonBox( this );
+ but = box->addButton( QDialogButtonBox::Ok );
+ CONNECT( but, clicked(), this, play() );
+ but = box->addButton( QDialogButtonBox::Cancel );
+ but = box->addButton( qtr( "&Enqueue" ), QDialogButtonBox::AcceptRole );
+ CONNECT( but, clicked(), this, enqueue() );
+
+ CONNECT( box, rejected(), this, reject() );
+
+ /* Info label and line edit */
+ edit = new ClickLineEdit( qtr( "Enter URL here..." ), this );
+
+ QLabel *info = new QLabel( qtr( "Please enter the URL or path "
+ "to the media you want to play"),
+ this );
+
+ this->setToolTip( qtr( "If your clipboard contains a valid URL\n"
+ "or the path to a file on your computer,\n"
+ "it will be automatically selected." ) );
+
+ /* Layout */
+ QVBoxLayout *vlay = new QVBoxLayout( this );
+
+ vlay->addWidget( info );
+ vlay->addWidget( edit );
+ vlay->addWidget( box );
+}
+
+void OpenUrlDialog::enqueue()
+{
+ bShouldEnqueue = true;
+ lastUrl = edit->text();
+ accept();
+}
+
+void OpenUrlDialog::play()
+{
+ lastUrl = edit->text();
+ accept();
+}
+
+QString OpenUrlDialog::url() const
+{
+ return lastUrl;
+}
+
+bool OpenUrlDialog::shouldEnqueue() const
+{
+ return bShouldEnqueue;
+}
+
+/** Show Event:
+ * When the dialog is shown, try to extract an URL from the clipboard
+ * and paste it in the Edit box.
+ * showEvent can happen not only on exec() but I think it's cool to
+ * actualize the URL on showEvent (eg. change virtual desktop...)
+ **/
+void OpenUrlDialog::showEvent( QShowEvent *ev )
+{
+ (void) ev;
+ bShouldEnqueue = false;
+ edit->setFocus( Qt::OtherFocusReason );
+ if( !lastUrl.isEmpty() && edit->text().isEmpty() )
+ {
+ /* The text should not have been changed, excepted if the user
+ has clicked Cancel before */
+ edit->setText( lastUrl );
+ }
+ else
+ edit->clear();
+
+ if( bClipboard )
+ {
+ QClipboard *clipboard = QApplication::clipboard();
+ const QMimeData *data = clipboard->mimeData( QClipboard::Selection );
+ QString txt = data->text().trimmed();
+
+ if( txt.isEmpty() || ( !txt.contains("://") && !QFile::exists(txt) ) )
+ txt = clipboard->mimeData()->text().trimmed();
+
+ if( txt.contains( "://" ) || QFile::exists( txt ) )
+ edit->setText( txt );
+ }
+}
--- /dev/null
+/*****************************************************************************
+ * openurl.hpp: Open a MRL or clipboard content
+ ****************************************************************************
+ * Copyright © 2009 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Jean-Philippe André <jpeg@videolan.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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ ******************************************************************************/
+
+#ifndef _OPEN_URL_H
+#define _OPEN_URL_H_
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include "util/qvlcframe.hpp"
+
+class ClickLineEdit;
+
+class OpenUrlDialog : public QVLCDialog
+{
+ Q_OBJECT
+
+private:
+ OpenUrlDialog( QWidget *, intf_thread_t *, bool bClipboard = true );
+ QString lastUrl;
+ bool bClipboard, bShouldEnqueue;
+ ClickLineEdit *edit;
+
+ static OpenUrlDialog *instance;
+
+private slots:
+ void enqueue();
+ void play();
+
+public:
+ virtual ~OpenUrlDialog() {}
+
+ static OpenUrlDialog* getInstance( QWidget *parent,
+ intf_thread_t *p_intf,
+ bool bClipboard = true );
+
+ QString url() const;
+ bool shouldEnqueue() const;
+ void showEvent( QShowEvent *ev );
+
+public slots:
+ virtual void close() { play(); };
+};
+
+#endif
#include "dialogs/vlm.hpp"
#include "dialogs/sout.hpp"
#include "dialogs/open.hpp"
+#include "dialogs/openurl.hpp"
#include "dialogs/help.hpp"
#include "dialogs/gototime.hpp"
#include "dialogs/podcast_configuration.hpp"
addFromSimple( false, false );
}
+/* Url & Clipboard */
+/**
+ * Open a MRL.
+ * If the clipboard contains URLs, the first is automatically 'preselected'.
+ **/
+void DialogsProvider::openUrlDialog()
+{
+ OpenUrlDialog *oud = OpenUrlDialog::getInstance( p_intf->p_sys->p_mi,
+ p_intf );
+ if( oud->exec() == QDialog::Accepted )
+ {
+ QString url = oud->url();
+ if( !url.isEmpty() )
+ {
+ playlist_Add( THEPL, qtu( toNativeSeparators( url ) ),
+ NULL, !oud->shouldEnqueue() ?
+ ( PLAYLIST_APPEND | PLAYLIST_GO )
+ : ( PLAYLIST_APPEND | PLAYLIST_PREPARSE ),
+ PLAYLIST_END, true, false );
+ RecentsMRL::getInstance( p_intf )->addRecent(
+ toNativeSeparators( url ) );
+ }
+ }
+}
+
/* Directory */
/**
* Open a directory,