main_interface.cpp 18.8 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
bool embeddedPlaylistWasActive;
bool videoIsActive;
73
QSize savedVideoSize;
74

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

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

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

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

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

95 96
    setFocusPolicy( Qt::StrongFocus );

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 129
    /* 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 );
130 131 132 133

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

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

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

zorglub's avatar
Cleanup  
zorglub committed
145 146 147 148
    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
149 150 151 152 153 154 155 156 157 158
    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
159 160

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

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

170 171 172 173 174 175 176
    /* 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
177 178 179
    BUTTON_SET( playlist, volume-low.png, playlistEmbeddedFlag ?
                                                qtr( "Show playlist" ) :
                                                qtr( "Open playlist" ) );
zorglub's avatar
zorglub committed
180

zorglub's avatar
zorglub committed
181
    /* Set initial size */
zorglub's avatar
zorglub committed
182
    resize ( PREF_W, PREF_H );
183

184
    addSize = QSize( ui.vboxLayout->margin() * 2, PREF_H );
185
    if( videoEmbeddedFlag )
186
    {
187
        videoWidget = new VideoWidget( p_intf );
188
        videoWidget->widgetSize = QSize( 1, 1 );
189 190 191
        videoWidget->resize( videoWidget->widgetSize );
        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
    fprintf( stderr, "Setting to %ix%i\n", width + addSize.width() , height + addSize.height() );
246 247
    mainSize.setWidth( width + addSize.width() );
    mainSize.setHeight( height + addSize.height() );
zorglub's avatar
zorglub committed
248
}
zorglub's avatar
zorglub committed
249

zorglub's avatar
zorglub committed
250
void MainInterface::resizeEvent( QResizeEvent *e )
251
{
252 253 254 255 256 257 258 259 260
    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 )
    {
        videoWidget->widgetSize.setWidth( e->size().width() -
                                           addSize.width() );
261 262
        if( videoIsActive && videoWidget->widgetSize.height() > 1 )
        {
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
        if( bgWidget && bgWidget->isVisible() )
        {
            bgWidget->hide();
        }
306 307 308 309
        videoWidget->widgetSize = QSize( *pi_width, *pi_height );
        videoWidget->updateGeometry(); /// FIXME: Needed ?
        need_components_update = true;
    }
310 311 312 313 314 315
    return ret;
}

void MainInterface::releaseVideo( void *p_win )
{
    videoWidget->release( p_win );
316 317
    videoWidget->widgetSize = QSize( 0, 0 );
    videoWidget->resize( videoWidget->widgetSize );
zorglub's avatar
zorglub committed
318

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

324
    videoIsActive = false;
325
    need_components_update = true;
326 327
}

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
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 )
        {
369
            /// \todo Destroy it
370 371 372 373 374 375 376 377 378 379 380
        }
        THEDP->playlistDialog();
        return;
    }

    if( !playlistWidget )
    {
        PlaylistDialog::killInstance();
        playlistWidget = new PlaylistWidget( p_intf );
        ui.vboxLayout->insertWidget( 0, playlistWidget );
        playlistWidget->widgetSize = settings->value( "playlistSize",
zorglub's avatar
zorglub committed
381
                                               QSize( 650, 310 ) ).toSize();
382
        playlistWidget->hide();
383 384
    }
    /// Todo, reset its size ?
385 386 387 388 389 390
    if( playlistWidget->isVisible() )
    {
        fprintf( stderr, "hiding playlist\n" );
        playlistWidget->hide();
        if( videoIsActive )
        {
391 392 393
            videoWidget->widgetSize = savedVideoSize;
            videoWidget->resize( videoWidget->widgetSize );
            videoWidget->updateGeometry();
394 395 396 397 398 399 400
        }
    }
    else
    {
        fprintf( stderr, "showing playlist\n" );
        playlistWidget->show();
        if( videoIsActive )
401 402 403 404 405 406
        {
            savedVideoSize = videoWidget->widgetSize;
            videoWidget->widgetSize.setHeight( 0 );
            videoWidget->resize( videoWidget->widgetSize );
            videoWidget->updateGeometry();
        }
407
    }
408 409 410 411 412

    calculateInterfaceSize();
    resize( mainSize );
}

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

/************************************************************************
 * Other stuff
 ************************************************************************/
424 425 426
void MainInterface::keyPressEvent( QKeyEvent *e )
{
    int i_vlck = 0;
zorglub's avatar
zorglub committed
427
    /* Handle modifiers */
428 429 430 431 432 433
    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
434 435
    /* Look for some special keys */
#define HANDLE( qt, vk ) case Qt::qt : i_vlck |= vk; found = true;break
436 437
    switch( e->key() )
    {
zorglub's avatar
zorglub committed
438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463
        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 );

464 465 466
    }
    if( !found )
    {
zorglub's avatar
zorglub committed
467
        /* Force lowercase */
468 469 470 471 472 473 474 475
        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 )
    {
476
        var_SetInteger( p_intf->p_libvlc, "key-pressed", i_vlck );
477 478 479 480 481 482
        e->accept();
    }
    else
        e->ignore();
}

zorglub's avatar
zorglub committed
483 484
void MainInterface::stop()
{
485
    playlist_Stop( THEPL );
zorglub's avatar
zorglub committed
486 487 488
}
void MainInterface::play()
{
489 490 491 492 493 494 495 496
    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
497 498 499
}
void MainInterface::prev()
{
500
    playlist_Prev( THEPL );
zorglub's avatar
zorglub committed
501 502 503
}
void MainInterface::next()
{
504
    playlist_Next( THEPL );
zorglub's avatar
zorglub committed
505 506 507 508 509 510 511 512 513
}

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 );
514
    timeLabel->setText( " "+title+" " );
zorglub's avatar
zorglub committed
515 516 517 518
}

void MainInterface::setName( QString name )
{
519
    nameLabel->setText( " " + name+" " );
zorglub's avatar
zorglub committed
520 521
}

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

zorglub's avatar
zorglub committed
530 531
static bool b_my_volume;

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

zorglub's avatar
zorglub committed
546 547 548 549 550 551 552 553 554 555 556
    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
557 558 559 560 561 562
}

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

zorglub's avatar
zorglub committed
565 566 567 568 569 570 571 572 573 574
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
575 576 577 578 579 580
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
581

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