main_interface.cpp 18.5 KB
Newer Older
zorglub's avatar
zorglub committed
1 2 3
/*****************************************************************************
 * main_inteface.cpp : Main interface
 ****************************************************************************
4 5
 * Copyright (C) 2006 the VideoLAN team
 * $Id$
zorglub's avatar
zorglub committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
 *
 * Authors: Clément Stenac <zorglub@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. *****************************************************************************/

23
#include "qt4.hpp"
zorglub's avatar
zorglub committed
24
#include "main_interface.hpp"
zorglub's avatar
zorglub committed
25
#include "input_manager.hpp"
26
#include "util/input_slider.hpp"
zorglub's avatar
zorglub committed
27
#include "util/qvlcframe.hpp"
zorglub's avatar
zorglub committed
28
#include "dialogs_provider.hpp"
29
#include "components/interface_widgets.hpp"
30 31 32
#include "dialogs/playlist.hpp"
#include "menus.hpp"

zorglub's avatar
zorglub committed
33
#include <QCloseEvent>
zorglub's avatar
zorglub committed
34
#include <QPushButton>
zorglub's avatar
zorglub committed
35
#include <QStatusBar>
36
#include <QKeyEvent>
37 38

#include <assert.h>
39
#include <vlc_keys.h>
40
#include <vlc/vout.h>
zorglub's avatar
zorglub committed
41

zorglub's avatar
zorglub committed
42
#ifdef WIN32
zorglub's avatar
zorglub committed
43
    #define PREF_W 410
zorglub's avatar
zorglub committed
44 45
    #define PREF_H 121
#else
zorglub's avatar
zorglub committed
46
    #define PREF_W 450
zorglub's avatar
zorglub committed
47 48
    #define PREF_H 125
#endif
zorglub's avatar
zorglub committed
49

zorglub's avatar
Cleanup  
zorglub committed
50 51 52 53
#define BUTTON_SET( button, image, tooltip ) ui.button##Button->setText(""); \
    ui.button##Button->setIcon( QIcon( ":/pixmaps/"#image ) ); \
    ui.button##Button->setToolTip( tooltip );

zorglub's avatar
zorglub committed
54 55
static int InteractCallback( vlc_object_t *, const char *, vlc_value_t,
                             vlc_value_t, void *);
56 57 58 59 60 61 62 63 64 65 66 67 68 69
/* Video handling */
static void *DoRequest( intf_thread_t *p_intf, vout_thread_t *p_vout,
                        int *pi1, int *pi2, unsigned int*pi3,unsigned int*pi4)
{
    return p_intf->p_sys->p_mi->requestVideo( p_vout, pi1, pi2, pi3, pi4 );
}
static void DoRelease( intf_thread_t *p_intf, void *p_win )
{
    return p_intf->p_sys->p_mi->releaseVideo( p_win );
}
static int DoControl( intf_thread_t *p_intf, void *p_win, int i_q, va_list a )
{
    return p_intf->p_sys->p_mi->controlVideo( p_win, i_q, a );
}
zorglub's avatar
zorglub committed
70

71 72 73
bool embeddedPlaylistWasActive;
bool videoIsActive;

