openurl.cpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:5k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * openurl.cpp: Open a MRL or clipboard content
  3.  *****************************************************************************
  4.  * Copyright © 2009 the VideoLAN team
  5.  * $Id: 49a791b15478af2d230952ea36390064eb001b7b $
  6.  *
  7.  * Authors: Jean-Philippe André <jpeg@videolan.org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. #ifdef HAVE_CONFIG_H
  24. # include "config.h"
  25. #endif
  26. #include "dialogs/openurl.hpp"
  27. #include "util/customwidgets.hpp"
  28. #include <QPushButton>
  29. #include <QDialogButtonBox>
  30. #include <QApplication>
  31. #include <QClipboard>
  32. #include <QMimeData>
  33. #include <QList>
  34. #include <QUrl>
  35. #include <QFile>
  36. #include <QLabel>
  37. #include <assert.h>
  38. OpenUrlDialog *OpenUrlDialog::instance = NULL;
  39. OpenUrlDialog* OpenUrlDialog::getInstance( QWidget *parent,
  40.                                            intf_thread_t *p_intf,
  41.                                            bool bClipboard )
  42. {
  43.     /* Creation */
  44.     if( !instance )
  45.         instance = new OpenUrlDialog( parent, p_intf, bClipboard );
  46.     else
  47.         instance->bClipboard = bClipboard;
  48.     return instance;
  49. }
  50. OpenUrlDialog::OpenUrlDialog( QWidget *parent,
  51.                               intf_thread_t *_p_intf,
  52.                               bool _bClipboard ) :
  53.         QVLCDialog( parent, _p_intf ), bClipboard( _bClipboard )
  54. {
  55.     setWindowTitle( qtr( "Open URL" ) );
  56.     /* Buttons */
  57.     QPushButton *but;
  58.     QDialogButtonBox *box = new QDialogButtonBox( this );
  59.     but = box->addButton( QDialogButtonBox::Ok );
  60.     CONNECT( but, clicked(), this, play() );
  61.     but = box->addButton( QDialogButtonBox::Cancel );
  62.     but = box->addButton( qtr( "&Enqueue" ), QDialogButtonBox::AcceptRole );
  63.     CONNECT( but, clicked(), this, enqueue() );
  64.     CONNECT( box, rejected(), this, reject() );
  65.     /* Info label and line edit */
  66.     edit = new ClickLineEdit( qtr( "Enter URL here..." ), this );
  67.     QLabel *info = new QLabel( qtr( "Please enter the URL or path "
  68.                                     "to the media you want to play"),
  69.                                this );
  70.     setToolTip( qtr( "If your clipboard contains a valid URLn"
  71.                      "or the path to a file on your computer,n"
  72.                      "it will be automatically selected." ) );
  73.     /* Layout */
  74.     QVBoxLayout *vlay = new QVBoxLayout( this );
  75.     vlay->addWidget( info );
  76.     vlay->addWidget( edit );
  77.     vlay->addWidget( box );
  78. }
  79. void OpenUrlDialog::enqueue()
  80. {
  81.     bShouldEnqueue = true;
  82.     lastUrl = edit->text();
  83.     accept();
  84. }
  85. void OpenUrlDialog::play()
  86. {
  87.     lastUrl = edit->text();
  88.     accept();
  89. }
  90. QString OpenUrlDialog::url() const
  91. {
  92.     return lastUrl;
  93. }
  94. bool OpenUrlDialog::shouldEnqueue() const
  95. {
  96.     return bShouldEnqueue;
  97. }
  98. /** Show Event:
  99.  * When the dialog is shown, try to extract an URL from the clipboard
  100.  * and paste it in the Edit box.
  101.  * showEvent can happen not only on exec() but I think it's cool to
  102.  * actualize the URL on showEvent (eg. change virtual desktop...)
  103.  **/
  104. void OpenUrlDialog::showEvent( QShowEvent *ev )
  105. {
  106.     (void) ev;
  107.     bShouldEnqueue = false;
  108.     edit->setFocus( Qt::OtherFocusReason );
  109.     if( !lastUrl.isEmpty() && edit->text().isEmpty() )
  110.     {
  111.         /* The text should not have been changed, excepted if the user
  112.         has clicked Cancel before */
  113.         edit->setText( lastUrl );
  114.     }
  115.     else
  116.         edit->clear();
  117.     if( bClipboard )
  118.     {
  119.         QClipboard *clipboard = QApplication::clipboard();
  120.         assert( clipboard != NULL );
  121.         QString txt = clipboard->text( QClipboard::Selection ).trimmed();
  122.         if( txt.isEmpty() || ( !txt.contains("://") && !QFile::exists(txt) ) )
  123.             txt = clipboard->text( QClipboard::Clipboard ).trimmed();
  124.         if( txt.contains( "://" ) || QFile::exists( txt ) )
  125.             edit->setText( txt );
  126.     }
  127. }