]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/dialogs/help.cpp
Fix comment !
[vlc] / modules / gui / qt4 / dialogs / help.cpp
index 1557e3d13919ddd327158398a685885a566ab832..559e751b190cb404ff2e6934cffa0eae77205874 100644 (file)
@@ -5,6 +5,7 @@
  * $Id$
  *
  * Authors: Jean-Baptiste Kempf <jb (at) videolan.org>
+ *          RĂ©mi Duraffort <ivoire (at) via.ecp.fr>
  *
  * 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
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
-#include "dialogs/about.hpp"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+
 #include "dialogs/help.hpp"
+#include <vlc_about.h>
+
+#ifdef UPDATE_CHECK
+#include <vlc_update.h>
+#endif
 
 #include "dialogs_provider.hpp"
-#include "util/qvlcframe.hpp"
-#include "qt4.hpp"
+
+#include <vlc_intf_strings.h>
 
 #include <QTextBrowser>
 #include <QTabWidget>
 #include <QFile>
 #include <QLabel>
 #include <QString>
+#include <QDialogButtonBox>
+#include <QEvent>
+#include <QFileDialog>
+#include <QDate>
+
 
 HelpDialog *HelpDialog::instance = NULL;
 
-HelpDialog::HelpDialog( intf_thread_t *_p_intf) :  QVLCFrame( _p_intf )
+HelpDialog::HelpDialog( intf_thread_t *_p_intf ) : QVLCFrame( _p_intf )
+
 {
     setWindowTitle( qtr( "Help" ) );
-    resize( 600, 560 );
+    setMinimumSize( 250, 300 );
 
     QGridLayout *layout = new QGridLayout( this );
     QTextBrowser *helpBrowser = new QTextBrowser( this );
     helpBrowser->setOpenExternalLinks( true );
-    helpBrowser->setHtml( _("<html>"
-    "<h2>Welcome to VLC media player help</h2>"
-        "<h3>Documentation</h3>"
-            "<p>You can find VLC documentation on VideoLAN's <a href=\"http://wiki.videolan.org\">wiki</a> website.</p>"
-            "<p>If you are a newcomer to VLC media player, please read the<br><a href=\"http://wiki.videolan.org/Documentation:VLC_for_dummies\"><em>Introduction to VLC media player</em></a>.</p>"
-            "<p>You will find some information on how to use the player in the <br>\"<a href=\"http://wiki.videolan.org/Documentation:Play_HowTo\"><em>How to play files with VLC media player<em></a>\" document.</p>"
-            "<p>For all the saving, converting, transcoding, encoding, muxing and streaming tasks, you should find useful information in the <a href=\"http://wiki.videolan.org/Documentation:Streaming_HowTo\">Streaming Documentation</a>.</p>"
-            "<p>If you are unsure about terminology, please consult the <a href=\"http://wiki.videolan.org/Knowledge_Base\">knowledge base</a>.</p>"
-            "<p>To understand the main keyboard shortcuts, read the <a href=\"http://wiki.videolan.org/Hotkeys\">shortcuts</a> page.</p>"
-        "<h3>Help</h3>"
-            "<p>Before asking any question, please refer yourself to the <a href=\"http://wiki.videolan.org/Frequently_Asked_Questions\">FAQ</a>.</p>"
-            "<p>You might then get (and give) help on the <a href=\"http://forum.videolan.org\">Forums</a>, the <a href=\"http://www.videolan.org/vlc/lists.html\">mailing-lists</a> or our IRC channel ( <a href=\"http://www.videolan.org/webirc/\"><em>#videolan</em></a> on irc.freenode.net ).</p>"
-        "<h3>Contribute to the project</h3>"
-            "<p>You can help the VideoLAN project giving some of your time to help the community, to design skins, to translate the documentation, to test and to code. You can also give funds and material to help us. And of course, you can <b>promote</b> VLC media player.</p>"
-    "</html>") );
+    helpBrowser->setHtml( I_LONGHELP );
     QPushButton *closeButton = new QPushButton( qtr( "&Close" ) );
     closeButton->setDefault( true );
 
@@ -66,22 +69,27 @@ HelpDialog::HelpDialog( intf_thread_t *_p_intf) :  QVLCFrame( _p_intf )
     layout->addWidget( closeButton, 1, 3 );
 
     BUTTONACT( closeButton, close() );
+    readSettings( "Help", QSize( 400, 450 ) );
 }
 
 HelpDialog::~HelpDialog()
 {
+    writeSettings( "Help" );
 }
+
 void HelpDialog::close()
 {
-    this->toggleVisible();
+    toggleVisible();
 }
 
 AboutDialog *AboutDialog::instance = NULL;
 
-AboutDialog::AboutDialog( intf_thread_t *_p_intf) :  QVLCFrame( _p_intf )
+AboutDialog::AboutDialog( QWidget *parent, intf_thread_t *_p_intf)
+            : QVLCDialog( parent, _p_intf )
 {
     setWindowTitle( qtr( "About" ) );
     resize( 600, 500 );
+    setMinimumSize( 600, 500 );
 
     QGridLayout *layout = new QGridLayout( this );
     QTabWidget *tab = new QTabWidget( this );
@@ -91,9 +99,12 @@ AboutDialog::AboutDialog( intf_thread_t *_p_intf) :  QVLCFrame( _p_intf )
     closeButton->setDefault( true );
 
     QLabel *introduction = new QLabel(
-            qtr( "Information about VLC media player." ) );
+            qtr( "VLC media player" " " VERSION_MESSAGE ) );
     QLabel *iconVLC = new QLabel;