zorglub's avatar
zorglub committed
74
MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
zorglub's avatar
zorglub committed
75
{
76 77 78
    settings = new QSettings( "VideoLAN", "VLC" );
    settings->beginGroup( "MainWindow" );

79
    need_components_update = false;
80
    bgWidget = NULL; videoWidget = NULL; playlistWidget = NULL;
zorglub's avatar
zorglub committed
81
    embeddedPlaylistWasActive = videoIsActive = false;
82

zorglub's avatar
zorglub committed
83
    setWindowTitle( QString::fromUtf8( _("VLC media player") ) );
84 85 86
    handleMainUi( settings );

    QVLCMenu::createMenuBar( menuBar(), p_intf );
zorglub's avatar
zorglub committed
87

88 89 90 91 92
    /* Status bar */
    timeLabel = new QLabel( 0 );
    nameLabel = new QLabel( 0 );
    statusBar()->addWidget( nameLabel, 4 );
    statusBar()->addPermanentWidget( timeLabel, 1 );
zorglub's avatar
Icons  
zorglub committed
93

94 95
    setFocusPolicy( Qt::StrongFocus );

96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
    /* Init input manager */
    MainInputManager::getInstance( p_intf );
    ON_TIMEOUT( updateOnTimer() );

    /* Volume control */
    CONNECT( ui.volumeSlider, valueChanged(int), this, updateVolume(int) );
    /* Connect the input manager to the GUI elements it manages */
    CONNECT( THEMIM->getIM(), positionUpdated( float, int, int ),
             slider, setPosition( float,int, int ) );
    CONNECT( THEMIM->getIM(), positionUpdated( float, int, int ),
             this, setDisplay( float, int, int ) );
    CONNECT( THEMIM->getIM(), nameChanged( QString ), this,setName( QString ) );
    CONNECT( THEMIM->getIM(), statusChanged( int ), this, setStatus( int ) );
    CONNECT( slider, sliderDragged( float ),
             THEMIM->getIM(), sliderUpdate( float ) );

    /* Actions */
    BUTTONACT( ui.playButton, play() );
    BUTTONACT( ui.stopButton, stop() );
    BUTTONACT( ui.nextButton, next() );
    BUTTONACT( ui.prevButton, prev() );
    BUTTONACT( ui.playlistButton, playlist() );

    var_Create( p_intf, "interaction", VLC_VAR_ADDRESS );
    var_AddCallback( p_intf, "interaction", InteractCallback, this );
    p_intf->b_interaction = VLC_TRUE;
}

MainInterface::~MainInterface()
{
    /// \todo Save everything
    p_intf->b_interaction = VLC_FALSE;
    var_DelCallback( p_intf, "interaction", InteractCallback, this );
129 130 131 132

    p_intf->pf_request_window = NULL;
    p_intf->pf_release_window = NULL;
    p_intf->pf_control_window = NULL;
133 134 135 136 137 138 139 140
}

void MainInterface::handleMainUi( QSettings *settings )
{
    QWidget *main = new QWidget( this );
    setCentralWidget( main );
    ui.setupUi( centralWidget() );

zorglub's avatar
zorglub committed
141 142
    slider = new InputSlider( Qt::Horizontal, NULL );
    ui.hboxLayout->insertWidget( 0, slider );
143

zorglub's avatar
Cleanup  
zorglub committed
144 145 146 147
    BUTTON_SET( prev, previous.png, qtr( "Previous" ) );
    BUTTON_SET( next, next.png , qtr( "Next" ) );
    BUTTON_SET( play, play.png , qtr( "Play" ) );
    BUTTON_SET( stop, stop.png , qtr( "Stop" )  );
zorglub's avatar
zorglub committed
148 149 150 151 152 153 154 155 156 157
    ui.discFrame->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );

#define SET( button, image ) ui.button##Button->setText(""); \
    ui.button##Button->setIcon( QIcon( ":/pixmaps/"#image ) );
    SET( prev, previous.png );
    SET( next, next.png );
    SET( play, play.png );
    SET( stop, stop.png );
    SET( playlist, volume-low.png );
#undef SET
158 159

    /* Volume */
zorglub's avatar
Icons  
zorglub committed
160 161
    ui.volLowLabel->setPixmap( QPixmap( ":/pixmaps/volume-low.png" ) );
    ui.volHighLabel->setPixmap( QPixmap( ":/pixmaps/volume-high.png" ) );
zorglub's avatar
zorglub committed
162
    ui.volumeSlider->setMaximum( 100 );
163

zorglub's avatar
zorglub committed
164 165 166
    VolumeClickHandler *h = new VolumeClickHandler( this );
    ui.volLowLabel->installEventFilter(h);
    ui.volHighLabel->installEventFilter(h);
zorglub's avatar
zorglub committed
167 168
    ui.volumeSlider->setFocusPolicy( Qt::NoFocus );

169 170 171 172 173 174 175
    /* Fetch configuration from settings and vlc config */
    videoEmbeddedFlag = false;
    if( config_GetInt( p_intf, "embedded-video" ) )
        videoEmbeddedFlag = true;

    playlistEmbeddedFlag = true;
    /// \todo fetch playlist settings
zorglub's avatar
Cleanup  
zorglub committed
176 177 178
    BUTTON_SET( playlist, volume-low.png, playlistEmbeddedFlag ?
                                                qtr( "Show playlist" ) :
                                                qtr( "Open playlist" ) );
zorglub's avatar
zorglub committed
179

zorglub's avatar
zorglub committed
180
    /* Set initial size */
zorglub's avatar
zorglub committed
181
    resize ( PREF_W, PREF_H );
