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