-    iconVLC->setPixmap( QPixmap( ":/vlc48.png" ) );
+    if( QDate::currentDate().dayOfYear() >= 354 )
+        iconVLC->setPixmap( QPixmap( ":/vlc48-christmas.png" ) );
+    else
+        iconVLC->setPixmap( QPixmap( ":/vlc48.png" ) );
     layout->addWidget( iconVLC, 0, 0, 1, 1 );
     layout->addWidget( introduction, 0, 1, 1, 7 );
     layout->addWidget( tab, 1, 0, 1, 8 );
@@ -102,27 +113,27 @@ AboutDialog::AboutDialog( intf_thread_t *_p_intf) :  QVLCFrame( _p_intf )
     /* Main Introduction */
     QWidget *infoWidget = new QWidget( this );
     QHBoxLayout *infoLayout = new QHBoxLayout( infoWidget );
-    QLabel *infoLabel = new QLabel( "VLC media player " PACKAGE_VERSION "\n\n"
-            "(c) 1996-2007 - the VideoLAN Team\n\n" +
-            qtr( "VLC media player is a free media player, made by the "
-                "VideoLAN Team.\nIt is a standalone multimedia player, "
-                "encoder and streamer, that can read from many supports "
-                "(files, CDs, DVDs, networks, capture cards) and that works "
-                "on many platforms.\n\n" )
-            + qtr( "You are using the new Qt4 Interface.\n" )
-            + qtr( "Compiled by " ) + qfu( VLC_CompileBy() )+ "@"
+    QLabel *infoLabel = new QLabel(
+            qtr( "VLC media player is a free media player, "
+                "encoder and streamer that can read from files, "
+                "CDs, DVDs, network streams, capture cards and even more!\n"
+                "VLC uses its internal codecs and works on essentially every "
+                "popular platform.\n\n" )
+            + qtr( "This version of VLC was compiled by:\n " )
+            + qfu( VLC_CompileBy() )+ "@" + qfu( VLC_CompileHost() ) + "."
             + qfu( VLC_CompileDomain() ) + ".\n"
-            + "Compiler: " + qfu( VLC_Compiler() ) +".\n"
-            + qtr( "Based on SVN revision: " ) + qfu( VLC_Changeset() )
-            + ".\n\n"
-            + qtr( "This program comes with NO WARRANTY, to the extent "
-                "permitted by the law; read the distribution tab.\n\n" )
-            + "The VideoLAN team <videolan@videolan.org> \n"
-              "http://www.videolan.org/\n") ;
+            + "Compiler: " + qfu( VLC_Compiler() ) + ".\n"
+            + qtr( "Based on Git commit: " ) + qfu( VLC_Changeset() ) + ".\n"
+            + qtr( "You are using the Qt4 Interface.\n\n" )
+            + qtr( "Copyright (C) " COPYRIGHT_YEARS " by the VideoLAN Team.\n" )
+            + "vlc@videolan.org, http://www.videolan.org" );
     infoLabel->setWordWrap( infoLabel );
 
     QLabel *iconVLC2 = new QLabel;
-    iconVLC2->setPixmap( QPixmap( ":/vlc128.png" ) );
+    if( QDate::currentDate().dayOfYear() >= 354 )
+        iconVLC2->setPixmap( QPixmap( ":/vlc128-christmas.png" ) );
+    else
+        iconVLC2->setPixmap( QPixmap( ":/vlc128.png" ) );
     infoLayout->addWidget( iconVLC2 );
     infoLayout->addWidget( infoLabel );
 
@@ -135,10 +146,10 @@ AboutDialog::AboutDialog( intf_thread_t *_p_intf) :  QVLCFrame( _p_intf )
     QWidget *thanksWidget = new QWidget( this );
     QVBoxLayout *thanksLayout = new QVBoxLayout( thanksWidget );
 
-    QLabel *thanksLabel = new QLabel( qtr("We would like to thanks the whole "
-                "community, the testers, our users and the following people "
+    QLabel *thanksLabel = new QLabel( qtr( "We would like to thank the whole "
+                "VLC community, the testers, our users and the following people "
                 "(and the missing ones...) for their collaboration to "
-                "provide the best software." ) );
+                "create the best free software." ) );
     thanksLabel->setWordWrap( true );
     thanksLayout->addWidget( thanksLabel );
     QTextEdit *thanksEdit = new QTextEdit( this );
@@ -152,10 +163,10 @@ AboutDialog::AboutDialog( intf_thread_t *_p_intf) :  QVLCFrame( _p_intf )
     authorsEdit->setReadOnly( true );
 
     /* add the tabs to the Tabwidget */