zorglub's avatar
zorglub committed
182
    addSize = QSize( ui.vboxLayout->margin() * 2, PREF_H );
183 184

    if( videoEmbeddedFlag )
185
    {
186
        videoWidget = new VideoWidget( p_intf );
zorglub's avatar
Cleanup  
zorglub committed
187
        videoWidget->widgetSize = QSize( PREF_W, 1 );
188
        videoWidget->resize( videoWidget->widgetSize );
zorglub's avatar
zorglub committed
189
        videoWidget->hide();
190 191
        ui.vboxLayout->insertWidget( 0, videoWidget );

192 193 194 195
        p_intf->pf_request_window  = ::DoRequest;
        p_intf->pf_release_window  = ::DoRelease;
        p_intf->pf_control_window  = ::DoControl;

196
        if( config_GetInt( p_intf, "qt-always-video" ))
zorglub's avatar
zorglub committed
197
        {
198 199 200 201
//            bgWidget = new BackgroundWidget( p_intf );
//            bgWidget->widgetSize = settings->value( "backgroundSize",
//                                                QSize( 200, 200 ) ).toSize();
//            ui.vboxLayout->insertWidget( 0, bgWidget );
zorglub's avatar
zorglub committed
202
        }
203
    }
zorglub's avatar
zorglub committed
204 205
//    visualSelector = new VisualSelector( p_intf );
//    visualSelector->hide();
206 207

    calculateInterfaceSize();
zorglub's avatar
Cleanup  
zorglub committed
208
    fprintf( stderr, "Resize to %ix%i\n", mainSize.width(), mainSize.height() );
zorglub's avatar
zorglub committed
209 210
    resize( mainSize );
    mainSize = size();
zorglub's avatar
Icons  
zorglub committed
211

zorglub's avatar
zorglub committed
212
    setMinimumSize( PREF_W, addSize.height() );
zorglub's avatar
zorglub committed
213 214
}

215 216 217
/**********************************************************************
 * Handling of the components
 **********************************************************************/
218
void MainInterface::calculateInterfaceSize()
zorglub's avatar
zorglub committed
219
{
220
    int width = 0, height = 0;
221 222
    fprintf( stderr, "Calculating size\n" );
    if( bgWidget && bgWidget->isVisible() )
zorglub's avatar
zorglub committed
223
    {
224 225
        width = bgWidget->widgetSize.width();
        height = bgWidget->widgetSize.height();
zorglub's avatar
zorglub committed
226
        assert( !(playlistWidget && playlistWidget->isVisible() ) );
zorglub's avatar
zorglub committed
227
    }
228
    else if( playlistWidget && playlistWidget->isVisible() )
229
    {
230 231 232
        width = playlistWidget->widgetSize.width();
        height = playlistWidget->widgetSize.height();
        fprintf( stderr, "Have %ix%i playlist\n", width, height );
233
    }
234 235 236 237 238 239
    else if( videoIsActive )
    {
        width =  videoWidget->widgetSize.width() ;
        height = videoWidget->widgetSize.height();
        fprintf( stderr, "Video Size %ix%i\n", videoWidget->widgetSize.width(), videoWidget->widgetSize.height() );
    }
zorglub's avatar
Cleanup  
zorglub committed
240 241 242 243 244
    else
    {
        width = PREF_W - addSize.width();
        height = PREF_H - addSize.height();
    }
245 246
    mainSize.setWidth( width + addSize.width() );
    mainSize.setHeight( height + addSize.height() );
zorglub's avatar
zorglub committed
247
}
zorglub's avatar
zorglub committed
248

