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;
}