-    tab->addTab( infoWidget, qtr( "General Info" ) );
+    tab->addTab( infoWidget, qtr( "About" ) );
     tab->addTab( authorsEdit, qtr( "Authors" ) );
     tab->addTab( thanksWidget, qtr("Thanks") );
-    tab->addTab( licenseEdit, qtr("Distribution License") );
+    tab->addTab( licenseEdit, qtr("License") );
 
     BUTTONACT( closeButton, close() );
 }
@@ -163,7 +174,146 @@ AboutDialog::AboutDialog( intf_thread_t *_p_intf) :  QVLCFrame( _p_intf )
 AboutDialog::~AboutDialog()
 {
 }
+
 void AboutDialog::close()
 {
-    this->toggleVisible();
+    toggleVisible();
+}
+
+#ifdef UPDATE_CHECK
+
+/*****************************************************************************
+ * UpdateDialog
+ *****************************************************************************/
+/* callback to get information from the core */
+static void UpdateCallback( void *data, bool b_ret )
+{
+    UpdateDialog* UDialog = (UpdateDialog *)data;
+    QEvent* event;
+
+    if( b_ret )
+        event = new QEvent( (QEvent::Type)UDOkEvent );
+    else
+        event = new QEvent( (QEvent::Type)UDErrorEvent );
+
+    QApplication::postEvent( UDialog, event );
 }
+
+UpdateDialog *UpdateDialog::instance = NULL;
+
+UpdateDialog::UpdateDialog( intf_thread_t *_p_intf ) : QVLCFrame( _p_intf )
+{
+    setWindowTitle( qtr( "Update" ) );
+
+    QGridLayout *layout = new QGridLayout( this );
+
+    QPushButton *closeButton = new QPushButton( qtr( "&Close" ) );
+    updateButton = new QPushButton( qtr( "&Update List" ) );
+    updateButton->setDefault( true );
+    QDialogButtonBox *buttonBox = new QDialogButtonBox( Qt::Horizontal );
+    buttonBox->addButton( updateButton, QDialogButtonBox::ActionRole );
+    buttonBox->addButton( closeButton, QDialogButtonBox::AcceptRole );
+
+    updateLabel = new QLabel( qtr( "Checking for an update..." ) );
+    updateLabel->setWordWrap( true );
+
+    layout->addWidget( updateLabel, 0, 0 );
+    layout->addWidget( buttonBox, 1, 0 );
+
+    BUTTONACT( updateButton, UpdateOrDownload() );
+    BUTTONACT( closeButton, close() );
+
+    /* Create the update structure */
+    p_update = update_New( p_intf );
+    b_checked = false;
+
+    readSettings( "Update", QSize( 120, 80 ) );
+
+    /* Check for updates */
+    UpdateOrDownload();
+}
+
+UpdateDialog::~UpdateDialog()
+{
+    update_Delete( p_update );
+    writeSettings( "Update" );
+}
+
+void UpdateDialog::close()
+{
+    toggleVisible();
+}
+
+/* Check for updates */
+void UpdateDialog::UpdateOrDownload()
+{
+    if( !b_checked )
+    {
+        updateButton->setEnabled( false );
+        msg_Dbg( p_intf, "Launching an update request" );
+        update_Check( p_update, UpdateCallback, this );
+    }
+    else
+    {
+        updateButton->setEnabled( false );
+        QString dest_dir = QFileDialog::getExistingDirectory( this,
+                                 qtr( "Select a directory..." ),
+                                 qfu( config_GetHomeDir() ) );
+
+        if( dest_dir != "" )
+        {
+            /*HACK: Qt4 isn't able to change the way OS deals with directories
+              names. Windows doesn't add an ending separator so we might add it.
+             */
+            #if defined( WIN32 ) || defined( UNDER_CE )
+            dest_dir += DIR_SEP;
+            #endif
+            msg_Dbg( p_intf, "Downloading to folder: %s", qtu( dest_dir ) );
+            toggleVisible();
+            update_Download( p_update, qtu( dest_dir ) );
+        }
+        else
+            updateButton->setEnabled( true );
+    }
+}
+
+/* Handle the events */
+void UpdateDialog::customEvent( QEvent *event )
+{
+    if( event->type() == UDOkEvent )
+        updateNotify( true );
+    else
+        updateNotify( false );
+}
+
+/* Notify the end of the update_Check */
+void UpdateDialog::updateNotify( bool b_result )
+{
+    /* The update finish without errors */
+    if( b_result )
+    {
+        if( update_NeedUpgrade( p_update ) )
+        {
+            update_release_t *p_release = update_GetRelease( p_update );
+            assert( p_release );
+            b_checked = true;
+            updateButton->setText( "Download" );
+            updateLabel->setText( qtr( "There is a new version of VLC :\n" )
+                                + qfu( p_release->psz_desc )  );
+
+            /* Force the dialog to be shown */
+            this->show();
+        }
+        else
+            updateLabel->setText( qtr( "You have the latest version of VLC" ) );
+    }
+    else
+        updateLabel->setText(
+                        qtr( "An error occurred while checking for updates" ) );
+
+    adjustSize();
+    updateButton->setEnabled( true );
+}
+
+#endif
+