zorglub's avatar
zorglub committed
249
void MainInterface::resizeEvent( QResizeEvent *e )
250
{
251 252 253 254 255 256 257
    fprintf( stderr, "Resize event to %ix%i\n", e->size().width(), e->size().height() );
    /* Width : Always passed to all children. We are guaranteed it will
     *         not go below PREF_W
     * Height : Only passed to the only visible child
     */
    if( videoWidget )
    {
zorglub's avatar
zorglub committed
258 259
       if( videoIsActive )
        {
260 261
        videoWidget->widgetSize.setWidth( e->size().width() -
                                           addSize.width() );
zorglub's avatar
zorglub committed
262
 
263 264 265 266
            videoWidget->widgetSize.setHeight( e->size().height() -
                                              addSize.height() );
            videoWidget->updateGeometry();
        }
zorglub's avatar
zorglub committed
267 268 269
        fprintf( stderr, "Video set to %ix%i\n",
                videoWidget->widgetSize.width(),
                videoWidget->widgetSize.height() );
270 271 272
    }
    if( playlistWidget )
    {
zorglub's avatar
zorglub committed
273 274
       if( playlistWidget->isVisible() )
        {
275 276
        playlistWidget->widgetSize.setWidth( e->size().width() -
                                              addSize.width() );
zorglub's avatar
zorglub committed
277
 
278 279 280 281 282 283 284 285 286
            playlistWidget->widgetSize.setHeight( e->size().height() -
                                                 addSize.height() );
            playlistWidget->updateGeometry();
        }
        fprintf( stderr, "Playlist set to %ix%i\n",playlistWidget->widgetSize.width(), playlistWidget->widgetSize.height() );
    }
//  videoWidget->widgetSize.setHeight( e->size().height() - addSize.height() );
//  videoWidget->widgetSize.setWidth( e->size().width() - addSize.width() );
//  videoWidget->updateGeometry() ;
287 288
}

289 290 291 292 293
void *MainInterface::requestVideo( vout_thread_t *p_nvout, int *pi_x,
                                   int *pi_y, unsigned int *pi_width,
                                   unsigned int *pi_height )
{
    void *ret = videoWidget->request( p_nvout,pi_x, pi_y, pi_width, pi_height );
294 295 296 297 298 299 300 301
    if( ret )
    {
        videoIsActive = true;
        if( playlistWidget && playlistWidget->isVisible() )
        {
            embeddedPlaylistWasActive = true;
            playlistWidget->hide();
        }
zorglub's avatar
zorglub committed
302 303 304 305 306
        if( bgWidget && bgWidget->isVisible() )
        {
            bgWidget->hide();
        }
        videoWidget->show();
307 308 309 310
        videoWidget->widgetSize = QSize( *pi_width, *pi_height );
        videoWidget->updateGeometry(); /// FIXME: Needed ?
        need_components_update = true;
    }
311 312 313 314 315 316
    return ret;
}

void MainInterface::releaseVideo( void *p_win )
{
    videoWidget->release( p_win );
zorglub's avatar
zorglub committed
317 318 319 320
    videoWidget->hide();
//    videoWidget->widgetSize = QSize( 1, 1 );
//    videoWidget->updateGeometry();

321 322
    if( embeddedPlaylistWasActive )
        playlistWidget->show();
zorglub's avatar
zorglub committed
323 324 325
    else if( bgWidget )
        bgWidget->show();

326
    videoIsActive = false;
327
    need_components_update = true;
328 329
}

330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370
int MainInterface::controlVideo( void *p_window, int i_query, va_list args )
{
    int i_ret = VLC_EGENERIC;
    switch( i_query )
    {
        case VOUT_GET_SIZE:
        {
            unsigned int *pi_width  = va_arg( args, unsigned int * );
            unsigned int *pi_height = va_arg( args, unsigned int * );
            *pi_width = videoWidget->widgetSize.width();
            *pi_height = videoWidget->widgetSize.height();
            i_ret = VLC_SUCCESS;
            break;
        }
        case VOUT_SET_SIZE:
        {
            unsigned int i_width  = va_arg( args, unsigned int );
            unsigned int i_height = va_arg( args, unsigned int );
//          if( !i_width && p_vout ) i_width = p_vout->i_window_width;
//          if( !i_height && p_vout ) i_height = p_vout->i_window_height;
            videoWidget->widgetSize = QSize( i_width, i_height );
            videoWidget->updateGeometry();
            need_components_update = true;
            i_ret = VLC_SUCCESS;
            break;
        }
        case VOUT_SET_STAY_ON_TOP:
        default:
            msg_Warn( p_intf, "unsupported control query" );
            break;
    }
    return i_ret;
}

