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

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * Help.cpp : Help and About dialogs
  3.  ****************************************************************************
  4.  * Copyright (C) 2007 the VideoLAN team
  5.  * $Id: f3b40779f323d4eb0d3624f0723502c5c20c59c9 $
  6.  *
  7.  * Authors: Jean-Baptiste Kempf <jb (at) videolan.org>
  8.  *          Rémi Duraffort <ivoire (at) via.ecp.fr>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  23.  *****************************************************************************/
  24. #ifdef HAVE_CONFIG_H
  25. # include "config.h"
  26. #endif
  27. #include "dialogs/help.hpp"
  28. #include "util/qt_dirs.hpp"
  29. #include <vlc_about.h>
  30. #include <vlc_intf_strings.h>
  31. #ifdef UPDATE_CHECK
  32. # include <vlc_update.h>
  33. #endif
  34. #include <QTextBrowser>
  35. #include <QTabWidget>
  36. #include <QLabel>
  37. #include <QString>
  38. #include <QDialogButtonBox>
  39. #include <QEvent>
  40. #include <QFileDialog>
  41. #include <QDate>
  42. #include <assert.h>
  43. HelpDialog *HelpDialog::instance = NULL;
  44. HelpDialog::HelpDialog( intf_thread_t *_p_intf ) : QVLCFrame( _p_intf )
  45. {
  46.     setWindowTitle( qtr( "Help" ) );
  47.     setMinimumSize( 350, 300 );
  48.     QGridLayout *layout = new QGridLayout( this );
  49.     QTextBrowser *helpBrowser = new QTextBrowser( this );
  50.     helpBrowser->setOpenExternalLinks( true );
  51.     helpBrowser->setHtml( qtr(I_LONGHELP) );
  52.     QPushButton *closeButton = new QPushButton( qtr( "&Close" ) );
  53.     closeButton->setDefault( true );
  54.     layout->addWidget( helpBrowser, 0, 0, 1, 0 );
  55.     layout->addWidget( closeButton, 1, 3 );
  56.     BUTTONACT( closeButton, close() );
  57.     readSettings( "Help", QSize( 500, 450 ) );
  58. }
  59. HelpDialog::~HelpDialog()
  60. {
  61.     writeSettings( "Help" );
  62. }
  63. void HelpDialog::close()
  64. {
  65.     toggleVisible();
  66. }
  67. AboutDialog *AboutDialog::instance = NULL;
  68. AboutDialog::AboutDialog( QWidget *parent, intf_thread_t *_p_intf)
  69.             : QVLCDialog( parent, _p_intf )
  70. {
  71.     setWindowTitle( qtr( "About" ) );
  72.     resize( 600, 500 );
  73.     setMinimumSize( 600, 500 );
  74.     QGridLayout *layout = new QGridLayout( this );
  75.     QTabWidget *tab = new QTabWidget( this );
  76.     QPushButton *closeButton = new QPushButton( qtr( "&Close" ) );
  77.     closeButton->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum );
  78.     closeButton->setDefault( true );
  79.     QLabel *introduction = new QLabel(
  80.             qtr( "VLC media player" ) + qfu( " " VERSION_MESSAGE ) );
  81.     QLabel *iconVLC = new QLabel;
  82.     if( QDate::currentDate().dayOfYear() >= 354 )
  83.         iconVLC->setPixmap( QPixmap( ":/vlc48-christmas.png" ) );
  84.     else
  85.         iconVLC->setPixmap( QPixmap( ":/vlc48.png" ) );
  86.     layout->addWidget( iconVLC, 0, 0, 1, 1 );
  87.     layout->addWidget( introduction, 0, 1, 1, 7 );
  88.     layout->addWidget( tab, 1, 0, 1, 8 );
  89.     layout->addWidget( closeButton, 2, 6, 1, 2 );
  90.     /* Main Introduction */
  91.     QWidget *infoWidget = new QWidget( this );
  92.     QHBoxLayout *infoLayout = new QHBoxLayout( infoWidget );
  93.     QLabel *infoLabel = new QLabel(
  94.             qtr( "VLC media player is a free media player, "
  95.                 "encoder and streamer that can read from files, "
  96.                 "CDs, DVDs, network streams, capture cards and even more!n"
  97.                 "VLC uses its internal codecs and works on essentially every "
  98.                 "popular platform.nn" )
  99.             + qtr( "This version of VLC was compiled by:n " )
  100.             + qfu( VLC_CompileBy() )+ "@" + qfu( VLC_CompileHost() ) + "."
  101.             + qfu( VLC_CompileDomain() ) + ".n"
  102.             + qtr( "Compiler: " ) + qfu( VLC_Compiler() ) + ".n"
  103.             + qtr( "You are using the Qt4 Interface.nn" )
  104.             + qtr( "Copyright (C) " ) + COPYRIGHT_YEARS
  105.             + qtr( " by the VideoLAN Team.n" )
  106.             + "vlc@videolan.org, http://www.videolan.org" );
  107.     infoLabel->setWordWrap( infoLabel );
  108.     QLabel *iconVLC2 = new QLabel;
  109.     if( QDate::currentDate().dayOfYear() >= 354 )
  110.         iconVLC2->setPixmap( QPixmap( ":/vlc128-christmas.png" ) );
  111.     else
  112.         iconVLC2->setPixmap( QPixmap( ":/vlc128.png" ) );
  113.     infoLayout->addWidget( iconVLC2 );
  114.     infoLayout->addWidget( infoLabel );
  115.     /* GPL License */
  116.     QTextEdit *licenseEdit = new QTextEdit( this );
  117.     licenseEdit->setText( qfu( psz_license ) );
  118.     licenseEdit->setReadOnly( true );
  119.     /* People who helped */
  120.     QWidget *thanksWidget = new QWidget( this );
  121.     QVBoxLayout *thanksLayout = new QVBoxLayout( thanksWidget );
  122.     QLabel *thanksLabel = new QLabel( qtr( "We would like to thank the whole "
  123.                 "VLC community, the testers, our users and the following people "
  124.                 "(and the missing ones...) for their collaboration to "
  125.                 "create the best free software." ) );
  126.     thanksLabel->setWordWrap( true );
  127.     thanksLayout->addWidget( thanksLabel );
  128.     QTextEdit *thanksEdit = new QTextEdit( this );
  129.     thanksEdit->setText( qfu( psz_thanks ) );
  130.     thanksEdit->setReadOnly( true );
  131.     thanksLayout->addWidget( thanksEdit );
  132.     /* People who wrote the software */
  133.     QTextEdit *authorsEdit = new QTextEdit( this );
  134.     authorsEdit->setText( qfu( psz_authors ) );
  135.     authorsEdit->setReadOnly( true );
  136.     /* add the tabs to the Tabwidget */
  137.     tab->addTab( infoWidget, qtr( "About" ) );
  138.     tab->addTab( authorsEdit, qtr( "Authors" ) );
  139.     tab->addTab( thanksWidget, qtr("Thanks") );
  140.     tab->addTab( licenseEdit, qtr("License") );
  141.     BUTTONACT( closeButton, close() );
  142. }
  143. AboutDialog::~AboutDialog()
  144. {
  145. }
  146. void AboutDialog::close()
  147. {
  148.     toggleVisible();
  149. }
  150. #ifdef UPDATE_CHECK
  151. /*****************************************************************************
  152.  * UpdateDialog
  153.  *****************************************************************************/
  154. /* callback to get information from the core */
  155. static void UpdateCallback( void *data, bool b_ret )
  156. {
  157.     UpdateDialog* UDialog = (UpdateDialog *)data;
  158.     QEvent* event;
  159.     if( b_ret )
  160.         event = new QEvent( (QEvent::Type)UDOkEvent );
  161.     else
  162.         event = new QEvent( (QEvent::Type)UDErrorEvent );
  163.     QApplication::postEvent( UDialog, event );
  164. }
  165. UpdateDialog *UpdateDialog::instance = NULL;
  166. UpdateDialog::UpdateDialog( intf_thread_t *_p_intf ) : QVLCFrame( _p_intf )
  167. {
  168.     setWindowTitle( qtr( "VLC media player updates" ) );
  169.     QGridLayout *layout = new QGridLayout( this );
  170.     QPushButton *closeButton = new QPushButton( qtr( "&Cancel" ) );
  171.     updateButton = new QPushButton( qtr( "&Recheck version" ) );
  172.     updateButton->setDefault( true );
  173.     QDialogButtonBox *buttonBox = new QDialogButtonBox( Qt::Horizontal );
  174.     buttonBox->addButton( updateButton, QDialogButtonBox::ActionRole );
  175.     buttonBox->addButton( closeButton, QDialogButtonBox::AcceptRole );
  176.     updateLabelTop = new QLabel( qtr( "Checking for an update..." ) );
  177.     updateLabelTop->setWordWrap( true );
  178.     updateLabelTop->setMargin( 8 );
  179.     updateLabelDown = new QLabel( qtr( "nDo you want to download it?n" ) );
  180.     updateLabelDown->setWordWrap( true );
  181.     updateLabelDown->hide();
  182.     updateText = new QTextEdit( this );
  183.     updateText->setAcceptRichText(false);
  184.     updateText->setTextInteractionFlags( Qt::TextSelectableByKeyboard|
  185.                                          Qt::TextSelectableByMouse);
  186.     updateText->setEnabled( false );
  187.     layout->addWidget( updateLabelTop, 0, 0 );
  188.     layout->addWidget( updateText, 1, 0 );
  189.     layout->addWidget( updateLabelDown, 2, 0 );
  190.     layout->addWidget( buttonBox, 3, 0 );
  191.     BUTTONACT( updateButton, UpdateOrDownload() );
  192.     BUTTONACT( closeButton, close() );
  193.     /* Create the update structure */
  194.     p_update = update_New( p_intf );
  195.     b_checked = false;
  196.     setMinimumSize( 300, 300 );
  197.     setMaximumSize( 400, 300 );
  198.     readSettings( "Update", QSize( 300, 250 ) );
  199.     /* Check for updates */
  200.     UpdateOrDownload();
  201. }
  202. UpdateDialog::~UpdateDialog()
  203. {
  204.     update_Delete( p_update );
  205.     writeSettings( "Update" );
  206. }
  207. void UpdateDialog::close()
  208. {
  209.     toggleVisible();
  210. }
  211. /* Check for updates */
  212. void UpdateDialog::UpdateOrDownload()
  213. {
  214.     if( !b_checked )
  215.     {
  216.         updateButton->setEnabled( false );
  217.         updateLabelTop->setText( qtr( "Launching an update request..." ) );
  218.         update_Check( p_update, UpdateCallback, this );
  219.     }
  220.     else
  221.     {
  222.         QString dest_dir = QFileDialog::getExistingDirectory( this,
  223.                                  qtr( "Select a directory..." ),
  224.                                  qfu( config_GetHomeDir() ) );
  225.         if( !dest_dir.isEmpty() )
  226.         {
  227.             dest_dir = toNativeSepNoSlash( dest_dir ) + DIR_SEP;
  228.             msg_Dbg( p_intf, "Downloading to folder: %s", qtu( dest_dir ) );
  229.             toggleVisible();
  230.             update_Download( p_update, qtu( dest_dir ) );
  231.         }
  232.     }
  233. }
  234. /* Handle the events */
  235. void UpdateDialog::customEvent( QEvent *event )
  236. {
  237.     if( event->type() == UDOkEvent )
  238.         updateNotify( true );
  239.     else
  240.         updateNotify( false );
  241. }
  242. /* Notify the end of the update_Check */
  243. void UpdateDialog::updateNotify( bool b_result )
  244. {
  245.     /* The update finish without errors */
  246.     if( b_result )
  247.     {
  248.         if( update_NeedUpgrade( p_update ) )
  249.         {
  250.             update_release_t *p_release = update_GetRelease( p_update );
  251.             assert( p_release );
  252.             b_checked = true;
  253.             updateButton->setText( qtr( "&Yes" ) );
  254.             QString message = qtr( "A new version of VLC(" )
  255.                               + QString::number( p_release->i_major ) + "."
  256.                               + QString::number( p_release->i_minor ) + "."
  257.                               + QString::number( p_release->i_revision );
  258.             if( p_release->extra )
  259.                 message += p_release->extra;
  260.             message += qtr( ") is available.");
  261.             updateLabelTop->setText( message );
  262.             updateText->setText( qfu( p_release->psz_desc ) );
  263.             updateText->setEnabled( true );
  264.             updateLabelDown->show();
  265.             /* Force the dialog to be shown */
  266.             this->show();
  267.         }
  268.         else
  269.             updateLabelTop->setText(
  270.                     qtr( "You have the latest version of VLC media player." ) );
  271.     }
  272.     else
  273.         updateLabelTop->setText(
  274.                     qtr( "An error occurred while checking for updates..." ) );
  275.     updateButton->setEnabled( true );
  276. }
  277. #endif