void MainInterface::playlist()
{
    // Toggle the playlist dialog
    if( !playlistEmbeddedFlag )
    {
        if( playlistWidget )
        {
371
            /// \todo Destroy it
372 373 374 375 376 377 378 379 380 381
        }
        THEDP->playlistDialog();
        return;
    }

    if( !playlistWidget )
    {
        PlaylistDialog::killInstance();
        playlistWidget = new PlaylistWidget( p_intf );
        ui.vboxLayout->insertWidget( 0, playlistWidget );
zorglub's avatar
zorglub committed
382

383
        fprintf( stderr, "BUG ! Do not set size if it has already been changed\n" );
384
        playlistWidget->widgetSize = settings->value( "playlistSize",
zorglub's avatar
zorglub committed
385
                                               QSize( 650, 310 ) ).toSize();
386
        playlistWidget->hide();
387 388
    }
    /// Todo, reset its size ?
389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404
    if( playlistWidget->isVisible() )
    {
        fprintf( stderr, "hiding playlist\n" );
        playlistWidget->hide();
        if( videoIsActive )
        {
            videoWidget->show();
        }
    }
    else
    {
        fprintf( stderr, "showing playlist\n" );
        playlistWidget->show();
        if( videoIsActive )
            videoWidget->hide();
    }
405 406 407 408 409

    calculateInterfaceSize();
    resize( mainSize );
}

zorglub's avatar
zorglub committed
410 411
/* Video widget cannot do this synchronously as it runs in another thread */
/* Well, could it, actually ? Probably dangerous ... */
412 413
void MainInterface::doComponentsUpdate()
{
414 415
    calculateInterfaceSize();
    resize( mainSize );
416 417 418 419 420
}

/************************************************************************
 * Other stuff
 ************************************************************************/
421 422 423
void MainInterface::keyPressEvent( QKeyEvent *e )
{
    int i_vlck = 0;
zorglub's avatar
zorglub committed
424
    /* Handle modifiers */
425 426 427 428 429 430
    if( e->modifiers()& Qt::ShiftModifier ) i_vlck |= KEY_MODIFIER_SHIFT;
    if( e->modifiers()& Qt::AltModifier ) i_vlck |= KEY_MODIFIER_ALT;
    if( e->modifiers()& Qt::ControlModifier ) i_vlck |= KEY_MODIFIER_CTRL;
    if( e->modifiers()& Qt::MetaModifier ) i_vlck |= KEY_MODIFIER_META;

    bool found = false;
zorglub's avatar
zorglub committed
431 432
    /* Look for some special keys */
#define HANDLE( qt, vk ) case Qt::qt : i_vlck |= vk; found = true;break
433 434
    switch( e->key() )
    {
zorglub's avatar
zorglub committed
435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460
        HANDLE( Key_Left, KEY_LEFT );
        HANDLE( Key_Right, KEY_RIGHT );
        HANDLE( Key_Up, KEY_UP );
        HANDLE( Key_Down, KEY_DOWN );
        HANDLE( Key_Space, KEY_SPACE );
        HANDLE( Key_Escape, KEY_ESC );
        HANDLE( Key_Enter, KEY_ENTER );
        HANDLE( Key_F1, KEY_F1 );
        HANDLE( Key_F2, KEY_F2 );
        HANDLE( Key_F3, KEY_F3 );
        HANDLE( Key_F4, KEY_F4 );
        HANDLE( Key_F5, KEY_F5 );
        HANDLE( Key_F6, KEY_F6 );
        HANDLE( Key_F7, KEY_F7 );
        HANDLE( Key_F8, KEY_F8 );
        HANDLE( Key_F9, KEY_F9 );
        HANDLE( Key_F10, KEY_F10 );
        HANDLE( Key_F11, KEY_F11 );
        HANDLE( Key_F12, KEY_F12 );
        HANDLE( Key_PageUp, KEY_PAGEUP );
        HANDLE( Key_PageDown, KEY_PAGEDOWN );
        HANDLE( Key_Home, KEY_HOME );
        HANDLE( Key_End, KEY_END );
        HANDLE( Key_Insert, KEY_INSERT );
        HANDLE( Key_Delete, KEY_DELETE );

461 462 463
    }
    if( !found )
    {
zorglub's avatar
zorglub committed
464
        /* Force lowercase */
465 466 467 468 469 470 471 472
        if( e->key() >= Qt::Key_A && e->key() <= Qt::Key_Z )
            i_vlck += e->key() + 32;
        /* Rest of the ascii range */
        else if( e->key() >= Qt::Key_Space && e->key() <= Qt::Key_AsciiTilde )
            i_vlck += e->key();
    }
    if( i_vlck >= 0 )
    {
473
        var_SetInteger( p_intf->p_libvlc, "key-pressed", i_vlck );
474 475 476 477 478 479
        e->accept();
    }
    else
        e->ignore();
}

zorglub's avatar
zorglub committed
480 481
void MainInterface::stop()
{
482
    playlist_Stop( THEPL );
zorglub's avatar
zorglub committed
483 484 485
}
void MainInterface::play()
{
486 487 488 489 490 491 492 493
    if( !THEPL->i_size || !THEPL->i_enabled )
    {
        /* The playlist is empty, open a file requester */
        THEDP->openDialog();
        setStatus( 0 );
        return;
    }
    THEMIM->togglePlayPause();
zorglub's avatar
zorglub committed
494 495 496
}
void MainInterface::prev()
{
497
    playlist_Prev( THEPL );
zorglub's avatar
zorglub committed
498 499 500
}
void MainInterface::next()
{
501
    playlist_Next( THEPL );
zorglub's avatar
zorglub committed
502 503 504 505 506 507 508 509 510
}

void MainInterface::setDisplay( float pos, int time, int length )
{
    char psz_length[MSTRTIME_MAX_SIZE], psz_time[MSTRTIME_MAX_SIZE];
    secstotimestr( psz_length, length );
    secstotimestr( psz_time, time );
    QString title;
    title.sprintf( "%s/%s", psz_time, psz_length );
511
    timeLabel->setText( " "+title+" " );
zorglub's avatar
zorglub committed
512 513 514 515
}

void MainInterface::setName( QString name )
{
516
    nameLabel->setText( " " + name+" " );
zorglub's avatar
zorglub committed
517 518
}

519 520
void MainInterface::setStatus( int status )
{
zorglub's avatar
zorglub committed
521
    if( status == 1 ) // Playing
522 523 524 525 526
        ui.playButton->setIcon( QIcon( ":/pixmaps/pause.png" ) );
    else
        ui.playButton->setIcon( QIcon( ":/pixmaps/play.png" ) );
}

zorglub's avatar
zorglub committed
527 528
static bool b_my_volume;

zorglub's avatar
zorglub committed
529 530
void MainInterface::updateOnTimer()
{
zorglub's avatar
zorglub committed
531 532
    if( p_intf->b_die )
    {
zorglub's avatar
zorglub committed
533 534
        QApplication::closeAllWindows();
        DialogsProvider::killInstance();
zorglub's avatar
zorglub committed
535 536
        QApplication::quit();
    }
537 538 539 540 541 542
    if( need_components_update )
    {
        doComponentsUpdate();
        need_components_update = false;
    }

zorglub's avatar
zorglub committed
543 544 545 546 547 548 549 550 551 552 553
    audio_volume_t i_volume;
    aout_VolumeGet( p_intf, &i_volume );
    i_volume = (i_volume *  200 )/ AOUT_VOLUME_MAX ;
    int i_gauge = ui.volumeSlider->value();
    b_my_volume = false;
    if( i_volume - i_gauge > 1 || i_gauge - i_volume > 1 )
    {
        b_my_volume = true;
        ui.volumeSlider->setValue( i_volume );
        b_my_volume = false;
    }
zorglub's avatar
zorglub committed
554 555 556 557 558 559
}

void MainInterface::closeEvent( QCloseEvent *e )
{
    hide();
    p_intf->b_die = VLC_TRUE;
zorglub's avatar
zorglub committed
560
}
zorglub's avatar
zorglub committed
561

zorglub's avatar
zorglub committed
562 563 564 565 566 567 568 569 570 571
void MainInterface::updateVolume( int sliderVolume )
{
    if( !b_my_volume )
    {
        int i_res = sliderVolume * AOUT_VOLUME_MAX /
                            (2*ui.volumeSlider->maximum() );
        aout_VolumeSet( p_intf, i_res );
    }
}

zorglub's avatar
zorglub committed
572 573 574 575 576 577
static int InteractCallback( vlc_object_t *p_this,
                             const char *psz_var, vlc_value_t old_val,
                             vlc_value_t new_val, void *param )
{
    intf_dialog_args_t *p_arg = new intf_dialog_args_t;
    p_arg->p_dialog = (interaction_dialog_t *)(new_val.p_address);
zorglub's avatar
zorglub committed
578

zorglub's avatar
zorglub committed
579 580
    MainInterface *p_interface = (MainInterface*)param;
    DialogEvent *event = new DialogEvent( INTF_DIALOG_INTERACTION, 0, p_arg );
581
    QApplication::postEvent( THEDP, static_cast<QEvent*>(event) );
zorglub's avatar
zorglub committed
582 583
    return VLC_SUCCESS;
}